有没有一种简单的方法可以通过java从DynamoDB获取第N页的项目?

2022-09-03 05:06:22

我现在正在开发与 Amazon DynamoDB 关联的 Web 应用程序,我想实现一个功能,我的用户可以直接访问第 N 个页面来查看项目信息,

我被告知 DynamoDB 中的分页基于最后一个键,而不是限制/偏移。它本身不支持偏移。DynamoDB 扫描/查询分页

这是否意味着:如果我想到达项目的第10页,那么我必须首先查询前面的9页?(这似乎不是一个好的解决方案)

有没有更简单的方法可以做到这一点?


答案 1

你是对的。DynamoDB 不支持数字偏移。分页的唯一方法是在发出请求时使用该参数。您仍然有一些不错的选择来使用数字实现分页。LastEvaluatedKey

快速光标

您可以通过丢弃完整结果并仅获取密钥来发出快速分页请求。每个请求的容量限制为 1MB。这代表了大量的密钥!使用此功能,您可以将光标移动到所需位置并开始读取整个对象。

此解决方案适用于中小型数据集。您将在大型数据集上遇到性能和成本问题。

数值指数

您还可以创建一个全局二级索引,您将在其中对数据集进行分页。例如,您可以向所有对象添加一个属性。您可以直接查询此全局索引以获取所需的页面。offset

显然,这只有在不使用任何自定义过滤器时才有效...并且在插入/删除/更新对象时必须保持此值。因此,此解决方案只有在您具有“仅追加”数据集时才是好的

缓存游标

此解决方案构建在第一个解决方案的基础上。但是,您可以缓存页面位置并将其重新用于其他请求,而不是每次都获取密钥。像redis或memcached这样的缓存工具可以帮助您实现这一目标。

  1. 检查缓存以查看页面是否已计算
  2. 如果没有,则扫描数据集,仅获取密钥。然后,将每个页面的起始键存储在缓存中。
  3. 您请求所需的页面以获取完整的对象

选择适合您需求的解决方案。我希望这能帮助你:)


答案 2