【发布时间】:2018-04-27 14:31:00
【问题描述】:
我想创建一个 DynamoDB 表,以便我保存来自用户的注释。
我拥有的属性:
- user_id
- note_id (uuid)
- 类型
- 文字
我需要的主要查询:
- 获取某个用户的所有笔记
- 获取特定注释
- 获取特定类型的所有笔记(使用较少的查询)
我知道就性能和 DynamoDB 分区而言,note_id 将是正确的选择,因为它们是独一无二的,并且会平均分布在分区上,但另一方面,如果不扫描所有项目,则更难获取用户的所有注释或使用 GSI。如果它们是唯一的,我想拥有一个排序键没有任何意义。
另一种选择是使用 user_id 作为分区键,使用 note_id 作为排序键,但如果我的某些用户的笔记数量比其他用户多得多,这不会影响我的性能吗?
最好有一个唯一的分区键(如 note_id)以与 DynamoDB 分区一起很好地扩展并使用 GSI 创建我的查询,还是使用分区键代替我的主查询 (user_id)?
谢谢
【问题讨论】:
-
您的两次二次搜索是否真的独立于知道 user_id 而发生?我在自己做一些复杂的关键设计时发现了你的问题,你似乎过度概括了这些场景。
标签: amazon-web-services nosql amazon-dynamodb