[PHP-users 7768] Re: 複数のpg_connect

Yasuo Ohgaki php-users@php.gr.jp
Thu, 30 May 2002 21:33:28 +0900


大垣です。

Nobuyuki.Fukuoka wrote:
> 福岡です。
>
> マニュアルの pg_connect() のページに、
> 「同じ引数で2回 pg_connect() をコールした場合は新規に接続せずに
> 接続済みのリソースを返す」旨の記述がありますが、
> これって、PHP側の処理ですよね?

そうです。

> 仮に、複数のpg_connect()を連続してコールするスクリプトがあったとして
> 1回コールの場合に比べて速度的にはどうなんでしょう?
> 劇的に低下しますか?

pg_connectをコールする事ではあまりパフォーマンスは低下しません。
ハッシュルックアップなので、基本的に配列の参照と同じ程度です。
(ファイルのインクルードの方が近いです。include_once()など)

> インスタンスを作成するたびに pg_connect() が実行されます。
> ----------------------------------------------------
>
> 両方を比べた場合、明らかな速度差は感じられるのでしょうか?
> 1回コールの方が早いのはわかりますが、さほど差がないのであれば
> 2番目を採用したいと思ってます。

ずいぶん前にどういったコーディングスタイルがPHPに向いている
かいい加減なベンチマークをしていた時の記憶です。
433Mhz Celeron/Linuxではenable-debugのPHPは1行実行
するのに最低1万分1秒ほど時間が必要です。pg_pconnect()は
たしか100分の1秒から1000分の1秒くらいだったような気がします。

# この時間にはコンパイル時間は含まれません。

# 接続があれば、pg_connectとpg_pconnectは同等の速度で
# 実行されます。(コードがそうなっています)

> また、MySQL/SyBase用接続関数のページでも同様に複数回の
> 接続要求時には接続済みのリソース(リンクID)を返すとありますが、
> マニュアルに明記されてない他のRDBでは常に新規に接続される
> のでしょうか?(Oracle等)
> 移植時の互換性が充分でなければ1番目を採用しようと思います。

そのはずです。
少なくとも、Oracle(OCIは知りません)はそうなっています。

PS: 6/15(土) PostgreSQL ConferenceのトラックBの
最後に現在取り組んでいるPHP Formモジュールについて講演し
ます。PHP Formモジュールの必要性(セキュリティー、パフォー
マンス)から開発中のモジュールについてご説明します。よろし
ければお聞きください。

--
Yasuo Ohgaki
yohgaki@ohgaki.net
[Please use new e-mail address from now on]
[http://ohgaki.net/ started from 2002/05/30]