Data Store Design per Aggregazione dati NxN

1

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:

  1. Location
  2. Date
  3. Time
  4. Name
  5. 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:

  1. 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?
  2. 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.

    
posta gimg1 25.09.2015 - 02:26
fonte

0 risposte