Linux (Ubuntu) と Windows (Server2008) でシャードされた MongoDB のパフォーマンスをテストするプログラムを作成しました。大量のレコードを挿入すると、Windows のディスクのアクティブ時間が非常に長くなり (100%)、パフォーマンスが非常に悪くなります。しかし、Ubuntu では、ディスクの util% は 60% ~ 70% であり、パフォーマンスは Windows よりも優れています。Linux で MongoDB のパフォーマンスが優れていると言えますか?
2 に答える
まず、Windows 2008 サーバーで利用可能なファイルシステムはすべて非常に非効率的です。XFS や ext4 と比較すると、Windows と Linux の両方のファイル システムが最適化されている場合、最大 40% 遅くなります。
2 つ目: レイテンシが問題になる可能性があります。現在の Linux システムのネットワーク スタックは、単純に W2008 サーバーよりも高速です。
3 つ目: ボックスでファイアウォールを実行している場合、リモート アクセスでは遅延がさらに大きな問題になります。Linuxiptables
は十分に高速で効率的であるため、ファイアウォール アプライアンスの大部分は Linux に基づいていますが、Windows で使用できるファイアウォールは、さまざまな理由からそうではありません。
さらに、Windows は Linux ほど RAM を効率的に使用できません。MongoDB は、たとえば RAM にインデックス ファイル (のコピー) を保存するために、できるだけ多くの RAM を (必要なポイントまで) 使用します。Windows は、Linux マシンよりもはるかに多くの RAM を使用します。そのため、インデックス ファイルは RAM からではなくディスクから読み取られる可能性があり、桁違いに遅くなります。
結論: Windows システムで実稼働の mongoDB を実行するのは、本当に悪い考えです。
編集
コメントのリクエストに従って:
- ファイルシステムの速度について:ファイルシステムの I/O パフォーマンスの比較: RedHat Enterprise 6 と Microsoft Windows Server 2012の比較
- 非効率的な RAM の使用については、自分で確認することをお勧めします。特定の Windows Server システムがアイドリング中に使用する RAM の量は? これは、特定の Linux サーバーのアイドリングと比べてどうですか? Windows サーバーがその GUI に 128M しか必要としないとしましょう。128MB が無駄になっています。20 を掛けると、大きなクラスター サイズではありませんが、2.5 GB になります。これは、構成サーバーまたはアービターを簡単に構成できます。そしてこれは、GUI をほとんど必要としないシステムのために、GUI に費やされます。確かな事実として、Comparing CPU and Memory Performance: Red Hat Enterprise Linux 6 vs Windows Server 2012を読むことをお勧めします。
- ネットワーク スタックの速度に関しては、複数の情報源があります。
- TCPスタックの測定された比較パフォーマンス、古いですが、桁違いに話しているため、少なくともアイデアが得られます
- ネットワーク パフォーマンスの比較: Red Hat Enterprise Linux 6 と Windows Server 2012 の比較
Principled Technologies による 3 つのレポートを参照したことにお気づきかもしれません。私は彼らとはまったく関係がありませんが、業界標準のベンチマークを使用し、問題のタスクに対して両方の OS を明示的に最適化し、すぐに使用できる OS を使用することで、RHEL 6 と Windows Server 2012 を比較することで、彼らは良い仕事をしました。
この比較は、すべての GNU/Linux ディストリビューションが Windows Server 2012 よりも高速であることを証明しているわけではないと主張する人もいるかもしれません。私たちが話している機能は、Linux カーネルによって提供されるものであり、通常はいじられません。すべての主要なディストリビューションから結果が期待できます。
Linux の極端なパフォーマンスの利点の一部 (Linux の TCP スタックは、大きなメッセージ サイズでは Windows Server のほぼ 4 倍も高速であり、これはデータベース アプリケーションの場合によく見られます) を利用して、私の主張を更新します。 Windows システムで実稼働の MongoDB を実行するのは非常に悪い考えです。