【问题标题】:iteration over dynamodb partition keys迭代 dynamodb 分区键
【发布时间】:2020-10-13 01:48:39
【问题描述】:

我正在使用 AWS.DynamoDB.DocumentClient。我想迭代这些项目并有条件地更新它们。

我有一个包含 4000 个项目的表。当我扫描表格时,即使我使用 ProjectionExpression,我也只能得到 480 个结果。这是因为扫描大小限制 (1 MB)。我很确定如果我只获得分区键,它会小于 1 MB。

关于扫描特定项目有一些类似的问题。但这不是我所挣扎的。我该怎么做才能列出我的表的所有分区键?谢谢。

这是我的扫描操作;

docClient.scan({
  TableName: "Recipes",
  "ProjectionExpression": "#key",
  "ExpressionAttributeNames": {
    "#key": "id"
   }
 }, async (err, recipes) => {
   console.log("scanned recipes:" + recipes.Items.length)
   //output: 477 (but the list have 4000 items)
 }

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb dynamodb-queries


    【解决方案1】:

    您能展示一下您尝试过但不适合您的scan 操作吗?

    以下对我有用(我的分区键名为 PK)

    
    ddbClient.scan(
      {
        "TableName": "<MY TABLE NAME>",
        "ProjectionExpression": "#PK,
        "ExpressionAttributeNames": {
          "#PK": "PK"
        }
      }
    )
    
    

    请记住,DynamoDB 在计算 1MB 限制时会考虑整个项目大小,即使您使用将响应限制为仅几个属性的投影表达式也是如此。如果您的 scan 结果返回 LastEvaluatedKey,则您知道 DynamoDB 正在对结果进行分页。

    【讨论】:

    • 我更新了我的帖子。当我记录扫描的项目时,我只看到我想要的 id 属性。我猜 dynamodb 在扫描操作时仍然会考虑整个项目的大小。
    • 没错。 DynamoDB 在计算 1MB 限制时会考虑整个项目大小,即使您使用将响应限制为仅几个属性的投影表达式。如果您的扫描结果返回LastEvaluatedKey,则您知道 DynamoDB 正在对结果进行分页。
    • 您可以将此信息添加到您的主要答案中吗?所以我可以将其标记为解决方案。
    【解决方案2】:

    我在纪录片中找到了解决方案。 ExclusiveStartKey 就是答案。 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.NodeJs.04.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2016-08-08
      • 2018-01-16
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多