Каковы кэши первого и второго уровня в Hibernate?



может ли кто - нибудь объяснить простыми словами, Что такое кэширование первого и второго уровня в Hibernate?

760   7  

7 ответов:

1.1) кэш первого уровня

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

1.2) кэш второго уровня

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

цитата из: http://javabeat.net/introduction-to-hibernate-caching/

есть довольно хорошее объяснение кэширования первого уровня на Упорядочить Логику блог.

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

вот некоторые основные объяснения спящего режима кэша...

кэш первого уровня связан с объектом "сеанс". Область действия объектов кэша имеет сеансовый характер. После закрытия сеанса кэшированные объекты исчезают навсегда. Кэш первого уровня включен по умолчанию, и вы не можете отключить его. При первом запросе сущности она извлекается из базы данных и хранится в кэше первого уровня, связанном с сеансом гибернации. Если мы снова запросим тот же объект с тем же объектом сеанса, это будет загружается из кэша и sql-запрос не будет выполнен. Загруженный объект может быть удален из сеанса с помощью evict() метод. Следующая загрузка этой сущности снова вызовет вызов базы данных, если она была удалена с помощью evict() метод. Весь кэш сеанса может быть удален с помощью clear() метод. Он удалит все объекты, хранящиеся в кэше.

кэш второго уровня отличается от кэша первого уровня, который доступен для использования глобально в области фабрики сеансов. кэш второго уровня создан в области фабрики сеансов и доступен для использования во всех сеансах, созданных с использованием этой конкретной фабрики сеансов. Это также означает, что после закрытия фабрики сеансов все связанные с ней кэш умирают, а диспетчер кэша также закрывается. Всякий раз, когда сеанс hibernate пытается загрузить объект, самое первое место он ищет кэшированную копию объекта в кэше первого уровня (связанный с конкретным сеансом hibernate). Если кэшированная копия сущности присутствует в кэше первого уровня, то это возвращается в результате метода load. Если в кэше первого уровня нет кэшированной сущности, то кэш второго уровня ищет кэшированную сущность. Если кэш второго уровня имеет кэшированную сущность,она возвращается как результат метода load. Но, прежде чем вернуть сущность, она хранится в кэше первого уровня также Так, что следующий вызов метода load для сущности вернет сущность из самого кэша первого уровня, и не будет необходимости снова переходить в кэш второго уровня. Если сущность не найдена в первом кэш уровня и кэш второго уровня также, Затем выполняется запрос базы данных и объект хранится на обоих уровнях кэша, прежде чем вернуться в качестве ответа load() метод.

кэш первого уровня

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

обратная запись больше связана с гибернацией, а не с какой-либо логической или физической транзакцией. Во время транзакции сброс может происходить несколько раз раз.

enter image description here

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

из-за кэша первого уровня Hibernate может выполнять несколько оптимизаций:

второго уровня кэш

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

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

для получения более подробной информации, проверьте в этой статье.

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

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

Кэш Первого Уровня

объект сеанса содержит данные кэша первого уровня. Он включен по умолчанию. Данные кэша первого уровня не будут доступны для всего приложения. Приложение может использовать много объектов сеанса.

Кэш Второго Уровня

объект SessionFactory содержит данные кэша второго уровня. Данные, хранящиеся в кэше второго уровня, будут доступны для всего приложения. Но мы должны включить его явно.

в кэше второго уровня файлы HBM домена могут иметь ключ изменяемый и значение false. Например, В этом классе предметной области некоторая продолжительность в день остается постоянной как универсальная истина. Таким образом, он может быть помечен как неизменяемый в приложении.

Comments

    Ничего не найдено.