Настройки производительности Hibernate - PullRequest
4 голосов
/ 28 января 2009

По вашему опыту, какие хорошие настройки производительности Hibernate? Я имею в виду это с точки зрения вставок / обновлений и запросов.

Ответы [ 3 ]

5 голосов
/ 25 января 2011

Некоторые советы по настройке производительности Hibernate:

  • Избегайте дубликатов объединений, вызванных параллельными множественными ассоциативными выборками-соединениями (следовательно, избегайте дублирования экземпляров объектов)
  • Использовать отложенную загрузку с fetch = "subselect" (предотвращает проблему выбора N + 1)
  • На огромных результирующих наборах только для чтения не загружаться в сопоставленные объекты, а в плоские DTO (с проекциями и AliasToBean-ResultTransformer)
  • Применить массовое обновление HQL, массовое удаление и вставка по выбору
  • Используйте FlushMode. Никогда там, где это необходимо

Взято из http://arnosoftwaredev.blogspot.com/2011/01/hibernate-performance-tips.html

4 голосов
/ 28 января 2009

Я не уверен, что это твик, но выборка из соединения может быть полезна, если у вас есть много к одному, которое, как вы знаете, вам понадобится. Например, если Person может быть членом одного Департамента, и вы знаете, что вам понадобятся оба в одном конкретном месте, вы можете использовать что-то вроде из Person p left join fetch p.department, и Hibernate вместо этого сделает один запрос одного запроса для лица, за которым следуют n запросов для отдела.

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

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

0 голосов
/ 28 января 2009

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

Tweaks? Hibernate генерирует для вас SQL на основе отображаемых вами отображений. Если вам не нравится SQL, то, возможно, Hibernate не правильный инструмент.

Остальная производительность связана с дизайном базы данных: нормализация, индексы и т. Д.

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