DynamoDB でクエリオペレーションを使用する際のその他の側面 - Amazon DynamoDB

DynamoDB でクエリオペレーションを使用する際のその他の側面

このセクションでは、DynamoDB クエリオペレーションのその他の側面について説明します。これには、結果サイズの制限、スキャンされた項目と返された項目のカウント、読み取り容量の消費のモニタリング、読み取り整合性の制御が含まれます。

結果セットの項目数の制限

Query オペレーションを使用すると、読み取られる項目数を制限することができます。これを行うには、Limit パラメータに項目の最大数を設定します。

たとえば、フィルタ式を使用せず、Limit 値を 6 として、テーブルを Query するとします。Query 結果には、リクエストのキー条件式に一致するテーブルからの最初 6 つの項目が含まれます。

ここで、Query にフィルタ式を追加するとします。この場合、DynamoDB は最大 6 つの項目を読み込み、フィルタ式と一致する項目だけを返します。DynamoDB が項目の読み込みを続けた場合、さらに多くの項目がフィルタ式にマッチしても、最終的な Query 結果に含まれる項目数は 6 つ以下です。

結果での項目のカウント

Query レスポンスには、条件に一致する項目に加えて次の要素が含まれます。

  • ScannedCount — フィルター式 (存在する場合) が適用される前に、キー条件式に一致した項目数。

  • Count — フィルター式 (存在する場合) が適用された後に残っている項目数。

注記

フィルタ式を使用しない場合、ScannedCountCount は同じ値を持ちます。

Query 結果セットのサイズが 1 MB より大きい場合、ScannedCount および Count では、合計項目数の一部のみが示されます。すべての結果を取得するためには、複数の Query オペレーションを実行する必要があります (DynamoDB でテーブルクエリ結果をページ分割する を参照してください)。

Query レスポンスには、特定の Query リクエストによって処理された項目の ScannedCount および Count が含まれます。すべての Query リクエストの合計を取得するには、ScannedCount および Count の実行中の集計を維持することができます。

クエリで消費されるキャパシティユニット

パーティションキーの属性名、およびその属性の単一値を指定する限り、いずれのテーブルまたはセカンダリインデックスにも、Query を実行できます。Query により、そのパーティションのキー値を持つすべての項目が返されます。必要に応じて、ソートキーの属性を指定し、比較演算子を使用して、検索結果をさらに絞り込むことができます。QueryAPI オペレーションでは、次のように読み込みキャパシティーユニットを消費します。

...を Query する場合 DynamoDB は ... からの読み込み容量ユニットを消費します。
テーブル テーブルのプロビジョニングされた読み込みキャパシティー。
グローバルセカンダリインデックス インデックスのプロビジョニングされた読み込みキャパシティー。
ローカルセカンダリインデックス ベーステーブルのプロビジョニングされた読み込みキャパシティー。

デフォルトでは、Queryオペレーションはどのくらいの読み込みキャパシティーを消費するかについてのデータを返しません。ただし、この情報を取得するために Query リクエストで ReturnConsumedCapacity パラメータを指定できます。ReturnConsumedCapacity の有効な設定を以下に示します。

  • NONE — 消費された容量データは返されません。(これがデフォルトです)

  • TOTAL — レスポンスには消費された読み込み容量単位の合計値が含まれます。

  • INDEXES — レスポンスは、アクセスする各テーブルとインデックスの消費される容量とともに、消費される読み込み容量単位の合計値を示します。

DynamoDB はアプリケーションに返されるデータ量ではなく、項目の数と項目のサイズに基づいて、消費される読み込みキャパシティユニットの数を計算します。このため、消費される容量ユニットの数は、(デフォルトの動作で) 属性のすべてをリクエストしても、(プロジェクション式を使用して) 一部をリクエストしても、同じになります。この数は、フィルター式を使用していてもいなくても同じです。Query は最小読み込みキャパシティユニットを消費して、最大 4 KB の項目について強力な整合性のある読み込みを 1 秒あたり 1 回、または結果整合性のある読み込みを 1 秒あたり 2 回実行します。4 KB より大きい項目を読み込む必要がある場合、DynamoDB には追加の読み込みリクエストユニットが必要です。空のテーブルや、パーティションキーの数が少ない非常に大きなテーブルでは、クエリされたデータの量を超えて追加の RCU が課金される場合があります。これにより、データが存在しない場合でも、Query リクエストを処理するためのコストがカバーされます。

クエリの読み込み整合性

Query オペレーションは、結果的に整合性のある読み込みをデフォルトで行います。つまり、Query 結果が、最近完了した PutItem または UpdateItem オペレーションによる変更を反映しない場合があります。詳細については、「DynamoDB の読み取り整合性」を参照してください。

強力な整合性のある読み込みが必要な場合は、Query リクエストで ConsistentRead パラメータを true に設定します。