人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

pgpoolなどのコネクションプールを利用してログイン機能があるWebサイトを作るとき、pconnect()とconnect()の使い分け、disconnect()は使うべきか、使うべきとすれば使うタイミングなどを教えてください。ログイン機能はセッションを利用します。開発言語はPHP5です


●質問者: dedara
●カテゴリ:インターネット ウェブ制作
✍キーワード:CONNECT webサイト コネ セッション タイミング
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● angemaries
●35ポイント

> pconnect()とconnect()の使い分け

connectを使います

> disconnect()は使うべきか

使うべきだと思います

> 使うべきとすれば使うタイミングなどを教えてください。

1ページの処理を抜けるときでいいと思います

> ログイン機能はセッションを利用します。

pgpoolはデータベースとの接続のプーリングですので、

WEBサイトのログイン機能の有無や手段は関係ありません。

◎質問者からの返答

なるほど。ちょっと混乱していた部分がありました

なんとなくわかってきた気がします。ありがとうございました


2 ● kn1967
●80ポイント ベストアンサー

(1)pgpool

pgpool は クライアントとPostgreSQLの間に入るのですが

ここでの「クライアント」とはクライアントパソコンの事ではなく

PostgreSQLに要求を出している Apache+php などを指します。


(2)pconnect と connect

PostgreSQLは接続毎にpostmasterというプロセスが動きます。

(平行して100件の接続があれば

postmasterが100個動いているという事です)


pconnectを用いれば、接続が切れてもpostmasterは常駐したままとなり

次の接続時にpostmasterをスタートさせる処理も不要になれば

テンポラリテーブルなどの情報も残ったまま使いまわしもできるという

利点がありますが、先に申し上げたように100件の接続があれば

100のプロセスと各種情報が常駐することになりますので

メモリを圧迫し続け、結果としてスワップの大量発生などを起こし

パフォーマンスに大きなマイナス影響を与えてしまう恐れもあります。


で、どちらを選択すべきかという点については

定型処理などで複雑な処理を連続して行う場合は pconnect の使用を検討し

Webサービスのように断続的に利用する場合は connectを使うのがよろしいでしょう。


(3)disconnect

アバウトな表現になりますが「どの道、切断の確認処理は行われるのだから

強制的に処理を実行させるよりも、適宜自動的に行わせれば良い」

という考え方もありますので、残念ながら「使うべき」とまでは言えず

「入れておきましょう」といったところです。

(当然ながら pconnect の場合は一連のデータベース操作が終了した時点で

入れておかないといけませんよね。)


で、どこに入れるかという点については

「途中で強制的に入れるのは負荷になるかもしれないというのであれば

処理の最後(1ページの処理を抜ける時)で」という方向でまとまっていきます。


ところで・・・

pg_disconnect はPostgreSQL側で

pg_connect はPostgreSQL側とphp側の双方に同じ名前で

それぞれ用意されているコマンドであったりしますが違いは理解しておられますか?

phpを使うということなので

PostgreSQLはひとまず横においておいてphpマニュアルを見てみましょう。

切断は PHP: pg_close - Manual で行います。

持続的でない接続はスクリプトの実行終了時に自動的にクローズされるため、

pg_close() は通常は必要ありません。

という注意書きがありますように、phpでPostgreSQLに接続する際には

・pg_pconnectで開いて pg_close で閉じる

・pg_connectで開いて、閉じるのは自動

のいずれかの手法を用いるということが判るかと思います。


(4)ログイン機能

これが質問の発端ではありませんか?

パスワードの管理などにPostgreSQLを使い、引き続き処理も行うので

pconnectとお考えになったのかもしれませんが

・ログイン画面 ログイン成功でphpのセッション変数にフラグを立てる

・操作画面 フラグが立っていれば使える。

といった具合に、それぞれ独立しているほうが考えるのも作るのもシンプル。

前述(2)で書きましたようなデメリットなども十分考慮した上で

それでも持続させておく必要がある時だけpconnectと理解しておいても

間違いではないと思います。

◎質問者からの返答

返事が遅くなりましたが、大変参考になりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