2010-03-10 27 views
6

Dove memorizza i log di Google quando si esegue un'istruzione di registrazione? Le dichiarazioni di log sembrano essere piuttosto veloci, quindi non sembra che siano archiviate nel datastore.Come funzionano esattamente i registri di Google App Engine?

Quanto sono affidabili i log? Se faccio una dichiarazione di registrazione e ci riesce, è praticamente garantito che verrà visualizzato nei log?

Quanto è memorizzata la cronologia passata dei registri?

Il motivo per cui sono interessato a questo è perché sto creando un sito Web di domande e risposte e desidero tenere traccia delle visualizzazioni di ciascun utente connesso unico per ogni domanda e visualizzare il numero di visualizzazioni sulla domanda pagina. Pertanto, se 10 utenti diversi visitano la pagina delle domande 100 volte, contano comunque solo 10 visualizzazioni uniche.

Ho un computer fuori sede che esegue l'elaborazione in background per la mia app. Sto pianificando di fare in modo che questo computer fuori sede scarichi i registri ogni 30 minuti e calcoli quello che dovrebbe essere il conteggio delle visualizzazioni per ogni domanda basata sui log. In questo modo, non è necessario creare un'entità datastore per ogni domanda diversa vista da ciascun utente.

Cosa ne pensate? Qualcuno vede qualche problema con questo?

EDIT: Credo che la mia preoccupazione principale sia l'affidabilità dei registri.

risposta

5

Questa non è una risposta alla tua domanda - piuttosto, è una risposta al problema che stai cercando di risolvere.

Se si ha familiarità con Bloom Filters e utilizzando Memcached's incr (o un sharded datastore counter) è possibile creare una soluzione che è "abbastanza buono". È possibile utilizzare un filtro Bloom per verificare se un valore è nel set (in questo caso, un ID utente) e, in caso contrario, incrementare il contatore e aggiungere il valore al filtro. Una delle proprietà di Bloom Filters è che l'aggiunta di un valore al set a cui fare riferimento per l'inclusione è un'operazione a tempo costante. A livello di spazio, ci vorrà un po 'di spazio per immagazzinare ogni potenziale filtro, ma questo sembra già essere un ordine di grandezza meno complesso della scrittura di codice da utilizzare periodicamente per gli uniques. Here's a Python implementation.

Nulla è gratuito, tuttavia - ho detto che "abbastanza buono" era importante. Con Bloom Filters, c'è sempre la possibilità di un falso positivo. Cioè, a seconda delle dimensioni dell'hash per domanda, c'è una piccola possibilità di verificare se l'ID utente è già stato conteggiato e ottenere un "SÌ HA" quando è la prima volta che l'utente ha visualizzato la domanda . È possibile calcolare la dimensione necessaria per un falso positivo ragionevole, ma c'è un compromesso di spazio per farlo.

+0

Grazie a Ikai, ho preso in considerazione l'utilizzo del memcache e ho posto questa domanda al riguardo: http://stackoverflow.com/questions/2422131/google-app-engine-memcache-how-likely-am-i-to-lose- data-in-questo-scenario. Tutte le risposte che ho ricevuto dicevano che non dovevo fare affidamento sul memcache per l'archiviazione temporanea dei dati, dovrei solo usarlo come cache. In realtà ho trovato una soluzione carina per usare i registri delle richieste per capire i dati che mi servono :). – Kyle

+0

Inoltre, ho provato a utilizzare il datastore (http://stackoverflow.com/questions/2427442/google-app-engine-about-how-much-quota-does-a-single-datastore-put-use) e ho calcolato che era troppo costoso, soprattutto considerando che i dati di cui ho bisogno sono già memorizzati nei registri delle richieste. – Kyle