MongoDB とは?

MongoDB

MongoDB最新情報

NRIのOpenStandiaが提供するMongoDB最新情報

MongoDBの保守サポートサービスの内容はこちら MongoDBの導入についてはこちら OSS全般の事例紹介はこちら

MongoDBバージョンアップ情報

■2023-05-23
[VerUP]MongoDB 6.0.6(リリース日:2023/05/12)
■2023-05-16
[VerUP]MongoDB 5.0.17(リリース日:2023/04/27)
■2023-05-16
[VerUP]MongoDB 4.4.21(リリース日:2023/04/27)
■2023-04-25
[VerUP]MongoDB 5.0.16(リリース日:2023/04/10)
■2023-04-25
[VerUP]MongoDB 4.4.20(リリース日:2023/04/10)
■2023-04-25
[VerUP]MongoDB 4.2.24(リリース日:2023/02/27)
■2023-03-28
[VerUP]MongoDB 6.0.5(リリース日:2023/03/13)
■2023-03-14
[VerUP]MongoDB 5.0.15(リリース日:2023/02/27)
■2023-02-07
[VerUP]MongoDB 4.4.19(リリース日:2023/01/31)
■2023-02-07
[VerUP]MongoDB 6.0.4(リリース日:2023/01/26)

すべてを見る

更新日:2021-03-18

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データベース(リレーショナルデータベースだけではない)という呼ばれ方もされています。

TOPに戻る

MongoDBのライセンス

MongoDB(モンゴデービー)コミュニティ版のサーバ本体(Core Server)のライセンスは、Server Side Public License(SSPL)です。(ドライバはApache license。)コミュニティ版はコピーや配布、ソースコードの公開を原則として、ソースコードの自由な改変も認められています。
MongoDBのライセンスついてご不明な点がありましたら、お気軽にお問い合わせください。

TOPに戻る

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など

※バージョンによって異なりますので、詳細はお問い合わせください。

TOPに戻る

MongoDBと同様の機能をもつ商用製品

商用製品ではMarkLogic、クラウドサービスではMicrosoft Azure CosmosDBがドキュメント型NoSQLとされています。

TOPに戻る

MongoDBはドキュメント指向データベース

MongoDBはドキュメント指向データベース

  • ドキュメント指向データベースとは
     データを階層構造のドキュメント(≒JSON)で扱う
  • JSONとは
     - ハッシュと配列をネストして使うことができる
     - XMLよりシンプルに表現できる
     - 読みやすく直観的
  • JSONの例

JSONの例

TOPに戻る

MongoDBの主な特徴

主な特徴は以下のとおりです。

リッチなデータ

  • KVSと比較して、ドキュメント(JSON)はリッチなデータ構造であり、複雑なデータを扱いやすい

柔軟なクエリ

  • 動的なクエリ SQLライクなクエリで扱いやすい
  • 例)コレクションpersonに、"name"が"watanabe"で、 "age"が30のドキュメントを3つだけ取得したい
    柔軟なクエリ

  • RDBMSと同様に、動的にクエリを作成可能で事前に定義が不要
  • 単純な条件検索だけでなく、集計等の高度なクエリも利用可能

RDBMSと同等な、多様なインデックス

  • セカンダリインデックス:主キー以外でインデックスを作成可能
  • 複合キーインデックス:複数のキーでインデックスを作成可能
  • マルチキーインデックス:配列の要素に対してインデックス作成可能

水平分散

  • 水平分散(シャーディング)が実現しやすい
  • キーによってデータをノードに分散することが可能で、ノードを動的に追加し、データを自動バランシングする機能もある
    水平分散

レプリケーション

  • 複製(レプリケーション)が容易
  •  - 簡単なコマンドで、レプリケーション環境(レプリカセット)を構築可能
     - シャーディングと組み合わせることも可能
     - MongoDBドライバが自動的に書き込み先を切り替えるため、仮想IPなどを用意しなくてもフェイルオーバが可能(≒クラスタソフトウェアが不要)
    レプリケーション1

  • レプリケーションとシャーディングを組み合わせて、負荷分散と冗長化を両立
  • レプリケーション2

スキーマレス

  • スキーマレスデータを取り扱える
  • テーブル定義など無しに、すぐにデータをCRUDできる

