Pregunta

P1: Estoy en lo cierto que sólo los vendedores de este soporte de hibernación L2 caché en clúster?

  • terracota por Hibernate (comercial)
  • SwarmCache (no publicado desde 2003)
  • JBoss Cache 1.x
  • JBoss Cache 2

P2: ¿Hay alguna alternativa a Hibernate caché L2? (Tal vez algunos de almacenamiento en caché DB?)

¿Fue útil?

Solución

Q1. Ehcache funciona muy bien como la hibernación de caché L2, distribuida. Estamos utilizando esto para nuestro proyecto.


Q2. Varias cachés son posibles.

  • Todas las bases de datos ya están haciendo una gran cantidad de almacenamiento en caché internamente, por lo que no se preocupe por esta parte.
  

Sin embargo, el problema con la base de datos   caché es que es físicamente en el   servidor de base de datos, por lo que cada consulta   implica una llamada de red (latencia,   ancho de banda ..). Ese es todo el punto   de las memorias caché en la aplicación   servidor.


  • La caché L2 Hibernate tiene algunos detalles:
    • muy fácil trabajar con él (sin código, poca configuración)
    • conceptualmente a nivel de entidad (que es bastante fina, a veces tenemos que almacenar en caché los granos más grandes, para hacer menos solicitudes de base de datos),
    • trabajar por id o una colección (por ejemplo, el almacenamiento en caché un resultado de consulta está desactivada por defecto, ya que es imposible para que sea útil en el caso general).

  • Cuando la hibernación L2 es inapropiada, se utiliza la misma biblioteca Ehcache a los datos de caché (que no es exactamente entidades). Ejemplos de casos de uso:
    • cuando una tabla es grande (longitud de registro y número) , el uso de memoria no se habrían podido almacenar en caché por completo, pero el almacenamiento en caché sólo tres campos de todos los registros está bien. Podría ser que estos campos se accede a los que a menudo, o inmutable ...
    • cuando tenemos muchos accesos de lectura a la memoria caché, y cada uno daría lugar a una cómputo (en la caché L2) teniendo en cuenta las entidades que tenemos: el resultado de cálculo se pueden almacenar en la memoria caché. (Exemple típico en el que el cálculo requiere datos de otras tablas, pero los detalles no se utilizan en el resultado final, por lo que el caché no almacena estos datos)
    • cuando las entidades en una mesa están agrupados lógicamente por categorías , y queremos solicitar y caché de una categoría a la vez, en lugar de la política regular de caché L2 que sería una entidad a la vez.
  

En un contexto distribuido, esto a menudo   se traduce en un invalidar   categoría a la vez cuando uno de ellos   entidades se modifica, que es funcionalmente   lógico para nosotros (y esencial para   rendimiento, ya que de lo contrario habría   que invalida todos estos   entidades; esto se debe a la memoria caché   invalida toda una región, o una   objeto específico, pero en   entre lo que tiene que bucle que es malo para el rendimiento)

Y estoy seguro de que otros ...

Así que este caso no es estrechamente relacionado base de datos, por lo general no almacena nuestras entidades de Hibernate. Nos ponemos en la capa de negocio (y no el acceso a datos o dao), que esté disponible directamente a los códigos negocio. Tenga en cuenta que para nosotros, no es una memoria caché transparente, pero una llamada a un servicio de negocio explícita (responsable de este caché: cargarlo si los datos no está presente, invalidando según sea necesario). Que hace operaciones o entregar valores

  

Un divertido tema que rosca en este caché: porque esta caché se accede por nuestros cien tela hilos, tiene que ser seguro para subprocesos. Usted probablemente sabe por qué un valor seguro para subprocesos es ya sea inmutable o clonado en cada llamada (que a menudo es un problema de rendimiento). Por lo que todos nuestros cachés de negocios utilizan objetos inmutables, y el rendimiento es muy grande.

Otros consejos

También puede utilizar [Infinispan (evolución de JBoss Cache) como segundo proveedor de memoria caché de nivel!] [1]

[1]: Véase http: // Infinispan. blogspot.com/2009/10/infinispan-based-hibernate-cache.html

Ehcache tiene un modo distribuido, pero no estoy seguro si eso es soportado con Hibernate. No veo por qué no debería trabajar, sin embargo.

Did omite JBossCache 3 por alguna razón específica?

de hibernación-Redis lib sería la elección perfecta. Es una memoria caché basada Redis.

¿Por qué Redis? que está ardiendo rápido, que funciona en la nube y tiene fácil solución similar a la nube AWS ElastiCache , por lo que don' t necesidad de gestionar por sí mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top