Problem (von lunacyfoundme)
Ich baue unser Firmenintranet neu auf und bin auf ein Problem mit einer früheren Version im Zusammenhang mit einer großen Anzahl von Datenverarbeitungsberichten gestoßen. Ich hatte dieses Problem zuvor mit dem Sync-Handler-Code gelöst, dieser lief jedoch sehr langsam, sodass ich die maximale Skriptlaufzeit um 10 bis 15 Minuten verlängern musste. Gibt es eine bessere Möglichkeit, mit großen Datenmengen in PHP-Sites umzugehen? Idealerweise würde ich es gerne im Hintergrund ausführen und es so schnell wie möglich machen. Dieser Prozess umfasste die Verarbeitung Tausender Finanzdaten. Ich habe Laravel verwendet, um die Website neu zu erstellen.
Beste beliebte Antwort (von spin81):
Die Leute sagen dir, du sollst Warteschlangen und so weiter verwenden, was eine gute Idee ist, aber das Problem scheint darüber hinaus nicht aufzutreten PHP. Laravel/OOP ist großartig, aber das Programm, das die Berichte generiert, von denen Sie sprechen, scheint kein Problem zu sein. Aus einer anderen Perspektive würde ich gerne die SQL-Abfrage sehen, die Sie zum Abrufen dieser Daten verwendet haben. Wie andere bereits gesagt haben: Wenn Ihr Formular Tausende von Zeilen umfasst, sollte die Fertigstellung Ihres Berichts nicht 10 bis 15 Minuten dauern. Tatsächlich können Sie, wenn Sie alles richtig machen, wahrscheinlich Tausende von Datensätzen verarbeiten und denselben Bericht in einer Minute fertigstellen.
1. Wenn Sie Tausende von Abfragen durchführen, prüfen Sie zunächst, ob Sie nur ein paar Abfragen durchführen können. Ich habe zuvor eine PHP-Funktion verwendet, um 70.000 Abfragen auf ein Dutzend Abfragen zu reduzieren und so die Laufzeit von Minuten auf den Bruchteil einer Sekunde zu reduzieren.
2. Führen Sie EXPLAIN für Ihre Abfrage aus, um zu sehen, ob Ihnen Indizes fehlen. Ich habe einmal eine Abfrage durchgeführt und die Effizienz hat sich durch das Hinzufügen eines Index um vier Größenordnungen verbessert. Wenn Sie MySQL verwenden, können Sie diese „schwarze Magie“-Fähigkeit erlernen, die Sie und Ihre Freunde verblüffen wird.
3. Wenn Sie eine SQL-Abfrage durchführen und Ergebnisse erhalten und viele Zahlen zusammenfügen, prüfen Sie, ob Sie Funktionen wie SUM() und AVG() verwenden können, um die GROUP BY-Anweisung aufzurufen. Als Faustregel gilt: Überlassen Sie die Datenbank so weit wie möglich der Berechnung. Einen sehr wichtigen Tipp, den ich Ihnen geben kann, ist dieser: (Zumindest in MySQL) Boolesche Ausdrücke nehmen einen Wert von 0 oder 1 an, und wenn Sie wirklich kreativ sind, können Sie das mit SUM() und seinen Freunden tun. Einige sehr überraschende Dinge.
4. Okay, hier noch ein letzter Tipp von PHP-Seite: Sehen Sie nach, ob Sie diese ebenso zeitaufwändigen Zahlen schon oft berechnet haben. Nehmen wir zum Beispiel an, die Berechnung der Kosten für 1.000 Säcke Kartoffeln ist teuer, aber Sie müssen diese Kosten nicht 500-mal berechnen, bevor Sie die Kosten für 1.000 Säcke Kartoffeln in einem Array oder etwas Ähnlichem lagern, also tun Sie es nicht Sie müssen nicht immer wieder die gleichen Berechnungen durchführen. Diese Technik wird als Mnemonik bezeichnet und wirkt oft Wunder, wenn sie in Berichten wie Ihrem verwendet wird.