🇸🇴

MongoDBの可能性・課題点をそれぞれ徹底考察

2022/12/13に公開

はじめに

今回の記事では、NoSQLデータベースの代表格であるMongoDBの可能性と課題点をそれぞれ徹底考察する。

対象読者

  • MongoDBについて知らない人
  • MongoDBを実務・開発で使いたい人
  • 技術選定でMongoDBを検討している人

MongoDBとは

MongoDBとは、MongoDB Inc.が開発したNoSQLデータベースである。数多くあるNoSQLの中では最も高いシェアを誇っており、オープンソースで公開されている。NoSQLデータベースには数多く種類が存在するが、その中でもMongoDBはドキュメント指向データベースに該当する。

MongoDBの開発は2007年10月から開始され、2009年2月にリリースされた。

ドキュメント指向データベースとは、簡潔に言えば、キーに紐づくデータをドキュメント形式で格納できることである。NoSQLの中では書き方の自由度が最も高く、複雑な要素を持つデータを格納できるのが最大の特徴だ。

余談だが、MongoDBの「Mongo」という名前は、英語で「巨大な」「ばかでかい」を意味するhumongousに由来する。

MongoDBのアーキテクチャ

画像引用:Zennの記事「【やってみよう】NoSQL「MongoDB」を10分で学べる記事」

  • RDBMSのようにレコードをテーブルに格納するのではなく、「ドキュメント」と呼ばれる構造的データをJSONに類似している形式で表現し、そのドキュメントの場合を「コレクション」で管理する。
  • コレクションはスキーマレスなドキュメントで格納され、任意のフィールドを好きな時に追加できる。
  • ドキュメントに複雑な階層構造を持たせられる。それらの構造に含まれるフィールドを指定したクエリやインデックスの生成も簡単な指定で行える。
  • ソート・集計や値の検索が得意である。

MongoDBの利点

  • ドキュメント形式でデータを保存できる
  • すぐに始められる
  • データの読み書きが高速
  • プラットフォームがクラウドベースに完全対応している
  • レプリカセット
  • スケールアウトができる
  • エコシステム・コミュニティが成熟しており、情報量が非常に豊富
  • 公式ドキュメントが非常に丁寧。公式ドキュメントでチュートリアルも用意されている。初心者でも学びやすい。
  • 多種多様なプログラミング言語に対応している

それぞれ順番に徹底解説する。

ドキュメント形式でデータを保存できる

MongoDBの公式サイトによれば、ドキュメント指向データベースはあらゆるプログラミング言語でデータを保存したり取得したりできる。

プログラミングスキル判定サービス「TOPSIC」の公式ブログによると、ドキュメント指向データベースの主な特徴は以下の通り。

  • 複雑な階層構造を持たせられる
  • 様々なデータ型を保存できるうえ、データ型を動的に変更できる
  • クエリやインデックスを簡単に作成できる
  • スケールアウト[1]しやすい

ドキュメント指向データベースは、データをXMLあるいはJSON形式のドキュメントで管理できるので、SQLに不慣れでも簡単に扱えるという強みがある。

すぐに始められる

MongoDBでは、MongoDB Atlasを使えば簡単に環境構築を終了できる。設定が非常に簡単で、10分程度もあれば簡単にMongoDBをデプロイできる。さらに、MongoDB AtlasはGoogleアカウントさえあれば誰でも使える。気軽に使いやすい。

MongoDBはMongoDB Atlasのおかげですぐにデータベースにアクセスできるので、この特徴は後述する学習コストの低さに非常に関連している。

データの読み書きが高速

MongoDBは読み書きの速度が高速であるというメリットがある。MongoDBはデータベース側で行う処理をすべてメモリ上で実行するので、高速にデータを書き込みできる。

MongoDBなどのNoSQLは複雑なクエリを処理せずに膨大な量のデータをデータベースに書き込む速度や読み出す速度を重視している傾向がある。それゆえに、迅速なデータの読み書きができる。

プラットフォームがクラウドベースに完全に対応している

MongoDBは単なるデータベースではない。開発者向けのデータプラットフォームである。しかも、MongoDBのプラットフォームはすべてクラウドベースに対応している。MongoDBのクラウドサービスの1つであるMongoDB Atlasを使えば、データベースと上手に統合されたサービスを利用できるようになる。

MongoDBのクラウドサービスについては、主に以下のようなものが挙げられる。

  • Performance Advisor:MongoDBデータベースの最適化を提案する
  • Atlas Search:他のクエリと同じ MongoDB Query API を使った全文検索エンジン
  • MongoDB Charts:魅力的なダッシュボードやビジュアライゼーションを作成するための使いやすいインターフェイス。
  • Multi-cloud deployment:自分の好みのクラウドサービスでデプロイができる。AWS、AzureやGCPなど自分の得意なクラウドでデプロイできる。

その他の機能に関しては、MongoDB Atlasのホームページを参照。

レプリカセット

MongoDBにはレプリカセットがある。これは、3台以上のサーバを用意して、常にデータの同期を取っておく仕組みである。

