DynamoDB (Java) 中基于数字限制和偏移量的分页



我想在 DynamoDB 中实现类似于 Postgres 的数字限制和基于偏移量的分页。

我的 API 看起来像这样:http://foo.bar/user?offset=50&limit=20.

在 Java 中执行此操作而不冒OutOfMemoryError风险考虑 DynamoDB 使用ExclusiveStartKeyLastEvaluatedKey进行分页的最佳方法是什么?

编辑:

让我们假设基于偏移量的分页是一项硬性要求,我不知道"先前"页面。如上所述,我的 API 合约具有offsetlimit查询参数。我不是在寻找"不要做基于偏移量的分页"的答案。

在了解了分页列表在 sdk 中的工作方式后,似乎最有效的方法是在配置中使用ITERATION_ONLY分页加载策略,并执行以下操作:

DynamoDBMapperConfig config = new DynamoDBMapperConfig.Builder()
.withPaginationLoadingStrategy(ITERATION_ONLY)
.build();
PaginatedQueryList<MyUser> users = dynamoDBMapper.query(MyUser.class, myQueryExpression, config);
// This iterator will fetch 1MB worth of data 'on-demand'
Iterator<MyUser> userIterator = users.iterator();
skip(iterator, offset);
List<MyUser> aPageOfUser = collect(iterator, limit);

当然,我会在那里产生实现我自己的skipcollect方法的成本。有没有更好/更简洁的方法可以做到这一点?

编辑:

似乎我可以利用共享资源集合中的IteratorUtils来免费获得skipcollect

Iterator<MyUser> userIterator = IteratorUtils.boundedIterator(users.iterator(), offset, limit);
List<MyUser> aPageOfUser = IteratorUtils.toList(userIterator);

最新更新