¿Iniciar sesión en el archivo o en la tabla de la base de datos?

12

Estoy desarrollando una aplicación web que utiliza MS SQL para diversos datos: incluidos usuarios, cuentas de usuario, licencias de usuario, precios de licencia, facturas.

Necesito registrar el uso del sistema en tiempo real de los usuarios y usarlo para la facturación mensual: por ejemplo, iniciar sesión cada vez que un usuario obtiene una página / URL específica y facturar a los usuarios al final del mes en función de la cantidad de páginas que obtuvieron.

  • ¿Debo escribir estos eventos de registro en una tabla en mi base de datos MS SQL?

  • ¿Debo escribir estos eventos de registro en un archivo de registro de solo agregado no SQL?

  • ¿Debo escribir estos eventos de registro en un archivo de registro diferente para cada usuario?

Este no es un sitio web de gran volumen: por ejemplo, un máximo de 10,000 usuarios cada uno haciendo un promedio de 5 eventos registrables / día => 50,000 eventos / día = 30 eventos / minuto = 18,000,000 eventos / año.

Lo pregunto porque cualquiera de las opciones parece viable y no veo si una tiene una clara ventaja.

Los datos asociados con un evento facturable son simples, por ejemplo:

  • ID de usuario (relación de clave externa con la tabla Usuarios en SQL)
  • Fecha y hora
  • URL de la página facturable

Mi propia respuesta a esta pregunta es la siguiente:

  • Algunos beneficios de escribir el registro en una tabla de base de datos:

    • Integridad relacional: por ejemplo, los eventos registrados están asociados con ID de usuario válidos (definiendo la ID de usuario como una clave externa entre las tablas)
    • Fácil de leer para la facturación: por ejemplo, SELECT COUNT GROUP BYpara obtener un recuento de la cantidad de eventos de registro por usuario
  • Algunos beneficios de escribir en el archivo de registro:

    • Rendimiento más fácil: SQL se usa con menos frecuencia, por ejemplo, solo para eventos de inicio de sesión de usuario, y principalmente solo para lectura
    • Gestión más fácil: es más fácil archivar datos antiguos, por ejemplo, al final del año, moviendo archivos de registro antiguos en lugar de eliminar / archivar de la base de datos

Avíseme si mi respuesta es incorrecta; o exagera la importancia de algo; o ha olvidado alguna consideración importante.

Y / o por favor, hágame saber cuál es su respuesta, si es diferente a la mía.

ChrisW
fuente
3
Debe separar la información utilizada para tomar decisiones comerciales de la información de registro general. Almacene todo lo que luego será utilizado por su aplicación en la base de datos, el resto en los archivos de registro.
tom
1
Si está utilizando un paquete conocido como log4net, y probablemente sería una buena idea en lugar de crear uno propio, debería ser solo cuestión de cambiar la configuración. @tom: la separación es agradable, pero ¿por qué no simplemente tener dos bases de datos, una para datos en vivo y otra para archivar registros, etc.?
Julia Hayward
2
El OP dice que es para la facturación mensual, por lo que esperaba que aplicar la lógica de facturación a una base de datos fuera mucho más fácil que los archivos planos.
Julia Hayward
1
Usaste el término "SQL" cuando te referías a "base de datos". Hice algunas correcciones. SQL es un lenguaje que usa para leer y escribir en bases de datos. MS SQL Server es el nombre de un RDBMS. "SQL" por sí solo no significa "base de datos MS SQL Server".
Tulains Córdova
1
@gnat No creo que esto sea un duplicado: el otro fue sobre el registro de errores, mientras que se trata del registro del uso para la facturación (y en este caso la respuesta aceptada y votada fue usar un RDBMS).
ChrisW

Respuestas:

13

Dado que está utilizando esta información para fines de facturación, no veo por qué no la quiere en la base de datos, donde se puede consultar, agregar, informar y unir fácilmente a otros datos.

También creo que es mucho más fácil mantener una sola tabla de base de datos que contenga la información de registro que un montón de archivos de registro separados. Lo mismo ocurre con su preocupación por la carga en el servidor: hay formas mucho mejores de lidiar con eso que recurrir a mantener los datos en archivos planos.

Su tercera opción, por cierto, es hacer ambas cosas. Use la base de datos para la mayoría de las necesidades, pero tenga el archivo de registro para fines de auditoría.

Gran maestro B
fuente
3
Otra ventaja de usar una base de datos es utilizar disparadores para ciertos registros. Ningún código adicional sería necesario. Si los datos se insertan en la tabla A, inserte el mensaje de registro X.
Greg Burghardt