【问题标题】:Create table with Global secondary index using DynamoMapper and class Annotation使用 DynamoMapper 和类 Annotation 创建具有全局二级索引的表
【发布时间】:2016-08-17 11:06:15
【问题描述】:

我目前正在使用 Java dynamoMapper 来创建和查询表。尝试使用全局二级索引创建表时,出现以下错误

没有为全局二级索引指定预置吞吐量

代表表的 java 类具有全局二级索引的此属性。

@DynamoDBIndexHashKey(globalSecondaryIndexName="sender")
    public String getSender() {
    return sender;
}

创建表的类如下所示

public boolean createTable() {
try {
DynamoDBMapper mapper = new DynamoDBMapper(client);
CreateTableRequest tableRequest =     mapper.generateCreateTableRequest(entityClass); // 1
tableRequest.setProvisionedThroughput(new ProvisionedThroughput(1000L, 1500L)); // 2
client.createTable(tableRequest); // 3

    } catch (Error e) {
        e.printStackTrace();
        return false;

    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

我在亚马逊网站上搜索了额外的注释和配置,但没有找到 DynamoMapper。无论如何要使用 ORM 来执行此操作,还是我必须使用较低级别的 API 手动创建?

【问题讨论】:

    标签: java amazon-web-services amazon amazon-dynamodb


    【解决方案1】:

    您还需要在将生成的每个二级索引表上设置预置吞吐量。

    tableRequest.getGlobalSecondaryIndexes().get(0).setProvisionedThroughput(new ProvisionedThroughput(10l, 10l));
    

    【讨论】:

      【解决方案2】:

      @Jeremy 答案的扩展。

      如果您有多个 GSI,那么您可以像下面这样操作。如果它们具有相同的值,您也不需要一直创建 ProvisionedThroughput 对象。

       final ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput(5L, 5L);
       createRequest.setProvisionedThroughput(provisionedThroughput);
       createRequest.getGlobalSecondaryIndexes().forEach(v -> v.setProvisionedThroughput(provisionedThroughput));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-28
        • 2020-02-27
        • 2020-11-12
        • 2015-11-03
        • 2017-10-11
        • 2023-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多