Project

General

Profile

Actions

Feature #5715

closed

PDF Caching

Added by Carsten Rose about 6 years ago. Updated over 1 year ago.

Status:
Closed
Priority:
High
Assignee:
Carsten Rose
Target version:
Start date:
20.03.2018
Due date:
% Done:

100%

Estimated time:
Discuss:
Prio Planung:
No
Vote:

Description

Das rendern (zusammensetzen aus mehreren Quellen) eines PDF kann lange dauern. Vorschlag fuer ein Caching:

  • Es gibt ein Cache Verzeichniss, fileadmin/protected/cache.
  • Beim zusammenbauen (Parameter in _link) kann neu ein Caching Token bestehend aus 'tablename/id/column'-Tripples (falls kein 'columnname' angegeben ist, wird 'modified' genommen ) angegeben werden.
Cache Verzeichnis (konfigierbar in QFQ) fileadmin/protected/cache/

... AS _pdf (AS _link)   d|p:header&r=567|f:fileadmin/protected/file1.pdf|f:fileadmin/protected/file2.pdf|cache=[<tablename>/<id>[/column]][,...]      >> md5=34857sdjk4387564387y 
                                                                                         fileadmin/protected/cache/34857sdjk4387564387y.pdf   (modified datum)
... AS _savePdf schreibt in den Cache
... AS _saveZip schreibt in den Cache

f: AS _zip

EN: Beispiel Syntax- 10.sql = SELECT CONCAT AS _link
Zusammengesetzten PDF ins cache Ordner ablegen falls noch nicht existent. Von dort wird der Download ausgeführt (Bisherige Funktion führt keinen Download aus, sondern öffnet PDF im Browser). Das im Cache abgelegte File wird bei nochmaligem Aufruf mithilfe vom Check des MD5 Hashes überprüft auf veränderten Inhalt, falls ja: Das File im Cache mit dem neu zusammengesetzten PDF ersetzen und (Download ausführen) PDF öffnen.

Für die Identifikation des richtigen Files im Cache wird der Filename verwendet ('d:MergedPdf'. Muss in dem Fall angegeben werden, da ansonsten kein Abgleich möglich. Als Default wird immer output.pdf ausgegeben.)
Ein Check auf den Erstellungsdatum des Files im Cache wäre überflüssig, da bei Änderungen das File sowieso erneut erzeugt werden muss.

Infos:
MD5 Hash check for changes: https://www.w3schools.com/php/func_string_md5_file.asp
Check auf Erstellungsdatum, stündlich (eigentlich überflüssig, da bei Änderung immer File ersetzt werden muss): if (time() - filemtime("test.pdf") > 60*60*1){unlink("test.pdf");}

  • Von allen Source Reference Angaben (filename, url) wird ein MD5 Hash gebaut. In dem Hash ist kein Timestamp enthalten, denn dann wuerde die zuletzt gecachte Datei nicht ueberschrieben werden bei einem Update.
    EN: Ich konnte nirgends finden dass ein Timestamp im MD5 Hash möglich ist.
  • Unter dem <cache Verzeichnis>/<MD5> wird die fertig gerenderte Datei gespeichert.
    EN: Für was steht <MD5>? Das zusammengesetzte PDF File oder nur ein abgelegter Hash?
  • Von allen Filename wird der 'modified'-Timestamp, und die Timestamps der aufgeloesten 'tablename/id/column'-Tripple, verglichen mit dem modified timestamp der Datei '<cache Verzeichnis>/<MD5>'
    EN: Nicht mehr benötigt in unserem Fall? Lösung sollte ohne DB Eintrag möglich sein soweit ich das verstanden habe.
  • Gibt es min. einen Timestamp der neuer ist als der der gerenderten Datei, wird die Datei neu gebaut.
    EN: Gleiche Aussage wie beim letzten Punkt? Timestamp nicht mehr nötig da kein DB Eintrag.
