que integracion con aprender and hibernate spring caching ehcache second-level-cache

integracion - Almacenamiento en caché con Hibernate+Spring: ¡algunas preguntas!



spring hibernate sessionfactory (2)

Hibernate admite los siguientes cachés: caché de primer nivel, caché de segundo nivel, caché de consultas

Sí.

Spring es compatible con las siguientes posibilidades de almacenamiento en caché: solo método de almacenamiento en memoria caché

Spring 3.1 presenta la nueva abstracción de almacenamiento en caché basada en anotaciones sobre métodos, sí.

El 1st Level Cache es parte de CADA aplicación de Hibernate.

Sí.

La memoria caché de primer nivel se crea para CADA sesión de hibernación.

Sí, aunque puedes borrarlo manualmente en cualquier momento.

¿Qué se guarda en el caché de primer nivel? Objetos o solo los valores de sus propiedades? consultas y sus resultados?

Es un mapa de todos los objetos recuperados durante la vida de una sesión. Si carga el mismo objeto por identificación por segunda vez, se cargará desde L1.

Me enteré: la memoria caché de segundo nivel se usa UNA VEZ por aplicación. ¿No es falso? ¿no se usa UNA VEZ por sessionfactory? y: multiple sessionfactorys = múltiples cachés de segundo nivel posibles?

Tiene razón, por lo general solo hay una fábrica de sesiones por aplicación (base de datos), de ahí el atajo.

lo que se guarda en el caché de segundo nivel: en mi opinión, solo los valores que pertenecen a un registro, no los objetos en sí.

Las mismas cosas que en L1, pero viven más tiempo. L2 suele estar respaldado por un caché de fortaleza industrial, mientras que L1 es solo un mapa (ni siquiera tiene que ser seguro para subprocesos). Almacena entidades completas, incluidas las relaciones cargadas perezosamente.

Al almacenar valores de un registro en 2nd Level Cache, también es posible almacenar valores relacionados (desde objetos conectados a través de una clave externa) con él.

No administra L2 manualmente, sucede automáticamente.

Al actualizar los valores de un objeto en la memoria caché de segundo nivel, ¿es posible actualizar también los valores de los objetos conectados con ella en la memoria caché?

Véase más arriba.

cuando los valores de un objeto están cambiando, ¿cómo puedo actualizar el caché de segundo nivel? ¿enjuagar? ¿Puedo actualizar una parte de la memoria caché o debo actualizar toda la memoria caché?

Vea arriba - Hibernate lo resolverá por usted. Nunca interactúas con L2 directamente.

¿dónde tiene sentido el caché de segundo nivel y dónde no?

Medida. En la aplicación que lee muchos datos por clave primaria y el factor de lectura-escritura es muy alto, L2 tiene un impacto significativo en su rendimiento.

el modo de caché: ¿cada modo de caché proporciona una estrategia diferente de almacenamiento en caché? por ejemplo, con el modo de caché "solo lectura", ¿no es necesaria la sincronización de la base de datos y la memoria caché? ¿otros modos de caché proporcionan sincronización? Pensé que la sincronización debe ser hecha por el desarrollador mismo?

El modo de caché ayuda a Hibernate a elegir la mejor estrategia para el almacenamiento en caché y la invalidación. Por ejemplo, si la memoria caché es de solo lectura, Hibernate no se molestará en invalidarla (o no lo hará a menudo). Pero solo el caché de lectura (entidad de solo lectura), por supuesto, prohibirá las actualizaciones.

¿Cuál es la diferencia entre Query Cache y 2nd 2nd Cache? en mi opinión: en el Caché de consultas los conjuntos de resultados se guardan, pero no con sus valores, solo con sus ids. cuando la consulta se usa nuevamente y el conjunto de resultados sigue siendo "correcto", los valores que pertenecen a los identificadores se consultan desde el segundo nivel de caché.

Exactamente, pero este es un tema muy amplio. Especialmente el conjunto de resultados sigue siendo la parte "correcta" .

Para el Query Cache, ¿DEBE usarse un segundo nivel de caché?

Sí, sin el caché L2, el caché de consultas no tiene sentido y ralentizará la aplicación de forma espectacular.

dónde tiene sentido el Caché de consultas y dónde no?

Pregunta difícil, generalmente cuando está ejecutando la misma consulta muchas veces y el universo de parámetros de consulta es bajo (para cada conjunto de parámetros de consulta se crea una nueva caché de consulta con todos los identificadores de registros siendo los resultados).

¿Spring proporciona más posibilidades de almacenamiento en caché que el método de almacenamiento en caché?

No, Spring es más o menos un pegamento para tu propio código.

El almacenamiento en caché de métodos no está vinculado al almacenamiento en caché de hibernación.

Spring no está relacionado con Hibernate, entonces ...

pero: para el método de almacenamiento en caché, es necesario un segundo nivel, como ehcache (que también puede ser utilizado por Hibernate)

L2 es el concepto de Hibernate. Si desea almacenar en caché los métodos, necesita algún caché subyacente. Deja que sea EhCache, no importa. por supuesto, debe ser seguro para subprocesos.

¿Se puede utilizar el almacenamiento en caché de métodos sin consultas de bases de datos?

Spring no tiene nada que ver con Hibernate. Puede almacenar cálculos que no tienen nada que ver con la base de datos.

Si utilizo ehcache para hibernación como caché de segundo nivel y ehcache para la primavera para el caché de métodos, ¿puedo usar la misma instancia ehcache? ¿Existe la posibilidad de que algo se mezcle?

