【问题标题】:Update DynamoDB item using DynamoDBMapper in Java在 Java 中使用 DynamoDBMapper 更新 DynamoDB 项目
【发布时间】:2017-03-02 07:59:01
【问题描述】:

如何使用 DynamoDBMapper 更新 DynamoDB 项目?

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

【问题讨论】:

    标签: java amazon-dynamodb distributed-computing


    【解决方案1】:

    save() 方法将根据 SaveBehavior 中设置的值执行putItemupdateItem。请参考以下说明。由于这个原因,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);
    

    【讨论】:

      【解决方案2】:

      要在您的 dynamo db 写入操作中保持一致性,您必须在乐观锁定和条件写入之间选择一个选项。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 2019-02-16
        • 2015-07-01
        • 1970-01-01
        • 2019-01-08
        • 1970-01-01
        相关资源
        最近更新 更多