使用Java中的DynamoDBMapper更新DynamoDB项

时间:2016-10-20 10:52:45

标签: java amazon-dynamodb distributed-computing

如何使用DynamoDBMapper更新DynamoDB项目?

我有多个进程,使用DynamoDB表,因此,get + save会产生不一致。我找不到使用DynamoDBMapper更新项目的方法。

2 个答案:

答案 0 :(得分:21)

save() 方法将根据 SaveBehavior 中设置的值执行putItemupdateItem。请参阅以下说明。由于这个原因,DynamoDBMapper类中没有更新方法。但是,有一个单独的删除方法。

  

在DynamoDB中保存项目。使用的服务方法由确定   DynamoDBMapperConfig.getSaveBehavior()值,使用其中任何一个   AmazonDynamoDB.putItem(PutItemRequest)或   AmazonDynamoDB.updateItem(UpdateItemRequest):

     

更新(默认):   UPDATE不会影响保存操作的未建模属性和   建模属性的null值将从该项中删除它   DynamoDB。由于updateItem请求的限制,   UPDATE的实现将在仅密钥时发送putItem请求   正在保存对象,如果是,它将发送另一个updateItem请求   表中已存在给定的密钥。

     

UPDATE_SKIP_NULL_ATTRIBUTES:与UPDATE相似,只是忽略了   任何空值属性,并不会从中删除它们   DynamoDB。它还保证只发送一个updateItem   请求,无论对象是否为key-only。

     

CLOBBER: CLOBBER   将清除并替换所有属性,包括未建模的属性,   (保存时删除并重新创建)。版本化的字段约束也将   被忽视。 saveExpression参数中指定的任何选项   将由于版本化属性而叠加在任何约束上。

示例用法: -

DynamoDBMapperConfig dynamoDBMapperConfig = new DynamoDBMapperConfig(SaveBehavior.UPDATE);

UPDATE 似乎不推荐使用DynamoDBMapperConfig(aws sdk 1.11.473)构造函数,而应该使用构建器:

DynamoDBMapperConfig dynamoDBMapperConfig = new DynamoDBMapperConfig.Builder()
  .withConsistentReads(DynamoDBMapperConfig.ConsistentReads.CONSISTENT)
  .withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.UPDATE)
  .build();
dynamoDBMapper.save(yourObject, dynamoDBMapperConfig);

答案 1 :(得分:0)

To have consistency in your dynamo db write operations you will have to choose one option between Optimistic locking and Conditional writes.

Here are the links to AWS documentation which may help you;

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBMapper.OptimisticLocking.html

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.SpecifyingConditions.html