PHP Berechnung von Werten in PHP/MySQL

sgraphic

Ensign
Registriert
Okt. 2010
Beiträge
210
Hallo Community, hi coder.

Seit zwei Tagen geistert in mir eine Idee und eine möglicherweise simple Frage.
Aber hier würde ich gerne die Meinung der anderen hören.

Wie Ihr schon im Titel entnehmen könnt, geht es um simple mathematische Berechnung.

Aber erstmal der Hintergrund (Architektur):

Es geht um einen simplen Webspacehoster (Shared Hosting, also kein ded. Server)

Der Webserver mit 100-1000 anderen Usern, die sich die Leistung teilen.
Gilt auch für den Datenbankserver (shared)

(achtet bitte nicht auf die Syntax, die ich hier verwende, denn ich möchte nicht den fertigen Code)

Gehen wir mal von einer simplen Berechnung:
Ergebnis = Wert1 * Wert2 / Wert 3

Die Reihenfolge der gestellten Fragen haben keine Priorisierung :D

1) Berechnung direkt im SQL
sql-Ergebnis = Wert aus Spalte1 * Wert aus Spalte 2 / Wert aus Spalte 3

Ich könnte mir sogar vorstellen, dass nach der Berechnung die Werte in die Datenbank zurückgeschrieben werden.

Warum diese Theorie: Möglicherweise ist der Datenbankserver performanter?

Was mich stört: Man würde ja die Werte aus Inputfeldern für die Berechnung ziehen (PHP), die per SQL-Query berechnen und dann an die Datenbank übergeben. Klingt nicht nach einem üblichen Vorgehen bei einer relationalen Datenbank.

2) Berechnung ohne die Ergebnisse in die Datenbank zu schreiben (PHP)
Erstmal per SQL die benötigten Werte ziehen und dann im Script berechnen.
Ergebnis = Wert aus Spalte1 * Wert aus Spalte 2 / Wert aus Spalte 3

Warum diese Theorie: Man würde die Last zwischen den beiden "Hosts" aufteilen? (Wenn man von Last reden kann)

Was mich stört: Man würde immer wieder erneut die Berechnung im Script durchführen, was wohl die Idee mit der Last widersprechen würde.

3) Alle benötigten Werte im Script berechnen und dann alles in die entsprechenden Spalten packen.
(Natürlich davon ausgehend, dass es weitere Berechnungen gibt mit weiteren unterschiedlichen Ergebnissen)

Grob dargestellt:
Ergebnis1 = WertVariable1 * WertVariable2 / WertVariable3
Ergebnis2 = WertVariable1 / WertVariable3
Ergebnis3 = (WertVariable4 + WertVariable5) * WertVariable1

Warum diese Theorie: Man berechnet die benötigten Werte alles im Script und schreibt dann alle Werte in die entsprechenden Spalten (Wie unter 2, bloß besser)

Was mich stört: Die Berechnungen finden dann auf dem Webhost.
PHP-Limits, die stören könnten (was ich mir eigentlich nicht vorstellen kann) - die Serverseitige php.ini ist nicht konfigurierbar.
Last nur noch auf dem Webhost (wobei das marginal wäre), aber ich weiß, dass einige Hoster hier etwas allergisch reagieren, wenn der Webhost (unter Last steht) und möglicherweise andere User mitzieht

Es ist erstmal nicht vorgesehen, dass die Werte in den DB-Spalten angepasst werden. Vielleicht dann erst im zweiten Step mit einem "Edit-Button"

Fazit
Ich persönlich tendiere zu Punkt 3). Ich lasse mich aber auch des Besseren belehren.
Vielleicht gibt es auch eine 4.te oder 5.te Methode. Hier würde ich gerne auf die Erfahrungen der Community zurückgreifen.
Ich weiß, dass heutige SharedWebhosts recht performant sind und vielleicht ist das Thema Last gar kein Thema.

Man möchte aber dann im Code das Beste rausholen.
(Und bitte keine Kommentare wie "Google doch", denn ich brauche einfach ein bißchen Brainstorming)

Besten Dank jetzt schon
 
Klingt nach vorzeitiger Optimierung. Bau doch erstmal das, was am einfachsten ist und messe die Performance, vermutlich machst du dir unnötig Gedanken.
 
  • Gefällt mir
