1) データを保存し、2) データを処理する 2 つのサーバー側 HTTP エンドポイントを実装しました。メソッド 1) は、 App Engine タスクを介してメソッド 2) を呼び出します。これは、クライアントに待機させたくない時間のかかるタスクであるためです。このプロセスを以下のシーケンス図に示します。
ときどき、処理タスク (下のシーケンス図ではprocessSomethingthrow WtfException()
という名前) が処理しようとしたときにデータを見つけられないことがあります (下の黄色で示されています)。これは、ここで説明されている結果整合性モデルで説明できますか?
ドキュメントには、読み取りには強力な一貫性がありますが、書き込みには最終的な一貫性があると書かれています。この事件に関連して、それが正確に何を意味するのかはわかりません。説明をいただければ幸いです。
編集:ここでブール値の質問をしていることに気づきましたが、最終的な整合性が一般的であり、具体的にはGoogleデータストアに関するドキュメントでバックアップされた回答を探していると思います
編集2:リクエストにより、実際の読み取り/書き込み操作の詳細は次のとおりです。
書き込み操作:
entityManager.persist(hand);
entityManager.close()
データの永続化に JPA を使用しています。オブジェクト「手」はクライアントから受信され、以前にデータベースに保存されていないため、新しいキーId
が割り当てられます。
読み取り操作:
SELECT p FROM Hand p WHERE p.GameId = :gid AND p.RoundNo = :rno
主キーGameId
でもありません。RoundNo
GameId は「外部キー」ですが、Datastore は設計上それを認識していません。