MongoDBの概要
MongoDB(モンゴデービー)とは、JSON(※1)形式のデータを蓄えるデータベース管理システム(DBMS)です。ドキュメント指向データベース(※2)に分類されます。
MongoDB(モンゴデービー)は、ドキュメント指向データベースの中で最も利用されている製品の一つであり、C++で書かれています。アメリカの10gen社によって開発され、2009年2月に初期バージョンがリリースされています。その性能や高可用性、開発の容易性、スケーラビリティなどが評価されており、大規模データ、アジャイルソフトウェア開発、クラウドコンピューティングといった技術に適したデータベースアーキテクチャとして、世界中で利用されています。
アメリカIDG傘下のIT情報サイトInfoWorldが主催する、優れたオープンソースを4カテゴリから選ぶオープンソース賞「Best of Open Source Software(Bossies)2011」の「アプリケーション開発」カテゴリで選出されるなど、高い評価を得ており、日本でも多くのシステムで導入されています。
※1 JSON(ジェイソン、JavaScript Object Notation)は、JavaScriptにおけるオブジェクトの表記法をベースとした軽量なデータ記述言語です。
※2 ドキュメント指向データベースは、1件分のデータを「ドキュメント」と呼び、具体的にはJSONというデータ形式でデータを扱います。
ドキュメント指向データベースは、データを表形式で保存するリレーショナルデータベースと異なり、スキーマ(テーブル定義)が必要ないことが大きな特徴です。
ドキュメントを複雑な階層でも管理することができるうえ、クエリやインデックスの作成が容易である、大量データでもスケールしやすい仕組みを持つなどの理由から近年注目を集めています。
スキーマレスデータベース(スキーマが必要ない)、NoSQLデータベース(リレーショナルデータベースだけではない)という呼ばれ方もされています。
MongoDBのライセンス
MongoDB(モンゴデービー)コミュニティ版のサーバ本体(Core Server)のライセンスは、Server Side Public License(SSPL)です。(ドライバはApache license。)コミュニティ版はコピーや配布、ソースコードの公開を原則として、ソースコードの自由な改変も認められています。
MongoDBのライセンスついてご不明な点がありましたら、お気軽にお問い合わせください。
MongoDBの動作環境
前提となる動作環境は、以下のとおりです。(バージョン4.4の場合)
- OS
・Amazon Linux 2
・Debian 9、10
・RHEL/CentOS 6.2以上、7.0以上、8.0以上
・SLES 12、15
・Ubuntu 16.04、18.04、20.04
・Windows Server 2019
・Windows 10/Server 2016
・macOS 10.13以上
提供されているプログラミング言語のドライバは下記のとおりです。
- 公式ドライバ
・C
・C++
・C#
・Java
・Node.js
・Perl
・PHP
・Python
・Ruby
・Scala
- コミュニティベースの非公式ドライバ
・Go
・Erlang
・ActionScript3
・C
・C# and .NET
・Clojure
・ColdFusion
・D
・Dart
・Delphi
・Entity
・Erlang
・JavaScript
・PowerShell
・Groovyなど
※バージョンによって異なりますので、詳細はお問い合わせください。
MongoDBと同様の機能をもつ商用製品
商用製品ではMarkLogic、クラウドサービスではMicrosoft Azure CosmosDBがドキュメント型NoSQLとされています。
MongoDBはドキュメント指向データベース
- ドキュメント指向データベースとは
データを階層構造のドキュメント(≒JSON)で扱う - JSONとは
- ハッシュと配列をネストして使うことができる
- XMLよりシンプルに表現できる
- 読みやすく直観的 - JSONの例
MongoDBの主な特徴
主な特徴は以下のとおりです。
リッチなデータ
- KVSと比較して、ドキュメント(JSON)はリッチなデータ構造であり、複雑なデータを扱いやすい
柔軟なクエリ
- 動的なクエリ SQLライクなクエリで扱いやすい
- RDBMSと同様に、動的にクエリを作成可能で事前に定義が不要
- 単純な条件検索だけでなく、集計等の高度なクエリも利用可能
例)コレクションpersonに、"name"が"watanabe"で、"age"が30のドキュメントを3つだけ取得したい
RDBMSと同等な、多様なインデックス
- セカンダリインデックス:主キー以外でインデックスを作成可能
- 複合キーインデックス:複数のキーでインデックスを作成可能
- マルチキーインデックス:配列の要素に対してインデックス作成可能
水平分散
- 水平分散(シャーディング)が実現しやすい
キーによってデータをノードに分散することが可能で、ノードを動的に追加し、データを自動バランシングする機能もある
レプリケーション
- 複製(レプリケーション)が容易
- レプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立
- 簡単なコマンドで、レプリケーション環境(レプリカセット)を構築可能
- シャーディングと組み合わせることも可能
- MongoDBドライバが自動的に書き込み先を切り替えるため、仮想IPなどを用意しなくてもフェイルオーバが可能(≒クラスタソフトウェアが不要)
スキーマレス
- スキーマレスデータを取り扱える
- テーブル定義など無しに、すぐにデータをCRUDできる
利用しやすい
- インストールが非常に容易
- RDBMSを使っていた人が使いやすいように作られている
- 豊富なドキュメント・ノウハウ
- OS毎にバイナリがあるため、ライブラリの追加インストールが不要
- 起動までわずか 3ステップ
・OS毎のバイナリをダウンロード
・データディレクトリを作成
・起動
- データベース>テーブル(コレクション)>ドキュメント というデータ構造
- SQLとMongoクエリ言語の大部分はマッピングが可能
- インデックスもSQLと同様の宣言が可能
- 英語ではあるが、他のNoSQLに比べて公式ドキュメントは豊富
- 多くの人が使っているため、ノウハウが豊富。日本語のノウハウも多い
多機能
- 他にも数多くの便利な機能が豊富
分類 | 機能 | 説明 | ユースケース |
---|---|---|---|
機能 | GridFS | 大容量ファイル(16MB以上)を扱うことができる 大容量ファイルをドキュメントに分割して格納し、アプリケーションには等価的なAPIを提供 |
大容量ファイルの管理 |
地理空間インデックス | 2Dや3Dのデータを格納し、それに対して交点や近傍などの検索をかけることができる アプリでの作りこみが不要 |
地理アプリのデータベース | |
キャップ付き・期限付きコレクション | サイズや期間を指定したコレクションを作り、自動的に古いドキュメントを引き落とせる | ログ保管 | |
集計機能 | SQLグループ関数のように集計できる また、map/reduceによる集計も可能 |
データ集計 | |
データ圧縮 | ストレージエンジンにWiredTigerを選択することにより、データの圧縮が可能 | 大量データ処理 | |
耐障害性 | ジャーナリング | 単一ドキュメントに対して、書き込みの一貫性が保持できる | 突然の電源停止等に対応したい |
運用性 | 各種機能コマンド | さまざまなサーバの統計情報を取得するツールや、JSON形式で出力するコマンドがある | 運用監視ツールとの対応 障害対応効率化 |
OpsManager | MongoDBの監視やアラート、自動バックアップ、ポイントインタイムリカバリ等ができるサービス | 運用監視の仕組みを簡単に作りたい | セキュリティ |
データベース暗号化 | ストアレッジエンジンが持つ暗号化機能により、データベースレイヤーでデータファイルの暗号化が可能(MongoDB3.2以降) | 重要なデータを保護したい |
MongoDBを使う上での注意点
トランザクションが無い
- MongoDBは複数のドキュメントを一貫性をもって更新することができない
- ミッションクリティカルで複数のテーブルの更新を保証しなければならないようなシステムでは、利用してはならない
- ただしバージョン4.0にて複数ドキュメントに対するトランザクション機能が追加されました
外部キー・結合が無い
- 他のドキュメントへの参照はアプリケーションで実装する必要がある
- 当然ながら、外部キー制約もないため、テーブル間の整合性が重要なシステムには向いていない
- 複数のドキュメントの内容を結合して取得することはできない
- ただしバージョン4.4にてSQLのunionに相当するunionWithが追加されました
スキーマが無い
- 格納されているデータのキー名やデータ型が分からない
- データ登録の際に不具合があってもエラーが発生しない
- 設計書を厳格に管理しないと、格納データの内容が分からなくなり、保守性の低下を招く恐れがある
NoSQLならば、MongoDBから
世界には数多くのNoSQLがあります。いずれも独自のノウハウが必要となり、習得期間とコストを要します。
その中で、OpenStandiaでは「MongoDB」を推奨しています。
NoSQLの中では多機能で、敷居が低い
・他のNoSQLと比較して機能が豊富である
・RDBMSと類似した機能群を持ち、RDBMS技術者が理解しやすい
・導入が非常に容易で、すぐに開発を始められる
・開発を進めながらデータ構造を変更しやすく、生産性が高い
NoSQLの標準になりつつある
・最も人気のあるNoSQLであり、米国ではNoSQLの標準になりつつある。
・開発元のMongoDB,Inc. は、2013年10月に150M$(約150億円)の投資を受け、
NoSQL企業の中でも企業活動が活発である。
[参考]米MongoDB、1億5000万ドルの資金調達「Oracleに追いつく成熟度を目指す」
http://internet.watch.impress.co.jp/docs/news/20131007_618340.html
[参考]solid IT社の提供する「DB-Engines Ranking」で、MongoDBがNoSQL部門で人気No.1
http://db-engines.com/en/ranking
[参考]ZDNet Japan DB人気ランキング--NoSQLなど注目されるも従来型RDBMSが支配的
http://japan.zdnet.com/datacenter/analysis/35052519/
[参考]MongoDB社サイト Google Search、LinkedIn Job SkillsなどのMongoDB人気度を紹介
http://https://www.mongodb.com/leading-nosql-database
豊富な導入実績がある
・非常に多くの導入実績がある。
・IT企業のほか、金融や保険業界での活用事例も多数ある。
- MetLife
- SAP
- eBay
- McAfee
- Cisco など多数
[参考]MongoDB社サイト 導入事例
https://www.mongodb.com/who-uses-mongodb
[参考]MongoDB社サイト Internet of Things導入事例
http://www.mongodb.com/use-cases/internet-of-things
機能一覧
機能 | MongoDBでの対応状況 | ||
---|---|---|---|
機能性 | 問合せ | 条件検索 | ○可能 |
DISTINCT | ○可能 | ||
LIKE検索 | △英語のみ可能(日本語は不可) | ||
ROWID、ROWNUM、ROW_NUMBER | △結果行数指定の使い方は可能 | ||
グループ集計 | ○可能 | ||
ソート | ○可能 | ||
正規表現 | ○可能 | ||
WITH句/副問い合わせ | △パイプラインで一部代替可能 | ||
TRUNCATE | ○可能 | ||
再帰クエリ | ×不可 | ||
ユニオン/結合 | 〇可能(4.4から) | ||
全文検索 | △英語のみ可能(日本語は不可) | ||
トランザクション管理 | ○可能(4.0から。レプリカセット環境のみ。) | ||
排他制御 | ×不可 | ||
制約/整合性機能 | 〇可能 | ||
インデックス | オンライン追加・削除 | ○可能 | |
セカンダリインデックス | ○可能 | ||
複合インデックス | ○可能 | ||
マルチキーインデックス | ○可能 | ||
データ | 基本データ型 | ○可能 | |
大容量ファイル格納 | △16M以上のファイルは別DB(GridFS)での管理 | ||
マルチメディア | △大容量ファイルの分散管理が可能 | ||
空間データ | ◎座標系データの検索が可能 | ||
OLAP | ×不可 | ||
操作 | 管理ツール(CUI) | ○可能 | |
管理ツール(GUI) | △基本操作が可能(アドバイザ等はなし) | ||
その他 | 動的SQL | ○可能 | |
データベーストリガ | ×なし | ||
ジャーナリング | ○ドキュメント単位で一貫性保証 | ||
ストアドプロシージャ/ファンクション | ○可能 Javascriptで記述 | ||
一時表 | △キャップ付きコレクションで保管期間を決められる | ||
シーケンス | △ストアドプロシージャで処理を代替可能 | ||
可用性 | 耐障害性 | ○レプリケーションで冗長構成可能 | |
復旧容易性(ノード復旧) | ○ノード起動により自動復旧 | ||
データ損失許容時間 | ○クエリごとに制御可能 | ||
拡張性 | シャーディングノード追加 | ○オンラインで追加可能 | |
レプリケーションノード追加 | ○オンラインで追加可能 | ||
メモリ追加 | ○可能 | ||
ディスク追加 | ○可能 | ||
運用性 | 統計情報出力 | ○付属のコマンドで可能 | |
データダンプ・リストア | ○付属のコマンドで可能 | ||
インポート | ○JSON、CSVをインポート可能 | ||
監視 | ○MMSで監視可能 | ||
OS監視 | ○MMSとmuninの組み合わせにより可能 | ||
バックアップ | ○MMSにて自動バックアップ、ポイントインタイムリカバリ可能 | ||
バージョンアップ | ○レプリケーションを組んでローリングアップデートすればシステム停止無しで実施可能 | ||
サポート | ○OpenStandiaにてサポート可能 | ||
機密性 | アクセス制御 | ○可能 | |
暗号化 | ○商用版でSSL利用可能 ○データベース暗号化(3.2以降) |
||
監査ログ | ○商用版で利用可能 |
MongoDBのサポート
NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。