MongoDB と MySQL の違いは何か?

MongoDB と MySQL は、データの保存と管理に使用できる 2 つのデータベース管理システムです。MySQL は、構造化された表形式でデータを保存するリレーショナルデータベースシステムです。対照的に、MongoDB はデータをより柔軟な形式で JSON ドキュメントとして保存します。両方ともパフォーマンスとスケーラビリティを提供しますが、異なるユースケースでより優れたパフォーマンスを提供します。

MySQL について読む »

MongoDB について読む »

MongoDB と MySQL にはどのような類似点があるか?

MySQL と MongoDB はどちらもデータベース管理システムです。データを保存し、UI とクエリ言語が組み込まれているため、データを追加、編集、変更、分析できます。

オープンソースライセンス

MongoDB の初期バージョンと MySQL には、どちらもオープンソースライセンスがあります。オープンソース版は無料でダウンロードできます。その後、必要な操作に応じてコードを変更できます。

MySQL は GNU General Public License に基づいています。2018 年 10 月 16 日より前にリリースされた MongoDB のすべてのバージョンは、GNU Affero 一般公衆利用許諾契約書の下で利用できます。

インデックス作成サポート

MySQL と MongoDB はインデックスを使用してクエリの速度とパフォーマンスを向上させます。インデックスは、頻繁にアクセスされるデータにリンクするデータベース構造です。インデックスは、データの検索と取得を非常に迅速に行うのに役立ちます。

MySQL と MongoDB データベースプラットフォームはどちらも、ハッシュインデックス、B ツリーインデックス、その他複数のインデックスを使用します。

ユーザーフレンドリーなインターフェイス

MongoDB と MySQL はどちらも使いやすいです。データを更新および読み取るための自然言語ベースのクエリ言語を提供します。また、データをより視覚的に管理および分析するためのグラフィカルユーザーインターフェイス (GUI) も提供します。

プログラミング言語

MySQL と MongoDB は、同じさまざまなプログラミング言語と互換性があります。Java、Python、Node.js、サーバーサイド PHP、Ruby、C# を MongoDB と MySQL の両方で使用できます。

セキュリティ

MySQL と MongoDB はどちらも、認証、アクセス制御、暗号化を使用してデータベースのセキュリティを確保しています。TLS/SSL 暗号化を使用して、転送中および保存中のデータを保護します。また、さまざまなレベルのユーザーアクセスを定義することもできます。

ドキュメントとコミュニティサポート

MySQL と MongoDB はそれぞれウェブサイトに詳細な公式ドキュメントを掲載しています。チュートリアル、マニュアル、ガイドには、インストール、設定、運用タスクの実行に関する詳細な手順が記載されています。

MongoDB と MySQL には、質問に答えたり、トラブルシューティングを支援したりする活発なデベロッパーコミュニティもあります。どちらも、特定の要件に特化したサポートを提供するエンタープライズエディションも用意しています。 

主な相違点: MongoDB と MySQL

MySQL はリレーショナルデータベース管理システムであり、MongoDB は NoSQL データベースシステムです。これらの詳細については、「リレーショナルデータベースとは」ページと「NoSQL とは」ページを参照してください。

MySQL は、ほとんどのデベロッパーが使用経験のある SQL を使用しています。逆に、MongoDB は MongoDB クエリ言語 (MQL) を使用しています。MQL と SQL には類似点がありますが、MQL を習得するには通常少し多くの作業が必要です。 

次に、その他の主な違いについて説明します。

データモデル

MySQL は、データを列、行、テーブルに格納するリレーショナルデータベースシステムです。データは行に格納し、各列は異なるタイプのデータを表します。次に、外部キーとプライマリキーを使用してデータ間の関係を定義します。各テーブルには識別用のプライマリキーがあり、外部キーによって関係が作成されます。

MongoDB は、すべてのデータをバイナリ JSON (BSON) ドキュメントとして格納するドキュメント指向のデータベースです。BSON では、さまざまな形式のデータをシリアル化できます。BSON ドキュメントを使用すると、非構造化データ、半構造化データ、構造化データを保存できます。データベーススキーマの代わりに、MongoDB はドキュメントをコレクションに保存するという柔軟なアプローチを採用しています。

スケーラビリティ

MySQL データベースシステムでは、スケーリングに使えるオプションは限られています。以下のオプションから選択できます。

  • 現在のデータベースサーバーにリソースを追加することによる垂直スケーラビリティ
  • 他のサーバー上にデータベースの読み取り専用コピーを作成することによる読み取りレプリケーション

読み取りレプリケーションは最大 5 コピーに制限されます。また、レプリカはメインコピーよりも遅れる可能性があり、そのために大規模なパフォーマンス上の問題が発生します。また、垂直スケーラビリティは、使用するインフラストラクチャに制限されます。 

対照的に、MongoDB の設計にはスケーラビリティの面で大きな利点があります。スケーリングには次の 2 つの主な機能があります。

  • レプリカセット - 同一のデータを保持する MongoDB サーバーのグループ
  • シャーディング - さまざまなサーバーに分散されたデータのさまざまな部分

MongoDB ではシャードクラスターを作成できるため、データの一部が複数のサーバーに複製されます。例えば、顧客レコードの数が多い場合は、A~J の名前と K-Z の名前がそれぞれ独自のレプリカセットに収まるように分散できます。そのため、MongoDB は水平方向にスケーリングして、大規模環境で読み取りと書き込みの両方のパフォーマンスを最適化できます。

パフォーマンス

MySQL は、適切にインデックス付けされた複数のテーブルにわたって高性能な結合を実行するように設計されています。ただし、データを行ごとに挿入する必要があるため、書き込みパフォーマンスは遅くなります。

