DynamoDB は結果整合性ですか?
デフォルトでは、はい。DynamoDB の読み取りは結果整合性です。書き込み直後の読み取りにはその書き込みが反映されていないことがありますが、少し後に読み直せば最新のアイテムが返ります。テーブルと LSI では強い整合性の読み取りを選べます。グローバルセカンダリインデックスは常に結果整合性です。
結果整合性(デフォルト)
結果整合性のある読み取りは、完了したばかりの書き込みを反映していないことがあります。少し待って読み直せば現在の値が返ります。これがデフォルトのモードで、強い整合性の半分の料率で課金されます。
強い整合性の読み取り
ConsistentRead: true を設定すると、直近にコミットされたデータが得られます(強い整合性のある読み取り)。これはベーステーブルとローカルセカンダリインデックス(LSI)でサポートされます。グローバルセカンダリインデックス(GSI)と DynamoDB Streams では サポートされません。これらは常に結果整合性です。
GSI の除外は API で強制されており、あなたが守るかどうかに任されてはいません。ConsistentRead: true を付けたグローバルセカンダリインデックスへの Query は、静かに格下げされるのではなくリクエスト全体が失敗します(正確な拒否文)。
この選択のコスト
「半額」は文書化された規則です。実際にいくらになるかがこれです。us-east-1 で 4 KB のアイテムを毎秒 1,000 回読み取り、それ以外は何もしない場合:
| 整合性 | 読み取り 1 回あたりの読み取りユニット | オンデマンド / 月 | プロビジョンド / 月 |
|---|---|---|---|
| 結果整合性 | 0.5 | $164.25 | $47.45(500 RCU) |
| 強い整合性 | 1 | $328.50 | $94.90(1,000 RCU) |
検算できるように入力も示します。730 時間の月は 2,628,000 秒、読み取りリクエストユニット 100 万あたり $0.125、RCU 時間あたり $0.00013 です。4 KB のアイテムは 1 読み取りユニットで、結果整合性ではその半分になります。
つまりこのワークロードで古いアイテムを決して読まないことの定価が月 $164 です。口座残高には安いものですし、商品一覧には無駄です。このフラグがテーブル単位ではなくリクエスト単位である理由がそれです。自分の数字は料金計算ツールで見積もってください。
なぜこうなっているのか
DynamoDB はデータを自動的に 3 つのアベイラビリティーゾーンにレプリケートします。結果整合性は、すべてのコピーを待たずに読み取りを返せるようにします。より速く、より安くなります。強い整合性は最新のデータを返します。
マルチリージョン(グローバルテーブル)ではどうなるか
リージョン間のレプリケーションには独自の整合性設定があります。グローバルテーブルのデフォルトはマルチリージョン結果整合性(MREC)で、変更は通常 1 秒以内に他のリージョンへレプリケートされます。代わりにマルチリージョン強整合性(MRSC)でグローバルテーブルを作成することもできます。この場合、書き込みは少なくとも 1 つの他リージョンへ同期的にレプリケートされ、どのレプリカに対する強い整合性の読み取りでも常にアイテムの最新バージョンが返ります。
さらに詳しく
すべてのトレードオフは DynamoDB の整合性を読んでください。クエリの読み取り整合性を切り替えるには DynoTable をダウンロードしてください。
参考資料
- DynamoDB read consistency — Amazon DynamoDB Developer Guide
- How DynamoDB global tables work — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
最終検証日 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)に対して再現し、コストの表は計算ツールと同じ料金データから算出しました。