よくある質問・用語集

  • もっと調べる
  • どうやって使う?

MongoDBとは

MongoDBとは、オープンソースのNoSQLサーバである。ビッグデータやIoTのデータ処理によく利用されるデータベースの1つである。2007年にDoubleClickのチームによって開発が行われ、MongoDB Inc.から提供されている。ライセンスはServer Side Public License (SSPL)で公開されている。MongoDBの開発言語は、公式ドライバとしてC言語やC++、JavaScript、Javaなどがある。

AWSやGoogleが、クラウド・サービス上でMongoDB互換のDBを提供するなど、NoSQLとしては最もスタンダードなソフトウェアである。またMongoDBは、Linuxだけでなく、Windows、MacOS、Soalrisなどでも利用することができる。

MongoDBの概要

MongoDBの名前に含まれる "Mongo" は、巨大という意味をもつ単語 "Humongos" からきている。MongoDBはインメモリで動作するため、高速なデータI/Oが可能となっている。また、MongoDBは、データの分散配置やレプリケーションを行うことも可能で、スケーラビリティ・アベイラビリティの高いデータベースを構築することができるというメリットがある。

MongoDBは、ドキュメント指向データベースである。ほとんどのNoSQLが採用しているKVS(Key Value Store)より機能が豊富で、RDB(Relational Database)に近い検索性を備えている。MongoDB側でデータをソートすることも可能である。そのため、MongoDBは、RDBに慣れたユーザにとって使い方が非常に理解しやすく、人気が高くなっている。また、RDBMS(Relational DataBase Management System)のようにデータの形式を決めておく必要がないため、容易に導入することができる。それでいて、高速なデータ処理を行うことができることがMongoDBの大きなメリットである。

MongoDBのバージョン4.0からは、RDBMS(Relational DataBase Management System)で利用可能なトランザクション機能にも対応している。ただし、データの結合を行うことができないなど、RDBで利用できる機能がすべて実装されている訳ではない。

また、MongoDBのメリットとして、RDBよりも柔軟に冗長化を行うことができるという点もある。プライマリノードが故障した場合には、自動的にスレーブノードが昇格するなど、RDBよりも冗長化の性能が優れている。さらに、MongoDBはNoSQLとしての高速性だけでなく、システムの拡張性にも優れているため、全体の処理能力を向上することができる。コンテナでも管理しやすい通信方式を採用している点などから、MongoDBはIoTのデータ解析等でもよく利用される。

MongoDBの特徴

以下では、MongoDBの持つ特徴について説明する。

データ処理が高速

MongoDBはインメモリで動作するため、その分高速なデータI/Oが可能となっている。また、ドキュメント指向のデータベースを採用したNoSQLサーバのため、KVSよりも高機能でRDBと同じような感覚で運用することができる。さらに、MongoDBでは、検索したデータの並び替えなど、データベース側で行える処理もそろっている。そのため、従来のRDBの使い方に慣れたユーザーでも、MongoDBを使ったアプリケーションの開発が行いやすくなっている。

外部システムとの連携も可能

MongoDBはJSONに似たシンプルな形式でデータを保存する。アクセスはWeb APIを利用し、検索結果もJSONに似た形式で出力されるため、外部システムとも簡単に連携することができる。

システムの冗長性に優れている

MongoDBは、レプリカセットと呼ばれる冗長構成を実行することができる。レプリカセットには、プライマリとセカンダリと呼ばれるノードがある。データはメインとなるプライマリに保存され、セカンダリサーバにもコピーされる。プライマリが停止した場合、セカンダリがプライマリに自動で昇格するため、データの検索や読み込みもセカンダリから行うことができる。このようにMongoDBには、レプリカセットを利用することで、1台のサーバが障害で停止してもデータを失うことがなくサービスを継続することができるというメリットがある。

MongoDBレプリカセット

システムの拡張性に優れている

MongoDBには、シャーディング(水平スケーリング)と呼ばれるデータを分散する機能がある。シャーディングでは、データを複数のサーバに分散して保存できるため、サーバの台数を増やすことでシステムの拡張を行うことができる。そのため、サーバのパフォーマンスが低下した場合でも、スケールアウトを行うことが可能になる。シャーディングには、configサーバとmongosサーバ、シャーディングクラスタサーバを必要とする。

シャーディング

configサーバ

