Hatena::Grouperlang

weekend erlang programmer

ここの更新は止まってしまいました。面倒なので全部kuenishiの日記に書くことにしました。
 | 

{2009, 12, 22}

そろそろtokeについてひとこと言っておくか 23:20 はてなブックマーク - そろそろtokeについてひとこと言っておくか - weekend erlang programmer そろそろtokeについてひとこと言っておくか - weekend erlang programmer のブックマークコメント

RabbitMQとか作っている人が絡んでいるLShiftがtokeというライブラリを発表したのをボルンタス経由で知ったのでちょっくら調べてみたです。

The other issue with tcerl is that it’s not a linked-in driver. Erlang allows two different types of drivers: the first are external C programs — these have a main() and run in their own process. Communication is done by stdin/stdout. These are a bit safer because if they crash they don’t take out the Erlang VM, but they’re never going to be blazingly fast.

Merry Christmas: Toke ? Tokyo Cabinet driver for Erlang ? LShift Ltd.

tcerlはport driver使ってるから遅いしメンテする気もないらしいから自分たちで作ってみたよと書いてあるだけ。TCはテラ速いから使いたいんだよねとも言っています。この日記をご覧になっている方にしてみればさんざんガイシュツなネタなわけですが(これとかこれとか)、普段から英語で情報発信しておかないとこういうことになるのですねという見本のような出来事ですねorz

まとにかくインターフェースとか全然調べないで真っ先にソース見てみたわけですがシンプルすぎてワロタ、もとい驚きました。ポイント(Pros)は

  • linkedin driverを使っているので速い
  • インターフェースがとてもシンプルなので使い易いしバグも少ないしコードも驚くほど読みやすくてきれい
  • 中の人がフルタイムでメンテできるので安心できる

くらい。似たようなもの作ってる者として問題点はよく分かっていて(Cons)、

  • linkedin driverとはいえportをひとつしか作っていないのでTCの真価たるマルチスレッド性能が出せない*1

ってのが一番の問題。

あとはライバルとして、Yatceとの違い:

  • toke >< yatce
    • tokeだとbinaryを入れないといけないけど、yatceだとtermをそのまま突っ込める(そんなに違わないかw)
    • yatceだとport_controlを使っているのでスレッドコンテキストの切り替えが入らずレスポンスが高速(多分)。一方、tokeはport_commandを使っている(insert_asyncを入れていることからも分かるけど)ので、スループット重視...ってRabbitMQで使うんだから当たり前か
  • toke >> yatce
    • putcat, fold, insert_async, チューニング周り
    • エラーコード周りがきれい、というかインターフェースがとてもきれい
    • メンテナが信頼できる(えー
  • yatce >> toke
    • size, syncなど生のAPIがメイン
    • tcadbなのでディスクB+-tree / オンメモリHash / オンメモリB+-treeが使える
    • 複数のテーブルをオープンできる
      • toke:start_link/0しないと動かないみたいだけど、gen_serverを二つ立てれてもddllを二回ロードできないんじゃないかな?
      • driverのデータ構造がひとつしかない(ポートひとつにつきひとつしかテーブルをオープンできない)... とはいえ、yatceのdriverも複数のテーブルを持っておくためにconcurrent hashmapを保持していて、今のボトルネックは多分そこのロック周りだと思われる。
    • NIF版もあるでよ!!

英語でもほぼ同じ内容を書いてみた。これからはそっちメインにしたらいいのかなぁ。

*1:どうやればLinkedin driverでマルチスレッド性能が出せるかは分かってるんだけど...NIFが出るからまいっかという感じ

 |