在 Java 中使用 DynamoDBMapper 更新 DynamoDB 项目

如何使用 DynamoDBMapper 更新 DynamoDB 項目?

我有多个进程,使用 DynamoDB 表,因此,获取 + 保存将产生不一致。我找不到使用 DynamoDBMapper 更新项目的方法。


答案 1

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

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

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

UPDATE_SKIP_NULL_ATTRIBUTES :与 UPDATE 类似,只是它忽略任何空值属性,并且不会从 DynamoDB 中的该项目中删除它们。它还保证只发送一个 updateItem 请求,无论对象是否为仅键。

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

用法示例:-

DynamoDBMapperConfig dynamoDBMapperConfig = new DynamoDBMapperConfig(SaveBehavior.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);

答案 2

要使 dynamo 数据库写入操作保持一致,您必须在乐观锁定和条件写入之间选择一个选项。

以下是 AWS 文档的链接,这些文档可能会对您有所帮助;

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

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


推荐