通过 updateTable 创建多个 GSI - DynamoDB

6 amazon amazon-web-services nosql amazon-dynamodb

我uisng updateTable DynmaoDB的和基于文档,如果我们要建立多个全球辅助索引(GSIS),我们必须“GlobalSecondaryIndexUpdates”字段中的多个对象,所以我通过下面的参数,可以但不更新 GSI;但是,如果我只是创建一个 GSI(在“GlobalSecondaryIndexUpdates”字段中传递一个对象,它可以工作);这是我为创建多个 GSI 而传递的参数:

{
    "TableName": "movies",
    "AttributeDefinitions": [{
            "AttributeName": "id",
            "AttributeType": "N"
        }, {
            "AttributeName": "title",
            "AttributeType": "S"
        }, {
            "AttributeName": "subtitle",
            "AttributeType": "S"
        }],
    "GlobalSecondaryIndexUpdates": [{
            "Create": {
                "IndexName": "title",
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": "5",
                    "WriteCapacityUnits": "5"
                },
                "KeySchema": [{
                        "AttributeName": "title",
                        "KeyType": "HASH"
                    }],
                "Projection": {
                    "ProjectionType": "ALL"
                }
            }
        }, {
            "Create": {
                "IndexName": "subtitle",
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": "5",
                    "WriteCapacityUnits": "5"
                },
                "KeySchema": [{
                        "AttributeName": "subtitle",
                        "KeyType": "HASH"
                    }],
                "Projection": {
                    "ProjectionType": "ALL"
                }
            }
        }]
}
Run Code Online (Sandbox Code Playgroud)

我是否以错误的格式传递参数?

Ben*_*rtz 6

来自 DynamoDB文档

每个 UpdateTable 操作只能创建或删除一个全局二级索引。但是,如果同时运行多个 UpdateTable 操作,则可以一次创建多个索引。您一次最多可以对一个表运行五个这样的 UpdateTable 操作,并且每个操作只能创建一个索引。

  • 但是您不能真正同时运行多个 UpdateTable 操作,对吗?我正在尝试通过 java AWS sdk 做类似的事情;我正在尝试创建几个全局二级索引;当我尝试进行第二次更新时,我得到了同样的错误,从上面开始,关于“只能同时创建或删除 1 个在线索引......”;我发现我必须轮询表的状态,然后还要轮询所有索引的状态;如果其中任何一个处于 ACTIVE 以外的状态,我就会收到错误消息 (3认同)
  • 我在@user26270 得到同样的结果。并且`AmazonDynamoDB.updateTable` 返回一个`UpdateTableResult` 但显然它实际上还没有完成并且没有`UpdateTableResult.waitForReady()` 类型的函数。好郁闷!!! (2认同)