オプティミスティック・ロックは、 プロジェクト内のアマゾンDynamoDBのでクライアントプロジェクトを更新されているのと同じ戦略を確保する(または削除)する方法です。あなたはこの戦略を使用する場合は、書かれた他の人がカバーされ、データベースの書き込み、およびその逆を防止します。
注意を払います
-
同時更新の間、原則的に「勝つために最後のライター」を使用してDynamoDBのグローバルテーブル。あなたがグローバルテーブルを使用する場合は、最後のライター戦略が優先配置します。予想通り従って、この場合には、ロックアウトポリシーは動作しません。
-
DynamoDBMapperのトランザクション操作は楽観的ロックをサポートしていません。
楽観的ロックを使用する場合は、各プロジェクトには、属性として機能するようにバージョン番号を持っています。あなたは、テーブル内の項目を取得した場合、アプリケーションは、プロジェクトのバージョン番号を記録します。あなたは、プロジェクトを更新することができますが、サーバー側の更新バージョン番号が変更されていない場合のみです。バージョンの不一致がある場合、それは他の人があなたの前にプロジェクトを変更することを意味します。更新の試みは、プロジェクトの古いバージョンを持っているので、それは、失敗しました。この場合は、単にプロジェクトを検索して、その後、更新して再度お試ししてみてくださいすることができます。オプティミスティック・ロックは、誤って他の人の変更を上書きするのを防ぐことができます。また、誤って変更内容を上書きから他の人を防ぐことができます。楽観的ロックをサポートするために、Java用AWS SDKは提供して @DynamoDBVersionAttribute
、コメントを。テーブルマッピングのクラスに適用するには、バージョン番号を格納する属性を指定し、それらをマークするために、このアノテーションを使用する必要があります。あなたがオブジェクトを保存すると、項目に対応するDynamoDBのテーブルは、対応するバージョン番号を格納した属性を持つことになります。DynamoDBMapper
それはあなたが最初のオブジェクトを保存する際、バージョン番号が割り当てられますし、バージョン番号の値が毎回プロジェクト更新インクリメントされます。プロジェクトのDynamoDBのテーブルに対応するリビジョンとクライアントオブジェクトのバージョンは、あなたの更新に合わせ、または成功するための要求を削除した場合のみ。
1 @DynamoDBTable(tableNameの= "ProductCatalog" ) 2 パブリック クラスCatalogItem { 3 4 プライベート整数ID。 5 プライベート文字列のタイトル。 6 プライベート文字列ISBN。 7 プライベート設定<文字列> bookAuthors。 8 プライベート文字列someProp。 9 プライベートロングバージョン。 10 11 @DynamoDBHashKey(たattributeName = "ID" ) 12 公共の整数のgetId(){ 戻りIDと、} 13 公共 のボイドSETID(整数同上){ この .ID = 同上。} 14 15 @DynamoDBAttribute(たattributeName = "タイトル" ) 16 公共の文字列のgetTitle(){ 戻りタイトル。} 17 公共 ボイドのsetTitle(文字列のタイトル){ この .TITLE = タイトル。} 18 19 @DynamoDBAttribute(たattributeName = "ISBN" ) 20 公衆ストリングgetISBN(){ 戻りISBNします。} 21 公共 ボイド setISBN(文字列ISBN){ この .ISBN = ISBN;} 22 23 @DynamoDBAttribute(たattributeName = "作者" ) 24 公衆セットの<string> getBookAuthors(){ 戻りbookAuthorsと、} 25 公共 ボイド setBookAuthors(セットの<string> bookAuthors){ この .bookAuthorsの=のbookAuthors。} 26 27 @DynamoDBIgnore 28 公衆ストリングgetSomeProp(){ 戻りsomeProp;} 29 公共 ボイド setSomeProp(文字列someProp){ この .someProp = someProp;} 30 31 @DynamoDBVersionAttribute 32 公開長いGETVERSION(){ 戻りバージョン。} 33 公共 ボイド setVersion(ロングバージョン){ この .version = バージョン;} 34 }