読み込みと書き込みのオペレーション - Amazon DynamoDB

読み込みと書き込みのオペレーション

DynamoDB の読み込みオペレーションでは、パーティションキー値とオプションのソートキー値を指定して、テーブルから 1 つ以上の項目を取得できます。DynamoDB の書き込みオペレーションでは、テーブル内の項目を挿入、更新、または削除できます。このトピックでは、これら 2 つのオペレーションのキャパシティユニット消費量について説明します。

読み込みオペレーションのキャパシティユニット消費量

DynamoDB 読み込みリクエストは、強力な整合性、結果整合性、またはトランザクションのいずれかになります。

  • 4 KB 以下の項目の強力な整合性のある読み込みリクエストには、1 つの読み込みユニットが必要です。

  • 4 KB 以下の項目の結果整合性のある読み込みリクエストには、2 分の 1 の読み込みユニットが必要です。

  • 4 KB 以下の項目のトランザクション読み込みリクエストには、2 つの読み込みユニットが必要です。

DynamoDB 読み込み整合性モデルの詳細については「読み込み整合性」を参照してください。

読み込みの項目サイズは、次の 4 KB の倍数に切り上げられます。たとえば、3,500 バイトの項目の読み込みは、4 KB の項目の読み込みと同じスループットを消費します。

4 KB より大きい項目を読み込む必要がある場合、DynamoDB には追加の読み込みユニットが必要です。必要な読み込みユニットの合計数は、項目のサイズと、結果整合性のある読み込みまたは強力な整合性のある読み込みが必要かどうかによって異なります。例えば、項目のサイズが 8 KB の場合、1 つの強力な整合性のある読み込みを維持するには 2 つの読み込みユニットが必要です。結果整合性のある読み込みを選択した場合は 1 つの読み込みユニットが必要です。トランザクション読み込みリクエストを選択した場合は 4 つの読み込みユニットが必要です。

DynamoDB の読み込みオペレーションが読み込みユニットをどのように消費するかを以下に示します。

  • GetItem: テーブルから単一の項目を読み込みます。GetItem が消費する読み込みユニットの数を決定するには、項目のサイズを次の 4 KB の倍数まで切り上げます。強力な整合性のある読み込みを指定した場合は、この数値が必要な読み込みユニットの数になります。結果整合性のある読み込み (デフォルト) の場合は、この数値を 2 で割ります。

    たとえば、3.5 KB の項目を読み取ると、DynamoDB は項目サイズを 4 KB まで切り上げます。10 KB の項目を読み取ると、DynamoDB は項目サイズを 12 KB まで切り上げます。

  • BatchGetItem: 1 つ以上のテーブルから最大 100 個の項目を読み込みます。DynamoDB は、バッチ内の各項目を個別の GetItem リクエストとして処理します。DynamoDB は、まず各項目のサイズを次の 4 KB の倍数に切り上げてから合計サイズを計算します。この結果は、すべての項目の合計サイズと必ずしも一致しません。例えば、BatchGetItem がサイズ 1.5 KB と 6.5 KB の 2 つの項目を読み込むと、DynamoDB はサイズを 12 KB (4 KB + 8 KB) として計算します。DynamoDB はサイズを 8 KB (1.5 KB + 6.5 KB) として計算しません。

  • Query: 同じパーティションキー値を持つ複数の項目を読み込みます。返されるすべての項目は単一の読み込みオペレーションとして扱われ、DynamoDB はすべての項目の合計サイズを計算します。次に、DynamoDB はサイズを次の 4 KB の倍数に切り上げます。たとえば、クエリの結果、合計サイズが 40.8 KB になる 10 項目が返されるとします。DynamoDB は、オペレーションの項目サイズを 44 KB に切り上げます。クエリの結果、64 バイトの項目が 1,500 項目返されると、累積サイズは 96 KB になります。

  • Scan: テーブル内のすべての項目を読み込みます。DynamoDB は、スキャンにより返される項目のサイズではなく、評価される項目のサイズを考慮します。Scan オペレーションの詳細については、「DynamoDB でのテーブルのスキャン」を参照してください。

重要

