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 BY
para 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.