Cache-System zur Lastminderung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cache-System zur Lastminderung

    Hi Leute,

    ich habe gerade ein Cache-System fertiggestellt, mit dem ich meine Datenbank entlasten will. Einmal aufgerufen, werden alle nötigen Daten in einer eigenen Datei für jede Seite in einem Unterordner abgelegt.
    Nun habe ich aber mal hochgerechnet und kome dabei auf ca. 50 kb pro Datei bei gut 20.000 Dateien - also ein gutes GB...
    Kann man dabei aber noch von einer Lastminderung sprechen? Die Datenbank hat zwar weniger zu tun, aber dennoch befürchte ich einerseits zu lange Wartezeiten (weil der Ordner nunmal so groß ist) und andererseits eine höhere "Last" für die gesamte Domain.

    Sind meine Befürchtungen berechtigt, oder kann ich auch Mio. Dateien draufpacken und den Webspace vollends ausnutzen, ohne dass ich Leistungsminderungen erwarten muss?

    arrays sind klasse

  • #2
    bei so vielen dateien lohnt sich das cachen wohl nicht, da fast jeder user wohl eine andere seite zu gesicht bekommen wird (allein aufgrund der anzahl der möglichkeiten)

    sollte es so sein, dass bestimmte rubriken öfters angeschaut werden, als andere, dann cache nur diese.

    ich denke nicht, dass das cachen für sagen wir 10 views so viel einspart


    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

    Kommentar


    • #3
      Bevor Du so einen Aufwand mit Caching betreibst .. würde ich mir mal die DB-Struktur anschauen ... bzw. eventuell Prüfen ob mit einer Ausrüstung des Servers, bzw. einem dedizierten DB-Server was zu reissen ist ... !
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        Nun habe ich aber mal hochgerechnet und kome dabei auf ca. 50 kb pro Datei bei gut 20.000 Dateien - also ein gutes GB...
        ok, also liegen die kompletten Seiten im Cache.
        Wäre es sinnvoller nur die Ergebnisse zu cachen? Bei einigen SELECTs wird es wohl egal sein aber bei einigen JOINs kann man dort natürlich einiges sparen.
        Werden die 20.000 Seiten dann auch alle benutzt? Alle gleichermaßen?
        Wie ist die Seite denn aufgebaut?

        Liegen die 20.000 Dateien alle in einem Ordner?
        Wenn ja, mache Unterordner, gruppiere das ganze, das FS müßte dann auch schneller auf die Dateien zugreifen können.
        [Test] MySQL cli Emulator

        Kommentar


        • #5
          Es sind alles statische Daten, die bei jedem aufruf der Seite gleichermaßen geladen werden. Die Häufigkeit des Aufrufens einer bestimmten Seite ist bei ca. 10 % gut hoch (an 1000-5000 mal pro Woche) während die meisten Seiten vielleicht 10-50 mal pro Tag geladen werden. (Habe ziemlich gute Ranings ). Die Absicht des Cache-Systems war zu aller erst die Entlastung des Servers bzw. der Datenbank, da die durchlaufenen Querys gut 50% meiner Geamtprozesse ausmachen. Eine Einschränkung der Querys wollte ich eben mit den gecachten Dateien bewirken. Wenn diese aber mehr Last verursachen, als sie wet machen, muss ich wohl noch dran pfeilen. (nur wie noch?)

          Eine Optimierung der SELECTs kann ich mir nicht vorstellen, da das Ganze schon ziemlich spartnisch aufbebaut ist und nur die nötigsten Sachen von versch. Tabellen geladen werden.

          Das Cache-System legt alle SELECTs bzw. die gefetchten arrays in eine eigene PHP-Datei unter einer Variable ab, die geladen wird, wenn die Datei existiert (also mit file_exists()).

          Es liegen auch alle Dateien in einem einzigen Ordner. Das Mit den Unterordnern wäre eine Idee, hoffentlich nützt es was
          arrays sind klasse

          Kommentar


          • #6
            Eine Optimierung der SELECTs kann ich mir nicht vorstellen, da das Ganze schon ziemlich spartnisch aufbebaut ist und nur die nötigsten Sachen von versch. Tabellen geladen werden.
            poste doch mal ein Beispiel Deiner Struktur. Also von einer viel genutzen Tabelle.

            Die Absicht des Cache-Systems war zu aller erst die Entlastung des Servers bzw. der Datenbank, da die durchlaufenen Querys gut 50% meiner Geamtprozesse ausmachen.
            ok, also Du hast einen eigenen Server? Man könnte auch MySQL neu kompilieren & konfigurieren, aber ich denke nicht dass das notwendig ist.

            Das Cache-System legt alle SELECTs bzw. die gefetchten arrays in eine eigene PHP-Datei unter einer Variable ab, die geladen wird, wenn die Datei existiert (also mit file_exists()).
            ok, also werden die SELECTs ca. so gespeichert?
            PHP-Code:
             <?php
            $select_result 
            = array();
            $select_result[0]['name'] = 'BlaBla';
            $select_result[0]['id'] = 1;
            $select_result[1]['name'] = 'Blup';
            $select_result[1]['id'] = 2;
            ?>
            also hast Du nur die Ergebnisse im Cache und nicht die kompletten Seiten?

            Hast Du schonmal probiert für einige Sachen HEAP Tabellen zu erstellen?
            Bei Dir wird wohl mehr gelesen und selten geschrieben.

            Ist die Seite den schon online?
            [Test] MySQL cli Emulator

            Kommentar


            • #7
              @ NielsRunge

              Ein kleines Bsp. der Daten-Struktur in der Datenbank:

              Index-Tabelle:
              ID | text_ids
              1 | 7,4,5,9,8
              2 | 1,5,3,9,9
              3 | 2,3,4,9,5
              4 | 5,6,3,9,8
              5 | 1,3,5,8,7
              ...

              Text_Tabelle:
              Text_Id | Text
              1 | a
              2 | b
              3 | c
              4 | d
              5 | e
              ...

              $a = SELECT text_ids FROM Index-Tabelle WHERE ID = X
              $b = SELECT Text FROM Text_Tabelle WHERE Text_ID IN ( $a[$Text_Ids] )

              fopen ("datei.php", "w")
              fputs( $b )
              fclose

              (natürlich alles etwas einfach ausgedrückt )


              - Jep, hab einen eigenen (gemieteten) Server.

              - Die Daten werden eigentlich genauso gespeichert

              - Jep, nur die Ergebnisse und nicht die HTML-Seiten

              - Was sind HEAP-Tabellen?

              - Die Seite ist online; momentan aber noch die alte nicht-cache-Version mit nur halb sovielen Daten.
              arrays sind klasse

              Kommentar

              Lädt...
              X