configサーバは、MongoDBシステム全体の設定を管理するサーバである。シャードに関する情報も設定サーバが管理しているため、configサーバが停止するとシャーディングに関する情報の更新ができなくなる。そのため、シャーディングを使い負荷分散を行う場合には、configサーバをレプリカセットで冗長化する場合が多い。

mongosサーバ

mongosサーバは、MongoDBでシャードを利用するときに処理を振り分けるサーバである。クライアントからの問い合わせを処理し、シャードクラスタ内の適切なデータを持ったノードに処理を振り分ける。

シャーディングクラスタサーバ

シャーディングクラスタサーバは、実際にデータを保存するサーバである。シャーディングクラスタサーバも可用性を高めるためレプリカセットを利用し、冗長化を行う場合が多い。データが格納されるサーバは、シャードキーによって決定される。データは「チャンク」と呼ばれる単位ごとに管理され、コレクションのデータが設定した最大サイズ(標準では64MB)になるとチャンクに分割される。

MongoDBのデータ構造

MongoDBは、NoSQL型のデータベースだが、RDBに似た構造でデータを管理することができる。しかし、RDBと異なり、リレーショナルなデータ構造を取ることはできない。そのため、データの相関関係を表現することができない。

データ構造

データ構造

データベースの中には、コレクションを作成する。コレクションには、キーの名前と値から構成されるドキュメントを配置することができる。RDBのスキーマと比較すると、コレクションはテーブルに、ドキュメントがレコードに、フィールドが列に相当する。RDBでは、事前にテーブルのスキーマを定義し、レコードを増やす際はテーブルの定義を変更する必要があるが、MongoDBでは、このような作業は不要である。

MongoDBの操作

MongoDBでは、データベースの操作はSQLとは異なるが、SQLと対応づけしやすいコマンド構造になっている。例えば、ドキュメントの挿入(SQLのINSERT)にあたるコマンドはinsertである。同じように、ドキュメントの更新(SQLのUPDATE)にあたるコマンドもupdateとわかりやすい。

また、ドキュメントの取得(SQLのSELECT)にあたるコマンドはfind、ドキュメントの削除(SQLのDELETE)にあたるコマンドはremoveである。findでは結果を取得するフィールドも指定することができる。update、find、removeの検索条件では、SQLで使う演算子(=<>など)の代わりに、$lt、$gtなどのクエリセレクタを使うことができる。

用途とシステム構成

MongoDBは以下のようなシステムへの導入が適している。

  • スモールスタート時から始めて、アクセス数の増加に合わせてデータベースをスケールアウトしていきたい
  • データの冗長化を行いたい
  • ログのような大量のデータを高速に処理したい

例えば、オープンソースのログ管理ツールであるGlaylogは、mongoDBとElasticsearchを利用して動作している。Glaylogでは、様々な形式のログを集約し、GUI上で可視化することができる。また、ログをいくつかのグループに分けて管理することもできる。Elasticsearch上で、用途に応じてインデックスを設定することで、より高速な検索を実現している。

なお、大規模なMongoDBのデータベースでは、シャーディングもレプリカセットも有効にしたシステム構成となる。

MongoDBの商用版

商用版として、MongoDB Enterprise Advancedというソフトウェアも用意されており、以下の機能を利用できる。

Ops Manager

Ops Managerとは、MongoDBの統合管理インターフェースである。Ops Managerでは、以下の操作をWEBインターフェースで行うことができる。そのため、コマンドラインの知識や技術を持たない人でも、クラスタの構築や、データの表示・確認等をすることが可能である。

  • レプリケーションクラスタの構築
  • シャーディングクラスタの構築
  • データの追加/削除
  • サーバー状況などのモニタリング
  • データのバックアップ/リストア

In-Memory Storage

In-Memory Storageとは、商用版でのみ利用できるストレージエンジンである。In-Memory Storageでは、データが非永続的でメモリ上に保存するため、特に書き込みに関する処理で高速処理が可能となっている。In-Memory Storageを利用しながらデータを永続的に保存するためには、レプリカセットを行う必要がある。

MongoDBとGridDBの比較

スケールアウト型のNoSQLサーバとしては他にも、GridDBというオープンソースソフトウェアがある。GridDBは、高い性能、拡張性、高い信頼性と可用性を備えており、IoTデータに最適なデータベースとして開発された。同じくビッグデータの処理に利用されているMongoDBとは、冗長性や負荷分散の方法などに違いがある。

