Sven Rautenberg: Performance: Datei oder Session

Beitrag lesen

Moin!

Nun weiß ich allerdings nicht, ob es besser wäre den Part in eine Datei auszulagern und diese bei jedem Zugriff einzulesen, oder den Part in die Session des Users zu schreiben.

Hast du mal recherchiert, wie PHP Sessions realisiert? Überraschung: PHP schreibt die Daten in eine Datei!

Dein "oder" ist also keine wirkliche Alternative, weil "schreibe ich's manuell in eine Datei oder schreibe ich's mit Sessions in eine Datei" keinen wirklichen Unterschied in der Geschwindigkeit macht... außer in einem relativ wichtigen Detail: Session-Nutzung nutzt intensiv Datei-Locks, d.h. dein einer User wird seine eigene Session-Datei niemals parallel in PHP-Skriptaufrufen nur "lesen" können, denn Session-Daten werden grundsätzlich am Skriptende (oder wenn man das früher veranlasst) auch wieder weggeschrieben.

Insofern sind Sessions durchaus performancebelastender, andererseits ist das Caching in eine Datei halt auch nicht zum Nulltarif zu bekommen. Und obendrein wäre die Frage, ob deine Probleme sich durch das Caching verringern lassen, denn das übliche Problem bei intensiv die DB nutzenden Seiten ist eigentlich eher, dass parallel ablaufende Datenbankabfragen schreiben und lesen und sich deshalb gegenseitig mit Locks aussperren.

Die simpelste Methode wäre daher, dieses Locking zunächst bestmöglich wegzukonfigurieren (Welche Storage-Engine benutzt du? MyISAM ist ganz schlecht, InnoDB definitiv ratsam.), als nächstes dann den MySQL-Query-Cache bestmöglich auszunutzen (Hat der genug RAM verfügbar für diese ganzen "unveränderlichen" Abfragen?), und erst dann über ein geeignetes Caching nachzudenken.

Was ist schneller? Eine Anfrage an die MySQL DB oder das auslesen einer Datei? Ich finde dazu keine definitiven Aussagen bei Google, und eigene Tests haben mich nur noch mehr verunsichert. Mal liegt die Abfrage vorn, dann mal wieder die Datei.

Dann ist die Antwort offensichtlich ein "hängt von diversen Randfaktoren ab und ist nicht allgemein aussagbar", sprich: Deine Tests haben dir gesagt, dass dein derzeitiger Ansatz zur Optimierung im Moment keinen wirklichen Vorteil liefert.

- Sven Rautenberg