# CouchDB CouchDB は、Lotus Notes を開発していたダミエン・カッツ(Damien Katz)によって始められたドキュメント指向型データベースである。『ウェブオペレーション』第15章(2011年)執筆時点では、コア開発者の多くが所属する CouchIO 社がサポートしており、CouchDB とそのサポートを行う Cloudant という会社もあった。導入企業として BBC・Engine Yard・Meebo・Sauce Labs が挙げられ、Canonical 社はデスクトップアプリケーションとの統合(DesktopCouch、「すべてのデスクトップに CouchDB を」がスローガン)を進めていたと同章は伝える。(Source: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 15 非リレーショナルデータベース]] §15.2.4) ## 設計思想 CouchDB の一貫した思想は「すべてがドキュメントであり、すべてが RESTful HTTP でなければならない」というものである。[[Riak]] と同様に JavaScript の Map/Reduce 関数をアップロードでき、これは「Views」と呼ばれる。Map/Reduce 関数自体もドキュメントとして格納しなければならず、結果はディスク上にインデックスとして永続化されるため、データの追加・更新があったときだけ関数を再実行すればよい。CouchDB は静的なメディアを提供する機能も持ち、RESTful インタフェースと組み合わせるとアプリケーションをまるごとデータベースから提供できる(CouchApps)。CouchDB 組み込みの管理アプリケーション「Futon」もこの方式で作られている。長期間オフラインになってから変更を同期するようなアプリケーションに適しているとされる。(Source: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 15 非リレーショナルデータベース]] §15.2.4) ## データモデルと運用 データモデルは追記型(append-only)の B ツリーであり、データとインデックスが同じデータ構造であるという特徴を持つ。このためバックアップは rsync と同じくらい簡単で、誤ったシャットダウンによるデータ破壊が起きず、ロックフリーの並列読み取りも可能である。追記型であるため更新・削除のたびにファイルに未使用領域が残り、これを再利用する「コンパクション(compaction)」が必要になるが、I/O 負荷が高いため運用には注意を要する。監視はノード情報を含む JSON を返す特別な URL のポーリングで行い、有名な監視ツールのプラグインも利用できる。メモリはOSのディスクキャッシュ分を除けば数百MB程度しか消費しないと本章は述べる。レプリケーションは HTTP リクエスト経由でノード間のコンテンツを複製でき、データの一部だけの複製や継続的レプリケーション(データ挿入中のバックグラウンドレプリケーション)、マスタマスタ構成、マスタスレーブ役割の反転もHTTPリクエストのみで行える。(Source: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 15 非リレーショナルデータベース]] §15.2.4) ## 導入事例: BBC BBC のエンダ・ファーレルは、MySQL ではなく CouchDB を選んだ理由として、大量の DBA や巨大な DB サーバを必要としない「プラットフォーム」の運用に「NoSQL」が適していたこと、2つ(以前は3つ)のデータセンタでマスタマスタ構成・マスタマスタマスタ構成を必要としたことを挙げている。BBC は CouchDB に簡易な認証 API・シャーディング・パーティショニングを追加実装したと述べる。本章執筆時点で BBC は 1TB の情報を CouchDB に格納しており、翌年には少なくとも3倍になる見込みで、クラスタには1日600万回の書き込みと2億回の読み取りリクエストがあったと報告されている。(Source: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 15 非リレーショナルデータベース]] §15.2.4 導入事例) ## 関連 - ソース: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 15 非リレーショナルデータベース]] - 実体: [[MongoDB]](同じドキュメント指向型データベースとして本章で対比される) / [[Riak]](JavaScriptのMap/Reduceアップロード機能を共有) ## 出典 - [[@2011__OReillyJapan__ウェブオペレーション - Chapter 15 非リレーショナルデータベース]] §15.2.4(設計思想・データモデル・運用・BBCの導入事例)