Удалить и создать таблицу DynamoDB

Используя node.js, я пытаюсь удалить и снова создать таблицу DynamoDB. Мне нужно удалить все записи из таблицы и добавить новые, поэтому я думаю, что это хорошее решение - просто удалить и воссоздать всю таблицу. пробую с этим кодом

dynamo.deleteTable({
        TableName: tableName
    }, function(err, data){
        if (err) {
            console.log(err);
        }
        else {
            dynamo.createTable({
                TableName: tableName,
                KeySchema: [{
                    AttributeName: "id",
                    KeyType: "HASH"
                }],
                AttributeDefinitions: [{
                    AttributeName: "id",
                    AttributeType: "S"
                }],
                ProvisionedThroughput: {
                    ReadCapacityUnits: 10,
                    WriteCapacityUnits: 10
                }
            }, function(err){
                if (err) {
                    console.log(err);
                }
                else {
                    // putNewData(data, callback);
                }
            })
        }
    });

И я получаю сообщение об ошибке ResourceInUseException: таблица уже существует:


person Nemanja    schedule 28.07.2017    source источник


Ответы (2)


Для убедитесь, что таблица была полностью удалена перед вызовом createTable.

person giaour    schedule 30.07.2017
comment
Хорошее решение, спасибо - person Nemanja; 30.07.2017

Для фактического удаления таблицы DynamoDB требуется некоторое время, поэтому вам нужно подождать, пока таблица не будет удалена.

Если вы получаете ошибку ResourceInUseException, это означает, что таблица, которую вы пытаетесь воссоздать, еще не удалена. Поэтому вам нужно немного подождать и повторить попытку.

Если вы не меняете, какой ключ у вас есть в вашей таблице, и если вы не создаете новые локальные вторичные индексы, вы можете вместо этого использовать метод UpdateTable. Однако есть некоторые ограничения:

Одновременно можно выполнить только одну из следующих операций:

Измените подготовленные параметры пропускной способности таблицы.

Включите или отключите потоки на столе.

Удалить глобальный вторичный индекс из таблицы.

Создайте новый глобальный вторичный индекс для таблицы. Как только индекс начинается

обратной засыпки можно использовать UpdateTable для выполнения других операций.

person Ivan Mushketyk    schedule 29.07.2017
comment
хм, я думаю, что обратный вызов поможет мне в этом. Как узнать, когда таблица удалена, это какое-то событие или просто установить тайм-аут и надеяться, что удаление завершено? - person Nemanja; 29.07.2017
comment
Я бы предложил повторить вызов API createTable, используя экспоненциальную отсрочку. Документ: docs.aws.amazon.com/general/latest/ gr/api-retries.html - person Antonio; 29.07.2017
comment
К сожалению, нет события, когда таблица удаляется, и нет установленного времени ожидания, которое потребуется для удаления таблицы. Обратный вызов вызывается, когда DynamoDB возвращает ответ, который может быть успешным или ошибочным (если таблица еще не удалена). - person Ivan Mushketyk; 29.07.2017
comment
Еще один вариант — использовать метод UpdateTable вместо DeleteTable/CreateTable. Я обновил ответ. - person Ivan Mushketyk; 29.07.2017