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

生产环境运行的DynamoDB如何新增作为GSI排序键的新列?

DynamoDB 新增IDUpdatedAt字段的存量处理及搜索影响说明

存量数据IDUpdatedAt字段补充方案

  • 全量错峰回填
    先对生产表做全量备份避免操作风险,再通过Scan接口分批扫描全表数据,按照业务规则为每一行存量数据赋值IDUpdatedAt:如果有历史更新时间记录直接复用,无相关记录可使用行创建时间作为兜底值,最后通过BatchWriteItem接口批量更新回写,建议控制扫描和写入的吞吐量,错峰在业务低峰期执行,避免抢占线上业务的读写容量。
  • 触发式增量回填
    开启DynamoDB Stream,在应用访问存量旧数据的逻辑中增加判断,如果该行不存在IDUpdatedAt字段则实时补写后再返回结果,适合存量冷数据占比高、业务允许短时间内冷数据不展示在搜索结果中的场景,对线上业务性能影响最小,不需要主动执行全表扫描操作。

存量无IDUpdatedAt字段的行对搜索功能的影响

DynamoDB GSI有固定的同步规则:只有基表中同时包含GSI分区键和排序键两个字段的行,才会被自动同步到GSI中,缺少任意一个字段的行不会进入GSI,也不会触发同步报错。基于这个规则对搜索功能的影响如下:

  • 若你的搜索逻辑直接查询该GSI返回结果,缺少IDUpdatedAt字段的存量行不会出现在搜索结果中,不会抛出异常,但会出现结果数据缺失的问题。
  • 若你的搜索逻辑当前仍查询基表后做内存过滤排序,GSI的存在不会对现有逻辑产生任何影响,但无法获得GSI的排序加速效果。
  • 若你在GSI查询中使用FilterExpression过滤IDUpdatedAt,无该字段的行依旧不会被GSI返回,不会影响正常查询的性能和结果格式。

上线兼容建议

如果业务要求搜索结果必须包含全量数据,可以在回填阶段做双读兼容:新搜索逻辑优先查GSI获取新数据,同时兜底查询基表补全存量旧数据,等全量数据的IDUpdatedAt字段覆盖率达到100%后,再下线兜底逻辑,正式切全量流量到GSI搜索。

内容的提问来源于stack exchange,提问作者Ankit Rohilla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:48:04