REST API - 在 dynamoDB 中检索以前的查询

REST API - Retrieve previous query in dynamoDB

我在 DynamoDB 中有 100 行数据和一个 api 路径为 api/get/{number}

现在当我说 number=1 时 api 应该 return 我的前 10 个值。当我说 number=2 时,它应该 return next 10 个值。我用查询 lastEvaluatedKey 做了类似的事情,并在 createdOn 上排序。现在的用例是,如果用户在 number=2 之后传递 number=10,lastEvaluatedKey 仍然是第 2 页的那个,结果将是第 3 页的数据。我如何直接获取数据。此外,如果用户从 number=3 转到 number=1,数据仍然不会在第 1 页。

我正在使用它根据 HTML 上的分页进行 API 调用。

我正在使用 java 1.8 和 aws-java-sdk-dynamodb

DynamoDB 中的非顺序分页很困难 - 如果这是一项需要始终保持高效的操作,您必须围绕它设计数据模型。对于您的具体情况的建议,我需要有关数据和访问模式的更多详细信息。

一般你可以选择在查询调用中设置ExclusiveStartKey属性,这类似于关系数据库中的偏移量,但只是类似而不是完全相同的。 ExclusiveStartKey 是查询将继续的键,这意味着来自您的 table 的数据而不仅仅是一个数字。

这意味着您通常猜不到它,除非它是一个序号 - 这并不理想。

对于顺序分页,即用户从第 1 页转到第 2 页,从第 2 页转到第 3 页等。您可以在请求中将其作为令牌传递,但如果用户移入,则不会起作用另一个方向从第 3 页到第 2 页,或者只是随机导航到第 14 页。

在你的情况下你只有有限的数据量 - 100 项,所以我针对你的具体情况的解决方案是查询所有项目并限制项目的数量对 n * 10 的响应,其中 n 是结果页面。然后,您 return 将该结果中的最后 10 项发送给您的客户。

虽然这是一个解决方案 大规模(时间 + 成本),但幸运的是没有多少人会使用分页转到第 7 页或第 8 页(你可以在 google 搜索结果的第 2 页埋葬一具尸体)。

Yan Cui has written an interesting post on this problem on Hackernoon,你可能想看看。