2008-09-18 10 views
19

Nunca usé un caché como este anteriormente. El problema es que quiero cargar más de 500,000 registros de una base de datos y seleccionar/filtrar rápidamente.OSCache vs. EHCache

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

+7

¿Por qué crees que usar la memoria caché será más rápido que seleccionar/filtrar en la base de datos? Eso es lo que hacen. :) –

Respuesta

19

Ambos son proyectos bastante sólidos. Si tiene necesidades de 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 factible. A menudo, usar una consulta ajustada 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.

0

Uso principalmente 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.

5

Depende de sus necesidades. Si está haciendo el trabajo en la memoria en una máquina, entonces ehcache funcionará perfectamente, suponiendo que tiene suficiente RAM o un disco duro lo suficientemente rápido para que el desbordamiento no provoque paginación/agitación del disco. si encuentra que necesita lograr la escalabilidad, incluso a pesar de que esta operación en particular suceda mucho, entonces probablemente quiera hacer clustering. JGroups/TreeCache de JBoss respaldan esto, al igual que EHcache (creo), y sé que definitivamente funciona si usas Ehcache con terracota, que es una integración muy ingeniosa. Esta respuesta no habla directamente de los méritos de EHcache y OSCache, así que esta es la respuesta: EHcache parece tener la mayor inercia (solía ser el desarrollo predeterminado, conocido y activo, incluido un nuevo servidor de caché), y OSCache parecía (al menos en un punto) para tener un poco más de características, pero creo que con las opciones mencionadas anteriormente esas ventajas son discutibles/reemplazadas. 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.

2

De cualquier manera, recomiendo usarlos con Spring Modules. La memoria caché puede ser transparente para la aplicación, y las implementaciones de caché son fáciles de intercambiar. Además de OSCache y EHCache, Spring Modules también es compatible con 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 de roca sólida, tanto el apoyo duplicación de la caché, tanto en el trabajo con terracota, tanto el apoyo en memoria y para -disco de almacenamiento en caché.

3

Otras respuestas discuten pros/contras para caches; pero me pregunto si realmente se beneficia de la memoria caché. No está del todo claro qué es lo que planeas hacer aquí, y por qué un caché sería beneficioso: si tienes el conjunto de datos a tu disposición, simplemente acéptalo. La memoria caché solo ayuda a reutilizar cosas entre tareas que de otro modo serían 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.

52

A juzgar por su releases page, OSCache no se ha mantenido activamente desde 2007. Esto no es algo bueno. EhCache, por otro lado, está en constante desarrollo. Por esa sola razón, elegiría EhCache.

Edit Nov 2013: OSCache, como el resto de OpenSymphony, está muerto.

+5

+1 Este es un factor muy importante para decidir qué software de código abierto usar – Richard

+10

http://www.opensymphony.com/ OpenSymphony ha anunciado públicamente que están muertos. – Pace

2

He utilizado oscache en varios proyectos de muelles con módulos de muelles, utilizando la configuración basada en aop.

Recientemente busqué usar oscache + módulos de resorte en un proyecto de Spring 3.x, pero encontré que el almacenamiento en caché basado en anotaciones de resorte no es compatible (ni siquiera con la horquilla).

poco me enteré de este proyecto -

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

que apoya 3.x primavera con declarativa caché basado en anotación utilizando ehcache.

5

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

0

OSCache está casi 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 el almacenamiento en caché en el nivel web. Soy un committer para que pueda comunicarse si tiene alguna pregunta.