MongoDBならではの特徴
ここからは他のドキュメント型NoSQLとは違う、MongoDBならではの特徴を説明していきます。
トータルの人件費が安くなる
ビックデータや非構造データを安いコストで扱うためにNoSQLを採用しても、エンジニアの人件費がそれを上回ってしまっては元も子もありません。自社でNoSQLの開発を始めようと思った時に、果たしてそれに対応できるエンジニアは何人いるでしょうか? おそらくエンジニアの大部分はRDBMSでの開発しか経験がないのではないでしょうか? そのような状態はまずNoSQLを勉強することから始める必要があり、その後の運用もコストが高くなることが懸念されます。
図8:トータルでの人件費比較のイメージ(筆者作成)
MongoDBはそのような不安を取り去るために、RDBMSに慣れ親しんだエンジニアに理解しやすいように意図的に設計されています。例えば、MongoDBのクエリはSQLとマッピングできるほど似ていますし、集計などの機能もSQL並みに充実しています。インデックス管理、アクセス権限管理もRDBMSに似せて作られており、その実行方法もアプリケーションの中で動的に書くことができます。データの更新も同期的でクエリの中でデータを更新します。
これはRDBMSならばあたりまえと思われるかもしれませんが、NoSQLの世界では必ずしも当たり前ではありません。例えば、クエリはMap/Reduceという関数を使い、集計機能は部分的、インデックスは事前に作成しアプリではそれを参照する形、データの更新はバックグラウンドで非同期、といったことがあります。こうなると、学習コストは上がりますし、運用も難しくなってくるでしょう。
理解に加えて、構築も簡単です。MongoDBは非常にコンパクトに作られており、MongoDB本体はたったひとつの実行ファイルです。大部分の機能はOSに余計なライブラリなどをインストールせずに利用できます。また、MongoDBはレプリケーションやシャーディング(水平分散)といった複数台のクラスタも簡単に組むことができます。筆者はよく勉強会を開催するのですが、MongoDBを初めて触る人でもインストールは10分、基本的なCRUDは1時間、レプリケーションも1時間もあれば組めるようになります。
運用フェーズに必要となる知識の獲得も容易です。特に重要になるレプリケーションですが、MongoDBのレプリケーションはプライマリの更新ログをセカンダリに充てる方式であり、RDBMSのよくあるレプリケーションと似ているため、すぐに理解することができます。それに加えて、自動フェイルオーバー、障害復旧時のリカバリ、スプリットブレイン時の挙動、ノードの追加や削除の挙動などもシンプルに作られており理解するのが簡単です。
今後デファクトスタンダードになっていく見込み
NoSQLを採用するにあたり、もう一つ重要なポイントとして、そのNoSQLに未来があるかどうかです。システムの寿命は5年と言われています。5年後にそのNoSQLが活発に開発され、バグフィックスや脆弱性対応がされることが重要になってきます。
MongoDBの中ではNoSQLの中で最も普及し、ウェブ上での議論やノウハウの数が最も多いです。DB-Enginesというサイトでは、DB技術に関して、Google Trendsを用いた人気度、Stack Overflowなどでの技術トピックの登場回数、Indeedなどにおける募集スキル数、LinkedInにおけるプロフィール登場回数などを集計して、DBのランキングを作成しています。その中でMongoDBは、NoSQLの中では1位、DB全体の中でもOracleやMySQL、SQL Serverに次いで4位の位置につけています 。
MongoDBに5年後があるかどうかは誰にもわかりません。ですが、今現在最も普及しているというのは一つの判断ポイントになります。