從API文檔中,dynamo db確實支持掃描和查詢操作的分頁。這裏的要點是將當前請求的ExclusiveStartIndex
設置爲先前請求的LastEvaluatedIndex
的值,以獲得結果的下一組(邏輯頁面)。分頁與DynamoDBMapper Java AWS SDK
我試圖實現相同的功能,但我使用的是DynamoDBMapper
,這似乎有很多優勢,比如與數據模型的緊密耦合。所以,如果我想要做上述情況,我假設我會做類似如下:
// Mapping of hashkey of the last item in previous query operation
Map<String, AttributeValue> lastHashKey = ..
DynamoDBQueryExpression expression = new DynamoDBQueryExpression();
...
expression.setExclusiveStartKey();
List<Table> nextPageResults = mapper.query(Table.class, expression);
我希望我的上述認識是在使用DynamoDBMapper分頁正確的。其次,我怎麼知道我已經達到了結果的最後。從文檔,如果我使用下面的API:
QueryResult result = dynamoDBClient.query((QueryRequest) request);
boolean isEndOfResults = StringUtils.isEmpty(result.getLastEvaluatedKey());
反觀使用DynamoDBMapper,我怎麼能知道我是否已經達到在這種情況下的結果結束。
如果'limit'是在使用'query'時設置爲2,它仍然返回所有記錄。這是爲什麼? – user7
@ user7實際上,底層實現('PaginatedQueryList')正在爲您處理分頁時,它只顯示它正在返回所有記錄。查看['PaginatedQueryList']的文檔(https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/PaginatedQueryList.html)。它的行爲與我上面發佈'scan'相同。基本上,如果迭代它,它最終將獲取所有元素,因爲它會自動執行分頁調用。 – mkobit
那麼'withLimit'不適用於它? – user7