読者です 読者をやめる 読者になる 読者になる

addint, adddouble

TokyoTyrant

... キーに対応づけたint型またはdouble型の数値をアトミックに加算し、戻り値として加算後の値を返します。

int DB::add_int(string key, int num);
double DB::add_double(string key, double num);

上記のメソッド群がない場合、getして値を取り出してからそれを加算した結果の値をputをすることになるのですが、その方法だと2回演算が必要であるのみならず、アトミック性を確保するためにアプリケーション側でロックをかけなければならないので、大変効率が悪くなってしまいます。(中略)なお、Tokyo Tyrant(TT)のバイナリプロトコルでも数え上げができるようになったので、同じような悩みのある方はぜひチェックしてみてください。

http://alpha.mixi.co.jp/blog/?p=219


同じような悩みがあるので、PyrexTokyo TryrantのC APIのラッパーを書いて試してみた。

import tcrdb
db = tcrdb.db("127.0.0.1", 1978)

db.vanish()

assert db.addint("spam", 1) == 1
assert db.addint("spam", 1) == 2
assert db.addint("spam", 1) == 3

こりゃいいや!


というか、初めてPyrexを使ってみたけど、チュートリアルを読みながらでも2時間ぐらいでTokyo TyrantAPIのラッパーが書けた。むしろPyrexの威力の方に驚愕。あとはテストを書けば実践投入できそうだな。