Подтвердить что ты не робот

Пул подключения базы данных Java (BoneCP vs DBPool vs c3p0)

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 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 оказалась самой важной функциональностью в производственной среде для нас.

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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

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