次の 3 つの接続方法
1. mysql_connect() 関数を使用してシングルトン クラスを作成します
2. mysql_pconnect() を使用して長い接続を確立します
3. 作成されるデータベース接続クラスを作成します。インスタンス化中 短い接続、破棄時に閉じられます (mysql_close)
どのようなアプリケーション シナリオでデータベースに接続する場合、上記 3 つのうちのどれが最も高いパフォーマンスを発揮しますか?
(追記: PHP に接続プールを実装する必要がありますか)
返信内容:
= =ppc からですか... = =Baicai から返信がありました...転送します...
PHP レベルでは、どのようにコードを書いても同じです違いはありません。長い接続と通常のリンクの違いを強調しておきます。
永久リンクは、サーバーが接続を開いて全員がリンクを共有することを意味するものではありません。永続的な接続では、クライアントごとに接続が開かれます。200 人が訪問すると、200 の接続が存在します。実際、mysql_pconnect() 自体はあまり処理を行いません。唯一行うことは、PHP の実行後に mysql 接続を積極的に閉じないことです。
PHP が CGI モードで実行されている場合、pconnect と基本的には違いはありません。 connect.cgi メソッドは PHP アクセスごとにプロセスを開始するため、Apache モジュール モードで PHP を実行すると、Apache はプロセス プール (httpd) を使用するため、アクセスが完了するとプロセスが終了します。プロセスは終了後に使用されます。これにより、pconnect で開かれた mysql 接続リソースが解放されなくなります。これにより、次の接続リクエストがあるときに Apache が使用されます。 pconnect を使用しないと、PHP は DB に繰り返し接続する時間が短縮され、アクセス速度が速くなります。ただし、Apache の同時アクセス量が大きい場合は、pconnect を使用した方がわかりやすいでしょう。使用すると、以前の httpd プロセスによって占有されていた mysql 接続がブロックされ、mysql 接続の最大数が設定されている場合、mysql が接続の最大数に達した可能性があります。最大同時アクセス数を 500 に設定し、Apache の最大同時アクセス数を 2000 に設定すると、すべてのアクセスに Access db が必要となり、現在の 500 件の httpd リクエストが終了していない場合、後続の httpd プロセスの処理時間が比較的長くなります。 mysql に接続できません (mysql 接続の最大数に達しているため) 現在の 500 個の httpd プロセスのみが終了しているか、再利用すると mysql
に接続できます。これは他の httpd プロセスの mysql 接続を再利用しないため、多くの接続タイムアウトが発生します。 同時アクセスの量が多くない場合、pconnect を使用すると単純にアクセス速度が向上しますが、同時アクセスの量が増加した後は、pconnect を再度使用するかどうかはプログラマの選択によって異なります。
PHP の mysql への接続は実際には使用されません。コネクションプール、pconnectはApacheのプロセスプールを借りているのと同じなので、同時アクセス量が多い場合にはDBへのアクセス効率を上げることができません
実際のアプリケーションではmysql_pconnectを使用した方が速いです。毎回更新して新しいページをリクエストしますが、mysql_connect では、データベース接続が遅い場合は、更新するたびに再リクエストする必要があることがわかります。データベース接続が遅い場合、DB 操作はそれほど複雑ではなく、プログラムにデッドロックが発生しないという十分な自信があり、サーバーを制御できる場合は、上記の 4 つの条件のいずれか 2 つが満たされている必要があります。その後、pconnect を使用できます。
pconnect をスクリプトで閉じる必要はありません。mysql で有効期間を設定したり、定期的にスキャンして長期間休止していた接続を強制終了するシェルを作成したりできます。 一文要約: pconnect を使いこなすには、PHP スクリプトだけでなく、データベースやサーバーの設定も関係します。
元のアドレス:
http://bbs.phpchina.com/thread-238077-1-1.html