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

百万级DynamoDB表获取存储条目计数的高效实现方案咨询

方案评估与建议

方案优劣对比

  • 方案1(Query直接计数):完全不适配你的场景。百万级条目规模下,若单个商铺商品量级超过几十条,每次计数都需要扫描全量匹配条目,不仅延迟会随商品数量线性增长,读成本也非常高——DynamoDB的Query计数按扫描数据量计算读容量,单商铺万级商品的单次计数就要消耗几十甚至上百读单位,性价比远低于查询预存计数。
  • 方案2(事务同步更新计数):成本和延迟表现都是三者最差。DynamoDB事务写的成本是普通写的2倍,并发写入场景下很容易出现事务冲突导致重试,反而进一步拉高延迟和开销,而你本身允许最终一致性,完全没必要为了强一致的计数付出额外成本。
  • 方案3(Streams触发异步更新计数):你的判断是正确的,该方案是三者中最适配需求的。写入侧不需要额外操作,完全不影响写入延迟和写入成本;Streams的异步处理延迟通常在百毫秒级,完全满足最终一致性要求;查询侧只需要1次GetItem调用,仅消耗1个读容量单位,成本极低。

优化建议

  • 计数项直接存在当前DynamoDB表即可,不需要额外建表:可以把计数项的partitionKey设为{商铺ID}+productCount,sortKey设为固定值如#META#COUNT,和普通商品条目区分开,查询更便捷。
  • 处理Streams事件时要做幂等校验:因为DynamoDB Streams存在重复投递的可能,更新计数时不要直接覆盖值,要用DynamoDB的增量更新表达式SET productCount = productCount + :delta,其中:delta对应新增+1、删除-1,避免重复事件导致计数不准。
  • 高并发场景下可以对同商铺的Streams事件做批量聚合,同一个商铺的多次变更合并为一次计数更新,进一步降低写计数的成本。

内容的提问来源于stack exchange,提问作者Shubham Agarwal Bhewanewala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:36:01