spring - 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
.
解决方案
DynamoDB 中的非顺序分页很困难——如果它是一项需要始终保持高效的操作,则必须围绕它设计数据模型。对于您的具体情况的建议,我需要有关数据和访问模式的更多详细信息。
一般来说,您可以选择在查询调用中设置ExclusiveStartKey
属性,这类似于关系数据库中的偏移量,但只是相似而不相同。是查询将继续的ExclusiveStartKey
键,这意味着来自您的表的数据而不仅仅是一个数字。
这意味着您通常无法猜测它,除非它是一个序列号 - 这并不理想。
对于顺序分页,即用户从第 1 页转到第 2 页,从第 2 页转到第 3 页等。您可以在请求中将其作为令牌传递,但如果用户朝另一个方向移动第 3 页,这将不起作用到第 2 页或只是随机导航到第 14 页。
在您的情况下,您只有有限数量的数据 - 100 个项目,因此我针对您的特定情况的解决方案是查询所有项目并限制响应中的项目数量,结果页面n * 10
在哪里。n
然后,您将该结果中的最后 10 个项目返回给您的客户。
这是一个解决方案,但在规模上会变得昂贵(时间+成本),幸运的是,没有多少人会使用分页转到第 7 或第 8 页(您可以在 google 搜索结果的第 2 页上埋葬尸体)。
推荐阅读
- powershell - PowerShell ComboBox 选择一个值。之后无法更改
- aem - 在 AEM JCR 中查询 XML 文件
- android - 通过单元测试如何在 viewModel 中测试 switchMap 从存储库类调用正确的方法
- python - 如何在 BeautifulSoup 中使用其样式定义(如填充、字体大小等)对元素进行 Web 抓取
- django - Django 模型和 UniqueConstraint
- java - 放弃对黑名单/禁止用户的请求
- kaitai-struct - 将数组参数传递给 Kaitai Struct 用户定义类型
- c# - Unity C#:transform.up 不会随着对象旋转而更新
- r - 如何创建带有图例末尾的单个几何点的几何线图
- javascript - JavaScript 值在变量中未正确评估,但作为字符串正常工作