37
11

MongoDBについて調べてみた

Last updated at Posted at 2024-07-06

最近、CMS刷新の会話をすることがあり、そのサイトではMongoDBを利用しているとのことでした。NoSQLについては今までRedisくらいしか使用したことがなかったので、この際、MongoDB、NoSQLについて調べてみることにしましたので、その結果をレポートします。

MongoDBとは

MongoDBとは、NoSQLに分類されるデータベースの1つです。データベースというと、一般的に知られているのがRDB(リレーショナル・データベース)です。Oracle Database、MySQL、SQLServer,PostgreSQLなどが有名です。RDB以外のデータベースを、NoSQL(Not Only SQL)と言います。
NoSQLとは「SQLだけはない(Not Only SQL)」で、「SQLに変わる存在」という意味を含んでいるそうです。

NoSQLの特徴

近年、Webサイトのコンテンツ(静止画、動画)の量は増大化し、かつ、膨大なアクセス数が集中することで、サーバーの負荷が増加しています。
RDBによるデータの管理では、サーバー台数を増やす(水平スケールアウト)が難しく、DBサーバーのスペックを高速化するしか対応手段がありませんでした。そこで、登場したのが、NoSQLでした。

NoSQLが生まれた歴史的背景からみても、NoSQLの特徴はRDBの不満を解決するものになっています。特徴を列挙してみます。

  • スキーマレス
  • トランザクションがない
  • 水平スケールアウトが容易
    注)MongoDBはテーブル結合ができます

スキーマレスとは

スキーマレスとは、スキーマがないということで、固定されたスキーマやテーブル構造を必要としません。
RDBでは、予め決めたスキーマ(テーブル)にデータが格納されます。しかし、MongoDBでは、データをJSON形式で保持します。テーブルの項目を定義しないため、アプリケーションの要件が変更になっても、データベースの構造を簡単に変更することができます。
スキーマレスであるため、リレーションという考え方もありません。

トランザクションがない、とは

RDBはACID特性を持ち、トランザクションを使用することで、データの一貫性を保ちます。トランザクションは必ず結果を返却します。成功した場合はデータが更新され、エラーになった場合は、ロールバックされ、データは元の状態に戻ります。
NoSQLはトランザクションをサポートせず「結果整合性」という考え方に基づいてデータ処理を行います。結果整合性とは、即座にデータが反映されることを前提とせず、結果的に(実際に読み込まれる時までに)一貫性が保証されていればよいという考え方になります。
また、NoSQLは、水平スケールアウト(サーバーを増やすこと)を容易に出来きます。トランザクションはサーバーを跨ぐことは出来ない、ということもありません。

水平スケールアウトが容易

RDBでは、処理能力を向上させるには、サーバーのCPU・メモリを増強させるか、リードレプリカを作成し、読み取り速度を向上させる、といった方法をとります。
NoSQLでは、サーバーをほぼ無制限に増やすことができるため、水平スケールアウトが容易と言えます。

NoSQLが得意なシステムは

NoSQLは柔軟性やスケーラビリティが容易であるため、リアルタイムでの大量データ処理、非構造化データの取り扱い、高速な読み書きが必要とされるアプリケーションなどで活用が期待されています。
具体的には、

  • ソーシャルメディア(SNS等)
  • ECサイト
  • BIなどのデータ分析
  • モバイルアプリケーション
    などが挙げられます。

NoSQLであるMongoDBとは・・・

NoSQLにも色々な種類のデータベースが存在していますが、MongoDBは「ドキュメント型」データベースになります。ドキュメント型とは、JSONのようなドキュメント形式でデータを保存するという意味です。

ちなみに、JSONとは、「JavaScript Object Notation」を略した言葉で、JavaScript用に作られたテキストでのデータ形式の1つです。XMLよりも記述が簡単なため、近年、より多く使われるようになってきたデータ形式になります。

このため、JSONに似た形式のドキュメントでデータを保存・処理することから、複雑な形式のデータを扱いやすく、ドキュメント形式であるため、動的かつ柔軟に扱うデータの形式を変えることもできます。

MongoDBの名前は、英単語の『humongous』(ばかでかい、巨大な)に由来しています。そのことからも、大容量のデータを扱いのに適したデータベースと言えるかもしれません。

また、MongoDBはMongoDB社(元 10gen社)が開発し、オープンソースとして提供されています。

最後に

NoSQL、MongDBについて調べてみて、システムが扱うデータの特定を見極め、RDBが良いのか、NoSQLが良いのか、はたまた、RDBとNoSQLの両方を利用するのがよいか、を検討することが良いのだと思いました。
次回は、MongDBをローカルに構築し、データのやり取りの方法を確認してみたいと思います。

37
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
11