2010-11-02 7 views
5

Hola: Estoy confundido acerca de lo que almacena en caché el caché de hibernación.¿qué guarda el caché de hibernación?

De los documentos, sé que hay varios tipos de caché en hibernación.

Primer nivel: el nivel de transacción. Parece que la entidad a ser persistente por una sesión se almacena en la caché aquí.

Caché de segundo nivel: Realmente no tengo idea acerca de este caché, desde la API, dijo que este caché funciona en el nivel de la sesión ... No puedo entender.

Query cache: Esto es fácil de entender para mí (quizás estoy equivocado). Guarda en caché el parámetro de consulta junto con la entidad relacionada.

Esto es todo lo que sé sobre la memoria caché en Hibernate.

¿Alguien me puede dar más detalles?

Por cierto, no soy bueno en el trabajo de sql/jdbc, así que también quiero saber cómo debería saber sobre el sql/jdbc para obtener más información sobre la hibernación (¿algún documento?)? No quiero ser solo un usuario de hibernación ya que es solo una herramienta, lo que quiero es aprender algo de este maravilloso marco. :)

Respuesta

3

primer nivel de caché

Esta caché está activado por defecto. Cuando NHibernate está cargando una entidad por su ID único de la base de datos, se coloca automáticamente en el llamado mapa de identidad. Este mapa de identidad representa el primer nivel de caché.

La vida útil de la memoria caché de primer nivel está acoplada a la sesión actual. Tan pronto como se cierra la sesión actual, se borra el contenido del caché de primer nivel respectivo. Una vez que una entidad se encuentra en la memoria caché de primer nivel, una operación posterior que desea cargar la misma entidad dentro de la sesión actual recupera esta entidad de la memoria caché y no es necesario realizar una ida y vuelta a la base de datos.

Una de las principales razones detrás de este mapa de entidad es evitar la situación de que dos instancias diferentes en la memoria pueden representar el mismo registro de la base de datos (o entidad).

(adaptado de NH FAQ)

segundo nivel de caché

Este caché está por encima de la sola cache ámbito de sesión. Con este caché, guarda muchos viajes de ida y vuelta a la base de datos, ya que la primera vez que alguien en una sesión carga una entidad determinada, permanece en el caché, por lo que la próxima solicitud (de cualquier otra sesión) lo obtendrá del caché.

Para usar L2 Cache, necesitará un proveedor de caché, como SysCache o Memcache. Estos chicos almacenarán los valores de las entidades en caché como una serie de cadenas de os hashed por ID de la entidad. Es importante tener en cuenta que no es el objeto .net el que se almacena en caché, sino solo sus valores.

Se dice que está vinculado a la fábrica de sesiones porque la memoria caché funcionará para las sesiones creadas por la fábrica de sesiones determinada, por lo que las sesiones creadas por diferentes fábricas de sesiones no compartirán el caché. ¿Es claro para usted el concepto de una fábrica de sesiones?

caché de consultas

Ésta es realmente simple, pero hay una trampa. Cacheará la consulta y sus parámetros, pero no almacenará en caché las entidades devueltas. Solo almacenará en caché sus Id., Por lo que solo tiene sentido con la memoria caché L2, ya que contiene los valores asociados a ese Id.

la FAQ de NHiernate acerca caché:

https://web.archive.org/web/20110514214657/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/11/09/first-and-second-level-caching-in-nhibernate.aspx

+0

Gracias, su respuesta es bastante útil !! Estoy un poco despejado ahora. Por cierto, ¿algún documento sobre la base de datos relacionado con saber más sobre el hibernate? – hguser

+0

Sugiero que compre Hibernate en acción: http://www.amazon.com/Hibernate-Action-Christian-Bauer/dp/193239415X – Pedro

Cuestiones relacionadas