DBCP устарел и не выпускается. Некоторое время назад мы провели внутренний анализ этих двух, создав тестовое устройство, которое генерировало нагрузку и параллелизм по отношению к обоим, чтобы оценить их пригодность в реальных условиях.
DBCP последовательно генерировал исключения в нашем тестовом приложении и изо всех сил пытался достичь уровней производительности, которые C3P0 был более чем способен обрабатывать без каких-либо исключений.
C3P0 также надежно обрабатывает разъединения БД и прозрачное повторное соединение при возобновлении, тогда как DBCP никогда не восстанавливал соединения, если ссылка была удалена из-под него. Хуже того, DBCP возвращал объекты Connection приложению, для которого был нарушен базовый транспорт.
С тех пор мы использовали C3P0 в 4 основных потребительских веб-приложениях с высокой нагрузкой и никогда не оглядывались назад.
ОБНОВЛЕНИЕ: Оказывается, после многих лет сидения на полке люди из Apache Commons вывели DBCP из состояния покоя, и теперь он снова активно развивается. Таким образом, мой оригинальный пост может быть устаревшим.
Тем не менее, я еще не испытывал производительность этой новой обновленной библиотеки и не слышал о том, что она была де-факто в какой-либо недавней среде разработки приложений.
Я приглашаю вас попробовать BoneCP - это бесплатно, с открытым исходным кодом и быстрее, чем доступные альтернативы (см. Раздел тестов).
Отказ от ответственности: я автор, чтобы вы могли сказать, что я предвзятый :-)
ОБНОВЛЕНИЕ: По состоянию на март 2010 года, он все еще примерно на 35% быстрее, чем новый переписанный пул Apache DBCP ("tomcat jdbc"). Смотрите ссылку на динамический тест в разделе тестов.
Обновление № 2: (Dec '13) После 4 лет на вершине, теперь есть гораздо более быстрый конкурент: https://github.com/brettwooldridge/HikariCP
Обновление № 3: (сентябрь '14). Считайте, что BoneCP устарела на этом этапе, рекомендуем перейти на HikariCP .
Обновление № 4: (апрель '15) - мне больше не принадлежит домен jolbox.com
источник
У меня были проблемы с DBCP, когда время соединения истекло, поэтому я попробовал c3p0. Я собирался выпустить это в производство, но затем начал тестирование производительности. Я обнаружил, что c3p0 работал ужасно. Я не мог настроить его так, чтобы он работал хорошо. Я нашел это в два раза медленнее, чем DBCP.
Затем я попробовал пул соединений Tomcat .
Это было в два раза быстрее, чем c3p0 и исправило другие проблемы, которые у меня были с DBCP. Я провел много времени, исследуя и тестируя 3 пула. Мой совет, если вы развертываете в Tomcat, это использовать новый пул Tomcat JDBC.
источник
Для проблемы автоматического переподключения с DBCP, кто-нибудь пробовал использовать следующие 2 параметра конфигурации?
источник
testOnBorrow
имеет значение по умолчаниюtrue
, поэтому, еслиvalidationQuery
оно определено, DBCP будет проверять каждое соединение, прежде чем оно будет передано приложению.Другой альтернативой является HikariCP .
Вот сравнительный тест
источник
Уже несколько лет использую DBCP. Он стабилен, выживает при перезагрузке сервера БД. Просто настройте это правильно. Требуется указать только несколько параметров, поэтому не ленитесь. Вот фрагмент нашего системного производственного кода, в котором перечислены параметры, которые мы явно установили для его работы:
источник
Вот несколько статей, которые показывают, что DBCP имеет значительно более высокую производительность, чем C3P0 или Proxool. Кроме того, по моему собственному опыту, c3p0 имеет некоторые приятные функции, такие как готовый пул операторов, и более настраиваемый, чем DBCP, но DBCP явно быстрее в любой среде, в которой я его использовал.
Разница между dbcp и c3p0? Абсолютно ничего! (Блог разработчиков Sakai)
http://blogs.nyu.edu/blogs/nrm216/sakaidelic/2007/12/difference_between_dbcp_and_c3.htmlСм. Также статью JavaTech «Showdown Pool Pool» в комментариях к сообщению в блоге.
источник
Другая альтернатива, Proxool, упоминается в этой статье .
Возможно, вам удастся выяснить, почему Hibernate связывает c3p0 для реализации пула соединений по умолчанию?
источник
К сожалению, они все устарели. DBCP недавно был обновлен, двум другим 2-3 года, со многими выдающимися ошибками.
источник
Dbcp готов к работе, если настроен правильно.
Например, он используется на коммерческом веб-сайте с 350000 посетителями в день и с пулами в 200 соединений.
Он отлично справляется с таймаутами, если вы правильно его настроили.
Версия 2 находится в процессе разработки и имеет фон, который делает ее надежной, поскольку многие производственные проблемы были решены.
Мы используем его для нашего пакетного серверного решения, и оно запускает сотни пакетов, которые работают с миллионами строк в базе данных.
Тесты производительности, выполняемые tomcat jdbc pool, показывают, что он имеет лучшую производительность, чем cp30.
источник
Просто закончил тратить полтора дня с DBCP. Несмотря на то, что я использую последнюю версию DBCP, я столкнулся с теми же проблемами, что и j pimmel . Я бы вообще не рекомендовал DBCP, особенно это умение выбрасывать соединения из пула, когда БД уходит, невозможность переподключения при возврате БД и неспособность динамически добавлять объекты соединений обратно в пул (он навсегда зависает на пуле). сообщение JDBCconnect I / O сокет читать)
Я перехожу на C3P0 сейчас. Я использовал это в предыдущих проектах, и это работало и работало как шарм.
источник
c3p0 хорош, когда мы используем проекты с многопоточностью. В наших проектах мы использовали одновременное выполнение нескольких потоков с использованием DBCP, затем мы получили тайм-аут соединения, если мы использовали большее количество потоков. Итак, мы пошли с конфигурацией c3p0.
источник
Хорошей альтернативой, которая проста в использовании, является DBPool .
«Утилита пула соединений с базой данных на основе Java, поддерживающая истечение срока действия, кэширование операторов, проверка соединения и простая настройка с помощью диспетчера пула»
http://www.snaq.net/java/DBPool/
источник
Мы столкнулись с ситуацией, когда нам нужно было ввести пул соединений, и перед нами было 4 варианта.
Мы провели несколько тестов и сравнений на основе наших критериев и решили перейти на HikariCP. Прочитайте эту статью, которая объясняет, почему мы выбрали HikariCP.
источник
Чтобы реализовать C3P0 наилучшим образом, проверьте этот ответ
C3P0 :
Для корпоративных приложений C3P0 является лучшим подходом. C3P0 - это простая в использовании библиотека для расширения традиционных (основанных на DriverManager) драйверов JDBC с помощью JNDI-связанных источников данных, включая источники данных, которые реализуют пул соединений и операторов, как описано в спецификации jdbc3 и расширении jdbc2 std. C3P0 также надежно обрабатывает разъединения БД и прозрачное повторное соединение при возобновлении, тогда как DBCP никогда не восстанавливал соединения, если ссылка была удалена из-под него.
Вот почему c3p0 и другие пулы соединений также подготовили кеши операторов - это позволяет коду приложения избегать всего этого. Операторы обычно хранятся в некотором ограниченном пуле LRU, поэтому общие операторы повторно используют экземпляр PreparedStatement.
Хуже того, DBCP возвращал объекты Connection приложению, для которого был нарушен базовый транспорт. Распространенным вариантом использования c3p0 является замена стандартного пула соединений DBCP, включенного в Apache Tomcat. Часто программист сталкивается с ситуацией, когда соединения неправильно перезаписываются в пуле соединений DBCP, и в этом случае c3p0 является ценной заменой.
В текущих обновлениях C3P0 имеет несколько блестящих функций. те даны ниже:
Здесь, максимальный и минимальный размер пула определяют границы соединения, что означает, какое минимальное и максимальное соединение будет принимать это приложение.
MaxIdleTime()
определить, когда он освободит простое соединение.DBCP :
Этот подход также хорош, но имеет некоторые недостатки, такие как время ожидания соединения и повторное освобождение соединения. C3P0 хорош, когда мы используем проекты с многопоточностью. В наших проектах мы использовали одновременное выполнение нескольких потоков с использованием DBCP, затем мы получили тайм-аут соединения, если мы использовали большее количество потоков. Итак, мы пошли с конфигурацией c3p0. Я бы вообще не рекомендовал DBCP, особенно это умение выбрасывать соединения из пула, когда БД уходит, его невозможность переподключения при возврате БД и его неспособность динамически добавлять объекты соединений обратно в пул (он навсегда зависает на пуле). сообщение JDBCconnect I / O сокет читать)
Спасибо :)
источник
моя рекомендация
hikari> друид> UCP> c3p0> DBCP
Он основан на том, что я тестировал - 20190202, в моей локальной тестовой среде (4 ГБ mac / mysql в докере / пуле minSize = 1, maxSize = 8), hikari может обслуживать 1024 потока x 1024 раза для получения соединений, среднее время для каждого потока до конца 1 или 2 миллиона секунд, в то время как c3p0 может обслуживать только 256 потоков x 1024 раза, а среднее время для каждого потока уже составляет 21 миллион секунд. (512 потоков не удалось).
источник