CommonJS サポート!

http://wiki.apache.org/couchdb/commonjs_modules

ということで、デザインドキュメントにモジュールを放り込んでおいて、require("hogehoge") で呼べるようになるようです。

先日の録画システムのベンチをしてみたんですが(ML115, Opteron 1800MHz 2 core / 8GB RAM / 1TB 7200 rpm SATA)、

24時間分の番組表をレンダリングするのに、PHP + MongoDB で ab かけたら 15qps ぐらいで、CouchDB + list function だと 2 qps とすごく残念な結果に終わったんです。で、なんでレイヤー一個飛ばしているのにこんなに残念なのよ!と思ったら、JavaScriptというかSpiderMonkeyがものすごく遅い。 list 関数を呼び出すたびに関数定義の文字列をevalして、とかやっているもんだから、番組表みたいにちょっと面倒な処理(padding埋めなどの) 複雑な処理をかけるととてつもないことになるのです。

えーって思いながら、listで実装していた分をクライアントサイドのjQueryでやって、CouchDBでは、データだけを返す、ってやったら 18 qps ぐらいになったんだけど。クライアントの部分はクライアントの数だけスケールするのは当たり前だ、というロジックを持ってすれば、PHP + MongoDB なんて目じゃないよね、とかいう無茶な主張はしたくないので、ちょっと何とかしたいです。

CommonJSは少し時間がかかりそうなので、PythonとかErlangとかその辺のビューサーバーで遊んでいます。

でも、よくよく考えたら、CouchDB <-> View Server の間は stdin/out なんだから

Client <-> CouchDB <-> App Server

とか意味不明なアーキテクチャもできるよね!と思ったところで熱がではじめました。