Hibernate: Что такое пул соединений и почему он по умолчанию не подходит для работы? - PullRequest
36 голосов
/ 03 февраля 2011

Я очень незнаком с Hibernate и только начал работать над веб-приложением, которое использует его с базой данных MySQL.Я заметил, что в документации по сообществу *1001* говорится:

Встроенный пул соединений Hibernate никоим образом не предназначен для производственного использования.В нем отсутствуют некоторые функции, которые есть в любом приличном пуле соединений.

Может кто-нибудь уточнить это?Чего именно не хватает и какие проблемы возникают у людей с «по умолчанию»?По поиску я нашел веб-сайт здесь , но он на самом деле не объясняет проблемы, только то, что вы должны использовать вместо этого.

Ответы [ 3 ]

50 голосов
/ 03 февраля 2011

Что такое пул соединений и почему он по умолчанию не подходит для производства? Может кто-нибудь уточнить это?

Пул соединений - это техника для открытия / подготовки / закрытия соединений. Механизм пула соединений - это часть программного обеспечения (компонента), которой вы делегируете функцию управления соединениями. Ваше приложение будет просто запрашивать соединение, использовать его и доставлять обратно в пул. Компонент отвечает за открытие N соединений и оставляет их готовыми к тому моменту, когда запросит ваше приложение. Если соединение устарело, механизм объединения затем закроет его и снова откроет новое. Это обеспечивает более эффективное использование соединений, поскольку вам не нужно ждать установления соединения во время фактического выполнения вашего кода и вам не нужно беспокоиться об устаревших соединениях.

Hibernate на самом деле не предоставляет никакого реального механизма пула соединений. Он предоставляет менеджер внутренних соединений, который является очень элементарным. Причина проста: почти (если не все) серверы приложений (например, JBoss AS) и контейнеры сервлетов (например, Tomcat) по умолчанию предоставляют механизм пула соединений. Таким образом, ваше приложение не должно беспокоиться о деталях. Он просто запрашивает у AS соединение.

На мой взгляд, есть только два случая, когда вам нужно беспокоиться о пуле соединений:

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

Но, по моему опыту, большинство людей, использующих "внешний" пул соединений, делают это из-за недостатка знаний о пуле соединений и из-за недостатка знаний об их контейнере.

2 голосов
/ 13 октября 2017

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

Вот некоторые недавние (2017 г.) рекомендации по объединению отдельных приложений в алфавитном порядке:

C3P0 http://www.mchange.com/projects/c3p0/

Хикари https://github.com/brettwooldridge/HikariCP

Вибур http://www.vibur.org/

0 голосов
/ 03 февраля 2011

Пул соединений по умолчанию в спящем режиме - c3p0 , названный в честь символа звездных войн.Но hibernate также поддерживает proxool и используется для рекламы apache dbcp .Какое-то время DBCP находился в состоянии покоя и потерял самообладание.

C3P0 фактически используется в производстве во многих проектах.Хотя иногда наблюдается плохое поведение в пиковое время.Есть несколько альтернатив.Как, например, новый пул соединений, включенный в Tomcat 7. Я еще не тестировал его, но услышал некоторые положительные отзывы об этом.

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