よくある質問・用語集

サーバ構築のデージーネットTOP > OSS情報 > よくある質問・用語集 > 用語集 > MongoDBとは

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

MongoDBとは

MongoDBとは、ビッグデータやIoTのデータ処理に利用されるNoSQLサーバである。Apache 2ライセンスの下でオープンソースソフトウェアとして公開されている。

AmazonやGoogleが、クラウド・サービス上でMongoDB互換のDBを提供するなど、NoSQLとしては最もスタンダードなソフトウェアである。

MongoDBの概要

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

MongoDBは、ドキュメント指向データベースである。ほとんどのNoSQLが採用しているKVS(Key Value Store)よりは高機能で、RDBに近い検索性を備えている。MongoDB側でデータをソートすることも可能である。そのため、RDBになれたプログラマーにとっては非常に扱いやすい。それでいて、高速なデータ処理を行うことができることが大きな特徴である。ただし、MongoDBではデータの結合を行うことができないなど、RDBで利用できる機能がすべて利用できる訳ではない。

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

MongoDBの特徴

MongoDBには以下のような特徴がある。

高速で導入しやすいNoSQLデータベース

MongoDBは、高速なデータ処理ができ、なおかつKVSよりも高機能でRDBと同じような感覚で扱うことができる。そのため、近年、従来のDBの開発者を中心に、非常に人気があるNoSQLのデータベースである。NoSQLではあるが、検索したデータのソートなど、データベース側で行える処理もそろっていて、比較的対比がとりやすい構造になっている。そのため、RDBに慣れたプログラマーでも、アプリケーションの開発が行いやすい。また、MongoDBでは、RDBMSのようにデータの形式を決めておく必要がないため、導入も容易である。MongoDBは、JSON形式でデータを保存しており、Web APIを使ってアクセスする。検索結果もJSON形式で出力される。このため、外部システムとも容易に連携することができる。

ただし、RDBMS(Relational DataBase Management System)で利用できるトランザクションやデータ結合を行うことはできない。

冗長化可能で安全に利用できる

MongoDBでは、冗長化をサポートしているため、重要な処理でも利用することができる。MongoDBでは、レプリカセットと呼ばれる冗長構成を組むことで冗長性を担保する。レプリカセットを組んだ場合、データはメインとなるプライマリサーバに保存され、セカンダリサーバにもコピーされる。レプリカセットを作成すれば、1台のサーバが障害で停止してもデータを失うことがなくサービスを継続できる。

レプリカセットとプライマリ、セカンダリ

レプリカセットは、MongoDBのデータの複製機能である。レプリカセットでは、データの書込みは1台で行う。このデータの書込みを行うノードをプライマリと呼ぶ。また、それ以外の複製ノードをセカンダリと呼ぶ。データの検索や読み込みはセカンダリからも行うことができるため、書込みよりも読み込みが少ないシステムではレプリカセットだけで負荷を分散することができる。

MongoDBのレプリカセット

自動フェールオーバー

MongoDBでは、プライマリが停止すると、セカンダリがプライマリに自動昇格する。どのセカンダリを昇格するかは、システム内の全ノードによる投票で決められる。サーバ数が偶数だと投票では決まらない可能性があるため、レプリカセットを構成するには、最低でも3台のMongoDBノードが必要である。

アービター

アービターは、データを持たないMongoDBの特別なノードである。自動フェールオーバーの時に、プライマリを選ぶ投票に参加することができる。データの読み込みにも書込みにも関与しないため、ほとんど負荷がかからない。

ヒドン(Hidden)とデータのバックアップ

ヒドンは、特別なセカンダリである。セカンダリではあるが、プライマリに昇格することがないノードである。

MongoDBでデータベースのバックアップをとるためには、データベースの更新を一時的に停止する必要がある。そのため、特別なセカンダリを作って、一時的にデータベースの更新を停止してバックアップを取るという手法が使われる。データベースの更新を中止している時に、プライマリに昇格することはできないため、このような用途で利用するセカンダリはヒドンに設定しておく。

