6

私は Oracle JDBC ドライバーを使用しており、BoneCP を評価しています。どちらもステートメントキャッシュを実装しています。

ステートメントのキャッシュにどちらを使用する必要があるかを自問しています。どう思いますか?それぞれの方法の長所と短所は何ですか?

4

1 に答える 1

9

BoneCP の作成者として、私は自分の部分を埋めることができます。

  • プール キャッシュを使用すると、ステートメントを適切に閉じるのを忘れた場合にスタック トレースを取得できる可能性があります。hibernate/spring jdbc テンプレートまたはその他のマネージド接続を使用している場合、これは常に閉じられているため関係ありません。

  • ステートメント キャッシュは各接続に関連付けられているため、100 の接続があり、毎回同じステートメントを実行し続けると、すべての接続がキャッシュをいっぱいにするまでに時間がかかります。DB がサポートしている場合、ドライバーはこのステートメントを 1 回だけ準備するように特別な調整を行っている可能性がありますが、これは JDBC 仕様には含まれていないため、接続プールには、可能な限りこれを最適化する機能はありません。一方、プールに LIFO モードで接続するように指示することもできます。これにより、ホット キャッシュにヒットする可能性が大幅に向上します。

  • 最終的には両方ともステートメントを再利用しようとするため、パフォーマンスに関してはそれほど大きな違いはないはずです。ただし、メソッド レベルで同期するためにブラインド アプローチを採用しているドライバーもいくつかありますが、BoneCP では常に可能な限りきめ細かなロックを使用するようにしているため、理論的にはこれによりスケーラビリティが向上するはずです。

概要: どちらもほぼ同じように動作するはずです。そうでない場合は、おそらくどこかの設計上のバグです。

于 2011-05-27T11:53:09.140 に答える