Cache von SQL-Querys

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

  • Cache von SQL-Querys

    Hi Leute,

    ich habe ein größeres Forum, dessen Ladezeiten immer länger werden. Zu Abhilfe dachte ich daran, jedes SQL-Query bzw. die Ergebnisse zu speichern, um sie bei erneuter gleicher Abfrage - sofern kein update, insert, oder delete in der Tabelle stattgefunden hat - anstatt eines erneutes aber immernoch gleichen querys einfach abzurufen. speichern wollte ich die querys in einer variable, die in einer php-datei includet wird.

    Da aber jedes SQL-Query im Puffer gelagert und gleich wieder gelöscht wird, ohne, dass man es so wie es ist einer variable speichern kann, stehe ich vor einem für mich unlösbaren problem, sofern ich meine idee ausführen möchte.

    Daher meine Frage: Ist es irgendwie möglich sich wiederholende Querys in einem auf dem server gespeicherten Cache abzulegen, um sie bei bedarf zu holen und auch mit mysql_fetch_array() und den anderen befehlen weiter zu bearbeiten?

    arrays sind klasse

  • #2
    warum holst du nciht die daten und legst sie in einer textdatei ab.

    noch besser .... auch die formatierung der daten direkt speichern und nur die datei includen.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      ich denke Du könntest einfach serialize / unserialize verwenden.
      Dann einfach Dateinamen ala md5($sql_stmt) verwenden und wenn
      vorhanden laden anstatt die Anfrage nochmal an den DB Server zu senden.
      [Test] MySQL cli Emulator

      Kommentar


      • #4
        Kann ich auch machen bzw. versuchen. Dies ist nur (leider) sehr viel komplexer, als meine erste Idee, da man das ganze gut in die bereits vorliegende software einzupflegen. aber ich werds versuchen
        arrays sind klasse

        Kommentar


        • #5
          war nur ne Idee

          Was jetzt bei Dir am sinnvollsten / einfachsten ist läßt sich ohne weitere Infos über die Software schwer sagen
          [Test] MySQL cli Emulator

          Kommentar


          • #6
            bau doch ein fertiges Chachesystem ein, das html seiten speichert und ausliefert.
            mfg
            marc75

            <Platz für anderes>

            Kommentar


            • #7
              steig doch auf asp um, da gibts das Application Objects

              Kommentar


              • #8
                ASP - *würg*

                php-Entwicklung | ebiz-consult.de
                PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
                die PHP Marktplatz-Software | ebiz-trader.de

                Kommentar


                • #9
                  Die Software ist das altbekannte phpBB, das ich auch schon mit zahlreichen Modifikationen versehen habe - unter anderem auch ein Cachesystem für die darin verwendeten Templates.
                  Dennoch sollte die Geschwindigkeit nochmal etwas gepusht werden...

                  ... daher sollte ein Cache für die Querys her. Dazu müsste ich aber jede Nicht-Select-Aktion separat dokumentieren, um bei Änderung in einer der selektierten Zeilen das Query neu zu ziehen. Aber dies stellt mich wieder vor ein neues Problem

                  ASP muss auch nicht sein
                  arrays sind klasse

                  Kommentar


                  • #10
                    ich kenne phpBB nicht, bzw. sagt mir etwas aber kenne nicht den Code.
                    Aber es hört sich so an als ob Anfragen an die DB so hier laufen $db->query() und nicht $db->select() oder $db->insert()
                    Dann wird es natürlich schwer, da hätte ich jetzt auch keine Idee wie man das in akzeptabler Geschwindigkeit löst.
                    [Test] MySQL cli Emulator

                    Kommentar


                    • #11
                      Wie entscheidet man am schnellsten / sinnvollsten, ob eine Seite neu geladen werden muss, oder aus dem Chache kommen kann ?

                      Ich denke vor allem bei einem Forum machen Zeitangaben wenig sinn, mal schreiben 10 user 15 beiträge in 10 Minuten und mal passiert 2 stunden gar nichts auser dass sich 5 leute die Seite anschauen...

                      ich denke da z.B. an eine Datei, die beim änderungen der DB (Update, insert) "getouched" wird und diese wird dann vom skript getestet, und je nachdem ob sich der zeitpunkt geändert hat, wird neu geladen (vielleicht den alten zeitpunkt in der sessionfesthalten)


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

                      Kommentar


                      • #12
                        hauptsächlich geht es ja um die Beiträge usw., also einfach im Beitrag bearbeiten/neu Script nach der Veränderung "include 'update_query_cache.php'" oder so ähnlich und dort dann alles weitere machen.

                        Oder Du speicherst die kompletten Seiten, da brauchst Du dann natürlich etwas mehr Speicherplatz und ein Update würde länger dauern wenn man komplett alle Seiten bei Updates cachen würde. Es würde ja auch reichen nur die komplette ersten 2-3 Seiten zu cachen.
                        Bringt noch mehr Performance, dann "includest" (hmm, ich weiß hört sich bescheurt an da weiß aber jeder was gemeint ist... ) Du einfach nur die gecachte Datei.
                        [Test] MySQL cli Emulator

                        Kommentar


                        • #13
                          Die Querys laufen so: $db->sql_query();

                          hier müsste dann zwischen SELECt und andern Anfragen unterschieden werden. bei SELECTs müsste zunächst geschaut werden, ob schon eine gecachte datei vorliegt. dann noch ein zeitvergleich, ob nicht zwischen der cache-zeit und jetzt eine update oder andere änderungen an den benötigten zeilen stattfanden. die änderungen sollten bei nicht-selects dokumentiert werden: nur wie?
                          dazu müsste ich alle geänderten zeilen bzw. deren id spezifisch zur tabelle abspeichern, um dann den vergliech laufen zu lassen...

                          das cachen sollte keine längere zeit in anspruch nehmen, damit die lade unterschiede auch nicht zu groß werden. schon seltsam, wenn die eine seite 5sec braucht und die andere sofort erscheint, weil sie vorher gecached wurde

                          das speichern der fertigen html-seite ließe sich, glaube ich, nicht oder nur noch umständlicher mit der software realisieren.
                          arrays sind klasse

                          Kommentar

                          Lädt...
                          X