- PR -

PostgreSQLのコネクションプーリングについて

1
投稿者投稿内容
BLACKGUM
常連さん
会議室デビュー日: 2004/12/24
投稿数: 23
投稿日時: 2005-02-02 04:07
こんばんは

TomcatとStrutsにてシステム構築を開始しました。
DBはPostgreSQLなのですが、
今回年度ごとにデーターベースを分けるという仕様に
なってしまいました。
最初のログインの前に何年度版のDBかを選択するというイメージです。

いつもはコネクションプーリングを利用していましたが、
これをログイン毎にDBと接続するというパターンに
変更しないといけなさそうです。
コネクションプーリングではServer.xmlに記載する場合
PostgreSQLのデーターべース名まで記載が必要だからです。

このような場合、通常ログインは最初に行い
セッション内で常に接続を維持しておくというのが一般的なのでしょうか?
それともアクセスのたびにDBログイン・ログアウトを行うというのが
一般的なのでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-02 05:03
データベースへのコネクションはシステムリソースを大変消費しますのでセッション毎に保持することは通常しません。
データベース毎にデータソースを用意してはいかがでしょうか?
コネクション数は [最大スレッド数xデータソース数] で済みます。
BLACKGUM
常連さん
会議室デビュー日: 2004/12/24
投稿数: 23
投稿日時: 2005-02-03 00:31
引用:

データベース毎にデータソースを用意してはいかがでしょうか?
コネクション数は [最大スレッド数xデータソース数] で済みます。



ありがとうございます。
弊社の部品ではコネクションプーリングのデータソースは
ひとつだけの指定です。
これをあらかじめ複数立ち上げるようにカスタマイズが必要ですね・・・

当初手を抜いてデータソースごとにContextを作成し(実のJavaアプリフォルダーはひとつ)、
ログインの際に、接続するURLを変更しては?と考えていましたが邪道ですよね・・・

例)
2002年度版DBアクセス
 ⇒http://hostnm/foo2002/any.java

2003年度版DBアクセス
 ⇒http://hostnm/foo2003/any.java

2004年度版DBアクセス
 ⇒http://hostnm/foo2004/any.java

2005年度版DBアクセス
 ⇒http://hostnm/foo2005/any.java

これだと今の部品を直さずに使えるのですが・・・

Contextをひとつにすると、
1.Tomcat起動時のコネクションプールング作成のロジックの多重化
2.DBアクセスの実装時のコネクションのクラスの選択ロジック
等々大変ですね・・・

Oracleのようにユーザー名で管理できるとコネクションプーリングを
1本にできるのですが・・・

Postgresでスキーマ管理を行うように持ち掛けてもいいのですが、
きっとDBの改廃が手間なのでデータベースで管理したいのでしょう・・・

もう少し勉強します。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-03 03:09
現在のアプリケーションに影響を与えないソリューションとしては良さそうですね。
アプリケーションの規模にもよるかと思いますが、複数のコンテキストにデプロイしてもそんなに大きな負担ではないと思います。
ただし、OutOfMemoryError を避けるためにヒープサイズやパーマネント領域を十分に確保するよう気をつけた方が良さそうです。
1

スキルアップ/キャリアアップ(JOB@IT)