Ускорение создания объекта Hibernate? - PullRequest
4 голосов
/ 03 июня 2011

Мы используем Hibernate в качестве нашего слоя ORM поверх базы данных MySQL.У нас есть довольно много модельных объектов, некоторые из которых довольно большие (с точки зрения количества полей и т. Д.).Некоторые из наших запросов требуют, чтобы большая часть (если не все) объектов модели извлекалась из базы данных для выполнения различных вычислений по ним.

У нас включена отложенная загрузка, но в некоторых случаях она все еще занимаетзначительное количество времени для Hibernate для заполнения объектов.Время выполнения MySQL-запроса очень быстрое (порядка нескольких миллисекунд), но тогда Hibernate тратит время на заполнение объектов.

Есть ли способ / шаблон / оптимизация, чтобы ускорить этопроцесс?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

Один из подходов состоит в том, чтобы не заполнять сущность, а какой-то объект вида.

Если предположить, что у CustomerView есть соответствующий конструктор, вы можете сделать

select new CustomerView(c.firstname, c.lastname, c.age) from Customer c

Хотя я немногоудивлен тем, что Hibernate медленно заполняет объекты, если только вы не загрузили связанные объекты каскадом и не забыли несколько подходящих выборок.

1 голос
/ 31 июля 2011

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

Hibernate занимает приятное время для заполнения объектов.

Откуда ты знаешь, что проблема в Hibernate? Другими словами, является ли проблема самой Hibernate, или не хватает памяти (или слишком много), чтобы JVM не работала эффективно?

Также вы упоминаете

У нас довольно много модельных объектов, некоторые из которых довольно большие (с точки зрения количества полей и т. Д.).

Сколько это "довольно большой"? Десятки? Сотни? Тысячи? Это имеет большое значение, потому что реляционные базы данных (такие как MySQL) начинают работать хуже, поскольку ваша таблица становится «шире» (см. Этот вопрос: Есть ли снижение производительности, если в таблице слишком много столбцов? ).

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

1 голос
/ 03 июня 2011

Возможно, стоит добавить кэш второго уровня? Это не обязательно ускорит создание объекта, но может значительно снизить частоту, с которой вам нужно это сделать.

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html

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