2010-06-22 17 views
8

¿Existe alguna razón por la cual la mayoría de los registros parecen estar en texto plano, en lugar de estar en un tipo de MySQL/otro tipo de base de datos?usando una base de datos para iniciar sesión

Me parece que ponerlos en una base de datos haría que el análisis mucho, mucho más fácil ... pero ¿eso vendría en el sacrificio de la velocidad o algo más?

(no soy tan preocupados con la portabilidad, y, obviamente, tendría registros de texto para su conexión a la base de datos.)

Respuesta

13

puedo pensar en dos grandes razones:

En primer lugar, las bases de datos son más lentos que archivos de texto cuando se trata simplemente de agregar información a un archivo. Con una base de datos, debe establecer una conexión, transmitir datos a través de la red, almacenarlos en una estructura indexada, etc. Con un archivo, solo necesita escribir el error en el disco local.

En segundo lugar, a veces las cosas que desea registrar pertenecen a la base de datos que se rompe. Si el disco local está roto, tienes problemas mayores que tratar de generar archivos de registro. Pero puede registrar interrupciones de la base de datos incluso cuando todo lo demás está funcionando.

Dicho esto, hay muchas situaciones en las que la información que deseo registrar solo es relevante cuando la aplicación funciona correctamente y cuando ya tengo una conexión de base de datos. En esos casos, me registro directamente a MySQL.

4

Aunque no le preocupa la portabilidad, creo que esa es una gran parte de la razón. File I/O es casi universal y con una API extremadamente consistente. Otras ventajas incluyen:

  • Menos partes móviles
  • nada que instalar
  • baja habilidad barrera
  • velocidad
  • conjunto maduro de herramientas para el registro, el análisis, la gestión
  • no dependen de la red (suponiendo que el disco local y no NFS u otro almacenamiento remoto)
  • Fiabilidad
  • Todavía puede poner estos en una base de datos para informes/análisis
  • grep es su amigo
  • No hay que preocuparse por el archivo de inyección SQL (bueno para almacenar los datos, no necesariamente para informarlo o la posterior carga de DB).

Dicho esto, no hay nada de malo en iniciar sesión en un DB si la naturaleza de la aplicación se presta a eso y he visto muchas aplicaciones que lo hacen.

1

Las bases de datos contienen una sobrecarga significativa en términos de memoria, espacio de almacenamiento y eficiencia. Agregar nuevos registros a una base de datos o modificar los registros existentes es mucho más lento. (Además, muchos no están familiarizados con SQL y/o los detalles de la configuración de una base de datos.)

Sin embargo, si necesita análisis o capacidades de evaluación métrica que son difíciles de obtener a través de un simple archivo de texto, entonces ciertamente nada de malo con eso. Es una situación mucho caso por caso.

1

(Otros ya han señalado una serie de ventajas con respecto al registro basado en archivos.)

Creo que el registro de DB se vuelve más útil cuando se recopilan registros en una máquina remota (por ejemplo, a través de syslog/rsyslog en Linux), para respaldo: esto puede ser útil si la máquina original está comprometida y sus registros modificados. La recopilación de registros en una base de datos (quizás particularmente en la máquina remota) es útil en este caso, ya que puede ayudar a clasificar esos registros. También puede navegar por los registros de manera más conveniente a través de herramientas como phpLogCon, o navegar por ellas usando páginas web personalizadas (a menudo es más fácil que iniciar sesión en la máquina si solo está haciendo un monitoreo ocasional).

Dicho esto, el registro remoto, el inicio de sesión en un DB y tener una buena herramienta para navegar por los registros son bastante independientes (creo que phpLogCon también puede funcionar con registros de archivos). Si almaceno registros en un DB, también almaceno registros en un archivo al mismo tiempo, aunque solo sea para poder leer cuando la conexión a la base de datos esté inactiva.

1

Es importante tener en cuenta que no hay ninguna razón para no poder registrar registros en un archivo (que, como otros señalaron, es muy rápido, eficiente y sólido) y luego descargar los datos en una base de datos (probablemente en alguna otra máquina) para realizar un análisis que se acelerará al tener características de base de datos típicas. Esto es posible, por supuesto, ya que los datos de registro generalmente no necesitan procesarse inmediatamente, por lo que tiene sentido diferir todos los gastos generales y la fragilidad de una base de datos hasta que se necesite.

2

Históricamente, las bases de datos eran caras, y ciertamente nunca querría perder sus preciosas licencias de base de datos en los registros. Sin embargo, las bases de datos de hoy son relativamente baratas y también lo es el procesamiento. Usar una base de datos para registros probablemente no te matará financieramente.

La ventaja de un archivo de registro es que usted sigue escribiendo hasta el final. Esa es una operación relativamente eficiente en comparación con el uso de un servidor de base de datos.

La ventaja de una base de datos es que puede estructurar sus datos de registro en relaciones de datos, que luego pueden analizarse mediante SQL. Esto puede proporcionarle una gran idea del funcionamiento de su software.

Puede obtener lo mejor de ambos mundos utilizando SQLite como su base de datos de registro. SQLite es una biblioteca con un motor SQL que enlaza con su programa. En lugar de fopen/fwrite/fclose, usa la API de SQLite para abrir la base de datos, ejecutar SQL y cerrar la base de datos. No hay servidor de base de datos porque las operaciones del motor SQLite se ejecutan en el proceso de su aplicación ... al igual que fopen/fwrite/fclose. Una vez que capture sus datos en una base de datos SQLite (todo almacenado en un archivo simple), puede usar SQL para analizar sus datos de registro. Consulte http://www.squidoo.com/sqlitehammer#module5800826 para ver un ejemplo.

-------- EDITAR de agosto de 2010 ------------

Los desarrolladores de SQLite han puesto en marcha el registro de writeahead como SQLite version 3.7.0. Esto permite escrituras mucho más rápidas. Consulte this video para más detalles. Con una escritura más rápida, SQLite es aún más útil como base de datos de registro.

+0

Hay un "pequeño" problema con esta sugerencia: SQLite no admite el acceso simultáneo de lectura/escritura, lo que significa que no podrá ver el archivo de registro en tiempo real ... lo cual es una gran desventaja en mi humilde opinión. Liron –

+1

@Liron Levi - Con la versión 3.7.0, y el registro de escritura anticipada habilitado, podrá ver el archivo de registro en tiempo real porque un escritor no bloquea los lectores. –

Cuestiones relacionadas