Пул соединений с базой данных Java (BoneCP против DBPool против c3p0) - PullRequest
22 голосов
/ 09 ноября 2011

Для приложения Java вне контейнера J2EE, какая библиотека пула соединений является лучшей?

  • Я слышал, что c3p0 устарел.
  • Библиотека общего пула Джакарты больше не разрабатывается

Поэтому у меня остаются BoneCP и DBPool . Из того, что я могу сказать, оба имеют ограниченную активность. Основное различие, которое я вижу, это производительность, с которой BoneCP выигрывает. Однако документация довольно слабая.

Какую библиотеку пулов баз данных вы использовали в реальном мире и почему? Что было хорошего и плохого?

Ответы [ 6 ]

16 голосов
/ 11 ноября 2011

На работе мы использовали BoneCP (в качестве замены для c3p0) и, насколько я знаю, проблем не было (я сам не обновлялся). Из того, что я видел и читал, это похоже на хорошо спроектированную солидную библиотеку, и я бы лично использовал ее над альтернативами: это, похоже, одна из тех «просто работающих» библиотек, которые приятно иметь вокруг.

Ничего плохого не скажу о DBPool, я просто недостаточно знаком с ним; хотя просмотр его документации на сайте, безусловно, выглядит как плюс.

4 голосов
/ 09 ноября 2011

Мы используем 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;
            }

Итак, что вы должны учитывать:

  1. поддержка и активность (как вы уже заметили)
  2. Скорость
  3. мониторинг, регистрация и контроль производства

BoneCP выглядит быстро (я не слышал об этом раньше), но, честно говоря, C3P0 был более чем быстрым и для нас. Когда мы тестировали 4 или 5 лет назад, DBCP был ужасно медленным (кажется, они это исправили), пул Oracle был довольно медленным, а C3P0 - очень быстрым. Наш тест был очень похож на тест на сайте BoneCP.

Я ничего не знаю об управляемости BoneCP. № 3 оказался для нас наиболее важной функциональностью в производственной среде.

2 голосов
/ 21 июля 2016

Посмотрите на HikariCP, который заменяет BoneCP https://brettwooldridge.github.io/HikariCP/ Это то, что я сейчас использую в своем проекте.

1 голос
/ 10 ноября 2011

Когда мы делали свой выбор пару лет назад, это было как раз между c3p0 и dbcp.В то время c3p0 мог восстанавливать соединения после перезапуска оракула.С помощью DBCP нам пришлось перезапустить сервер приложений, чтобы он снова заработал.

Также я считаю, что функция отладочных подключений c3p0 чрезвычайно полезна для отслеживания утечек соединений, которые в противном случае чрезвычайно сложно найти.Чего мне не хватало в c3p0, так это полезной регистрации для выполненных операторов с информацией о том, сколько времени они заняли.

0 голосов
/ 04 марта 2015

Я использовал c3p0 вместе с DataNucleus / JPA, и было легко перейти на BoneCP.Практически все, что мне нужно было сделать, это изменить конфигурацию источника данных в файле контекста Spring.

Насколько я видел, тесты BoneCP действительно хороши: http://www.databaseskill.com/2282333/, http://jolbox.com/benchmarks.html

0 голосов
/ 22 февраля 2013

В настоящее время я тестирую BoneCP в среде интрасети большого предприятия.У меня были постоянные проблемы с многопоточностью с c3p0 (довольно распространенные, если вы копались), поэтому я провел свое исследование, и оно показалось мне лучшей стоковой библиотекой.Конфигурация - это немного упражнение, но как только вы ее отключите, она кажется великолепной.

...