La pregunta debe quedar clara por su título. Por ejemplo, Apache guarda sus registros de acceso y error en archivos en lugar de RDBMS, sin importar cuán grande o pequeña escala se esté utilizando.
Para RDMS solo tenemos que escribir consultas SQL y hará el trabajo, mientras que para los archivos debemos decidir un formato particular y luego escribir expresiones regulares o pueden ser analizadores para manipularlos. Y eso podría incluso fallar en circunstancias particulares si no se pagara mucho cuidado.
Sin embargo, todo el mundo parece preferir el sistema de archivos para mantener los registros. No estoy predispuesto contra ninguno de estos métodos, pero me gustaría saber por qué se practica así. ¿Es velocidad o mantenibilidad o algo más?
Respuestas:
Demasiadas cosas pueden fallar con la base de datos y registrar estas fallas también es importante.
A menos que tenga un sistema de base de datos que permita transacciones autónomas (o ninguna transacción en absoluto), el registro requeriría una conexión separada para que una reversión o confirmación en el registro no interfiera con la reversión o confirmación en la aplicación.
Muchas cosas que vale la pena registrar ocurren durante el inicio, es decir, posiblemente antes de que se haya establecido la conexión de la base de datos.
En lo que podría ser una configuración típica, se crea un nuevo archivo de registro todos los días, los archivos de registro antiguos se comprimen y se mantienen durante 2 semanas, antes de ser eliminados. No es fácil hacer lo mismo en un RDBMS.
fuente
DELETE FROM dbo.Log WHERE LogDate < today minus 2 weeks
He visto registros escritos en la base de datos antes (y a veces obtienes opciones configurables para el registro, donde el seguimiento va al archivo, errores en la base de datos, errores fatales en el registro de eventos de Windows).
Las razones principales son la velocidad y el tamaño, lo que permite un poco de rastreo puede producir vastas, vastas cualidades de registro: he rastreado a través de archivos de registro de gigabytes de tamaño. La otra razón principal es que la lectura de los registros debe ser secuencial, no hay necesidad real de consultar el registro, excepto para encontrar un cierto error o entrada, y encontrar en el archivo funciona perfectamente bien para eso.
fuente
La velocidad es una razón; otros son:
fuente
Antes que nada.
Las transacciones de la base de datos no pueden fallar cuando no tiene cuidado?
Escribir en un archivo de texto tiene varios beneficios, siendo el más importante
fuente
Usted plantea Apache específicamente, así que lo discutiré en detalle.
Apache se puede configurar para iniciar sesión en una base de datos, aunque requiere un complemento externo para hacerlo. El uso de dicho complemento puede facilitar el análisis de registros, pero solo si tiene la intención de escribir su propio software de análisis de registros. Los analizadores de registro estándar listos para usar asumen que sus registros están en archivos, por lo que no podrá utilizarlos.
Cuando estaba haciendo esto, también experimenté problemas de confiabilidad: si el búfer de escritura del servidor de la base de datos se llenó (lo que puede suceder con mysql si usa la cuota de su sistema de archivos para el usuario con el que se ejecuta) comienza a poner en cola las consultas hasta que puedan para continuar, en ese momento Apache comienza a esperar a que termine, lo que genera solicitudes bloqueadas en su sitio web.
(Este problema ahora puede solucionarse, por supuesto, fue hace muchos años que hice esto)
fuente
Un sistema de archivos es una base de datos. De hecho, es una base de datos jerárquica más simple en lugar de un DBMS relacional, pero no obstante es una base de datos.
La razón por la que iniciar sesión en un sistema de archivos es popular es porque los registros de texto encajan bien con la filosofía de Unix: "El texto es la interfaz universal".
Unix se había desarrollado con muchas herramientas de propósito general que pueden funcionar bien con registros de texto. No importa si los registros de texto son producidos por mysql, apache, su aplicación personalizada, software de terceros que no tiene soporte, el sysadmin puede usar herramientas estándar de Unix como grep, sed, awk, sort, uniq, cut, tail , etc., para rastrear los registros de todos modos.
Si cada aplicación inicia sesión en su propia base de datos, una en MySQL, otra en Postgres, otra en Elasticsearch, otra quiere iniciar sesión en ELK, otra solo puede iniciar sesión en MongoDB, entonces tendría que aprender veinte herramientas diferentes para rastrear los registros de cada solicitud. El texto es un medio universal en el que todos pueden iniciar sesión.
Incluso cuando logra hacer que todos los registros vayan a una sola base de datos, digamos MySQL, es posible que cada aplicación desee iniciar sesión con diferentes esquemas de tabla, por lo que aún tendría que escribir una herramienta personalizada para consultar los registros de cada uno. solicitud. Y si de alguna manera abarrotó todas las aplicaciones para iniciar sesión en un solo esquema, es probable que descubra que ese esquema genérico realmente no puede contarle la historia completa de cada aplicación, por lo que aún tiene que analizar los textos de registro de todos modos.
Iniciar sesión en una base de datos a menudo no facilita mucho las cosas en la práctica.
Iniciar sesión en una base de datos puede ser útil cuando tiene un análisis específico que tiene en mente, o para un requisito específico de retención de auditoría, para el cual puede diseñar un esquema de base de datos específico para recopilar solo los datos para esos fines específicos. Pero para el análisis forense y la depuración y cuando recopila registros sin un objetivo específico en mente, los registros de texto suelen ser lo suficientemente buenos como para que el costo de aprender o crear herramientas especializadas a menudo no valga la pena.
fuente
Veamos esto en algunas capas:
En breve:
Luego tenemos el enfoque basado en casos de uso:
¿Desea registrar errores específicos de nodo en un RDBMS escalado horizontalmente donde necesita tomar el trabajo adicional para encontrar el error de un nodo específico cuando simplemente puede abrir el capó para un nodo y verlo allí? Por otro lado, su aplicación posiblemente debería iniciar sesión en un RDBMS para recopilar avisos y errores a nivel de aplicación.
¿Qué sucede cuando el RDBMS necesita iniciar sesión por sí mismo porque no se puede escribir en la base de datos?
fuente
Complejidad. Agregar RDBMS aumentará la complejidad de todo el sistema astronómicamente. Y la capacidad de gestionar la complejidad es lo principal que distingue a los programadores de los productores de código fuente.
fuente
Velocidad.
fuente