OSCache vs. EHCache

Nunca he usado un caché como este antes. El problema es que quiero cargar más de 500,000 registros de una base de datos y hacer una selección / filtrado rápido.

Estoy pensando en usar un caché y encontré preliminarmente EHCache y OSCache , ¿alguna opinión?

Ambos son proyectos bastante sólidos. Si tiene necesidades de almacenamiento en caché bastante básicas, cualquiera de ellas probablemente funcionará tan bien como la otra.

También puede considerar realizar el filtrado en una consulta de base de datos si es posible. A menudo, el uso de una consulta optimizada que devuelve un conjunto de resultados más pequeño le dará un mejor rendimiento que cargar 500,000 filas en la memoria y luego filtrarlas.

A juzgar por su página de lanzamientos , OSCache no se ha mantenido activamente desde 2007. Esto no es bueno. EhCache, por otro lado, está en constante desarrollo. Solo por eso, elegiría EhCache.

Edición de noviembre de 2013: OSCache, como el rest de OpenSymphony, está muerto.

He usado JCS ( http://jakarta.apache.org/jcs/ ) y me parece sólido y fácil de usar programáticamente.

Depende de tus necesidades. Si está haciendo el trabajo en memoria en una máquina, entonces ehcache funcionará perfectamente, suponiendo que tenga suficiente memoria RAM o un disco duro lo suficientemente rápido como para que el desbordamiento no cause la paginación del disco. Si encuentra que necesita lograr escalabilidad, incluso a pesar de que esta operación en particular ocurre mucho, entonces probablemente querrá hacer clústeres. JGroups / TreeCache de JBoss admite esto, también lo hace EHcache (creo), y sé que definitivamente funciona si usas Ehcache con terracota, que es una integración muy elegante. Esta respuesta no habla directamente de los méritos de EHcache y OSCache, por lo que aquí está la respuesta: EHcache parece tener la mayor inercia (solía ser el desarrollo activo predeterminado, conocido, incluido un nuevo servidor de caché), y OSCache parecía (al menos en un punto) para tener un poco más de funciones, pero creo que con las opciones mencionadas anteriormente, esas ventajas son discutibles / superadas. Ah, la otra cosa que olvidé mencionar es que la transaccionalidad de los datos es importante, y sus requisitos refinarán la lista de opciones válidas.

Elija una memoria caché que cumpla con JSR 107, lo que facilitará su trabajo cuando desee migrar de una implementación a otra. Para ser específico en la pregunta, vaya a Ehcache, que es la solución de almacenamiento en caché de Java más popular y ampliamente utilizada. Estamos usando Ehcache extensivamente y funciona para nosotros.

Otras respuestas discuten los pros / contras de los cachés; pero me pregunto si realmente se beneficia de caché en absoluto. No está completamente claro qué planea hacer aquí y por qué sería beneficioso un caché: si tiene el conjunto de datos a su disposición, simplemente acceda a eso. El caché solo ayuda a reutilizar cosas entre tareas independientes. Si esto es lo que está haciendo, sí, el almacenamiento en caché puede ayudar. Pero si es una gran tarea que puede llevar a lo largo de su conjunto de datos, el almacenamiento en caché no agregaría ningún valor.

De cualquier manera, recomiendo usarlos con Spring Modules. El caché puede ser transparente para la aplicación, y las implementaciones del caché son trivialmente fáciles de intercambiar. Además de OSCache y EHCache, Spring Modules también admite Gigaspaces y JBoss caché.

En cuanto a las comparaciones … OSCache es más fácil de configurar EHCache tiene más opciones de configuración

Ambos son sólidos, ambos admiten caché de reflection, ambos funcionan con Terracotta, ambos admiten caché en memoria y en disco.

He utilizado oscache en varios proyectos de spring con módulos de resorte, utilizando la configuración basada en AOP.

Recientemente busqué usar los módulos oscache + spring en un proyecto Spring 3.x, pero no se admite el almacenamiento en caché basado en anotaciones de los módulos spring (incluso por la horquilla).

Recientemente me enteré de este proyecto –

http://code.google.com/p/ehcache-spring-annotations/

Que admite Spring 3.x con almacenamiento en caché declarativo basado en anotaciones utilizando ehcache.

Principalmente utilizo EhCache porque solía ser el proveedor de caché predeterminado para Hibernate. Hay una lista de soluciones de almacenamiento en caché en Java-Source.net .

Solía ​​tener un enlace que comparaba las principales soluciones de almacenamiento en caché. Si lo encuentro actualizaré esta respuesta.

OSCache está bastante muerto, ya que ha sido abandonado hace unos años. Puede echar un vistazo a Cacheonix, se ha desarrollado activamente y acabamos de lanzar v.2.2.2 con soporte para almacenamiento en caché en el nivel web. Soy un interlocutor, así que puedes contactarme si tienes alguna pregunta.