2010-04-12 10 views
8

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?

+0

Berechnungen in C++ machen :) – Andrey

+2

Ich denke, wir brauchen ein paar mehr Informationen. Welche Art von Berechnungen machst du? – cmptrgeekken

+1

@ Andrey, einverstanden.wenn ich kann ich würde ... – Young

Antwort

22

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.

+2

, 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

+6

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

1

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.

+3

Können Sie erarbeiten, was es besser macht? –

+2

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

+1

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. –

-2

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.

+3

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

0

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.

0

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.

3

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.

1

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).

1

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.

Verwandte Themen