sql >> Databasteknik >  >> NoSQL >> MongoDB

Varför Mongodb prestanda bättre på Linux än på Windows?

För det första:alla filsystem som finns tillgängliga på Windows 2008-servern är väldigt, väldigt ineffektiva. Jämfört med XFS eller ext4 är de upp till 40 % långsammare när både Windows- och Linux-filsystemen är optimerade.

För det andra:latens kan vara ett problem. Nätverksstacken på ett nuvarande Linux-system är helt enkelt snabbare än på en W2008-server.

För det tredje:om du har en brandvägg igång på din box blir latens ett ännu större problem för fjärråtkomst. Medan Linuxs iptables är tillräckligt snabb och effektiv så att den stora delen av brandväggsutrustning är baserad på den, är de brandväggar som är tillgängliga för Windows inte det av olika anledningar.

Plus:Windows är inte lika effektivt med RAM som Linux är. MongoDB använder så mycket RAM som möjligt (upp till den grad det behöver), till exempel för att lagra (kopior av) indexfiler i RAM. Windows tar en mycket större andel av det tillgängliga RAM-minnet än en Linux-maskin. Så indexfiler kan läsas från disk än från RAM, vilket är storleksordningar långsammare.

Sammanfattning:det är en riktigt dålig idé att köra en produktionsmongoDB på ett Windows-system.

REDIGERA

Enligt begäran i kommentarerna:

  • När det gäller filsystemets hastighet:Jämföra filsystemets I/O-prestanda:RedHat Enterprise 6 vs. Microsoft Windows Server 2012
  • När det gäller den ineffektiva RAM-användningen, kanske du vill kontrollera det själv. Hur mycket RAM-minne använder ett givet Windows Server-system på tomgång? Hur jämför detta med en given Linux-server på tomgång? Låt oss vara trevliga och anta att Windows-servern bara behöver 128M för sitt GUI - det är 128MB bortkastade. Multiplicerat med 20, vilket inte är en stor klusterstorlek, talar vi om 2,5 GB – som lätt kan utgöra en konfigurationsserver eller arbiter, om inte mer. Och detta skulle spenderas på ett GUI, för ett system som sällan behöver en, om alls. Enligt hårda fakta kanske du vill läsa Jämföra CPU- och minnesprestanda:Red Hat Enterprise Linux 6 vs Windows Server 2012
  • När det gäller hastigheten på nätverksstacken finns det flera källor, här är två som jag brukar hänvisa till:
    • Mätad jämförande prestanda för TCP-stackar , äldre, men vi pratar om storleksordningar, vilket åtminstone ger en idé
    • Jämföra nätverksprestanda:Red Hat Enterprise Linux 6 vs Windows Server 2012

Du kanske har insett att jag refererade till tre rapporter från Principled Technologies. Även om jag inte är ansluten till dem på något sätt, IMHO gjorde de ett bra jobb med att jämföra RHEL 6 och Windows Server 2012 genom att använda industristandard riktmärken och explicit optimera båda operativsystemen för uppgiften i fråga såväl som att använda out of the box OS.

Man kan hävda att den här jämförelsen inte bevisar att alla GNU/Linux-distributioner är snabbare än Windows Server 2012, funktionerna vi talar om är de som tillhandahålls av Linux-kärnan och som vanligtvis inte manipuleras, så det är säkert att anta att liknande resultat kan förväntas från alla större distributioner.

Med de delvis extrema prestandafördelarna med Linux (TCP-stacken av Linux är så mycket som nästan 4 gånger så snabb som Windows Servers för stora meddelandestorlekar, vilket tenderar att vara fallet i databasapplikationer), förnyar jag mitt påstående att det är en mycket dålig idé för att köra en produktions MongoDB på ett Windows-system.



  1. Hur sparar man bara en databas i Redis?

  2. använder Async i en transaktion i Spring-applikationen

  3. Använder AngularJs och MongoDB/Mongoose

  4. SSL-anslutning till Redis med StackExchange.Redis