2012-05-19 21 views
6

Ho un'app con una funzione di ricerca. Questa funzione cerca il termine di ricerca in un oggetto gigante (dizionario) che memorizzo nella cache per 24 ore. L'oggetto è di circa 50.000 chiavi e pesa circa 10 MB.In che modo il caching influisce sul consumo di memoria?

Quando profilo l'utilizzo della memoria sul mio hosting, noto che dopo alcune query, l'utilizzo della memoria va da circa 50 MB a oltre 450 MB, spingendo il mio provider di hosting a uccidere l'app.

Quindi mi chiedo cosa sta succedendo qui. In particolare, in che modo la cache utilizza la memoria su ogni richiesta e cosa posso fare per risolvere questo problema?

+0

Quale tecnologia di caching stai usando? Memcached? – Lycha

+0

Al momento, sto usando 'FileBasedCache' –

+1

La cache dei file non causerà perdite di memoria. Il tuo progetto ha altri luoghi in cui archivi oggetti o querysets nella memoria locale? Io come [contenttype manager fa] (https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#the-contenttypemanager) – San4ez

risposta

1

Django FileBasedCache è noto per i problemi di prestazioni. È possibile ottenere un grande quadro sui seguenti link:

A smarter filebasedcache for Django

Bug: File based cache not very efficient with large amounts of cached files

Bug è stato impostato come wont risolvere discutere:

ho intenzione di WONTFIX, su il motivo per cui la cache del filesystem è intesa come un modo semplice per testare il caching, non come una seria strategia di caching . La dimensione della cache predefinita e la strategia di selezione implementata da nella cache dei file dovrebbero rendere evidente ciò.

+0

Non memorizzo nella cache un gruppo di oggetti come menzionato nei tuoi esempi. Ne ho uno con un mazzo di chiavi. Non penso che il tuo esempio si applichi. Inoltre, l'utilizzo della memoria aumenta dopo ogni query: a un certo punto si tratta di altipiani, ma poi il mio provider di hosting uccide l'app. –

0

considerare l'utilizzo di un KVS come Memcache o Redis come una strategia di caching perché entrambi scadenza supporto. Inoltre, considera una ricerca dedicata come ElasticSearch se le funzionalità più anticipate saranno correlate alla ricerca.

strumenti sono howto sono disponibili:

Installing memcached for a django project

http://code.google.com/p/memcached/wiki/NewStart

http://redis.io/commands/expire

https://github.com/bartTC/django-memcache-status

http://www.elasticsearch.org/guide/reference/index-modules/cache.html

Problemi correlati