このパターンを使用すべきケース
これらのパターンは、DynamoDB 項目の一括更新を効率的に実行するうえで役立ちます。
DynamoDB シェルは、本番稼働のユースケースではサポートされていません。
TransactWriteItems
– 条件付きまたは条件なしの最大 100 の個別の更新。all-or-nothing の ACID バンドルとして実行されます。トレードオフ — 追加のスループットが使用され、1 KB の書き込みあたり 2 WCU が使用されます。
PartiQL
BatchExecuteStatement
– 条件付きまたは条件なしで、最大 25 件の更新。トレードオフ – リクエストを 25 のバッチで分散するために、追加のロジックが必要です。
AWS Step Functions – AWS Lambda に精通しているデベロッパー向けのレート制限付き一括オペレーション。
トレードオフ — 実行時間はレート制限に反比例します。Lambda 関数の最長タイムアウトによって制限されます。この機能では、読み取りと書き込みの間に発生するデータ変更が上書きされる可能性があります。詳細については、「Backfilling an Amazon DynamoDB Time to Live attribute using Amazon EMR: Part 2
」を参照してください。 -
AWS Glue および Amazon EMR – マネージド並列処理によるレート制限付き一括オペレーション。時間的制約のないアプリケーションや更新の場合、これらのオプションはスループットのごく一部しか使用せずにバックグラウンドで実行できます。どちらのサービスも、emr-dynamodb-connector を使用して DynamoDB オペレーションを実行します。これらのサービスは、大規模な読み取りを実行した後、レート制限のオプションを使用して更新済みの項目を大量に書き込みます。
トレードオフ — 実行時間はレート制限に反比例します。この機能では、読み取りと書き込みの間に発生するデータ変更が上書きされる可能性があります。グローバルセカンダリインデックス (GSI) からの読み取りはできません。詳細については、「Backfilling an Amazon DynamoDB Time to Live attribute using Amazon EMR: Part 2
」を参照してください。 -
DynamoDB シェル – SQL のようなクエリを使用したレート制限付き一括オペレーション。効率を向上させるために GSI から読み取ることができます。
トレードオフ — 実行時間はレート制限に反比例します。「Rate limited bulk operations in DynamoDB Shell
」を参照してください。
パターンの使用
オンデマンドスループットモードを使用する場合、特に一括更新については、コストに多大な影響が及ぶ可能性があります。プロビジョンドスループットモードを使用する場合、速度とコストの間にトレードオフが発生します。レート制限パラメータを厳密に設定すると、処理時間が非常に長くなる可能性があります。平均項目サイズとレート制限を使用すると、更新の速度を大まかに判断できます。
別の方法として、更新プロセスの予想期間と平均項目サイズに基づいて、プロセスに必要なスループットの量を決定することもできます。各パターンで共有されているブログのリファレンスには、パターン使用の戦略、実装、制限に関する詳細が記載されています。詳細については、「Cost-effective bulk processing with Amazon DynamoDB
ライブ DynamoDB テーブルに対して一括更新を実行するには、複数の方法があります。適切なアプローチは、ACID やべき等性の要件、更新する項目数、API の知識などの要因によって異なります。コストと時間の間のトレードオフを考慮することが重要となります。上記のほとんどのアプローチでは、一括更新ジョブで使用されるスループットをレート制限するオプションが提供されています。