利用しやすい

  • インストールが非常に容易
  •  - OS毎にバイナリがあるため、ライブラリの追加インストールが不要
     - 起動までわずか 3ステップ
      ・OS毎のバイナリをダウンロード
      ・データディレクトリを作成
      ・起動

  • RDBMSを使っていた人が使いやすいように作られている
  •  - データベース>テーブル(コレクション)>ドキュメント というデータ構造
     - SQLとMongoクエリ言語の大部分はマッピングが可能
     - インデックスもSQLと同様の宣言が可能

  • 豊富なドキュメント・ノウハウ
  •  - 英語ではあるが、他のNoSQLに比べて公式ドキュメントは豊富
     - 多くの人が使っているため、ノウハウが豊富。日本語のノウハウも多い

多機能

  • 他にも数多くの便利な機能が豊富
分類 機能 説明 ユースケース
機能 GridFS 大容量ファイル(16MB以上)を扱うことができる
大容量ファイルをドキュメントに分割して格納し、アプリケーションには等価的なAPIを提供
大容量ファイルの管理
地理空間インデックス 2Dや3Dのデータを格納し、それに対して交点や近傍などの検索をかけることができる
アプリでの作りこみが不要
地理アプリのデータベース
キャップ付き・期限付きコレクション サイズや期間を指定したコレクションを作り、自動的に古いドキュメントを引き落とせる ログ保管
集計機能 SQLグループ関数のように集計できる
また、map/reduceによる集計も可能
データ集計
データ圧縮 ストレージエンジンにWiredTigerを選択することにより、データの圧縮が可能 大量データ処理
耐障害性 ジャーナリング 単一ドキュメントに対して、書き込みの一貫性が保持できる 突然の電源停止等に対応したい
運用性 各種機能コマンド さまざまなサーバの統計情報を取得するツールや、JSON形式で出力するコマンドがある 運用監視ツールとの対応
障害対応効率化
OpsManager MongoDBの監視やアラート、自動バックアップ、ポイントインタイムリカバリ等ができるサービス 運用監視の仕組みを簡単に作りたい
セキュリティ
データベース暗号化 ストアレッジエンジンが持つ暗号化機能により、データベースレイヤーでデータファイルの暗号化が可能(MongoDB3.2以降) 重要なデータを保護したい

TOPに戻る

MongoDBを使う上での注意点

トランザクションが無い

  • MongoDBは複数のドキュメントを一貫性をもって更新することができない
  • ミッションクリティカルで複数のテーブルの更新を保証しなければならないようなシステムでは、利用してはならない
  • ただしバージョン4.0にて複数ドキュメントに対するトランザクション機能が追加されました

外部キー・結合が無い

  • 他のドキュメントへの参照はアプリケーションで実装する必要がある
  • 当然ながら、外部キー制約もないため、テーブル間の整合性が重要なシステムには向いていない
  • 複数のドキュメントの内容を結合して取得することはできない
  • ただしバージョン4.4にてSQLのunionに相当するunionWithが追加されました

スキーマが無い

  • 格納されているデータのキー名やデータ型が分からない
  • データ登録の際に不具合があってもエラーが発生しない
  • 設計書を厳格に管理しないと、格納データの内容が分からなくなり、保守性の低下を招く恐れがある

TOPに戻る

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

TOPに戻る

機能一覧

機能 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以降)
監査ログ ○商用版で利用可能

TOPに戻る

MongoDBのサポート

NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。

TOPに戻る

OpenStandiaに関する
資料請求・お問い合わせはこちら

  • 資料請求
  • お問い合わせ

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

  • OpenStandiaサポート対象オープンソース|50種類以上のOSSのサポートをご提供します。
  • 人気midPoint
  • 人気Keycloak
  • 注目MongoDB
  • ForgeRock AM(OpenAM)
  • ForgeRock IDM(OpenIDM)
  • MongoDB
  • Postfix
  • Apache HTTP Server
  • ZABBIX
  • PostgreSQL
  • Apache Struts
  • Apache Kafka
  • Apache Hadoop
  • Apache Spark
  • Spring Framework
  • Apache Tomcat
  • Solr
  • iBATIS
  • DRBD
  • MySQL
  • JBoss
  • Ruby on Rails
  • Jaspersoft
  • OpenLDAP
  • Apache log4j
  • Apache Subversion
  • ForgeRock DS(OpenDJ)
  • Pacemaker
  • Samba
  • Red Hat Enterprise Linux
  • Nginx
  • BIND
  • Dovecot
  • Pentaho
  • sendmail
  • Courier-IMAP
  • ForgeRock DS(OpenDJ)
  • Heartbeat
  • Hibernate
  • Hinemos
  • MyBatis
  • MySQL Cluster
  • Apache Axis2
  • Squid
  • OpenSSO