Auf Vorrat produzieren:
  • Es gibt ein Token im Link, welches beim rendern dazu fuehrt das das PDF auf Vorrat (im Cache Verzeichnis) gebaut wird.
  • Das Render passiert am besten asynchron, gesteuert ueber rabittmq oder mqtt (#5851)

EN: Allgemein zum Cache Feature: Hat nichts direkt mit dem Zip zu tun oder? Welches ja angefragt wurde für Medtool. Eine Anwendung vom Mode: Zip mit _link kann eine aneinanderreihung von PDF Files als ein Zip herausgeben. Dieser wird als Dowload angeboten. Besser: Etwas wie _saveZip könnte einmal Stündlich mit Autocron ausgeführt werden um einen abgelegten Zip File zu refreshen. Der Zusammenhang mit dem Caching wäre hilfreich wenn wir dies direkt über _link ermöglichen wollen, da viele PDFs gemerged werden müssen (ca. 30 bis 40). Wäre es da nicht schlauer mit einem Autocron und per neuem _saveZip diese abzuspeichern und nicht direkt per Download über _link anzubieten?


Files

mergedPdf.png View mergedPdf.png 49.4 KB Enis Nuredini, 05.12.2022 12:15

Related issues

Related to QFQ - Feature #5851: Queue System implementieren: MQTT, RabbitMQSome day maybe21.04.2018

Actions
Related to QFQ - Support #6357: Generiertes PDF auf Server abspeichernClosedElias Villiger03.07.2018

Actions
Related to QFQ - Feature #15208: Best Practice: a) Funktion Path::join() besprechen, b) cacheClosedEnis Nuredini17.12.2022

Actions
Actions #1

Updated by Carsten Rose about 6 years ago

  • Description updated (diff)
Actions #2

Updated by Carsten Rose about 6 years ago

  • Related to Feature #5851: Queue System implementieren: MQTT, RabbitMQ added
Actions #3

Updated by Carsten Rose about 6 years ago

  • Description updated (diff)
Actions #4

Updated by Carsten Rose over 5 years ago

  • Related to Support #6357: Generiertes PDF auf Server abspeichern added
Actions #5

Updated by Carsten Rose over 5 years ago

Evtl. koennte die Funktion von #6357 mit diesem Ticket gemerged werden.

Actions #6

Updated by Carsten Rose about 5 years ago

  • Priority changed from Normal to High
  • Target version changed from 55 to 146
Actions #7

Updated by Carsten Rose about 5 years ago

  • Status changed from New to In Progress
Actions #8

Updated by Carsten Rose about 5 years ago

  • Status changed from In Progress to New
Actions #9

Updated by Benjamin Baer about 5 years ago

Ich glaube das my problem hat auch mit der Annotate Tabelle zu tun. Die ist bereits ueber 2G gross. Den FabricString auf MediumBlob von MediumText zu aendern scheint bereits deutliche verbesserungen auf einigen Masken zu geben.

Actions #10

Updated by Carsten Rose almost 5 years ago

  • Target version changed from 146 to QFQCD19 - waere gut
Actions #11

Updated by Carsten Rose over 4 years ago

  • Status changed from New to Some day maybe
Actions #12

Updated by Carsten Rose over 4 years ago

  • Status changed from Some day maybe to New
Actions #13

Updated by Carsten Rose about 4 years ago

  • Target version changed from QFQCD19 - waere gut to next6
Actions #14

Updated by Carsten Rose almost 3 years ago

  • Target version changed from next6 to next4
Actions #15

Updated by Carsten Rose over 1 year ago

  • Target version changed from next4 to Check if 'high' is still necessary
Actions #16

Updated by Enis Nuredini over 1 year ago

  • Description updated (diff)
  • Prio Planung set to No
Actions #17

Updated by Enis Nuredini over 1 year ago

Folgende Situation beim Medtool:

Dies ist das PDF welches für eine Dissertation zusammengesetzt wird. Nun werden von allen Dissertationen jeweils dieses zusammengesetzte PDF in einem einzigen Zip benötigt. Ich glaub damit das sauber geht müssen diese zusammengesetzten PDFs schon mal als PDF abgespeichert werden mit _savePdf . Danach käme auf diese neuen Files ein _link mit M:zip zum Einsatz. Vielleicht übersehe ich hier etwas aber ich sehe keinen Umweg die zusammengesetzten PDF zuerst irgendwo zu hinterlegen bevor ich auf die dann mit dem Mode Zip mergen kann. Der Einsatz vom Cache spielt in dem Fall eine Nebenrolle, da die merged PDFs irgendwo schon existieren müssen für den Zip Export.

Actions #18

Updated by Enis Nuredini over 1 year ago

  • Description updated (diff)
Actions #19

Updated by Enis Nuredini over 1 year ago

  • Description updated (diff)
Actions #20

Updated by Enis Nuredini over 1 year ago

  • Description updated (diff)
Actions #21

Updated by Enis Nuredini over 1 year ago

  • Description updated (diff)
Actions #22

Updated by Carsten Rose over 1 year ago

  • Description updated (diff)
Actions #23

Updated by Enis Nuredini over 1 year ago

  • Status changed from New to Feedback

Erste Version wurde implementiert und ist im Branch F5715_PDF_Caching enthalten.

Actions #24

Updated by Enis Nuredini over 1 year ago

  • Description updated (diff)
Actions #25

Updated by Carsten Rose over 1 year ago

  • Status changed from Feedback to Closed
  • % Done changed from 0 to 100
Actions #26

Updated by Carsten Rose over 1 year ago

  • Target version changed from Check if 'high' is still necessary to 22.12.1
Actions #27

Updated by Carsten Rose over 1 year ago

  • Related to Feature #15208: Best Practice: a) Funktion Path::join() besprechen, b) cache added
Actions

Also available in: Atom PDF