私が開発したアプリはサーバー側でLAMPを使用しており、phpとmysqlが同じサーバー上にある場合、アプリの応答速度は悪くありません。
しかし、将来的に php と mysql を別のサーバーに配置する必要があるかもしれないことを考慮して、この方法でテストしたところ、アプリの応答が非常に遅く、各応答に約 10 秒かかることがわかりました。
私自身の PHP 実装コードを分析したところ、アプリのリクエストでは PHP と MySQL が何百回もやり取りしていることがわかりました。毎回のやり取りにはそれほど時間がかかりませんが、数百回も積み重なると膨大な量になります。実際、データベース自体のクエリにはそれほど時間はかかりません。おそらく、PHP と msysql のクロスサーバー ネットワークの遅延に費やされます。
クロスサーバー状況で効率を向上させるにはどうすればよいですか?私が考えている方法は次の 2 つです。 1. PHP と MySQL の 2 つのサーバーのネットワーク伝送パフォーマンスを向上させる (現在、自宅で無線 LAN を使用しています。有線 LAN またはより優れたギガビット LAN の場合、遅延が非常に大きくなります) 2. PHP はビジネス ロジック自体を実装する必要はありませんが、mysql にリクエストを送信し、mysql はストアド プロシージャを使用してそれを実装します。ネットワーク伝送遅延の問題を解決する必要があります。
私には PHP の開発経験があまりないので、私の解決策が機能するかどうか、または他の解決策があるかどうかを確認したいと思っています。
ありがとうございます!
1. 長い接続を使用してデータベースに接続します
2. クエリ結果をローカルで一度に読み取ります (mysqli_result::store_result、pdo::fetchall)
ありがとうモデレーターさん、返信ありがとうございます!
これら 2 つの方法を使用すると、パフォーマンスが一部向上する可能性があります。
ただし、一部の場所では処理が困難です。たとえば、A、B、C は 3 つのクエリであり、最初に A を実行し、その結果に従って B を実行する必要があります。C のみを実行することもできます。 B を実行した後。シーケンス要件があり、クエリ結果を一度に取得する方法はありません。
次に、ビジネス ロジックに多くの変更を加えない限り、一部のクエリではクエリ結果をローカルに一度に送信するのは不便です。
午後、テストのために2台のマシンを有線LANに置いたところ、無線LANの場合はping値が20ms程度、有線の場合は大幅に速度が速くなりました。は 1ms 未満なので、100 回以上の呼び出しで十分です。わずか 70ms 程度なので、この遅延は大きな問題ではありません。
1 つのアプリリクエストで、php と mysql の間で何百ものやり取りが行われます。
1 つのリクエストで何百ものインタラクション? 。 。
本来、データベースと PHP が分離されている場合、一定のネットワーク遅延が発生します。
推奨事項:
1. キャッシュを有効にしてデータベースへのアクセスを減らします。
2. データベースの構造とインデックスを最適化します。