Кэширование в спящем режиме второго уровня - Сделать объект доступным на уровне фабрики сессий?
У меня есть некоторое понимание того, как этот уровень кэширования первого и второго уровня используется в спящем режиме. Есть много вопросов, связанных с этим - да, я согласен
Но мое замешательство. В кэшировании первого уровня, до тех пор, пока я не зафиксирую транзакцию, мои данные не будут сохранены в БД, поэтому другие сессии не узнают об этих изменениях до этого. Если кэширование второго уровня выводит сущности на уровень фабрики сессий! Означает ли это, что мои изменения в одном сеансе могут быть использованы другими сеансами еще до того, как я совершу транзакцию?
И когда произойдет обновление до дБ при использовании кэширования второго уровня? в 1й это произойдет при завершении транзакции
Я привел много обсуждений в этой теме, и я не могу найти точные ответы!
1 ответ
Ваши обновления определенно не передаются другим сеансам, пока вы не совершите транзакцию. Если что-то подобное происходит, это серьезная ошибка.
Нет никакой разницы в фиксации БД с или без 2LC, кроме того факта, что 2LC может завершить транзакцию до того, как БД будет полностью зафиксирован. Как JPA, так и транзакции Hibernate, отличные от JPA, выполняют двухфазную фиксацию, при которой все ресурсы сначала уведомляются о том, что транзакция фиксируется, получают некоторые блокировки и т. Д., И, если все ресурсы успешны, изменения сохраняются / публикуются.
Транзакционный кеш не слишком отличается от обычной БД: он делает вид, что изменения уже применены, но скрывает их от других транзакций; это называется многоверсионным параллельным управлением (MVCC).