phpbar.de logo

Mailinglisten-Archive

[php] Textfiles contra DB für Gästebucheinträge

[php] Textfiles contra DB für Gästebucheinträge

Dennis Sterzenbach lists at darknoise.de
Don Feb 24 10:57:20 CET 2005


Actra AG Internet Services wrote:
> A) Kann ich so die Gesamtzahl von MySQL-Queries aus dem Portal reduzieren
Wenn du kein MySQL verwendest, brauchst Du auch keine MySQL-Query :-)

> B) Ist die Seite schneller, wenn die Daten aus kleinen Textdateien gelesen
> werden !?
Bei kleinen Textdateien, ja.

> C) Sehe ich so direkt, welches Mitglied mit seinem Gästebuch wieviel
> Speicherplatz belegt
Über Quota etwa könntest Du das für jeden Benutzer festlegen, ablesen 
anhand der Dateigröße, klar. Ist die Frage, wie Du das ermitteln 
wolltest: regelmäßige Prüfung durch Cronjob, der die Gästebuch-Dateien 
auf Ihre Größe scannt, oder aber in das GB-Script eingebracht....

> Gibt es ein Limit von der Grösse dieser Textdateien, das diese nicht
> überschreiten sollten, da es ansonsten zu Problemen kommen könnte? Zum
> Beispiel 2000 Einträge oder so...
An den Einträgen kannst du dies gar nicht festmachen.
Es gibt Beschränkungen. Aber nicht direkt von Seiten der Technik, 
sondern eher vom Konzept und Sinndenken.
Es hat meiner Meinung nach kaum noch Sinn Textdateien zu verwenden, wenn 
die Zahl der Einträge 3 oder 4-stellig ist (da diese ja interpretiert 
werden müssen, nicht indiziert sind für Suchen, Sortieren oder Paging, 
direktes Löschen nicht möglich etc.)
Im Dateisystem kommt es auf dein Betriebssystem und den Kernel an.
Ich würde das der Performance wegen einmal abwägen und durchtesten.

Wenn Du den Quelltext, den Du gepostet hattest, analog auch für das 
Auslesen verwendest, kommst Du schnell an die Grenzen.
Die liest mit file() die Datei komplett in den Speicher. Je größer die 
Datei, desto mehr Arbeitsspeicher, desto größer die Strukturen 
(Arrays...), desto aufwändiger die Verarbeitung.

Daher würde ich eher dazu tendieren, die Datei zeilenweise auszulesen 
und bei Löschen der Einträge das Original-File locken, in eine temporäre 
Arbeitskopie schreiben. Nach Beenden des Vorgangs, original freigeben 
und unlink(), danach Arbeitskopie umbenennen....

>   $lineArray = split("\|", $line);
Tip: explode('|', $line) ist um einiges schneller als split. Grund 
hierfür ist recht einfach: split sucht nach einem regulären Ausdruck.
explode dagegen arbeitet auf Basis einer einfachen Text-Suche.

> ES wird also jedesmal das File geleert und wieder neu gefüllt, jedoch ohne
> den zu löschenden Eintrag...
> 
> Gäbe es dafür eine schönere Lösung, um einzelne Einträge zu löschen? Die
> Einträge sind im Textfile ungefähr in dem Format:
> 
> ID|Datum|Name|Email|URL|Titel|Text|
> 
Das wird nicht möglich sein, da du die komplette Datei einlesen musst, 
bevor du den Eintrag löschen kannst etc.

Hoffe das hilft Dir ein wenig weiter.

Gruß aus Hannover
-- 
   Dennis Sterzenbach

php::bar PHP Wiki   -   Listenarchive