Rails から CouchDB を使おうと、既存のライブラリを物色した。ActiveCouch と RelaxDB が目に付いたので、試してみた。



<p>パッケージの形態としては、ActiveCouch は rails (2.x) のプラグインとして作られている。一方、RelaxDB は Ruby のライブラリ。それに加えて、Merb のプラグインが存在する。Rails からの利用も、特に問題なし</p>

<p>設計思想的に、一番大きく違うのは、DB を作成する単位であるように思う。ActiveCouch はモデル毎に DB を作成することを前提に作られている。RelaxDB は、ひとつの DB に全てのモデルを格納し、document に持たせた relaxdb_class field でモデルを識別する。CouchDB はスキーマレスであり、型(そもそも型なんて無いが)の異なる document をすべて一緒に保存しておけるのが特徴なので、RelaxDB の方が、より CouchDB が期待する使い方に近いと思われる。</p>

<p>例えば MySQL であれば、ひとつのデータベースサーバが複数の DB を持ち、DB の中には複数のテーブルがあり、テーブルの中に複数のデータがある、という階層構造を持つ。CouchDB は、ひとつのデータベースサーバが複数の DB を持ち、DB の中に複数のドキュメント(データ)を持つという階層なので、ActiveCouch のような DB の使い方をすると、複数のアプリケーションから CouchDB を使うときに困りそう。</p>

<p>他に気になった点。ActiveCouch は ActiveRecord であらんとするのを目標としている。使う者としては ActiveRecord 的な動作を期待するのだが、結局のところドキュメントに書かれている範囲を超えては ActiveRecord として振舞ってくれないので、あちこちで裏切られる。発展途上なのだろうから仕方がないが、RelaxDB のように「私は別に ActiveRecord ってわけじゃありませんけど」と装いながら、ActiveRecord 的に使うことのできるライブラリのほうが、先入観を持たされない分、よいかもしれない。とはいえ、ActiveRecord のように振舞ってくれる度合いは、ActiveCouch も RelaxDB も、似たようなもの。</p>

<p>結局、DB を作成する単位を重視して、RelaxDB を使うことにした。</p>