我正在使用 Amazon DynamoDB 为活动流存储基于事件的数据。
我会自动为每个月创建一个新表,并打算将事件数据存储在每个相关表中。通过这种方式,我可以在需要时快速删除旧的月份,只需删除旧表,以及更好地为更新的表提供负载。
然而,根据阅读亚马逊文档,我可以看到哈希键本身非常重要。
预置吞吐量取决于主键选择以及各个项目的工作负载模式。在存储数据时,Amazon DynamoDB 将表中的项目划分为多个分区,并主要基于散列键元素分发数据。与表关联的预置吞吐量也在分区之间平均分配,不跨分区共享预置吞吐量。
我很难理解这一点。
因此,我的问题是,请注意,这两者之间哪个哈希键更好:
1382465533_john.doe
或者:
john.doe_1382465533
上面的键是用户 ID 和事件时间戳的组合。
如何查询这些表...
这些表将没有范围键,因为对于此用例,它不是必需的。
此数据将用于为用户构建活动提要。
当事件发生时,单个活动 id 被推送(扇出)到用户关注者redis列表中(每个用户一个列表);
因此,当用户请求他们的流时,我们会执行以下操作:
- 从Redis获取 activityid 的列表
- 遍历 activityid 并构造一个 BatchGetItem 查询以将它们从 DynamoDB 中提取出来。
考虑到所有这些,我需要了解的是如何最好地在活动表中定义我的哈希键。时间戳优先或用户标识优先。DynamoDB 使用什么逻辑来自动对哈希键进行分区?
提前感谢您的任何建议。