web-dev-qa-db-ja.com

Java)でDynamoDBMapperを使用してDynamoDBアイテムを更新します

DynamoDBMapperを使用してDynamoDBアイテムを更新するにはどうすればよいですか?

DynamoDBテーブルを使用する複数のプロセスがあるため、get + saveを使用すると不整合が発生します。 DynamoDBMapperを使用してアイテムを更新するメソッドが見つかりません。

9
meeza

save()メソッドは、SaveBehaviorで設定された値に基づいてputItemまたはupdateItemを実行します。以下の説明を参照してください。このため、DynamoDBMapperクラスには更新メソッドがありません。ただし、使用できる個別の削除方法があります。

DynamoDBにアイテムを保存します。使用されるサービスメソッドは、AmazonDynamoDB.putItem(PutItemRequest)またはAmazonDynamoDB.updateItem(UpdateItemRequest)のいずれかを使用するために、DynamoDBMapperConfig.getSaveBehavior()値によって決定されます。

PDATE(デフォルト): UPDATEは、保存操作でモデル化されていない属性に影響を与えず、モデル化された属性のnull値は、DynamoDBのそのアイテムから削除します。 updateItemリクエストの制限により、UPDATEの実装は、キーのみのオブジェクトが保存されているときにputItemリクエストを送信し、指定されたキーがテーブルにすでに存在する場合は別のupdateItemリクエストを送信します。

PDATE_SKIP_NULL_ATTRIBUTES: UPDATEと似ていますが、null値の属性を無視し、DynamoDBのそのアイテムから削除しない点が異なります。また、オブジェクトがキーのみであるかどうかに関係なく、単一の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);
23
notionquest

ダイナモデータベースの書き込み操作に一貫性を持たせるには、オプティミスティックロックと条件付き書き込みのどちらかを選択する必要があります。

役立つ可能性のあるAWSドキュメントへのリンクは次のとおりです。

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

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

0
Shibashis