Förstå journalföring i MongoDB



Bloggen ger en kortfattad information om Journaling i MongoDB

Arbetar med Mongod Skrivoperation

Mongod är främst värd för skrivoperationer i minnet i delad vy. Det kallas delat eftersom det har minneskartläggning på den faktiska skivan.





Till exempel hålls användarens datafil på data dd och den har en minneskartläggning. Här skjuter den först all data till minnet och efter ett visst intervall blinkar den in i minnet, vilket sker var 60: e sekund och användaren påverkas inte av denna process.

Här kallas denna process No Journal Option, vilket innebär att om det finns en 60 sekunders fördröjning för att spara data från minnet till skivan eller plötslig avstängning, betyder det att oavsett vilken data som finns i minnet kanske inte kan hämtas. Således blir journalföring relevant här.



statiskt blockexempel i java

Det är viktigt att veta att Journaling har inaktiverats före version 2.4.10 som standard men efter det har den aktiverats.

När ögonblicksprocessen startar kan följande uttalande observeras:

Journal dir = D:Rana2custom datajournal



Här är Journal Directory en underkatalog i datakatalogen och är som standard aktiverad.

Vad är journalföring i MongoDB?

I denna process sker en skrivoperation i Mongod, som sedan skapar förändringar i privat vy. Det första blocket är minne och det andra blocket är ”min skiva”. Efter ett angivet intervall, som kallas ett “journal commit interval”, skriver den privata vyn dessa operationer i journalkatalogen (finns på skivan).

När journalförpliktelsen inträffar skjuter mongod data till delad vy. Som en del av processen skrivs den till den faktiska datakatalogen från den delade vyn (eftersom denna process händer i bakgrunden). Den grundläggande fördelen är att vi har en reducerad cykel från 60 sekunder till 200 millisekunder.

I ett scenario där ett avbrott inträffar vid vilken tidpunkt som helst eller blixtskivan förblir otillgänglig de senaste 59 sekunderna (med tanke på de befintliga data i journalkatalogen / skrivoperationer), när nästa gång mongod startar, spelar den i princip upp alla skrivoperationer loggar och skriver in i den faktiska datakatalogen.

Hur det fungerar?

Här, när en kommission har hänt, spelas samma operation upp i delad vy och sedan, efter sextio sekunder, händer flashskivan.

När den har blinkat bearbetas data. Uppgifterna här är markerade som bearbetade i journalkatalogen, vilket innebär att den var 60: e sekund kontrollerar den data den har kopierat och de som ska tas bort från journalen.

Att använda journal är som att använda en logg, orsaken är att det skapar en skrivoperationslogg för att öka hållbarheten. Journaler är tillfällig lagring, vilket innebär att den endast håller skrivoperationsloggen som väntande i journalkatalogen. Den delade vyn har också data men journalkatalogen har operationerna.

Till exempel, om användaren skriver en del data utan journalföring, så oavsett vilken data som skrivs, kan dess minneskartning låta användaren veta platsen där data skrivs.

Länk mellan privat vy och delad vy

Efter att händelsen har hänt markeras den som en process i journalkatalogen och det görs ytterligare en mappning för aktuell vy av delad / privat vy (utan datadelning).

I diagrammet finns alla de blå objekten i RAM (random access memory) och Saffron betecknar skivan.

Om data i fallet inte blinkar i datakatalogen men skrivåtgärder finns i datakatalogen, kommer Mongod att bearbeta om igen och tillämpa skrivoperationer i datakatalogen.

En viktig punkt att notera är att i ett scenario där en krasch inträffar innan journalförpliktelsen, de data som varbifogasinom 200 millisekunder kommer att gå förlorade.

hur man avslutar ett Java-program

Observera också att vi i journalkatalogen fortsätter att skriva den faktiska operationen.

I exemplet uttalande, såsom 'Db.klass.insättning' som är en insättningsoperation, data i infogas i klassoperationer. Så klassoperationen stannar faktiskt inte men operationen finns.

Det måste också observeras att om det finns en försening med att använda journal, påverkar det prestandan.

Man kan också ha journalföring i bakgrunden som en asynkron process och inte göra något i operationerna på ett synkront sätt. Journalisering rekommenderas också i produktionen.

För det andra kan tidsramen för journalintagningsintervall på '200 millisekunder' konfigureras, vilket kan aktiveras med '- - journalförbindningsintervall' var som helst mellan 3 och 300 millisekunder, vilket allt beror på de icke-fungerande kraven (hur ofta skrivningar händer och hur ofta man vill skriva i journalkatalogen). Om tunga skrivoperationer pågår är det lämpligt att ha mindre millisekunder.

Observera också att privat vy innehåller faktiska data eftersom privat mappas med delad vy. Den delade vyn här blinkar till datakatalogen.

I den här processen är fördelen vi får, om vi har serverkrascher och det inte finns någon tillgänglig data som behöver skrivas på blinkar, så kommer nästa server som startar om mongod att kontrollera journalkatalogen för återställning. Det kommer att återhämta sig, spela upp och skriva i datakatalogen och sedan börjar det.

Har du en fråga till oss? Nämn dem i kommentarfältet så återkommer vi till dig.

Relaterade inlägg:

gjutning av datatyp i java