Sven Rautenberg: Daten in DB oder doch lieber in eine Datei?

Beitrag lesen

Moin!

Ok, genau das interessiert mich jetzt. Was bedeutet in der Praxis hier inhomogen? Welche konkreten Nachteile habe ich davon?

Wenn die Kategorienamen in der DB stehen, kann man (grundsätzlich) auf jede Abfrage noch einen JOIN draufsatteln und so zusätzlich zu den IDs, die bei den Blogeinträgen stehen, noch direkt den Kategorienamen zuordnen.

Wenn du die Kategorienamen separat (egal ob als Flatfile, XML oder PHP-Include mit Arraydefinition - letzteres wäre wohl am performantesten für deine Anwendung) speicherst, hast du diese Möglichkeit generell nicht mehr, sondern mußt die Zuordnung der IDs extern realisieren.

Die Lösung mit der Datenbank verhindert diesen Lösungsweg allerdings ebensowenig, denn statt des JOINs wäre es ja auch denkbar, zum Skriptstart die Kategorietabelle komplett auszulesen und zu speichern.

Letztendlich ist alles auch eine Frage der Performance. Eine DB-Tabelle mit 15 Kategorien dürfte so winzig sein, dass sie mit Sicherheit komplett in den HD-Cache und/oder den DB-Cache paßt. Der Aufwand für einen JOIN dürfte deshalb, egal wie groß die Abfrage der Blogeinträge wird, kaum nennenswert irgendetwas bremsen.

Die Methode, am Start jedes Skripts die DB-Tabelle auszulesen, um sie dann manuell zuzuordnen ist im Vergleich dazu sicherlich nicht so optimal, dürfte aber trotzdem nicht zu bemerken sein.

Die XML-Datei dürfte von allen Methoden die langsamste sein, das Text-Flatfile ließe sich ggf. schnell mit file() einlesen (aber das Datenformat wäre dann heftig anfällig gegen Datenveränderung, da die Kategorie-ID in der Zeilennummer steckt), ein Parsing so einer Datei wäre logischerweise aufwendiger, und mit einem PHP-Codeinclude, in dem direkt das Array definiert wird, kommt man wahrscheinlich am Schnellsten davon, wenn man auf den DB-Join verzichten will.

Dennoch würde ich tatsächlich die DB-Tabelle anlegen. Dann ist der Datenbestand immer vollständig in der DB abgelegt und könnte auch von jeder anderen Software ausgelesen werden - die Kategorienamen gehen nicht einfach verloren. Über die DB-Performance muss man sich angesichts der absehbaren Querys jedenfalls keine riesigen Sorgen machen. Üblicherweise werden nur kleine Mengen des Datenbestandes in einem Query abgefragt, mit vernünftigen Indices sollte das kein großes Thema werden.

  • Sven Rautenberg