Какой смысл указывать hibernate.jdbc.batch_size? - PullRequest
15 голосов
/ 20 января 2012

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

Но что-то меня смущает. Каждая реализация, которую я видел, включая этот сайт имеет явный приток и очистку. Нет проблем, но в чем смысл свойства конфигурации?

Примечание: я предполагаю, что Hibernate каким-то образом отслеживает размер кэша, и если число объектов определенного типа становится больше размера кэша, то синхронизируйте кэш с базой данных. Не знаю, неверно ли это предположение ???

1 Ответ

22 голосов
/ 21 января 2012

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

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

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

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