Hibernate L2 Cache en clúster
-
20-09-2019 - |
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?)
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.