MongodbとMySQLの比較分析

Dec 21, 2018 am 10:33 AM
mongodb mysql

この記事の内容は Mongodb と MySQL の比較分析に関するものです。必要な方は参考にしていただければ幸いです。

データベースに格納されたデータには、主キーと呼ばれる特別なキー値があり、テーブル内のレコードを一意に識別するために使用されます。つまり、テーブルに複数の主キーを持つことはできず、主キーを null にすることもできません。 MongoDBでもMySQLでも、主キーの定義が存在します。 MongoDB の場合、主キーは「_id」と呼ばれます。データを生成するときに、ユーザーが主キーを積極的に割り当てない場合、MongoDB はランダムに割り当てられた値を自動的に生成します。

MySQL では、主キーの指定は、MySQL がデータを挿入するときに PRIMARY KEY を指定することで定義されます。主キーが指定されていない場合、別のツールであるインデックスは主キーの機能を置き換えることと同等です。インデックスは空であっても、重複していてもかまいません。重複を許可しない別のタイプのインデックスは、一意のインデックスと呼ばれます。主キーもインデックスも指定されていない場合、MySQL はデータ用に主キーもインデックスも自動的に作成します。

ストレージ速度の比較

1. データベースの平均挿入率: MongoDB は _id 挿入を指定しません> MySQL は主キーを指定します。挿入> MongoDB は挿入用の _id を指定します。

2. MongoDB では、_id を指定した場合と指定しない場合では挿入速度に大きな差がありますが、MySQL ではその差ははるかに小さいです。

分析:

1. _id または主キーを指定する場合、2 つのデータベースは挿入時にインデックス値を処理し、データベース内に同じ値が存在するかどうかを確認する必要があります。 . キーの値により、挿入速度が遅くなります。

2. MongoDB では、インデックス挿入を指定すると、指定しない場合よりもはるかに時間がかかります。これは、MongoDB 内の各データの _id 値が固有であるためです。 _id を指定せずにデータが挿入された場合、その _id はシステムによって自動的に計算され、生成されます。 MongoDB は、コンピューターの特性、時間、プロセス ID、乱数を使用して、生成された _id が一意であることを保証します。 _id を指定して挿入する場合、MongoDB はデータを挿入するたびにこの _id が使用可能かどうかを確認する必要があります。データベース内のデータ項目が多すぎると、このステップのクエリのオーバーヘッドにより全体の挿入速度が遅くなります。データベース。

3. MongoDB はシステム メモリをキャッシュとして完全に使用します。これは非常に優れた機能です。私たちのテスト マシンには 64G のメモリがあり、メモリを挿入すると、MongoDB はメモリがデータでほぼいっぱいになった後、データをハードディスクに永続化しようと最善を尽くします。これは、_id を指定せずに挿入する場合に MongoDB がはるかに効率的である理由でもあります。ただし、_idを指定して挿入する場合、データ量が多くてメモリに収まらない場合、MongoDBは重複チェックのためにディスクから情報をメモリに読み込む必要があり、挿入効率が遅くなります。

4. MySQL は確かに非常に安定したデータベースであり、主キーを指定して挿入しても、主キーを指定せずに挿入しても、その効率に大きな違いはありません。

挿入安定性解析

挿入安定性とは、データ量が増加するにつれて、一定量のデータを挿入したときの挿入率を指します。

このテストでは、このインジケーターのスケールを 100,000 に設定します。つまり、表示されるデータは、100,000 個のデータが挿入されたときに、この期間中に 1 秒あたり何個のデータを挿入できるかということです。

最初に 4 つの図を示します:

1. MongoDB は _id 挿入を指定します:

MongodbとMySQLの比較分析##2. MongoDB は _id 挿入を指定しません:

MongodbとMySQLの比較分析3. MySQL は挿入用の PRIMARY KEY を指定します:

##4. MySQL は挿入用の PRIMARY KEY を指定しません: MongodbとMySQLの比較分析

MongodbとMySQLの比較分析要約:

1. 全体的な挿入速度は、依然として前のラウンドの統計と同様です。MongoDB は次のようになります。挿入用の _id を指定しません> MySQL は挿入用の主キーを指定しません> MongoDB は挿入用の _id を指定します。

2. 図からわかるように、主キーを指定してデータを挿入する場合、MySQL と MongoDB でデータの大きさが異なる場合、1 秒あたりに挿入されるデータが時々変動します。チャートの表示に定期的な不具合が発生します。データの挿入を指定しない場合、ほとんどの場合挿入率は比較的平均的ですが、データベース内のデータが増加すると、挿入効率は一定期間で一時的に低下し、その後再び安定します。

3. 全体として、MySQL よりも MongoDB のレート変動が大きく、分散が大きく変化します。

4. MongoDB が _id を指定して挿入する場合、これ以上のデータを挿入すると挿入効率が大幅に低下します。他の 3 つの挿入テストでは、挿入速度は最初から最後までほとんどの時間、標準で固定されています。

分析:

1. 不具合現象は、挿入されるデータが多すぎると、MongoDB がメモリ内のデータをハードディスクと MySQL に書き込む必要があるためです。サブテーブルを再作成する必要があります。これらの操作は、データベース内のデータが特定のレベルに達するたびに自動的に実行されるため、明らかな不具合が発生することがあります。

2. 結局のところ、MongoDB はまだ新しいものであり、その安定性は長年使用されている MySQL には及ばないのです。

3. MongoDB が指定された _id を挿入すると、パフォーマンスが大幅に低下します。

4. 読み取られるデータのサイズが大きくない場合、MongoDB のクエリ速度は実に比類のないものであり、MySQL に大きく劣ります。

5. クエリされるデータの量が徐々に増加すると、MySQL のクエリ速度は着実に低下しますが、MongoDB のクエリ速度は多少変動します。

分析:

1. MySQL がクエリに最適化されていない場合、そのクエリ速度を MongoDB と比較すべきではありません。 MongoDB はシステムのメモリ リソースを最大限に活用できます。メモリが大きいほど、MongoDB のクエリ速度は桁違いに速くなります。 。

2. この実験のクエリ データもランダムに生成されるため、クエリ対象のすべてのデータが MongoDB のメモリ キャッシュに格納される可能性は非常に低くなります。クエリを実行する場合、MongoDB はメモリとディスク内のデータを見つけるために複数回対話する必要があるため、クエリ速度は対話の回数によって決まります。クエリされるデータの量は多くなりますが、このランダムに生成されたデータが MongoDB によってディスクからフェッチされる回数は少なくなる可能性があります。したがって、平均クエリ速度は速くなります。この観点から見ると、MongoDB のクエリ速度の変動も妥当な範囲内にあります。

3. MySQL の安定性については疑いの余地がありません。

結論

1. MySQL と比較して、MongoDB データベースは大量の読み取り操作を伴うタスク モデルに適しています。 MongoDB はマシンのメモリ リソースを最大限に活用できます。マシンに豊富なメモリ リソースがある場合、MongoDB のクエリ効率ははるかに速くなります。

2. "_id" を使用してデータを挿入する場合、MongoDB の挿入効率は実際には高くありません。 MongoDB のパフォーマンスを最大限に活用したい場合は、「_id」なしで挿入し、クエリ用に関連するフィールドにインデックスを付けることをお勧めします。

3. MongoDB は、データベースの特定のデータ形式が不明瞭であるか、データベースのデータ形式が頻繁に変更される需要モデルに適しており、開発者にとって非常に使いやすいです。

4. MongoDB には正式に分散ファイル システムが付属しており、サーバー クラスターに簡単にデプロイできます。 MongoDB にはシャードという概念があり、サーバーのシャーディングに便利です。シャードを追加するたびに、MongoDB の挿入パフォーマンスがほぼ 2 倍になり、ディスク容量を簡単に拡張できます。

5. MongoDB には、データ統計にも非常に便利なマップ リデュース コンピューティング フレームワークもサポートされています。

MongoDB の欠陥

1. トランザクション関係のサポートが弱い。これはすべての NoSQL データベースに共通する欠陥でもありますが、NoSQL はトランザクション関係向けに設計されておらず、特定のアプリケーションは依然として需要があります。

2. 上記のテストからもわかるように、安定性がやや欠けています。

3. MongoDB は、開発者にとって便利である一方で、運用および保守担当者に多大な要求を課します。業界には MongoDB の運用および保守の成熟した経験がなく、MongoDB のデータの保存形式も非常にランダムです。このような問題は、運用および保守担当者にとって試練となります。

以上がMongodbとMySQLの比較分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

MySQLの解決策は、「ユーザーのために拒否されたアクセス」という問題に遭遇します MySQLの解決策は、「ユーザーのために拒否されたアクセス」という問題に遭遇します Apr 11, 2025 pm 05:36 PM

MySQLの「ユーザーのアクセス拒否」を解決する方法エラー:1。ユーザーの許可を確認して、データベースに接続します。 2。パスワードをリセットします。 3.リモート接続を許可します。 4。更新権限。 5.データベースサーバーの構成(Bind-Address、Skip-Grant-Tables)を確認します。 6.ファイアウォールルールを確認します。 7.MySQLサービスを再起動します。ヒント:データベースをバックアップした後に変更を加えます。

MySQLデータのNAVICATの自動バックアップ MySQLデータのNAVICATの自動バックアップ Apr 11, 2025 pm 05:30 PM

NAVICATを使用してMySQLデータを自動的にバックアップする手順:MySQL Serverにインストールして接続します。バックアップタスクを作成し、バックアップソース、ファイルの場所、名前を指定します。バックアップタイプ、周波数、保持時間などのバックアップオプションを構成します。自動バックアップ計画を設定し、自動バックアップを有効にし、時間と頻度を設定します。バックアップ設定をプレビューし、バックアップを実行します。バックアップの進行と履歴を監視します。

mysqlデータテーブルフィールド操作ガイドの追加、変更、削除方法ガイド mysqlデータテーブルフィールド操作ガイドの追加、変更、削除方法ガイド Apr 11, 2025 pm 05:42 PM

MySQLのフィールド操作ガイド:フィールドを追加、変更、削除します。フィールドを追加:table table_nameを変更するcolumn_name data_type [not null] [default default_value] [プライマリキー] [auto_increment]フィールドの変更:column_name data_typeを変更するcolumn_name data_type [not null] [default default_value] [プライマリキー]

MySQLデータベースのネストされたクエリインスタンスの詳細な説明 MySQLデータベースのネストされたクエリインスタンスの詳細な説明 Apr 11, 2025 pm 05:48 PM

ネストされたクエリは、1つのクエリに別のクエリを含める方法です。これらは主に、複雑な条件を満たし、複数のテーブルを関連付け、要約値または統計情報を計算するデータを取得するために使用されます。例には、平均賃金を超える従業員を見つけること、特定のカテゴリの注文を見つけること、各製品の総注文量の計算が含まれます。ネストされたクエリを書くときは、サブ征服を書き、結果を外側のクエリ(エイリアスまたは条項として参照)に書き込み、クエリパフォーマンスを最適化する必要があります(インデックスを使用)。

MongoDBインデックスを並べ替える方法 MongoDBインデックスを並べ替える方法 Apr 12, 2025 am 08:45 AM

ソートインデックスは、特定のフィールドによるコレクション内のドキュメントのソートを許可するMongoDBインデックスの一種です。ソートインデックスを作成すると、追加のソート操作なしでクエリ結果をすばやく並べ替えることができます。利点には、クイックソート、オーバーライドクエリ、およびオンデマンドソートが含まれます。構文はdb.collection.createIndex({field:< sort and gt;})、where< sort and> IS 1(昇順)または-1(降順注文)です。また、複数のフィールドをソートするマルチフィールドソートインデックスを作成することもできます。

See all articles