Quali database di serie temporali possono supportare un'elevata cardinalità?

3

Ho una situazione in cui voglio tenere traccia delle visualizzazioni di pagina, fare clic sugli eventi, ecc. in un database di serie temporali, ma ho problemi di scalabilità nel caso in cui voglio recuperare gruppi aggregati di dati con cardinalità molto elevata.

I problemi che sto cercando di risolvere sono:

Quali sono i principali referrer N in un determinato intervallo di tempo?

Quante visualizzazioni ha un URL per ogni URL in un determinato intervallo di tempo?

Quante visualizzazioni hanno URL specifici per tutto il tempo?

Lo schema che ho finora è:

timestamp - Ora dell'evento

domain - L'URL di base per il record

uri - La risorsa univoca. Vorrebbe contare i conteggi raggruppati di questi (milioni di valori possibili)

referrer - il referrer HTTP. Conteggi raggruppati anche di questi (milioni di valori possibili)

event - Il tipo di evento

Finora ho provato a utilizzare InfluxDB, ma ho scoperto problemi dovuti alla mera quantità di valori possibili per uri e referrer . Sebbene io stia effettuando la scansione solo per un record entro un intervallo di tempo limitato, il raggruppamento per milioni di valori possibili rende tutto molto più difficile. Quali altre opzioni devo memorizzare i dati che supportano entrambi i requisiti di scrittura / query?

    
posta AnonymousCoward 25.10.2017 - 23:28
fonte

2 risposte

5

L'esecuzione di query complesse in tempo reale su dati di grandi serie temporali non è scalabile. Mette un carico irragionevole sul tuo negozio e non funzionerà bene indipendentemente dal database utilizzato. L'unica volta che dovresti interrogare il tuo database delle serie temporali direttamente è quando vuoi esaminare singoli eventi (ad esempio una tabella di eventi o guardare una singola voce di registro).

Dovresti indicizzare i tuoi dati in modo che sia scalabile per eseguire una query. Ad esempio, puoi aggregare le visualizzazioni per un periodo di tempo (minuti, ore, giorni, settimane) o raggruppate in base ad un'altra metrica ( referrer , event type o domain ), quindi quando devi eseguire una query per le visualizzazioni di una data entità per un mese, stai interrogando centinaia di righe, non milioni.

L'indice può essere memorizzato dove vuoi (ad es. abbiamo memorizzato il nostro in un database relazionale) perché il carico e la dimensione dei dati dovrebbero essere molto più piccoli. È possibile creare l'indice mediante una pipeline di analisi del flusso o periodicamente mediante un processo batch. L'utilizzo dell'analitica di streaming significa che i dati saranno (quasi) immediatamente disponibili per l'interrogazione, ma sarà probabilmente più complesso farlo correttamente. L'elaborazione batch avrà una certa latenza prima che i dati siano interrogabili, ma è più facile da implementare (di solito solo un processo cron eseguito periodicamente e indicizza i dati più recenti). Per un framework di analisi del flusso, controlla Apache Streaming di streaming . Per l'elaborazione in batch, Apache Spark è una scelta popolare.

    
risposta data 26.10.2017 - 00:17
fonte
-1

Potresti provare Druid, è abbastanza veloce per le query ad hoc link

    
risposta data 16.05.2018 - 08:55
fonte

Leggi altre domande sui tag