Как я могу вставить несколько элементов в таблицу DynamoDB и ждать, если она превысит максимальную емкость? - PullRequest
1 голос
/ 01 июня 2019

У меня есть файл json, содержащий около 700 элементов, которые нужно вставить в таблицу 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 голосов
/ 02 июня 2019

batchWriteItem возвращает поле с именем UnprocessedItems , которое содержит элементы, которые не удалось обработать и которые следует повторить. Если этот список пуст, значит, все написано успешно. UnprocessedItems - это тот же формат, что и пакетный запрос, поэтому вы можете напрямую передать его в новый пакетный запрос.

Для некоторого примера кода о цикле и повторной попытке UnprocessedItems, проверьте этот ответ на аналогичный вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...