Bildpfad speichern oder ganze Bilddatei
ingobar
- datenbank
Hallo zusammen,
so langsam wird meine Anwendung. Jetzt habe ich noch eine weitere Frage:
Ich würde gerne für jede gespeicherte Person noch ein Passbild speichern. Jetzt weiß ich nicht welche Methode besser ist:
1: Bilddaten direkt in MySQL speichern.
Das hätte den Vorteil, dass ich die Datei nicht irgendwie verwalten muss (Namen, Ordner, etc.)
2. Bilder in Ordner speichern und nur den Pfad verwalten.
Vorteil: ?
Meine Frage sind dabei unter anderem: Geht die erste Methode auf die Performance der DB?
Ich würde gerne von den Bildern auch Thumbnails erzeugen. Geht das bei beiden Methoden? Wie geht das überhaupt?
Über hilfreiche Tipps würde ich mich wieder freuen.
Hi,
1: Bilddaten direkt in MySQL speichern.
mir ist noch nie ein Datenbank-Fachmann begegnet, der empfohlen hätte, Binärdaten in einer Datenbank zu speichern, solange es anders geht oder man nicht sehr, sehr explizite Vorteile daraus zieht. Dagegen habe ich schon viele die Köpfe über der Hand zusammenschlagen sehen, wenn eine entsprechende Idee geäußert wurde - mich selbst eingeschlossen.
Das hätte den Vorteil, dass ich die Datei nicht irgendwie verwalten muss (Namen, Ordner, etc.)
Worin siehst Du da den Vorteil?
- Bilder in Ordner speichern und nur den Pfad verwalten.
Vorteil: ?
Es sind keine Binärdaten in der Datenbank gespeichert.
Meine Frage sind dabei unter anderem: Geht die erste Methode auf die Performance der DB?
Ja. Die Organisation der Daten ist zudem höchst aufwändig.
Ich würde gerne von den Bildern auch Thumbnails erzeugen. Geht das bei beiden Methoden?
Die Art der Speicherung ist bei der Erzeugung von Informationen vollkommen unerheblich.
Wie geht das überhaupt?
Mittels einer Programmiersprache, die Grafikdaten verarbeiten kann. Oder mittels eines Grafikprogramms.
Cheatah
Hi,
1: Bilddaten direkt in MySQL speichern.
mir ist noch nie ein Datenbank-Fachmann begegnet, der empfohlen hätte, Binärdaten in einer Datenbank zu speichern, solange es anders geht oder man nicht sehr, sehr explizite Vorteile daraus zieht. Dagegen habe ich schon viele die Köpfe über der Hand zusammenschlagen sehen, wenn eine entsprechende Idee geäußert wurde - mich selbst eingeschlossen.
Gut zu wissen.
Das hätte den Vorteil, dass ich die Datei nicht irgendwie verwalten muss (Namen, Ordner, etc.)
Worin siehst Du da den Vorteil?
Z.B., dass man nicht nicht aufpassen muss, dass Bilder eindeutig benamt werden.
Ja. Die Organisation der Daten ist zudem höchst aufwändig.
Wieso das denn? Die Bilddaten wären dann eine Attribut der Person.
Hallo ingobar!
Ich glaub du greifst das Problem falsch an.
Ich denk es geht ganz gut so:
Jeder User hat wahrscheinlich einen eigenen Namen oder sogar eine id.
Genauso bennenst du das Bild dann auch.
Jetzt noch das Thumbnail.
Zuerst ermittelst du die Maße des original Bildes.
Wenn du keine Maße vorgibst solltest du die längere Seite des Bildes
durch die max-Breite oder Höhe des Thumbnails teilen.
Jetzt hast du einen Maßstab.
Dann teilst du beide Seiten des original Bildes durch diesen Maßstab
und hast schonmal die Maße des Thumbnails.
Dann kommt z.B. imagecreatefromjpeg(), imagecreatetruecolor() und
zum Schluss kopierst du mit imagecopyresized() das Original in das
neu erstellte Thumbnail.
Um den Namen zuordnen zu können, setzt du davor z.B. einfach TNbildname.jpg.
Wobei das TN für Thumbnail steht.
Jetzt solltest du zu jedem User ein eindeutig zuzuordnendes Bild
inkl. Thumbnail haben.
Alles andere wäre wahrscheinlich zu aufwendig. Ich lass mich aber
auch gern eines besseren belehren.
Hilft dir das weiter?
Gruß, Matze
Hi,
Das hätte den Vorteil, dass ich die Datei nicht irgendwie verwalten muss (Namen, Ordner, etc.)
Worin siehst Du da den Vorteil?
Z.B., dass man nicht nicht aufpassen muss, dass Bilder eindeutig benamt werden.
Du musst im selben Maße darauf aufpassen wie bei einer Speicherung in der DB. Mit etwa dem selben Lösungsansatz, der lediglich aus einer anderen Perspektive betrachtet werden muss.
Ja. Die Organisation der Daten ist zudem höchst aufwändig.
Wieso das denn? Die Bilddaten wären dann eine Attribut der Person.
Ja, in der Theorie ist das richtig ;-)
Lass es mich so ausdrücken: Bei einem größeren Projekt meines Arbeitgebers hatten wir uns entschieden, die Bilddaten[1] in der DB zu speichern. Nicht mal ein Jahr später haben wir den dringenden Task erstellt, dies zu korrigieren; weitere zweieinhalb Jahre darauf war es dann geschafft. Seitdem existieren für mich genau zwei Gründe, Binärdaten in einer DB zu speichern:
1.) Die Daten müssen per SQL analysiert werden (ist in meiner Praxis noch nie vorgekommen), oder
2.) es steht kein Filesystem zur Verfügung.
Ist keiner dieser beiden Punkte erfüllt, werden die Daten unter keinen Umständen in die DB gehauen, egal wie viel Aufwand das bedeutet.
Cheatah
[1] Es handelte sich um einen Preisvergleich: Jeder Artikel hatte maximal ein Bild in genau zwei Varianten (Größen).
Lass es mich so ausdrücken: Bei einem größeren Projekt meines Arbeitgebers hatten wir uns entschieden, die Bilddaten[1] in der DB zu speichern. Nicht mal ein Jahr später haben wir den dringenden Task erstellt, dies zu korrigieren; weitere zweieinhalb Jahre darauf war es dann geschafft.
Bei Behörden oder behördenähnlichen Institutionen wird halt so gearbeitet. LOL
echo $begrüßung;
Lass es mich so ausdrücken: Bei einem größeren Projekt meines Arbeitgebers hatten wir uns entschieden, die Bilddaten[1] in der DB zu speichern. Nicht mal ein Jahr später haben wir den dringenden Task erstellt, dies zu korrigieren; weitere zweieinhalb Jahre darauf war es dann geschafft. Seitdem existieren für mich genau zwei Gründe, Binärdaten in einer DB zu speichern:
[1] Es handelte sich um einen Preisvergleich: Jeder Artikel hatte maximal ein Bild in genau zwei Varianten (Größen).
Hätte es etwas gebracht, die Bilddaten in eine eigene Tabelle auszulagen, so dass sie beim Durchsuchen der Textdaten nicht mehr stören? Im Webumfeld wird man die Bilddaten ja sowieso mit einem zweiten Request abrufen, bei dem man die Textdaten im Allgemeinen nicht braucht.
echo "$verabschiedung $name";
Hätte es etwas gebracht, die Bilddaten in eine eigene Tabelle auszulagen, so dass sie beim Durchsuchen der Textdaten nicht mehr stören?
Natürlich bringt das was, auch wegen der Seitenphilosophie der RDBMSe.
Im Webumfeld wird man die Bilddaten ja sowieso mit einem zweiten Request abrufen, bei dem man die Textdaten im Allgemeinen nicht braucht.
Wir haben auch noch nicht begriffen, warum das Speichern von BLOBs so tabuisiert wird. Oracle (von dem wir allerdings eher wenig Ahnung haben) lädt ja geradezu zum BLOB-Hochladen ein.
Vielleicht schildert der Meister ja noch den GAU und dessen Parameter?
Hi,
1: Bilddaten direkt in MySQL speichern.
mir ist noch nie ein Datenbank-Fachmann begegnet, der empfohlen hätte, Binärdaten in einer Datenbank zu speichern, solange es anders geht oder man nicht sehr, sehr explizite Vorteile daraus zieht. Dagegen habe ich schon viele die Köpfe über der Hand zusammenschlagen sehen, wenn eine entsprechende Idee geäußert wurde - mich selbst eingeschlossen.
Und was hältst Du davon, Binärdateien mit Base64 in Text umzuwandeln und dann in die DB zu tun?
Also ich würde mich nicht als Datenbank-Fachmann bezeichnen, aber finde es immer gut, alle 'Daten an einem Platz' zu haben: Content-Type, mtime, size... und die Datei selbst.
--roro
hi,
Und was hältst Du davon, Binärdateien mit Base64 in Text umzuwandeln und dann in die DB zu tun?
Da das das Datenvolumen noch mehr aufbläht - Abstand.
gruß,
wahsaga
Guten Morgen!
1: Bilddaten direkt in MySQL speichern.
Lass das besser sein.
Das hätte den Vorteil, dass ich die Datei nicht irgendwie verwalten muss (Namen, Ordner, etc.)
Was wäre das Problem einer Datei einen Namen zu geben?
- Bilder in Ordner speichern und nur den Pfad verwalten.
Wieso haust du nicht alle Bilder in einen Ordner, meinetwegen "/userpics/" ?
Dei Datei selbst bennenst du beim Upload passend zum User und
schon passt alles zusammen ;-)
Ich würde gerne von den Bildern auch Thumbnails erzeugen. Geht das bei beiden Methoden? Wie geht das überhaupt?
PHP -> imagecreatetruecolor(BREITE, HÖHE)
Alternativ kannst du auch imagecreate() nehmen,
kommt drauf an wie die Qualität des Originals ist.
Grüße, Matze
Wieso haust du nicht alle Bilder in einen Ordner, meinetwegen "/userpics/" ?
Das scheint wohl das passende zu sein. Ich google mal ein bisschen, um zu sehen, wie man das macht.
PHP -> imagecreatetruecolor(BREITE, HÖHE)
Alternativ kannst du auch imagecreate() nehmen,
kommt drauf an wie die Qualität des Originals ist.
Es werden Fotos sein. Danke für die Funktionsnamen, dann kann ich bei php.net genauer nachschauen.
Ich würde gerne für jede gespeicherte Person noch ein Passbild speichern. Jetzt weiß ich nicht welche Methode besser ist:
1: Bilddaten direkt in MySQL speichern.
Das hätte den Vorteil, dass ich die Datei nicht irgendwie verwalten muss (Namen, Ordner, etc.)
Weitere Vorteile:
- Bilder in Ordner speichern und nur den Pfad verwalten.
Vorteil: ?
s.o.
Meine Frage sind dabei unter anderem: Geht die erste Methode auf die Performance der DB?
Der Datendienst wird sicherlich so seine Probleme bekommen mit riesengrossen DBs, die zudem auch noch das "Seitenkonzept" des RDBMSes beissen.
Ich würde gerne von den Bildern auch Thumbnails erzeugen. Geht das bei beiden Methoden? Wie geht das überhaupt?
Thumbnails auch in die DB packen? ;)