2010年01月15日
websocketでpipelineをすると、感動的に早い!!

昨日、Webkit & Opera/HTML5勉強会で紹介したwebsocket&MeCabによる「坊ちゃん」への自動ルビ(ふりがな)振りデモですが、よくよく考えたら「pipelineってことは、解析リクエストの結果が返るのを待ってたらダメじゃん」ってことで、こちらのデモをwebsocket pipelineに替えてみました。 すなわち、文単位の解析依頼をとにかく送りつづけて(解析結果が返ってくるのを待たずに)、どれぐらい高速化するか見てみようというわけです。そもそも、websocketは、好き勝手に送受信できるプロトコルなので、pipeline処理にはうってつけだよね!ってことで。 あと、テキストマイニングと言えば、「やっぱり基本はわかちでしょ」ということで、websocket pipelineを使ったわかち書きのサンプルも作って見ました。 コードは、http://code.google.com/p/websocket-sample/wiki/samples?ts=1263487925&updated=samples にcommit済み。
- auto-ruby : /html/pub/mecab/ruby.html & /python/pub/mecab/ruby_wsh.py
- wakachi : /html/pub/mecab/wakachi.html & /python/pub/mecab/wakachi_wsh.py
websocket pipelining ちょーーー早い!!
localhost環境でも xhrのparallel処理と比べると10倍ぐらい早いです。NW経由で比較すれば、その差は更に大きくなると思います。多分。 テキストマイニング環境のセットアップって何気にめんどくって、例えば「共有の形態素解析サーバー立てると楽だよなぁ・・・」というのはここ最近のテーマだったのです。なんですが、なにせRESTで立てちゃうとオーバーヘッドコストが高すぎて(遅すぎて)使い物にならなかったというのが実状。 テキストマイニング屋さんって、平気で1万文書ぐらいは軽く解析しちゃう(これぐらいが最低ライン)んで、例えば1文書に1secとかかかっちゃうと、解析終わるのに大体3時間待たなきゃなんない。。。これが10万文書とかだと・・・まぁやってられないわけです。それがwebsocket pipelining使えばローカル環境と同等の快適さをリモート環境で実現可能。スバラシすぎです。しかもwebsocketのクライアントライブラリは、python, ruby, phpとサンプルがありますので、クライアントでのソケットコーディングも不要。最高ですね。 あと、webアプリとテキストマイニングを組み合わせるハードルも劇的に下がりますね。これだけのスピードが出せるんであれば、積極的に活用しようって気になれます。 こういったケースは、テキストマイニングだけの話ではないはずで、そういったユースケースがたくさん出てきてくれるといいなぁと期待しています。 ちなみに、比較のためのxhr用に
/html/pub/mecab/do.py
を使っています。上のファイルをmod_pythonで動かすために、httpd.confで
<Directory /home/komasshu/www/pub/mecab> AddHandler mod_python .py PythonHandler mod_python.publisher PythonDebug On </Directory>