当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《有没有一种简单的方法可以通过java从DynamoDB获取第N页的项目?》经验,为你挑选了1个好方法。

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

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

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

有更简单的方法吗?



1> Sébastien..:

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

快速光标

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

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

数字指数

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

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

缓存光标

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

    您检查缓存以查看是否已计算页面

    如果没有,则扫描数据集,仅获取密钥.然后,将每个页面的起始键存储在缓存中.

    您请求所需的页面以获取完整对象


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


使用“快速光标”方法,如果我有10,000个项目并想阅读最后的100个项目,我是否还需要首先扫描前9900个项目?这不符合成本效益。使用DynamoDB,即使您没有在响应中返回扫描的项目,您仍然需要为扫描的项目付费。
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有