DynamoDB 是最终一致性的吗?

默认是。DynamoDB 的读取是最终一致性的:紧跟着一次写入的读取可能反映不出那次写入,但过一小会儿再读一次就会返回最新的项目。你可以在表和 LSI 上选择强一致性读取;全局二级索引则始终是最终一致性的。

最终一致性(默认)

一次最终一致性读取可能反映不出刚刚完成的写入。过一会儿再读一次,它就会返回当前值。这是默认模式,而且计费只有强一致性读取的一半。

强一致性读取

设置 ConsistentRead: true 就能拿到最近提交的数据(一次强一致性读取)。基表和本地二级索引(LSI)支持这一点——但全局二级索引(GSI)和 DynamoDB Streams 支持,它们始终是最终一致性的。

GSI 这个例外是在 API 层面强制执行的,而不是留给你自觉遵守:对一个全局二级索引带 ConsistentRead: trueQuery 会让整个请求失败,而不是悄悄降级(确切的拒绝信息)。

这个选择要花多少钱

"价格减半"是文档上的规则;下面是它折算出来的数。假设在 us-east-1 每秒读取 1,000 次 4 KB 的项目,别的什么都没有:

一致性每次读取的读取单元按需 / 每月预置 / 每月
最终一致性0.5$164.25$47.45(500 RCU)
强一致性1$328.50$94.90(1,000 RCU)

输入参数放在这里,你可以自己核对:一个 730 小时的月份有 2,628,000 秒,每百万读取请求单元 $0.125,每 RCU-小时 $0.00013。一个 4 KB 的项目是一个读取单元,最终一致性下减半。

所以在这个工作负载上,每月 $164 就是"永不读到过期项目"的固定价码。对一个账户余额来说这很便宜,对一个商品列表来说则是浪费——这正是这个标志位是按请求而不是按表设置的原因。用定价计算器给你自己的数字标个价。

为什么是这样运作的

DynamoDB 会自动把你的数据复制到三个可用区。最终一致性让读取不必等待每一份副本就能被服务——更快也更便宜;强一致性则返回最新的数据。

那多区域(全局表)呢?

跨区域复制有它自己的一致性设置。全局表默认使用多区域最终一致性(MREC),变更通常在一秒或更短时间内复制到其他区域。你也可以改为创建一个多区域强一致性(MRSC)的全局表:写入会同步复制到至少一个其他区域,而在任何副本上的强一致性读取总是返回项目的最新版本。

深入了解

阅读 DynamoDB 一致性了解完整的取舍。下载 DynoTable 可以在查询上切换读取一致性。

参考资料

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档;单价已于 2026-07-28 重新核对。

GSI 的拒绝行为于 2026-07-28 通过 @aws-sdk/client-dynamodb 3.1095.0 针对 DynamoDB Local 3.3.0(amazon/dynamodb-local:latest)复现,而成本表由计算器所用的同一份定价数据算出。

无需控制台即可使用 DynamoDB

一款快速的 DynamoDB 桌面客户端,可运行 DynamoDB 无法执行的真正 SQL——JOINs、GROUP BY、聚合——并支持可视化编辑和运行在你自己的 Bedrock 密钥上的 AI agent。

30 天免费试用,无需信用卡 — 之后为无时间限制的免费版。