1

私のサイトには、データベースを使用するページと使用しないページがあります。

データベースが必要なときはいつでも、を使用して接続し$conn = connect()ます。しかし、これは、必要なすべての場所に配置する必要があることを意味します。これをインクルード ファイルに入れ、そのファイルをすべてのページに入れると、データベースが不要な場合でも接続されます。これは良い考えでしょうか?接続を作成すると、必要のないときに問題やその他の問題が発生しますか? または、必要な場合にのみ接続する必要がありますか?

4

1 に答える 1

1

必要のないときにデータベースに接続すると、回避可能な少量のオーバーヘッドが発生します。ページをできるだけ速く実行する必要がある場合は、不要なデータベース接続を回避して最適化できます。

合計 PHP 実行時間の割合としてこれが表すオーバーヘッドの量はさまざまです。たとえば、PHP スクリプトが単純で高速な場合、それに比例して、db 接続が無駄になる合計時間の割合が大きくなります。PHP スクリプトが他の多くのことを行う場合、db 接続は合計時間のより少ない割合になります。

また、データベース接続の速度は、サーバーの速度、MySQL が DNS 依存関係で構成されているかどうかなどによって異なります。

Zend Framework に取り組んだとき、「遅延」接続を実装しました。Zend_Db_Adapter オブジェクトのインスタンスはいつでも作成できますが、そのクラスはクラス コンストラクターに接続しません。最初のクエリを実行するとき (またはgetConnection()メソッドを明示的に呼び出すとき) にデータベースに接続します。

もう 1 つの考慮事項は、クエリの実行が完了したときにデータベースから切断するまでの時間です。

1 秒あたり 1000 件の PHP リクエスト (平均して 1 ミリ秒あたり 1 件) を処理し、各 PHP リクエストが 100 ミリ秒続くとします。したがって、任意の時点で平均 100 件の PHP リクエストが進行している可能性があります。PHP コードが最初に db に接続し、最後に db やその他のリソースから切断する場合 (自動要求クリーンアップによって)、いつでも 100 個の db 接続がアクティブになる可能性があります。

ただし、データベースへの接続を遅らせ、データベースのクエリが完了したらすぐに切断し、一部の要求で完全に接続しないようにすると、平均して、同時データベース セッションの数がはるかに少なくなります。

これにより、db サーバーでのリソースの使用を減らすことができ、スループットが向上し、1 秒あたりに完了する PHP リクエストの数が増加します。

于 2013-11-12T20:14:26.253 に答える