首页 > 解决方案 > REST API - 在 dynamoDB 中检索先前的查询

问题描述

我在 DynamoDB 中有 100 行数据和一个带路径的 apiapi/get/{number}

现在当我说 number=1 api 应该返回我前 10 个值。当我说 number=2 时,它应该返回接下来的 10 个值。我用查询、lastEvaluatedKey 和 on 排序做了类似的事情createdOn。现在的用例是,如果用户在 number=2 之后通过 number=10,lastEvaluatedKey 仍然是第 2 页的,结果将是第 3 页的数据。我怎样才能直接获取数据。此外,如果用户从 number=3 转到 number=1,数据仍然不会位于第 1 页。

我正在使用它来进行基于 HTML 分页的 API 调用。

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

标签: springamazon-web-servicesrestpaginationamazon-dynamodb

解决方案


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

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

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

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

在您的情况下,您只有有限数量的数据 - 100 个项目,因此我针对您的特定情况的解决方案是查询所有项目并限制响应中的项目数量,结果页面n * 10在哪里。n然后,您将该结果中的最后 10 个项目返回给您的客户。

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

Yan Cui 在 Hackernoon 上写了一篇关于这个问题的有趣帖子,你可能想看看。


推荐阅读