


Wie kann die Effizienz verbessert werden, wenn PHP umfangreiche Aufgaben ausführt?
Ich habe ein PHP-Programm, das einmal täglich auszuführende Aufgaben plant:
1. Stellen Sie eine Verbindung zur Datenbank her und wählen Sie aus, ob relevante Daten aus der Datenbank in das Array eingelesen werden sollen.
2. Schleife entsprechend der Anzahl der erhaltenen Daten, in der Mitte der Schleife. Enthält 3 MySQL-Operationen (je eine für Auswählen, Einfügen und Aktualisieren)
3. Schließen Sie die Datenbankverbindung, nachdem die Schleife abgeschlossen ist
Die Anzahl der Schleifenausführungen hängt von den mysql_num_rows in Schritt 1 ab und beträgt grundsätzlich Tausende oder Zehntausende.
Während des Schleifenprozesses werden dann in kurzer Zeit Tausende von X3-Datenbankoperationen kontinuierlich ausgeführt, was sehr ineffizient ist. Und da die Ausführung mehrerer Aufgaben aufgrund der Anzahl der Zyklen lange dauert, tritt in Nginx ein 504-Fehler auf.
Darüber hinaus beanspruchen häufige Datenbankoperationen und lange Verbindungen zu viele Ressourcen, was zu einer Ineffizienz der gesamten Umgebung führt.
Wie kann man es optimieren?
Bitte geben Sie mir einen Rat, vielen Dank im Voraus
Antwortinhalt:
Ich habe ein PHP-Programm, das einmal täglich auszuführende Aufgaben plant:
1. Stellen Sie eine Verbindung zur Datenbank her und wählen Sie aus, ob relevante Daten aus der Datenbank in das Array eingelesen werden sollen.
2. Schleife entsprechend der Anzahl der erhaltenen Daten, in der Mitte der Schleife. Enthält 3 MySQL-Operationen (je eine für Auswählen, Einfügen und Aktualisieren)
3. Schließen Sie die Datenbankverbindung, nachdem die Schleife abgeschlossen ist
Die Anzahl der Schleifenausführungen hängt von den mysql_num_rows in Schritt 1 ab und beträgt grundsätzlich Tausende oder Zehntausende.
Während des Schleifenprozesses werden dann in kurzer Zeit Tausende von X3-Datenbankoperationen kontinuierlich ausgeführt, was sehr ineffizient ist. Und da die Ausführung mehrerer Aufgaben aufgrund der Anzahl der Zyklen lange dauert, tritt in Nginx ein 504-Fehler auf.
Darüber hinaus beanspruchen häufige Datenbankoperationen und lange Verbindungen zu viele Ressourcen, was zu einer Ineffizienz der gesamten Umgebung führt.
Wie kann man es optimieren?
Bitte geben Sie mir einen Rat, vielen Dank im Voraus
Was die von Ihnen erwähnte Situation betrifft, wird empfohlen, keine Anfragen zur Lösung des Problems zu verwenden. Verwenden Sie crontab, um geplante Aufgaben hinzuzufügen, um das PHP-Skript im Hintergrund auszuführen, und verarbeiten Sie es in Stapeln, z Insgesamt 100.000 Elemente, 1.000 Elemente gleichzeitig. Wenn die Geschwindigkeit nicht sehr hoch ist, wird empfohlen, sie während fetch_row zu verarbeiten, um zu vermeiden, dass sie zuerst in das Array eingefügt werden und dann wiederholt werden. Denken Sie daran, set_time_limit und das Timeout der Datenbankverbindung basierend auf der Implementierung festzulegen.
Ein paar Gedanken zu dieser Art von Langzeitaufgabe mit einer etwas größeren Datenmenge:
1. Die Webumgebung ist nicht für Langzeitaufgaben geeignet: Die Nginx-PHP-FPM-Architektur ist nicht für Langzeitaufgaben geeignet -Term-Aufgaben, die verschiedenen Zeitüberschreitungen in der Mitte können Menschen zu Tode quälen, Apache PHP ist zumindest besser, um die Zeitüberschreitung zu kontrollieren, ein einfaches set_time_limit (0) kann es tun.
2. Die Aufgabenplanung wird über das Web implementiert: Die meisten PHP-Frameworks verfügen nicht über eine gute Befehlszeilenunterstützung oder berücksichtigen bei der Implementierung keine Befehlszeilenunterstützung, sodass ein webbasierter Aufgabenverteilungsmechanismus einfacher zu implementieren ist. Dies wird das bestehende Framework weniger beeinträchtigen und für ein stabiles Projekt ist es äußerst wichtig, einen einheitlichen Zugang sicherzustellen. Wenn die Aufgabe über die Befehlszeile ausgeführt wird, sind viele Probleme zu berücksichtigen. Das wichtigste Problem ist das Problem mit der Dateiberechtigung. Im Allgemeinen werden Webprojekte von Benutzern wie Apache ausgeführt, und der Eigentümer der generierten Dateien ist ebenfalls Apache. und Apache im Allgemeinen nicht. Obwohl die Anmeldung zulässig ist, ist es möglich, Befehle als Apache-Benutzer auszuführen, dies ist jedoch komplizierter.
3. Teilen und erobern: Eine Lösung für den Umgang mit langfristigen Aufgaben besteht darin, große Aufgaben in kleine Aufgaben aufzuteilen, langfristige Aufgaben in mehrere kurzfristige kleine Aufgaben umzuwandeln und den Zeitaufwand für Ressourcen zu reduzieren. und reduzieren Sie den Zeitaufwand für Ressourcen. Verschiedene Probleme, die durch lange Ausführung verursacht werden, wie z. B. Zeitüberschreitungen bei der Datenbankverbindung, PHP-Speicherlecks usw.
Anbei ist ein Beispiel, das ich geschrieben habe, bitte geben Sie mir einen Rat
https://github.com/zkc226/cur...
Wenn eine große Datenmenge benötigt wird, wird diese zur Ausführung an das Aufgabensystem übergeben. Zuerst wird eine Anfrage initiiert und der Nachrichtenproduzent übergibt die Anfrage an den Konsumenten zur Verarbeitung und Rückgabe, um das Warten auf eine Zeitüberschreitung zu vermeiden. Verbraucher führen eine Multithread-Verarbeitung durch. Es wird empfohlen, Gearman zu verwenden, das sehr benutzerfreundlich ist und die PHP-Schnittstelle unterstützt. Andere wie Workman, Swoole usw. können implementiert werden.
Alle Vorgänge werden zum gleichen Zeitpunkt auf demselben Server ausgeführt, was definitiv zeitaufwändig und ressourcenintensiv ist.
Entweder, wie @黄红 sagte, in Stapeln verarbeiten.
Oder das Hinzufügen von Servern und das Verteilen dieser Aufgaben zur Ausführung auf andere Server wird als verteilte Verarbeitung bezeichnet, erhöht jedoch die Komplexität der Aufgaben, da die Datenkonsistenz sichergestellt werden muss
1. Daten in eine Datei exportieren, die Datei lesen und eine Schleife ausführen. (Zum Beispiel mysqldump)
2. Überlegen Sie, ob Sie die Anweisungen zuerst buchstabieren und dann stapelweise ausführen können. Anstatt jede Schleife auszuführen.
3. Überlegen Sie, ob gespeicherte Prozeduren verwendet werden können
Und aufgrund der Anzahl der Zyklen dauert die Ausführung mehrerer Aufgaben lange, was zu einem 504-Fehler in Nginx führt.
Ist es eine Echtzeitberechnung? Sollten wir bei Aufgaben mit vielen Berechnungen in Betracht ziehen, Hintergrundaufgaben auszuführen, um den Schreibcache zu berechnen und den schreibgeschützten Cache in Echtzeit anzufordern?
Diese Frage ähnelt ein wenig der Frage, die ich zuvor zur parallelen Ausführung zur Verbesserung der Effizienz beantwortet habe
Das Wesentliche besteht darin, das Lesen dieser großen Datenmengen auszulagern und eine modulo-parallele Ausführung basierend auf der ID durchzuführen. Beispielsweise können Ihr Server und Ihre Datenbank 20 gleichzeitigen Ausführungen standhalten
Der einfachste Weg zur Parallelisierung besteht darin, 20 Skriptprozesse zu öffnen, um
0.php -> select * from test where id =0;
1.php -> select * from test where id = 1;
2.php -> select * from test where id =2;
....
Dies ist die Ziehmethode.
Eine andere Möglichkeit besteht darin, es in die Warteschlange zu verschieben, und dann ruft die Warteschlange den Waker-Prozess zur Ausführung auf. Dies ist beispielsweise ein Gearman, der oben erwähnt wurde Plattform, ich hatte auch täglich geplante Aufgaben. Diese verwende ich.
Die Logik besteht wahrscheinlich darin, dass Sie ein geplantes Aufgabenskript öffnen, um alle abgefragten Daten an den Gearman-Scheduler zu senden, indem Sie den Gearman-Client aufrufen, und dann 20 Worker öffnen (können sich auf demselben Server oder innerhalb des lokalen Netzwerks befinden). Verschiedene Server), dann weist der Scheduler diese 20 Gearman-Worker-Skripte zur Ausführung zu. Der Code jedes Worker-Skripts ist derselbe und es handelt sich um die Ausführung eines Datenelements und einer Aufgabe
Verwenden Sie einfach das PHP-Skript im CLI-Modus. Verwenden Sie nicht die WEB-Methode, es kann leicht zu Zeitüberschreitungen kommen

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
