2013-10-23 50 views
3

我正在使用Amazon DynamoDB为活动流存储基于事件的数据。哪个哈希键最适合DynamoDB中的事件数据?

我自动为每个月创建一个新表,并打算将事件数据存储在每个相关表中。这样,只要删除旧表格,我可以在需要时快速删除旧的月份,并且可以更好地调整到更新的表格。

但是,根据阅读亚马逊文档,我可以看到散列键本身非常重要。

预置吞吐量取决于主键选择和单个项目的工作负载模式。在存储数据时,Amazon DynamoDB将一个表项目分成多个分区, 主要基于散列键元素分配数据。与表关联的预配置吞吐量在分区之间也均匀分配 ,而不跨 分区跨预配吞吐量共享。

我很难找到我的头。

所以我的问题,与上面的是一种精神,这散列键是在这两者之间更好:

1382465533_john.doe

或:

john.doe_1382465533

上述键是用户标识和事件时间戳的组合。

如何将这些表将被查询...

这些表将有一系列关键作为,不要求这个用例。

此数据将用于为用户构建活动源。

当事件发生时,将个人活动ID推送(扇出)到用户关注者redis列表中(每个用户一个列表);

因此,当用户请求的流,我们做到以下几点:通过activityid的从Redis的

  • 环activityid年代

    1. 获取列表和构建BatchGetItem查询拉出来DynamoDB的。

    考虑到这一切,我需要了解的是如何最好地在活动表中定义我的散列键。首先是时间戳或首先使用userid。 DynamoDB使用什么逻辑来自动分区散列键?

    在此先感谢您的任何建议。

  • 回答

    2

    按你的问题,我会说,这不要紧,你如何撰写你的散列键,你将有使用精确值散列键查询您的表,DynamoDB会将其作为字符串反正。另一件事是,如果你正在撰写了一系列关键,那么你可能要组成它如下

    john.doe_1382465533

    ,因此您可以轻松地查询你的表像这样

    哈希键=什么的,范围键> = john.doe_1382460000

    这就是说,也许你可以摆脱你的Redis ACTI的

    散列关键字:用户ID

    范围键:时间戳

    活动的其他数据

    因此,而不是推动通过直接将其集成到DynamoDB这样VITY饲料DynamoDB中的活动以及活动ID添加到Redis中,您只需将其推入并从同一DynamoDB表中进行查询即可。我不知道这是否与您的其他应用程序兼容,但这是一个想法。