MongoDBとは
MongoDBとは、ビッグデータやIoTのデータ処理に利用されるNoSQLサーバである。2007年にDoubleClickのチームが開発し、Apache 2ライセンスの下でオープンソースソフトウェアとして公開されている。MongoDBは、公式ドライバとしてC言語やC++、JavaScript、Javaなどがある。
AmazonやGoogleが、クラウド・サービス上でMongoDB互換のDBを提供するなど、NoSQLとしては最もスタンダードなソフトウェアである。
MongoDBの概要
MongoDBの名前に含まれる "Mongo" は、巨大という意味をもつ単語 "Humongos" からきている。インメモリで動作するため、高速なデータI/Oが可能となっている。また、データの分散配置やレプリケーションを行うことも可能となっており、スケーラビリティ・アベイラビリティの高いデータベースを構築することができる。
MongoDBは、ドキュメント指向データベースである。ほとんどのNoSQLが採用しているKVS(Key Value Store)よりは高機能で、RDB(Relational Database)に近い検索性を備えている。MongoDB側でデータをソートすることも可能である。そのため、RDBになれたユーザにとっては非常に扱いやすい。それでいて、高速なデータ処理を行うことができることが大きな特徴である。また、MongoDBでは、RDBMSのようにデータの形式を決めておく必要がないため、容易に導入することができる。ただし、MongoDBではトランザクションやデータの結合を行うことができないなど、RDBで利用できる機能がすべて取得できる訳ではない。
また、MongoDBではRDBよりも柔軟に冗長化を行うことができる。プライマリノードが故障した場合には、自動的にスレーブノードが昇格するなど、RDBよりも冗長性にすぐれている。NoSQLとしての高速性だけでなく、システムの拡張性にも優れている。また、コンテナでも管理しやすい通信方式を採用していることなどから、IoTのデータ解析などでも良く利用される。
MongoDBの特徴
MongoDBには以下のような特徴がある。
データ処理が高速
MongoDBはインメモリで動作するため、高速なデータI/Oが可能となっている。また、ドキュメント指向のデータベースを採用したNoSQLサーバのため、KVSよりも高機能でRDBと同じような感覚で運用することができる。検索したデータの並び替えなど、データベース側で行える処理もそろっている。RDBに慣れたプログラマでも、アプリケーションの開発が行いやすくなっている。
外部システムとの連携も可能
MongoDBはJSONに似た形式でデータを保存する。アクセスはWeb APIを利用し、検索結果もJSONに似た形式で出力されるため、外部システムとも簡単に連携することができる。
システムの冗長性に優れている
MongoDBは、レプリカセットと呼ばれる冗長構成を実行することができる。レプリカセットには、プライマリとセカンダリと呼ばれるノードがある。データはメインとなるプライマリに保存され、セカンダリサーバにもコピーされる。プライマリが停止した場合、セカンダリがプライマリに自動で昇格する。このように、レプリカセットを利用することで、1台のサーバが障害で停止してもデータを失うことがなくサービスを継続することができる。
システムの拡張性に優れている
MongoDBは、シャーディングと呼ばれるデータを分散する機能がある。シャーディングでは、データを複数のサーバに分散して保存できるため、サーバの台数を増やすことでシステムの拡張を行うことができる。そのため、サーバのパフォーマンスが低下した場合でも、スケールアウトを行うことが可能になる。シャーディングには、configサーバとmongosサーバ、シャーディングクラスタサーバを必要とする。
configサーバ
configサーバは、MongoDBシステム全体の設定を管理するサーバである。シャードに関する情報も設定サーバが管理しているため、configサーバが停止するとシャーディングに関する情報の更新ができなくなる。そのため、MongoDBでシャーディングを使った負荷分散を行う場合には、configサーバをレプリカセットで冗長化する場合が多い。
mongosサーバ
mongosサーバは、MongoDBでシャードを利用するときに処理を振り分けるサーバである。クライアントからの問い合わせを処理し、シャードクラスタ内の適切なデータを持ったノードに処理を振り分ける。
シャーディングクラスタサーバ
シャーディングクラスタサーバは、実際にデータを保存するサーバである。シャーディングクラスタサーバも可用性を高めるためレプリカセットを利用し、冗長化を行う場合が多い。データが格納されるサーバは、シャードキーによって決定される。データは「チャンク」と呼ばれる単位で管理され、コレクションのデータが設定した最大サイズ(標準では64MB)になるとチャンクに分割される。
MongoDBのデータ構造
MongoDBは、NoSQL型のデータベースだが、RDBに似た構造でデータを管理することができる。しかし、リレーショナルなデータ構造は取ることはできないため、データの相関関係を表現するすることができない。
MongoDBは、データベースの中にコレクションを作成し、コレクションには、キーの名前と値から構成されるドキュメントを配置することができる。RDBと比較すると、コレクションはテーブルに、ドキュメントがレコードに、フィールドが列に相当する。
MongoDBの操作
MongoDBでは、データベースの操作はSQLとは異なるが、SQLと対応づけしやすいコマンド構造になっている。例えば、ドキュメントの挿入(SQLのINSERT)にあたるコマンドはinsertである。同じように、ドキュメントの更新(SQLのUPDATE)にあたるコマンドもupdateとわかりやすい。
また、ドキュメントの取得(SQLのSELECT)にあたるコマンドはfind、ドキュメントの削除(SQLのDELETE)にあたるコマンドはremoveである。findでは結果を取得するフィールドも指定することができる。update、find、removeの検索条件では、SQLで使う演算子(=<>など)の代わりに、$lt、$gtなどのクエリセレクタを使うことができる。
MongoDBの用途とシステム構成
MongoDBは以下のようなシステムへの導入が適している。
- 大量にあるデータを高速に処理したい
- スモールスタート時から始めてアクセス数増加に合わせてデータベースをスケールアウトしていきたい
- データの冗長化を行いたい
大規模なMongoDBのデータベースでは、シャーディングもレプリカセットも有効にしたシステム構成となる。
MongoDBの商用版
MongoDBには、MongoDB Enterprise Advancedという商用版も用意されている。MongoDB Enterprise Advancedでは、以下の機能が利用できる。
Ops Manager
Ops Managerとは、MongoDBの統合管理インターフェースである。Ops Managerでは、WEBインターフェースで以下の操作ができる。
- レプリケーションクラスタの構築
- シャーディングクラスタの構築
- データの追加/削除
- サーバ状況などのモニタリング
- データのバックアップ/リストア
In-Memory Storage
In-Memory Storageとは、MongoDB Enterprise Advancedでのみ利用できるストレージエンジンである。In-Memory Storageでは、データが非永続的でメモリ上に保存するため、特に書き込みに関する処理で高速処理が可能となっている。In-Memory Storageを利用しながらデータを永続的に保存するためには、レプリカセットを行う必要がある。
デージーネットの取り組み
デージーネットでは、現在様々なオープンソースソフトウェアを扱っている。最近では、バックエンドのデータベースとしてMySQLやPostgreSQLではなく、MongoDBを採用するソフトウェアも多くなっている。そのため、MongoDBを利用することは多い。また、システムを提案する場合にも、絶対に失ってはいけないデータを扱う時、高速なデータベース検索が必要な時などでMongoDBを推奨している。
- MongoDBを使用したビックデータの解析システムを構築
- レプリケーション、シャーディングを機能を有効にして、冗長化、負荷分散を実現
デージーネットではMongoDBを使用したシステム構築サービスを提供したお客様には、導入後支援サービスとして、Open Smart Assistanceを提供している。これは、MongoDB単体のサポートではなく、Linuxなどを含むシステム全体に対するサポートを行っている。
MongoDBの基本的な情報やインストール・ログイン方法などの詳細は「MongoDB Enterprise Advanced調査・検証報告書」に掲載している。
【カテゴリ】:ビッグデータ  オープンソースソフトウェア  IoT  
【Webセミナー】社員教育や営業でも利用できる!OSSの動画配信システムの導入セミナー
日程: | 3月19日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | 12月に行ったセミナーがご好評でしたので再度開催します!今回は社内で撮った録画を保管・共有できるオープンソースソフトウェアのAvideoを紹介します。 |
ご興味のあるかたはぜひご参加ください。 |