トップ OSS紹介 MongoDB

MongoDB

サポート対象

NRIのOpenStandiaが提供する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以上)を扱うことができる
大容量ファイルをドキュメントに分割して格納し、アプリケーションには等価的なAPIを提供

大容量ファイルの管理

地理空間インデックス

2Dや3Dのデータを格納し、それに対して交点や近傍などの検索をかけることができる
アプリでの作りこみが不要

地理アプリのデータベース

キャップ付き・期限付きコレクション

サイズや期間を指定したコレクションを作り、自動的に古いドキュメントを引き落とせる

ログ保管

集計機能

SQLグループ関数のように集計できる
また、map/reduceによる集計も可能

データ集計

データ圧縮

ストレージエンジンにWiredTigerを選択することにより、データの圧縮が可能

大量データ処理

耐障害性

ジャーナリング

単一ドキュメントに対して、書き込みの一貫性が保持できる

突然の電源停止等に対応したい

運用性

各種機能コマンド

さまざまなサーバの統計情報を取得するツールや、JSON形式で出力するコマンドがある

運用監視ツールとの対応
障害対応効率化

Ops Manager

MongoDBの監視やアラート、自動バックアップ、ポイントインタイムリカバリ等ができるサービス

運用監視の仕組みを簡単に作りたい

セキュリティ

データベース暗号化

ストアレッジエンジンが持つ暗号化機能により、データベースレイヤーでデータファイルの暗号化が可能

重要なデータを保護したい

導入事例

導入事例(1) OracleRACからMongoDBへ移行

データハブ&検索基盤&分析基盤

[国内][不動産] アットホーム株式会社 (英文名称 At Home Co.,Ltd.)
Oracle RACからMongoDBへ移行、性能向上とコスト削減を実現

課題

  • 既存のOracle RACが検索パフォーマンス遅かった。物件データの構造が複雑であり、検索条件によっては多数のJOINが必要で、3秒から5秒程度かかっていた
  • 加えてOracle RACのライセンス料金とストレージが高額であった
  • 不動産情報のスキーマ変更があるたびに、DBの変更とアプリの変更があり、変更工数がかかった

選定理由

  • DBはOracle, MySQL, MongoDB、検索エンジンはSolr, sphinxを比較したが、Solr と Mongoの組み合わせが以下の理由から最も最適と判断した。
  • スキーマレスであるため、項目の追加・変更が容易
  • JOINがない分、MongoDBの方がOracleよりも若干性能がよかった
  • 将来的に今回実装するAPIを他のプロダクトに適用する場合、MongoDBの方がスケーラビリティが高いと判断した (Oracle RAC構成の場合、DISKが一つであるため、スケーラビリティに限界があるため)
  • ライセンスコストがMongoDBの方が安価であった

結果

  • 2015年5月にリリースし、現在安定稼働中
  • 応答時間は従来数秒秒程度かかっていたものが、SolrとMongoDBの組み合わせで800ms程度になった。MongoDB 自体の応答は数msであった。
  • スキーマ変更の時にアプリだけ変更するだけで良くなり、変更工数が削減した。
  • MMSを採用したことによりMongo特有のメトリクスを使った監視やイベント検知が簡単に実現できた。加えて時刻指定でのリス トアができるため、リカバリが必要になった際に心強い

導入事例(2) スキーマレスデータ処理

データハブ

[海外][保険] MetLife
70以上の既存RDBMSに拡散している顧客情報をMongoDBで統合

課題

選定理由・解決策

結果

70台以上ものDBで個別に管理している既存顧客データを統合したい

  • RDBMSでのデータ統合は工数がかかりすぎるため、 MongoDBを選定し、既存のRDBMSのデータを統合する
  • さらに、そのMongoDBへ接続するアプリケーションを開発した
  • 既存の顧客データには手を入れることなく、10年間できなかった顧客データの統合が実現できた
  • 過去の同プロジェクトで約$25MかかったRDBMS統合を、安価(およそ1/8の約$3M)に、かつ迅速に実現することができた

モバイルで利用したいため、端末の増加に合わせたDBを選定したい

  • 端末の増加に伴うアクセス量の増加に対し、RDBMSではスケールアップすることが難しいため、スケールアップしやすいMongoDBを採用
  • MongoDBの開発容易性にも注目
  • わずか2週間でプロトタイプを作成、90日でリリースが実施できた
  • 端末の増加に合わせたスケーラビリティを確保できた
  • 企業内外でNoSQLの標準としてMongoDBを採用した

[海外][金融]グローバル信託銀行 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
    サポート対象

    PostgreSQL

    ポストグレエスキューエル。多くのOS・プラットフォームで稼動するオープンソースのリレーションナルデータベース管理システムです。

  • MariaDB
    サポート対象

    MariaDB

    マリアデービー。MySQLから派生したオープンソースのリレーショナルデータベース管理システム(RDBMS)です。

  • MySQL
    サポート対象

    MySQL

    マイエスキューエル。多くのOS・プラットフォームで稼動するオープンソースのリレーションナルデータベース管理システム

オープンソースに関するさまざまな課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。