Der fette Mo: Fragen zur Speicherung von Daten und Caching in einem CMS

Guten Tag allerseits,

ich habe in nächster Zeit ein größeres Projekt vor: Ein CMS. (für LAMP) Leider musste ich bemerken, dass ich besonders wenig Ahnung von Sinn und Unsinn/Vorteilen und Nachteilen/Konzepten von Caching-Systemen habe. Deshalb ein paar Fragen:

1. Die gängigen CMS speichern - soweit ich weiß - die Seiten in einer Datenbank und cachen dann die Datenbankabfragen. Ich finde das irgendwie umständlich. Was spricht dagegen, statische Seiten direkt in eine PHP-Datei zu schreiben statt Umwege über die Datenbank zu machen? (Zumindest wenn es um die veröffentlichte Version geht.)

2. Ist es sinnvoller, Konfigurationseinstellungen in einer Datenbanktabelle oder einer Konfigurationsdatei (in der ein Array mit den Einstellungen definiert wird) zu speichern? Ich habe beides schon gesehen. Was ist wohl performanter, die Konfigurationsdatei (die womöglich viel Hauptspeicher belegt, da alle benötigten und unbenötigten Konfigurationseinstellungen eingelesen werden) oder jede Konfigurationseinstellung einzeln wenn benötigt aus der Datenbank zu holen?

3. Was sollte ich zu Caching-Systemen allgemein wissen? Unter welchen Umständen sind sie sinnvoll? Welche Voraussetzungen müssen sie erfüllen? Was sollte man cachen und was nicht?

Gruß,
Der fette Mo

--
sh:( fo:| ch:? rl:? br:^ n4:& ie:% mo:) va:) de:> zu:| fl:{ ss:| ls:& js:|
What do programming and sex have in common? You have to support your mistakes all life long.
  1. hi,

    1. Die gängigen CMS speichern - soweit ich weiß - die Seiten in einer Datenbank und cachen dann die Datenbankabfragen. Ich finde das irgendwie umständlich. Was spricht dagegen, statische Seiten direkt in eine PHP-Datei zu schreiben statt Umwege über die Datenbank zu machen?

    Wieso in eine "PHP-Datei"?
    Wenn (X)HTML als Output rauskommt, kann doch (X)HTML auf Platte gespeichert und von dort aus ausgegeben werden.

    1. Ist es sinnvoller, Konfigurationseinstellungen in einer Datenbanktabelle oder einer Konfigurationsdatei (in der ein Array mit den Einstellungen definiert wird) zu speichern? Ich habe beides schon gesehen. Was ist wohl performanter, die Konfigurationsdatei (die womöglich viel Hauptspeicher belegt, da alle benötigten und unbenötigten Konfigurationseinstellungen eingelesen werden) oder jede Konfigurationseinstellung einzeln wenn benötigt aus der Datenbank zu holen?

    Wenn du alle nötigen mit einem SELECT-Statement ausgelesen bekommst ... ich hab auch schon Systeme gesehen, die für jeden Wert einen eigenen SELECT abfeuern ...

    Zugriff auf Dateien auf Platte dürfte idR. schneller gehen, als Auslesen aus einer DB - langsamer Verbindungsaufbau fällt bspw. weg.

    Dafür aber eben Vorteile wie individuelle Selektierbarkeit.
    Auf Platte kann man dann nur zu Modulen oder Blöcken zusammenfassen und entscheiden welche(r) gebraucht wird/werden.
    Zu viel Lesen von Einzeldateien von Platte ist dann auch wieder nicht so performant.

    1. Was sollte ich zu Caching-Systemen allgemein wissen? Unter welchen Umständen sind sie sinnvoll? Welche Voraussetzungen müssen sie erfüllen? Was sollte man cachen und was nicht?

    Auf jeden Fall ebenfalls beschäftigen solltest du dich mit dem Caching auf der Ebene zwischen Server und Client - also HTTP. Last-Modified, ETag, etc.
    Gecached werden sollten Inhalte, die sich selten oder "nicht allzu oft" ändern. In einem Chat, wo alle dreieinhalb Sekunden neues Gebrabbel dazukommt, wäre ein Auslagern fertig aufbereiteter Daten sicher weniger sinnvoll.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hello,

      Gecached werden sollten Inhalte, die sich selten oder "nicht allzu oft" ändern. In einem Chat, wo alle dreieinhalb Sekunden neues Gebrabbel dazukommt, wäre ein Auslagern fertig aufbereiteter Daten sicher weniger sinnvoll.

      ich will mich für den Augenblick nicht allzusehr einmischen, ich habe selbst mal mit dem Gedanken gespielt ein CMS zu implementieren, aber die technische Vielfalt für ein großes System hat mich nach einiger Zeit dann abgeschreckt.
      Was bisher vergessen wurde ist, dass ein "Hochleistungs"-CMS den Cache u.U. noch an einer anderen Ebene einsetzt, nämlich nicht bei "mach aus dynamisch statisch" sondern bei "liefere statisch an verschiedene Clients aus", d.h. neben dem Erstellen von HTML-Dateien kommen u.U. auch Caching-Ansätze zum Einsatz, die häufig genutzte HTML-Seiten permanent im Speicher halten, ein Konzept, wo mir meine begrenzte PHP-Erfahrung allerdings sagt "ist nicht", weil man eine echt laufende Anwendung, Application-Server etc. bräuchte.

      MfG
      Rouven

      --
      -------------------
      There's no such thing as a free lunch  --  Milton Friedman
    2. Guten Tag allerseits,

      Wieso in eine "PHP-Datei"?
      Wenn (X)HTML als Output rauskommt, kann doch (X)HTML auf Platte gespeichert und von dort aus ausgegeben werden.

      Ich hatte nicht zwingend GANZ statisch gemeint. Könnte ja z.B. eine Abstimmung eingebaut sein.

      Wenn du alle nötigen mit einem SELECT-Statement ausgelesen bekommst ...

      Dann würde ja genau der von mir genannte eventuelle Vorteil wegfallen.

      ich hab auch schon Systeme gesehen, die für jeden Wert einen eigenen SELECT abfeuern ...

      DAS hatte ich als Alternative gemeint.

      Auf jeden Fall ebenfalls beschäftigen solltest du dich mit dem Caching auf der Ebene zwischen Server und Client - also HTTP. Last-Modified, ETag, etc.
      Gecached werden sollten Inhalte, die sich selten oder "nicht allzu oft" ändern. In einem Chat, wo alle dreieinhalb Sekunden neues Gebrabbel dazukommt, wäre ein Auslagern fertig aufbereiteter Daten sicher weniger sinnvoll.

      Danke, daran hatte ich gar nicht gedacht!

      Gruß,
      Der fette Mo

      --
      sh:( fo:| ch:? rl:? br:^ n4:& ie:% mo:) va:) de:> zu:| fl:{ ss:| ls:& js:|
      What do programming and sex have in common? You have to support your mistakes all life long.