2009-03-31 11 views
5

Estoy trabajando en una clase de cliente que necesita cargar datos de una base de datos en red. Se ha sugerido que agregar un servicio de caché estándar al cliente podría mejorar su rendimiento.¿Hay una clase estándar de caché de Python de terceros?

Me encantaría no tener que construir mi propia clase de almacenamiento en caché, es bien sabido que estos proporcionan puntos de falla comunes. Sería mucho mejor usar una clase que alguien más ha desarrollado en lugar de gastar una gran cantidad de mi propio tiempo depurando un sistema de caché hecho en casa.

desarrolladores de Java tienen esta: http://ehcache.sourceforge.net/

Es una clase de almacenamiento en caché de alto rendimiento de propósito general que puede soportar todo tipo de almacenamiento. Tiene opciones de caducidad basada en el tiempo y otros métodos para la recolección de basura. Se ve muy bien. Lamentablemente, no puedo encontrar nada tan bueno para Python.

Entonces, ¿alguien puede sugerir una clase de caché que esté lista para mi uso. Mi lista de deseos es:

  • Posibilidad de limitar el número de objetos en la memoria caché.
  • Posibilidad de limitar la edad máxima de los objetos en la memoria caché.
  • LRU objeto expirey
  • Capacidad para seleccionar varias formas de almacenamiento (por ejemplo, memoria, disco)
  • Bueno depurado, bien mantenido, en uso por al menos una aplicación bien conocida.
  • Buen rendimiento.

¿Alguna sugerencia?

ACTUALIZACIÓN: Estoy buscando almacenamiento en memoria caché LOCAL de objetos. El servidor al que me conecto ya está fuertemente en caché. Memcached no es apropiado porque requiere un tráfico de red adicional entre el cliente de Windows y el servidor.

Respuesta

4

Recomendaría usar memcached y usar cmemcache para acceder a él. No puede limitar necesariamente el número de objetos en la memoria caché, pero puede establecer un tiempo de caducidad y limitar la cantidad de memoria que utiliza. Y memcached es utilizado por muchos grandes nombres. De hecho, lo llamaría una especie de estándar de la industria.

ACTUALIZACIÓN:

estoy buscando el almacenamiento en caché de objetos LOCAL.

Puede ejecutar memcached localmente y acceder a él a través de localhost. He hecho esto algunas veces.

Aparte de eso, la única solución que puedo pensar es django's caching system. Ofrece varios backends y algunas otras opciones de configuración. Pero eso puede ser un poco pesado si no estás usando django.

ACTUALIZACIÓN 2: Supongo que como último recurso, también puede usar jython y acceder al sistema de almacenamiento en caché de Java. Esto puede ser un poco difícil de hacer si ya tienes clientes usando CPython.

Actualización 3: Es probable que sea un poco tarde para ser de utilidad para usted, pero un empleador anterior mío solía ZODB para este tipo de cosas. Es una base de datos real, pero su rendimiento de lectura es lo suficientemente rápido como para que sea útil para el almacenamiento en caché.

+0

No es apropiado en este caso ... Estoy tratando de acelerar una aplicación de red agregando un caché LOCAL. Una caché de red va a ser lenta para los usuarios finales dado que podrían estar en cualquier parte del mundo. –

+0

Lamentablemente, es complejo usar Jython en esta etapa. –

Cuestiones relacionadas