sql >> Database >  >> NoSQL >> MongoDB

Waarom Mongodb-prestaties beter op Linux dan op Windows?

Ten eerste:alle bestandssystemen die beschikbaar zijn op de Windows 2008-server zijn zeer, zeer inefficiënt. Vergeleken met XFS of ext4 zijn ze tot 40% langzamer wanneer zowel de Windows- als Linux-bestandssystemen zijn geoptimaliseerd.

Ten tweede:latentie kan een probleem zijn. De netwerkstack op een huidig ​​Linux-systeem is gewoon sneller dan op een W2008-server.

Ten derde:als je een firewall op je box hebt, wordt latentie een nog groter probleem voor toegang op afstand. Terwijl Linux' iptables is snel en efficiënt genoeg zodat het grootste deel van firewall-appliances erop is gebaseerd, de firewalls die beschikbaar zijn voor Windows om verschillende redenen niet.

Plus:Windows is niet zo efficiënt met RAM als Linux. MongoDB gebruikt zoveel mogelijk RAM (tot het punt dat nodig is), bijvoorbeeld voor het opslaan van (kopieën van) indexbestanden in RAM. Windows neemt een veel groter deel van het beschikbare RAM-geheugen in beslag dan een Linux-machine. Indexbestanden kunnen dus van schijf worden gelezen dan van RAM, wat ordes van grootte langzamer is.

Kortom:het is een echt slecht idee™ om een ​​productie-mongoDB op een Windows-systeem te draaien.

BEWERKEN

Op verzoek in de opmerkingen:

  • Wat betreft de snelheid van het bestandssysteem:Vergelijking van de I/O-prestaties van het bestandssysteem:RedHat Enterprise 6 vs. Microsoft Windows Server 2012
  • Wat betreft het inefficiënte RAM-gebruik, kun je het misschien zelf controleren. Hoeveel RAM gebruikt een bepaald Windows Server-systeem bij inactiviteit? Hoe verhoudt dit zich tot een gegeven Linux Server die inactief is? Laten we aardig zijn en aannemen dat de Windows-server slechts 128M nodig heeft voor zijn GUI - het is 128MB verspild. Vermenigvuldigd met 20, wat geen grote clustergrootte is, hebben we het over 2,5 GB - wat gemakkelijk een configuratieserver of arbiter zou kunnen vormen, zo niet meer. En dit zou worden besteed aan een GUI, voor een systeem dat er zelden of helemaal geen nodig heeft. Volgens harde feiten, wil je misschien lezen CPU- en geheugenprestaties vergelijken:Red Hat Enterprise Linux 6 versus Windows Server 2012
  • Wat betreft de snelheid van de netwerkstack, er zijn meerdere bronnen, hier zijn er twee die ik meestal verwijs:
    • Gemeten vergelijkende prestaties van TCP-stacks , ouder, maar we hebben het over orden van grootte, wat in ieder geval een idee geeft
    • Netwerkprestaties vergelijken:Red Hat Enterprise Linux 6 versus Windows Server 2012

Je hebt misschien herkend dat ik naar drie rapporten van Principled Technologies verwees. Hoewel ik op geen enkele manier met hen verbonden ben, hebben ze IMHO goed werk verricht bij het vergelijken van RHEL 6 en Windows Server 2012 door industriestandaardbenchmarks te gebruiken en beide besturingssystemen expliciet te optimaliseren voor de taak in kwestie, evenals het gebruik van kant-en-klare besturingssystemen.

Je zou kunnen stellen dat deze vergelijking niet bewijst dat alle GNU/Linux-distributies sneller zijn dan Windows Server 2012, de functies waar we het over hebben, worden geleverd door de Linux-kernel en worden meestal niet gebruikt, dus het is veilig om aan te nemen dat vergelijkbare resultaten kunnen worden verwacht van alle grote distributies.

Met de gedeeltelijk extreme prestatievoordelen van Linux (de TCP-stack van Linux is maar liefst bijna 4 keer zo snel als die van Windows Server voor grote berichtgroottes, wat meestal het geval is in databasetoepassingen), hernieuw ik mijn bewering dat het is een zeer slecht idee™ om een ​​productie MongoDB op een Windows-systeem uit te voeren.



  1. Query MongoDB met $and en Multiple $or

  2. MongoDB mongorestore en bestaande collectie met records

  3. Apache HBase I/O – HFile

  4. Sla meerdere versies van gegevens op in de Redis-cache