“動物図鑑”で知るCouchDBの特徴
CouchDBとは?
CouchDB(カウチDB)はドキュメントをデータとして管理し、Webで公開することに最適化されたデータベース管理システムです。CouchDBの“ドキュメント”は報告書、仕様書、議事録といった文書や、名刺、プロフィールといったデータの集合のことを指しています。また、JavaScriptのソースコードをドキュメントの一部として配置することも可能です。
OSSとして一般へのリリースが始まったのは2007年後半ころからになります。その後、2009年3月にApache Software Foudationの正式なプロジェクトとして最初のリリースがありました。現在も継続して開発が続けられています。CouchDBは主にErlangというプログラミング言語で実装されています。
CouchDBのコミュニティによるWebサイトやMLには、「Relax(リラックス)」という言葉がよく登場します。データベースの設計・構築・操作について、開発者に極力リラックスできるデータベース環境を提供するというコンセプトが、CouchDBの各仕様に込められているように筆者は感じています。筆者はこの「リラックス」というコンセプトがとても気に入っています。そしてリラックスとうたいながらも、実際にふたを開けてみると従来のデータベースマネジメントシステムにはなかった、さまざまな新しい試みが実装されており、データベースが好きな開発者にとって刺激的な要素が多く盛り込まれている点も魅力の1つです。
この連載ではCouchDBの機能や用途を解説していき、最終的にはその内部構造まで迫る予定です。連載第1回目の今回は、CouchDBの主な特徴と用途、実際にCouchDBをインストールするところまでを説明していきたいと思います。
特徴1:JSON形式による柔軟なデータ構造
CouchDBは、JSON形式という書式を介してデータの入出力を行います。JSON形式は各ドキュメントの相違に対して、柔軟に対応することができるという利点があります。
例えば、ある動物園のWebサイトで動物図鑑を公開する場合を考えてみましょう。動物図鑑の1ページを1つのドキュメントに見立て、データ構造を設計します。図1を見てください。データ構造をリレーショナルデータベース(以下、RDB)向けに設計した場合と、CouchDBのドキュメントとして設計した場合を示しています。
例を見ると、「ペンギン」と「イルカ」のページでは図鑑に掲載する項目が異なります。RDB向けに設計するとその動物固有の項目も共通のカラムとしてテーブルへ定義しなければなりません。図1の中では「ペンギン」のページに「足」という項目がありますが、「イルカ」には不要な項目です。複数の動物への対応を考慮すると、テーブルの構造が複雑で冗長になります。ある動物では使用しない項目にNULLが入ることになり、図鑑をブラウザで表示するときにアプリケーション側での対応が増えるでしょう。
また、RDBの場合は新しい項目を含むデータをすぐに追加・更新することができません。テーブルの構造を前もって再定義しておく必要があり、これには時間がかかります。一方、CouchDBはJSON形式を用いて、スキーマレスなデータの定義方法を提供し、RDBで発生する上記のような課題を解決しています。ドキュメントの構造はドキュメントごとに定義するため、「ペンギン」と「イルカ」で取り扱う項目にどれほど相違があっても気にする必要はありません。また、データの追加・更新と同時にデータの構造が決定することから、未知のデータ構造を持つデータであっても即座にDBに取り込むことができます。
例の中でもう1つ注目したいことがあります。「好物」の項目に設定されている値の数が動物ごとに異なる点です。RDBでは「繰り返し項目」になりますから、正規化によるテーブルの分割を検討することになるでしょう。CouchDBの場合は繰り返し項目を「配列」として1つの項目の中に含めることができます。
どちらの方法が優れているかを決めることはできませんが、ドキュメントのように複数の項目を、強いまとまりとしてのみ参照するような場合は、無駄な結合処理を必要としないCouchDBの方が使いやすいと思います。
特徴2:URIによるドキュメントマッピング
CouchDBは、各ドキュメントに対して一意なURIを割り当てます。ドキュメントをネットワーク上に公開するにあたって、CouchDBへ特別な設定を施す必要はありません。インターネット上で公開する場合も同じです。
図2は、CouchDBが管理するURIの構造を示しています。CouchDBでは複数のドキュメントを取りまとめるために“データベース”という単位を使います。URIは“CouchDBのサーバ名”→“データーベース名”→“ドキュメント名”と順にたどっていくように構成されています。
URIを持ったドキュメントを操作するには、HTTPメソッドを使用します。ドキュメントを取得するならGET、更新するならPUTを使う、といった具合です。HTTPメソッドが使えるプログラミング言語であれば、CouchDBを利用するプログラムを作成することができます。単にドキュメントを操作するだけなら、WebブラウザやOSのコマンドでも問題ありません。
CouchDBを使ってドキュメントのみを公開することは、ドキュメントを“利用する側”で、目的に応じたアプリケーションの自由な作成を促していることになります。従来は、ドキュメントを“提供する側”が、ドキュメントを利用するためのアプリケーションまで一括して提供することが一般的であったと思います。しかし、ドキュメントの扱い方を利用する側に委ねたほうが適切な場合もあるでしょう。
特徴1で登場した動物図鑑の例で再び考えてみましょう。各地の動物園がCouchDBで動物図鑑を公開していたとします。ペンギン同好会は各動物図鑑のペンギンのページにある画像データだけを参照し、同好会のサイトにペンギンの写真集を編集して公開することができるようになります。ほかにも、スマートフォン向けに利便性を考慮した、ガジェットのような動物図鑑のアプリケーションを作成し、動物のデータはWeb上にあるCouchDBから取得するというのも面白いと思います。
特徴3:レプリケーションによる分散ドキュメント管理
CouchDBにはレプリケーションの機能が標準で組み込まれています。レプリケーションは、特徴2で説明した“データベース”の単位で実行されます。
RDBMSのレプリケーションと異なるのは、データの同期を取るタイミングです。一般的なレプリケーションでは、データの一貫性を確保するために、レプリケーション元でデータの更新が発生する都度、更新内容がレプリケーション先へすぐに反映されます。一方、CouchDBでは、利用者の任意のタイミングでレプリケーションを実行します。ドキュメントを作成して管理するという目的からすると、任意によるレプリケーションの方が有益な場合があります。
動物図鑑の例をもう一度、登場させてみましょう。新しい動物園が開園したとします。同時にWebサイトも立ち上げたのですが、動物図鑑をはじめから書き始めるのは非常に労力がかかってしまいます。そこで、ほかの動物園が持っている図鑑からレプリケーショを実行してドキュメントを取得します(著作権など、事前の交渉は必要ですが)。
そのあと、動物園はレプリケーションで取得した図鑑をベースにして、独自の情報を図鑑に追記していきます。これはとても効率がよいドキュメントの書き方です。CouchDB上にあるアプリケーションもレプリケーションの対象になりますから、図鑑に関連するアプリケーションの移行も簡単に実行することができます。
あるとき、動物園による動物図鑑のブームに気付いたとある出版社が、動物図鑑を書籍として編集しようと企画を立案します。出版社は各動物園のドキュメントをレプリケーションで収集し、簡単に動物図鑑を統合して出版することができます(こちらも事前に交渉が必要ですね)。CouchDBの場合、レプリケーションにはデータの複製を作ることに留まらず、ドキュメントの発展を促進させる働きがあります。
これは、近ごろよく話題になるソースコードの分散バージョン管理システムで、オリジナルからブランチを作成して独自の変更を加えていく感覚に似ていると思います。CouchDB同士なら、レプリケーションを実行するために前もって特別な設定を施す必要はありません。CouchDBでは、必要になった時点ですぐにレプリケーションを実行することができます。
| 1/3 |
| Index | |
| “動物図鑑”で知るCouchDBの特徴 | |
| Page 1 CouchDBとは? 特徴1:JSON形式による柔軟なデータ構造 特徴2:URIによるドキュメントマッピング 特徴3:レプリケーションによる分散管理 |
|
| Page 2 CouchDBの活用事例を知る CouchDBの用途は |
|
| Page 3 CouchDBをインストールしてみよう |
|
| ゆったリラックス! CouchDBがあるところ |
ホワイトペーパー(TechTargetジャパン)
- ここまでできる! CouchDBパワーアップ作戦 (2010/3/18)
さらに一歩踏み込んで、実運用のためのノウハウを知りましょう。全文検索、ユーザー認証、負荷分散手法を解説します - 診断ツールでデータベースの健全性を保つ (2010/3/5)
DBをセキュアに保つには、日々のチェックが重要。診断ツールを運用に組み込むことが、情報漏えい対策の第一歩です - トムが説く、エンジニアがしてはならないこと (2010/3/2)
Oracleエンジンそのものをデザインする男、トム・カイト。カリスマエンジニアが説明する、陥りやすい「ぼくたちの失敗」とは - “スコット”といえばなんと答える? (2010/2/22)
ツーといえばカー、スコットといえばもちろん! そんな根っからのDB人間チェックや週末の勉強会など、2月もDB漬けでした
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |






