php, txt datei oder mysql, was ist schneller?

4 Antworten

Alles was technischen overhead macht ist in dem Fall natürlich langsamer. Es geht um 3 einzelne Zahlen, also eine wirklich minimale Datenmenge.
Theoretisch sollte da in jedem Szenario die Performance keine rolle spielen weil es blitzschnell geht egal wie du es machst.
Ich kann mir auch überhaupt nicht vorstellen, was da jetzt 500ms dauern soll.
In jedem fall ist natürlich 1 HTTP Request schneller als 3 und 1 HTTP Request ist natürlich schneller als 1 HTTP Request und eine Datenbankverbindung aufzubauen, eine SQL Abfrage zu schicken usw.

Eins ist weniger als Vier, eine Kuh zu melken dauert nicht so lange wie Vier zu melken.

Woher ich das weiß:Hobby – C++ & Co. seit '05

Bei einer kleinen Anzahl an Datensätzen wäre das Auslesen/Schreiben einer Textdatei mit beispielsweise CSV-Format schneller als eine Datenbank. Vor allem dann, wenn die Daten nach Berechnung des Mittelwerts nicht weiter persistent gespeichert werden sollen, würde es sich eher lohnen, die Daten so lange wie möglich im Arbeitsspeicher zu halten (Stichwort: Caching).

Bei einer persistenten Speicherung wäre es eine gute Idee, Daten blockweise zu speichern (also erst alle z.B. 50 Datensätze, statt direkt nach jedem Datensatz).

Das schnellste wird da wohl die eine Datei sein. Mehrere Dateien bringen nur zusätzlichen Overhead hinsichtlich öffnen, auslesen, etc. Bei 4 Zahlen in einer Datei sollten die in einen Block passen und direkt gelesen werden.

Datenbank ist auch nur zusätzlicher overhead, der das langsamer macht.

Woher ich das weiß:Berufserfahrung – Softwareentwickler & Admin

jumbo125 
Beitragsersteller
 27.12.2023, 21:30

Die 4 zahlen in form von neuen zeilen oder in einer zeile mit semilion getrennt?

Öffnen, abfragen wie vuele Einträge, schreiben oder rechnen, datei leeren

iQa1x  27.12.2023, 21:50
@jumbo125

Erste 3: Öffnen zum Anhängen, neue Zeile schreiben. Spart da jeweils das Einlesen und neu Schreiben.

4: Einlesen (file), mittels foreach aufsummieren und gleichzeitig zählen, dann Durchschnitt rechnen und file mit truncate leer machen oder löschen.

jumbo125 
Beitragsersteller
 27.12.2023, 22:01
@iQa1x

Okay. Alles in einem file korrekt?

Da ich ja nicht weiß, das wievielte mal der wert geschrieben wird, muss ich bei jedem auruf abfragen, wie oft bereits ein eintrag gescgrieben wurde....

1. Datei zum anhängen öffnen, wert anhängen.

2. Datei zum lesen öffnen und nachsehen wieviele Einträge vorhanden sind.

3. Falls 4 Einträge vorhanden, den mittelwert berechnen und Datei leeren

Falls noch keine 4 Einträge, Datei einfach schließen. Korrekt? Das sollte am schbellsten gehen

iQa1x  28.12.2023, 00:10
@jumbo125

Wenn das nur 4 ganz normale Zahlen sind kannst du die auch jedes Mal einlesen, zählen, anhängen und wieder rausschreiben.

$data = file("filename");
$count = count($data);
if (count<3) {
  $data[] = $current;
  file_put_contents("filename", implode("\n", $data));
} else {
 $sum = $current;
 foreach(data as $v) $sum = $sum+$v;
 $avg = $sum/4;
file_put_contents("filename", "");
}

oder so ähnlich...

Wenn das auf dem Controller geht, schreibe das File auf eine Ramdisk...

jumbo125 
Beitragsersteller
 28.12.2023, 00:28
@iQa1x

Okay

Dachte fgetscsv ist schnelle als file put contents... Gibt es eigentliche eine literatur, wielange welche Funktionen brauchen bzw was Ressourcen sparender ist?

Ist eine Abfrage bzw Erstellung alle 500ms sehr "Ressourcen fressend"? Sollte ich es auf 1s verlängern, sodass der esp "nur alle 1s Daten" sendet?Ich habe Angst, das sich der nginx Server aufhängt, wenn das alle 500ms stattfindet

iQa1x  28.12.2023, 17:56
@jumbo125

Geschwindigkeit: Selbst ausprobieren, microtime und ein paar 1000 aufrufe in einer Schleife zum Testen helfen.

Das 2. probiere halt auch einfach aus, da nun parallel zu den Testanfragen ne Konsole mitlaufen zu lassen, um mit top den Load anzuzeigen sollte machbar sein. Ich weiss nicht, wie performant ein esp ist.