ホームページ >バックエンド開発 >PHPチュートリアル >同時実行のヒーローたちに解決策を教えてください...

同時実行のヒーローたちに解決策を教えてください...

WBOY
WBOYオリジナル
2016-08-18 09:15:53956ブラウズ

whileループコードを使用しているコードがあるため、データ量が多くなると失敗します。解決策を教えてください....

while($rows = $query->fetch_array()){

リーリー

返信内容:

whileループコードを使用しているコードがあるため、データ量が多くなると失敗します。解決策を教えてください....

while($rows = $query->fetch_array()){

リーリー

1. コードの完全版をアップロードできますか? SQL を使用することに抵抗がありますか?
2. SQL 結果セットが多すぎるため、メモリがオーバーフローし、操作に時間がかかる可能性があります。
3. 解決策: Redis キューまたは MySQL キューを使用して問題を解決します。

ループ演算はプログラム内でこのように書いてはいけません。 。 。新しい SQL テーブルをキューとして作成することも、redis をキューとして直接使用することもできます。 。次に、新しいサービスまたはスクリプトを開いて、このタスクを処理します

処理速度が遅すぎるため、サーバーが新しいリクエストに応答できなくなり、障害が発生すると推定されます。コードから判断すると、処理モデルに問題があるため、可能であれば、ストアド プロシージャを使用して問題を解決することをお勧めします。

$rs は大きな配列である必要があり、ループ内で mysql クエリを使用しているため、非常に非効率的になります。

非同期処理には cli モード PHP を実行することをお勧めします

非常に単純で暴力的なマルチプロセスのアイデアを与えるためにキューを使用したくありません

最大のクエリ結果セットは ID モジュラスに基づいて複数のプロセスに分割されます。この考え方は次の疑似コードに似ています

。 リーリー

データ量に応じてすべてのIDを剰余分割するか、SQL文のクエリ時にPHPのプロセスを5つ直接開いて分割するかは、業務に応じて分析する必要があります。ロジック。

5 つのプロセスに分割された SQL ステートメントは次のようになります:

リーリー

while(1){

を使用すると、処理対象のデータの一部を一度に取り出し、処理が完了した後にループから抜け出すことができます
}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。