2010-08-22 7 views
9

Ho un'applicazione in cui l'entità principale è una Story e gli utenti possono votare per ogni storia. Ogni voto incrementa uno vote_count per la storia.Come ordinare da un contatore quando si usano contatori a strati

Sono preoccupato per la contesa di scrittura sulla storia, quindi ho intenzione di utilizzare uno sharded counter per ogni storia per tracciare i voti.

Ora la mia domanda: come posso ottenere un elenco di storie ordinate per numero di voti? Ad esempio: mostra le 50 storie più votate.

Il mio primo pensiero è di eseguire periodicamente un'attività che legga i valori del contatore e aggiorni una proprietà sulla storia reale. Sarebbe OK che i risultati della domanda per voto fossero leggermente obsoleti.

risposta

2

Sembra che tu stia facendo un po 'di ottimizzazione prematura. Salterò i contatori più chiari finché non sarà evidente che ne hai bisogno. Se sei abbastanza sicuro che lo farai, allora con tutti i mezzi, inizia da loro. Per quanto riguarda l'esecuzione di un'attività periodica e la memorizzazione nella cache risulta in una proprietà per ciascuna storia, potrebbe essere un'altra ottimizzazione prematura.

Non ho esperienza diretta con Google App Engine, quindi spero che qualcuno che ha avrà alcune informazioni da condividere.

+1

Re ottimizzazione prematura: concordo sul fatto che probabilmente è eccessivo per una nuova app senza contesa di scrittura dimostrata, ma considera questa una domanda di apprendimento e supponiamo che l'app riceva 10 scritture/secondo per i contatori. – cope360

+0

È una domanda interessante. Non avevo mai sentito parlare di contatori precisi prima, quindi attendo ulteriori risposte. –

+0

Ho aggiunto un collegamento alla domanda se vuoi vedere come funzionano. – cope360

1

Aggiungere periodicamente i dati potrebbe essere una buona strategia per contrastare la dispersione di contatori.

Si potrebbe anche provare altre strategie per il conteggio, senza schegge, come è stato descritto altrove:

http://blog.notdot.net/2010/04/High-concurrency-counters-without-sharding

(non a mantenere il vostro contatore in memcache, e lavare periodicamente il valore accumulato al datastore)

Quanto è critica la tua app con lievi errori di conteggio?

Problemi correlati