给定user_id和group_id时DynamoDB Composite Key与Simple Key查询速度是否一致
结论
两种方案的单条记录查询速度基本一致,性能差异可以忽略不计。
原因说明
首先明确两种user_group_data表的主键设计逻辑:
- 方案1(复合主键):分区键为
user_id,排序键为group_id - 方案2(简单主键):分区键为
user_id与group_id的拼接值
针对同时传入user_id、group_id的单条查询场景:
- DynamoDB的查询核心逻辑是只要提供完整的分区键值,就能直接定位到对应的存储分区,无需跨分区扫描。
- 方案1中你传入了完整的分区键
user_id+ 完整的排序键group_id,定位到分区后,DynamoDB可以通过排序键的有序索引直接命中唯一记录,时间复杂度为O(1)。 - 方案2中你提前拼接得到完整的分区键值传入,DynamoDB定位到分区后可以直接取出唯一对应的记录,时间复杂度同样为O(1)。
两者仅有的差异是业务侧拼接参数的微小开销,或是DynamoDB内部匹配排序键的微小开销,完全不会影响实际查询的响应速度。
额外设计提示
如果你的业务存在「仅传入user_id,查询该用户关联的所有group数据」的需求,方案1可以直接支持该查询,方案2则无法实现,需要额外建GSI才能满足,设计时需要结合业务查询场景选择。
内容的提问来源于stack exchange,提问作者Rish
相关产品推荐
相关产品推荐

