Как вы все знаете, Hibernate вводит служебные данные в основном для всех операций с базой данных из-за управления внутренним кешем и состоянием объекта.Повысить производительность выборки с помощью Hibernate
В нашем приложении мы читаем данные с использованием простого SQL (JDBC) и используем Hibernate для сохранения и обновления. Причина в том, что нам нужно загружать много информации при каждом запуске расчета, но обновлять только ограниченную часть.
Теперь мы знаем, что этот подход не совсем чистым, и мы сделали несколько тестов, где мы пытались тонко настроить чтение Hibernate, но то, что мы достигли в следующем:
время чтения JDBC (session.doWork) : 23 сек
Читать время Hibernate (session.createQuery с ленивым выборки): 94 s
нам кажется, что существующие накладные расходы из-за дополнительной обработки Hibernate и нам было интересно, если распараллеливания прочитать сам может быть какой-либо помощи (мы читаем много таблиц, которые мы могли бы сделать параллельно)? Сессия и транзакция Hibernate, предназначенная для безопасного использования нескольких потоков?
Кроме того, если у вас есть какая-либо другая идея, что может помочь ускорить это, мы будем благодарны.
Спасибо за быстрый ответ, но швы, что мы испробовали все, что и теперь мы застряли с этим 4x накладных расходов. – mario
@mario: Вы пробовали профилировать? Но, честно говоря, 23 секунды в сыром JDBC означает, что вы делаете * много запросов, не ожидайте, что Hibernate будет сравнимо быстрее со всеми издержками отражения/HQL (может быть, API критериев или [пакетная обработка] (http: // docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html)) Также Hibernate не самый быстрый поставщик JPA: http://www.jpab.org –
Мы читаем много данных, но с несколькими запросами. Мой инстинкт говорит мне, что ожидается 2-5 раз над головой, и наши достижения (4x) соответствуют ожиданиям. Я проверю jpab (пока не слышал об этом). Благодаря! – mario