我现在正在开发一个与Amazon DynamoDB相关联的Web应用程序,我想实现一个功能,我的用户可以直接到达第N页来查看项目信息,
有人告诉我,DynamoDB中的分页是基于最后一个键,而不是限制/偏移.它本身不支持偏移.DynamoDB扫描/查询分页
这是否意味着:如果我想进入第10页的项目,那么我必须首先查询9页?(这似乎不是一个好的解决方案)
有更简单的方法吗?
你是对的.DynamoDB不支持数字偏移.分页的唯一方法是LastEvaluatedKey
在发出请求时使用该参数.你仍然有一些很好的选择来使用数字来实现分页.
您可以通过丢弃完整结果并仅获取密钥来进行快速分页请求.每个请求限制为1MB.这代表了大量的密钥!使用此功能,您可以将光标移动到所需位置并开始读取完整对象.
此解决方案适用于小型/中型数据集.您将遇到大型数据集的性能和成本问题.
您还可以创建一个全局二级索引,您可以在其中对数据集进行分页.您可以为offset
所有对象添加一个属性.您可以直接查询此全局索引以获取所需的页面.
显然,这仅在您不使用任何自定义过滤器时才有效...并且您必须在插入/删除/更新对象时保持此值.因此,只有拥有"仅附加"数据集时,此解决方案才有用
该解决方案建立在第一个解决方案之上.但是,您不是每次都可以获取密钥,而是可以缓存页面位置并将其重用于其他请求.像redis或memcached这样的缓存工具可以帮助您实现这一目标.
您检查缓存以查看是否已计算页面
如果没有,则扫描数据集,仅获取密钥.然后,将每个页面的起始键存储在缓存中.
您请求所需的页面以获取完整对象
选择适合您需求的解决方案.我希望这能帮到您 :)