Apache CouchDB is a document-oriented database that can be queried and indexed in a MapReduce fashion using JavaScript.

待望のMySQL 5.5 GAの登場が控えているが、SQLを使わないデータストレージ、いわゆるNoSQLの活用シーンも増え続けている。NoSQLはデータストレージごとに採用しているスキーマもデータへのアクセス方法も違う。RBDMSで身につけたスキルはそのままでは適用できない。RDBMSとNoSQLは競合する関係というよりも補完関係にあると捉えておくといい。これまで汎用的に扱っていたものがRDBMS+SQL、それぞれの用途に特化したデータストレージがNoSQLであり、ケースに依ってはRDBMSを使うよりもNoSQLを採用した方が扱いやすいことがある。

NoSQLのひとつにCouchDBがある。CouchDBのブログにおいて、MySQLからCouchDBに移行するための記事が掲載されている。今後もしばらく連載として掲載が続くとみられる。MySQLからCouchDBへ移行する際の参考になる。

Part 1はそもそもどういった違いがあるのか知るうえで参考になり、Part 2は具体的なコードが示されているためプログラマにとって理解しやすい。Part 1ではまずMySQLの基本的な仕組みを紹介。データをテーブルで表現するのが基本的な方法であり、複雑なデータ構造をもったデータを保持する場合には複数のテーブルに分割して保持する。

たとえばレシピを表現するなら、レシピという基本テーブルを作成するとともに、材料、調理方法、メタデータ、キーワードといったテーブルを用意して関連付ける。テーブル間のデータはレシピIDで結びつける。データを追加したり取得するにはSQLクエリを利用する。この方法の問題点は複数のテーブルを扱うことの複雑さにある。

一方CouchDBでは、複雑な構造のデータはそのままJSONフォーマットで表現してストレージに保持する。MySQLのように複数のテーブルに分けるといったことはせず、ひとつのデータはひとつのJSONオブジェクトとして保存される。レシピの例であれば、レシピオブジェクトには材料、調理方法、メタデータ、キーワードなど必要なものは全部入っている。

CouchDBではデータへのアクセスはMySQLとはだいぶ異なる。viewと呼ばれるデータ構造を定義し、URLを使ってデータにアクセスする。MySQLのようなRDBMSがテーブルの作成時に明確なデータ構造を規定するのに対して、CouchDBではデータの構造を定義しない。JSONオブジェクトが追加されるだけだ。かわりに、アクセスする段階でデータ構造を定義し、URLでアクセスする。さまざまなデータを保持することができ、データはJSONオブジェクト、そしてアクセスにURLを使うということでJavaScriptとの相性が抜群によい。実際にどういったコーディングになるかはPart 2が参考になる。

CouchDBのように、NoSQLに分類されるデータストレージはそれぞれ特徴が異なる。MySQLなどのRDBMSからそういった特定の用途に特化したデータストレージへ移行する場合、RDBMSで身につけたスキルを適用するのではなく、対象となるNoSQLが提供している仕組みを理解し、その方法に適した手段を採用する必要がある。