Regina Schaukrug: temporäre Tabelle bei MySQL

Beitrag lesen

Wie gesagt - die Frage ist, ob man das so praktizieren kann und was Eure Meinung dazu ist.

Warum nicht? Bei statischen Ergebnissen kann sich das lohnen.

Ich denke, Du machst es so:

...
$Statement 'bauen'.
Aus $Statement mit md5 $Hash bauen.
$Dateiname aus $Hash bauen.
Schauen ob es den Cache gibt.
wenn nicht:
 Abfrage starten
 $Ergebnis mittels var_export oder serialize (json ist langsamer!) in Datei $Dateiname speichern.
wenn ja:
 $Ergebnis aus Datei $Dateiname importieren
:ende wenn
Mit $Ergebnis arbeiten
...

Dynamic: Teile davon lassen sich sich in eine eigene Routine auslagern und das Speicher des Caches nur durchführen, wenn die Abfrage mehr als n Millisekunden benötigte... microtime(true) liefert die Zeiten.

weshalb diese ein paar ms länger brauche

Wenn Du in Sachen Performance stark optimieren willst:

Wenn es vorhersehbar SEHR viele (tausende) solcher Cache-Files geben wird, dann solltest Du im Auge behalten, dass bei vielen (auch Linux-) Dateisystemem die Performance in den Keller geht wenn in einem Verzeichnis SEHR viele (jedenfalls über 1000) Dateien sind. Dann wird die Zugriffszeit auf die Datei stark steigen. Es wird sich also lohnen, für den cache eine Verzeichnisstruktur einzurichten:

Das kann so gehen:

Baue mit Stringfunktionen aus einem Hash "aee97cb3ad288ef0add6c6b5b5fae48a" sowas

# $sqlCacheDir = '/tmp'
# $sHash = "aee97cb3ad288ef0add6c6b5b5fae48a"
# $CacheDirLevel = 4;

$arHash = explode( '', $sHash, $CacheDirLevel );
$cacheFileName = $sqlCacheDir . implode( '/', $arHash );

# Ergebnis: $cacheFileName == '/tmp/a/e/e/97cb3ad288ef0add6c6b5b5fae48a';