DynamoDB 中的向前和向后分页

inf*_*ine 5 javascript node.js amazon-dynamodb dynamodb-queries

我正在使用 DynamoDB 和 NodeJS 在 UI 上登记一些对象。名单很长,而且因为DynamoDB可以扫描/查询在一次数据的最1MB,我已经决定要在前端我使用分页所以PreviousNext按钮从当前页面PAGINATE来回。

我的问题是我想Table X通过使用DynamoDB Query基于所选DynamoDB Index.
假设我刚刚获取了最初的 20 个结果 (0-20),所以点击下一步按钮我想获取结果:21-40 等等。此外,我想启用向后分页,因此当我在显示结果的页面上时:41-60,Back按钮将再次获取结果:21-40。
根据我的理解,DynamoDB 不支持数字偏移。

如何实现向后向前分页?我是 DynamoDB 的新手,请帮助我。

Kou*_*ury 7

虽然 DynamoDB 只会向前分页您的数据,但您必须在Front End 中处理向后分页。

对于大型Tables超过 1MB 大小),有什么DynamoDB作用:

  1. 扫描或查询高达 1MB。
  2. 返回LastEvaluatedKey以获取下一组数据或Next Page。这个值在前端用作分页键来来回分页。

LastEvaluatedKey保存在Scan或期间从 DynamoDB 获取的最后一个对象的值Query

你需要做什么(在后端):

  1. 使用LIMIT属性 ofDynamoDB Query指定您只需要 20 个项目。
  2. 使用ExclusiveStartKey属性 ofDynamoDB Query指定下一组数据将从该属性的指定值开始。

你需要做什么(在前端):

  1. 保留一组对象arr[]来托管分页键。

  2. 保持一个page初始化为 -1的变量,其值将指示当前用户所在的页面。

  3. 将列表的初始页面加载到 UI 中。现在与数据一起,如果有LastEvaluatedKey,将其推入arr并增加page

现在,您有一个页面,page表明您在第 0上, 并arr包含下一页的页面键

  1. NextButton的代码应该遵循以下逻辑:

    使用 ExclusiveStartKey = arr[ page]请求您的服务器获取下一页

  2. 当下一页的结果到达时,您将再次拥有另一个LastEvaluatedKey,因此再次将其推入arr并递增page。所以你在这里得到了图片,我们如何保存Page Keys

  3. BackButton的代码应该遵循以下逻辑:

    由于page变量表示当前页面,因此page - 1将表示上一页。所以:
    if ( page-1>=0) 请求您的服务器使用 ExclusiveStartKey = arr[ page - 1]获取下一页

在获取每个页面后,您必须使用和变量来管理Back&Next按钮何时可用于单击。arr[]page


Kir*_*irk 2

DynamoDB 中的分页功能依赖于 LastEvaluatedKey。您应该能够用它做您想做的事情,并使用页面大小始终为 20 个项目。它本身只是数字偏移。