MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Dlaczego wydajność Mongodb jest lepsza w systemie Linux niż w systemie Windows?

Po pierwsze:wszystkie systemy plików dostępne na serwerze Windows 2008 są bardzo, bardzo nieefektywne. W porównaniu z XFS lub ext4, są one do 40% wolniejsze, gdy zoptymalizowane są zarówno systemy plików Windows, jak i Linux.

Po drugie:opóźnienie może być problemem. Stos sieciowy w obecnym systemie Linux jest po prostu szybszy niż na serwerze W2008.

Po trzecie:jeśli masz zaporę sieciową działającą na swoim komputerze, opóźnienie staje się jeszcze większym problemem dla zdalnego dostępu. Podczas gdy Linux iptables jest na tyle szybki i wydajny, że z różnych powodów opiera się na nim duża część urządzeń zapory ogniowej, zapory dostępne dla systemu Windows nie są takie.

Plus:Windows nie jest tak wydajny z pamięcią RAM jak Linux. MongoDB wykorzystuje jak najwięcej pamięci RAM (do momentu, w którym potrzebuje), na przykład do przechowywania (kopii) plików indeksu w pamięci RAM. Windows zajmuje znacznie większy udział w dostępnej pamięci RAM niż maszyna z systemem Linux. Tak więc pliki indeksowe mogą być odczytywane z dysku niż z pamięci RAM, co jest o rząd wielkości wolniejsze.

Podsumowując:uruchomienie produkcyjnej bazy danych mongoDB w systemie Windows to Naprawdę Zły Pomysł.

EDYTUJ

Zgodnie z prośbą w komentarzach:

  • Jeśli chodzi o szybkość systemu plików:Porównanie wydajności we/wy systemu plików:RedHat Enterprise 6 i Microsoft Windows Server 2012
  • Jeśli chodzi o nieefektywne wykorzystanie pamięci RAM, możesz to sprawdzić samodzielnie. Ile pamięci RAM używa dany system Windows Server podczas bezczynności? Jak to wygląda w porównaniu z jakimkolwiek bezczynnością serwera Linux? Bądźmy grzeczni i załóżmy, że serwer Windows potrzebuje tylko 128 MB na GUI - to zmarnowane 128 MB. Pomnożona przez 20, co nie jest dużym rozmiarem klastra, mówimy o 2,5 GB – co z łatwością może stanowić serwer konfiguracyjny lub arbitra, jeśli nie więcej. I to byłoby wydawane na GUI, dla systemu, który rzadko go potrzebuje, jeśli w ogóle. Zgodnie z twardymi faktami możesz przeczytać Porównanie wydajności procesora i pamięci:Red Hat Enterprise Linux 6 a Windows Server 2012
  • Jeśli chodzi o szybkość stosu sieciowego, istnieje wiele źródeł, oto dwa, do których zwykle się odnoszę:
    • Zmierzona porównawcza wydajność stosów TCP , starszy, ale mówimy o rzędach wielkości, co przynajmniej daje wyobrażenie
    • Porównanie wydajności sieci:Red Hat Enterprise Linux 6 i Windows Server 2012

Być może zauważyłeś, że powołałem się na trzy raporty firmy Principled Technologies. Chociaż nie jestem z nimi w żaden sposób powiązany, IMHO wykonali dobrą robotę, porównując RHEL 6 i Windows Server 2012, stosując standardowe testy porównawcze w branży i wyraźnie optymalizując oba systemy operacyjne pod kątem danego zadania, a także używając gotowych systemów operacyjnych.

Można argumentować, że to porównanie nie dowodzi, że wszystkie dystrybucje GNU/Linux są szybsze niż Windows Server 2012, funkcje, o których mówimy, są dostarczane przez jądro Linuksa i zwykle nie są manipulowane, więc można śmiało założyć, że podobne wyników można oczekiwać od wszystkich głównych dystrybucji.

Mając częściowo ekstremalne zalety wydajnościowe Linuksa (stos TCP Linuksa jest prawie 4 razy szybszy niż Windows Server w przypadku dużych wiadomości, co zwykle ma miejsce w przypadku aplikacji bazodanowych), ponawiam moje twierdzenie, że to Bardzo Zły Pomysł™ na uruchomienie produkcyjnej bazy danych MongoDB w systemie Windows.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Obejście MongoDB dla dokumentu o rozmiarze większym niż 16 MB?

  2. Aktualizacja MongoDB z warunkiem

  3. Spring data mapowanie pola identyfikatora mongodb

  4. Nie można połączyć się z MongoDB Atlas (queryTxt ETIMEOUT)

  5. MongoDB $indexOfBytes