hotti: PHP txt-datei oder mysql?

Beitrag lesen

hi,

die Performance auf Dateizugriffe ist von vielen Faktoren abhängig, ein paar Anmerkungen zu Textdateien mit der Struktur einer ini:

[section]
attr = property
param = value

Solche Dateien lassen sich vorzüglich von Hand bearbeiten und es gibt in PHP, Perl u.a. Programmiersprachen fertige Funktionen und Module für den Zugriff. Genau hier liegt jedoch das Problem, dass zum Parsen (Lesen) einiges an CPU und RAM gebraucht wird, weil die Strukturierung rein textlicher Natur ist. Kurzum, auf den Systemen, die mir bisher unterkamen, wird das Parsen ab einer Dateigröße von 500 kB...1 MB fürs Web unakzeptabel. Bei CSV-Dateien ist das im Prinzip genauso.

Wesentlich performanter ist das Lesen und Schreiben von Dateien, in denen keine textliche Strukturierung vorliegt, also Dateien, die byteweise bearbeitet werden, hier habe ich die Grenzen einer aktzeptablen Performance noch nicht erreichen können, d.h., beim Einlesen einer Dateien mit 10 MB gibt es für die Maschine einen kurzen Burst und das wars. Ich habe dieses Beispiel bewusst gewählt: in einer 10 MB Binärdatei lässt sich der komplette Content einer Website mit mindestens 500 HTML-Seiten sämtlicher Attribute wie title, descr, author, lastmod usw. unterbringen.

Noch ein Beispiel vielleicht: Eine Tabelle mit 5000 Zeilen und 10 Spalten belegt als binary ca. 1 MB, mein letzter Auftrag beeinhaltete ein Frontend zum Editieren dieser Tabelle (Auftragsverwaltung), diese Anwendung erfreute sich großer Beliebtheit wegen der schönen Performance ;-)

Wenn Du einen DB-Server verwendest: der größte Overhead entsteht beim Aufbau der Verbindung, das lässt sich z.B. dadurch umgehen, dass die Anwendung eine Verbindung dauerhaft aufrechterhält (z.B. ein FastCGI). Ansonsten wirst Du auch hier die Daten zum Bearbeiten in eine programmgerechte Struktur umwandeln, sofern die Daten hingegen aus einer Datei kommen, liegt eine solche Struktur (z.B. ein Array oder Hash) unmittelbar nach dem Parsen der Datei vor.

Als Pro/Kontra DB/Datei ist evntl. die Zeichen- bzw. Byteorientierung auch noch ein Aspekt, mit einer DB bist Du zeichenorientiert abhängig von der Kodierung (utf-8, iso...) und in der Übertragungskette gibt es einige Möglichkeiten, wo sich Fehler einschleichen können (das Forum hier ist voll davon); eine Speicherung und Verarbeitung von Rohdaten ist weit weniger problembehaftet in dieser Hinsicht.

Viele Grüße,
Hotti