存在しない項目に対して読み込みオペレーションを実行した場合でも、DynamoDB は、上で説明したとおりに読み込みスループットを消費します。Query/Scan オペレーションでは、データが存在しない場合でも、読み込み整合性のタイプとリクエストを処理するために検索したパーティションの数に基づいて、追加の読み込みスループットの料金が発生します。

項目を返す任意のオペレーションで、属性のサブセットを取得するようリクエストできます。ただし、そうすることで項目サイズの計算に影響は生じません。また、QueryScan は、属性値の代わりに項目数を返します。項目数の取得では、項目ごとに読み込みユニット数が同じで、項目サイズの計算方法も同じとします。これは、DynamoDB では、項目数を増加させるために項目単位で読み込む必要があるためです。

書き込みオペレーションのキャパシティユニット消費量

1 つの書き込みユニットは、最大サイズが 1 KB の項目について 1 回の書き込みを表します。1 KB より大きい項目を書き込む必要がある場合、DynamoDB は追加の書き込みユニットを消費する必要があります。トランザクション書き込みリクエストでは、最大 1 KB の項目を 1 回書き込むのに書き込みユニットが 2 個必要です。必要な書き込みリクエストユニットの合計数は、項目サイズに応じて異なります。例えば、項目のサイズが 2 KB の場合、1 回の書き込みリクエストを維持するには書き込みユニットが 2 個必要です。トランザクション書き込みリクエストには書き込みユニットが 4 個必要です。

書き込みの項目サイズは、次の 1 KB の倍数に切り上げられます。たとえば、500 バイトの項目の書き込みは、1 KB の項目の書き込みと同じスループットを消費します。

DynamoDB の書き込みオペレーションが書き込みユニットをどのように消費するかを以下に示します。

  • PutItem: テーブルに 1 つの項目を書き込みます。同じプライマリキーを持つ項目がテーブル内に存在する場合、このオペレーションによって項目が置き換えられます。プロビジョニングされたスループットの消費量を算出する場合、対象となる項目サイズは 2 つのうち大きい方となります。

  • UpdateItem: テーブル内の 1 つの項目を変更します。DynamoDB は更新の前後で実際の項目のサイズを考慮します。プロビジョニングされたスループットの消費は、これらの項目サイズの大きい方を反映しています。項目の属性の一部を更新する場合でも、UpdateItem は、プロビジョニングされたスループットの総量 (「前」の項目サイズと「後」の項目サイズで、より大きい方) を消費します。

  • DeleteItem: テーブルから 1 つの項目を削除します。プロビジョニングされたスループットの消費量は、削除された項目のサイズに基づいています。

  • BatchWriteItem: 1 つ以上のテーブルに最大 25 個の項目を書き込みます。DynamoDB は、バッチ内の各項目を個別の PutItem または DeleteItem リクエストとして処理します (更新はサポートされません)。DynamoDB は、まず各項目のサイズを次の 1 KB の倍数に切り上げてから合計サイズを計算します。この結果は、すべての項目の合計サイズと必ずしも一致しません。例えば、BatchWriteItem がサイズ 500 バイトと 3.5 KB の 2 つの項目を書き込むと、DynamoDB はサイズを 5 KB (1 KB + 4 KB) として計算します。DynamoDB はサイズを 4 KB (500 バイト + 3.5 KB) として計算しません。

PutItemUpdateItem、および DeleteItem の各オペレーションでは、DynamoDB は項目のサイズを次の 1 KB に切り上げます。たとえば、1.6 KB の項目を入力または削除すると、DynamoDB は項目サイズを 2 KB まで切り上げます。

PutItemUpdateItemDeleteItem の各オペレーションでは、条件付き書き込みが許可されます。この場合、オペレーションが成功するためには true と必ず評価される式を指定します。式が false と評価された場合でも、DynamoDB はテーブルの書き込みキャパシティユニットを消費します。消費される書き込みキャパシティユニットの数は、項目のサイズによって異なります この項目は、テーブル内の既存の項目になるか、作成または更新しようとしている新しい項目になる場合があります。例えば、既存の項目が 300 KB であるとします。作成または更新しようとしている新しい項目が 310 KB であるとします。この場合、消費される書き込みキャパシティユニットは、新しい項目の 310 KB に基づきます。