【发布时间】:2016-10-21 18:01:06
【问题描述】:
目前我正在将数据从 Cassandra 数据库移动到 amazon dynamoDB。当我了解 dynamoDB 实现的概念时,我对 dynamoDB 中的计数器更新有一些疑问。
问题 1:
在 Cassandra 中,我们通常使用 store_id、store_id+date、campaign_id、campaign_id+date 组合来更新计数器。
在 amazon dynamoDB 中,我们有 HASHKEY 和 RANGEKEY。我们只能使用 HASHKEY 或 HASHKEY 和 RANGEKEY。在这里我有两个选择。
选项 1:
将 store_id/campaign_id 放在 HASHKEY 上,将 date 放在 RANGEKEY 上。
选项 2:
和 Cassandra 结构一样,我可以使用 store_id、store_id+date、campaign_id、campaign_id+date 作为 HASHKEY(无 Range 键)。
哪个选项适合最佳实践?
当我们从 dynamoDB 读取值时,我需要 store_id 和 campaign_id 的总计数器值以及用户给出的范围。
问题 2:
我想计算特定商店的广告系列加载次数。当用户访问商店时,我们将加载广告系列。例如,如果“alpha”用户访问商店并且我们展示了广告系列,则增加广告系列负载计数器。
我需要根据用户给定的时间段计算广告系列负载。在 Cassandra 中,我实现了以下结构。
campaign_id - 加载次数 - 10(10 个用户看过这个活动)
campaign_id + 20160403 - 加载次数 - 4(4 个用户在此数据上看到了此活动)
如何在 Amazon dynamoDB 中实现相同的概念。
我注意到使用 dynamoDB 我们不能使用批量更新来更新多个项目(键)中的属性(计数器)。在这种情况下,我们将拥有比 Cassandra 更多的写入次数。
例子:
campaign_load 计数器:
使用 hector api,我们可以使用以下组合一次更新campaign_load 计数器。 store_id、store_id + datekey、campaign_id、campaign_id + datekey。
(4 个键,一次写入)- 我正在使用 hector API 连接 Cassandra 节点。
但在 amazon dynamoDB 中,我们需要进行 4 次写入。项目中的每个属性都会单独更新。 (4 个键,4 次写入)
Writebatch 概念在这里没有用。因为它将覆盖现有项目而不更新计数器。
如果计数器增加,写入次数也会增加。
在我的应用程序中,我使用了更多计数器。有什么建议可以更新计数器吗?
【问题讨论】:
-
其实问题2不清楚。如果您能提供实际需求而不是您的理解和一些部分解决方案,那就清楚了。
-
感谢您的回答。我已经编辑了问题 2。希望您理解这个概念
-
更新了答案2。
标签: amazon-web-services amazon-dynamodb nosql