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 交易裡學各種模式,並用 Expression Builder 建構它們所仰賴的條件運算式。下載 DynoTable,把你的項目編輯暫存成可審閱的差異,再一起以交易式批次提交。

參考資料

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件;100 個動作的限制與 10 分鐘的冪等性有效期已於 2026-07-28 重新查核。

那些 ConsumedCapacity 值與冪等重播已於 2026-07-28 透過 @aws-sdk/client-dynamodb 3.1095.0,對照 DynamoDB Local 3.3.0 重現;每月成本則以我們同步的 AWS 定價表中 us-east-1 隨需寫入請求單位價格計算。

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。