Reaktionen: sgraphic
Wofür brauchst du das eigentlich? Wie oft muss da was berechnet werden? Wie umfangreich ist ein Durchlauf? Wie lange dauert der auf einem Testsystem?

Davon hängt mMn schon viel ab.
Grundsätzlich gilt: Lokale Daten zu nutzen ist schneller als Daten hin und her zu schieben. Eine Mischvariante von PHP+MySQL halte ich nur dann für brauchbar, wenn die Daten ohnehin schon bewegt werden müssen.
Wenn es nur darum geht sehr simple Berechnungen ohne große Fallunterscheidungen zu machen, würde ich zu MySQL-only tendieren, sofern es sich umsetzen lässt.
Wenn viele Fallunterscheidungen oder komplexe Berechnungen gemacht werden (und das Abrufen der gesamten Daten nicht zu zu hohem Speicherverbrauch führt) würde ich zu PHP-only tendieren (insbesondere mit PHP8, siehe unten)
Wenn die Berechnung auf dem MySQL-Server läuft und regelmäßig Fallunterscheiden basierend auf Zwischenergebnissen o.ä. getroffen werden müssen, die z.B. in PHP implementiert sind, kriegst du am Ende einen massiven Performance-Drop weil jede Kommunikation z.B. von der Netzwerklatenz abhängt.

Außerdem: Welche Version von PHP bietet der Hoster an? PHP8 hat einen neuen JIT-Compiler und der allein könnte die Performance mehr als verdoppeln im Vergleich zu Version 7.

Das Webhosting primär für Berechnungen zu nutzen halte ich davon abgesehen für Verschwendung von Ressourcen. (Und ich weiß nicht, wie die Webhoster das sehen und eventuell in den AGB ausschließen.)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: sgraphic
Fortatus schrieb:
Wofür brauchst du das eigentlich? Wie oft muss da was berechnet werden? Wie umfangreich ist ein Durchlauf? Wie lange dauert der auf einem Testsystem?

Davon hängt mMn schon viel ab.
Grundsätzlich gilt: Lokale Daten zu nutzen ist schneller als Daten hin und her zu schieben. Eine Mischvariante von PHP+MySQL halte ich nur dann für brauchbar, wenn die Daten ohnehin schon bewegt werden müssen.
Wenn es nur darum geht sehr simple Berechnungen ohne große Fallunterscheidungen zu machen, würde ich zu MySQL-only tendieren, sofern es sich umsetzen lässt.
Wenn viele Fallunterscheidungen oder komplexe Berechnungen gemacht werden (und das Abrufen der gesamten Daten nicht zu zu hohem Speicherverbrauch führt) würde ich zu PHP-only tendieren (insbesondere mit PHP8, siehe unten)
Wenn die Berechnung auf dem MySQL-Server läuft und regelmäßig Fallunterscheiden basierend auf Zwischenergebnissen o.ä. getroffen werden müssen, die z.B. in PHP implementiert sind, kriegst du am Ende einen massiven Performance-Drop weil jede Kommunikation z.B. von der Netzwerklatenz abhängt.

Außerdem: Welche Version von PHP bietet der Hoster an? PHP8 hat einen neuen JIT-Compiler und der allein könnte die Performance mehr als verdoppeln im Vergleich zu Version 7.

Das Webhosting primär für Berechnungen zu nutzen halte ich davon abgesehen für Verschwendung von Ressourcen. (Und ich weiß nicht, wie die Webhoster das sehen und eventuell in den AGB ausschließen.)
Sauber. Das wollte ich wissen.

Ich war immer der, der die Methode 3 genommen hätte.
Die Berechnungen sind sehr simple und nur eine andere Diskussion brachte mich auf die Möglichkeit die simplen Berechnungen auf SQL Basis zu machen. Dieses ist bei mir tatsächlich in Vergessenheit geraten.

Volständigkeitshalber: die auswählbare PHP Version wäre 8.0.1

Es wird auch keine Fallunterscheidung benötigt und es sind tatsächlich sehr einfache arthm. Berechnungen.

Ich hätte jetzt nur ein Dreizeiler von Dir erwartet, aber Du hast ja fast eine kleine "Diplomarbeit" geschrieben und hier erstmal einen Riesendank.

Ich warte aber noch auf paar Ideen (nichts gegen Deine Ausführung)
 
Zurück
Oben