MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Warum ist die Leistung von Mongodb unter Linux besser als unter Windows?

Erstens:Alle auf dem Windows 2008-Server verfügbaren Dateisysteme sind sehr, sehr ineffizient. Im Vergleich zu XFS oder ext4 sind sie bis zu 40 % langsamer, wenn sowohl das Windows- als auch das Linux-Dateisystem optimiert sind.

Zweitens:Latenz könnte ein Problem sein. Der Netzwerkstack auf einem aktuellen Linux-System ist einfach schneller als auf einem W2008-Server.

Drittens:Wenn auf Ihrer Box eine Firewall läuft, wird die Latenz zu einem noch größeren Problem für den Fernzugriff. Während Linux' iptables schnell und effizient genug ist, so dass ein Großteil der Firewall-Appliances darauf basiert, die für Windows verfügbaren Firewalls sind es aus verschiedenen Gründen nicht.

Plus:Windows ist nicht so effizient mit RAM wie Linux. MongoDB verwendet so viel RAM wie möglich (bis zu dem Punkt, an dem es benötigt wird), beispielsweise zum Speichern von (Kopien von) Indexdateien im RAM. Windows nimmt einen viel größeren Anteil des verfügbaren Arbeitsspeichers ein als eine Linux-Maschine. Daher könnten Indexdateien von der Festplatte gelesen werden als vom RAM, was um Größenordnungen langsamer ist.

Fazit:Es ist eine wirklich schlechte Idee™, eine Produktions-mongoDB auf einem Windows-System auszuführen.

BEARBEITEN

Auf Wunsch in den Kommentaren:

  • Was die Geschwindigkeit des Dateisystems betrifft:Vergleich der E/A-Leistung des Dateisystems:RedHat Enterprise 6 vs. Microsoft Windows Server 2012
  • Was die ineffiziente RAM-Nutzung betrifft, sollten Sie es vielleicht selbst überprüfen. Wie viel RAM verwendet ein bestimmtes Windows Server-System im Leerlauf? Wie ist dies im Vergleich zu einem bestimmten Linux-Server im Leerlauf? Seien wir nett und nehmen an, dass der Windows-Server nur 128 MB für seine GUI benötigt - es sind 128 MB verschwendet. Multipliziert mit 20, was keine große Clustergröße ist, sprechen wir von 2,5 GB – die leicht einen Konfigurationsserver oder Arbiter ausmachen könnten, wenn nicht mehr. Und das würde für eine GUI ausgegeben werden, für ein System, das selten, wenn überhaupt, eine benötigt. Als harte Fakten sollten Sie vielleicht Vergleich der CPU- und Speicherleistung:Red Hat Enterprise Linux 6 vs. Windows Server 2012 lesen
  • Für die Geschwindigkeit des Netzwerkstacks gibt es mehrere Quellen, hier sind zwei, auf die ich mich eher beziehe:
    • Gemessene vergleichende Leistung von TCP-Stacks , älter, aber wir reden hier von Größenordnungen, was zumindest eine Vorstellung gibt
    • Vergleich der Netzwerkleistung:Red Hat Enterprise Linux 6 vs. Windows Server 2012

Sie haben vielleicht bemerkt, dass ich auf drei Berichte von Principled Technologies verwiesen habe. Obwohl ich in keiner Weise mit ihnen verbunden bin, haben sie meiner Meinung nach gute Arbeit beim Vergleich von RHEL 6 und Windows Server 2012 geleistet, indem sie Industriestandard-Benchmarks verwendet und beide Betriebssysteme explizit für die betreffende Aufgabe optimiert sowie sofort einsatzbereite Betriebssysteme verwendet haben.

Man könnte argumentieren, dass dieser Vergleich nicht beweist, dass alle GNU/Linux-Distributionen schneller als Windows Server 2012 sind, die Funktionen, über die wir sprechen, sind diejenigen, die vom Linux-Kernel bereitgestellt werden und normalerweise nicht bearbeitet werden, also kann man davon ausgehen, dass es ähnlich ist Ergebnisse können von allen wichtigen Distributionen erwartet werden.

Mit den teilweise extremen Performance-Vorteilen von Linux (der TCP-Stack von Linux ist bei großen Nachrichtengrößen sogar fast 4-mal so schnell wie der von Windows Server, was bei Datenbankanwendungen eher der Fall ist) erneuere ich meine Behauptung, dass es ist eine sehr schlechte Idee™, eine Produktions-MongoDB auf einem Windows-System auszuführen.