【问题标题】:Delete and create dynamoDB table删除并创建 dynamoDB 表
【发布时间】:2018-01-05 02:11:55
【问题描述】:

使用 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:表已经存在:

【问题讨论】:

    标签: node.js amazon-web-services amazon-dynamodb aws-sdk-nodejs aws-sdk-js


    【解决方案1】:

    您可以使用 SDK 的 tableNotExists waiter 确保在调用 createTable 之前已完全删除表。

    【讨论】:

    • 不错的解决方案,tnx
    【解决方案2】:

    DynamoDB 实际删除一个表需要一些时间,因此您需要等到该表被删除。

    如果您收到错误 ResourceInUseException,则表示您尝试重新创建的表尚未删除。因此,您需要稍等片刻,然后重试。

    如果您不更改表中的键并且不创建新的本地二级索引,则可以改用 UpdateTable 方法。不过这里有一些限制:

    您一次只能执行以下操作之一:

    修改表的预置吞吐量设置。

    在桌子上启用或禁用 Streams。

    从表中删除一个全局二级索引。

    在表上创建一个新的全局二级索引。一旦索引 开始

    回填,可以使用UpdateTable进行其他操作。

    【讨论】:

    • 嗯,我认为回调会帮助我。我如何知道何时删除表,是某个事件还是只是设置一些超时并希望删除完成?
    • 我建议使用指数退避重试 createTable API 调用。文档:docs.aws.amazon.com/general/latest/gr/api-retries.html
    • 不幸的是,删除表时没有任何事件,也没有设置删除表所需的超时时间。当 DynamoDB 返回回复时调用回调,回复可以是成功也可以是错误(如果尚未删除表)
    • 另一种选择是使用 UpdateTable 方法而不是 DeleteTable/CreateTable。我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 2021-02-21
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多