DynamoDB表分区键与排序键选型咨询:用户ID搭配Profile ID是否合理?
关于DynamoDB表键设计的建议
非常建议将user id作为分区键、profile Id作为排序键,原因如下:
- 匹配唯一性约束:DynamoDB中分区键+排序键的组合天然具备唯一性,正好契合你每行数据(
user id和profile Id均唯一)的要求,能直接保证表中不会出现重复记录。 - 适配你的查询模式:你需要同时通过
user id和profile Id查询数据,这种键设计可以直接使用DynamoDB的GetItem操作——这是性能最优、成本最低的查询方式,能在毫秒级返回目标数据,完全匹配你的查询需求。 - 保证数据均匀分布:100万条记录的规模下,只要
user id的取值是高基数(比如自增ID、UUID这类分散性好的标识),就能让数据均匀分布到各个分区,避免热点分区问题,确保读写性能稳定。 - 预留扩展空间:如果后续需要新增查询场景(比如查询某个用户下的所有profile记录),这种设计也支持通过
Query操作仅指定user id来获取该分区的所有数据,比额外创建全局二级索引更高效。
额外注意
如果后续有单独通过profile Id查询的需求,可以考虑创建一个全局二级索引(GSI),将profile Id设为GSI的分区键;如果没有这类需求,无需额外创建,避免不必要的存储和读写成本。
内容的提问来源于stack exchange,提问作者Shivkumar Deshmukh
相关产品推荐
相关产品推荐

