MongoDB(モンゴ・ディービー)はデータベースの一種ですが、「Oracle」などに代表されるリレーショナルデータベース管理システム(RDBMS)ではなく、NoSQL(ノーエスキューエル)と呼ばれるものに分類されます。
NoSQLは「Not only SQL」つまり、リレーショナルデータベース管理システム (RDBMS) 以外のデータベース管理システムを指す用語です。
MongoDBをはじめとするNoSQLは、 RDBMSに比べて機能を削ることで処理速度などある特定の機能の性能をアップさせているのが特徴です。
ユニークな名称の由来は、英単語の「humongous(とてつもなく大きい)」から来ているとのことです。2009年に登場し、現在もっとも注目されているデータベースといわれています。
MongoDBは、ドキュメント志向のデータベースシステム
MongoDBは、ドキュメント志向のデータベースシステムで、データを非定型のデータ構造の集合体として管理します。このデータの集合を「ドキュメント」と呼び、ドキュメントの集合を「コレクション」として管理しています。
MongoDBの特徴のひとつは、あらかじめデータの形式を決めておかなくても、自由にデータを操作することができることです。データの形式があらかじめ決まっていないということで、「スキーマレス」ともいわれます。アプリケーションによっては、こうした形式をとるほうが作りやすいと重宝されることもあります。
MongoDBの強みは、処理速度と拡張性
MongoDBの特徴は、公式サイトである「MongoDB」の言葉を借りれば「Agile and Scalable(敏捷さと拡張性)」。
とくに、リレーショナルデータベース(RDB/関係データベース)と単純なKVS(Key-Valueストア:任意の保存したいデータ(value)に対し、対応する一意の標識(key)を設定し、これらをペアで保存する方式)の特徴をあわせもつのが強みで、データの生成、読み込み、追加・更新、削除などの動作を高速で実行できます。加えて、ドキュメントに対して複雑な条件による問い合わせ(クエリ)を実行し、結果を整列させたり、集計したりすることもできます。
しかし、トランザクション処理やデータ構造間の結合、SQLによるデータの照会・更新など、RDBで一般的な処理は行うことができません。
このように、MongoDBは、RDBに比べて読み込み速度が速く、インデックス機能が豊富、高い拡張性があるといった強みから、WEBシステム上でのバックエンドデータベース(ユーザと直接データのやりとりをするフロントエンドからデータ入力や指示などを受け、処理を実行したり結果を出力したり、記憶装置に保存したりする役割を担う)として最適であるといわれています。
ただ、最近MongoDBを業務で利用する組織が増えるにつれ、デメリットに関する声も聞かれるようになっています。
「PASTEBIN」というコンソール(コンピュータを操作するために使う入出力装置のセット)の出力やエラーログ、ソースコードなどを張り付けて共有するWebサイトにおいて、「Don't use MongoDB」というタイトルがつけられた投稿がなされたことが、WEB上で話題になりました。
投稿者は、数千万件ものユーザ管理にMongoDBを利用していて、10gen社(MongoDBの開発元)から有償でのサポートも受けていたそうです。
投稿者は8つの問題点を指摘しています。
1.ベンチマークで良い値を出すために、デフォルトでは安全でない方法で書き込みを行う。
2.原因不明なデータ消失が多い。(例えば、レプリケーションがエラーを出さずに途中で止まるなど)
3.書き込み時にグローバルにロックしてしまう。例えばブログの管理など、書き込みが多いものだとこれは大問題になる。
4.データのローディングが重いとシャーディング(データを複数のサーバに分散させる機能)がうまく動かなくなる。
5.mongosサーバは信頼性が低い。
6.一度全データセットが消えてしまった(ただしこれはバージョン1.6の話で1.8で修正済み)。
7.問題のある“出してはいけないもの”を安定バージョンとしてリリースしている。
8.負荷が高い状況だと、レプリケーションがうまく機能しない。
投稿者は、データベース開発者はパフォーマンスよりもデータを消失させないことを優先するべきであると指摘しています。
その他のNoSQL
なお、NoSQLには、大きく分けて3種類があります。
キーと値(バリュー)という比較的単純な構造でできている「キーバリュー型」。Riak、Redis、Memcachedなどがこのタイプで代表的なものです。
ついで、MongoDBと同じドキュメント志向のもの。このタイプには、MongoDB のほかにCouchDBというものもあります
次いで、キーに対して「列志向」と呼ばれるタイプ。代表的なものはHBase、Cassandraがあります。
MongoDBの特徴をよく理解し、強みと弱みを知った上で利用できるといいと言えます。