使用 DynamoMapper 和类 Annotation 创建具有全局二级索引的表
Posted
技术标签:
【中文标题】使用 DynamoMapper 和类 Annotation 创建具有全局二级索引的表【英文标题】:Create table with Global secondary index using DynamoMapper and class 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 手动创建?
【问题讨论】:
【参考方案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));
【讨论】:
以上是关于使用 DynamoMapper 和类 Annotation 创建具有全局二级索引的表的主要内容,如果未能解决你的问题,请参考以下文章
使用EventBus,debug时不报错,release版本报错:its super classes have no public methods with the @Subscribe annota
使用EventBus,debug时不报错,release版本报错:its super classes have no public methods with the @Subscribe annota
解决:Unable to identify index name. XXXModel is not a Document. Make sure the document class is annota