2011-07-20 20 views
1

HI:私はマルチスレッドJavaデータベースアプリケーションを持っており、カスタマイズされたデータベースプーリングを作成する必要があります。その理由は、私たちの準備文のいくつかは接続にキャッシュされなければならないからです。私たちは、無料のハッシュマップともう1つのロックされたハッシュマップに基づいて、私たちの原始的なソリューションを持っています。ハッシュマップでは、synchronizedメソッドを使用する必要があり、スループットが影響を受けます。選択は、同期部分ができるだけ小さくなるようにconcurrentHashMapを使用することです。いくつかのサンプルコードがありますか?または、私はDBCPのソースコードを読むためにApacheのapacheをダウンロードするのでしょうか?Java:JDBCデータベース接続プール

+0

プリペアドステートメントをキャッシュする要件はどこから来ていますか?どれくらいキャッシュする必要がありますか? – Olaf

+0

スレッドプールのサンプルコードまたは同時ハッシュマップを使用するためのサンプルコード。 P.S接続がフリーであるかどうかを確認するためにハッシュマップを使用していますか? FIFOキューははるかに優れているはずはありません。あなたのサーバーメモリを賢明に負担するほど多くの接続はありません。 –

+0

私は単純な接続プールを維持するためのシンプルなクラスを作成しました。あなたが探しているものかどうかわかりませんが、 –

答えて

1

同期を使用すると、約1〜2マイクロ秒かかります。これが重要な場合は、JDBCを使用すべきではありません。私見では。 TCP接続を介してサービスにアクセスするのは100マイクロ秒かかることが多く、多くのJDBCデータベースでは1〜10ミリ秒の遅延があります。

クエリ/更新あたり数ミリ秒で問題がないと思われますが、この場合は同期を使用しても問題はありません。

スレッド数に応じて、スレッドごとにスレッドローカル接続を設定できます。これにより、できるだけオーバーヘッドが削減されます。

0

あなたはマルチスレッドアプリケーションを持っていますが、同時に多くのスレッドが同じデータベース接続を使用していますか? PreparedStatementキャッシュはConnectionレベルで実行されるため、一度に1つのスレッドで接続が使用されている場合は、同期は必要ありません。