1

Google App Engine を使用して Web サイトを作成していますが、サーバー側のサーブレットと、それらがデータストア データベースとどのように相互作用するかについて質問があります。

基本的に、読み取り-変更-書き込みの従来の競合状態に戻ります。つまり、データストアからエンティティを読み取り、場合によっては更新し、更新がある場合はそれを書き込みます。

基本的に、データストアへのアクセスを同期できますか? する必要がありますか?私が理解していることから、サーバーはサーブレットのインスタンスを好きなだけ生成できます。「舞台裏」で静的メソッドを使用しているので、静的メソッドを静的ロックオブジェクトと同期できると思いました。

基本的に、競合状態などに対するどのような防御策を講じる必要があるか、または取る必要がないかはわかりません。どこかに便利なガイドがあればそれは素晴らしいことですが、私はそれを見つけることができないようです.

4

2 に答える 2

1

synchronizedここでは、GAE によって生成できるサーブレットのインスタンスが (それだけでなく) 多数あるだけでなく、さまざまな VM も多数存在するため、どの戦略も役に立ちません。データストアの一貫性の問題を防ぐという基本的な質問を解決するには、アトミック トランザクションでデータにアクセスする必要があります。ここを確認してください:取引

于 2012-09-30T19:28:23.270 に答える
1

GAE とそのデータストアについては知りませんが、標準のサーブレットでは、コンテナーは各サーブレットのインスタンスを 1 つだけ作成し、そのサーブレットに同時にアクセスします。これはあなたの問題ではあまり変わりません。

データストアへのアクセスを同期することはお勧めできません。まず第一に、データベースへのアクセスが許可されるのは 1 つのクライアントのみであり、他のすべてのクライアントは待機する必要があるため、これはすぐにボトルネックになります。これは受け入れがたい。また、アプリケーションが複数のサーバーにデプロイされている場合、ソリューションは機能しなくなります。synchronizedブロックはクラスター化されていません。

あなたが探しているのはトランザクションです- App Engine Datastore がそれらをサポートしているようです。

于 2012-09-30T20:17:47.903 に答える