Project

General

Profile

Support #19031

Updated by Carsten Rose 10 days ago

Wenn viele Queries in einem Report gefeuert werden kann das Laden sehr langsam sein. 

 Idee: 

 * In einem Report kann auf einem oder mehreren Level ein 'cache' aktiviert werden. Bsp: @10.cache=S:action,grId|R:vId,grId,&{{dynamic:R}}|Y:semId@ @10.cache=S:action,grId|R:vId,grId|Y:semId@ 
 * Der Content, den ein Level (und darunter) ausgibt, wird gespeichert in der Tabelle `CacheReport` in einem Record.  
 columns: @key / qfqSession / content / expire / storeRecord (serialized)@ 

 * Der Key zu einem Cache-Eintrag setzt sich zusammen aus dem QFQ Session Cookie und den definierten Parameter. 

   * Existiert ein @{{pIdUser:Y}}@ wird dieser automatisch dem Key hinzugefuegt. Damit ist ein SwitchUser automatisch aktiv und bekommt die richtigen Daten. 
   * @{{dynamic:R}}@: das ist ein Wert (kein Variablenname) der im Report, vor dem zu cachenden Level, berechnet wird und als Value in den Key kommt. Bsp: bei t=0 gibt es eine Paar Records mit dem Wert x, bei t=1 haben diese den Wert y. 

 
 * Gibt es einen Cache Eintrag, wird die Query nicht ausgefuehrt, sondern vom Cache geladen. 
 * Der Original Record Store wird gemerged mit dem aktuellen. 
 * Enthaelt der Report Columns mit `... AS _exec` ist ein Speichern nicht moeglich.  

   * Dies kann einfach erkannt werden beim fuellen das Caches: '_exec' wirft eine Exception wenn ein 'cache' aktiv ist. 

 * Gibt es noch weitere Bedingungen die ein cachen verbieten sollten?

Back