Sven Rautenberg: Statische Daten per Adminpanel verändern

Beitrag lesen

Moin!

Natürlich könnte ich diese Informationen nun in einer Datenbanktabelle speichern. Da meine Anwendung aber ohnehin schon zahlreiche Datenbankzugriffe verzeichnet wollte ich das eigentlich vermeiden, da ich die Informationen bei eigentlich jedem Seitenaufruf benötige.

ALLE Informationen? Oder nur gezielt einzelne Informationen? Und stehen diese Werte mit der Datenbank in irgendeiner Beziehung?

Ist es für solche Fälle usus mittels PHP ein PHP-Dokument zu erzeugen, dass dieses Array enthält und dieses in mein Programm einzubinden? Oder sollte man von solchen Lösungen lieber die Finger lassen, da ja unter Umständen ein der Parser auf einen Fehler stoßen könnte, wenn man eine Eventualität übersieht oder einfach der Speichervorgang unterbricht.

Wenn man es richtig macht, kann nichts passieren. Stichwort serialize()/unserialize(). Diese Funktionen sorgen für eine syntaxgerechte Behandlung aller Zeichen, die man in einem Array so speichern kann. Zusammen mit ein wenig Escaping kannst du dir recht simpel eine PHP-Zeile erstellen, die dir die Array-Werte wieder zur Verfügung stellt.

Oder ist es ratsam, die Informationen in einer Session-Variable zwischen zu speichern?

Wie kommen die Daten in die Session? Und wie stellst du sicher, dass die Daten in allen Sessions gleichzeitig aktualisiert werden, wenn sich der unwahrscheinliche Fall ergibt, dass du in den Daten doch mal was ändern mußt?

Nein, Sessiondaten sollten wirklich nur für Sessionwerte genutzt werden. Das ist auch programmlogisch übersichtlicher.

Wie viel Information verträgt so eine Zwischenspeicherung denn? Es wären an die 1000 bis 10000 Werte, bei 10 bis 100 Nutzern gleichzeitig, je nach Umfang der Nutzung. Ich fürchte, dass das den Arbeitsspeicher ein wenig überlassten könnte. (Die Session-Variablen wären aber für alle Nutzer identisch, was sich wohl nicht ausnutzen lässt.)

Du kannst in PHP allgemein nur begrenzt Variablen speichern, das Maximum wird durch memory_limit bestimmt. Session-Variablen werden, wenn keine selbstprogrammierte Speichermethode genutzt wird, aus einer Textdatei ausgelesen, in der sie serialisiert gespeichert sind. Viele Daten = große Textdatei = mehr Zeitaufwand beim deserialisieren. Entsprechend wird am Skriptende wieder diese Textdatei beschrieben. Viele Daten = mehr Aufwand beim serialisieren = große Textdatei. Da unveränderliche Werte aber nun absolut nicht jedes Mal erneut gespeichert werden müssen, ist die Session absolut der falsche Ort dafür.

Eine PHP-Datei mit wahlweise Serialisierung oder direkter Erzeugung eines Arrays zu parsen kostet zwar auch Aufwand und Zeit - aber die Datei wird nur einmal pro Skript gelesen. Dasselbe stimmt, wenn man die Daten stattdessen in der Datenbank speichert. Das dürfte einen Tick zeitaufwendiger sein, aber wenn die Fixdaten mit den anderen DB-Daten in Beziehung stehen, ergibt sich u.U. ein konsistenteres Datenmodell. Deshalb hängt es tatsächlich von der Art der Daten ab, wo diese am schlauesten untergebracht werden.

Unter Performancegesichtspunkten an die Sache heranzugehen halte ich solange für unsinnig, solange kein anderer Teil des Codes auch unter diesem Gesichtspunkt durchleuchtet worden ist - und solange die Performance keine Probleme macht.

- Sven Rautenberg

--
"Love your nation - respect the others."