MongoDBはオープンソース・プロジェクトですが、10gen(テンジェン)が後ろ盾となって支援をし、商用サポートを提供しています。
MongoDBの狙いは、「高速で拡張性の高いキー・バリューストアと、リッチな機能を持つ伝統的なRDBの隙間を埋めることだ」と位置づけられています。
MongoDBは、マスタ・スレーブ型で複製を保持します。書き込みは常に1台のマスタに対してのみ行われ、スレーブとなる複数のサーバに非同期で複製を作り、読み出しは常にスレーブから行います。
このマスタ・スレーブ型に加え、リリース1.6から「レプリカセット」という新方式が提供されました。レプリカセットでは、プライマリ役とセカンダリ役のサーバがあり、通常はプライマリ側からセカンダリ側に対して複製を行います。プライマリ側に障害などが生じた場合には、調停ノードがセカンダリの中から次のプライマリを決定し、その役割を引き継がせることで、フェイルオーバーと復旧を自動化します。
MonogoDBは、マスタ(プライマリ)ノード単体の場合には、読み書きを1つのノードで行うため強い整合性を保証します。しかし、スレーブ(セカンダリ)に非同期で複製を行う場合には、マスタに書き込み、スレーブから読み出すので、結果整合性となります。
本書の説明は、ビッグデータに対するNoSQLデータベースの適用を前提としており、ノード障害時のデータ消失を防ぐためにレプリケーション機能が実装されていることを想定しているので、MongoDBは結果整合性であると位置づけることにします。
MongoDBのデータ分割はシャーディング*4により行います。MongoDBでは、ドキュメントの集まりを「コレクション」と呼びます。コレクションにはシャード・キーが割り当てられ、そのキーに基づいて複数のサーバにデータが分割されます。このシャード・キーは順番を保持しており、隣接したシャード・キーはたいてい同じサーバに保持されます。
コレクションの連続した範囲を「チャンク」と呼びます。チャンクの集まりは「シャード」と呼ばれ、あるシャードのデータサイズが大きくなった場合には、このチャンク単位で、データの分割や移動が自動で行われます。レプリカセットはこのシャードを構成するプライマリとセカンダリのサーバ間で行われます。
*4 シャーディング 本連載第3回 注2を参照ください。
MongoDBでは、メモリ上のデータをディスクにフラッシュする仕組みをfsyncと呼び、これによってデータを永続化します。fsyncのタイミングはデフォルトで60秒ごとです。
また、バージョン1.7.5からは「ジャーナル」と呼ばれるCommit Logに近い機能が搭載されましたが、ディスクへの書き込みがデフォルトで 100ミリ秒ごとになっており、その間にサーバの電源が落ちるなどした場合には書き込み前のデータが消失する可能性があります。
MongoDBは、バージョン管理にベクタークロック*5を用いません。システム内のバージョン間に差異が生じた場合には、Last one wins、すなわち「最後に更新されたバージョンが勝つ」というルールを適用しています。
MongoDBにはMapReduceを適用できます。また、GridFS*6という仕組みでラージオブジェクトをサポートし、さらにMySQLのようなインデックス機能も搭載しています。
*5 ベクタークロック 本連載第1回 注5を参照。
*6 GridFS MongoDBに巨大なファイルを格納するためのソフトウェアです。MongoDBはバイナリデータの格納をサポートしていますが、そのサイズは4MBに制限されています。GridFSでは大きなファイルを複数のドキュメントに自動的に分割することで、MongoDBに効率的に格納したり、「ファイルの途中にあるNバイトを取得する」といった操作を効率的に扱うことができます。
本連載では、データモデルとアーキテクチャの組み合わせに基づき、主要なNoSQLデータベースを説明しました。以下にあらめてまとめておきましょう。
◇ ◇ ◇
連載を通読いただければ、世に多数あるいわゆる「NoSQL」のそれぞれの長所・短所や、組み合わせた活用のアイデアが浮かぶのではないでしょうか? 本稿が皆さんの日々の企画や開発のヒントになると幸いです。
本連載で抜粋・紹介している原稿の初出は下記書籍です。本連載では詳述していないNoSQLの基本的な考え方、アーキテクチャの詳細などは、書籍でご確認ください。
本書はクラウディアン(旧ジェミナイ・モバイル・テクノロジーズ)の技術者らが監修および執筆を行っています。同社は、国産NOSQL「HIBARI」を開発、その後、Cassandraに自社の「HyperStore」を実装したクラウドストレージ用パッケージソフトウェア「Cloudian」を開発して、現在商用提供を行っているITベンチャー企業です。
Copyright © ITmedia, Inc. All Rights Reserved.