PDF-Dateien in DB schreiben und wieder auslesen

Tundra

Tundra

Aktives Mitglied
Thread Starter
Dabei seit
20.12.2006
Beiträge
1.064
Reaktionspunkte
48
Hi,

ich suche eine Anleitung um PDF-Dateien in eine MySQL-DB zu schreiben und wieder auszulesen.

Wie geht das mit PDF-Dateien?
Findet der INSERT wie Grafik-Dateien statt und wie findet das Auslesen statt?

Grüße und Danke
Guido
 
Hallo, für Binärdaten (Bilder, PDFs, Filme etc.) kann man sog. BLOBs nutzen. Das ist eine Feldart, so wie VARCHAR oder INT. INSERTs, UPDATEs erfolgen analog bei allen diesen Dateiarten.

Jedoch sind viele -eingeschlossen mir- dafür, die Daten im Dateisystem zu speichern und nur den Pfad dorthin in der DB abzulegen.

Das Dateisystem ist nunmal für Dateien gedacht und damit schneller.
 
PDFs direkt in die DB schreiben, wird die Db extrem aufblasen! Ich würde auch davon abraten und nur den Pfad speichern.
 
Ihr habt da sicherlich nicht unrecht, trotzdem würde ich es gerne mal ausprobieren.
Klar muss ich ein longblob verwenden, in die DB reinschreiben dürfte auch kein Thema sein, aber wie ist das Auslesen.
Bei Grafiken ist das ja etwas komplizierter so mit eigenen Header und so.
 
Das ist beim PDF genauso. Wie soll sonst irgendein Programm wissen, welcher Dateityp ihm serviert wird? Du musst genauso einen Header erzeugen etc.

Dateien in der DB abzulegen, anstatt im Dateisystem ist nur in ganz wenigen Ausnahmefällen anzuraten. Denn wenn Du nur 2MB große Dateien hast und davon aber hundert Stück speicherst, dann bläst Du die DB auf 200MB auf. Und das verträgt nicht jede DB besonders gut. Zum, wenn die Felder indiziert werden. Denn Teile der Indizes werden im Arbeitsspeicher vorbehalten etc. Es hat eigentlich kaum Vorteile. Daher wie schon geraten lieber Dateinamen und Pfad speichern und dann direkt verlinken. Bei der direkten Verlinkung sparst Du Dir auch den Header, weil den das Programm ja dann selbst ausliest aus der Datei.
 
Einer Datenbank sollte es egal sein, wie gross die Daten sind, die in ihr gespeichert sind. Vernünftige Datenbanken kommen mit grossen Datenmengen locker klar. Ich habe mit mySql noch nicht gearbeitet, da ich von diesem Produkt nicht viel halte. Im Mac-Bereich bietet sich FrontBase als kostenfreie SQL-Datenbank an. Bei FrontBase sind BLOBs, varchar(1000000), etc. kein Problem.

Ich habe beide Strategien umgesetzt und die Erfahrung gemacht, dass Referenzen in einer Datenbank zu speichern und die Dateien selbst im Filesystem abzulegen, die im Betrieb komplexere Lösung mit mehr Problemen ist. BackUp Strategien und Konfiguration werden um ein einiges schwieriger. Negative Erfahrungen habe ich mit der Ablage von grossen Files in einer Datenbank nicht gemacht.

Wichtig bei der Ablage in einer Datenbank ist das Datenmodel, die Grösse des Connectionpools und die Strategie, wie geschrieben wird. Im Web-Bereich bzw. anderen langsamen Verbindungen bietet es sich an, erst in ein Temp-Verzeichnis auf der Platte zu schreiben und danach die Datei an den Client zu senden.

Um die Struktur musst Du dich nicht kümmern, wenn Du das komplette File in der Datenbank ablegst. Der Client hat zu entscheiden, womit die Datei zu öffnen ist und dafür ist die Dateiendungen im Normalfall entscheidend.
 
Bei den normalen Webhostern gibt es nur Linux (MySQL) oder Windows (MSSQL) Server, da gibt es keine Alternative zu anderen Datenbanken.

Auf meinem Mac lief die Frontbase-Installation problemlos durch, aber irgendwie bin ich mit dem Frontend nicht klar gekommen, um Tabellen, Datenbanken, etc. anzulegen.:(
 
... geht auch über die Console ... :)
 
das verwendete DBMS sollte in der Tat egal sein. BLOBs sind das richtige Stichwort!
 
Das ist beim PDF genauso. Wie soll sonst irgendein Programm wissen, welcher Dateityp ihm serviert wird? Du musst genauso einen Header erzeugen etc.

Dateien in der DB abzulegen, anstatt im Dateisystem ist nur in ganz wenigen Ausnahmefällen anzuraten. Denn wenn Du nur 2MB große Dateien hast und davon aber hundert Stück speicherst, dann bläst Du die DB auf 200MB auf. Und das verträgt nicht jede DB besonders gut. Zum, wenn die Felder indiziert werden. Denn Teile der Indizes werden im Arbeitsspeicher vorbehalten etc. Es hat eigentlich kaum Vorteile. Daher wie schon geraten lieber Dateinamen und Pfad speichern und dann direkt verlinken. Bei der direkten Verlinkung sparst Du Dir auch den Header, weil den das Programm ja dann selbst ausliest aus der Datei.

Das ist völliger Quark. DBS sind auf das Abspeichern auch von großen Datenmengen ausgelegt. Das Retrieval ist sogar hoch performant. Sicherlich wäre hier ein Multimedia-DBS noch besser geeignet. Aber geht auch relational sehr gut.
 
Zurück
Oben Unten