spawny2407
Goto Top

pdf in eine my SQL datenbank speichern

moin moin

kunde möchte in eine bestehende mySQL DB pdf. Dokumente ablegen ( auch Word ).
Geht das?

Wenn ja wie müßte die Spalten Difinition ausschauen das ich diese später auch direkt wieder ( über ein WEB portall ) "downloaden" oder öffnen kann


ich danke Euch

Christian

Content-ID: 119154

Url: https://administrator.de/contentid/119154

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

BCCray
BCCray 26.06.2009 um 14:36:25 Uhr
Goto Top
Das ist möglich.... In MySQL gibts den Blob-Datentyp ( Blob = Binary Large Object). Using Blob in MySQL(Deutsch)
Da aber eine Datenbank nicht auf Datentransfer ausgelegt (die direkte Bereitstellung ist wesentlich performanter) ist und nur unnötig Leistung für dein Vorhaben nimmt, denke ich wäre es besser nur den Pfad in der Datenbank zu hinterlegen, welcher dann auf die Dateien verweißt.
Ich rate dir hier ausdrücklich davon ab, Blob als "Datentransfermittel" zu verwenden.
empreality
empreality 26.06.2009 um 14:42:07 Uhr
Goto Top
Ja seh ich auch so, sinnvolle Ordnerstruktur ausdenken und in der DB nur die Pfade speichern.
Oder die PDFs dynamisch erzeugen - falls sowas hier überhaupt gefragt ist.

Datenbank != Dateienbank face-smile
BCCray
BCCray 26.06.2009 um 14:49:19 Uhr
Goto Top
Ich denke das er bereits vorgefertigte PDF-Dateien hat. Aber es gibt genügend Scripte, die aus Seitentexten PDF-Dateien generieren.... dazu müsste der Threaderöffner lediglich googeln ;)
Wenn ich jetzt noch unterstelle das er PHP verwendet, würd ich als Stichwort schon mal " HTML 2 PDF" in den Raum werfen.

Greetz
Biber
Biber 26.06.2009 um 17:57:04 Uhr
Goto Top
Moin spawny2407,

wenn die Anforderung/Konzeptanfrage des Kunden allerdings wirklich ist, PDFs/Dokumente/ irgendwelch "grossen Binär-Datenklumpen" in einer ohnehin bestehenden, vorhandenen (mySQL-)Datenbank zu integrieren, dann möchte ich BCCray vehement widersprechen mit der Variante "Dateinamen/Links in den Tabellen von der DB verwalten lassen ind Dateien vom File/Betriebssystem".

Klingt erst mal einleuchtend und ist in der ersten Vorstellung auch "schneller".

Aber der exponentiell steigende Verwaltungs- und Konsolidierungsaufwand ist NICHT handlebar.

Auf DB-Objekte (Tabellen/Datensätze/Datenfelder) kannst Du differentiert und dokumentierbar mit Rechten und Privilegien festlegen, wer was sehen/bearbeiten/löschen darf.

Bei einer Getrennt-Verarbeitung (Links in den Tabellen/Dateien im Filesystem) muss Du
  • synchrone, widerspuchsfreie Rechte je User und Datei/Tabellenfeld garantieren (oder starke Nerven haben)
  • musst das, was in der DB-Welt "Referentielle Integrität" heißt auf Einzel-Dateiebene nachkaspern.

sprich: jedes PDF, dass auch nur ein Benutzer irgendwo per Link auf den Schirm bekommt, muss er auch Offnen dürfen und es muss vorhanden sein und "neue" PDF, die Du irgendwie ins Filesystem kopierst, müssten eigentlich auch nur dort sein dürfen, wenn sie auch in den Tabellen sind...

---> Bekommst Du nicht ernshaft gebacken.
Es sei denn, wir reden von 5 PDFs und 3 Usern.

Grüße
Biber
BCCray
BCCray 26.06.2009 um 18:18:36 Uhr
Goto Top
Gut, ich hab ja nicht unbedingt gesagt, das es nicht machbar ist bzw. Sinn macht.
Wenn es die Anforderung des Kunden ist, das Binärdaten in einer DB gespeichert werden, dann hast auch nicht recht eine andere Wahl.

spawny2407 gab ja keine weiteren Angaben dazu, es war meiner Auffassung nach eine allgemeine Frage. Und im Allgemeinen Kontext ist es auch nicht nötig, ein (ich nenn es mal Dateitransfersystem) über die Datenbank abzuhandeln.

