MongoDB情報
- MongoDBとは
- 主な機能
- 主な特徴
- 導入事例
- 類似プロダクト
- MongoDBを使う上での注意点
- 動作環境
- MongoDBのライセンス
- 製品ダウンロード
- 参考情報
- オープンソース年間サポートサービス
MongoDBとは
MongoDB(モンゴディービー)は2009年2月に初期バージョンがリリースされ、現在では最も広く利用されているドキュメント指向データベースの一つとなっています。
従来のリレーショナルデータベースが表形式でデータを管理するのに対し、ドキュメント指向データベースは階層構造でデータを管理します。これはデータ構造の変更に対する柔軟性をもたらします。
また、MongoDBは高可用性、スケーラビリティを考慮したアーキテクチャになっています。
これらの点が評価され、MongoDBはアジャイルソフトウェア開発、クラウドコンピューティング、ビッグデータなどに適したデータベースとして、2010年代に入って世界中で利用が広がりました。
MongoDBは米国のMongoDB, Inc.(旧10gen社)によって開発されており、C++で実装されています。
主な機能
クエリ・関数
CRUD操作
コレクションに対してinsert/find/update/deleteなどの操作で必要なドキュメントを柔軟に扱うことが可能です
<代表的なメソッド>
追加 : insertOne / insertMany
取得 : find
更新 : updateOne / updateMany / replaceOne
削除 : deleteOne / deleteMany
集計
集計パイプラインを使用することで、複数ステージでのデータの段階的な処理・集計が可能です。
<代表的な集計ステージ>
絞り込み : $match
集計 : $group
整形 : $project
並び替え : $sort
他コレクション参照 : $lookup
インデックス
MongoDBは検索性能を高めるために、様々なインデックスを提供します。
<代表的なインデックス>
-
ユニークインデックス(重複防止)
「unique:true」を指定して、特定フィールドの重複を防止 -
TTLインデックス
一定時間経過したドキュメントを自動削除 -
部分インデックス
条件に合致するドキュメントのみを対象にし、容量・性能の最適化が可能
トランザクション
複数ドキュメントにまたがるトランザクションをサポートし、複数の更新処理を「commit(全て成功)」か「abort(すべて取り消し)」で扱えるようにする機能です。
分散トランザクションを使用することで、複数のコレクション、DB、シャードにまたがる操作でも必要に応じてトランザクションを利用可能です。
セキュリティ
認証・アクセス制御
利用者の正当性確認と権限管理により、不正アクセスを防止します。
通信の暗号化
MongoDBはTLS/SSLによる通信暗号化をサポートしています。
主な特徴
ドキュメント指向
MongoDBはドキュメント指向データベースの一種で、データを階層構造で管理します。
具体的にはJavaScriptで使われるデータフォーマットであるJSON(ジェイソン、JavaScript Object Notation)をバイナリエンコードしたBSON (Binary JSON)でドキュメントを保持します。
以下にJSONの例を示します。
ドキュメント例①
ドキュメント例②
JSONの特徴は以下の通りです。
- Web APIにおけるデータ交換や各種設定ファイルなどで広く使われているデータ形式で、可読性が高く、かつプログラムでも扱いやすい
- データは基本的に「キー:値」の形で表現され、値には文字列、数値、真偽値、NULL、配列、オブジェクトなどが使用可能
- 入れ子(ネスト)を使用することで、オブジェクト内に配列、配列内にオブジェクトというような階層的なデータ構造を表現可能
- プログラミング言語に依存せず、ほとんどの言語でライブラリや標準機能としてデータ操作機能が用意されている
ドキュメント指向データベースは以下の点で他のデータベースと異なります。
キーバリューストアとの違い
キーバリューストアは「キー項目」と「値」の組合せでデータを管理します。
この点はドキュメントデータベースも同様ですが、
- データ構造を階層化できる
- 配列を扱える
といった点で、シンプルなキーバリュー型データストアにないリッチなデータ構造を表現することができます。
リレーショナルデータベース(RDBMS)との違い
RDBMSはあらかじめデータ項目やデータ型を定義し、その定義に従ってデータを管理します。データを投入する前にその枠組みをあらかじめ定義する必要があり、これをスキーマと呼んでいます。
そのため、稼働中のシステムに対して項目追加を行う場合、スキーマ変更が必要となり、作業時に以下の考慮が求められます。
- 同じスキーマを利用している既存機能への影響がないことの確認
- 変更作業を安全に行うためのシステム一時停止(の検討)
一方、ドキュメント指向データベースではそのようなスキーマ変更の必要がありません。
これはデータ投入時に項目と値をセットで動的に格納するためです。新しい項目値を追加する場合にはその項目と値をセットで投入すればよく、項目追加などの事前作業を必要としません。
たとえば、上記のドキュメント例①がデータベースに存在する状態に対して、単純に②のデータを追加することが可能です。同じコレクション内(データの集まり)であってもドキュメントごとにフィールド(キー)の有無、種類、型の異なるデータを共存させることができます。
このようにドキュメント指向データベースはあらかじめスキーマ定義をする必要がないことから、スキーマレスとも呼ばれます。
また、従来のリレーショナルデータベースと異なるデータベースを総称してNoSQLと呼んでおり、MongoDBもその一つとなります。
柔軟なクエリ
MongoDBはJSONライクな構造で直感的でわかりやすいクエリをサポートしています。
単純な条件検索だけでなく集計などの高度なクエリも可能で、動的にクエリを発行することもできます。
MongoDBにおけるクエリの例を以下に示します。
例) コレクションpersonにて、"name"が"John"で、"age"が30のドキュメントを3つだけ取得したい
多様なインデックス
リレーショナルデータベースと同様、多様なインデックスをサポートしています。
- セカンダリインデックス(主キー以外に対するインデックス)
- 複合キーインデックス(複数フィールドに対するインデックス)
- マルチキーインデックス(配列要素に対するインデックス)
シャーディング(水平負荷分散)とスケーラビリティ
複数のノードを用意してキーによってデータを各ノードに分散することが可能で、これによって高いスケーラビリティを実現できます。MongoDBではこれをシャーディングと呼びます。
また、ノードを動的に追加し、データを自動でバランシングさせることもできます。
レプリケーションによる冗長化
MongoDBでは簡単なコマンドでレプリケーション環境(レプリカセット)を構築可能です。 また、障害時にはクライアント側のMongoDBドライバが自動的に接続先を切り替えるため、別途クラスタソフトウェアなどを用意しなくてもフェイルオーバーが可能です。
以下のようにレプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立させることも可能です。
インストールから利用開始までが容易
OS毎にバイナリが用意されており、ほぼ3ステップで起動できます。
- OS毎のバイナリをダウンロード
- データディレクトリを作成
- 起動
豊富なドキュメント・ノウハウ
他のNoSQLに比べて公式ドキュメントが豊富です。また、日本国内での利用事例も多く、日本語でのノウハウも多数存在します。
導入事例
導入事例(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を探す(Apache 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 Cosmos DBがドキュメント型NoSQLとされています。
OSSではCouchbase Serverなどが知られています。
MongoDBを使う上での注意点
MongoDBを使う上での注意点として以下があげられます。
外部キーが無い
- 外部キー制約がないため、データベース内だけで参照整合性を保証することができない(必要な場合はアプリケーション側で整合性を担保する)
バージョンアップは1段階ずつ
-
バージョンアップの際にバージョンを飛ばすことができないため、目的のバージョンに上げるために複数回のバージョンアップ作業が必要になる場合がある
レプリカセットにおけるノード数は奇数
- MongoDBではノード間の投票でプライマリを選出する仕組みになっている
- ノード数が偶数だと投票がtieになりプライマリ選出が進まず、動作が不安定になる可能性があるため、ノード数は奇数が推奨されている
- データ保持を行わない投票用のノードであるarbiterを追加することで、リソース追加によるコスト増を最小限に抑えることが可能
動作環境
MongoDBの動作環境は以下のとおりです。(バージョン8.0の場合)
-
OS
- Amazon Linux 2023
- Debian 12
- RHEL/CentOS Stream/Oracle Linux/Rocky Linux/AlmaLinux 8、9
- SUSE Linux Enterprise 15
- Ubuntu 20.04 LTS、22.04 LTS、24.04 LTS
- Windows Server 2022
- Windows 11
- macOS 11以上
各プログラミング言語で提供されているドライバは下記のとおりです(バージョンによってはサポートされないものもあります)。
-
公式ドライバ
- C, C++, C#, Go, Rust
- Java, Kotlin, Scala, Swift
- Node.js, TypeScript
- PHP, Python, Ruby
-
コミュニティベースの非公式ドライバ
- Elixir, Mongoose, Prisma, R
MongoDBのライセンス
MongoDBコミュニティ版のサーバ本体(Core Server)のライセンスは、Server Side Public License v1(SSPL v1)です。
SSPL v1はOSI承認のオープンソースライセンスではありません。一方で、ソースコードの入手・改変・再配布は可能です。
特にMongoDBを「サービスとして提供(DBaaS等)」する形で利用する場合、提供に必要な管理用ソフトウェア一式のソースコード公開義務等が課されるので、利用形態に応じて条文を確認してください。
なお、2018年10月16日以前にリリースされたバージョンについてはAGPLライセンスとなっているため、利用時のソースコードの公開範囲などには注意が必要です。
製品ダウンロード
参考情報
オープンソース年間サポートサービス
OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。
関連OSS
-
サポート対象PostgreSQL
ポストグレエスキューエル。多くのOS・プラットフォームで稼動するオープンソースのリレーションナルデータベース管理システムです。
-
サポート対象MariaDB
マリアデービー。MySQLから派生したオープンソースのリレーショナルデータベース管理システム(RDBMS)です。
-
サポート対象MySQL
マイエスキューエル。多くのOS・プラットフォームで稼動するオープンソースのリレーションナルデータベース管理システム

