速度を犠牲にすることなく、hsqldb で接続プールを実装する最良の方法は何ですか?
3 に答える
Hibernateはから接続を取得しDataSource
、それらを使用して閉じます。接続プールが必要です。そうしないと、使用するデータベースサーバーに関係なく、アプリとDBMSの両方で多くのリソースを消費するため、非常に非効率になります。
Apache-Jakartaのcommons-dbcpを試してみてください。非常に効率的で、セットアップが非常に簡単です。それはcommons-poolに依存します。BasicDataSource
DBCPを使用してを定義するだけで、使用するように指示したJDBCドライバーからの接続が管理されます。接続の検証や他の多くのものがあります。そのうち、Webアプリを作成している場合は、独自のプールを定義する代わりに、使用するコンテナーに接続プールを構成して使用します。
リンゴとオレンジを比較しています。
- orm が必要な場合は、異なる orm ツールのパフォーマンスを同じデータベースと比較してください。
- 接続プーリングが必要な場合は、異なる接続プーリング ライブラリを同じデータベースと比較してください。
ORM の実行には余分な労力がかかるため、JDBC への直接アクセスほど高速にはなりません。とはいえ、休止状態は、この追加のオーバーヘッドを最小限に抑えるために多大な努力を払っています (そして非常に成功しています)。ORM を使用すると、開発の生産性が大幅に向上しますが、パフォーマンスは比較的わずかに低下します。
接続プーリングは、orm とは直交する問題です。最も明白なのは、hibernate を使用すると、独自の接続プール インフラストラクチャを選択できることです。
また、実際には、接続プーリングとトランザクション管理の間にかなり緊密な結合が存在することが多いことに注意してください。たとえば、典型的な J2EE アプリケーションは、(JDBC データソース API を介して) 接続プールをコンテナーに任せ、宣言型トランザクションに依存します。この場合、接続とトランザクションは (ほぼ) 一緒に管理されます。
あなたが J2EE コンテナ内になく、orm を必要としない場合、単純に C3P0、commons-pool などを比較します。
Hibernate 独自の接続プーラーを使用している場合は、c3p0の使用を検討できますか? (すでに c3p0 を使用している場合は、これ以上お手伝いできません) HSQLDB を自分で使用したことはありませんが、試してみる価値があると思います。