Можете ли вы сделать тест на дым с помощью простого запроса:
SELECT current_timestamp()
или
SELECT 1 + 1
Это скажет вам, каковы фактические издержки драйвера JDBC. Также неясно, выполняются ли оба теста с одной и той же машины.
Есть ли способ оптимизировать производительность драйвера JDBC?
Выполнять один и тот же запрос несколько тысяч раз на Java. JVM требуется некоторое время для прогрева (загрузка классов, JIT). Также я предполагаю, что SimpleJDBC.getConnection()
использует пул соединений C3P0 - стоимость установления соединения довольно высока, поэтому первые несколько операций могут быть медленными.
Также предпочитайте именованные запросы специальным запросам или критериям запроса.
И будет ли Hibernate полезен для этой оптимизации?
Hibernate - очень сложный фреймворк. Как видите, он потребляет 75% общего времени выполнения по сравнению с необработанным JDBC. Если вам нужен сырой ORM (без отложенной загрузки, грязной проверки, расширенного кэширования), рассмотрите mybatis . Или, может быть, даже JdbcTemplate
с RowMapper
абстракция.
Есть ли способ оптимизировать производительность Hibernate при преобразовании наборов результатов?
Не совсем. Ознакомьтесь с Глава 19. Повышение производительности в документации Hibernate. Существует много отражений, происходящих там + генерация классов. Еще раз, Hibernate не может быть лучшим решением, когда вы хотите выжать каждую миллисекунду из вашей базы данных.
Однако - это хороший выбор, если вы хотите повысить общее удобство работы пользователя из-за широкой поддержки кэширования. Проверьте производительность документ снова. В основном это говорит о кешировании. Существует кэш первого уровня, кэш второго уровня, кеш запросов ... Это то место, где Hibernate может на самом деле превзойти простой JDBC - он может кешировать многое способами, которые вы даже не могли себе представить. С другой стороны - плохая конфигурация кэша приведет к еще более медленной установке.
Проверить: Кеширование с Hibernate + Spring - некоторые вопросы!
Мы сталкиваемся с чем-то не настраиваемым из-за фундаментальных объектов Java и управления памятью?
JVM (особенно в конфигурации server ) работает довольно быстро. Создание объектов в куче происходит так же быстро, как в стеке, например С, сборка мусора была значительно оптимизирована. Я не думаю, что Java-версия с простым JDBC будет намного медленнее по сравнению с более родным соединением. Вот почему я предложил несколько улучшений в вашем тесте.
Неужели мы упускаем точку, мы глупы, и все это напрасно?
Я считаю, что JDBC - хороший выбор, если производительность - ваша самая большая проблема. Java успешно используется во многих приложениях с большим количеством баз данных.