Puede usar la misma configuración de CacheManager y caché que Hibernate para facilitar la implementación. Siempre que los nombres de la memoria caché no se superpongan, son completamente independientes, incluso si se piensa que funcionan dentro del mismo administrador.

cuando se usa caché de primer nivel y caché de segundo nivel, ¿pueden mezclarse? al consultar la base de datos, ¿de dónde viene el resultado, el caché de primer o segundo nivel? funciona el caché de primer nivel con el caché de segundo nivel?

Simplemente funcionan, siempre que no se pierda algo de abstracción :-). Cuando consulta por clave principal, primero se examina L1 (es más rápido) y luego L2.

¿Hay algo más que pueda mezclarse usando los cachés que mencioné? :-)

Vea arriba, las abstracciones tienden a tener fugas. Pero los peores problemas surgen cuando cambias la base de datos y Hibernate no lo sabe. También la agrupación sin la replicación adecuada le causará dolor de cabeza. Y el mayor problema: muy a menudo, el almacenamiento en caché incorrecto en realidad ralentiza la aplicación (el caché de consultas es el más peligroso aquí).

Estoy trabajando en el desarrollo de una aplicación web con Spring 3 e Hibernate 3.6. Por el momento, trato de entender cómo funciona Caching con Spring e Hibernate. Encontré algunas fuentes sobre Caching con Hibernate y algunas sobre Spring y trato de reunir mis informaciones ahora. Todavía tengo algunas preguntas para ambos marcos y me alegraría si alguien pudiera responderlas o decirme si los hechos que figuran a continuación son correctos.

La mayoría de las veces, las respuestas cortas (sí / no) serían suficientes. Creo que esta lista también puede ser útil para otros, que quieran comprender cómo funciona el almacenamiento en caché con Spring e hibernate.

General

1) Hibernate admite los siguientes cachés: caché de primer nivel, caché de segundo nivel, caché de consultas

2) Spring en sí admite las siguientes posibilidades de almacenamiento en caché: solo método de almacenamiento en memoria caché

1st Level Cache

3) El caché de primer nivel es parte de TODAS las aplicaciones de Hibernate.

4) La memoria caché de primer nivel se crea para CADA sesión de hibernación.

5) ¿Qué se guarda en el caché de primer nivel? Objetos o solo los valores de sus propiedades? consultas y sus resultados?

2nd Level Cache

6) Descubrí: el segundo nivel de caché se usa UNA VEZ por aplicación. ¿No es falso? ¿no se usa UNA VEZ por sessionfactory? y: multiple sessionfactorys = múltiples cachés de segundo nivel posibles?

7) qué se guarda en el caché de segundo nivel: en mi opinión solo los valores que pertenecen a un registro, no los objetos en sí.

8) cuando se almacenan valores de un registro en el segundo nivel de caché, también es posible almacenar los valores relacionados (desde objetos conectados a través de una clave externa) con él.

9) cuando se actualizan los valores de un objeto en el caché de segundo nivel, ¿es posible actualizar también los valores de los objetos conectados con él en el caché?

10) cuando los valores de un objeto están cambiando, ¿cómo puedo actualizar el caché de segundo nivel? ¿enjuagar? ¿Puedo actualizar una parte de la memoria caché o debo actualizar toda la memoria caché?

11) ¿ dónde tiene sentido el caché de segundo nivel y dónde no?

12) el Modo de caché: ¿cada modo de caché proporciona una estrategia diferente de almacenamiento en caché? por ejemplo, con el modo de caché "solo lectura", ¿no es necesaria la sincronización de la base de datos y la memoria caché? ¿otros modos de caché proporcionan sincronización? Pensé que la sincronización debe ser hecha por el desarrollador mismo?

Query Cache

13) ¿cuál es la diferencia entre la caché de consulta y la memoria caché de segundo nivel? en mi opinión: en el Caché de consultas los conjuntos de resultados se guardan, pero no con sus valores, solo con sus ids. cuando la consulta se usa nuevamente y el conjunto de resultados sigue siendo "correcto", los valores que pertenecen a los identificadores se consultan desde el segundo nivel de caché

14) Para la Query Cache, ¿se debe usar un segundo nivel de caché?

15) ¿ dónde tiene sentido el Caché de consultas y dónde no?

Spring

16) ¿Spring proporciona más posibilidades de caché que el método de almacenamiento en caché?

17) el almacenamiento en caché de métodos no está vinculado al almacenamiento en caché de hibernación

18) pero: para el método de almacenamiento en caché es necesario un segundo nivel, como ehcache (que también puede ser utilizado por Hibernate)

19) ¿ se puede utilizar el almacenamiento en caché de métodos sin consultas de bases de datos?

Getting mixed up

20) si se utiliza ehcache para hibernar como caché de segundo nivel y ehcache for spring para caché de métodos, ¿puedo usar la misma instancia ehcache? ¿Existe la posibilidad de que algo se mezcle?

21) cuando se usa caché de primer nivel y caché de segundo nivel, ¿pueden mezclarse? al consultar la base de datos, ¿de dónde viene el resultado, el caché de primer o segundo nivel? funciona el caché de primer nivel con el caché de segundo nivel?

22) ¿ Algo más que pueda mezclarse usando los cachés que mencioné? :-)

Gracias por responder, no importa qué pregunta! :-)


En cuanto a la memoria caché de Spring y Second Level, hay un buen proyecto de código abierto que puede funcionar para trabajar con caché de 2L:

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

Lo estamos utilizando en el entorno de producción y hace que nuestra vida sea mucho más fácil.