MongoDB използва дневник на диска, за да гарантира операции по запис и да осигури устойчивост на сривове. MongoDB също така създава дневник за всяко записване, което включва точното местоположение на диска и байтовете, които са се променили при записа. По този начин, ако имате срив в сървъра, дневникът може да се използва за възпроизвеждане на всякакви записи, които все още не са записани във файловете с данни.
MongoDB използва картографирани файлове в паметта, за да запише вашите данни на диск. По подразбиране файловете с данни на MongoDB се изхвърлят на диск на всеки 60 секунди. Те също така използват картографирани файлове в паметта за дневника и по подразбиране дневникът се изхвърля на диск на всеки 100 ms. Тъй като окончателните файлове с данни се изхвърлят на диска на всеки 60 секунди, дневникът не трябва да проследява записите за повече от една минута. За повече подробности относно механиката на воденето в дневник вижте официалната документация. За да разберете как работи картографирането на изгледите по-подробно, можете да разгледате блога на Кристина.
Притеснение при записване в дневник
>db.data.insert({"name":"testentry"}); >db.runCommand({"getLastError":1, "j":true});
Когато включите журнирането на MongoDB, вие също имате възможността да посочите проблем за запис в MongoDB на „Журналирано“ за вашите операции в MongoDB. Това означава, че MongoDB потвърждава операцията за запис само след ангажимент към дневника. Това обаче има недостатък – когато посочите „j”:true с getLastError, MongoDB ще изчака около 1/3 от вътрешното записване на дневника, преди да запише данните на журнала. Интервалът за записване на журнала по подразбиране е 100ms – така че MongoDB ще изчака 30ms и ще запише данните. Това по същество означава, че в една нишка можете да получите само около 33,3 записа/секунда и препоръчителната най-добра практика е да групирате записите си. Например, ако имате 50 записа, използвайте настройката „j”:true само при последното записване – това ще потвърди, че всички предишни 50 записа са извършени.
Резюме
Всяка производствена инстанция на MongoDB трябва да работи с активирано водене на журнал. Ако нямате активирано водене на журнал и вашият сървър или процесът на MongoDB се срине, MongoDB няма да може да гарантира целостта на данните. Ще трябва да изпълните операция за „поправяне“ на базата данни, която, в зависимост от количеството данни, може да отнеме няколко часа. Изключете го само ако наистина знаете какво правите. В ScaleGrid всички наши екземпляри следват конфигурацията на най-добрите практики на MongoDB и воденето на журнали е включено по подразбиране.