分散への考察その1−分散カウンタ方式

スケールするカウンタの実装として、「分散カウンタ」というのが知られています。
appengineでは更新処理に比べてgetがとても早いので、カウンタ用のEntityを複数個用意して、
 ・更新はランダムに選んだどれか一つに対して実施
 ・カウンタの値は全部parallel getして合計値を計算
とすることで、高速かつスケールするカウンタが実現できる、というものです。


上にも書きましたが、この実装ではEntity1個でやっているので、この考え方がほとんどそのまま使えます。
実際に実装したのがこちらです。
http://tetz-lab.appspot.com/ranking/?type=sharding


id:bluerabbitさんの、
http://d.hatena.ne.jp/bluerabbit/20091226/1261756546
を参考にさせていただきました。ありがとうございました。m(__)m


ランキング計算にかかる時間は初回は800〜1300ミリ秒程度と少々遅いものの、2回目以降は70〜200ミリ秒程度とそれ程変わらない速度が出ています。parallel getって早いんですね。
更新はEntity一つの場合とほとんど変わらない値が出てました。