DynamoDB はトランザクションに対応していますか?
はい。DynamoDB は TransactWriteItems と TransactGetItems による ACID トランザクションに対応しています。1 つのトランザクションは、同一アカウント・同一リージョンにある 1 つ以上のテーブルをまたぐ最大 100 アクションを、単一のオール・オア・ナッシングの操作にまとめます。合計サイズの上限は 4 MB です。いずれかのアクションが失敗すれば、どれも適用されません。
2 つのトランザクション API
TransactWriteItems—Put、Update、Delete、ConditionCheckのアクションをアトミックにまとめます。同期的かつべき等です。TransactGetItems— 複数のアイテムを、単一のアトミックで一貫したスナップショットとして読み取ります。
ルールと上限
- 1 トランザクションあたり 100 アイテム まで、1 つ以上のテーブルにまたがれます。
- すべてのテーブルが 同一アカウント・同一リージョン にある必要があります。
- 合計アイテムサイズは 4 MB を超えられません。
- 1 つのトランザクションで同じアイテムを 2 回対象にすることは できません。
- グローバルテーブル では、ACID 保証はトランザクションが実行されたリージョン内でのみ適用されます。変更はコミット後に他リージョンへレプリケートされ、マルチリージョン強整合(MRSC)モードのグローバルテーブルはトランザクション API にそもそも対応していません。
アトミック性の値段
同じアイテムを 2 通りの経路で、ReturnConsumedCapacity を有効にして。
PutItem, one 920-byte item ConsumedCapacity 1
TransactWriteItems, the same single Put ConsumedCapacity 2トランザクション書き込みは書き込み 2 回分のキャパシティ、トランザクション読み取りは読み取り 2 回分です。継続的に見れば、この 2 倍がトレードオフのすべてです。1 KB のアイテムを毎秒 100 回書き込むと us-east-1 のオンデマンドで月 $164.25、そのすべてをトランザクション経由にすると $328.50 です。料金計算ツールには、まさにこの比較のためのトランザクション整合性の設定があります。
2 回は適用されないリトライ
タイムアウトしたトランザクションでも、コミットは済んでいるかもしれません。危ないのはトランザクションではなくリトライのほうです。そのリトライを安全にするのが ClientRequestToken です。同じ ADD counter :one のトランザクションを、1 つのトークンで 2 回送るとこうなります。
TransactWriteItems (token order-4711) 200
TransactWriteItems (token order-4711) 200
GetItem counter {"N": "1"}どちらの呼び出しも成功し、カウンターは 1 回だけ動きました。トークンは最初のリクエストが終わってから 10 分間有効です。それより後に再利用すると 2 回目の呼び出しは新しいトランザクションになるので、カウンターはまた動きます。有効期間内に、他のパラメータを 1 つでも変えて再利用すると、DynamoDB は IdempotentParameterMismatch を返します。
トランザクションとバッチ
各アイテムをそれぞれ単独で適用する BatchWriteItem(一部の書き込みが着地し、他が失敗しうる)と違い、トランザクションはオール・オア・ナッシングです。部分的な適用がデータを壊してしまう場面で使いましょう。
さらに詳しく
DynamoDB のトランザクションでパターンを学び、それが依存する条件式は Expression Builder で組み立てましょう。DynoTable をダウンロードすれば、アイテムの編集をレビュー可能な差分としてステージし、トランザクションのバッチとしてまとめてコミットできます。
参考資料
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- How DynamoDB global tables work — Amazon DynamoDB Developer Guide
最終検証日 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 オンデマンド書き込みリクエストユニット単価から算出しました。