Рубрики
Без рубрики

Высокопроизводительная сохраняемость Java – Глава 13 – Очистка

Автор оригинала: Vlad Mihalcea.

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

В этой главе объясняется внутренняя работа реализации контекста сохранения спящего режима.

13. Flushing 
13.1 Flush modes
13.2 Events and the action queue
13.2.1 Flush operation order
13.3 Dirty Checking 
13.3.1 The default dirty checking mechanism 
13.3.1.1 Controlling the Persistence Context size 
13.3.2 Bytecode enhancement 

Как объяснено в разделе оптимизация на основе записи, контекст сохранения действует как кэш с обратной записью транзакций. Сеанс гибернации обычно называют кэшем первого уровня, поскольку каждый управляемый объект хранится на Карте, и после загрузки объекта любой последующий запрос обслуживает его из кэша, что позволяет избежать обхода базы данных. Однако, помимо кэширования сущностей, Контекст сохранения действует как буфер перехода состояния сущности.

Как и любой кэш с последующей записью, контекст сохранения требует очистки для синхронизации постоянного состояния в памяти с базовой базой данных. Во время сброса Hibernate может определить, изменился ли управляемый объект с момента его загрузки, и запустить обновление строк таблицы. Этот процесс называется грязной проверкой, и он значительно упрощает операции на уровне доступа к данным.

Однако наличие промежуточного кэша с последующей записью не обходится без проблем, и контекст сохранения может быть подвержен несоответствиям данных. Поскольку эффективность бессмысленна, если эффективность ставится под угрозу, цель этой главы-проанализировать внутреннюю работу механизма промывки, чтобы разработчик приложения знал, как его оптимизировать, не влияя на согласованность данных.