MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Sollten Sie MongoDB-Journaling aktivieren?

MongoDB verwendet ein On-Disk-Journal, um Schreibvorgänge zu garantieren und Ausfallsicherheit zu bieten. MongoDB erstellt außerdem für jeden Schreibvorgang ein Journal, das den genauen Speicherort auf der Festplatte und die Bytes enthält, die sich beim Schreiben geändert haben. Wenn Sie also einen Serverabsturz haben, kann das Journal verwendet werden, um alle Schreibvorgänge wiederzugeben, die noch nicht in die Datendateien geschrieben wurden.

MongoDB verwendet speicherabgebildete Dateien, um Ihre Daten auf die Festplatte zu schreiben. Standardmäßig werden MongoDB-Datendateien alle 60 Sekunden auf die Festplatte geschrieben. Sie verwenden auch speicherabgebildete Dateien für das Journal, und standardmäßig wird das Journal alle 100 ms auf die Festplatte geschrieben. Da die endgültigen Datendateien alle 60 Sekunden auf die Festplatte geschrieben werden, muss das Journal die Schreibvorgänge nicht länger als eine Minute nachverfolgen. Weitere Einzelheiten zur Funktionsweise des Journalings finden Sie in der offiziellen Dokumentation. Um zu verstehen, wie die Ansichtszuordnung im Detail funktioniert, können Sie sich Kristinas Blog ansehen.

Journaling Write Concern

>db.data.insert({"name":"testentry"});
>db.runCommand({"getLastError":1, "j":true});

Wenn Sie das MongoDB-Journaling aktivieren, haben Sie auch die Möglichkeit, für Ihre MongoDB-Vorgänge ein Schreibproblem in MongoDB von „Journaled“ anzugeben. Dies impliziert, dass MongoDB den Schreibvorgang erst nach dem Festschreiben an das Journal bestätigt. Dies hat jedoch einen Nachteil – wenn Sie „j“:true mit getLastError angeben, wartet MongoDB intern etwa 1/3 des Journal-Commits, bevor es die Journaldaten festschreibt. Das standardmäßige Journal-Commit-Intervall beträgt 100 ms – MongoDB wartet also 30 ms und überträgt die Daten. Dies bedeutet im Wesentlichen, dass Sie in einem einzelnen Thread nur etwa 33,3 Schreibvorgänge/Sekunde erhalten können, und die empfohlene Best Practice besteht darin, Ihre Schreibvorgänge zu stapeln. Wenn Sie beispielsweise 50 Schreibvorgänge haben, verwenden Sie die Einstellung „j“:true nur für den letzten Schreibvorgang – dies bestätigt, dass alle vorherigen 50 Schreibvorgänge abgeschlossen sind.

Zusammenfassung

Jede MongoDB-Produktionsinstanz sollte mit aktiviertem Journaling ausgeführt werden. Wenn Sie Journaling nicht aktiviert haben und Ihr Server oder MongoDB-Prozess abstürzt, kann MongoDB die Datenintegrität nicht gewährleisten. Sie müssen einen „Reparatur“-Vorgang für die Datenbank ausführen, der je nach Datenmenge einige Stunden dauern kann. Schalten Sie es nur aus, wenn Sie wirklich wissen, was Sie tun. Bei ScaleGrid folgen alle unsere Instanzen der Best-Practice-Konfiguration von MongoDB und haben die Journalerstellung standardmäßig aktiviert.