从API文档可以看出,DynamoDB支持对扫描和查询操作进行分页。关键在于将当前请求的ExclusiveStartIndex
设置为上一次请求的LastEvaluatedIndex
的值,以获取下一组(逻辑页面)结果。
我正在尝试实现同样的功能,但我正在使用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,我该如何知道在这种情况下是否已经到达了结果的末尾。
query
时将limit
设置为2,它仍然返回所有记录。为什么会这样呢? - ThiyaguPaginatedQueryList
)正在为您处理分页。请查看PaginatedQueryList
的文档。它的行为方式与我上面关于scan
的帖子相同。基本上,如果您对其进行迭代,它最终会获取所有元素,因为它自动执行分页调用。 - mkobitwithLimit
对它不适用吗? - Thiyagu