MySQL と MongoDB について

MySQL と MongoDB とは何ですか

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

MySQL は、構造化照会言語 (SQL) を使用してデータを操作するリレーショナル データベース管理システムです。SQL は、データ構造、制約、操作、クエリなどを定義できる、汎用の標準化された宣言型言語です。MySQL はテーブルを使用してデータを保存します。テーブルは行と列で構成されます。各行はレコードを表し、各列は属性を表します。テーブルは主キーと外部キーを介して関連付けることができ、データの整合性と一貫性を実現できます。

MongoDB は、ドキュメントを使用してデータを保存する非リレーショナル データベース管理システムです。ドキュメントは JSON に似た形式で、キーと値のペアで構成され、それぞれが属性を表します。ドキュメント間に固定された構造はなく、必要に応じてプロパティを柔軟に追加または削除できます。ドキュメントはコレクションに保存されます。コレクションはテーブルに似ていますが、事前定義されたスキーマはありません。コレクションは参照または埋め込みによって関連付けることができ、データの柔軟性と効率を実現します。

類似点

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

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

MySQL と MongoDB の以前のバージョンには両方ともオープン ソース ライセンスがあり、オープン ソース バージョンは無料でダウンロードできます。コードで何をする必要があるかに応じて変更できます。MySQL は GPL 契約を使用しているため、誰でも MySQL を無料で使用し、そのコードを変更できます。2018 年 10 月 16 日に、MongoDB はライセンスを SSPL 契約に変更しました。これはオープンソース コミュニティには影響しませんが、クラウド ベンダーに関しては、MongoDB インスタンスをホストするクラウド ベンダーに対し、MongoDB から商用ライセンスを取得するか、Open を取得することを明示的に要求します。サービス コードをコミュニティに提供します。

インデックスのサポート

MySQL と MongoDB はインデックスを使用してクエリの速度とパフォーマンスを向上させます。インデックスは、データ クエリを高速化し、データを迅速に検索して取得するのに役立つデータベース構造です。MySQL と MongoDB の両方のデータベース プラットフォームは、ハッシュ インデックス、B ツリー (MySql は実際には B+ ツリーを使用します) インデックス、その他いくつかを使用します。

ユーザーインターフェース

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

プログラミング言語

MySQL と MongoDB は、さまざまな同じプログラミング言語と互換性があります。MongoDB と MySQL はどちらも、Java、Python、Node.js、PHP、Ruby、および C# で使用できます。

安全性

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

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

MySQL と MongoDB は両方とも、それぞれの Web サイトに詳細な公式ドキュメントがあります。どちらのチュートリアル、マニュアル、ガイドにも、インストール、構成、運用タスクの実行に関する完全な手順が含まれています。MongoDB と MySQL には、質問に答えたり、トラブルシューティングを支援できる活発な開発者コミュニティがあります。特定の要件に特化したサポートを備えたエンタープライズ エディションも提供します。

主な違い

MySQL はリレーショナル データベース管理システムであり、MongoDB は NoSQL データベース システムです。MySQL は SQL を使用しており、ほとんどの開発者は SQL の使用経験があります。代わりに、MongoDB は MongoDB クエリ言語 (MQL) を使用します。MQL と SQL には類似点がありますが、MQL を学習するには通常、特別な努力が必要です。次に、ブロガーは主な違いをいくつか紹介します。

データ・モデル

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

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

スケーラビリティ

MySQL データベース システムでは、利用可能なスケーリング オプションは限られています。次のオプションが利用可能です。

  • 現在のデータベース サーバーにリソースを追加することで垂直方向のスケーラビリティを実現します
  • 別のサーバー上にデータベースの読み取り専用レプリカを作成する読み取りレプリケーション

機関向けコピーの作成には制限があり、最大 5 部までとなります。レプリカはマスターよりも遅れて、一貫性の問題を引き起こす可能性もあります。垂直方向のスケーラビリティは、単一マシンのパフォーマンスのボトルネックによっても制限されます。

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

  • レプリカ セット — 同じデータを含む MongoDB サーバーのバックアップ
  • シャーディング — 異なるサーバー間でデータを分散する

MongoDB ではシャード クラスターを作成できるため、データの一部が複数のサーバーにレプリケートされます。たとえば、多数の顧客レコードがある場合、AJ の名前と KZ の名前が独自のレプリカ セットに保持されるようにそれらを分散できます。したがって、MongoDB はスケールアウトして、大規模な読み取りおよび書き込みパフォーマンスを最適化できます。

パフォーマンス

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

MongoDB ドキュメントは階層データ モデルに従っており、ほとんどのデータが 1 つのドキュメント内に保持されるため、複数のドキュメントにわたる結合の必要性が軽減されます。結合は $lookup 操作を通じてサポートされていますが、パフォーマンスは最適化されていません。ただし、MongoDB は、書き込みパフォーマンスを優先して高速にデータを挿入するための insertMany() API を提供します。

