Abfrage-Ergebnis in Session 'cachen'

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

  • Abfrage-Ergebnis in Session 'cachen'

    Hallo,

    vielleicht ist es auch völliger Nonsens aber ich frag euch einfach mal

    Ich frage mich gerade ob es sinnvoll ist, ein Abfrage-Ergebnis in einer Session abzuspeichern und beim Blättern durch die Ergebnisliste auf die Sessiondaten zurückzugreifen um dadurch die DB etwas zu entlasten.

    Die Abfrage ansich läuft in meinen Augen eigentlich performant genug (Abfragedauer auch im komplexesten Fall immer < 0.01 Sec.), dennoch frage ich mich ob es wirklich sein muss für jedes Weiterblättern die DB erneut zu bemühen, da ich die Blätterfunktion so realisiert habe, dass die DB dazu immer gleich 2mal abgefragt werden muss (einmal um die Anzahl der Datensätze zu ermitteln und zu zweiten um dann das entsprechend limitierte Ergebnis zu erhalten).

    Andererseits kann das Abfrageergebnis unter Umständen 1MB oder mehr an reinen Daten enthalten - keine Ahnung wie groß dann dadurch die Session werden würde und ob die Session in Sachen Performance nicht eher zum Nachteil werden würde.

    Hat jemand Erfahrung damit bzw. wie würdet ihr das einschätzen?

    Gruss
    Quetschi.
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

  • #2
    Das kann man nicht einfach so einschätzen, hängt von zu vielen Faktoren ab.

    - Wie lange dauert es direkt über die DB?
    - Wie groß sind die Ergebnismengen?
    - Wie schnell schreibt und lädt dein Server Sessions?
    - Wie skaliert das (Minimal- bis Vollast)?

    Häufige Änderungen an den Daten wären auf den ersten Blick ein Grund, auf Sessions zu verzichten, damit der User stets die aktuellen Daten bekommt. Auf den zweiten Blick könnte genau hier der Weg über Sessions Vorteile haben, dann Datenmanipulation heißt Locking und das heißt Verzögerung.

    Bevor ich mir da ausführlichst Gedanken mache, würde ich erstmal testen, ob unter Vollast immernoch Zeiten in der Größenordnung von 0.01s erreicht werden. Das ist mit Sessions nämlich garantiert nicht zu schlagen.

    Btw: Jedes vernünftige DBMS hat einen internen Cache - beim Blättern spielt sich das meist nicht aus, aber vllt. ist je wenigstens eine deiner Abfragen immer gleich ...
    Zuletzt geändert von onemorenerd; 11.03.2006, 15:46.

    Kommentar


    • #3
      Ich denke ich kann auf die Sessions in dem Fall verzichten - wir ham hier laut Logfiles ca. 350.000 - 400.000 Besucher pro Monat die in etwa 7 - 8 Mio. Anfragen auf dem Server produzieren - das Script mit der Abfrage wird jedoch max. ca. 100.000 mal im Monat aufgerufen.

      Wenn ich mit top mir zu Stoßzeiten die Auslastung anseh kommt er selten über mehr als 5% Serverlast raus - selbst wenn ich ein paar Leute bitte mal gleichzeitig die Abfrage pausenlos zu beanspruchen - scheint also für die nächste Zeit gut genug zu sein so wie es ist.

      Das Ganze einfach mal zu Testen ist mir etwas zu aufwändig - vor allem denk ich das eh kaum 5% derjenigen die eine Abfrage machen überhaupt zur 2. Seite oder so blättern, von daher würd sich der Effekt (wenn es den einen hätte ) wahrscheinlich sowieso sehr in Grenzen halten.

      Naja, ich vergess das wieder

      EDIT:
      ja, gewisse Abfragen werden sowieso gecacht was sich dann in Antwortzeiten < 0.001 Sek. auswirkt - die Wahrscheinlichkeit das verschiedene Benutzer gleiche Abfragen ausführen und der Cache dadurch zum Greifen kommt ist sogar einigermaßen hoch - ich denke das passt schon so wie es im Moment ist.
      Zuletzt geändert von Quetschi; 11.03.2006, 16:30.
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar

      Lädt...
      X