MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Защо производителността на Mongodb е по-добра на Linux, отколкото на Windows?

Първо:всички файлови системи, достъпни на сървъра на Windows 2008, са много, много неефективни. В сравнение с XFS или ext4, те са до 40% по-бавни, когато файловите системи на Windows и Linux са оптимизирани.

Второ:забавянето може да е проблем. Мрежовият стек на текущата Linux система просто е по-бърз, отколкото на сървър W2008.

Трето:ако имате защитна стена, работеща на вашата кутия, латентността се превръща в още по-голям проблем за отдалечения достъп. Докато iptables на Linux е достатъчно бърз и ефективен, така че голяма част от устройствата за защитна стена се базират на него, защитните стени, налични за Windows, не са по различни причини.

Плюс:Windows не е толкова ефективен с RAM, колкото Linux. MongoDB използва възможно най-много RAM (до точката, от която се нуждае), например за съхраняване (копия на) индексни файлове в RAM. Windows заема много по-голям дял от наличната RAM, отколкото Linux машина. Така че индексните файлове може да се четат от диск, отколкото от RAM, което е с порядък по-бавно.

В крайна сметка:наистина лоша идея™ е да стартирате производствена mongoDB на Windows система.

РЕДАКТИРАНЕ

По заявка в коментарите:

  • Що се отнася до скоростта на файловата система:Сравняване на производителността на файловата система I/O:RedHat Enterprise 6 срещу Microsoft Windows Server 2012
  • Що се отнася до неефективното използване на RAM, може да искате да го проверите сами. Колко RAM използва дадена система на Windows Server, докато не работи? Как се сравнява това с всеки даден Linux сървър на празен ход? Нека бъдем любезни и да приемем, че Windows сървърът се нуждае само от 128M за своя GUI - 128MB са пропилени. Умножено по 20, което не е голям размер на клъстера, говорим за 2,5 GB – които лесно биха могли да съставят конфигурационен сървър или арбитър, ако не и повече. И това ще бъде изразходвано за GUI, за система, която рядко се нуждае от такъв, ако изобщо има нужда. Според твърди факти, може да искате да прочетете Сравняване на производителността на процесора и паметта:Red Hat Enterprise Linux 6 срещу Windows Server 2012
  • Що се отнася до скоростта на мрежовия стек, има множество източници, ето два, които съм склонен да посоча:
    • Измерена сравнителна производителност на TCP стекове , по-стари, но говорим за порядки, което поне дава представа
    • Сравняване на производителността на мрежата:Red Hat Enterprise Linux 6 срещу Windows Server 2012

Може би сте разбрали, че споменах три доклада на Principled Technologies. Въпреки че не съм свързан с тях по никакъв начин, IMHO, те свършиха добра работа при сравняването на RHEL 6 и Windows Server 2012, като използваха стандартни показатели за индустрията и изрично оптимизираха двете операционни системи за въпросната задача, както и използваха нестандартни операционни системи.

Може да се спори, че това сравнение не доказва, че всички дистрибуции на GNU/Linux са по-бързи от Windows Server 2012, функциите, за които говорим, са тези, предоставени от ядрото на Linux и обикновено не се занимават с тях, така че е безопасно да се предположи, че подобни могат да се очакват резултати от всички основни дистрибуции.

С отчасти екстремните предимства на производителността на Linux (TCP стекът на Linux е почти 4 пъти по-бърз от този на Windows Server за големи размери на съобщенията, което обикновено се случва в приложенията за бази данни), подновявам твърдението си, че е много лоша идея™ за стартиране на производствен MongoDB на Windows система.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Търсете в множество колекции в MongoDB

  2. Експортирайте валиден json от колекцията mongodb

  3. Индексът на полето ts в oplog.rs не се актуализира

  4. реплика Задайте mongo docker-compose

  5. Множество препратки към схеми в един масив от схеми - mongoose