Comprendre la journalisation dans MongoDB

Le blog donne un bref sur la journalisation dans MongoDB



Utilisation de l'opération d'écriture Mongod

Mongod héberge principalement les opérations d'écriture en mémoire en vue partagée. Il est appelé partagé car il a un mappage de mémoire sur le disque réel.



Par exemple, le fichier de données de l’utilisateur est conservé au niveau des données dd et possède un mappage de mémoire. Ici, il pousse d'abord toutes les données en mémoire et après un intervalle spécifié, il clignote les données en mémoire, ce qui se produit toutes les soixante secondes et l'utilisateur n'est pas affecté dans ce processus.

Ici, ce processus est appelé l'option Pas de journal, ce qui signifie que dans le cas où il y a un délai de 60 secondes pour enregistrer les données de la mémoire sur le disque ou un arrêt brutal, cela signifie que les données en mémoire ne peuvent pas être récupérées. Ainsi, la journalisation devient pertinente ici.



Fonction de tri c ++

Il est important de savoir que la journalisation était désactivée par défaut avant la version 2.4.10, mais après cela, elle a été activée.

Au moment où le processus mongod démarre, la déclaration suivante peut être observée:

Journal dir = D: Rana2custom datajournal



Ici, Journal Directory est un répertoire enfant dans le répertoire de données et est activé par défaut.

Qu'est-ce que la journalisation dans MongoDB?

Dans ce processus, une opération d'écriture se produit dans mongod, qui crée ensuite des modifications dans la vue privée. Le premier bloc est la mémoire et le deuxième bloc est «mon disque». Après un intervalle spécifié, appelé «intervalle de validation du journal», la vue privée écrit ces opérations dans le répertoire du journal (résidant sur le disque).

Une fois la validation du journal effectuée, mongod pousse les données dans une vue partagée. Dans le cadre du processus, il est écrit dans le répertoire de données réel à partir de la vue partagée (car ce processus se déroule en arrière-plan). L'avantage de base est que nous avons un cycle réduit de 60 secondes à 200 millisecondes.

Dans un scénario où une interruption se produit à tout moment ou un disque flash reste indisponible pendant les 59 dernières secondes (en gardant à l'esprit les données existantes dans le répertoire du journal / les opérations d'écriture), puis au prochain démarrage de mongod, il rejoue essentiellement toutes les opérations d'écriture enregistre et écrit dans le répertoire de données réel.

Comment ça fonctionne?

Ici, une fois qu'un commit se produit, la même opération est rejouée en vue partagée puis, après soixante secondes, le disque flash se produit.

Après avoir flashé, les données sont traitées. Les données ici sont marquées comme traitées dans le répertoire du journal, ce qui signifie que toutes les soixante secondes, il vérifie les données qu'il a copiées et celles qui sont censées être supprimées du journal.

L'utilisation de la journalisation est comme l'utilisation d'un journal, la raison en est qu'elle crée un journal des opérations d'écriture pour augmenter la durabilité. La journalisation est un stockage temporaire, ce qui signifie qu'elle ne conserve que le journal des opérations d'écriture comme en attente dans le répertoire journal. En outre, la vue partagée contient les données, mais le répertoire du journal contient les opérations.

Par exemple, si l'utilisateur écrit des données sans journalisation, quelles que soient les données écrites, son mappage de mémoire permet à l'utilisateur de connaître l'emplacement où les données sont écrites.

Lien entre la vue privée et la vue partagée

Une fois la validation effectuée, elle est marquée comme un processus dans le répertoire du journal et un autre mappage est effectué pour la vue actuelle de la vue partagée / privée (sans partage de données).

Dans le tableau, tous les éléments bleus sont dans la RAM (mémoire vive) et le safran désigne le disque.

Si dans le cas, les données ne sont pas flashées dans le répertoire de données mais que les opérations d'écriture sont là dans le répertoire de données, alors mongod retraitera et appliquera les opérations d'écriture dans le répertoire de données.

Un point important à noter est que dans un scénario où un crash se produit avant la validation du journal, les données qui étaientajoutédans les 200 millisecondes seront perdues.

surcharge de fonction en c ++

Notez également que dans le répertoire journal, nous continuons à écrire l'opération réelle.

Dans l'exemple d'instruction, comme «Db.class.insert» qui est une opération d'insertion, les données sont insérées dans les opérations de classe. Ainsi, l'opération de classe ne reste pas réellement mais l'opération réside.

Il faut également noter que s'il y a un retard dans l'utilisation du journal, cela a un impact sur les performances.

On peut également avoir la journalisation en arrière-plan en tant que processus asynchrone et ne rien faire dans les opérations de manière synchrone. La journalisation est également recommandée en production.

Deuxièmement, l'intervalle de temps d'intervalle de validation de journal de `` 200 millisecondes '' est configurable, ce qui peut être activé avec `` - - intervalle de validation de journal '' entre 3 et 300 millisecondes, tout dépend des exigences non fonctionnelles (à quelle fréquence les écritures se produisent et à quelle fréquence on veut écrire dans le répertoire du journal). Dans le cas où des opérations d'écriture lourdes sont en cours, il est conseillé d'avoir moins de millisecondes.

Notez également que la vue privée contient les données réelles, car la vue privée est mappée avec la vue partagée. La vue partagée ici le fait clignoter dans le répertoire de données.

Dans ce processus, l'avantage que nous gagnons est que, au cas où nous aurions des plantages de serveur et qu'il n'y aurait pas de données disponibles qui doivent être écrites sur les flashs, le prochain redémarrage du serveur mongod vérifiera le répertoire du journal pour la récupération. Il récupérera, rejouera et écrira les opérations dans le répertoire de données, puis il démarre.

Vous avez une question pour nous? Mentionnez-les dans la section commentaires et nous vous recontacterons.

Articles Similaires:

comment exécuter atom python