MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Devriez-vous activer la journalisation MongoDB ?

MongoDB utilise un journal sur disque pour garantir les opérations d'écriture et fournir une résistance aux pannes. MongoDB crée également un journal pour chaque écriture qui inclut l'emplacement exact du disque et les octets qui ont changé lors de l'écriture. Ainsi, en cas de plantage du serveur, le journal peut être utilisé pour rejouer toutes les écritures qui n'ont pas encore été écrites dans les fichiers de données.

MongoDB utilise des fichiers mappés en mémoire pour écrire vos données sur le disque. Par défaut, les fichiers de données MongoDB sont vidés sur le disque toutes les 60 secondes. Ils utilisent également des fichiers mappés en mémoire pour le journal et, par défaut, le journal est vidé sur le disque toutes les 100 ms. Étant donné que les fichiers de données finaux sont vidés sur le disque toutes les 60 secondes, le journal n'a pas besoin de suivre les écritures pendant plus d'une minute. Pour plus de détails sur les mécanismes de journalisation, reportez-vous à la documentation officielle. Pour comprendre plus en détail le fonctionnement du mappage de vues, vous pouvez consulter le blog de Kristina.

Problème d'écriture de journalisation

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

Lorsque vous activez la journalisation MongoDB, vous avez également la possibilité de spécifier un problème d'écriture dans MongoDB de "Journalisé" pour vos opérations MongoDB. Cela implique que MongoDB ne confirme l'opération d'écriture qu'après s'être engagé dans le journal. Cependant, cela présente un inconvénient - lorsque vous spécifiez "j":true avec getLastError, MongoDB attendra environ 1/3 de la validation interne du journal avant de valider les données du journal. L'intervalle de validation du journal par défaut est de 100 ms. MongoDB attendra donc 30 ms et validera les données. Cela signifie essentiellement que sur un seul thread, vous ne pouvez obtenir qu'environ 33,3 écritures/seconde, et la meilleure pratique recommandée consiste à grouper vos écritures. Par exemple, si vous avez 50 écritures, utilisez le paramètre "j":true uniquement sur la dernière écriture - cela reconnaîtra que toutes les 50 écritures précédentes ont été effectuées.

Résumé

Chaque instance MongoDB de production doit s'exécuter avec la journalisation activée. Si la journalisation n'est pas activée et que votre serveur ou votre processus MongoDB tombe en panne, MongoDB ne pourra pas garantir l'intégrité des données. Vous devrez exécuter une opération de "réparation" sur la base de données, ce qui, selon la quantité de données, peut prendre quelques heures. Désactivez-le uniquement si vous savez vraiment ce que vous faites. Chez ScaleGrid, toutes nos instances suivent la configuration des meilleures pratiques MongoDB et la journalisation est activée par défaut.