2

私のアプリケーションは、Mysql の同時接続数が 25 に制限された共有ホスティング プロバイダーでホストされます。以下はDBに接続するための私のコードです

function dbConnect() {
$dbHost = 'localhost';
$dbUser = 'user';
$dbPass = 'pass';
$dbName = 'dbase';  
    mysql_connect($dbHost, $dbUser, $dbPass)or die(mysql_error());
    mysql_select_db($dbName) or die(mysql_error());
   }

私のアプリケーションは、データベース クエリに関するものです。ホームページだけでも、少なくとも 20 個の mysq_query があります。ホームページをコーディングする方法は次のとおりです

include 'config.php';
dbConnect();

query1 ... //初期変数を取得する

複数のクエリになるプロセス変数

query2... // 処理結果

query3...// 処理結果

などなど……。

クエリ 20...// 処理結果

ほとんどのクエリが他のクエリの前提条件であるため、クエリを最小化することはできません。私は、毎日少なくとも 1000 人のユーザーを期待しており、ユーザーの 50% が同時に、または少なくとも数秒間隔で接続する可能性があります。

  1. DB への接続の設計上、設定された接続制限に容易に到達しますか?
  2. php はクエリの直後に接続を閉じます。つまり、最初のクエリの後に閉じ、次に 2 番目のクエリを開いて、その直後に再び閉じます。自分で接続を閉じていなくても、同様です。
  3. 上記のシナリオが自動的に 20 の同時接続を消費するという私の仮定は正しいですか?

前もって感謝します。

4

2 に答える 2

2

価値のあるものとして、genpet の元の投稿の質問 2. および 3. に対するいくつかの回答:

  1. PHP は、次の場合にのみ MySQL への接続を閉じます (それが で開かれていないと仮定しますmysql_pconnect()):

    • あなたが呼ぶmysql_close()
    • スクリプトの最後に到達する
  2. したがって、同じスクリプトで 20 個のクエリを送信しても、消費される接続は 1 つだけです。

1つの考えが頭に浮かびます。次のパターンを検討してください。

  • との接続を開く/ポーリングする*_pconnect()
  • クエリを実行し、結果を処理する
  • できるだけ早く接続を解放します*_close()
  • スクリプトの後半で DB にクエリを実行する必要がある場合は、再度開く/ポーリングする

このようにして、低い同時接続制限を回避できると思います (ただし、ホスティング プランがニーズを満たすには不適切である可能性があるとアドバイスする人々には同意します)。

これは理論ですが、実際に試したことはありません。

于 2012-06-09T09:51:05.530 に答える
0

これを上記のコメントとして投稿することはできないため、これは回答ではなく、最初のコメント (「ホスティング プランをアップグレードする」) の拡張です。

IMO、あなたの接続設計は問題ありません。「die」は端末関数です。失敗が予想される場合は、再試行オプションとユーザーフレンドリーなエラー処理関数を組み込みます。また、毎回 DB を開いたり閉じたりするのは時間がかかります。1 つのクエリを閉じて再度開くよりも、3 つのクエリを高速に絞り込める可能性があります (ただし、これはいくつかの要因に依存し、他の人が提案する共有プールを追加する価値があるため、軽減できます。 ) しかし、私のアドバイスは、ホスティング プランをアップグレードし、「通常どおり」開発することです。次に、「死ぬ」よりもわかりやすいエラー画面を使用することを除いて、スタイルは問題ありません:-)、mysql_関数ではなく、pdoまたはmysqliを使用します

于 2012-06-09T02:07:29.847 に答える