Mon service a un grand nombre d'événements utilisateur en cours, et nous aimerions faire des choses comme «compter l'occurrence du type d'événement T depuis la date D ».
Nous essayons de prendre deux décisions fondamentales:
Que stocker? Stockage de chaque événement vs stockage uniquement des agrégats
- (Style de journal des événements) enregistrez chaque événement et comptez-les plus tard, par rapport à
- (Style série chronologique) stocke un "nombre d'événements E agrégé pour la date D " pour chaque jour
Où stocker les données
- Dans une base de données relationnelle (notamment MySQL)
- Dans une base de données non relationnelle (NoSQL)
- Dans des fichiers journaux plats (collectés de manière centralisée sur le réseau via
syslog-ng
)
Quelle est la pratique standard / où puis-je en savoir plus sur la comparaison des différents types de systèmes?
Détails supplémentaires:
- Le flux d'événements total est important, potentiellement des centaines de milliers d'entrées par jour
- Mais notre besoin actuel est seulement de compter certains types d'événements en son sein
- Nous n'avons pas nécessairement besoin d'un accès en temps réel aux données brutes ou aux résultats d'agrégation
À mon humble avis, "consigner tous les événements dans des fichiers, les analyser ultérieurement pour filtrer et agréger le flux" est une méthode UNIX assez standard, mais mes compatriotes Rails-y semblent penser que rien n'est réel à moins qu'il ne soit dans MySQL.
SELECT...GROUP BY
, peut facilement stocker les résultats de SELECT
s), 2) utilise Graphite pour une agrégation et une visualisation à grande échelle simples, et 3) journalisation des événements complets pour référence et pour regarder les détails du flux de données en temps réel. Chacun a en fait été utile de différentes manières.