#java #database #connection-pooling #c3p0 #bonecp
#java #База данных #объединение в пул соединений #c3p0 #bonecp
Вопрос:
Какая библиотека пула подключений является наилучшей для Java-приложения, находящегося за пределами в контейнере J2EE?
- Я слышал, что c3p0 устаревает.
- Библиотека общего пула Джакарты больше не разрабатывается
Поэтому я остаюсь с BoneCP и DbPool. Из того, что я могу сказать, оба имеют ограниченную активность. Основное различие, которое я вижу, — это производительность, с которой BoneCP, похоже, выигрывает. Однако документация довольно слабая.
Какую библиотеку пула баз данных вы использовали в реальном мире и почему? Что было хорошим и плохим?
Комментарии:
1. Для тех, кому любопытно, я в конечном итоге выбрал BoneCP.
2. Есть ли у вас какая-либо ссылка на подробный документ по настройке BoneCP? Или, пожалуйста, не могли бы вы рассказать, как использовать BoneCP в JBoss?
Ответ №1:
На работе мы использовали BoneCP (в качестве замены c3p0), и, насколько я знаю, у нас не было никаких проблем (я не делал обновление самостоятельно). Из того, что я видел и читал, это похоже на хорошо продуманную надежную библиотеку, и я бы лично использовал ее вместо альтернатив: похоже, это одна из тех библиотек «просто работает», которые приятно иметь рядом.
Ничего плохого не могу сказать о DbPool, я просто недостаточно знаком с ним; хотя просмотр документации на его сайте, безусловно, кажется плюсом.
Комментарии:
1. Последняя версия BoneCP по-прежнему 0.7.1, означает ли это, что она все еще находится на стадии «бета» или она достаточно зрелая?
2. Имейте в виду, что управление версиями очень субъективно, зависит от контекста. Таким образом, точное значение на самом деле не имеет большого значения. Некоторые авторы не решаются называть свою библиотеку 1.0. JDOM потребовались годы, чтобы перейти к ней, даже после того, как она стала стабильной. Итак, я предполагаю, что он стабилен и удобен в использовании.
3. Тесты со страницы BoneCP [ссылка] ( jolbox.com/index.html?page=http://jolbox.com/benchmarks.html ) выглядит великолепно.
4.На данный момент я не могу рекомендовать текущую версию BoneCP. Я запускаю его в рабочей среде уже пару дней, и он неприемлемо глючит.Я бы использовал HikariCP, если бы Java 7 была для меня вариантом.
5. @StephaneGrenier смотрите две ошибки, на которые я ссылался в моем предыдущем комментарии: ошибки. launchpad.net/bonecp/ bug/1243551 и ошибки. launchpad.net/bonecp/ bug/1259257
Ответ №2:
Мы используем C3P0 как в Tomcat, так и за его пределами. Однако мониторинг и ведение журнала не самые лучшие, поэтому мы собираемся начать использовать пул подключений SpringSource. Одна из лучших функций, которых я с нетерпением жду, — это точное отображение того, какие инструкции SQL выполняются в любой конкретный момент времени.
Одна вещь, которую мы должны были добавить в C3P0, — это средство определения времени ожидания конкретного запроса на подключение, когда пул заполнен и все соединения заняты:
public Connection getConnection() throws SQLException
{
long t = System.currentTimeMillis();
ComboPooledDataSource ds = (ComboPooledDataSource) getDelegate();
Connection conn = null;
if (ds.getNumBusyConnections() == ds.getMaxPoolSize())
{
logger.info("Pool (" ds.getUser() ") full, waiting for connection");
conn = ds.getConnection();
t = System.currentTimeMillis() - t;
logger.info("Connection busy wait time (" ds.getUser() "): " t "ms");
}
else
{
conn = ds.getConnection();
}
return conn;
}
Итак, что вы должны учитывать:
- поддержка и активность (как вы отметили)
- Скорость
- мониторинг, ведение журнала и производственный контроль
BoneCP выглядит быстрым (я не слышал о нем раньше), но, честно говоря, C3P0 был более чем быстрым и для нас. Когда мы тестировали 4-5 лет назад, DBCP был ужасно медленным (похоже, они это исправили), пул Oracle был довольно медленным, а C3P0 — очень быстрым. Наш тест был очень похож на тот, что на сайте BoneCP.
Я ничего не знаю об управляемости BoneCP. # 3 оказался для нас наиболее важной функциональностью в производственной среде.
Комментарии:
1. Что касается ведения журнала конкретных инструкций sql, вы не можете включить журнал отладки для пакета java.sql?
2. Насколько я понимаю, пул SpringSource позволяет проводить проверку в реальном времени через JMX.
3. Вы также можете включить ведение журнала SQL с помощью BoneCP: jolbox.com/bonecp/downloads/site/apidocs/index.html?com/jolbox /… , методом «setLogStatementsEnabled».
4. Большинство, если не все, из них могут входить в систему. Вопрос в том, какие инструкции SQL выполняются прямо сейчас , в каких потоках, в каких пулах? Вы можете получить это из журналов с некоторой работой, но JMX проще с точки зрения операций.
5. @ScottA извините, сообщение довольно старое, но не могли бы вы указать указатель на пул SpringSource, который вы упомянули
Ответ №3:
Взгляните на HikariCP, который заменяет BoneCP https://brettwooldridge.github.io/HikariCP Это тот, который я сейчас использую в своем проекте.
Ответ №4:
Когда мы делали наш выбор пару лет назад, это было просто между c3p0 и dbcp. В то время c3p0 был тем, который мог восстанавливать свои соединения после перезапуска oracle. С DBCP нам пришлось перезапустить сервер приложений, чтобы он снова заработал.
Также я нахожу функцию зависания при отладке соединений c3p0 чрезвычайно полезной для отслеживания утечек соединений, которые в противном случае может быть чрезвычайно сложно найти.
Чего мне не хватало в c3p0, так это полезного ведения журнала для выполняемых инструкций с информацией о том, сколько времени они заняли.
Ответ №5:
В настоящее время я тестирую BoneCP в среде интрасети крупного предприятия. У меня были постоянные проблемы с потоковой обработкой с c3p0 (довольно распространенные, если покопаться), поэтому я провел свое исследование, и это показалось мне лучшей стандартной библиотекой. Настройка — это своего рода упражнение, но как только вы его выполняете, оно кажется отличным.
Ответ №6:
Я использовал c3p0 вместе с DataNucleus / JPA, и было легко переключиться на BoneCP. Практически все, что мне нужно было сделать, это изменить конфигурацию источника данных в файле контекста Spring.
Насколько я видел, тесты BoneCP действительно хороши: http://www.databaseskill.com/2282333 /, http://jolbox.com/benchmarks.html