2009-09-14 14 views
25

In passato ero solito creare WebAnalytics utilizzando cubi OLAP in esecuzione su MySQL. Ora un cubo OLAP il modo in cui l'ho usato è semplicemente un grande tavolo (ok, è stato memorizzato un po 'più intelligente di quello) dove ogni riga è fondamentalmente una misura o un insieme di misure aggregate. Ogni misura ha un mucchio di dimensioni (vale a dire quale nome di pagina, useragent, ip, ecc.) E un gruppo di valori (cioè quante visualizzazioni di pagina, quanti visitatori, ecc.).OLAP può essere eseguito in BigTable?

Le query che si esegue su un tavolo come questo sono in genere di forma (meta-SQL):

SELECT SUM(hits), SUM(bytes), 
FROM MyCube 
WHERE date='20090914' and pagename='Homepage' and browser!='googlebot' 
GROUP BY hour 

in modo da ottenere i totali per ogni ora del giorno selezionato con i filtri menzionati. Un inconveniente era che questi cubi di solito significavano una scansione completa della tabella (vari motivi) e questo significava una limitazione pratica alla dimensione (in MiB) si potevano fare queste cose.

Attualmente sto imparando i dettagli di Hadoop e simili.

L'esecuzione della query precedente come una mappa su un BigTable sembra abbastanza semplice: Basta fare 'ora' la chiave, filtrare nella mappa e ridurre sommando i valori.

È possibile eseguire una query come ho mostrato sopra (o almeno con lo stesso output) su un tipo di sistema BigTable in "tempo reale" (ovvero tramite un'interfaccia utente e l'utente ottiene la risposta ASAP) anziché il batch modalità?

In caso contrario; qual è la tecnologia appropriata per fare qualcosa di simile nel regno di BigTable/Hadoop/HBase/Hive e simili?

risposta

9

È persino stato fatto (tipo di).

motore di aggregazione/sintesi di LastFm: http://github.com/zohmg/zohmg

Una ricerca su Google alzato un progetto di codice di Google "mroll", ma non ha nulla, se non informazioni di contatto (nessun codice, niente). Tuttavia, potrebbe voler raggiungere quel ragazzo e vedere cosa succede. http://code.google.com/p/mroll/

+1

Grazie per la sugegstion zohmg. Secondo il loro sito web: "L'idea di base è precalcolare gli aggregati e archiviarli in modo efficiente in termini di lettura". La mia idea è di iniziare con un insieme di dati e aggregati in base alle esigenze degli utenti in quel momento. –

+0

Si desidera eseguire il preaggregamento in modo che per ciascuna combinazione univoca di dimensioni si abbia al massimo una riga; l'aggregazione in fase di esecuzione è quindi una questione di riavvolgimento della sezione trasversale appropriata del cubo. Zohmg può indicare la strada per te su come farlo. Conosco almeno una rete pubblicitaria che utilizza HyperTable o HBase per eseguire dashboard in tempo reale per i propri clienti, quindi è fattibile. – SquareCog

+3

Zohmg ora è abandonware. – rjha94

4

La mia risposta si riferisce a HBase, ma vale anche per BigTable.

Dirigente urbano open-sourced datacube, che penso sia vicino a quello che vuoi. Vedi il loro presentation qui.

Adobe ha anche un paio di presentazioni (here e here) su come eseguono "OLAP a bassa latenza" con HBase.

3

Se stai cercando un approccio da tavolo, hai considerato Google BigQuery? BigQuery esegue il ridimensionamento automatico sul lato posteriore che offre una risposta interattiva. C'è una buona sessione di Jordan Tigani dell'evento Google I/O del 2012 che spiega alcuni degli interni.

http://www.youtube.com/watch?v=QI8623HlYd4

Non è MapReduce ma è orientata verso tavolo ad alta velocità di scansione come quello che hai descritto.

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. –

Problemi correlati