PDF in DB-Tabellen speichern
Linuchs
- projektverwaltung
0 Tabellenkalk0 klawischnigg0 Mitleser 2.0
Moin,
ich baue eine DB-Tabelle auf mit Song-Titeln für Chöre.
Zu zahlreichen Titeln gibt es PDF Noten und PDF Texte. Es ist aufwändig, die als Admin per FTP als Dateien extra hochzuladen und zu verwalten. Chöre haben keinen Zugriff zum FTP.
Macht es Sinn, PDF-Dokumente im Datensatz zu speichern? Habe das noch nie gemacht.
Wie funktioniert das und welche Vor- und Nachteile hat das?
Gruß, Linuchs
Hallo,
da hast du erstmal die Aufgabe einen upload zu realisieren. Da lauern die üblichen Tücken…
Auf der DB-Seite sehe ich wie bei Bilddateien zwei Varianten:
Gruß
Kalk
Hallo Tabellenkalk,
für Blobs ist die Kenntnis von send_long_data hilfreich.
Rolf
Hallo Kalk,
da hast du erstmal die Aufgabe einen upload zu realisieren.
Das kenne ich vom Kalender, mit URL-Eintrag in der DB.
Beim Löschen von Datensätzen können dann Dateien vergessen werden und als ewige Leichen die Datensicherung belasten.
Ist jetzt anderes Thema, aber wenn wir schon dabei sind: Wie finde ich die Leichen, also die Dateien, die nirgendwo einen URL-Eintrag haben? Vermutlich die Dateinamen in den Verzeichnissen lesen und jeden Dateinamen einzeln mit SELECT URL
abfragen? Könnte Laufzeitprobleme geben und ich weiß nicht, wie man da wieder aufsetzen kann.
Gruß, Linuchs
Hallo
Ist jetzt anderes Thema, aber wenn wir schon dabei sind: Wie finde ich die Leichen, also die Dateien, die nirgendwo einen URL-Eintrag haben? Vermutlich die Dateinamen in den Verzeichnissen lesen und jeden Dateinamen einzeln mit
SELECT URL
abfragen? Könnte Laufzeitprobleme geben und ich weiß nicht, wie man da wieder aufsetzen kann.
Ich würde zwei strukturell identisch aufgebaute Array bilden und diese mit array_diff vergleichen. Strukturell identisch heißt hier, dass beide flach sein müssen [1] und in beiden entweder nur die Dateinamen oder nur die vollständigen Pfade drin stehen müssen (wenn du denn Dateinamen oder Pfade vergleichen willst).
Tschö, Auge
siehe Manual-Seite, Abschnitt Anmerkungen ↩︎
Ist jetzt anderes Thema, aber wenn wir schon dabei sind: Wie finde ich die Leichen, also die Dateien, die nirgendwo einen URL-Eintrag haben? Vermutlich die Dateinamen in den Verzeichnissen lesen und jeden Dateinamen einzeln mit
SELECT URL
abfragen? Könnte Laufzeitprobleme geben und ich weiß nicht, wie man da wieder aufsetzen kann.
Über wie viele Dateien sprechen wir denn? Ich habe solche Nummern schon mit wirklich großen Datenmengen gemacht. Klar, kann schon was dauern. But so what?
Oder meinst Du Web-Timeouts? Ja, optimalerweise macht man so etwas nicht per HTTP…
Über wie viele Dateien sprechen wir denn?
ca. 2500
Über wie viele Dateien sprechen wir denn?
ca. 2500
Das ist nichts. Opendir sammlen + Query und etwaigem Unlink: ausem Bauch geschätzt 30 Sekunden. Das ist schon sehr hoch gegriffen.
Hallo Linuchs,
naja, das ist ja nun gar nichts.
Das sollte - wenn nicht zu viele Unterschiede da sind, in 0.5 bis 5 Sekunden durch sein.
Rolf
Hi there,
Macht es Sinn, PDF-Dokumente im Datensatz zu speichern? Habe das noch nie gemacht.
Durchaus.
Wie funktioniert das und welche Vor- und Nachteile hat das?
Du speicherst den Sourcecode des PDFs als BLOB in der Datenbank. (Wenn Du Dir ganz sicher bist, daß das PDF 16Mbyte nicht überschreitet, dann kannst Du das auch als MediumBlob speichern)
Der Vorteil ist, daß das unter Umständen performanter ist und Du keine Leichen im Dateisystem hast (wobei sich in Bezug auf Performance erst ab einigen zig-tausend Dateien ein Unterschied bemerkbar machen dürfte, ich hab das einmal mit Fotos, nicht mit PDFs gemacht und konnte auf einem Webserver bei ca. 150.000 Fotos keinen nenneswerten Unterschied im Zugriff messen), der Nachteil, daß Deine PDFs nach einem Datenbankcrash alle weg sind, wenn Du keine Sicherungskopien davon hast. Ausserdem mußt die PDFs dann auch immer erst erzeugen, einfach irgendwo hinkopieren wenn man eines schnell einmal braucht ist dann nicht so einfach möglich.
Wie auch immer, das oben Erwähnte berücksichtigend spricht im Prinzip nichts dagegen.
Der Vorteil ist, daß das unter Umständen performanter ist
Da möchte ich Zweifel anmelden. Wenn ein statisches File im Dateisystem liegt, dann kann der Webserver seine Stärken ausspielen, bestimmt besser als jedes selbst geschriebene Script.
und Du keine Leichen im Dateisystem hast
Ja. Der einzige Vorteil, der mir gerade einfällt.
Hi there,
Der Vorteil ist, daß das unter Umständen performanter ist
Da möchte ich Zweifel anmelden. Wenn ein statisches File im Dateisystem liegt, dann kann der Webserver seine Stärken ausspielen, bestimmt besser als jedes selbst geschriebene Script.
Naja, wie gesagt, das hängt von der Menge ab. Ein paar hundertausend Files in einem Verzeichnis lassen den besten Server leicht in die Knie gehen...
Macht es Sinn, PDF-Dokumente im Datensatz zu speichern? Habe das noch nie gemacht.
M.E. nicht, auch wenn das hier einige anders sehen.
Wie funktioniert das und welche Vor- und Nachteile hat das?
Vorteil, wie schon erwähnt: die Integrität. Datensatz gelöscht = PDF gelöscht.
Nachteile? m.E. ne ganze Menge. Spontan fällt mir ein: Deine Datenbank wird fett, unfassbar fetter als ohne solche Binärblobs... Wenn ein Datenbank bislang 1MB groß war hast Du den in wenigen Sekunden erstellt und auch wieder zurückgespielt. Mit den Blobs nicht mehr.
Dann wäre da z.B. noch die Performance, da antworte ich gleich auf klawischnigg…