MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Perché prestazioni Mongodb migliori su Linux che su Windows?

Primo:tutti i filesystem disponibili sul server Windows 2008 sono molto, molto inefficienti. Rispetto a XFS o ext4, sono fino al 40% più lenti quando vengono ottimizzati sia i file system Windows che Linux.

Secondo:la latenza potrebbe essere un problema. Lo stack di rete su un sistema Linux attuale è semplicemente più veloce che su un server W2008.

Terzo:se hai un firewall in esecuzione sulla tua scatola, la latenza diventa un problema ancora più grande per l'accesso remoto. Mentre iptables di Linux è abbastanza veloce ed efficiente in modo che la maggior parte delle appliance firewall si basi su di esso, i firewall disponibili per Windows non lo sono, per vari motivi.

Inoltre:Windows non è efficiente con la RAM come Linux. MongoDB utilizza quanta più RAM possibile (fino al punto necessario), ad esempio per archiviare (copie di) file di indice nella RAM. Windows occupa una quota molto maggiore della RAM disponibile rispetto a una macchina Linux. Quindi i file di indice potrebbero essere letti dal disco piuttosto che dalla RAM, il che è un ordine di grandezza più lento.

In conclusione:eseguire un mongoDB di produzione su un sistema Windows è un'idea davvero pessima.

MODIFICA

Come da richiesta nei commenti:

  • Per quanto riguarda la velocità del filesystem:Confronto delle prestazioni I/O del filesystem:RedHat Enterprise 6 e Microsoft Windows Server 2012
  • Per quanto riguarda l'utilizzo inefficiente della RAM, potresti volerlo verificare tu stesso. Quanta RAM utilizza un determinato sistema Windows Server in idle? Come si confronta con qualsiasi dato server Linux inattivo? Cerchiamo di essere gentili e supponiamo che il server Windows abbia solo bisogno di 128 M per la sua GUI:sono 128 MB sprecati. Moltiplicato per 20, che non è una grande dimensione del cluster, stiamo parlando di 2,5 GB, che potrebbero facilmente costituire un server di configurazione o un arbitro, se non di più. E questo verrebbe speso per una GUI, per un sistema che raramente ne ha bisogno, se non del tutto. Per quanto riguarda i fatti concreti, potresti voler leggere Confronto delle prestazioni di CPU e memoria:Red Hat Enterprise Linux 6 e Windows Server 2012
  • Per quanto riguarda la velocità dello stack di rete, ci sono più fonti, eccone due a cui tendo a fare riferimento:
    • Prestazioni comparative misurate degli stack TCP , più vecchio, ma stiamo parlando di ordini di grandezza, che almeno rende l'idea
    • Confronto delle prestazioni di rete:Red Hat Enterprise Linux 6 e Windows Server 2012

Potresti aver riconosciuto che ho fatto riferimento a tre rapporti di Principled Technologies. Anche se non sono in alcun modo affiliato a loro, IMHO hanno fatto un buon lavoro nel confrontare RHEL 6 e Windows Server 2012 utilizzando benchmark standard del settore e ottimizzando esplicitamente entrambi i sistemi operativi per l'attività in questione, nonché utilizzando sistemi operativi predefiniti.

Si potrebbe obiettare che questo confronto non prova che tutte le distribuzioni GNU/Linux siano più veloci di Windows Server 2012, le funzionalità di cui stiamo parlando sono quelle fornite dal kernel Linux e di solito non vengono manipolate, quindi è lecito ritenere che simili ci si possono aspettare risultati da tutte le principali distribuzioni.

Con i vantaggi in parte delle prestazioni estreme di Linux (lo stack TCP di Linux è quasi 4 volte più veloce di quello di Windows Server per messaggi di grandi dimensioni, il che tende ad essere il caso nelle applicazioni di database), rinnovo la mia affermazione che è una Very Bad Idea™ per eseguire un MongoDB di produzione su un sistema Windows.