web-dev-qa-db-ja.com

Javaデータベース接続プール(BoneCP vs DBPool vs c3p0)

J2EEコンテナのJava appoutside)の場合、どの接続プールライブラリが最適ですか?

  • C3p0が古くなっていると聞きました。
  • ジャカルタの共通プールライブラリはもう開発中ではありません

したがって、 BoneCP および DBPool が残ります。私が知る限り、どちらも活動が限られています。私が見ることができる主な違いは、BoneCPが勝っているように見えるパフォーマンスです。ただし、ドキュメントはかなり弱いです。

実世界でどのデータベースプールライブラリを使用しましたか。その理由は何ですか。良い点と悪い点は何でしたか?

22

職場では(c3p0の代わりに)BoneCPを使用しており、私が知る限り、問題はありませんでした(自分でアップグレードはしませんでした)。私が見たり読んだりしたことから、それはうまく設計された堅実なライブラリのようであり、私はそれを他の選択肢よりも個人的に使用します。

DBPoolについて否定的なことは何もありませんが、私はDBPoolに精通していません。そのサイトのドキュメントを見ると確かにプラスのようですが。

16
StaxMan

Tomcatの内外でC3P0を使用しています。ただし、監視とロギングは最高ではないため、SpringSource接続プールの使用を開始します。私が楽しみにしている最高の機能の1つは、特定の時間に実行されているSQLステートメントを正確に表示することです。

C3P0に追加する必要があることの1つは、プールがいっぱいですべての接続がビジーであるときに、特定の接続要求が接続を待機する時間を計る手段でした。

            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は、本番環境で最も重要な機能であることがわかりました。

4
Scott A

BoneCPを置き換えるHikariCPを見てください https://brettwooldridge.github.io/HikariCP/ これは私のプロジェクトで現在使用しているものです。

2
adoalonso

数年前に私たちが選択を行っていたとき、それはちょうどc3p0とdbcpの間でした。当時、c3p0は、Oracleの再起動後に接続を再構築できるものでした。 DBCPでは、アプリサーバーを再起動して再度実行する必要がありました。

また、c3p0デバッグハング接続機能は、他の方法では見つけるのが非常に難しい接続リークを追跡するのに非常に役立つことがわかりました。

私がc3p0に欠けていたのは、実行されたステートメントのログに、それらにかかった時間に関する情報を記録するのに役立ちます。

1
mrembisz

DataNucleus/JPAと一緒にc3p0を使用していたので、BoneCPに簡単に切り替えることができました。実際に私がしなければならなかったのは、SpringコンテキストファイルのDataSource構成を変更することだけです。

私が見た限りでは、BoneCPベンチマークは本当に良いです: http://www.databaseskill.com/2282333/http://jolbox.com/benchmarks.html

0
Adrian Ber

私は現在、大企業のイントラネット環境でBoneCPを試しています。私はc3p0(掘り下げればかなり一般的な問題)で一貫したスレッドの問題を抱えていたので、調査を行いましたが、それは最高のストックライブラリのようでした。構成は少し練習ですが、一度それを取得すると、それは素晴らしいようです。

0
eric