冗長性の取り方

MongoDBでは、レプリカセットを組むことで冗長性を担保している。レプリカセットを動かすためには、最低3台のサーバが必要である。データはメインとなるプライマリサーバに保存され、セカンダリサーバにもコピーされる。

MongoDBのクラスタ画面

対してGridDBでは、レプリカを作成し複数ノードで分散して保持することで冗長性を担保している。GridDBで冗長性を保つためには、レプリカ数を2台以上にする必要があるため、最低3台のサーバが必要である。

GridDBのクラスタ画面

負荷分散方法

MongoDBでは、シャーディング機能によって負荷分散を行う。シャーディングには、configサーバとmongosサーバ、シャーディングクラスタサーバが必要である。また、configサーバの冗長性の確保も重要となるため、多くの場合、configサーバもレプリカセットを行う。

MongoDBの負荷分散画面

対してGridDBでは、ノード数を増やすことで負荷分散を行うことができる。アプリケーションからの登録や参照はオーナに対して行い、オーナとバックアップは、別のノード上に分散して配置される。負荷バランスの最適化など、どのノードに配置するかはクラスタが自動的に決定する。なお、ノード追加によるシステム拡張は、オンラインで行うことができる。

GridDBの負荷分散画面

データ構造

MongoDBは、前述の通りドキュメント型のデータ構造を採用している。MongoDBのデータベース操作には、SQLと対応づけしやすいコマンドが準備されている。

MongoDBのデータ構造画面

対してGridDBは、キーコンテナ型のデータ構造を採用してる。GridDBのコンテナには、コレクションコンテナと時系列コンテナの2つの種類がある。RDBと比較すると、キーはテーブル名、コンテナはテーブルに相当する。GridDBのコンテナはテーブル表現でデータを管理するため、コンテナ自体をRDBのように取り扱うことができる。つまり、GridDBはNoSQLデータベースでありながら、RDBのようなACID特性をもった厳密なトランザクション処理を行うことができる。これにより、一貫性を保持しながらデータ管理を行うことが可能である。

GridDBのデータ構造画面

なお、GirdDBは、APIを介してデータの処理を行う。そのため、管理者にはある程度のプログラミング知識が求められる。商用版のGridDB SEを使えば、データを扱うためのコマンドが準備されている。また、GridDB AEではSQL検索を利用することができる。

デージーネットの取り組み

デージーネットでは、MongoDBの他にもさまざまなオープンソースソフトウェアを扱っている。最近では、バックエンドのデータベースとしてMySQLやPostgreSQLではなく、MongoDBを採用するソフトウェアも多く、利用する機会が増えている。また、デージーネットでこれまで提案した例として、以下のようなシステムがある。

  • MongoDBを使用したビックデータの解析システムを構築
  • レプリケーション、シャーディングを機能を有効にして、冗長化、負荷分散を実現

以上のように、絶対に失ってはいけない重要なデータを扱う際や、IoTデータ収集プラットフォームなどで高速なデータベース検索が必要な仕組みなどに、MongoDBをおすすめしている。

なお、デージーネットでMongoDBを使用したシステムを構築したお客様には、導入後支援サービスとして、Open Smart Assistanceを提供している。これは、OSSそのものだけではなく、Linuxなどを含むシステム全体が適切に運用できることを対象とした支援サービスである。Open Smart Assistanceの保守サービスでは、ソフトウェアの使い方から運用方法まで、幅広い範囲でのQ&Aや、適正に運用できるようなセキュリティの情報提供、障害調査、回避を行い、安心して利用して頂けるよう管理者の業務をサポートしている。

MongoDBのメリットやインストール・ログイン方法、商用版の使い方などの詳細は「調査・検証報告書」で解説しており、無料でダウンロード可能である。

【カテゴリ】:ビッグデータ  オープンソースソフトウェア  IoT  

  • もっと調べる
  • どうやって使う?

【共催セミナー】研修管理・運用の負担を軽減 学習管理システム(LMS)紹介セミナー

日程: 5月23日(木)Webセミナー「BigBlueButton」を使用します。
内容: 社内研修の課題を解決できる学習管理システム(LMS)について紹介します。
ご興味のあるかたはぜひご参加ください。

セミナー申込

関連用語

MongoDBに関連するページ(事例など)

MongoDBとは先頭へ