レプリカセットの仕組みで、障害が発生した場合でもすぐに別のサーバを動かしてレプリケーションを行える。さらに、このサーバは優先順位付けにより、読み出しの設定も可能である。

スケールアウトできる

MongoDBにはスケールアウトできるというメリットがある。

MongoDBは複数のノードによって異なるデータを保存する「シャーディング(sharding)」という負荷分散の仕組みがある。そのため、読み書きを柔軟に行える。さらに、シャーディングを自動化できるので全体のパフォーマンスを挙げながら簡単にスケールアウトができる。

エコシステム・コミュニティが成熟しており、情報量が非常に豊富

MongoDBはエコシステム・コミュニティが成熟しており、情報量が非常に豊富である。コミュニティではcommunity forumで簡単にMongoDBに関する質問を投稿できる。

さらに、MongoDBは十数年以上の歴史があるので、これまで数多くの開発者が技術記事をインターネット上に公開している。試しにmongodbでGoogle検索するとおよそ114,000,000件――つまり、1億件以上の検索記事を見つけることができる。

他のデータベースであるMySQLやSQLite、Redisと検索記事の数を比較してみよう。(2022年12月13日時点)

さすがにMySQLの検索記事数には及ばないものの、SQLiteやRedisと比較すると数で勝っていることがわかる。MongoDBはGoogle上に1億以上の検索記事があるので、わからないことを解決できる環境がある程度整っている。

公式ドキュメントが非常に丁寧

MongoDBは公式ドキュメントのUIが非常に見やすい。これだけ述べてもわからないので、MySQLSQLiteRedisのそれぞれの公式ドキュメントと比較してみよう。

データベース 公式ドキュメントの画像
MongoDB
MySQL
SQLite
Redis

このように比較してみると、MongoDBの公式ドキュメントは他のデータベースの公式ドキュメントと比較して公式ドキュメントのUIが非常に整っていることがわかる。公式ドキュメントの質は学習コストに非常に大きな影響を与える。MongoDBの公式ドキュメントはひと目で見て重要な情報がわかるように設計されている。

公式ドキュメントの質の高さという観点からでも、私はプログラミング初心者(データベース初心者)にMongoDBをオススメできる。

多種多様なプログラミング言語に対応している

MongoDBは多種多様なプログラミング言語に対応している。主に以下のプログラミング言語に公式でドライバを提供している。

このように、MongoDBは様々なプログラミング言語に対応できるのでWeb開発との親和性が非常に高い。

MongoDBの問題点

前章では、MongoDBのメリットについて詳細に解説したが、当然、MongoDBは決して完璧ではない。

MongoDBが抱える問題点として、主に以下のようなことが考えられる。

  • joinに対応していない
  • メモリ使用量が多い
  • 日本ではあまり普及していない

joinに対応していない

MongoDBはMySQLのようなRDBMSに見られるjoinのような結合機能をサポートしていない。

MongoDBでも手動でコーディングすることで、RDBMSのjoinと似たような機能を追加できる。ところが、実行速度が遅くなり、パフォーマンスに悪影響を与えてしまうことがある。

メモリ使用量が多い

MongoDBはデータベースの構造上、値のペアごとにキー名を保存する。前に述べた通り、joinのようなデータベースを結合する機能がないのでデータが冗長になりがちである。そのため、メモリ使用量が多くなる。

日本ではあまり普及していない

MongoDBは日本企業であまり採用されていないのも課題の1つである。技術スタックデータベース「what we use」によれば、MySQLを採用している企業が43社であるのに対して、MongoDBを採用している企業は5社しかない。

MongoDBが日本であまり普及されていない故か、日本語のMongoDBに関する情報が少ない。一般的に出回っているデータベース関連の書籍はRDBMSについて解説されているものがほとんどである。

  • MongoDBを採用している日本企業の少なさ
  • 日本語のデータベース関連の書籍がRDBMSを前提として書かれていること

以上の2点を踏まえると、MongoDBは日本ではあまり普及していないと考えられる。

おわりに

今回の記事では、MongoDBの可能性と問題点をそれぞれ徹底考察した。MongoDBはNoSQLであるがゆえに、RDBMSを採用している日本企業との相性は悪い。しかし、MongoDBは他のRDBMSと同様に情報量が豊富で、かつ公式ドキュメントが充実しており学びやすい環境が整っている

今回の記事を通して、少しでもMongoDBに対する興味を持た頂ければ非常に幸いである。

参考サイト

https://www.mongodb.com/advantages-of-mongodb

https://en.wikipedia.org/wiki/MongoDB

https://webandcrafts.com/blog/mongodb-advantages-and-disadvantages/

https://ja.wikipedia.org/wiki/MongoDB

https://zenn.dev/nameless_sn/articles/mongodb_tutorial

https://www.fenet.jp/infla/column/technology/mongodbの利点8つ|mongodbの概要や特徴についても解説/

https://products.sint.co.jp/topsic/blog/mongodb

脚注
  1. スケールアウト(scale out)とは、コンピュータシステムの性能を増強する手法の一つで、コンピュータの台数を増やすことでシステム全体の性能を向上させること。参照:e-words ↩︎

GitHubで編集を提案

Discussion