2011-02-02 3 views
22

Я очень незнакомый с Hibernate и только что начал работать над веб-приложением, которое использует его с базой данных MySQL. Я замечаю, что в сообщении community documentation tutorial указано:Hibernate: Каков пул соединений и почему он по умолчанию не подходит для производства?

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

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

ответ

35

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

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

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

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

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

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

+1

@ jpkrohling, Отличное объяснение :-) –

-5

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

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

+0

Спасибо за ваш ответ, это «сообщество документация "устарела? – Kryptic

+0

Нет, я так не думаю. Кажется, проблема связана скорее с инерцией сообщества. Начиная с версии 3.3 (2008) C3P0 отключен от спящего режима (поставщик C3P0ConnectionProvider переместился из ядра), и похоже, что разработчики пытаются сделать использование c3p0 менее простым, но сообщество всегда возвращается к своим старым привычкам. –

+0

Есть ли у вас какая-либо ссылка, подтверждающая ваше утверждение о том, что пул соединений по умолчанию в Hibernate - c3p0? –

0

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

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

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

Hikari https://github.com/brettwooldridge/HikariCP

Vibur http://www.vibur.org/

+0

Ссылка на решение приветствуется, но, пожалуйста, убедитесь, что ваш ответ полезен без него: [добавить контекст вокруг ссылки] (/ /meta.stackexchange.com/a/8259), чтобы ваши друзья-пользователи имели представление о том, что это такое и почему оно есть, а затем цитируйте наиболее значимую часть страницы, на которую вы ссылаетесь, в случае недоступности целевой страницы. [Ответы, которые немного больше, чем ссылка, могут быть удалены.] (// stackoverflow.com/help/deleted-answers) –

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылка для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/17611635) – glennsl

+0

Привет, полицейский, мой ответ - это просто помощь людям, которые здесь заходят. Трудно сказать, какой пул соединений является подходящим. Поэтому я стараюсь быть как можно более нейтральным. Конечно, вы можете понизить, но это не Википедия здесь, это мнение основано наверняка, но ни один парусник не умрет просто путем ответа здесь с некоторыми ссылками. Поэтому, пожалуйста, старайтесь быть не таким грубым. – Thomas

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