DynamoDB分区键唯一时是否还需要设置排序键?
结论
如果你的分区键已经可以唯一标识表中每一条数据,排序键不是必填配置,如果当前业务没有额外查询、扩展类的需求,完全可以不配置,避免增加不必要的主键逻辑复杂度。
如果后续有相关业务诉求,给唯一分区键搭配排序键可以获得以下实用优势:
配置排序键的具体优势
灵活的批量查询能力
你可以给排序键设置分类标识、时间等通用前缀/字段,实现同类数据的批量检索。比如你用用户ID作为唯一分区键,排序键设置为等级#注册时间,就可以直接筛选出特定等级、特定注册时间段的用户列表,不需要额外创建二级索引。结果自动排序免计算
DynamoDB会按排序键的顺序自动存储同一分区下的所有数据,查询时可以直接通过ScanIndexForward参数指定返回结果的升/降序,不需要在业务代码中额外做排序处理,减少计算耗时和业务逻辑复杂度。降低后续业务改造成本
万一后续业务逻辑调整,原本唯一的分区键不再满足唯一要求(比如原本用订单ID作为唯一分区键,后续需要把补单、关联售后单和原订单存在同一个分区下),已有的排序键可以直接用来区分同分区下的不同数据,不需要重构整个表的主键结构,改造成本极低。细粒度权限管控
可以基于排序键的前缀配置IAM权限策略,比如只允许某个业务角色查询排序键前缀为OPEN#的公开数据,不需要额外新增权限判断字段,管控粒度更灵活。缓解写入热点提升吞吐量
如果你有超大规模的写入需求,哪怕分区键逻辑上唯一,也可以给排序键设置随机后缀,把单分区的写入压力拆分到不同排序键位置,避免单分区写入热点,提升整表的写入吞吐量上限。
内容的提问来源于stack exchange,提问作者AciD
相关产品推荐
相关产品推荐

