Dynamo 数据库分页

Dynamo db pagination

我想使用 aws-sdk 在 dynamodb 中使用分页 DocumentClient() 我正在使用 node.js.

我想要做的是获取前 10 个项目,然后 return 这些值给用户。在该用户发出新请求后,他告诉服务器从 10 开始,服务器从 10 到 20 获取其他 10,然后返回 return 响应。我试过 LastEvaluatedKey 但我的情况不同。有什么方法可以告诉 dynamodb 从特定项目开始,例如 1,然后设置 Limit: 10.

我找到了解决这个问题的方法。您需要从 dynamodb 响应中获取 LastEvaluatedKey 并将其发送回 front-end 然后您的 front-end 应该在参数中发送 LastEvaluatedKey 并且您可以将其用作 ExclusiveStartKey.

getItems(pageSize, lastItem?) {
    try {
      const params = {
        TableName: 'User',
        Limit: pageSize,
      };
      if (lastItem) {
        params.ExclusiveStartKey = { item_id: lastItem};
      }
      const response = await dynamoDb.scan(params).promise();
      return {
         items: response.Items,
         lastItem: response.LastEvaluatedKey
      }

    } catch (error) {
      throw error;
    }

使用 LimitLastEvaluatedKey 进行分页是 DynamoDB 的常见做法,但重要的是要注意 Limit 不是结果集上返回的记录数;相反,这是在查询操作中分析的记录数。

查看有关查询和限制的 AWS 文档 属性:https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#API_Query_RequestSyntax

要评估的最大项目数(不一定是匹配项目数)。如果 DynamoDB 在处理结果时处理的项目数达到限制,它会停止操作和 returns 直到该点的匹配值,以及 LastEvaluatedKey 中的键以应用于后续操作,以便您可以从你离开的地方继续。此外,如果在 DynamoDB 达到此限制之前处理的数据集大小超过 1 MB,它会停止操作和 returns 达到限制的匹配值,以及 LastEvaluatedKey 中的一个键以在后续操作中应用以继续操作。有关更多信息,请参阅 Amazon DynamoDB 开发人员指南中的查询和扫描。

虽然这是一种普遍应用的分页解决方法,但它可能会导致大型数据集出现意外结果。