はじめに

CouchDB とは

  • RESTful JSON API 経由でアクセス可能なドキュメント・データベース・サーバー
  • フラットなアドレス空間を持ち、アドホックでスキーマ不要のデータベース
  • 堅牢なインクリメンタル・レプリケーション機能を備えた分散データベースで、双方向での衝突の検出・管理が可能
  • JavaScript をクエリー言語に使うテーブル指向レポート作成エンジンを備え、クエリーやインデックス作成が可能なデータベース

ほかのデータベースとの違い

  • CouchDB はリレーショナル・データベースではありません。
  • CouchDB はリレーショナル・データベースの代わりにはなりません。
  • CouchDB はオブジェクト指向データベースではありません。もっと具体的に言うと、オブジェクト指向プログラミング言語向けのシームレスなパーシスタンス・レイヤ(永続化層)としての機能は持っていません。

主な特徴

ドキュメント

CouchDBのドキュメントは、名前の付いたフィールドから構成されるオブジェクトです。フィールドには、文字列、数値、日付のほか、順序付きリストや連想配列も値として収めることができます。CouchDB のドキュメントの例として、ブログの投稿記事を示します。

"Subject": "I like Plankton"  
"Author": "Rusty"  
"PostedDate": "5/23/2006"  
"Tags": ["plankton", "baseball", "decisions"]
"Body": "I decided today that I don't like baseball. I like plankton."

上のドキュメント例で、Subject は単一の文字列値 “I like plankton” を含むフィールドです。Tags は、“plankton”、“baseball”、および “decisions” を値のリストとして含むフィールドです。

CouchDB データベースは、このようなドキュメントのフラットなコレクションです。各ドキュメントは一意の ID で識別されます。

ビュー

半構造化データに構造を持たせるという問題に対処するため、CouchDB では、JavaScript を使って記述するビュー・モデルを採用しています。ビューは、データベース内のドキュメントを集約したり、レポートを作成したりするための手段です。ビューは、データベース・ドキュメントを対象とした集約、結合、およびレポート作成時に、オンデマンドで生成されます。ビューは動的に生成され、元のドキュメントは変更されないので、必要なら同じデータを対象にいくつでもビューを作成することができます。

スキーマ不要のデータベース

高度に構造化され、相互に関連性を持ったデータの保存やレポート作成を目的に設計されている SQL データベースとは異なり、CouchDB は大量の半構造化されたドキュメント指向データの保存やレポート作成を目的として設計されています。CouchDB によって、コラボレーション型 Web アプリケーションのほとんどを占めるドキュメント指向アプリケーションの開発は、きわめて容易になります。

SQL データベースでは、データベースに対するニーズが変わったら、それに応じて既存のデータのスキーマとストレージを更新する必要があります。しかし、この点がしばしば問題になります。当初のデータベース設計では、新しいニーズが生まれることを予想していないためです。そのため、スキーマの更新を行う必要のあるすべてのホストにとって、分散「アップグレード」は大きな負担になってしまいます。

CouchDB ではスキーマは不要なので、新しい意味を持った新しいドキュメント・タイプも、古いものと一緒にまったく問題なく追加することができます。JavaScript を使った CouchDB のビュー・エンジンは、新しいドキュメント・タイプはもちろん、タイプは異なっても互いに類似したドキュメントを簡単に処理できるよう設計されています。

分散データベース

CouchDB はピア・ベースの分散データベース・システムです。任意の数の CouchDB ホスト (サーバーやオフライン・クライアント) が、同一のデータベースの「レプリカ・コピー」をそれぞれ独自に保持することができ、アプリケーションはこれらのホストに対し、完全なデータベース機能(クエリー、追加、編集、削除)を利用することができます。データベースの変更は、ホストがオンライン状態に復帰した時点で、またはあらかじめ決められたスケジュールに従って、双方向にレプリケートされます。

CouchDB には衝突の検出・管理機能が組み込まれており、レプリケーション・プロセスはインクリメンタルで高速で、前回のレプリケーション以降に変更されたドキュメントや個々のフィールドだけをコピーします。ほとんどのアプリケーションでは、特別な準備をすることなく、分散更新とレプリケーションを利用できます。

CouchDB では、従来と同じモデルとデータベースをベースにして、その上に分散機能を付加するという面倒な方法は取らず、白紙の状態から熟慮を重ねて設計、計画、実装を行っています。CouchDB は、ドキュメント、ビュー、セキュリティ、およびレプリケーションの各モデルをはじめ、専用クエリー言語、効率的で堅牢なディスク・レイアウトといったすべての要素をよく考えて統合しているため、信頼性の高い効率的なシステムになっています。