コネクションプールについて

「コネクションプールがなぜ必要か?」

まず上記の設問自体がおかしくて、コネクションプールが必要(あるいは適している)場面もあれば、まったく不要である場面もある。必ずしもコネクションプールは必要ではない。コネクションプールにはメリデメが存在する。銀の弾丸ではない。

コネクションプールという言葉から始まってしまうとRDBMSとかのイメージが付きまとってしまうが、これはもう少し抽象化して考えると、オブジェクトプールと呼ばれるデザインパターンのひとつとして捉えることもできる。

 

オブジェクトプールのメリットは大きく分けて以下の2つ。
初期化コストや廃棄コストが高いオブジェクト(データベースのコネクションやスレッド)を再利用可能にすることにより、レイテンシ、スループットやシステム負荷等を改善する

・システム中で使用されるリソース数の上限をコントロール可能にする。

ウェブのシステムのように、クライアント側(ウェブサーバ側)のある瞬間のクライアント数が数百、数千といった単位になるシステムにおいては、それぞれのウェブサーバがデータベースにコネクションを張ってしまうと、データベースサーバ側がパンクしてしまう可能性がある。このような場合、コネクションプールがコネクション数の上限をコントロールすることで、これを防ぐことが可能になる。

また、副次的なメリットとして、リソースの使用状況をログに記録しやすくなる。

 

オブジェクトプールのデメリットは以下

・コンポーネントが増える
オブジェクトプールというコンポーネントそのものの存在。無くて済むならその方がシンプルでよい。あること自体がデメリット

・状態を持ってしまう
オブジェクトプールによってシステム中に「状態」を持つ箇所が増えてしまうので、データベース障害時の挙動などを考える場合の複雑性が増す

・アイドル時もメモリを消費する
これは大したデメリットではないが、誰も使っていない時間もリソースを確保しているので、メモリなどを無駄使いしている、と考えることもできる

Advertisements


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s