MongoDBとは?
MongoDBとは何か、についてまずは解説します。MongoDBの性質やMySQLとの違い、MongoDBが人気の理由などについてまとめたので参考にしてください。
MongoDBはデータベースの1つ
MongoDBはデータベースの1種であり、アメリカのMongoDB Inc.によって運営されています。C++という言語で作られ2009年に公開された比較的新しいデータベースです。
データベースとは、検索や更新が効率的に行えるよう整理された情報の集まりのことです。Webアプリやソーシャルゲームなど多くのデータを保持する必要があるサービスにとって、データベースは必要不可欠なものです。
MongoDBはデータベースの中でもNoSQLに分類され、NoSQLの中でも更にドキュメント指向データベースに分類されます。昨今注目されているデータベースでもあり、MySQLなどのRDBMSに継いで人気と言われています。
NoSQLとは?
NoSQLはデータベースの分類を表します。MySQLなどの通常のデータベースはリレーショナルデータベースと呼ばれており、データを表形式で管理します。エクセルの表のように列ごとに何のデータが入るか予め設定され、それに従ってデータを格納していきます。
NoSQLはリレーショナルデータベース以外の全てのデータベースを意味します。リレーショナルデータベース以外にも、キーバリュー・カラム指向・ドキュメント指向・グラフ指向など、数々の形式のデータモデルがあり、これらはNoSQLに分類されます。
MongoDBもNoSQLの1つでありリレーショナルデータベースとは違う種類ということです。
ドキュメント指向データベースとは?
ドキュメント指向データベースとは、ドキュメントとして構成するデータベースのことです。具体的にはXML形式またはJSON形式のドキュメントで管理します。MongoDBはドキュメント指向データベースの1つであり、JSON形式でデータを管理します。
JSON形式とは、JavaScriptのオブジェクトの書き方を参考にした定義方法のことです。JavaScriptをはじめPython・Java・PHPなど数々の言語で使われており、Webアプリで扱いやすいのが特徴です。JSON形式は単なるキーとバリューの構造だけでなく、複雑な階層構造にもできます。そのため、データごとの形式が変わっても問題なく扱うことが可能です。
また、ドキュメント指向データベースには他にもCouchDB、BaseXなどがあります。
MySQLとの違い
MySQLはオープンソースのリレーショナルデータベースの中でも人気が高く、多くのWebアプリで導入されています。WordPressなどのCMSにも採用されています。
MySQLは表形式でデータを格納するため、設計段階でカラム数などのデータベースの構造を厳密に決定しないとならず、その分設計コストがかかります。一方、MongoDBはデータをJSON形式で扱うため、事前にデータベース構造を決めなくて良く、設計時間の短縮に繋がります。
ただし、MongoDBにも苦手分野は多くあるため、どちらが優れているなどはありません。両方の性質を見極めた上で使い分けていくことが重要です。
NoSQLが注目されている理由
NoSQLが注目されている理由は、ビッグデータを扱う重要性が高まっているためです。ビッグデータとは大量かつデータ形式が統一されていないデータ群のことです。たとえば、SNSの書き込みやユーザーの行動ログなど、毎秒ごとに増えていくデータを指します。
これらのビッグデータを上手く扱うことで、企業によって有益な情報を導き出せる可能性があり、ビッグデータは注目ワードとなっています。こういった統一されていないデータはMySQLなどでは扱いが難しいです。
そこでMongoDBをはじめとした、データを表形式で扱わないNoSQLが注目されてきました。
MongoDBを使うメリット
続いて、MongoDBを使うメリットを解説します。アプリ開発でMongoDBを導入することでどういったメリットがあるのかまとめました。
複雑なデータを扱える
複雑なデータを扱えるのがMongoDBの1番の特徴です。JSON形式でデータを管理するため、階層構造などになっているデータでも問題なく格納でき、更新・削除なども素早く行えます。様々なデータ構造に対応できるため、データ形式を予め統一させる必要もなく、そのまま格納していくことが可能です。
大量のデータを高速処理可能
MongoDBはインメモリで動作するため、大量のデータを高速処理することが可能です。インメモリとはデータをメインメモリ上に保持して扱う方式であり、ストレージを使うことがないため、処理速度を速くすることができます。行動ログの処理など、大量のデータをリアルタイムで処理する必要がある場面にMongoDBは向いているでしょう。
ただし、サーバのメモリよりも多くのデータを処理すると性能が下がってしまうので、注意が必要です。
Shardingで水平分散を実現可能
MongoDBはShardingという手法を用いることで、水平分散を実現可能です。水平分散とはサーバの台数を増やしデータをサーバごとに分散させることで、1つのサーバの負荷をへらす仕組みを指します。
MongoDBならサーバの台数を増やすだけで負荷分散して性能を上げられるため、スケールアウトしやすいメリットがあります。
レプリカセットという機能がある
MongoDBにはレプリカセットという、3台以上のサーバでデータの同期を行う機能が備わっています。この機能のおかげで、障害が発生してサーバが使えなくなった場合に別のサーバに切り替えることで凌ぐことが可能です。
MongoDBができないこと・苦手なこと
続いて、MongoDBができないことや苦手なことについて解説します。MySQLなら容易にできることでもMongoDBの場合困難なことは多くあるので、それらについて知っておくことも大切です。
トランザクション
トランザクションとは関連のある複数の処理を1つにまとめることです。MySQLにはトランザクション機能があるため、複数のデータに対し一連の処理を同時に行うことができます。しかしMongoDBにはこの機能がないため、複数のデータを同時更新することが難しくなります。
SQL構文の使用
MongoDBではGROUP BYやSUMなどのSQL構文が使えず、他の構文を代わりに使うことになります。そのためMySQLをマスターした方でもMongoDBを扱う場合、学習コストがかかってしまいます。
他のデータベースで学んだ知識を活用できないというのは、MongoDBのデメリットと言えるでしょう。
MongoDBを使うべき場面
続いて、MongoDBの使いどころについて解説します。アプリ開発においてMongoDBはどういった場面で活躍するのかまとめたので、MongoDBを自社サービスに導入する予定の方などは参考にしてください。
データ量が膨大である
MongoDBはデータ量が膨大になると推測される場面と相性が良いです。Webアプリを開発する場合、基本的な部分はMySQLで管理して更新頻度が多くなる箇所はMongoDBを利用する、というように使い分けるのが一般的でしょう。
操作データログの蓄積
MongoDBはWebサイトの操作データログの蓄積に適しています。MongoDBは出力形式の違うログを一括して扱うことができるのに加え、「TTL Collection」という有効期限切れのログを自動削除する機能が備わっているためです。
ソーシャルゲーム
MongoDBはソーシャルゲームにも活用できると言われています。ソーシャルゲームは小規模な書き込み・読み込みが頻繁に発生するためです。また、スケールアウトがしやすいのもソーシャルゲーム向きと言えるでしょう。
MongoDBの使い方を学ぶ方法
最後に、MongoDBの使い方を学ぶ方法について解説します。MongoDBは最近注目されはじめたデータベースのため、MongoDBについて全く知らない方も多いでしょう。そこで、MongoDBを全く知らない方でも無理なく学習できる方法を紹介するので参考にしてください。
学習サイトを使う
まずは学習サイトを使ってMongoDBの基礎を押さえるのがおすすめです。MongoDBやNoSQLについて解説しているサイトは数多くあります。学習サイトは本を開く必要がないため、通勤時間や空き時間などで手軽に勉強できるのがメリットです。
書籍で学ぶ
学習サイトで基礎を押さえたら書籍で本格的な勉強をはじめましょう。MongoDBについて日本語で解説している書籍はまだ少ないですが、その中でもおすすめなのは「はじめてのMongoDB」です。
本書は「MongoDBとは何か」という点から丁寧に解説しています。MongoDBのインストール方法やデータの操作方法、具体的なアプリケーション開発などを手順に沿って無理なく習得していくことが可能です。
また、NoSQL全体について学びたい方には「RDB技術者のためのNoSQLガイド」がおすすめです。本書には主要なNoSQLの概要や最新情報がまとめられています。RDBの使用経験はあるものの、NoSQLは全く知らない方が対象となっており、NoSQLを実際に業務で活用するための視点を与えてくれます。また、MongoDBについても解説されています。
【参考】:はじめてのMongoDB 【参考】:RDB技術者のためのNoSQLガイド
MongoDBは使いどころを考えて使うことが肝心
本記事ではMongoDBについて解説しました。MongoDBのメリット・デメリットや使いどころについてご理解いただけたかと思います。MongoDBは昨今注目されているデータベースですが、向き不向きの場面も多くあるため使いどころを考えた上で導入することが大切です。
MongoDBはデータ量が膨大になると予想される場面において力を発揮します。MongoDBを習得したい場合は、まず学習サイトで基礎知識を押さえ、その後書籍で詳しく扱い方について勉強するのが良いでしょう。本記事がMongoDBを知りたい方にとって有意義なものとなれば幸いです。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから