45

わかりました、なぜMongoDBがとても速いのかについて質問があります

私はそれらの答えに感謝しますが、それらは非常に一般的です。はい、知っています:

  • MongoDB はドキュメント ベースですが、なぜドキュメント ベースであると速度が大幅に向上するのでしょうか?
  • MongoDB は noSQL ですが、なぜ noSQL がより高いパフォーマンスを意味するのでしょうか?
  • SQL は、一貫性や ACID などに関して MongoDB よりもはるかに多くのことを行いますが、MongoDB も同様のことを行ってデータを安全に保ち、インデックス作成を維持していると思いますよね?

わかりました、調べるためにこの質問を書きます

  1. MongoDB の高性能の詳細で具体的な理由は何ですか?
  2. SQL は正確に何を行いますが、MongoDB はそれを行わないため、非常に高いパフォーマンスが得られますか?
  3. インタビュアー (MongoDB と SQL の専門家) があなたに尋ねたら"Why MongoDB is so fast"、どう答えますか? 明らかに、単に答えるだけ"because MongoDB is noSQL"では十分ではありません。

ありがとう

4

3 に答える 3

43

まず、リンゴとリンゴを比較してみましょう。MongoDBを使用した読み取りと書き込みは、RDBMSに非クラスター化インデックスがないテーブルの主キーによる単一の読み取りと書き込みに似ています。

それでは、正確にベンチマークを行いましょう:http: //mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html

そして、まったく同じプリミティブ操作を公正に比較した場合の速度差は大きくありません。実際、MySQLはわずかに高速です。私は、それらは同等だと思います。

なんで?実際、この特定のベンチマークでは、両方のシステムが同様のことを行っているためです。主キーで検索された単一の行を返すことは、実際にはそれほど多くの作業ではありません。非常に高速な操作です。クロスプロセス通信のオーバーヘッドがその大きな部分を占めているのではないかと思います。

私の推測では、MySQLでより調整されたコードは、MongoDBのわずかに体系的なオーバーヘッド(論理ロックやその他の小さなものがない)を上回っています。

これは興味深い結論につながります。ドキュメントデータベースのようにMySQLを使用して、優れたパフォーマンスを引き出すことができます。


インタビュアーが「ドキュメントやスタイルは気にしない。もっと高速なデータベースが必要なだけだ。MySQLとMongoDBのどちらを使うべきだと思うか」と答えた場合、私は何に答えますか?

パフォーマンスを少し無視して、2つのシステムの相対的な強さを確認することをお勧めします。MongoDBでは、スケーリング(ウェイアップ)やレプリケーションなどが思い浮かびます。MySQLの場合、豊富なクエリ、同時実行モデル、より優れたツールと成熟度など、さらに多くの機能があります。

基本的に、機能をパフォーマンスと交換することができます。それを喜んでしますか?それは一般的にはできない選択です。とにかくパフォーマンスを選択する場合は、別のテクノロジーを追加する前に、まずMySQLを調整することを検討してください。


クライアントが主キーで単一の行/ドキュメントを取得すると、次のようになります。両方のシステムの違いに注釈を付けます。

  1. クライアントはバイナリコマンドを作成します(同じ)
  2. クライアントはTCP経由で送信します(同じ)
  3. サーバーはコマンドを解析します(同じ)
  4. サーバーはキャッシュからクエリプランにアクセスします(SQLのみ、MongoDBではなく、HandlerSocketではありません)
  5. サーバーはB-Treeコンポーネントに行へのアクセスを要求します(同じ)
  6. サーバーは、行につながるBツリーパスで物理的な読み取り専用ロックを取得します(同じ)
  7. サーバーは行を論理的にロックします(SQLのみ、MongoDBではなく、HandlerSocketではありません)
  8. サーバーは行をシリアル化し、TCP経由で送信します(同じ)
  9. クライアントはそれを逆シリアル化します(同じ)

一般的なSQLベースのRDBMSには、追加の手順が2つだけあります。そのため、実際には違いはありません。

于 2012-06-28T12:29:11.540 に答える
5

一般に、MySQL と MongoDB は、単一のマシンでの「永続的な」書き込みパフォーマンスにおいて非常に似ています。単純なキー/値のルックアップはほとんど同じです... MySQL をそのように使用したい場合。ドキュメントのサポートは、明らかに、生産性に大きなメリットをもたらし、パフォーマンスに大きなメリットをもたらします。

自動シャーディングにより、MongoDB は言葉では言い表せないほど高速です。すぐに使用できる適切な設計により、コードにロジックをまったく組み込むことなく、ほぼ直線的にスケールアウトできます。

読み取り/書き込み分割は、ほぼすべてのドライバーにも組み込まれています...ほとんどのドライバーは、10gen 自身が後援または開発しています。

私は以前にアプリケーションをスケーリングし、読み取り/書き込み分割コードを作成し、シャーディング用にハッシュを分散し、継続的に実行されるジョブのバランスを取り直し、mysql の「ドキュメント」ストアに gzip を追加しました。うーん。

シンプルで焦点が合っているため、高速です。このすべてを念頭に置いて設計されています。コモディティ ハードウェアのスケーリングが優先されます。RDBMS の優先順位はまったく異なります。

于 2013-03-06T09:18:02.490 に答える
4

デフォルトでは、mongo はインデックス作成を行いません。また、取引もありません。ただし、mysql テーブルをインデックスなしに構成し、自動コミットをオンにすると、速度に大きな違いは見られません。ディスクへのビットの書き込みには、一定の時間がかかります。

ただし、mongo は簡単にスケーリングできるように設計されています。シャードを使用すると、書き込みを水平方向にスケーリングし、マスター マスター レプリケーションの複雑さなしにパフォーマンスを大幅に向上させることができます。レプリカ セットを使用すると、読み取りを水平方向にスケーリングできます。したがって、全体的なパフォーマンスが向上したと言えますが、各クエリが必ずしも高速であるとは限りません。

于 2012-06-28T12:33:49.673 に答える