2010-06-28 9 views
6

Sto cercando di contare il numero di utenti unici al giorno sulla mia app app di java. Ho deciso di utilizzare il framework mapreduce (mapreduce.appspot.com) per java appengine per eseguire questo calcolo offline. Sono riuscito a creare una mappa per ridurre il lavoro che passa attraverso tutte le mie entità che rappresentano un singolo evento di sessione degli utenti. Posso usare anche un semplice contatore. Ho alcune domande però:Conteggio utenti unici utilizzando Mapreduce per Java Appengine

1) Come faccio ad incrementare un contatore solo una volta per ogni ID utente? Attualmente sto mappando su entità che contengono una proprietà ID utente ma molte di queste entità potrebbero contenere lo stesso ID utente, quindi come faccio a contarle una sola volta?

2) Una volta ottenuti questi risultati del lavoro in questi contatori, come posso mantenerli nell'archivio dati? Vedo i risultati dei contatori sulla pagina di stato di mapreduce, ma voglio che questi risultati siano permanentemente salvati sul datastore.

Idee?

risposta

1

Non ho ancora utilizzato la funzionalità MapReduce, ma la mia comprensione teorica è che è possibile scrivere le cose nell'archivio dati dal proprio mappatore. Potresti creare un tipo di entità chiamato qualcosa come UniqueCount e inserire un'entità ogni volta che il tuo mappatore vede un ID che non ha mai visto prima. allora puoi contare quanti ID unici hai. In effetti, puoi aggiornare un contatore ogni volta che trovi una nuova entità unica. Si consiglia di google "contatore di sharded" per suggerimenti sulla creazione di un contatore nel datastore in grado di gestire un throughput elevato.

Alla fine, quando completano la funzionalità Riduci, immagino che tutto questo compito diventerà piuttosto banale.

+0

"ogni volta che trovi un'entità unica" - come fai a sapere se l'entità che stai guardando (attualmente la mappatura) è quella che hai visto prima? – aloo

+0

Supponiamo che al tuo mappatore sia stata assegnata l'entità con userid ABC123. la prima cosa che farai è verificare se esiste un'entità UniqueCount per ABC123. Se c'è, sai di averlo già spiegato e non farai nulla. In caso contrario, verrà creata un'entità UniqueCount per ABC123. Dopo averlo fatto per tutte le tue entità, avrai esattamente un'entità UniqueCount per ogni utente. È quindi possibile eseguire un conteggio più diretto delle sole entità di UniqueCount. –

+0

Ah, quindi questo implica la creazione di un altro tipo di Entità nel datastore ... e l'esecuzione di due passaggi. Sembra ragionevole ma speravo in una soluzione più semplice – aloo

Problemi correlati