データベース管理システム(DBMS)の1つ、MongoDB(モンゴデービー)をご存じでしょうか。DBMSといえばリレーショナル型データベース管理システム(RDBMS)が最も普及していますが、MongoDBはNoSQL(RDBMSでない)データベースというカテゴリに分類されます。
本記事では、NoSQLデータベースの中で最も利用されている、MongoDBについてご紹介します。
MongoDBとは
MongoDBは、アメリカの10gen社(現MongoDB Inc.)によって開発され、2009年2月に公開されました。MongoDBそのものはC++言語で開発されており、様々なプラットフォームに対応したプログラムが公開されています。
MongoDBはデータベース製品では世界5位
MongoDBは、データベース製品の人気ランキングでも第5位になっており、Oracle DatabaseやMySQLといったRDBMSに匹敵する人気です。
引用:solid IT(DB-Engines Ranking)
NoSQLデータベースの中ではインメモリデータベースであるRedisを大きく上回っての1位であり、最も人気のあるNoSQLデータベースといえます。
まず、MongoDBの特徴であるNoSQL、ドキュメント指向データベースについての説明を軽くしてから、MongoDBの人気の秘密についてご紹介していきます。
NoSQLとは
NoSQLは「データベースの分類」を表します。
従来のデータベースはリレーショナルデータベース(RDB)と呼ばれるものであり、データを表形式で管理するデータベースです。イメージとしては、Excelのようにデータを管理できるものと考えるとよいでしょう。
NoSQLはそのリレーショナルなデータベースではないデータベースです。厳密には「このようなものがNoSQL」と表せるものではなく、「RDBではないものがNoSQL」です。具体的には以下のようなデータモデルが例として挙げられます。
・キーバリュー型:キーとバリューのみのシンプルな組み合わせのモデル
・カラム指向型:キーバリュー型にカラムの概念をもたせたモデル
・ドキュメント指向型:JSONやXML形式で記述されたドキュメントの形で管理するモデル
・グラフ指向型:データとデータ間のつながりを管理するモデル
↑NoSQLの中のドキュメント指向型のデータベースに、MongoDBは含まれるわけですね。NoSQLについて、さらに詳しくは以下のブログをご参照ください!
NoSQLとは? https://products.sint.co.jp/topsic/blog/nosql
ドキュメント指向データベースとは
ドキュメント指向データベースは、1件のレコードをドキュメントとして構成するデータベースです。これに対して、データベースの中で最も普及しているRDBMS(リレーショナル型データベース管理システム)では、行と列からなる表形式でデータを格納します。
ここでは、2つのデータベースの違いをまとめました。データベースをよく知らない方にもわかるように、Excelとの対比もご確認ください。
ドキュメント指向DB | RDBMS | Excel | |
最上位要素 | データベース | データベース | ブック |
行 | ドキュメント | レコード | 行 |
行の集まり | コレクション | テーブル | シート |
ドキュメント指向型データベースは、データをXML形式またはJSON形式のドキュメントで管理することから、アプリケーションからは扱いやすいものとなっています。ドキュメント指向データベースは、以下のような特徴があります。
- 複雑な階層構造を持たせることができる
- 様々なデータ型を保存できるうえ、データ型を動的に変更できる
- クエリやインデックスの作成が容易
- スケールアウトしやすい
ドキュメント指向データベースはMongoDBのほか、CouchDB、BaseXなどがあります。
MongoDBの特徴
MongoDBは、ドキュメント指向データベースという点以外にも多くの特徴があり、それが人気の理由にもなっています。ここでは、さらに詳しくMongoDBの特徴についてご紹介していきます。
1. JSON形式のため、複雑なデータを扱いやすい
MongoDBでは、JSON形式のドキュメントでデータを管理します。これにより、複雑なデータを扱うことができます。たとえば、階層構造や、複数のデータ型を同一フィールドとしたデータ構造が扱えます。また、RDBMSではデータ型を事前にテーブル定義として決めておかなければいけませんが、MongoDBでは動的にドキュメントの構造を変更できるため、柔軟な対応が可能です。この点は、アプリケーション開発において大きなメリットです。
2. Shardingにより、水平分散を実現している
水平分散とは、データをサーバーごとに分散して配置することで、負荷を分散する仕組みです。これにより高いパフォーマンスを実現できます。MongoDBではSharding(シャーディング)という仕組みで水平分散を実現しています。
さらにこの仕組みを利用することでサーバーを追加するだけで性能を上げられることから、スケールアウトしやすいというメリットもあります。
3. レプリケーション機能により、耐障害性が高い
MongoDBはレプリカセットという機能をもっています。レプリカセットとは、3台以上のサーバーを使ってデータ同期を行う機能です。これにより、万が一障害が発生しても、他のサーバーに切り替えることにより迅速に復旧することができます。
4. SQLが使えない
RDBMSでデータのやり取りに使用するSQLが、MongoDBでは使用できません。そのため、JavaScriptをつかってクエリを定義します。MongoDBで使用するクエリは、大部分がSQLとマッピングできるものの、一部の機能は実行することができないことに注意が必要です。
たとえば、GROUP BYやSUMといった集計関数、JOIN(結合処理)は、MongoDBでは使用できません。そのため、ドキュメント同士の連携はアプリケーションで実装する必要があります。
5. トランザクションがない
RDBMSと違って、MongoDBではトランザクションがありません。つまり、複数のドキュメントに対して一貫性をもって更新を行うことができません。そのため、整合性を保ったまま複数のデータを同時に更新する処理がある場合は、MongoDBの使用は控えたほうがよいでしょう。
バージョン4.0からマルチドキュメントトランザクションが実装されていますが、一貫性をもった更新が必要な場合に絞っての利用が推奨されています。
MongoDBの使いどころ
MongoDBはRDBMSとは異なるため、使いどころも異なります。
データの整合性よりも高速なレスポンスや耐障害性を求められるシステムに、MongoDBは向いています。たとえば、以下のようなシステムです。
MongoDBが向いているシステム
- Webサイトの操作ログの蓄積
- ユーザー独自項目を検索対象とするシステム
- 負荷の低い読取り・更新処理が大量にあるシステム(例:ソーシャルゲーム)
逆に、以下のケースはMongoDBには向いていません。
MongoDBが向いていないシステム
- バッチ処理(大量データの読取り・更新処理)
- 複数のデータを結合し、整合性を保ったまま更新を行う処理
- SQLが必須のシステム
MongoDBは高性能なデータベースですが、使いどころを誤ってしまうと、本来のメリットが得られないため、十分に検討したうえで利用しましょう。
まとめ
本記事では、NoSQLデータベース「MongoDB」についてご紹介しました。
MongoDBの特徴をおさらいしておきましょう。
- ドキュメント指向データベース
- 複雑なデータを扱いやすい
- 水平分散により、高パフォーマンスかつスケールアウトしやすい
- レプリケーション機能により、障害にも強い
- トランザクションがないため、一貫性をもった更新ができない
- SQLが使えない
MongoDBは人気の高いデータベースであるため、他のNoSQLデータベースに比べて情報が豊富です。また、RDBMSを使っていた人にも使いやすい作りとなっているため、興味がある方は気軽に触ってみてもいいかもしれませんね。