Ich habe heutzutage viel Rechenarbeit gemacht. Normalerweise bevorzuge ich diese Berechnungen in PHP und nicht in MySQL, obwohl ich weiß, dass PHP nicht gut ist. Ich dachte MySQL könnte schlimmer sein. Aber ich habe ein Performance-Problem festgestellt: Einige Seiten wurden so langsam geladen, dass das Zeitlimit von 30 Sekunden nicht ausreicht! Also frage ich mich, wo ist der bessere Ort, um die Berechnungen durchzuführen, und irgendwelche Prinzipien dafür? Vorschläge würden geschätzt werden.Wohin soll ich berechnende Sachen machen, PHP oder Mysql?
Antwort
Alles, was mit einem RDBMS (GROUPING, SUMMING, AVG) durchgeführt werden kann, bei dem die Daten auf der Serverseite gefiltert werden können, sollte im RDBMS erfolgen.
Wenn die Berechnung wäre besser in PHP dann gut, gehen Sie damit, aber sonst nicht versuchen, in PHP zu tun, wofür ein RDBMS gemacht wurde. DU WIRST VERLIEREN.
, aber vergesse nicht die Visum-Verse-Regel: Wenn du viele Berechnungen an einem Stück Daten machst, dann ist es nicht für db – Andrey
ich würde das mehr aufwerten, wenn ich könnte. OP - Das Produkt meines Unternehmens fasst häufig mehrere zehn Millionen Zeilen in 1.000 oder weniger zusammen. Ihre Workstations sind normalerweise lagerdurchschnittliche Systeme; Ihre Datenbankserver sind 8- oder 16-Core-Biester mit mehreren Gigabyte RAM. Warum sollten wir all diese Daten über die Leitung laufen lassen und sie auf einer speicherbegrenzten 1- oder 2-Prozessor-Maschine verarbeiten? Mach die Arbeit so nah wie möglich an den Daten. – DaveE
Ich würde sagen, Berechnungen in Sprachen, die dafür erstellt wurden, wie C++. Aber wenn Sie zwischen mysql und php wählen, ist PHP besser.
Können Sie erarbeiten, was es besser macht? –
ist es besser, weil mysql für Datenmanipulationen erstellt wurde und daher dafür optimiert ist. Die Sprach-Engine ist nicht so gut wie die von PHP, weil PHP genau für das Scripting gemacht wurde. – Andrey
Es hängt davon ab, welche Art von Berechnungen. Wenn es um CPU-intensive Berechnungen oder Berechnungen mit beliebiger Genauigkeit geht, ist es besser, C/C++ mit libgmp oder Python zu verwenden. Wenn es eine einfache Aggregation ist, tun Sie, was Sie in MySQL tun können, ohne den MySQL-Code lächerlich komplex zu machen, und erledigen Sie den Rest in PHP. –
Verwenden Sie PHP, zögern Sie nicht Ihren MySQL tun endlose Berechnungen. Wenn Sie über Dinge reden, wie das Sortieren von OK, um MySQL für solche Sachen zu verwenden, SUM, AVG, aber übertreiben Sie es nicht.
Tatsächlich sind die nativen Funktionen von MySQL sehr schnell und es ist oft effizienter, sie zu verwenden, als "rohe" Daten in PHP neu zu verarbeiten. Ein sehr häufiges Beispiel hierfür ist die Date-Arithmetik. Auf der anderen Seite kann das Sortieren, insbesondere wenn Indizes nicht verfügbar sind, prohibitiv langsam sein und kann in einigen Fällen besser in PHP durchgeführt werden. – dnagirl
cmptrgeekken ist richtig, wir würden einige weitere Informationen benötigen. ABER wenn Sie Berechnungen durchführen müssen, die Datenbankabfragen betreffen oder Operationen an ihnen durchführen, vergleichen Sie die Felder der Datenbank mit der certis- chen Datenbank. Das Ausführen spezieller Abfragen in SQL ist billig (soweit es die Zeit betrifft und dafür optimiert ist). Aber sowohl PHP als auch MySQL sind beide serverseitig, es wird nicht wirklich wichtig sein, wo Sie die Berechnungen durchführen. Aber wie bereits erwähnt, wenn es sich um Operationen mit Datenbankinformationen handelt, erstellen Sie eine kompliziertere SQL-Abfrage und verwenden Sie diese.
Native MySQL-Funktionen sind sehr schnell. Tun Sie also, was in Ihren Abfragen sinnvoll ist.
Wenn Sie mehrere Server haben (dh einen Webserver und einen DB-Server), beachten Sie, DB-Server sind viel teurer als Webserver, also wenn Sie viel Verkehr haben oder einen sehr ausgelasteten DB-Server nicht tun 'Extras', die auf einem Webserver einfach und effizient gehandhabt werden können, um Verlangsamungen zu verhindern.
Ich würde empfehlen, jede Zeile Ebene Berechnungen mit dem RDBMS zu tun.
Nicht nur profitieren Sie von einer besseren Leistung, sondern machen Ihre Anwendungen auch portabler, wenn Sie zu einer anderen Skriptsprache wechseln müssen, sagen wir PHP zu Python, weil Sie die Daten bereits sortiert, gefiltert und verarbeitet haben mit Ihrem RBDMS.
Es hilft auch, Ihre Anwendungslogik zu trennen, es hat mir geholfen, meine Controller sauberer und sauberer zu halten, wenn Sie in einer MVC-Umgebung arbeiten.
Behalten Sie einfach den Überblick über Ihre Engpässe. Wenn Ihre Tabelle gesperrt wird, weil Sie versuchen, einige Berechnungen auszuführen, befinden sich alle anderen in der Warteschlange, die darauf warten, die Daten in den ausgewählten Tabellen zu lesen/schreiben, und die Warteschlange wächst weiter.
MySQL ist in der Regel schneller bei der Verarbeitung Ihrer Befehle, aber PHP sollte in der Lage sein, einfache Probleme ohne viel Aufwand zu bewältigen. Das bedeutet natürlich nicht, dass Sie Ihre Datenbank mehrmals für dieselbe Berechnung pingen sollten.
Sie könnten besser dran Caching Ihre Ergebnisse, wenn Sie können und einen Cron-Job haben, aktualisieren Sie es einmal pro Tag/Stunde (bitte tun Sie es nicht jede Minute, wird Ihr Hosting-Provider Sie wahrscheinlich hassen).
Tun Sie soviel Filterung und Zusammenführung wie möglich, um die minimale Datenmenge in PHP zu bringen. Sobald Sie diesen minimalen Datensatz haben, hängt es von Ihrer Arbeit, der Serverlast und anderen Faktoren ab.
Wenn Sie etwas gleichermaßen gut in beiden tun können, und die SQL ist nicht übermäßig komplex zu schreiben (und zu warten), dann tun Sie das. Für einfache Mathematik ist SQL in der Regel eine gute Wette. Für Stringmanipulationen, bei denen die Strings ungefähr gleich lang werden oder wachsen, ist PHP wahrscheinlich eine gute Wette.
Das Wichtigste ist, so wenig Daten wie möglich anzufordern. Die Manipulation der Daten, zumindest was SQL tun kann, ist sekundär zum Abrufen und Übertragen der Daten.
- 1. Wohin soll ich mit Python einen Scraper oder einen Bot machen?
- 2. PHP/MySQL Sicherheit - wo soll ich anfangen?
- 3. app.config - wohin soll es gehen?
- 4. Wohin ging der Bericht? php to mysql
- 5. Wohin lege ich mysql recover file?
- 6. Wohin soll eine bestimmte Funktion gehen - Model oder Controller? CakePHP
- 7. Wie kann ich einfache Sachen mit der Montage machen?
- 8. Soll ich OR-Operator machen konstante Referenz zurückzukehren oder nur
- 9. Wohin soll ich die Bestätigungs-E-Mail senden?
- 10. Methodenkommentare und Anmerkungen ... wohin soll jeder gehen?
- 11. Wohin soll ich den VCS-Stamm von TeamCity verweisen?
- 12. Kann ich diese Suchrelevanzfunktion verbessern, ohne "fortgeschrittene Sachen" zu machen?
- 13. Assimp berechnende Knochen
- 14. Wohin soll benutzerdefinierter, wiederverwendbarer Animationscode gehen?
- 15. Soll ich PHP oder JSP für eine Chat-Website verwenden?
- 16. Matter.js berechnende Kraft benötigt
- 17. Wohin soll der SQLite-Quellcode gelesen werden?
- 18. Wohin soll ich den modalen Code in Ionic verschieben?
- 19. PHP: Wohin, Rückgabe 'false' Wert?
- 20. Was soll diese MySQL-Abfrage mit den Ergebnissen machen?
- 21. Was ist ~ /. und wo soll ich machen?
- 22. Soll ich meine statische Fabrikmethode endgültig machen?
- 23. Wie soll ich Bildverarbeitung in Java machen?
- 24. .certSigningRequest ist verloren. was soll ich machen?
- 25. Kann ich MySQL-Daten mit PHP und OData verfügbar machen?
- 26. Das Logo austauschbar machen. Soll ich das über die scss.erb oder im Anwendungslayout machen?
- 27. Was soll ich zuerst ASP.NET oder PHP auswählen?
- 28. PHP/MySQL oder Node.JS/MongoDB?
- 29. Was soll ich lernen? Python oder Rubin?
- 30. Ausnahmebehandlung in PHP: Wohin geht $ e?
Berechnungen in C++ machen :) – Andrey
Ich denke, wir brauchen ein paar mehr Informationen. Welche Art von Berechnungen machst du? – cmptrgeekken
@ Andrey, einverstanden.wenn ich kann ich würde ... – Young