MongoDB ドキュメントは階層型データモデルに従い、ほとんどのデータを 1 つのドキュメントにまとめるため、複数のドキュメントを結合する必要がなくなります。結合は $lookup オペレーションでサポートされていますが、パフォーマンスは最適化されていません。ただし、MongoDB には、書き込みパフォーマンスを優先してデータをすばやく挿入するための insertMany() API が用意されています。 

柔軟性

リレーショナルデータベース管理システムとして、MySQL は MongoDB よりも構造が厳密です。MySQL は固定スキーマを使用し、データを行とテーブルに整理します。MySQL を使用するには、データを構造化して表形式のシステムに収める必要があります。 

データを JSON ドキュメントとして保存することで、MongoDB ではさまざまなデータ型を持つ複雑なアプリケーションを構築できます。例えば、ネストされた配列フィールドを更新することで新しいフィールドを作成できます。また、集約パイプラインを使用することもできます。集約パイプラインは、複数の操作を 1 つのワークフローにまとめてデータを変換できる MongoDB の機能です。

アクセスコントロール

MongoDB 内では、オペレーション、コレクション、またはデータベースレベルでアクセスを制御できます。Kerberos、X.509、および LDAP 証明書を使用してユーザーを認証します。対照的に、MySQL では、ユーザー、データベース、およびテーブルレベルでユーザーアクセスを制限できます。MySQL は独自の認証システムを使用しています。これにより、SQL インジェクション攻撃におけるセキュリティ上の脆弱性が高まりますが、MongoDB のスキーマフリーのアプローチではこれを回避できます。

使用するタイミング: MongoDB とMySQL

MySQL 内のデータストレージ形式は、データウェアハウスやオンライン分析処理に適しています。ACID に準拠しているため、トランザクションはアトミックで、一貫性があり、独立し、耐久性があります。そのため、MySQL は、e コマース、トランザクション、金融のユースケースなど、複雑なトランザクションを扱う場合に便利です。

MySQL は高度に構造化されたデータとインデックス作成機能を備えているため、アドホッククエリにも適しています。アドホッククエリは通常、事前定義されたレポートやクエリでは取得できないデータにすばやくアクセスする必要があるエンドユーザーやデータアナリストによって実行されます。

一方、MongoDB は NoSQL データベースです。ソーシャルネットワーク、メディア、モノのインターネット (IoT) などのユースケースで非構造化データを扱う場合により適しています。MongoDB にはスキーマがないため、絶えず変化したり拡大したりするデータを扱うのに適しています。 

相違点の要約: MongoDB とMySQL

 

MongoDB

MySQL

データモデル

MongoDB はデータを JSON ドキュメントに保存し、コレクションに整理します。

MySQL はデータを列と行に保存します。データストレージは表形式で、リレーショナルです。

スケーラビリティ

MongoDB はレプリケーションとシャーディングを使用して水平スケーリングを行います。

MySQL は垂直スケーリングとリードレプリカを使用して、大規模環境でのパフォーマンスを向上させます。

クエリー言語

MongoDB は MongoDB クエリ言語を使用します。 

MySQL は SQL を使用します。

パフォーマンス

MongoDB は、多数のレコードの挿入または更新に優れています。

MySQL は、多数のレコードを選択するとより高速です。

柔軟性

MongoDB にはスキーマがないため柔軟性が高く、非構造化データ、半構造化データ、構造化データを扱うことができます。

MySQL には、構造化されたデータに適した厳格なスキーマがあります。

セキュリティ

MongoDB は、Kerberos、X.509、および LDAP 証明書を使用してユーザーを認証します。 

MySQL は組み込みの認証方法を使用します。

AWS はお客様の MongoDB と MySQL の要件を満たすのにどのように役立ちますか?

Amazon Web Services (AWS) は、MongoDB と MySQL の要件に合わせて複数のサービスを提供しています。

Amazon DocumentDB (MongoDB 互換) はフルマネージド型のネイティブ JSON ドキュメントデータベースです。その使用により、インフラストラクチャを管理しなくても、実質的にどのような規模でも重要なドキュメントワークロードを簡単かつ費用対効果の高い方法で運用できます。Amazon DocumentDB では、組み込みのセキュリティに関するベストプラクティス、継続的なバックアップ、および他の AWS サービスとのネイティブ統合を利用でき、アーキテクチャーを簡素化できます。

Amazon Relational Database Service (Amazon RDS) はフルマネージドサービスを集めたものであり、クラウド内でリレーショナルデータベースを簡単にセットアップ、運用、およびスケーリングできるようにします。Amazon RDS は 7 つの一般的なエンジンをサポートしていますが、そのうちの 1 つが MySQL です。Amazon RDS for MySQL は、MySQL Community Edition のバージョン 5.7 および 8.0 がサポートされています。

MySQL の代わりに、クラウド中心のソリューション Amazon Redshift を選択することもできます。Amazon Redshift は、SQL を使用して、データウェアハウス、運用データベース、データレイクにわたる構造化および半構造化データを分析し、AWS が設計したハードウェアと機械学習を使用して、あらゆる規模で最高の料金パフォーマンスを実現します。

Amazon Redshift を使用すると、次のような多くのメリットが得られます。

  • データのサイロ化を解消し、すべてのデータをリアルタイムで把握
  • 他のクラウドデータウェアハウスの最大 5 倍のパフォーマンスを実現
  • データインフラストラクチャの管理について心配することなく、データのインサイトを数秒で取得

今すぐアカウントを作成して、AWS で MongoDB と MySQL の使用を開始しましょう。