PHP-Cache

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

  • PHP-Cache

    Bin gerade am überlegen wie ich am besten ein kleinen PHP-Cache realisiere. Habe mich nun schlau gemacht mit ob_get_contents() etc.

    Aber nun meine Frage: wie entscheidet ihr ob eine Datenmenge "outdated" ist?

    Ich hatte mir ein paar Denkansätze überlegt:

    1. MD5-Summen vergleichen <- aber wie aufwendig ist MD5 implementiert?
    2. Zeichengröße vergleichen <- bei großen Datenmengen langsam? was ist bei gleicher Größe und versch. Inhalt?
    3. Jede halbe Stunde neues Daten anfordern <- Einfach, aber nicht optimal
    4. ein Algo, der z.b. jedes n. Zeichen prüft mit n ~ zeichenlänge <- ähnlich wie bei 2 nur schneller, dafür Fehleranfälliger
    5. substr_compare <- wie schnell ist das?

    Was benutzt ihr für Methoden?
    Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
    - ...und solche Behauptungen in "falsches Resourcenmanagement"

  • #2
    Re: PHP-Cache

    Original geschrieben von zerni
    Aber nun meine Frage: wie entscheidet ihr ob eine Datenmenge "outdated" ist?
    Ähm ... vielleicht anhand von Timestamps ...?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ja das habe ich auch im Punkt 3 geschrieben, aber nur weil ein Dokument 5 Stunden alt ist, muss es ja nicht unbedingt neu geladen werden, wenn sich die Daten nicht geändert haben...
      Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
      - ...und solche Behauptungen in "falsches Resourcenmanagement"

      Kommentar


      • #4
        Original geschrieben von zerni
        ja das habe ich auch im Punkt 3 geschrieben
        So meinte ich das natürlich nicht.
        aber nur weil ein Dokument 5 Stunden alt ist, muss es ja nicht unbedingt neu geladen werden, wenn sich die Daten nicht geändert haben...
        Deine Frage war, wie man entscheidet, ob Daten als obsolet zu betrachten sind - und genau darauf bezog sich meine Antwort.


        Wenn es dir um Caching im HTTP-Umfeld geht - dann beschäftige dich mit den zuständigen RFCs, und dabei insb. mit den für Caching zuständigen Headern.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          nene ich meinte schon Caching auf dem Server.

          Sry der Begriff Dokument war falsch. Datenmenge trifft es besser!
          Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
          - ...und solche Behauptungen in "falsches Resourcenmanagement"

          Kommentar


          • #6
            Original geschrieben von zerni
            nene ich meinte schon Caching auf dem Server.
            Na wo ist dann das Problem - Timestamp der Daten und der Speicherung vergleichen, fertig.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              mir geht es um den performantesten Datevergleich, aber ist egal ich benchmarke und schreibs dann hier rein
              Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
              - ...und solche Behauptungen in "falsches Resourcenmanagement"

              Kommentar


              • #8
                Ich gehe mal davon aus, dass du mit PHP-Cache Klasse ein Objekt meinst, dass die Daten im Arbeitsspeicher bereit hält.

                Jeder Änderung dieses im Speicher befindlichen Inhalts sollte also auch durch diese PHP-Cache Klasse erfolgen.

                Da es sich um mehrere verschiedene Inhalte handelt, wirst du diese sehr wohl durch ein ID gekennzeichnet haben.

                So musst du die PHP-Cache Klasse nur noch dazu veranlassen, eine Aktualisierungstabelle bei jeder Änderung mit der zu aktualisierenden ID zu speichern.

                Sollten die Daten zuvor aus einer Datenquelle aus dem Dateisystem geladen werden. So steht dir hierfür ein Zeitpunkt der Erstellung einer Datei zur Verfügung der sich auch mit PHP auslesen lässt. Der Zeitpunkt der Erstellung ändert sich bei jeder Bearbeitung/Änderung der Datei.

                Sollten die Daten zuvor aus einer MySQL-Datenbank vorbereitet werden, so ist in diesem Fall die Verwendung von INNO-DB Datenbanktabellen hervorragend geeignet um eine Aktualisierungsliste innerhalb von MySQL zu realisieren, in dem du die entsprechende ID des Inhaltes mit einer Akutalisierungstabelle per "FOREIGN KEY" und "ON UPDATE" verknüpfts.

                Dies sollte eine recht performante Methode sein.

                Kommentar


                • #9
                  Original geschrieben von hacktor1981

                  Sollten die Daten zuvor aus einer Datenquelle aus dem Dateisystem geladen werden. So steht dir hierfür ein Zeitpunkt der Erstellung einer Datei zur Verfügung der sich auch mit PHP auslesen lässt. Der Zeitpunkt der Erstellung ändert sich bei jeder Bearbeitung/Änderung der Datei.
                  Ich stimme dir fast vollständig zu, so ähnlich hatte ich mir das auch gedacht, aber:

                  Man nehme an eine Datei ist 5 Stunden alt, aber man sobald ein timestamp älter als 30 Minuten ist, will man etwas neu laden -> Datei wird neu geladen
                  Nun gibt es 2 Fällt: Die Datei hat wirklich neuen Inhalt oder die Datei hat noch den gleichen inhalt
                  Nach euch wird jetzt die Datei neu geladen, weil der Timestamp outdated ist, aber wenn es der gleiche Inhalt ist, brauch man das doch garnicht!

                  somit wäre zusätzlich zu dem Timestamp es doch auch noch sinnvoll nachzuprüfen, ob das alte Datenpaket dem neuen gleicht. Wenn ja wird es einfach beibehalten.

                  Meine Frage war nun WIE dieser Vergleich am besten stattfindet
                  Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
                  - ...und solche Behauptungen in "falsches Resourcenmanagement"

                  Kommentar


                  • #10
                    Ich war davon ausgegangen, dass sich der Timestamp der Daten nur dann ändert, wenn auch etwas an den Daten geändert wurde.

                    Wenn das bei dir nicht der Fall ist - dann beschreibe bitte das Umfeld detailierter, damit wir nicht noch länger raten müssen.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      achso ne, dann haben wir aneinnander vorbeigeredet

                      ich dachte ihr meint, dass ihr NUR prüft ob 30 Minuten rum sind, wenn ja dann läd er die Daten einfach rein.

                      ok habs soweit kapiert und setz es einfach mal so um. verfeinern kann ich dann später
                      Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
                      - ...und solche Behauptungen in "falsches Resourcenmanagement"

                      Kommentar


                      • #12
                        Aus Gründen der Performance, um den Prozess der MD5 Prüfung umgehen zu können, gäbe es noch die Möglichkeit des Vergleichs der Kilobyte Größen um die Anwendung nicht zusätzlich durch die MD5 Summen zu belasten.
                        Erst wenn dieser Wert gleich ist, wird eine MD5 Prüfung gestartet.

                        Beachte hierbei, dass die Daten die selbe Codierung verwenden.

                        --------------------------------------------------------------------------------------
                        http://www.php.net/filectime
                        http://www.php.net/md5_file
                        http://www.php.net/crc32
                        http://www.php.net/filesize

                        Kommentar


                        • #13
                          JA!!!!! GENAU DAS!!!!!!!

                          eine Möglichkeit wäre auch das: substr_compare

                          sobald die mündlichen bei mir rum sind, schreib ich mal eine Klasse dafür
                          Zuletzt geändert von zerni; 04.06.2007, 19:45.
                          Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
                          - ...und solche Behauptungen in "falsches Resourcenmanagement"

                          Kommentar


                          • #14
                            Würde generell nen anderen Ansatz nehmen:

                            Code:
                            if(... cachedatei nicht vorhanden ...) {
                                ... erstelle cachedatei ...
                            }
                            ... lade daten aus cachedatei ...
                            Damit liest Du generell alles aus dem Cache. Solltest Du irgendwo was an den Daten verändern, würde ich die entsprechende Cachedatei beim Verändern einfach löschen, worauf vom Script dann halt eine neue erstellt wird. Damit haste deine Daten dauerhaft im Cache liegen und musst Dir über das Alter keine Gedanken mehr machen...

                            Kommentar


                            • #15
                              Damit liest Du generell alles aus dem Cache. Solltest Du irgendwo was an den Daten verändern, würde ich die entsprechende Cachedatei beim Verändern einfach löschen, worauf vom Script dann halt eine neue erstellt wird. Damit haste deine Daten dauerhaft im Cache liegen und musst Dir über das Alter keine Gedanken mehr machen...
                              Ich persönlich würde auch diesen Ansatz verwenden. Allerdings setzt es die Ausführung der Routine voraus.

                              Kommentar

                              Lädt...
                              X