La question devrait être claire de son titre. Par exemple, Apache enregistre ses accès et ses journaux d’erreurs dans des fichiers plutôt que dans un SGBDR, quelle que soit la taille de l’utilisation.
Pour RDMS, nous devons simplement écrire des requêtes SQL et le travail sera effectué, tandis que pour les fichiers, nous devons choisir un format particulier, puis écrire des expressions rationnelles ou des analyseurs syntaxiques pour les manipuler. Et ceux-ci pourraient même échouer dans des circonstances particulières si un grand soin n'était pas apporté.
Pourtant, tout le monde semble préférer le système de fichiers pour la maintenance des journaux. Je ne suis partisan d'aucune de ces méthodes, mais j'aimerais savoir pourquoi cela se pratique de la sorte. Est-ce la vitesse ou la maintenabilité ou autre chose?
Réponses:
Trop de choses peuvent échouer avec la base de données et la journalisation de ces échecs est également importante.
À moins que vous n'ayez un système de base de données autorisant des transactions autonomes (ou aucune transaction), la journalisation nécessiterait une connexion distincte afin qu'une annulation ou une validation dans la journalisation n'interfère pas avec l'annulation ou la validation dans l'application.
Beaucoup de choses qui méritent d'être enregistrées se produisent au démarrage, c'est-à-dire éventuellement avant que la connexion à la base de données ait été établie.
Dans ce qui pourrait être une configuration typique, un nouveau fichier journal est créé chaque jour, les anciens fichiers journaux sont compressés et conservés pendant 2 semaines, avant d'être finalement supprimés. Ce n'est pas facile de faire la même chose dans un SGBDR.
la source
DELETE FROM dbo.Log WHERE LogDate < today minus 2 weeks
J'ai déjà vu des journaux écrits dans la base de données (et vous obtenez parfois des options configurables pour la journalisation, où la trace est stockée dans un fichier, les erreurs dans la base de données, fatals dans le journal des événements Windows).
Les raisons principales sont la vitesse et la taille, permettant au traçage de produire de très grandes qualités de journalisation - j'ai parcouru les fichiers journaux en gigaoctets. L'autre raison principale est que la lecture des journaux doit être séquentielle, il n'est pas vraiment nécessaire d'interroger le journal, sauf pour rechercher une certaine erreur ou entrée - et la recherche dans le fichier fonctionne parfaitement pour cela.
la source
La vitesse est une des raisons; d'autres sont:
la source
Tout d'abord.
Les transactions de base de données ne peuvent pas échouer lorsque vous ne faites pas attention?
L'écriture dans un fichier texte présente de nombreux avantages, le plus important étant:
la source
Vous soulevez spécifiquement Apache, je vais donc en discuter en détail.
Apache peut être configuré pour se connecter à une base de données, bien que cela nécessite un plugin externe . L'utilisation d'un tel plug-in peut faciliter l'analyse des journaux, mais uniquement si vous avez l'intention d'écrire votre propre logiciel d'analyse des journaux. Les analyseurs de journaux standard disponibles supposent que vos journaux sont dans des fichiers, vous ne pourrez donc pas les utiliser.
Lorsque je faisais cela, j’ai également rencontré des problèmes de fiabilité: si le tampon d’écriture du serveur de base de données était saturé (ce qui peut arriver avec mysql si vous utilisez votre quota de système de fichiers pour l’utilisateur sous lequel il est exécuté), il commence à mettre en file d'attente les requêtes jusqu’à ce qu’ils soient capables. Pour commencer, Apache commence à attendre qu’elle se termine, ce qui entraîne des demandes bloquées sur votre site Web.
(Ce problème peut maintenant être corrigé, bien sûr - il y a de nombreuses années que je l'ai fait)
la source
Un système de fichiers est une base de données. C'est en effet une base de données hiérarchique plus simple au lieu d'un SGBD relationnel, mais c'est quand même une base de données.
La raison pour laquelle la connexion à un système de fichiers est populaire est que les journaux de texte sont parfaitement compatibles avec la philosophie Unix: "Le texte est l'interface universelle".
Unix avait développé de nombreux outils à usage général pouvant fonctionner avec les journaux de texte. Peu importe que les journaux de texte soient générés par mysql, apache, votre application personnalisée, un logiciel tiers qui est depuis longtemps sans support, l'administrateur système peut utiliser des outils Unix standard tels que grep, sed, awk, sort, uniq, cut, tail , etc., pour parcourir les journaux de la même manière.
Si chaque application se connecte à sa propre base de données, une à MySQL, une autre à Postgres, une autre à Elasticsearch, une autre souhaite se connecter à ELK, une autre ne peut se connecter qu'à MongoDB, il vous faudra alors apprendre vingt outils différents pour scruter les journaux de chaque application. Le texte est un support universel auquel tout le monde peut se connecter.
Même si vous parvenez à ce que tous les journaux soient placés dans une seule base de données, par exemple, MySQL, vous constaterez peut-être que chaque application voudra se connecter avec différents schémas de table, de sorte que vous devrez toujours écrire un outil personnalisé pour interroger les journaux de chaque. application. Et si vous avez en quelque sorte bourré toutes les applications pour vous connecter à un seul schéma, vous constaterez probablement que ce schéma générique ne peut pas vraiment vous donner l'historique complet de chaque application. Vous devez donc quand même analyser les textes du journal.
Se connecter à une base de données ne rend souvent pas les choses beaucoup plus faciles dans la pratique.
La connexion à une base de données peut être utile lorsque vous avez une analyse spécifique à l'esprit ou pour une exigence spécifique d'audit d'audit, pour laquelle vous pouvez concevoir un schéma de base de données spécifique pour collecter uniquement les données à ces fins spécifiques. Mais pour les analyses judiciaires et de débogage et lorsque vous collectez des journaux sans objectif spécifique, les journaux de texte sont généralement suffisamment bons pour que le coût d'apprentissage ou de création d'outils spécialisés n'en vaut souvent pas la peine.
la source
Regardons ceci sur quelques couches:
En bref:
Ensuite, nous avons l'approche par cas d'utilisation:
Voulez-vous consigner les erreurs spécifiques à un nœud dans un SGBDR à échelle horizontale dans lequel vous devez effectuer le travail supplémentaire pour rechercher l'erreur d'un nœud spécifique alors que vous pouvez simplement ouvrir le capot du nœud et le voir à cet endroit? D'autre part, votre application doit éventuellement se connecter à un SGBDR pour collecter les erreurs et les notifications au niveau de l'application.
Que se passe-t-il lorsque le SGBDR doit se connecter lui-même, car la base de données ne peut pas être écrite?
la source
Complexité. L'ajout de SGBDR augmentera la complexité de l'ensemble du système de manière astronomique. Et la capacité à gérer la complexité est la principale caractéristique qui distingue les programmeurs des producteurs de code source.
la source
La vitesse.
la source