Спящий уровень кеша 1 - PullRequest
       5

Спящий уровень кеша 1

3 голосов
/ 10 ноября 2010

У меня есть одно недоразумение с уровнем кэша 1. До сих пор я видел, что уровень кэша 1 используется только для того, чтобы откладывать вызовы sql до сброса транзакции.

А как же объекты? Например, я использую только уровень кэша 1. Если бы я должен был загрузить один и тот же объект несколько раз в течение одной транзакции, что бы произошло? Использует ли hibernate какую-то карту идентичности и кэширует объекты, которые были загружены в течение 1 транзакции?

Ответы [ 3 ]

3 голосов
/ 02 декабря 2012

Преимущества кэширования первого уровня по сравнению с кэшированием второго уровня:

1. В первом кэшировании levlel устраняется проблема грязного чтения. Это означает, что каждый раз при обновлении значения объекта.*

2. Это уменьшает количество циклов между клиентом и базой данных.

Недостатки кэширования первого уровня по сравнению с кэшированием второго уровня:

1. Объекткэширование первого уровня не разделяется между сеансами.

2 голосов
/ 10 ноября 2010

До сих пор я видел, что уровень кэша 1 используется только для того, чтобы откладывать вызовы sql до сброса транзакции.

Проще говоря, кэш первого уровня - это просто карта от id (первичный ключ) до объекта, который содержит состояние, связанное с этим первичным ключом.

Но вы не должны смешивать понятия сеанса и транзакции, они не одно и то же (и сеанс не обязательно ограничен областью транзакции).

Если бы я должен был загрузить один и тот же объект несколько раз в течение одной транзакции, что бы произошло?

Будет только один объект, представляющий данную строку в базе данных (т.е. для данного идентификатора). Вот что делает возможным управление состоянием, и в этом весь смысл кэша 1-го уровня.

Использует ли hibernate какую-то карту идентичности и кэширует объекты, которые были загружены в течение 1 транзакции

Смотри выше.

2 голосов
/ 10 ноября 2010

Вы правы насчет карты личности.(N) Hibernate использует карту идентификаторов (http://martinfowler.com/eaaCatalog/identityMap.html) для сохранения ранее загруженных объектов.

Однако этот кэш хранится в ISession, что означает, что вы должны совместно использовать один и тот же объект ISession вЧтобы воспользоваться этим кешем.

Если вы хотите, чтобы ваш кеш распределялся по нескольким ISession, вам следует взглянуть на (N) Hibernate Cache Level 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...