当前位置: 首页 > 知识库问答 >
问题:

是否有一个简单的方法从DynamoDB通过java获取第N页的项目?

厉钊
2023-03-14

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

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

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

有更简单的方法吗?

共有1个答案

邵璞
2023-03-14

你是对的。DynamoDB不支持数字偏移。分页的唯一方法是在发出请求时使用LastEvaluatedKey参数。您仍然可以使用数字实现分页。

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

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

您还可以创建一个全局二级索引,用于对数据集进行分页。例如,您可以向所有对象添加一个偏移特性。您可以直接查询此全局索引以获得所需的页面。

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

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

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

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

 类似资料:
  • 问题内容: 为了调试目的,我想在处理输出流时将其内容转储到文件中。解析流将使用该流。 我可能会需要一个过滤器来存档它,在写我自己之前,我想问一下是否已经有现成的版本。 更新: 应该提到我在Android上工作。 我有什么: 所以我有一个和一个。 问题答案: 并不完全是准备推出一个,但是这可能会感兴趣。示例中有一个TeeOutputStream实现。

  • 问题内容: 目前,我正在研究Java代理以汇编内存统计信息。借助工具API,我可以持有这些类(并对其进行操作)。使用纯Java,我可以估算每个对象使用的资源。到目前为止,一切都很好。 我现在面临的问题是“如何掌握特定类的每个Object实例”。我可以进行字节码操作以获得对象实例的所有权,但是我希望还有另外一个我不知道的API,它可以帮助我完成我的目标而无需进行如此繁琐的干预。最后,应将对性能的影响

  • 有没有一种通用的方法来获取Java中两个列表的交集? 我想有一个方法,可以找到列表1和列表2中包含的元素,无论列表中的元素是字符串、Long、整数还是BigDecimal类型。 我试图通过下面的代码来实现这一点,这些代码可以正常工作,直到两个参数都包含相同类型的元素,否则它在运行时返回一个空列表。 调用intersect方法的代码: 列表中包含不同类型元素的示例输出: 问题:是否有任何方法可以强制

  • 问题内容: 使用标准列表,我尝试选择最后2个列表项。我有多种排列方式,但似乎没有什么可以选择最后2种: 我知道类似CSS3的新选择器,但如果可能的话,我更喜欢一些可以在更多浏览器中使用的选择器(不必特别在意IE)。 问题答案: 这将选择列表的最后两个项目:

  • 本文向大家介绍java简单网页抓取的实现方法,包括了java简单网页抓取的实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java简单网页抓取的实现方法。分享给大家供大家参考。具体分析如下: 背景介绍 一 tcp简介   1 tcp 实现网络中点对点的传输   2 传输是通过ports和sockets   ports提供了不同类型的传输(例如 http的port是80)     1

  • 问题内容: 在Java中获取字符串的最后一个单词的最简单方法是什么?您可以假设没有标点符号(仅字母字符和空格)。 问题答案: