Tokyo Cabinet(Tokyo Tyrant)を使う理由
なぜ最近、Tokyo Cabinet、Tokyo Tyrantと言い続けているのか?と言うと、memcacheの代替として使えないかなーと思っているからです。ここ最近、cakePHPもそうなんですが、セッションストレージとしてmemcacheを使うケースが多くなってきている気がしています。自分自身、仕事で作るアプリケーションの一部にはセッションストレージでは無いのですが、memcacheをストレージとして利用しているケースがいくつかあります。
それらの運用をしていく中で、気がついたのは「memcache 落ちたら消える さようなら」と言う事です。いくらレポリケーションしていたとしても、落ちたら消えます。きれいさっぱり。
仮にログインセッションをmemcacheにストレージしていた場合、「memcache 落ちたらログアウト さようなら(字余り)」と言う事になりかねない訳です。つまり、memcacheにストレージすべきデータは、落ちても、さようならしても簡単に復旧可能もしくは、痛く無いデータであるべきで、でもそう言うデータって比較的少ない。
であれば、memcache並みに高速で且つ、落ちてもデータが維持されるストレージが必要になったわけです。その結果がTokyo Cabinet(と、Tokyo Tyrant)だったわけです。もちろん、Barkley DBとかSQLiteとかでもよかったのですが、比較的に扱うデータ量が多いため、パフォーマンスの観点で良いと評判が良かったTokyo Cabinet(と、Tokyo Tyrant)に傾いたと言う結果です。
それに、Tokyo Tyrantはmemcacheと互換性のあるインターフェスを提供してくれているので、memcacheで作ったアプリケーションであっても簡単に移植できるのではー?と踏んだところもあります。例えばですが、memcacheでこんなコードを書いていた場合、
[PHP]
$memcache = new Memcache;
$memcache->connect(‘localhost’, 11211);
$memcache->set( ‘sample’, ‘this is sample recode’ );
echo $memcache->get( ‘sample’ );
$memcache->close();
[/PHP]
Tokyo Tyrantの場合、
[PHP]
$memcache = new Memcache;
$memcache->connect(‘localhost’, 1978); // 起動ポートを変更
$memcache->set( ‘sample’, ‘this is sample recode’ );
echo $memcache->get( ‘sample’ );
$memcache->close();
[/PHP]
こんな感じになるわけです。
いずれにせよ、mixiみたいに大規模なものではありませんが、今後はTokyo Cabinetを(なるべく)利用して、ノウハウを少しでもこちらで共有できるといいなと思います。
Posted in: 技術の話
コメントする

