Grundlegendes zum Journaling in MongoDB



Der Blog gibt einen kurzen Überblick über Journaling in MongoDB

Arbeiten mit Mongod Write Operation

Mongod hostet hauptsächlich die Schreibvorgänge im Speicher in der gemeinsam genutzten Ansicht. Es wird als freigegeben bezeichnet, da es über eine Speicherzuordnung auf der tatsächlichen Disc verfügt.





Beispielsweise wird die Datendatei des Benutzers auf Daten dd gespeichert und verfügt über eine Speicherzuordnung. Hier werden zunächst alle Daten in den Speicher verschoben und nach einem bestimmten Intervall werden die Daten in den Speicher geflasht. Dies geschieht alle 60 Sekunden, und der Benutzer ist von diesem Vorgang nicht betroffen.

In diesem Fall wird dieser Vorgang als Option 'Kein Journal' bezeichnet. Dies bedeutet, dass bei einer Verzögerung von 60 Sekunden zum Speichern von Daten vom Speicher auf der Disc oder beim plötzlichen Herunterfahren möglicherweise keine Daten im Speicher abgerufen werden. Somit wird Journaling hier relevant.



Was ist Apache Spark vs Hadoop

Es ist wichtig zu wissen, dass das Journaling vor Version 2.4.10 standardmäßig deaktiviert wurde, danach jedoch aktiviert wurde.

In dem Moment, in dem der Mongod-Prozess beginnt, kann die folgende Aussage beobachtet werden:

Journal dir = D: Rana2custom-Datenjournal



Hier ist Journal Directory ein untergeordnetes Verzeichnis innerhalb des Datenverzeichnisses und standardmäßig aktiviert.

Was ist Journaling in MongoDB?

In diesem Prozess wird in Mongod eine Schreiboperation ausgeführt, die dann Änderungen in der privaten Ansicht erzeugt. Der erste Block ist Speicher und der zweite Block ist 'meine Disc'. Nach einem festgelegten Intervall, das als 'Journal Commit Intervall' bezeichnet wird, schreibt die private Ansicht diese Vorgänge in das Journalverzeichnis (das sich auf der Disc befindet).

Sobald das Festschreiben des Journals erfolgt, überträgt Mongod die Daten in die gemeinsame Ansicht. Als Teil des Prozesses wird es aus der freigegebenen Ansicht in das tatsächliche Datenverzeichnis geschrieben (da dieser Prozess im Hintergrund stattfindet). Der grundlegende Vorteil ist, dass wir einen reduzierten Zyklus von 60 Sekunden auf 200 Millisekunden haben.

In einem Szenario, in dem zu jedem Zeitpunkt eine Unterbrechung auftritt oder die Flash-Disc in den letzten 59 Sekunden nicht verfügbar ist (unter Berücksichtigung der vorhandenen Daten in Journalverzeichnis- / Schreibvorgängen), werden beim nächsten Start von mongod grundsätzlich alle Schreibvorgänge wiederholt protokolliert und schreibt in das eigentliche Datenverzeichnis.

Wie es funktioniert?

Sobald ein Commit ausgeführt wird, wird derselbe Vorgang in der freigegebenen Ansicht wiedergegeben, und nach 60 Sekunden wird die Flash-Disc ausgeführt.

Nach dem Flashen werden die Daten verarbeitet. Die Daten hier werden im Journalverzeichnis als verarbeitet markiert. Dies bedeutet, dass alle 60 Sekunden die kopierten Daten und die Daten, die aus dem Journal entfernt werden sollen, überprüft werden.

Die Verwendung von Journaling ähnelt der Verwendung eines Protokolls. Der Grund dafür ist, dass ein Schreibvorgangsprotokoll erstellt wird, um die Haltbarkeit zu erhöhen. Journaling ist ein temporärer Speicher, dh es wird nur das Schreibvorgangsprotokoll als im Journalverzeichnis anstehend gespeichert. Die gemeinsam genutzte Ansicht enthält auch die Daten, das Journalverzeichnis jedoch die Vorgänge.

c ++ goto Anweisung

Wenn der Benutzer beispielsweise einige Daten ohne Journal schreibt, werden die Benutzer mithilfe der Speicherzuordnung unabhängig von den geschriebenen Daten über den Speicherort informiert, an dem die Daten geschrieben werden.

Verknüpfung zwischen privater Ansicht und freigegebener Ansicht

Nach dem Festschreiben wird es im Journalverzeichnis als Prozess markiert, und es wird eine weitere Zuordnung für die aktuelle Ansicht der freigegebenen / privaten Ansicht vorgenommen (ohne gemeinsame Nutzung von Daten).

In der Tabelle befinden sich alle blauen Elemente im RAM (Direktzugriffsspeicher), und der Safran kennzeichnet die Disc.

Wenn die Daten nicht im Datenverzeichnis geflasht werden, sondern Schreibvorgänge im Datenverzeichnis vorhanden sind, verarbeitet mongod die Datenvorgänge erneut und wendet sie auf das Datenverzeichnis an.

Ein wichtiger Punkt ist, dass in einem Szenario, in dem ein Absturz vor dem Festschreiben des Journals auftritt, die Daten vorhanden sindangehängtinnerhalb von 200 Millisekunden gehen verloren.

Beachten Sie auch, dass wir im Journalverzeichnis weiterhin die eigentliche Operation schreiben.

In der Beispielanweisung wie z ‘Db.class.insert’ Dies ist eine Einfügeoperation, bei der die Daten in Klassenoperationen eingefügt werden. Die Klassenoperation bleibt also nicht wirklich bestehen, sondern die Operation bleibt bestehen.

Es muss auch beachtet werden, dass eine Verzögerung bei der Verwendung des Journals die Leistung beeinträchtigt.

Man kann Journaling auch als asynchronen Prozess im Hintergrund haben und nichts in den Operationen synchron ausführen. Journaling wird auch in der Produktion empfohlen.

Zweitens ist der Zeitrahmen für das Journal-Festschreibungsintervall von '200 Millisekunden' konfigurierbar, der mit '- - Journal-Festschreibungsintervall' zwischen 3 und 300 Millisekunden aktiviert werden kann. Dies hängt alles von den nicht funktionierenden Anforderungen ab (wie häufig Schreibvorgänge ausgeführt werden und wie oft man in ein Journalverzeichnis schreiben möchte). Wenn schwere Schreibvorgänge ausgeführt werden, ist es ratsam, weniger Millisekunden zu verwenden.

Beachten Sie auch, dass die private Ansicht die tatsächlichen Daten enthält, da die private Ansicht der freigegebenen Ansicht zugeordnet ist. Die freigegebene Ansicht hier flasht es in das Datenverzeichnis.

In diesem Prozess haben wir den Vorteil, dass Serverabstürze auftreten und keine Daten verfügbar sind, die auf Flashs geschrieben werden müssen. Der nächste Server, der mongod neu startet, überprüft das Journalverzeichnis auf Wiederherstellung. Es werden Operationen im Datenverzeichnis wiederhergestellt, wiedergegeben und geschrieben und dann gestartet.

Hast du eine Frage an uns? Erwähnen Sie sie im Kommentarbereich und wir werden uns bei Ihnen melden.

Zusammenhängende Posts:

wie man pl sql lernt