【发布时间】:2019-09-20 11:25:53
【问题描述】:
我想在 DynamoDB similar to Postgres 中实现基于数值限制和偏移量的分页。
我的 API 如下所示:http://foo.bar/user?offset=50&limit=20。
考虑到 DynamoDB uses ExclusiveStartKey and LastEvaluatedKey to paginate,在不冒险 OutOfMemoryError 的情况下,在 Java 中执行此操作的最佳方法是什么?
编辑:
让我们假设基于偏移的分页是一个硬性要求,我不知道“先前”页面。我的 API 合约有 offset 和 limit 查询参数,如上所述。我不是在寻找“不要做基于偏移的分页”的答案。
【问题讨论】:
-
20 条记录的基于偏移的分页(0、20、40、60. ...)与搜索前一页上的最后一个键 + 21 条记录。后者可以快得多。 (只是避免使用后一种智能分页技术)
-
谢谢@joop-eggen,但让我们假设基于偏移的分页在这里是一个硬性要求(我将添加一个编辑来澄清)。
-
还有@JoopEggen,假设我不知道前一页,我不保持那个状态
-
(这确实是一种克服缓慢的数据库偏移访问的技术,需要保持和处理数据。不是代码设计中的东西。)
-
啊,我明白你现在的意思了@JoopEggen,我可以有一个单独的“跳转表”来保存每个“桶”的开始键。现在,如果我需要深入页面,我可以跳转到最近的“桶”,而不必从头开始遍历。但这需要我在更新源表时以某种方式维护这个跳转表。这是一个有趣的想法。我想知道是否有一个库/模式可以帮助实现这一点。
标签: java amazon-dynamodb dynamodb-queries aws-java-sdk-dynamodb