例えば、
ServletインスタンスA
データストアの値をインクリメントして
データストアに格納
ServletインスタンスB
データストアの値をデクリリメントして
データストアに格納
という処理が並走してしまい、おかしな結果になる事はありえるのでしょうか?
実装が分からないと何とも言えませんが、単純にshardを増やすだけで並列処理は実行できます。
また、配列処理が行われていなくても、1つのエンティティまたは 1つのエンティティグループが非常に頻繁に更新される場合、データストアの競合は起こります。
回避策については以下をご覧ください。
https://developers.google.com/appengine/articles/scaling/contention?hl=ja
>2つ平行で同時に走る事もあるのでしょうか
ありえます。
>という処理が並走してしまい、おかしな結果になる事はありえるのでしょうか?
対策しないとそうなります。
■
synchronizedを使用して、非同期に同時に動作しないような仕組みにするとかそういうことを考えるべきでしょう。
http://java.akjava.com/library/guava_libraries/suppliers
並行的に受け付けているらしいです。
http://mergedoc.sourceforge.jp/tomcat-servletapi-5-ja/javax/servlet/http/HttpServlet.html
ほかの方が言っているとをり対策をしないとおかしなことになるようです。
コメント(0件)