Inhaltsverzeichnis
Antwortinhalt:
Heim Backend-Entwicklung PHP-Tutorial Wie kann die Effizienz verbessert werden, wenn PHP umfangreiche Aufgaben ausführt?

Wie kann die Effizienz verbessert werden, wenn PHP umfangreiche Aufgaben ausführt?

Aug 18, 2016 am 09:15 AM
php

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

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

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.

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

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

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

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

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

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

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

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.

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

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

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

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 PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

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.

See all articles