External Process について

id:shase_lab さんの記事がでてました。

http://www.atmarkit.co.jp/fdb/rensai/09_couchdb/03/couchdb01.html

P.3にJScriptがでてきたり、Windowsへのインストール方法が説明されていたりするので、広まりそうですね。

ところでExternal Processについては少し突っ込んでおくことにします。

http://d.hatena.ne.jp/yssk22/20090708/1247078669 で検証しましたが、基本的には1 External Process のURI について1時点で1つのプロセスしか起動できません。CGIよりも並列性が悪いのです。

また、マルチスレッドでがりがりやるぜ!って人はいいんですが、それでも結局1プロセスないででSTDIN/OUTを共有して CouchDB側に、リクエストに対するレスポンスを直列化して返さなければならないので、とんでもなくパフォーマンスが悪くなります。

と、普通のWeb Appのようにユーザーからのリクエストを処理するのには実は向きません。どちらかというと、External Process をアプリで使う場合、バッチ処理のトリガーにするためのEndpointとして使う方がいいと思います。(そういう意味で、JSでバッチかく、というのは普通に育ってきた人ならしんどいと思うので、自分の得意な言語で書くといいと思います。

Twitterの検索結果をひたすらCouchDBにためるアプリを書いたときも、(CouchDBのJSにはHTTP Client機能がないので) python で search.twitter.com にアクセスするのですが、External Process では、 http://github.com/yssk22/tstore/blob/master/search/_attachments/jobs/crawler/external.py の48,49行目あたりで別スレッドをバックグラウンドで立ち上げて、External Process自体はすぐにHTTPレスポンスを返すようにしています。