Actions
Support #19031
openReport / SQL Caching
Start date:
07.07.2024
Due date:
% Done:
0%
Estimated time:
Discuss:
Prio Planung:
No
Vote:
Description
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
- Der Content, den ein Level (und darunter) ausgibt, wird gespeichert in der Tabelle `CacheReport` in einem Record.
- CacheReport.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.
- Durch das Cookie ist der Cache invalid bei einer neuen Browsersession.
- Ist das gut oder schlecht?
- Es ist damit auf jedenfall fe-user based - damit sind die Berechtigungen geklaert.
- 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.
- Durch das Cookie ist der Cache invalid bei einer neuen Browsersession.
- 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.
- Es gibt einen Button/Meachnisnus den aktuellen Cache invalid zu machen.
- 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?
Actions