You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB分区键与复合键访问效率对比及建模实现机制问询

业务场景与DynamoDB建模疑问解答

业务场景

  • 模型包含多组属性,每个模型可通过OrderId和Version唯一标识
  • 每个OrderId平均对应2-3个Version
  • 仅存在两种访问模式:
    1. 通过OrderId+Version查询订单(实时操作)
    2. 删除指定OrderId下Version小于输入值的所有订单(定时任务,非实时)

两种DynamoDB建模方案

  1. 以OrderId为PartitionKey,Version为SortKey
  2. 将OrderId_Version拼接字符串作为唯一PartitionKey,不设置SortKey

注:假设两种方案的基数一致

疑问解答

方案1的GetItem定位逻辑

调用GetItem API时,DynamoDB先通过OrderId的哈希值确定存储分区。同一个PartitionKey下的所有数据会按照Version(SortKey)的顺序有序存储,确定分区后,会利用SortKey的有序性执行二分查找快速定位目标文档。因为SortKey是有序排列的,二分查找效率很高,完全能支撑实时查询的性能要求。

方案2的GetItem定位逻辑

方案2中每个项的PartitionKey(OrderId_Version拼接字符串)是全局唯一的。当通过哈希值找到对应分区后,DynamoDB会直接用这个唯一的PartitionKey值在分区内的哈希索引中精准匹配,直接命中目标文档,查找效率接近O(1)。


额外提一句:从你的业务需求来看,方案1更适配定时删除操作——可以直接用Query API指定OrderId,再加上Version < 输入值的条件批量获取待删除项;而方案2要实现这个删除,要么全表扫描,要么额外创建索引,效率会低不少。

内容的提问来源于stack exchange,提问作者Zeeshan Shamsuddeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:13:28