2012-05-19 15 views
6

Tengo una aplicación que tiene una función de búsqueda. Esta función busca el término de búsqueda en un objeto gigante (diccionario) que guardo en caché durante 24 horas. El objeto tiene aproximadamente 50,000 llaves y pesa aproximadamente 10MB.¿Cómo afecta el almacenamiento en caché el consumo de memoria?

Cuando perfilo el uso de memoria en mi hosting, observo que después de algunas consultas, el uso de memoria va de alrededor de 50MB a más de 450MB, lo que provocó que mi proveedor de hosting matara la aplicación.

Así que me pregunto qué está pasando aquí. Específicamente, ¿cómo utiliza la memoria caché la memoria en cada solicitud y qué puedo hacer para solucionarlo?

+0

¿Qué tecnología de almacenamiento en caché estás usando? Memcached? – Lycha

+0

Por el momento, estoy usando 'FileBasedCache' –

+1

La memoria caché de archivos no causará pérdida de memoria. ¿Su proyecto tiene otros lugares donde almacena conjuntos de consultas u objetos en la memoria local? Es decir, como [el administrador del tipo de contenido]] (https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#the-contenttypemanager) – San4ez

Respuesta

1

Django FileBasedCache es conocido por tener problemas de rendimiento. Usted puede obtener una gran imagen en los siguientes enlaces:

A smarter filebasedcache for Django

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

Bug se estableció como suele fijar discusión:

Voy a wontfix, en los motivos de que la memoria caché del sistema de archivos está pensada como una forma fácil de probar el almacenamiento en caché, no como una estrategia de almacenamiento en caché grave . El tamaño de caché predeterminado y la estrategia de eliminación implementada por el caché de archivos deberían hacerlo obvio.

+0

No guardo en la memoria caché un conjunto de objetos como se menciona en los ejemplos. Tengo uno con un montón de llaves. No creo que tu ejemplo se aplique. Además, el uso de la memoria aumenta después de cada consulta, en algún momento se estabiliza, pero luego mi proveedor de alojamiento elimina la aplicación. –

0

Considere el uso de un KVS como Memcache o Redis como estrategia de almacenamiento en caché, ya que ambos admiten la caducidad. Además, considere una búsqueda dedicada como ElasticSearch si las características más anticipadas estarán relacionadas con la búsqueda.

Las herramientas son tutoriales están disponibles:

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

Cuestiones relacionadas