我目前正在使用Java dynamoMapper来创建和查询表。尝试创建具有全局二级索引的表时,出现以下错误
No provisioned throughput specified for the global secondary index
我表示该表的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手动创建?
答案 0 :(得分:14)
您还需要在将生成的每个辅助索引表上设置预配置吞吐量。
int
答案 1 :(得分:3)
扩展到@ Jeremy的回答。
如果您有多个GSI,那么您可以像下面这样做。如果它们具有相同的值,您也不需要一直创建ProvisionedThroughput对象。
final ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput(5L, 5L);
createRequest.setProvisionedThroughput(provisionedThroughput);
createRequest.getGlobalSecondaryIndexes().forEach(v -> v.setProvisionedThroughput(provisionedThroughput));