如何在DynamoDB表中插入多个项目,然后等待它超过最大容量?

时间:2019-06-01 00:31:14

标签: javascript node.js amazon-web-services amazon-dynamodb

我有一个大约700个项目的json文件,需要在DynamoDB表中插入。我目前正在使用transactWrite,但是插入所有这些项花费的时间太长。我该如何使用batchWrite,如果超过25个项目,然后等待并再次运行该功能,直到所有项目都被插入?

data.forEach(async item => {
    const params = {
      TransactItems: [
        {
          Put: {
            Item: {
              pk: `User_${id}`,
              sk: 'v0_User_Info',
              val: item.User,
              editTimeStamp: `${+new Date()}`,
              latest: 1,
            },
            TableName: 'ddb-table',
          },
        },
        {
          Put: {
            Item: {
              pk: `User_${id}`,
              sk: 'v1_User_Info',
              user: item.User,
              editTimeStamp: `${+new Date()}`,
            },
            TableName: 'ddb-table',
          },
        }, 
      ],
    };
     await docClient.transactWrite(params).promise()
     .then(response => console.log(response))
     .catch(err => console.table(err))
  })
};

1 个答案:

答案 0 :(得分:0)

batchWriteItem返回一个名为UnprocessedItems的字段,其中包含无法处理且应重试的项目。如果此列表为空,则所有内容均已成功写入。 UnprocessedItems与批处理请求的格式完全相同,因此您应该可以将其直接传递给新的批处理请求。

有关循环和重试UnprocessedItems的一些示例代码,请将此answer找出类似的问题。