DynamoDB 支持事务吗?

支持。DynamoDB 通过 TransactWriteItemsTransactGetItems 提供 ACID 事务。每个事务把同一账户与区域内一张或多张表上的最多 100 个动作,合成一次全有或全无的操作,合计大小上限为 4 MB。只要有任何一个动作失败,就一个都不会被应用。

两个事务 API

  • TransactWriteItems——原子地成批执行 PutUpdateDeleteConditionCheck 动作。同步且幂等。
  • TransactGetItems——在单个原子、一致的快照里读取多个项目。

规则与限制

  • 每个事务最多 100 个项目,可跨一张或多张表。
  • 所有表必须在同一账户与区域
  • 项目合计大小不能超过 4 MB
  • 不能在一个事务里对同一个项目下两次手。
  • 全局表上,ACID 保证只在事务运行的那个区域内成立——更改会在提交之后复制到其他区域,而处于多区域强一致性(MRSC)模式的全局表压根不支持事务 API。

原子性要花多少钱

同一个项目,两条路径,打开 ReturnConsumedCapacity

PutItem, one 920-byte item                 ConsumedCapacity 1
TransactWriteItems, the same single Put    ConsumedCapacity 2

一次事务写入是两次写入的容量,一次事务读取是两次读取的容量。持续下去,这个翻倍就是全部的取舍:每秒 100 次 1 KB 项目的写入,在 us-east-1 按需模式下每月 164.25 美元,而如果每一次都走事务,就是 328.50 美元。定价计算器里有一个事务一致性设置,正是为这个对比准备的。

那个不会应用两次的重试

一个超时的事务可能其实已经提交了,所以危险的是重试,而不是事务本身。ClientRequestToken 就是让重试变安全的东西。用同一个 token 把同一个 ADD counter :one 事务发两次:

TransactWriteItems  (token order-4711)     200
TransactWriteItems  (token order-4711)     200
GetItem counter                            {"N": "1"}

两次调用都成功了,而计数器只动了一次。这个 token 在第一次请求结束之后保持有效 10 分钟;之后再复用它,第二次调用就是一个新事务,计数器会再动一次。在窗口内复用它但改动了任何其他参数,DynamoDB 会返回 IdempotentParameterMismatch

事务与批处理的对比

BatchWriteItem 是逐个项目独立应用的(有些写入可能成功,另一些失败),而事务不同,它是全有或全无——当部分应用会毁掉你的数据时,就该用它。

深入了解

DynamoDB 事务里学习相关模式,并用表达式构建器构建它们所依赖的条件表达式。下载 DynoTable,把你的条目编辑暂存成可审阅的 diff,再作为一个事务批次一起提交。

参考资料

最后核实于 2026-07-13,依据上方链接的 AWS 官方文档;100 个动作的限制与 10 分钟幂等窗口于 2026-07-28 重新核对。

上方的 ConsumedCapacity 值与幂等重放复现于 2026-07-28,针对 DynamoDB Local 3.3.0,经由 @aws-sdk/client-dynamodb 3.1095.0;月度成本依据我们同步的 AWS 定价表中 us-east-1 按需写请求单元价格计算。

无需控制台即可使用 DynamoDB

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

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