Hibernate: Что делает соединения JDBC дорогими? - PullRequest
3 голосов
/ 21 июня 2011

Я читал книгу о Hibernate и натолкнулся на следующее утверждение об объекте Session.

.... Но, как вы знаете, удерживать соединения JDBC между несколькими запросами не рекомендуется, посколькуэто дорогой ресурс.Таким образом, если мы хотим поддерживать Hibernate Session в течение длительных периодов, делая его охватывающим несколько запросов для повторного использования постоянных экземпляров, мы хотим отключить JDBC-соединение сеанса для каждого запроса, не закрывая сеанс.Мы можем использовать методы disconnect () и reinnect () в интерфейсе Session для поддержки такого рода требований.

Делает ли отключение и повторное подключение JDBC более дорогим, чем сохранение его таким, как есть?Что именно делает ресурс дорогим?

Ответы [ 3 ]

8 голосов
/ 21 июня 2011

Процесс рукопожатия, охватывающий несколько компьютеров (если ваш db-сервер размещен в сети), который происходит при создании (установлении) нового соединения, делает его дорогостоящим. Вот почему рекомендуется использовать пул соединений или, в вашем случае, сеанс. Это может включать поиск хоста, начальное соединение и последующие команды управления.

7 голосов
/ 21 июня 2011

Разъединение и переподключение на интерфейсе сеанса, как правило, фактически не завершают соединение с базой данных.Предполагается, что вы используете провайдера из пула, а отключение сеанса просто возвращает фактическое соединение JDBC в пул для использования кем-то другим.

Для крупномасштабной СУБД издержки открытых соединений и открытых курсоров слишком великивыше, чем накладные расходы для веб-запроса на сервере приложений Java.Физический компьютер, который может обрабатывать сотни одновременных веб-запросов в качестве сервера приложений, может обрабатывать только 30-50 одновременных подключений в качестве сервера Oracle 11.(только личный / случайный опыт, а не реальный тест.)

Если вы сидите на соединении в течение всего цикла «разговоров», ваша пропускная способность сети ограничена ресурсами базы данных, которые, опять же, имеют тенденцию исчерпывать себя.быстрее, чем потоки обработчика веб-запросов.Удерживая соединение столько, сколько вам нужно, а не весь жизненный цикл запроса, меньшее количество потоков веб-запросов блокируется при ожидании соединения с базой данных.

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

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

Лучший компромисс - использовать пул соединений. Таким образом, одно соединение распределяется между несколькими вещами, которые в этом нуждаются. Это экономит много времени и ресурсов, и, учитывая, что в большинстве случаев соединение не используется постоянно, лучше использовать общий доступ.

...