Inzicht in journaling in MongoDB



De blog geeft een korte beschrijving van Journaling in MongoDB

Werken met Mongod-schrijfbewerking

Mongod host voornamelijk de schrijfbewerkingen in het geheugen in gedeelde weergave. Het wordt gedeeld genoemd omdat het geheugentoewijzing op de werkelijke schijf heeft.





Het gegevensbestand van de gebruiker wordt bijvoorbeeld bewaard op data dd en heeft een geheugentoewijzing. Hier worden alle gegevens eerst naar het geheugen geduwd en na een gespecificeerd interval worden de gegevens in het geheugen geflitst, wat elke zestig seconden gebeurt en de gebruiker wordt niet beïnvloed door dit proces.

Hier wordt dit proces de No Journal-optie genoemd, wat betekent dat als er een vertraging van 60 seconden is om gegevens uit het geheugen op een schijf op te slaan of abrupt afsluiten, dit betekent dat de gegevens in het geheugen mogelijk niet worden opgehaald. Journaling wordt hier dus relevant.



leer pl sql online gratis

Het is belangrijk om te weten dat Journaling standaard was uitgeschakeld vóór versie 2.4.10, maar daarna is ingeschakeld.

Op het moment dat het mongod-proces begint, kan de volgende verklaring worden waargenomen:

Journal dir = D: Rana2custom datajournal



Hier is Journal Directory een onderliggende directory in de datadirectory en is standaard ingeschakeld.

Wat is journaling in MongoDB?

In dit proces vindt een schrijfbewerking plaats in mongod, die vervolgens wijzigingen in de privéweergave veroorzaakt. Het eerste blok is geheugen en het tweede blok is ‘mijn schijf’. Na een gespecificeerd interval, dat een ‘journaalcommit-interval’ wordt genoemd, schrijft de privéweergave die bewerkingen naar de journaalmap (die zich op de schijf bevindt).

Zodra de vastlegging van het journaal plaatsvindt, pusht mongod gegevens naar een gedeelde weergave. Als onderdeel van het proces wordt het vanuit de gedeelde weergave naar de werkelijke gegevensmap geschreven (aangezien dit proces op de achtergrond plaatsvindt). Het basisvoordeel is dat we een kortere cyclus hebben van 60 seconden naar 200 milliseconden.

In een scenario waarin een abruptie op een bepaald moment optreedt of de flash-schijf de laatste 59 seconden niet beschikbaar is (rekening houdend met de bestaande gegevens in de journaalmap / schrijfbewerkingen), wordt de volgende keer dat mongod start in feite alle schrijfbewerkingen opnieuw afgespeeld logt en schrijft naar de feitelijke gegevensdirectory.

Hoe het werkt?

Hier, als er eenmaal een commit plaatsvindt, wordt dezelfde bewerking opnieuw afgespeeld in de gedeelde weergave en dan, na zestig seconden, gebeurt de flash-schijf.

Nadat het is geflitst, worden de gegevens verwerkt. De gegevens hier worden gemarkeerd als verwerkt in de journaaldirectory, wat betekent dat elke zestig seconden de gegevens worden gecontroleerd die het heeft gekopieerd en de gegevens die uit het journaal zouden moeten worden verwijderd.

Het gebruik van journaling is als het gebruik van een logboek, met als reden dat het een logboek voor schrijfbewerkingen maakt om de duurzaamheid te vergroten. Logboekregistratie is tijdelijke opslag, wat betekent dat alleen het logboek voor schrijfbewerkingen in de journaaldirectory in behandeling wordt gehouden. Ook heeft de gedeelde weergave de gegevens, maar de journaalmap heeft de bewerkingen.

hoe je het pad instelt in java

Als de gebruiker bijvoorbeeld gegevens schrijft zonder logboekregistratie, laat de geheugentoewijzing de gebruiker weten waar de gegevens zijn geschreven, ongeacht welke gegevens er worden geschreven.

Koppeling tussen privéweergave en gedeelde weergave

Nadat de vastlegging heeft plaatsgevonden, wordt het gemarkeerd als een proces in de journaalmap en wordt er nog een toewijzing gedaan voor de huidige weergave van de gedeelde / privéweergave (zonder gegevensuitwisseling).

In de tabel bevinden alle blauwe items zich in RAM (Random Access Memory) en de Saffron geeft de schijf aan.

Als in het geval dat de gegevens niet in de gegevensdirectory worden geflitst, maar er wel schrijfbewerkingen in de gegevensdirectory zijn, dan zal mongod opnieuw verwerken en schrijfbewerkingen toepassen op de gegevensdirectory.

Een belangrijk punt om op te merken is dat in een scenario waarin een crash plaatsvindt voordat het journaal is vastgelegd, de gegevens dat wel warentoegevoegdbinnen 200 milliseconden gaat verloren.

Merk ook op dat we in de journaaldirectory de daadwerkelijke bewerking blijven schrijven.

In de voorbeeldverklaring, zoals ‘Db.class.insert’ wat een invoegbewerking is, de gegevens worden ingevoegd in klassebewerkingen. Dus de klasse-operatie blijft niet echt, maar de operatie blijft.

Houd er ook rekening mee dat als er vertraging optreedt bij het gebruik van het dagboek, dit de prestaties beïnvloedt.

Men kan ook Journaling op de achtergrond hebben als een asynchroon proces en niets in de bewerkingen op een synchrone manier doen. Journaling wordt ook aanbevolen in productie.

Ten tweede is het tijdsbestek van het vastleginterval van het journaal van '200 milliseconden' configureerbaar, dat kan worden ingeschakeld met '- - journaal vastleginterval' ergens tussen 3 en 300 milliseconden, wat allemaal afhangt van de niet-functionerende vereisten (hoe vaak er wordt geschreven en hoe vaak men in de journaaldirectory wil schrijven). Als er zware schrijfbewerkingen gaande zijn, is het raadzaam om minder milliseconden te gebruiken.

Houd er ook rekening mee dat privéweergave feitelijke gegevens bevat, aangezien privé wordt toegewezen aan gedeelde weergave. De gedeelde weergave hier flitst het naar de gegevensdirectory.

In dit proces is het voordeel dat we behalen, in het geval dat we servercrashes hebben en er geen gegevens beschikbaar zijn die op flashes moeten worden geschreven, dan zal de volgende server die mongod herstart de journaalmap controleren op herstel. Het zal bewerkingen in de gegevensdirectory herstellen, opnieuw afspelen en schrijven en dan begint het.

Heeft u een vraag voor ons? Noem ze in het opmerkingengedeelte en we nemen contact met u op.

Gerelateerde berichten:

hoe je een willekeurige string in java maakt