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

时间:2017-02-08 09:19:57

标签: java pagination amazon-dynamodb

我正在开发与Amazon DynamoDB相关联的网络应用, 我想实现一个功能,我的用户可以直接进入第N页以查看项目信息,

有人告诉我,DynamoDB中的分页是基于最后一个键,而不是限制/偏移。它本身不支持偏移。DynamoDB Scan / Query Pagination

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

有更简单的方法吗?

1 个答案:

答案 0 :(得分:14)

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

快速光标

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

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

数字指数

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

显然,这只有在您不使用任何自定义过滤器时才有效...而且您必须在插入/删除/更新对象时保持此值。所以这个解决方案只有在你只有一个附加的'数据集

缓存光标

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

  1. 检查缓存以查看是否已计算页面
  2. 如果没有,则扫描数据集,仅获取密钥。然后将每个页面的起始键存储在缓存中。
  3. 您请求所需的页面以获取完整对象
  4. 选择适合您需求的解决方案。我希望这会对你有所帮助:)。