2012-03-25 9 views
6

Ho il risultato di una query che è molto costosa. È l'unione di più tabelle e una mappa riduce il lavoro.Evitare l'allevamento di cani o la mandria tonante in uno scenario di scadenza memcached

Questo è memorizzato nella cache in memcached per 15 minuti. Una volta scaduta la cache, le query vengono ovviamente eseguite e la cache viene nuovamente riscaldata.

Ma al momento della scadenza può verificarsi il problema thundering herd problem.

Un modo per risolvere questo problema, quello che faccio ora è eseguire un'operazione pianificata che calcia al 14 ° minuto. Ma in qualche modo questo mi sembra molto sub ottimale.

Un altro approccio che mi piace è il meccanismo proxy_cache_use_stale updating; di nginx.

Il server web/macchina continua a fornire la cache non aggiornata mentre un thread inizia la data di scadenza e aggiorna la cache.

Qualcuno ha applicato questo scenario allo memcached sebbene comprenda che questa è una strategia lato client?

Se ne beneficiano, utilizzo Django.

+0

So che lei ha chiesto questo 3 anni fa. Sono curioso, come sei finito a usare? – Seperman

risposta

1

Si desidera http://pypi.python.org/pypi/dogpile/ - implementa un algoritmo esattamente come proxy_cache_use_stale updating e funziona anche con memcachd.

+0

Si può "ridimensionare"? –

+0

Ah, scusami, mi risulta che ti ho fuorviato un po '. Si scopre che il backend memcached è implementato in https://bitbucket.org/zzzeek/dogpile.cache, ma non è ancora abbastanza la lettura della produzione. –

Problemi correlati