2014-01-10 2 views
1

Я делаю бенчмарк между двумя приложениями, один из которых построен с JPA 2/Hibernate 4, а другой - с JDBC. В целом, различия не слишком велики (меньше, чем на порядок). Единственное исключение - когда я получаю записи по первому ключу.
Использование JDBC составляет менее 10 мс, а с использованием Hibernate - менее 60 мс. Я установил ehcache, но для этого конкретного запроса разница остается прежней.
Есть ли какой-нибудь трюк или хак, который мне не хватает?Поиск по первичному ключу с Hibernate/JPA против JDBC

--- Отредактированный

отображение JPA и классы построены с Hibernate Tools, и в этом нет ничего особенного о них. JDBC восстанавливает объекты PL/SQL из Oracle (которые, как я тестировал на других тестах, медленнее, чем восстановление исходных данных).

Когда сложность теста возрастает, сравнение между обеими технологиями становится более четным, и в конечном итоге Hibernate/JPA лучше подходит для некоторых тестов (например, для восстановления множества сложных объектов).

Дело в том, что я не могу совершать какие-либо операции с Hibernate/JPA, что занимает меньше времени, чем около 60 мс. Похоже, что существует минимальное количество времени, которое Hibernate/JPA берет на выполнение наименее дорогостоящей транзакции (в этом случае восстановить запись по PK). Есть ли способ уменьшить это время?

+0

вы можете добавить простой пример (определение компонента, таблица создания скриптов ...)? – esmoreno

+0

Определения bean создаются с помощью Hibernate Tools – Andres

+0

Пожалуйста, добавьте определение компонента и связанную таблицу сценариев – esmoreno

ответ

0

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

+0

Хорошо, но знаете ли вы, как уменьшить накладные расходы? – Andres

+0

Вы, вероятно, не можете. Возможно, вы можете включить некоторое кэширование, чтобы избежать взаимодействия с базами данных, но это может рассматриваться как обман. Это сочетание использования JPA/Hibernate: вы получаете мощный инструмент, плюс производительность и удобство в обмен на некоторую производительность плюс. Я использую, чтобы сказать, что это позволяет вам сосредоточить свои усилия на бизнесе и ключевых точках производительности, вместо того, чтобы переоптимизировать каждый запрос. – juanignaciosl

Смежные вопросы