連載
» 2013年03月27日 18時00分 UPDATE

知らないなんて言えないNoSQLまとめ(5):ドキュメント指向のNoSQLデータベース(CouchDB、MongoDB)編 (1/2)

連載ではNoSQLを特性から分類して、主要プロダクトの特性を紹介してきました。今回は、利用者も多いドキュメント指向NoSQL2つを見ていきましょう。後半では連載全体の「まとめのまとめ」も。

[@IT]

書籍紹介

本連載は下記書籍から第5章を基に、@IT向けに再構成して掲載しています。

目次

  • 序 章 ビッグデータの時代
  • 第1章 NOSQLとは何か?
  • 第2章 NOSQLのデータモデル
  • 第3章 アーキテクチャの基本概念と技術
  • 第4章 HadoopはNOSQL?
  • 第5章 主なNOSQLデータベース製品
  • 第6章 NOSQLデータベースの選択基準
  • 第7章 NOSQLを使うビジネス

 本連載は書籍『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の分類の一通りの特徴を把握できることと思います。

mhdb_nosqldb01.jpg 連載第1回で示した分類

 ドキュメント指向型の代表はCouchDBとMongoDBです。このタイプのデータモデルは、スキーマ設計が不要であり、ドキュメントをデータとして格納できることから、Webサービスの領域で人気を集めています。

Lotus Notes系と目されるApache CouchDB

 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を参照ください。



独自の照会言語「Views」

 CouchDBのクエリ言語はViewsと呼ばれます。インデックスはB-Tree*3構造であり、順序列やレンジに対して照会をかけることができます。またMapReduceメカニズムを使うことで、複数のノードに対して同時並行的にクエリを分散できます。

*3 B-Tree 日本語では「B木」とも呼ばれ、データ構造を枝分かれした図で示したツリー構造のモデルの1つです。データの分岐先が全て同一の階層に属しているような構造モデルです。



 CouchDBについては、下記連載記事でも紹介しています。記事では掲載時の最新情報を紹介していますので、利用の際は現在のバージョンでの挙動などをドキュメントで確認の上、使用してみてください。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。