負荷分散が可能で柔軟にスケールアップできる

PostgreSQLやMySQLでは、導入後に負荷が増加すると、システムのスケールアップが問題になることが多い。MongoDBでは、データを複数のサーバに分散して保存する機能を備えていて、このような問題に対処することができる。この機能をシャーディングと呼ぶ。MongoDBの導入後に負荷が増加してサーバのパフォーマンスが低下した場合でも、シャーディングの機能を使ってサーバの台数を増やすことで、スケールアウトを行うことができる。

シャーディング

シャーディングとは、MongoDBの複数のノードでデータの分散を行うことである。

MongoDBのシャーディングでは、データは「チャンク」と呼ばれる単位で管理される。コレクションのデータは、設定した最大サイズ(標準では64MB)になるとチャンクに分割される。データが格納されるサーバは、シャードキーによって決定され、各ノードが持っているチャンク数が均等になるように自動的に配置される。

MongoDBのシャーディング

mongos

mongosは、MongoDBでシャードを利用するときに処理を振り分ける役割を持っている。mongosは、クライアントからの問い合わせを処理し、シャードクラスタ内の適切なデータを持ったノードに処理を振り分ける。そのため、シャーディングを利用するためには、必ずmongosが必要となる。mongosは、特に状態を保持しないため、比較的容易に冗長構成を取ることができる。

設定サーバ

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

MongoDBのデータ構造

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

最も基本的な構造は、データベースである。MongoDBでは、データベースの中にコレクションを作成する。そして、コレクションには、キーの名前と値から構成されるドキュメントを配置することができる。RDBと比較すると、コレクションはテーブルに、ドキュメントがレコードに、フィールドが列に相当する。

つまり、次のような構造となっている。

 +--データベース
  |  +--コレクション
  |  |  +--ドキュメント(キーと値)
  |  |  +--ドキュメント(キーと値)

MongoDBは、RDBと異なり厳密なスキーマを持たない。例えば、データベースやコレクションは、特別に定義しなくても、利用しようとしたときに自動生成される。また、RDBではテーブルのスキーマはCREATE TABLEで事前に定義し、レコードの種類を増やすにはALTER tableを使ってテーブルの定義を変更する必要がある。しかし、MongoDBではより柔軟で、このような定義をしておく必要はない。

MongoDBの操作

MongoDBでは、データベースの操作はSQLとは異なっている。ただし、SQLと対応づけしやすいコマンド構造になっている。例えば、ドキュメントの挿入(SQLのINSERT)にあたるコマンドはinsertである。同様に、ドキュメントの更新(SQLのUPDATE)にあたるコマンドもupdateと分かりやすい。また、ドキュメントの取得(SQLのSELECT)にあたるコマンドはfind、ドキュメントの削除(SQLのDELETE)にあたるコマンドはremoveである。update、find、removeの検索条件では、SQLで使う演算子(=<>など)の代わりに、$lt、$gtなどのクエリセレクタを使うことができる。また、findでは結果を取得するフィールドも指定することができる。

MongoDBの用途とシステム構成

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

  • 大量にあるデータを高速に処理したい
  • スモールスタートから初めてアクセス数増加に合わせてデータベースをスケールアウトしていきたい
  • データの冗長化を行いたい

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

MongoDBのシステム構成

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

デージーネットでは、様々なオープンソースソフトウェアを扱っている。最近では、バックエンドのデータベースとしてMySQLやPostgreSQLではなく、MongoDBを採用するソフトウェアも多くなっている。そのため、MongoDBを利用することは多い。また、システムを提案する場合にも、絶対に失ってはいけないデータを扱うとき、高速なデータベース検索が必要なとき等でMongoDBを推奨している。例えば、以下のようなMongoDBを使用したシステム構築の実績がある。

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

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

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

関連用語

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


デージーネット用語集のページです。「MongoDB」という用語と関連情報について説明します。「MongoDB」について情報を収集する際、サービスをご検討いただく際などに用語集ページをお役立てください。

MongoDBとは先頭へ