Daniel S.: Dateien cachen

Da mein Server(Debian 3.1, Apache 2, PHP 4.3.10-16) derzeit stark ausgelastet ist, dachte ich mir das ich einige dynamische PHP Seiten mit Datenbankabfragen cachen könnte um Datenbankzugriffe zu sparen. Dazu wollte ich Teile einiger Seiten aller 5 Minuten per Cronjob neu zwischenspeichern. Diese Teile werden dann per include in meine Hauptskripte(PHP) eingebunden.

Nun mache ich mir Sorgen um die Zugriffsrechte. Die Cache Datein werden definitiv nur mit maximal einem Schreibzugriff bei der Aktualisierung belegt (5 Minuten Cronjob), werden jedoch mehrmals die Sekunde gelesen. Kann es dabei zu Problemen kommen, wenn die Datei gerade neu geschrieben wird, aber ein Skript versucht diese zu lesen? (liest dann z.B: nur die Hälfte der Daten oder fehlerhafte  aus oder kann nicht zugreifen)

  1. Lass das ganze doch vom Apache erledigen. Das macht die Arbeit gleich viel einfacher.
    Infos hier: http://httpd.apache.org/docs/2.0/mod/mod_cache.html

    1. Lass das ganze doch vom Apache erledigen. Das macht die Arbeit gleich viel einfacher.
      Infos hier: http://httpd.apache.org/docs/2.0/mod/mod_cache.html

      nein der nützt mir nichts, ich nutze auch schon eaccelerator. da die meisten seiten dynmaisch sind, bzw. teile davon immer, möchte ich nur teile davon cachen, nicht die ganze Seite. Ziel ist es die Datenbank abfragen für z.b. die Startseite zu reduzieren. es werden immernoch Abfragen gemacht für z.b. das mitgliedersystem(ein/ausgeloggt oder ob neue Nachrrichten vorhanden sind) jedoch soll der Hauptinhalt nur noch aller 5 minuten aktualsiert werden. Bei Mitgliedersystem und Hauptinhalt handelt es sich dabei um eine (1) PHP Seite die erst z.b. prüft ob die Session des Users passt(dynamisch) und den Rest der Seite aus einem Cache lädt, den ich aller 5 Minuten aktualisiere. "Der Rest" ist dabei zwar auch dynamisch, es ist aber nicht so relevant, wenn er sich nur aller 5 Minuten aktualisiert. Ob ein Mitglied eingeloggt ist bzw. neue Nachrichten hat, sollte aber trotzdem beim jeden Seitenaufruf weiterhin abgefragt werden.

      Darum besteht für mich noch das Problem, ob die häufigen Lesezugriffe mit dem einzelnen Schreibzugriff auf die Cache-Datei Probleme bereiten könnten

      1. Ich grüsse den Cosmos,

        Ziel ist es die Datenbank abfragen für z.b. die Startseite zu reduzieren.

        Mal abgesehen davon, das die meisten Datenbanksysteme die Ausgabe sowieso cachen, bzw. im RAM halten, könntest du dir das Caching von Smarty ansehen, das IMO recht effektiv ist.

        Möge das "Self" mit euch sein

        --
        Ich bin keine Signatur, ich fülle nur diesen leeren Platz mit sinnlosen Worten
  2. Moin!

    Da mein Server(Debian 3.1, Apache 2, PHP 4.3.10-16) derzeit stark ausgelastet ist, dachte ich mir das ich einige dynamische PHP Seiten mit Datenbankabfragen cachen könnte um Datenbankzugriffe zu sparen. Dazu wollte ich Teile einiger Seiten aller 5 Minuten per Cronjob neu zwischenspeichern. Diese Teile werden dann per include in meine Hauptskripte(PHP) eingebunden.

    Hast du denn überhaupt mal analysiert, wo das Problem mit der Performance genau liegt?

    Nur als Beispiel: Wenn deine Datenbank gar nicht überlastet ist, sondern stattdessen der Apache einfach an der Maximalzahl seiner parallelen Prozesse angelangt ist, bringt dir eine Optimierung der Datenbankzugriffe absolut nichts, es wird hinterher genauso mies laufen, wie vorher - aber du hast eine Menge Energie in die Realisierung der falschen Lösung gesteckt.

    - Sven Rautenberg

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