Sich ständig wiederholende Queries cachen

tvtotal

Erfahrenes Mitglied
Hallo, ich habe eine Anwendung, bei der ständig exakt die gleichen DB-Queries (mit jeweils dem gleichen Ergebnis) von den Usern gemacht werden. Das geht bei wenigen Usern gut, stockt aber schon bei über 50. Kann man die Abfragen in irgendeiner Form cachen? Ich habe gelesen, dass es bei MySQL auch einen Cache gibt, aber bei meinem Hoster geht das nicht.

Was wäre die schnellste Methode?

Danke für alle Hinweise !!
 
Du kannst die Daten aus der Query zum Beispiel in eine Datei schreiben und von dort nutzen. Dabei dann etwa per filemtime überprüfen, ob die letzte Änderung an den Daten länger als x Minuten her ist. Ist das der Fall, führst du die Query wieder aus und aktualisierst die Daten in der Datei.
 
Hallo und danke,

hättest Du da mal ein Beispiel, wie man das macht? Oder einen Link? Oder einen Hinweis, wonach ich suchen muss?
 
Ich würde mir eine Caching-Library wie Stash einbinden. Das ist ein Key/Value-Store.

Als Key kannst du den SQL-String der jeweiligen Query verwenden. (Oder einen md5-Hash davon. Ich weiß gerade nicht, was dort zulässig ist.) Als Value dann ein serialisiertes Array der Query-Rückgabe.
 
Hallo und danke,

es scheint, als ob Stash die Werte in einer Session speichert. Das habe ich selbst in folgender Form gemacht:

Ein assoziativer Array wird als Session-Variable gespeichert und bei Bedarf abgefragt. Ist ein Wert vorhanden, wird dieser benutzt, ansonsten die DB abgefragt. Im Array können sich max. ca. 120 Werte befinden.

Nun der Knackpunkt (wenn es denn einer ist): Ich suche nach dem Key in der Form:

PHP:
$type_up = $_SESSION['type_up'.$sval];
       if(!empty($type_up)){
         foreach($type_up as $key => $value) {
         $old_up[$key] =  $value;
         if($key == $oldval){$exp = $type_up[$oldval];}

Bei 120 Werten geht "er" maximal 12x durch 120 Werte. Kann man ein Array schneller nach Keys durchsuchen?
 
es scheint, als ob Stash die Werte in einer Session speichert

Nein. Siehe hier: http://www.stashphp.com/Drivers.html Der FileSystem-Driver wäre für deine Anwendung eine Option.

Es bringt nichts, derlei Daten in einer Session abzulegen, weil Sessions Daten per Nutzer vorhalten. Das heißt, dass für 10 individuelle Nutzer eine Query dann dennoch erst mal noch zehnmal ausgeführt werden müsste.
 
Zurück