Saltar al contenido

¿Cuáles son los cachés de primer y segundo nivel en (N) Hibernate?

No dejes de divulgar nuestro sitio y códigos con tus amigos, necesitamos de tu ayuda para aumentar nuestra comunidad.

Solución:

1.1) Caché de primer nivel

Caché de primer nivel siempre se asocia con el Objeto de sesión. Hibernate usa este caché por defecto. Aquí, procesa una transacción tras otra, lo que significa que no procesará una transacción muchas veces. Principalmente, reduce la cantidad de consultas SQL que necesita generar dentro de una transacción determinada. Es decir, en lugar de actualizar después de cada modificación realizada en la transacción, actualiza la transacción solo al final de la transacción.

1.2) Caché de segundo nivel

Caché de segundo nivel siempre se asocia con el Objeto de sesión de fábrica. Mientras ejecuta las transacciones, en el medio carga los objetos en el nivel de Session Factory, de modo que esos objetos estarán disponibles para toda la aplicación, no vinculados a un solo usuario. Dado que los objetos ya están cargados en el caché, cada vez que la consulta devuelve un objeto, en ese momento no es necesario realizar una transacción en la base de datos. De esta forma funciona la caché de segundo nivel. Aquí también podemos usar el caché de nivel de consulta.

Citado de: http://javabeat.net/introduction-to-hibernate-caching/

Hay una explicación bastante buena del almacenamiento en caché de primer nivel en el blog de Streamline Logic.

Básicamente, el almacenamiento en caché de primer nivel ocurre por sesión, mientras que el almacenamiento en caché de segundo nivel se puede compartir en varias sesiones.

Aquí una explicación básica de la caché de hibernación…

El caché de primer nivel está asociado con el objeto de “sesión”. El alcance de los objetos de caché es de sesión. Una vez que se cierra la sesión, los objetos almacenados en caché desaparecen para siempre. El caché de primer nivel está habilitado de manera predeterminada y no puede deshabilitarlo. Cuando consultamos una entidad por primera vez, se recupera de la base de datos y se almacena en el caché de primer nivel asociado con la sesión de hibernación. Si consultamos el mismo objeto nuevamente con el mismo objeto de sesión, se cargará desde el caché y no se ejecutará ninguna consulta SQL. La entidad cargada se puede eliminar de la sesión usando evict() método. La próxima carga de esta entidad volverá a realizar una llamada a la base de datos si se ha eliminado mediante evict() método. Todo el caché de la sesión se puede eliminar usando clear() método. Eliminará todas las entidades almacenadas en caché.

La memoria caché de segundo nivel es distinta de la memoria caché de primer nivel, que está disponible para usarse globalmente en el ámbito de la fábrica de sesiones. la caché de segundo nivel se crea en el ámbito de la fábrica de sesiones y está disponible para usarse en todas las sesiones que se crean usando esa fábrica de sesiones en particular. También significa que una vez que se cierra la fábrica de sesiones, todo el caché asociado muere y el administrador de caché también se cierra. Cada vez que la sesión de hibernación intenta cargar una entidad, en primer lugar busca una copia en caché de la entidad en el caché de primer nivel (asociada con una sesión de hibernación particular). Si la copia en caché de la entidad está presente en el caché de primer nivel, se devuelve como resultado del método de carga. Si no hay una entidad en caché en el caché de primer nivel, se busca la entidad en caché en el caché de segundo nivel. Si la caché de segundo nivel tiene una entidad almacenada en caché, se devuelve como resultado del método de carga. Pero, antes de devolver la entidad, también se almacena en la memoria caché de primer nivel para que la siguiente invocación al método de carga de la entidad devuelva la entidad desde la memoria caché de primer nivel, y no habrá necesidad de volver a la memoria caché de segundo nivel. Si la entidad no se encuentra en el caché de primer nivel y tampoco en el caché de segundo nivel, se ejecuta la consulta de la base de datos y la entidad se almacena en ambos niveles de caché, antes de regresar como respuesta de load() método.

Puntuaciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *