/ / contatore transazionale in GAE - python, google-app-engine, transazioni, sharding

contatore transazionale in GAE - python, google-app-engine, transazioni, sharding

Ho bisogno di aggiornare un contatore e restituire il conteggio corrente. Sto seguendo l'esempio qui: https://developers.google.com/appengine/articles/sharding_counters

Ma non sono sicuro di poter eseguire indirettamente una query transazionale tramite una funzione. Ecco il codice di esempio:

@db.transactional
def updateCounter(name):
increment(name)
get_count(name)

updateCounter(TOTAL_USERS)

Questo restituirà il conteggio corrente incrementato? o questo approccio non è valido in quanto la query del database si trova all'esterno della funzione @ db.transactional?

risposte:

3 per risposta № 1

Non è possibile* per ottenere un conteggio delle transazioni di un contatore di dimensioni ridotte. Il modo in cui funzionano i contatori semplificati è che è possibile aggiornarli in una transazione e riassumerli al di fuori della transazione. Generalmente, questo non è un problema, perché i contatori sharded sono usati dove il conteggio viene aggiornato molte volte al secondo, qualsiasi record transazionale del conteggio sarebbe errato praticamente nel momento in cui è stato calcolato.

* tu poteva fai questo per un massimo di 5 frammenti usando XGtransazioni, ma è una pessima idea, in primo luogo, per le ragioni di cui sopra, e in secondo luogo perché imporrebbe gli stessi problemi di scalabilità che stai cercando di evitare utilizzando in primo luogo i contatori in grassetto.


0 per risposta № 2

Puoi usa solo le query degli antenati all'interno di una transazione.

Da get_count() usa la query non-antenato il suo codice produrrà un errore.