0

存在しない場合にのみ、エンティティをGoogle App Engine Datastoreに保存しようとしています。GAEデータストア内のエンティティを保存する方法競合状態を防止しながら存在しない場合のみ

主な問題は次のとおりです。2つのスレッドが同時にこれを行っている場合、エンティティの保存に成功するような競合状態を防止したい。

私は、このための最善のアプローチは何かわからない取引を利用しますが、仕事や1は、Memcacheの

を使用するなど、他のソリューションに頼らなければならないことを想定すると、Javaで低レベルAPIで

答えて

1

を答えを入力してください

datastore.add(entity); 

あなたがやりたいことになります。両方のスレッドは、このコードは、同じキーでエンティティを保存しようとしています。エンティティがすでに同じキーを持つデータストアに存在する場合、.add()は例外をスローします。

+0

クラスDatastoreServiceのために追加し、あなたが – man

+0

は、これらの中で[Java]タブをクリックして、このような機能のためのマニュアルを私をポイントしてくださいすることができますと呼ばれる機能がありませんdocs:https://cloud.google.com/datastore/docs/concepts/entities –

+0

完全なJavaソースはhttps://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/datastore/srcです。 /test/java/com/google/datastore/snippets/ConceptsTest.java –

1

App EngineからDatastore を呼び出すと、APIが異なります。トランザクションを使用します。エンティティがそこにいるかどうかを確認するために、まずエンティティを取得しようとします。そうでなければ、エンティティをput()します。

ここでApp EngineのAPIを使用してトランザクションを示しているいくつかのサンプルコードです: https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/appengine/datastore/src/test/java/com/example/appengine/TransactionsTest.java

関連する問題