App Engine Transaction Puzzler @ashigeru さん

トランザクション制御のパターンを整理したお話。さすがしげるさんっす。twitterでお話聞いたりしてますが、僕のイメージ通りの人でしたw

appengineではentity groupの単位でしかトランザクションが保証されないうえに、一度作成したentity groupは変更できず、同一entity groupに含まれるentityの数に比例してパフォーマンスが劣化する。そんな取り扱いが面倒な奴らですが、対応策をパターンとして整理されていて、それなりのことはできそう。これは永久保存版の資料を見た方がいいと思います。

read-modify-writeなんてマルチスレッドでも問題になるようなところ。マルチスレッドも勉強しなおさないといけない。マルチプロセッサプログラミングというほうがそれっぽいのかな?

exactily enceは無理というのが僕の理解だったけど、実行のタイミングがいつでもよければ(eventually consistentでよければ)おおむね実現可能。なるほど。整合性が取れるまでqueryの結果は一致しないこともある(appengineのqueryはトランザクションに参加できない)。

getならトランザクションに参加できるし、思い切ってasync getで一つのトランザクションで全部getしてしまえばいいのでは?とか乱暴なことも思いつきました(同時実行可能なapi呼び出し数に制限があるということ、api呼び出しに課金されることを考えると現実的じゃないかも)。


あさみさんのこちらこちらのつぶやき、前回のたけざきさんとの話題とも関連して、再利用がアセンブリを対象とする流れから、サービスを再利用する流れに成るのかも。どうせクラウド環境ではトランザクション制御がきわめて限定的になるので、アプリケーション内部でもサービス連携的な発想で開発する、という流れにもなるのではないかなぁと思いました。