Da es einen Code gibt, der While-Schleifencode verwendet, schlägt dieser fehl, sobald die Datenmenge groß ist....
while($rows = $query->fetch_array()){
<code>if($rows['mingxi_1']=='1'){ $ds = Ssc_Ds($rs['ball_1']); $dx = Ssc_Dx($rs['ball_1']); if($rows['mingxi_2']==$rs['ball_1'] || $rows['mingxi_2']==$ds || $rows['mingxi_2']==$dx){ $msql="update c_bet set js=1 where id='".$rows['id']."'"; $mysqli->query($msql) or die ("修改订单状态失败!!!".$rows['id']); //给会员账户增加奖金 $msql="update k_user set money=money+".$rows['win']." where uid=".$rows['uid'].""; $mysqli->query($msql) or die ("修改失败!!!".$rows['id']); }else{ //注单未中奖,修改注单内容 $msql="update c_bet set win=0,js=1 where id=".$rows['id'].""; $mysqli->query($msql) or die ("修改失败!!!".$rows['id']); } }</code>
Da es einen Code gibt, der While-Schleifencode verwendet, schlägt dieser fehl, sobald die Datenmenge groß ist....
while($rows = $query->fetch_array()){
<code>if($rows['mingxi_1']=='1'){ $ds = Ssc_Ds($rs['ball_1']); $dx = Ssc_Dx($rs['ball_1']); if($rows['mingxi_2']==$rs['ball_1'] || $rows['mingxi_2']==$ds || $rows['mingxi_2']==$dx){ $msql="update c_bet set js=1 where id='".$rows['id']."'"; $mysqli->query($msql) or die ("修改订单状态失败!!!".$rows['id']); //给会员账户增加奖金 $msql="update k_user set money=money+".$rows['win']." where uid=".$rows['uid'].""; $mysqli->query($msql) or die ("修改失败!!!".$rows['id']); }else{ //注单未中奖,修改注单内容 $msql="update c_bet set win=0,js=1 where id=".$rows['id'].""; $mysqli->query($msql) or die ("修改失败!!!".$rows['id']); } }</code>
1. Können Sie die Vollversion des Codes hochladen? Zögern Sie, SQL herauszunehmen?
2. Eine visuelle Überprüfung zeigt, dass zu viele SQL-Ergebnismengen vorhanden sind, der Speicher möglicherweise überläuft und der Vorgang zeitaufwändig ist.
3 Lösung: Verwenden Sie die Redis-Warteschlange oder die MySQL-Warteschlange, um das Problem zu lösen.
Die Schleifenoperation darf im Programm nicht so geschrieben werden. . . Sie können eine neue SQL-Tabelle als Warteschlange erstellen oder Redis direkt als Warteschlange verwenden. . Öffnen Sie dann einen neuen Dienst oder ein neues Skript, um diese Aufgabe speziell zu erledigen
Es wird geschätzt, dass die Verarbeitungsgeschwindigkeit zu langsam ist, was dazu führt, dass der Server nicht auf neue Anfragen reagieren kann, was zu einem Ausfall führt. Dem Code nach zu urteilen, liegt ein Problem mit Ihrem Verarbeitungsmodell vor. Es ist am besten, keine Schleife zu verwenden, um das Problem nach Möglichkeit zu lösen.
Ihre $rs sollte ein großes Array sein und Sie verwenden eine MySQL-Abfrage in der Schleife, was sehr ineffizient sein wird.
Es wird empfohlen, ein PHP im CLI-Modus für die asynchrone Verarbeitung auszuführen
Ich möchte keine Warteschlangen verwenden, um Ihnen eine sehr einfache und heftige Idee mit mehreren Prozessen zu vermitteln
Die größte Abfrageergebnismenge wird basierend auf dem Modulo der ID in mehrere Prozesse aufgeteilt. Die Idee ähnelt dem folgenden Pseudocode
<code> for ($i=1;$i<=100;$i++){ if($i%5==0){ echo 'mod 1 : '.$i.'<br>'; } if($i%5==1){ echo 'mod 2 : '.$i.'<br>'; } if($i%5==2){ echo 'mod 3 : '.$i.'<br>'; } if($i%5==3){ echo 'mod 4 : '.$i.'<br>'; } if($i%5==4){ echo 'mod 5 : '.$i.'<br>'; } }</code>
Multiplizieren und teilen Sie alle IDs basierend auf der Datenmenge auf, oder ob Sie 5 PHP-Prozesse direkt öffnen und bei der Abfrage von SQL-Anweisungen aufteilen, hängt von Ihrer Geschäftslogik ab.
Die in 5 Prozesse aufgeteilte SQL-Anweisung ähnelt der folgenden:
<code>SELECT * FROM member where member_id%5=0; SELECT * FROM member where member_id%5=1; SELECT * FROM member where member_id%5=2; SELECT * FROM member where member_id%5=3; SELECT * FROM member where member_id%5=4;</code>
Sie können while(1){
verwenden, um einen Teil der Daten auf einmal zur Verarbeitung herauszunehmen und dann aus der Schleife auszubrechen, nachdem die Verarbeitung stapelweise abgeschlossen ist
}