Mi servicio tiene una gran cantidad de eventos de usuarios en curso, y nos gustaría hacer cosas como "contar la ocurrencia de eventos tipo T desde la fecha D ".
Estamos tratando de tomar dos decisiones básicas:
¿Qué almacenar? Almacenar cada evento versus solo almacenar agregados
- (Estilo de registro de eventos) registre cada evento y cuéntelos más tarde, vs.
- (Estilo de serie temporal) almacena un único "recuento del evento E para la fecha D " para cada día
Donde almacenar los datos
- En una base de datos relacional (particularmente MySQL)
- En una base de datos no relacional (NoSQL)
- En archivos de registro planos (recopilados centralmente a través de la red a través de
syslog-ng
)
¿Qué es la práctica estándar / dónde puedo leer más sobre la comparación de los diferentes tipos de sistemas?
Detalles adicionales:
- El flujo total de eventos es grande, potencialmente cientos de miles de entradas por día.
- Pero nuestra necesidad actual es solo contar ciertos tipos de eventos dentro de ella
- No necesariamente necesitamos acceso en tiempo real a los datos sin procesar o resultados de agregación
En mi humilde opinión, "registrar todos los eventos en archivos, rastrearlos más tarde para filtrar y agregar la secuencia" es una forma bastante estándar de UNIX, pero mis compatriotas Rails-y parecen pensar que nada es real a menos que esté en MySQL.
SELECT...GROUP BY
, puede almacenar fácilmente los resultados de SELECT
s), 2) usar Graphite para una agregación y visualización simple a gran escala, y 3) registrar eventos completos como referencia y para ver detalles del flujo de datos en tiempo real. Cada uno ha sido valioso de diferentes maneras.