本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 DynamoDB 中使用查詢操作的其他層面
本節涵蓋 DynamoDB 查詢操作的其他層面,包括限制結果大小、計算掃描項目與傳回項目、監控讀取容量耗用,以及控制讀取一致性。
限制結果集的項目數
您可以使用 Query
操作來限制其讀取的項目數。若要執行此作業,請將 Limit
參數設為您希望的最大項目數。
例如,假設您 Query
一份資料表,將 Limit
值設為 6
且不使用篩選條件表達式。Query
結果會包含資料表中符合請求索引鍵條件表達式的前六個項目。
現在假設您在 Query
中新增一個篩選條件表達式。在此情況下,DynamoDB 最多可讀取六個項目,然後只傳回符合篩選條件表達式的項目。最後的 Query
結果包含六個或更少的項目,即使有更多項目符合篩選條件表達式 (如果 DynamoDB 持續讀取更多項目)。
計算結果中的項目
除了符合您條件的項目之外,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
操作不會傳回任何使用之讀取容量的相關資料。但您可以在 ReturnConsumedCapacity
請求中指定 Query
參數,來取得這項資訊。下列為 ReturnConsumedCapacity
的有效設定:
-
NONE
:不會傳回耗用的容量資料。(此為預設值)。 -
TOTAL
:回應包括耗用的讀取容量單位總數。 -
INDEXES
:回應顯示耗用的讀取容量單位總數,以及每個資料表和存取之索引的耗用容量。
DynamoDB 會根據項目數量和這些項目的大小來計算使用的讀取容量單位數量,而不是根據傳回給應用程式的資料量。因此,無論您請求所有屬性 (預設行為) 或只請求部分屬性 (使用投影表達式),使用的容量單位數都相同。無論您是否使用篩選條件表達式,此數字也相同。 Query
會耗用最小讀取容量單位,以每秒執行一個強式一致讀取,或對於高達 4 KB 的項目,每秒執行兩個最終一致讀取。如果您需要讀取大於 4KB 的項目,DynamoDB 需要額外的讀取請求單位。空白資料表和具有少量分割區索引鍵的非常大型資料表,可能會看到超出查詢資料量的額外 RCUs。這涵蓋了提供Query
請求的成本,即使沒有資料也一樣。
查詢的讀取一致性
根據預設,Query
操作會執行最終一致讀取。這表示 Query
的結果可能不會反映最近完成之 PutItem
或 UpdateItem
操作所造成的變更。如需詳細資訊,請參閱DynamoDB 讀取一致性。
若您需要強烈一致讀取,請在 ConsistentRead
請求中將 true
參數設為 Query
。