【发布时间】:2017-03-02 07:59:01
【问题描述】:
如何使用 DynamoDBMapper 更新 DynamoDB 项目?
我有多个进程,使用 DynamoDB 表,因此,get + save 会造成不一致。我找不到使用 DynamoDBMapper 更新项目的方法。
【问题讨论】:
标签: java amazon-dynamodb distributed-computing
如何使用 DynamoDBMapper 更新 DynamoDB 项目?
我有多个进程,使用 DynamoDB 表,因此,get + save 会造成不一致。我找不到使用 DynamoDBMapper 更新项目的方法。
【问题讨论】:
标签: java amazon-dynamodb distributed-computing
save() 方法将根据 SaveBehavior 中设置的值执行putItem 或updateItem。请参考以下说明。由于这个原因,DynamoDBMapper 类中没有更新方法。但是,有一个单独的删除方法可用。
在 DynamoDB 中保存项目。使用的服务方法由 DynamoDBMapperConfig.getSaveBehavior() 值,使用任一 AmazonDynamoDB.putItem(PutItemRequest) 或 AmazonDynamoDB.updateItem(UpdateItemRequest):
更新(默认): UPDATE 不会影响保存操作和 建模属性的 null 值会将其从该项目中删除 动态数据库。由于 updateItem 请求的限制, 当只有键时,UPDATE 的实现将发送 putItem 请求 对象正在被保存,如果它会发送另一个 updateItem 请求 给定的键已经存在于表中。
UPDATE_SKIP_NULL_ATTRIBUTES : 与 UPDATE 类似,只是它忽略 任何空值属性,并且不会将它们从该项目中删除 动态数据库。它还保证只发送一个 updateItem 请求,无论对象是否仅键。
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);
【讨论】:
要在您的 dynamo db 写入操作中保持一致性,您必须在乐观锁定和条件写入之间选择一个选项。
以下是 AWS 文档的链接,可能会对您有所帮助;
【讨论】: