DynamoDB でクエリオペレーションを使用する際のその他の側面
このセクションでは、DynamoDB クエリオペレーションのその他の側面について説明します。これには、結果サイズの制限、スキャンされた項目と返された項目のカウント、読み取り容量の消費のモニタリング、読み取り整合性の制御が含まれます。
結果セットの項目数の制限
Query
オペレーションを使用すると、読み取られる項目数を制限することができます。これを行うには、Limit
パラメータに項目の最大数を設定します。
たとえば、フィルタ式を使用せず、Limit
値を 6
として、テーブルを Query
するとします。Query
結果には、リクエストのキー条件式に一致するテーブルからの最初 6 つの項目が含まれます。
ここで、Query
にフィルタ式を追加するとします。この場合、DynamoDB は最大 6 つの項目を読み込み、フィルタ式と一致する項目だけを返します。DynamoDB が項目の読み込みを続けた場合、さらに多くの項目がフィルタ式にマッチしても、最終的な Query
結果に含まれる項目数は 6 つ以下です。
結果での項目のカウント
Query
レスポンスには、条件に一致する項目に加えて次の要素が含まれます。
-
ScannedCount
— フィルター式 (存在する場合) が適用される前に、キー条件式に一致した項目数。 -
Count
— フィルター式 (存在する場合) が適用された後に残っている項目数。
注記
フィルタ式を使用しない場合、ScannedCount
と Count
は同じ値を持ちます。
Query
結果セットのサイズが 1 MB より大きい場合、ScannedCount
および Count
では、合計項目数の一部のみが示されます。すべての結果を取得するためには、複数の Query
オペレーションを実行する必要があります (DynamoDB でテーブルクエリ結果をページ分割する を参照してください)。
各 Query
レスポンスには、特定の Query
リクエストによって処理された項目の ScannedCount
および Count
が含まれます。すべての Query
リクエストの合計を取得するには、ScannedCount
および Count
の実行中の集計を維持することができます。
クエリで消費されるキャパシティユニット
パーティションキーの属性名、およびその属性の単一値を指定する限り、いずれのテーブルまたはセカンダリインデックスにも、Query
を実行できます。Query
により、そのパーティションのキー値を持つすべての項目が返されます。必要に応じて、ソートキーの属性を指定し、比較演算子を使用して、検索結果をさらに絞り込むことができます。Query
API オペレーションでは、次のように読み込みキャパシティーユニットを消費します。
...を 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
に設定します。