Кэширование в спящем режиме второго уровня - Сделать объект доступным на уровне фабрики сессий?

У меня есть некоторое понимание того, как этот уровень кэширования первого и второго уровня используется в спящем режиме. Есть много вопросов, связанных с этим - да, я согласен

Но мое замешательство. В кэшировании первого уровня, до тех пор, пока я не зафиксирую транзакцию, мои данные не будут сохранены в БД, поэтому другие сессии не узнают об этих изменениях до этого. Если кэширование второго уровня выводит сущности на уровень фабрики сессий! Означает ли это, что мои изменения в одном сеансе могут быть использованы другими сеансами еще до того, как я совершу транзакцию?

И когда произойдет обновление до дБ при использовании кэширования второго уровня? в 1й это произойдет при завершении транзакции

Я привел много обсуждений в этой теме, и я не могу найти точные ответы!

1 ответ

Ваши обновления определенно не передаются другим сеансам, пока вы не совершите транзакцию. Если что-то подобное происходит, это серьезная ошибка.

Нет никакой разницы в фиксации БД с или без 2LC, кроме того факта, что 2LC может завершить транзакцию до того, как БД будет полностью зафиксирован. Как JPA, так и транзакции Hibernate, отличные от JPA, выполняют двухфазную фиксацию, при которой все ресурсы сначала уведомляются о том, что транзакция фиксируется, получают некоторые блокировки и т. Д., И, если все ресурсы успешны, изменения сохраняются / публикуются.

Транзакционный кеш не слишком отличается от обычной БД: он делает вид, что изменения уже применены, но скрывает их от других транзакций; это называется многоверсионным параллельным управлением (MVCC).

Другие вопросы по тегам