Il mio servizio ha un gran numero di eventi utente in corso e vorremmo fare cose come "contare l'occorrenza del tipo di evento T dalla data D ".
Stiamo cercando di prendere due decisioni di base:
Cosa conservare? Memorizzare ogni evento anziché solo gli aggregati
- (Stile registro eventi) registra ogni evento e contali in seguito, contro
- (Stile serie storica) memorizza un singolo "conteggio dell'evento E per la data D " aggregato per ogni giorno
Dove conservare i dati
- In un database relazionale (in particolare MySQL)
- In un database non relazionale (NoSQL)
- In file di registro flat (raccolti centralmente sulla rete tramite
syslog-ng
)
Che cos'è la pratica standard / dove posso leggere di più sul confronto tra i diversi tipi di sistemi?
Dettagli aggiuntivi:
- Il flusso totale di eventi è ampio, potenzialmente centinaia di migliaia di voci al giorno
- Ma la nostra attuale necessità è solo quella di contare determinati tipi di eventi al suo interno
- Non abbiamo necessariamente bisogno dell'accesso in tempo reale ai dati grezzi o ai risultati di aggregazione
IMHO, "registra tutti gli eventi in file, esegui la ricerca per indicizzazione in un secondo momento per filtrare e aggregare il flusso" è un modo UNIX piuttosto standard, ma i miei compatrioti di Rails-y sembrano pensare che nulla sia reale a meno che non sia in MySQL.
SELECT...GROUP BY
, può facilmente memorizzare i risultati di SELECT
s), 2) usare Graphite per una semplice aggregazione e visualizzazione su larga scala, e 3) registrazione di eventi completi per riferimento e per la visualizzazione dei dettagli del flusso di dati in tempo reale. Ognuno è stato effettivamente prezioso in diversi modi.