柔軟性

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

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

アクセス制御

MongoDB では、アクセス許可を操作、コレクション、またはデータベース レベルで制御できます。Kerberos、X.509、および LDAP 証明書を使用してユーザーを認証します。対照的に、MySQL では、ユーザー、データベース、テーブル レベルでユーザー アクセスを制限できます。MySQL は独自の認証システムを使用します。これは、MongoDB のスキーマレス アプローチによって回避される SQL インジェクション攻撃に別のセキュリティ ホールを生み出します。

差分表

MongoDB  MySql データ モデル MongoDB はデータを JSON ドキュメントに保存し、コレクションに編成します。MySQL はデータを列と行に保存します。データ ストレージは表形式およびリレーショナル形式です。スケーラビリティ MongoDB は、レプリケーションとシャーディングを使用して水平方向に拡張します。MySQL はスケールアップとリードレプリカを使用して、大規模なパフォーマンスを向上させます。クエリ言語 MongoDB は MongoDB クエリ言語を使用します。MySQL は SQL を使用します。パフォーマンス MongoDB は、大量のレコードの挿入または更新に優れています。MySQL は、大量のレコードをクエリする場合に高速です。柔軟性 MongoDB にはスキーマがないため、柔軟性が高く、非構造化データ、半構造化データ、構造化データを処理できます。MySQL には、構造化データを適切に処理する厳密なスキーマがあります。セキュリティ MongoDB は、Kerberos、X.509、および LDAP 証明書を使用してユーザーを認証します。MySQL は組み込みの認証メソッドを使用します。

長所と短所

MySQL と MongoDB には、以下に示すように、それぞれ長所と短所があります。

  • MySQL の利点: 成熟していて安定している: MySQL は、豊富なドキュメントとコミュニティ サポートを備えた、長年確立され、広く使用され、テストされたデータベース システムです。使いやすく強力: MySQL は、複雑なクエリと操作を実装できる、使いやすく強力な SQL 言語を提供します。データ セキュリティ: MySQL は、データの整合性と一貫性を確保し、データの損失やエラーを回避できる ACID トランザクションをサポートしています。
  • MySQL の欠点: 柔軟性が低い: MySQL はデータの構造とタイプを事前に定義する必要があり、動的に変化するデータや非構造化データの保存には適していません。スケーラビリティが低い: MySQL は垂直方向の拡張のみをサポートしており、大量のデータや分散したデータの処理には適していません。パフォーマンスのボトルネック: MySQL が接続、同時実行、インデックス、関連付けなどの多数の操作を処理する場合、パフォーマンスのボトルネックや障害が発生する可能性があります。
  • MongoDB の利点: 高い柔軟性: MongoDB は、データの構造とタイプを動的に調整できるドキュメント モデルを使用しており、動的に変化するデータや非構造化データの保存に適しています。優れたスケーラビリティ: MongoDB は水平拡張をサポートし、大量のデータまたは分散データを処理でき、システムの可用性とフォールト トレランスを向上させます。効率的なパフォーマンス: MongoDB は、大量の読み取りと書き込み、インデックス付け、埋め込み、その他の操作を処理するときに、効率的なパフォーマンスとスループットを達成できます。
  • MongoDB の欠点: 使いにくく複雑: MongoDB が提供する MQL 言語は、使いにくく複雑で、機能が限られており、複雑なクエリや操作を実装できません。データの安全性の確保: MongoDB は ACID トランザクションをサポートしておらず、データの整合性と一貫性を保証できないため、データの損失やエラーが発生する可能性があります。

アプリケーションシナリオ

MySQL と MongoDB はさまざまなアプリケーション シナリオに適しています。主な例をいくつか次に示します。

MySQL は次のシナリオに適しています。

  • MySQL のデータ ストレージ形式は、データ ウェアハウジングやオンライン分析処理に適しています。ACID 標準に準拠しているため、MySQL は電子商取引やトランザクション アプリケーション シナリオなどの複雑なトランザクションに適しています。
  • 政府や金融分野など、データのセキュリティ、一貫性、信頼性を確保する必要があるシナリオ。

MongoDB は次のシナリオに適しています。

  • MongoDB は、ソーシャル ネットワーキング、メディア、モノのインターネット (IoT) などのアプリケーション シナリオで非構造化データを処理するための優れたデータベースです。
  • 読み取りと書き込み、インデックス付け、埋め込みなどの多数の操作が必要で、コンテンツ管理、パーソナライズされた推奨事項、その他のフィールドなど、スケーラブルで変更可能なデータが必要なシナリオ。

おすすめ

転載: blog.csdn.net/qq_28165595/article/details/132286422