Sto cercando di trovare una soluzione teorica a un problema NxN per l'aggregazione e l'archiviazione dei dati. Ad esempio, ho un'enorme quantità di dati che arriva attraverso uno stream. Il flusso invia i dati in punti. Ogni punto ha 5 dimensioni:
- Location
- Date
- Time
- Name
- Statistics
Quindi questi dati devono essere aggregati e archiviati per consentire a un altro utente di arrivare e interrogare i dati sia per la posizione che per l'ora. L'utente dovrebbe essere in grado di eseguire una query simile alla seguente (pseudo-codice):
Show me aggregated statistics for Location 1,2,3,4,....N between Dates 01/01/2011 and 01/03/2011 between times 11am and 4pm
Sfortunatamente, a causa della scala dei dati, non è possibile aggregare tutti questi dati dai punti al volo e quindi è necessario eseguire l'aggregazione prima di questo. Come puoi vedere, ci sono più dimensioni su cui è possibile aggregare i dati.
Possono eseguire query per qualsiasi numero di giorni o posizioni e quindi trovare tutte le combinazioni richiederebbe un'enorme pre-aggregazione:
- Record for Locations 1 Today
- Record for Locations 1,2 Today
- Record for Locations 1,3 Today
- Record for Locations 1,2,3 Today
- etc... up to N
La pre-elaborazione di tutte queste combinazioni prima dell'interrogazione potrebbe comportare una quantità di precessione che non è fattibile. Se disponiamo di 200 posizioni diverse, abbiamo 2 ^ 200 combinazioni che sarebbe praticamente impossibile precompilare in un ragionevole lasso di tempo.
Ho pensato di creare record su 1 dimensione e quindi l'unione potrebbe essere eseguita al volo quando richiesto, ma ci vorrebbe anche del tempo su scala.
Domande:
- Come devo scegliere la giusta dimensione e / o combinazione di dimensioni, dato che l'utente ha la probabilità di eseguire query su tutte le dimensioni?
- Ci sono studi di casi a cui potrei fare riferimento, libri che potrei leggere o qualsiasi altra cosa tu possa pensare che sarebbe di aiuto?
Grazie per il tuo tempo.
EDIT 1
Quando dico aggregando i dati insieme, intendo combinare le statistiche e il nome (dimensioni 4 e 5) per le altre dimensioni. Quindi, ad esempio, se richiedo i dati per le posizioni 1,2,3,4..N, allora devo unire le statistiche e i conteggi del nome insieme per quelle N Posizioni prima di servirle all'utente.
Allo stesso modo se richiedo i dati per le date 01/01/2015 - 01/12/2015, allora devo aggregare tutti i dati tra quei periodi (aggiungendo il nome / le statistiche di somma).
Infine, se chiedo dati tra le date 01/01/2015 - 01/12/2015 per le posizioni 1,2,3,4..N, allora devo aggregare tutti i dati tra quelle date per tutte quelle località.
Per amore di questo esempio, diciamo che passare attraverso le statistiche richiede una sorta di ciclo annidato e non si adatta bene, soprattutto al volo.