Web アプリケーション(Servlet)に特化した DB 操作

 私は組み込み畑を歩んできた経験もあるので、コンピュータシステム貧乏性です。

 ということで、Web アプリケーションでの DB 操作ってもっと効率的にならないものかと考えています。

 最悪のパターンは、1リクエストで複数のコネクションを行っている場合。これは、コネクションの負荷を知らないビギナーがやってしまいがちです。ということで少し頭が回れば、まずは1リクエスト1コネクションにしようと考えるわけです。

 しかし、CGI なんかとは違って Servlet の場合はリクエストに対してレスポンスを返したあともプロセスは生き続けます。この特徴を生かさない手はありません。すると、コネクションプーリングという考え方が出てきます。これは、コネクションを張りっぱなしにしてリクエストがあったときに使いまわそうという考え方です。この機能は大抵のアプリケーションサーバに搭載されています。Tomcat にも搭載されていますし、その実装のために使われているライブラリである Commons DBCP を直接利用するという手もあります。

 でも、もっと効率的にするには、PreparedStatement をプールすることでしょう。ほとんどの Web アプリケーションでは投げる SQL なんて決まりきっているので、リクエストごとに SQL 文を解釈させるのはもったいないです。

 アプリケーションサーバによって、これをキャッシュする機能も持っているようですが、アプリケーションの実装側で工夫できればもっと効率的になると思います。コネクションプーリングの実装に依存しない PreparedStatement プーリングができてるのって、もうあるのかな?