Gut, die Datenintegrität zu bewahren ist schon ein Aufwand. Dies Problem könnte behoben werden, in dem ein cron oder Script die Daten auf vorhandensein prüft. Die Einträge in die Datenbank lässt sich mittels eines "Einspielen" oder Uploads mit passenden Script bewerkstelligen. Ich finde halt das man für eine primitive Aufgabe hier den DB-Server nicht sinnlos beanspruchen muss, wenn diese Aufgabe http viel schneller und besser bewerkstelligt.
Noch dazu wenn mehrere User gleichzeitig was aus der Datenbank ziehen, dann wirds schon sehr eng mit der Bandbreite.... oder reden wir von 5 PDFs und 3 Usern?
Man muss halt auch immer sehen was sinnvoll ist.
Wenn man Dateien selbst in der Datenbank ablegt, hat dies den Vorteil, dass keine broken links auftreten können, weil ja die Bilder selbst genauso wie die Links auf die Bilder aus der Datenbank erzeugt werden. Liegen die Bilddaten dagegen im Dateisystem und die Datenbank enthält nur Pfadnamen, dann ist es problemlos möglich, dass jemand die Dateien umbenennt, ohne diese Änderung in der Datenbank nachzuführen und umgekehrt. Leider ist es speziell bei MySQL so, dass keinerlei Mechanismen vorhanden sind, die die referentielle Integrität der Datenbank sicherstellen, sodass diese Sicherheit nicht wirklich gegeben ist.
Weiter kann MySQL BLOBsnicht fragmentarisch bearbeiten, d.h. es ist nicht möglich, ein BLOB in kleinen Teilstücken aus der Datenbank zu holen oder den hinteren Teil eines BLOBs zu holen, ohne die Bytes davor zu lesen. Obendrein ist der Sendepuffer von MySQL für BLOBs begrenzt groß, sodass nicht beliebig große BLOBs in der Datenbank abgelegt werden können.
(aber nun denk ich schweifen wir zu sehr vom Thema ab)

Und ein Rechtesystem lässt sich datenbankgestützt auch sehr einfach aufbauen. Noch dazu wenn er sowieso die Daten mittels Webfrontend zur Verfügung stellt. (Hier setze ich ein User-Managment-System o.ä. vorraus)
Auf Basis dieser Berechtigungen kann sehr wohl auch Zugriffs- und Berechtigungssystem umsetzen.
Biber
Biber 26.06.2009 um 18:30:40 Uhr
Goto Top
Moin BCCray,

mein Posting sollte auch kein pauschales Verdammen Deiner Strategie sein - nur eine Gegenrede.

Und wo wir uns sicherlich problemlos zu einem Kompromiss treffen können:
"Es hängt vom konkreten Einzelfall ab."
spawny2407 hat da nicht genug Infos geliefert, um eindeutig pro oder contra argumentieren zu können - es fehlen eben Mengengerüste, Komplexität der Anwendung und auch Sicherheits/Zugriffsbeschränkungsanforderungen sowie die mögliche Verzahnung mit anderen Systemen (woher kommen die Daten /wohin gehen sie?).

Aber ich denke, für einen ersten Argumentsaustausch mit dem Kunden haben wir ihn sensibilisiert.

Grüße
Biber
BCCray
BCCray 26.06.2009 um 21:50:49 Uhr
Goto Top
fullack face-smile Ich wollte auch deine Bemerkung nicht in irgendeiner Weiße kritisieren. Ich hab schon solche und solche Lösungen umgesetzt. Hier ist eben eine Fallentscheidung nötig.

Er weiß jetzt, was möglich ist, was die jeweiligen Vor- und Nachteile sind, auf was er achten muss bzw. welche Informationen für die jeweilige Entscheidung wichtig sind.

Grüße

BCC

P.S.: Schönes Wochenende!
spawny2407
spawny2407 29.06.2009 um 10:47:30 Uhr
Goto Top
Moin

erstmal vielen Dank für Eure Antworten.

Das mit den Daten in der Datenbank leuchtet mir schon ein ( Dateienbank ), ist schon ne menge an Daten die abgelegt werden sollen. Die PDFs sind schon vorhanden und sollen abgelegt werden.

Wenn ich nun eine Ordnerstruktur erstelle \Aktenzeichen XYZ\PDF_xyz.pdf, wie bekomme ich nun den Pfad ( welcher Datentyp) bzw den Pfad in die DB und die Datei in die Struktur abgelegt. Ist das alles mit einem INSERT Befehl möglich.

Ich Danke euch für Eure Mühe

Christian

PS: den Kunden kann ich auch umlenken, so das er auch andere Lösungswege akzeptiet
BCCray
BCCray 29.06.2009 um 11:03:43 Uhr
Goto Top
Moin spawny2407,

Wenn ich nun eine Ordnerstruktur erstelle \Aktenzeichen
XYZ\PDF_xyz.pdf, wie bekomme ich nun den Pfad ( welcher Datentyp)

Pfad Datentyp wäre varchar (evtl aufpassen mit den Backslash - escapen)

den Pfad in die DB und die Datei in die Struktur abgelegt. Ist das
alles mit einem INSERT Befehl möglich.
Ja, das wär mit einem Insert möglich.

Am besten du verwendest hier ein Upload-Script, das dir die Daten hochlädt und die ensprechenden Pfade in die DB einträgt.

Such einfach mal nach "Dokumentverwaltung + scripte" - hier gibts eine Menge an bereits existierenden Scripten.
Hier kannst du dir dann etwas "abschauen" face-smile

Greetz