1

シナリオ:バージョン番号付きのオプティミスティック・ロックをサポートするDynamo DBテーブルがあります。 2つの同時スレッドが、同じプライマリキー値を持つ2つの異なるエントリをそのテーブルに保存しようとしています。保存操作中のDynamo DBのオプティミスティック・ロック動作

質問:後者の保存アクションでConditionalCheckFailedExceptionがスローされますか?

+0

こちらをご覧ください。私の答えがあなたの質問を解決したら教えてください。 –

答えて

1

はい、同じデータを挿入しようとする2番目のスレッドはConditionalCheckFailedExceptionをスローします。

com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException 

とすぐ項目がデータベースに保存されているように、後続の更新バージョンDynamoDBのテーブルに値が一致する(即ち、サーバー側の値)を有するべきです。新しい項目について、DynamoDBMapperは初期バージョン 番号1.あなたがアイテムを取得した場合、その 特性の1つ以上を更新し、変更内容を保存しようが割り当てられ、保存操作 が唯一の成功 - 保存

クライアント側のバージョン番号とサーバー側の が一致する場合DynamoDBMapperは、バージョン番号 を自動的にインクリメントします。

1

これまでも同様の使用例がありましたが、私たちの場合、複数のスレッドが最初にdynamoDBから読み込んで値を更新しようとしました。

最終的には、読んだ時点でバージョンが変更され、ドキュメントを更新しようとします.DynamoDBから最新の値を読み取らないと、中間更新が失われます(これは更新損失詳細はaws-docsを参照してください)。

このユースケースを持っているかどうかはわかりませんが、値を更新しようとしているスレッドが2つしかなく、要求がDynamoDBに届いている間に異なるバージョンを取得した場合、ConditionalCheckFailedException例外。

このエラーの詳細については、http://grepcode.com/file/repo1.maven.org/maven2/com.michelboudreau/alternator/0.10.0/com/amazonaws/services/dynamodb/model/ConditionalCheckFailedException.java

関連する問題