分頁表查詢結果 - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

分頁表查詢結果

DynamoDB 會對 Query 操作的結果進行分頁。透過編製分頁,Query 結果會分成數個大小為 1 MB (或更小) 的資料「頁」。應用程式可以處理結果的第一頁、第二頁,以此類推。

單一 Query 只會傳回符合 1 MB 大小限制的結果集。若要判斷是否有更多結果,且要一次擷取一頁結果,應用程式需執行下列作業:

  1. 檢查低層級 Query 結果:

    • 若結果包含 LastEvaluatedKey 元素且為非空值,請接著進行步驟 2。

    • 若結果中「沒有」LastEvaluatedKey,就表示再也沒有要擷取的項目。

  2. 建構新的 Query 請求,和前一個請求使用相同的參數。但這一次採用步驟 1 的 LastEvaluatedKey 值,並用它做為新 Query 要求的 ExclusiveStartKey 參數。

  3. 執行新的 Query 請求。

  4. 前往步驟 1。

換句話說,LastEvaluatedKey 回應的 Query 應做為下一個 ExclusiveStartKey 請求的 Query 使用。若 LastEvaluatedKey 回應中沒有 Query 元素,表示您已擷取到結果的最終頁 如果 LastEvaluatedKey 不是空的,則不一定意味著結果集中有更多資料。檢查 LastEvaluatedKey 是否為空,是確定您是否已到達結果集末頁的唯一方式。

您可以使用 AWS CLI 來檢視此行為。會重複 AWS CLI 傳送低層級Query請求至 DynamoDB,直到結果中LastEvaluatedKey不再出現為止。請考慮下列 AWS CLI 範例,從特定年份擷取電影標題。

aws dynamodb query --table-name Movies \ --projection-expression "title" \ --key-condition-expression "#y = :yyyy" \ --expression-attribute-names '{"#y":"year"}' \ --expression-attribute-values '{":yyyy":{"N":"1993"}}' \ --page-size 5 \ --debug

通常情況下, AWS CLI 句柄自動分頁。但是,在此範例中, AWS CLI --page-size參數會限制每頁的項目數。--debug 參數會列印請求及回應的下層資訊。

如果您執行此範例,DynamoDB 的第一個回應會類似以下內容。

2017-07-07 11:13:15,603 - MainThread - botocore.parsers - DEBUG - Response body: b'{"Count":5,"Items":[{"title":{"S":"A Bronx Tale"}}, {"title":{"S":"A Perfect World"}},{"title":{"S":"Addams Family Values"}}, {"title":{"S":"Alive"}},{"title":{"S":"Benny & Joon"}}], "LastEvaluatedKey":{"year":{"N":"1993"},"title":{"S":"Benny & Joon"}}, "ScannedCount":5}'

回應中的 LastEvaluatedKey 會指出並未擷取所有項目。 AWS CLI 然後會向 DynamoDB 發出另一個Query請求。此請求和回應模式會持續到最終回應出現為止。

2017-07-07 11:13:16,291 - MainThread - botocore.parsers - DEBUG - Response body: b'{"Count":1,"Items":[{"title":{"S":"What\'s Eating Gilbert Grape"}}],"ScannedCount":1}'

若沒有 LastEvaluatedKey,就表示已不再有要擷取的項目。

注意

AWS SDK 會處理低階 DynamoDB 回應 (包括是否存在LastEvaluatedKey),並為分頁結果提供各種抽象。Query例如,適用於 Java 的開發套件文件界面會提供 java.util.Iterator 支援,讓您可一次處理一個結果。

如需各種程式設計語言的程式碼範例,請參閱《Amazon DynamoDB 入門指南》和所需語言的 AWS 開發套件文件。

您還可以透過限制結果集的項目數 (使用 Query 操作的 Limit 參數) 來減少頁面大小。

如需使用 DynamoDB 進行查詢的詳細資訊,請參閱 DynamoDB 中的查詢操作