連載ではNoSQLを特性から分類して、主要プロダクトの特性を紹介してきました。今回は、利用者も多いドキュメント指向NoSQL2つを見ていきましょう。後半では連載全体の「まとめのまとめ」も。
本連載は下記書籍から第5章を基に、@IT向けに再構成して掲載しています。
本連載は書籍『NOSQLの基礎知識』(リックテレコム刊、ISBN:978-4897978871)で解説されている内容から一部を抜粋し、本連載向けに一部再編集して掲載したものです。
書籍では、一般にNoSQLと呼ばれている各種データベース技術について、基本概念から主要なプロダクトの特性、ベンチマーク結果までを紹介しています。データモデルやアーキテクチャの違いといった基本概念から、各プロダクトの特徴を理解できる内容になっています。本連載では、この書籍の内容から、主要プロダクトを紹介している第5章を抜粋し、そのエッセンスを紹介していきます。
第1回KVS系NoSQLのまとめ(Hibari、Dynamo、Voldemort、Riak編)、第2回イネーブラ型NoSQLのまとめ(Memcached、Redis、Scalaris、Tokyo Cabinet/Tyrant編)、第3回カラム指向型データベース(HBase、Hypertable、Cassandra)編、第4回グラフ型NoSQLデータベース(Neo4j、InfiniteGraph)編と紹介してきたNoSQL。第5回の今回はドキュメント指向のNoSQLデータベースを紹介します。第1回で紹介したNoSQLの分類の一通りの特徴を把握できることと思います。
ドキュメント指向型の代表はCouchDBとMongoDBです。このタイプのデータモデルは、スキーマ設計が不要であり、ドキュメントをデータとして格納できることから、Webサービスの領域で人気を集めています。
Apache CouchDB(以下、CouchDB)は、中心的開発者のDamien Katz氏がIBM出身ということもあってか、「Lotus Notesの系譜に位置し、Notesの多くのコンセプトがCouchDBにも見られる」と言われています。
CouchDBのアーキテクチャは、複数のマスタが相互に同じデータを保持するというものです。所望のデータが最新バージョンであるかどうかを気にしないのであれば、どのサーバからも読み出しができます。データを更新する際には、全てのサーバに更新を知らせなければなりません。
CouchDBはデータの整合性を保証していません。ドキュメントの更新中に、他のクライアントが同時に更新した場合には、先に更新が終了したドキュメントを最新バージョンとします。そのタイミングで読み出しがあった場合は、最新バージョンを読み出します。
CouchDBはマスタ・マスタ型なので、マスタ・スレーブ構造と異なり、マスタの複製をスレーブに持ちません。そのためマスタ間に異なるバージョンのドキュメントが存在する場合があります。あるドキュメントが両方のノードで変更されたことを検知すると、自動的に差異の検出と解消を行います。
また、マスタ・マスタ間の同期は任意のタイミングで実行できます。その際、勝ったバージョンと負けたバージョンは過去のヒストリとして保存されます。アプリケーションで差異があったことを分かるようにしたり、2つのバージョンをマージすることも、過去のバージョンに戻すことも可能です。
CouchDBは複製を非同期で実行します。データを複数ノードに分割して格納するシャーディングには、Meebo(ミーボ)が開発したCouchDB Lounge(*1)というアプリケーションを使う必要があり、コンシステント・ハッシング*2によってデータ分割を行います。
CouchDBはドキュメントが更新される都度、ハードディスクにフラッシュして、システム障害の際にデータが消失しないようにします。
*1 CouchDB Lounge http://tilgovi.github.com/couchdb-lounge/を参照。
*2 コンシステント・ハッシング 連載第1回 注6を参照ください。
CouchDBのクエリ言語はViewsと呼ばれます。インデックスはB-Tree*3構造であり、順序列やレンジに対して照会をかけることができます。またMapReduceメカニズムを使うことで、複数のノードに対して同時並行的にクエリを分散できます。
*3 B-Tree 日本語では「B木」とも呼ばれ、データ構造を枝分かれした図で示したツリー構造のモデルの1つです。データの分岐先が全て同一の階層に属しているような構造モデルです。
CouchDBについては、下記連載記事でも紹介しています。記事では掲載時の最新情報を紹介していますので、利用の際は現在のバージョンでの挙動などをドキュメントで確認の上、使用してみてください。
Copyright © ITmedia, Inc. All Rights Reserved.