MongoDB情報
- MongoDBとは
- 主な機能
- 主な特徴
- 導入事例
- 類似プロダクト
- MongoDBはドキュメント指向データベース
- MongoDBを使う上での注意点
- NoSQLならば、MongoDBから
- 動作環境
- MongoDBのライセンス
- 製品ダウンロード
- 参考情報
- オープンソース年間サポートサービス
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というデータ形式でデータを扱います。
ドキュメント指向データベースは、データを表形式で保存するリレーショナルデータベースと異なり、スキーマ(テーブル定義)が必要ないことが大きな特徴です。 ドキュメントを複雑な階層でも管理することができるうえ、クエリやインデックスの作成が容易である、大量データでもスケールしやすい仕組みを持つなどの理由から2010年代に大きな注目を集めました。
スキーマレスデータベース(スキーマが必要ない)、NoSQLデータベース(リレーショナルデータベースだけではない)という呼ばれ方もされています。
主な機能
機能 |
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利用可能 |
||
監査ログ |
○商用版で利用可能 |
主な特徴
主な特徴は以下のとおりです。
リッチなデータ
- KVSと比較して、ドキュメント(JSON)はリッチなデータ構造であり、複雑なデータを扱いやすい
柔軟なクエリ
- 動的なクエリ、SQLライクなクエリで扱いやすい
例)コレクションpersonに、"name"が"watanabe"で、"age"が30のドキュメントを3つだけ取得したい
- RDBMSと同様に、動的にクエリを作成可能で事前に定義が不要
- 単純な条件検索だけでなく、集計等の高度なクエリも利用可能
RDBMSと同等な、多様なインデックス
- セカンダリインデックス:主キー以外でインデックスを作成可能
- 複合キーインデックス:複数のキーでインデックスを作成可能
- マルチキーインデックス:配列の要素に対してインデックス作成可能
水平分散
- 水平分散(シャーディング)が実現しやすい
キーによってデータをノードに分散することが可能で、ノードを動的に追加し、データを自動バランシングする機能もある
レプリケーション
- 複製(レプリケーション)が容易
- 簡単なコマンドで、レプリケーション環境(レプリカセット)を構築可能
- シャーディングと組み合わせることも可能
- MongoDBドライバが自動的に書き込み先を切り替えるため、仮想IPなどを用意しなくてもフェイルオーバが可能(≒クラスタソフトウェアが不要)
- レプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立
スキーマレス
- スキーマレスデータを取り扱える
- テーブル定義など無しに、すぐにデータをCRUDできる
利用しやすい
- インストールが非常に容易
- OS毎にバイナリがあるため、ライブラリの追加インストールが不要
- 起動までわずか 3ステップ
・OS毎のバイナリをダウンロード
・データディレクトリを作成
・起動
-
RDBMSを使っていた人が使いやすいように作られている
- データベース>テーブル(コレクション)>ドキュメント というデータ構造
- SQLとMongoクエリ言語の大部分はマッピングが可能
- インデックスもSQLと同様の宣言が可能
- 豊富なドキュメント・ノウハウ
- 英語ではあるが、他のNoSQLに比べて公式ドキュメントは豊富
- 多くの人が使っているため、ノウハウが豊富。日本語のノウハウも多い
多機能
- 他にも数多くの便利な機能が豊富
分類 |
機能 |
説明 |
ユースケース |
---|---|---|---|
機能 |
GridFS |
大容量ファイル(16MB以上)を扱うことができる |
大容量ファイルの管理 |
地理空間インデックス |
2Dや3Dのデータを格納し、それに対して交点や近傍などの検索をかけることができる |
地理アプリのデータベース |
|
キャップ付き・期限付きコレクション |
サイズや期間を指定したコレクションを作り、自動的に古いドキュメントを引き落とせる |
ログ保管 |
|
集計機能 |
SQLグループ関数のように集計できる |
データ集計 |
|
データ圧縮 |
ストレージエンジンにWiredTigerを選択することにより、データの圧縮が可能 |
大量データ処理 |
|
耐障害性 |
ジャーナリング |
単一ドキュメントに対して、書き込みの一貫性が保持できる |
突然の電源停止等に対応したい |
運用性 |
各種機能コマンド |
さまざまなサーバの統計情報を取得するツールや、JSON形式で出力するコマンドがある |
運用監視ツールとの対応 |
Ops Manager |
MongoDBの監視やアラート、自動バックアップ、ポイントインタイムリカバリ等ができるサービス |
運用監視の仕組みを簡単に作りたい |
|
セキュリティ |
データベース暗号化 |
ストアレッジエンジンが持つ暗号化機能により、データベースレイヤーでデータファイルの暗号化が可能 |
重要なデータを保護したい |
導入事例
導入事例(1) OracleRACからMongoDBへ移行
データハブ&検索基盤&分析基盤
[国内][不動産] アットホーム株式会社 (英文名称 At Home Co.,Ltd.)
Oracle RACからMongoDBへ移行、性能向上とコスト削減を実現
課題 |
|
---|---|
選定理由 |
|
結果 |
|
導入事例(2) スキーマレスデータ処理
データハブ
[海外][保険] MetLife
70以上の既存RDBMSに拡散している顧客情報をMongoDBで統合
課題 |
選定理由・解決策 |
結果 |
---|---|---|
70台以上ものDBで個別に管理している既存顧客データを統合したい |
|
|
モバイルで利用したいため、端末の増加に合わせたDBを選定したい |
|
|
[海外][金融]グローバル信託銀行 X社
企業内でのデータアクセスを統合するために、データハブとして利用
課題 |
選定理由・解決策 |
結果 |
---|---|---|
システム間で無数に存在するデータの複製を正規化したい |
必要な時だけデータを正規化するため、MongoDBの動的なスキーマを利用 |
一カ所からバッチ、もしくはRESTでデータアクセスが可能になった |
一つのシステムでの変更が、複数のグループに影響してしまうため、影響範囲を限定し、レスポンスを改善したい |
一つの論理DBで全てのデータを管理・運用できるため、MongoDBを選定 |
顧客向けポータルサイトのレスポンスタイムが90%改善した |
EDWシステムのレスポンスを改善したい |
スケールアウトによりデータを容易に追加するよう、MongoDBのシャーディングを利用 |
EDWのシステムレスポンスタイムを大幅に改善した |
頻繁にアクセスするデータを集中的に管理したい |
企業内でのデータアクセスを統合するために、データハブとしてMongoDBを利用 |
データを集中的に管理したことで、開発期間が短縮でき、データソースのエンハンスも容易になった |
RDBMSとMongoDBのハイブリッド
[国内][SIer] 野村総合研究所
カード会社向けシステムで、アプリケーションの一部のスキーマレスデータ処理にMongoDBを利用
課題 |
選定理由・解決策 |
結果 |
---|---|---|
スキーマレスデータに対してSQLと同等のクエリをかけたい」 |
他のNoSQL技術と比較しても、利用実績が多く、流行しているため技術者も多かった |
スキーマデータはRDBMS、スキーマレスデータはMongoDBという使い分けがうまくできた |
「NoSQLに不慣れな開発者にも簡単にクエリをかける」 |
NoSQLの中では唯一社内のサポート体制が整っていた |
他のDB技術と比較して冗長化の設計工数が飛躍的に少なくすんだ |
上記の要件を満たすDBを探す |
従来のRDBMSでは上記の2つの要件を満たせなかったが、これらの要件を満たすMongoDBを選定 |
開発者が簡単にスキーマレスデータを操作でき、開発生産性を高く保つことができた |
導入事例(3) ビックデータ処理
MongoDBを単体で使う
[海外][セキュリティ] McAfee
セキュリティサービスのビッグデータ解析にMongoDBを利用
※出典:MongoDB,Inc.
課題 |
選定理由・解決策 |
結果 |
---|---|---|
スケーラビリティと機能がともに十分なDBを探す |
MongoDBの自動シャーディングを利用 |
スケーラビリティを実現し、レイテンシーを1/3に削減できた |
複雑なクエリに対応しているDBを探す(Hbase/Hadoopでは複雑なクエリに対応できない) |
MongoDBは動的に柔軟なクエリが書け、新しい分析結果を追加する場合の開発が簡単である |
動的スキーマの変更が可能になり、開発者の生産性が大幅に向上した |
スケーラビリティがあるインデックスを探す(Luceneではスケーラビリティに問題がある) |
MongoDBの地理空間インデックスの利用する |
MongoDBの地理空間インデックスの利用により、地理的な観点でのデータ分析が容易になった 市場に対する新しいサービスの投入が迅速化できた |
導入事例(4) その他の使い方
高機能なレプリケーションをフル活用
[海外][金融]グローバル信託銀行 X社
各拠点で迅速にローカルアクセスができるよう、参照データをリアルタイムで分散/配布
課題 |
選定理由・解決策 |
結果 |
---|---|---|
最大36時間に及ぶバッチ処理によるデータ配布の遅れを改善したい |
データ配信がリアルタイムで、かつ拠点ではローカルデータを読むことが可能なMongoDBの自動レプリケーションを利用 |
データ遅延の違反金$40Mを5年間の間に節約することができた |
同じデータのグローバル配信に複数課金されるSLA未達成による規制違反(罰金)をなくしたい |
近い拠点から読み取ることが可能なMongoDBの柔軟なレプリケーションを利用 |
レプリケーションの活用で統一したグローバルデータサービスに移行できた |
同じデータを保有する20カ所の分散システムを管理する必要がある |
直観的なデータモデルであるJSONを利用 |
理解しやすく変更が容易であったため、高い生産性で分散システムの管理を実現できた |
MongoDBコミュニティサイトでは、MongoDB導入事例を多数掲載しています。
MongoDBは、水平方向にスケールしやすいことから、SNS、アーカイブ、コンテンツ管理、eコマース、メタデータストレージ、メディアのWebサイトなど、大量データを扱うシステムでの採用実績が数多くあります。
類似プロダクト
商用製品ではMarkLogic、クラウドサービスではMicrosoft Azure CosmosDBがドキュメント型NoSQLとされています。OSSでは、cやCouchbase Serverなどが比較的に有名です。
MongoDBはドキュメント指向データベース
-
ドキュメント指向データベースとは
データを階層構造のドキュメント(≒JSON)で扱う -
JSONとは
- ハッシュと配列をネストして使うことができる
- XMLよりシンプルに表現できる
- 読みやすく直観的 - JSONの例
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に追いつく成熟度を目指す」
[参考]solid IT社の提供する「DB-Engines Ranking」で、MongoDBがNoSQL部門で人気No.1
[参考]ZDNet Japan DB人気ランキング--NoSQLなど注目されるも従来型RDBMSが支配的
[参考]MongoDB社サイト Google Search、LinkedIn Job SkillsなどのMongoDB人気度を紹介
豊富な導入実績がある
- 非常に多くの導入実績がある。
-
IT企業のほか、金融や保険業界での活用事例も多数ある。
- MetLife
- SAP
- eBay
- McAfee
- Cisco など多数
[参考]MongoDB社サイト 導入事例
[参考]MongoDB社サイト Internet of Things導入事例
動作環境
「前提となる動作環境は、以下のとおりです。(バージョン6.0の場合)
-
OS
- Amazon Linux 2
- Debian 10、11
- RHEL/CentOS 7、8、9
- SLES 12、15
- Ubuntu 16.04、18.04、20.04、22.04
- Windows Server 2019
- Windows 10/Server 2016
- macOS 10.14以上
提供されているプログラミング言語のドライバは下記のとおりです。
-
公式ドライバ
- 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のライセンス
MongoDB(モンゴデービー)コミュニティ版のサーバ本体(Core Server)のライセンスは、Server Side Public License(SSPL)です(ドライバはApache license)。コミュニティ版はコピーや配布、ソースコードの公開を原則として、ソースコードの自由な改変も認められています。
製品ダウンロード
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象
PostgreSQL
ポストグレエスキューエル。多くのOS・プラットフォームで稼動するオープンソースのリレーションナルデータベース管理システムです。
-
サポート対象
MariaDB
マリアデービー。MySQLから派生したオープンソースのリレーショナルデータベース管理システム(RDBMS)です。
-
サポート対象
MySQL
マイエスキューエル。多くのOS・プラットフォームで稼動するオープンソースのリレーションナルデータベース管理システム