Anzeige:
Ergebnis 1 bis 15 von 15

Thema: [Diskussion] Bilder in einer Msql Datenbank

  1. #1
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Neuss
    Beiträge
    19

    [Diskussion] Bilder in einer Msql Datenbank

    Hallo zusammen,

    Ich suche nach meinungen zum thema "pro/contra bilder in einer datenbank speichern"

    hintergrund:
    ich habe hier einen server auf dem ein in PHP programmiertes portal einer partnerfirma läuft. mitte april wurde das portal (das staendiger anpassung nach unseren vorgaben unterliegt!) geaendert und bilder werden nun in der datenbank gespeichert.

    in den naechsten tagen wird es eine diskussion auch zu diesem thema geben und ich wuerde gerne mehrere meinungen zu diesem thema sammeln um gut vorbereitet (und evtl. ja auch mit einem besseren verstaendnis) in diese besprechung gehen zu koennen.

    ich bin auch fuer die datensicherung dieser datenbank verantwortlich. derzeit mache ich alle 30min. einen mysqldump der in unter 30sek. fertig ist und ca. ein volumen von 100MB erreicht. vor den bildern in der datenbank waren es 13MB und die zeit war kaum messbar
    frueher galt auch die these das bilder in der datenbank anfragen verlangsamen da beim durchsuchen des tables ja auch die bild(blob) felder durchsucht werden und diese (aufgrund ihrer groesse) die anfrage verlangsamen. gilt diese these noch ?

    ich selber bin der meinung das es einfacher ist die bilder im dateisystem abzulegen und die pfade in der datenbank. zur bildmanipulation koenen auch weiterhin sowohl php-scripte wie auch shellskripte heran gezogen werden.
    ich habe mal versucht meine argumente in pro und contra zu trennen viele sind es aber leider noch nicht (da ich auch nur die genommen habe bei denen ich mir technisch halbwegs sicher bin!)

    pro Bilder in der Datenbank:
    -> das löschen eines bildes erledigt sich schnell und einfach durch das loeschen des datensatzes.

    contra Bilder in der Datenbank:
    -> die datenbank wird durch die bilder groesser
    -> zum auslesen bzw. anzeigen ist zusaetzlicher codingaufwand nötig (auslesen als stream!)
    -> bildmanipulationen sind durch den zusaetzlichen codingaufwand umstaendlicher [inner.glow]
    -> im dateisystem abgelegte bilder können extern verlinkt werden. [inner.glow]
    -> die erhöhte datenmenge führt zu erhöhtem netztraffic da mysql TCP als kommunikationsbasis verwendet. [Turbohummel]

    ich lasse mich auch gern davon ueberzeugen das bilder in einer datenbank sinn machen. ich habe lange gegoogelt um eine diskussion pro/contra zu finden habe aber nur einzelne threads gefunden die mal das eine mal das andere befuewortet haben. ich moechte diesen thread mal zum generellen vergleich der beiden lager nutzen

    ich hoffe auf rege beteiligung

    danke
    j:
    Geändert von Jorval (08-05-2006 um 09:44 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.10.2003
    Ort
    München
    Beiträge
    29
    Hallo Jorval!

    Ich hatte natürlich das gleiche Problem. An der Seite http://kulturundspielraum.org arbeiten sehr viele Redakteure. Ein Bild-Upload zu den einzelnen Artikeln ist möglich.

    Ich habe die hochgeladenen Bilder in verschiedenen Größen im Dateisystem abgelegt. Meine Gründe:

    * Die hochgeladenen Bilder werden per Imagemagick verkleinert und in verschiedenen Größen gespeichert. Wenn ich die Bilder in der Datenbank ablegen würde, müsste ich die gespeicherten Bilder nach der Manipulation wieder löschen und in der Datenbank ablegen -> Aufwändig!
    Das Löschen der Bilder ist auch recht einfach meine Bilder werden alle so gespeichert, dass ich alle zu einem Datensatz gehörenden Bilder mit einem Komando löschen kann!

    * Wenn sich irgendwann die Bildgrössen, die für die Webseite benötigt werden, ändern sollten, kann ich mit einigen wenigen Shell-Kommandos die bereits hochgeladenen Bilder auf die richtigen Grössen bringen.

    * Ich lasse mir einmal wöchentlich ein Bachup der daten per Mail schicken... Wenn die Bilder in der datenbank wären, wäre das nicht möglich.

    * Wenn ich die Bilder in der Datenbank ablegen würde, müsste ein Programm bild.php zusätzlich die Bilddaten aus der datenbank lesen, oder? Also eine zusätzliche, unnötige SQL-Abfrage mehr, oder?

    * Wenn ich in z.B. aus einem Newsletter die Bilder verlinke, gibt es keine unnötigen SQL-Abfragen beim Abrufen der Bilder.

    Ich sehe keinen Grundm, die Bilder in der Datenbank zu speichern... Ausser, dass beim DB-Backup ALLE daten gesichert werden...

    sg, Fabian

  3. #3
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Sehe ich im Prinzip genauso.

    Zumal man damit recht viel Traffic auf dem lokalen TCP produziert, die Daten müssen ja auch erst mal geschoben werden. Direkter Dateisystemzugriff ist da natürlich fixer. Wenn man Datenbankserver und Applikationsserver trennt, kann man die Bilder auf den Applikationsserver legen, und muss die Datenmenge nicht über das Netzwerk verschieben.

    Vielleicht noch als Tipp: Zur Sicherheit die MD5-Hashes der Bilder mit in die Datenbank schreiben.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  4. #4
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Neuss
    Beiträge
    19
    Danke euch beiden schonmal

    das mit den MD5sums ist uebrigens eine hervorragende idee

    gibt es evtl. jemanden der die meinung vertritt das bilder in der datenbank sehrwohl sinn machen und ein paar argumente dafuer posten kann ?

    vielen dank nochmals an alle fuer die hilfe
    j:

  5. #5
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    ich arbeite auch schon seit einigen jahren mit datenbanken und bin bisher nie auf die idee gekommen bilder in die db zu packen. Gründe s.o.

    ich betreibe eine Anwendung bei der wir einen regen schriftverkehr mit den kunden unterhalten. dazu bekomme ich für jedenbrief der rausgeht ein pdf in die hand. das auf dem dateisystem abzulegen hat wie schon erwähnt bei der datensicherung erhebliche vorteile. ich habe in einem tgz die datenbank und im anderen, wesentlich grösseren die pdf's, die ich zur entwicklung einfach nicht brauche. damit erledige ich die aktion mit dem holen der aktuellen daten auf mein testsystem in ca. 3 min...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  6. #6
    Registrierter Benutzer
    Registriert seit
    27.12.2002
    Ort
    Matrix
    Beiträge
    194
    Zitat Zitat von Jorval
    gibt es evtl. jemanden der die meinung vertritt das bilder in der datenbank sehrwohl sinn machen und ein paar argumente dafuer posten kann ?
    aber gern:

    - einheitliches interface für die anwendung
    - bilddaten können durch die datenbank verarbeitet werden
    - bilddaten und beschreibende daten sind direkt miteinander verbunden

    richtig implementiert sind bilder in blobs gespeichert eine hervorragende sache.
    mal als beispiel medizinische aufnahmen in einer oracle datenbank:

    - client-server-anwendung kann über ein einziges interface (OCI) sowohl auf die patientendaten als auch deren röntgen/tomographenbilder zugreifen
    - alle daten werden durch die datenbank selbst verschlüsselt
    - beim schreiben eines röntgenbildes scannt ein selbstgeschriebener indextyp direkt in der datenbank die bilddaten mittels ocr und ordnet das bild dem korrekten patienten zu
    - wird der patient gelöscht, werden alle seine daten konsistent und sicher aus dem system entfernt

    und richtig implementiert ist das sauschnell (unter oracle).


    -j

  7. #7
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    allerdings ist das was du da beschreibst abhängig von der eingesetzten anwendung. für eine client-server app ist es gut und sinnvoll nur eine connection bzw. einen conn-typ) zu den daten verwalten zu müssen. Lägen in diesem Fall die daten im filesystem, müsste der client die verbindung zur db und zun fs haben, was gerade in heterogenen umgebungen nicht immer einfach und auch sicherheitstechnisch oft bedenklich ist.
    Setzt man aber auf eine middleware-lösung, ist es aus og. gründen schon sinnvoll, die bilddaten im fs, beim app-server zu speichern. Hauptgrund: die DB muss die Bilddaten nicht verarbeiten zzgl. datensicherung usw...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  8. #8
    Registrierter Benutzer
    Registriert seit
    15.10.2005
    Ort
    Franken
    Beiträge
    362
    Den einzigen Vorteil den ich sehe, wäre das Backup. Mit nem DB-Dump hast du alle nötigten Daten. ABER: Der Dump dauert länger und das wiedereinspielen natürlich auch.
    Da dabei 100e Bilder in einer Datei liegen, würde ich die Bilder auf jeden Fall in eine andere Tabelle auslagern und mittels Fremdschlüssel in die Ursprungstabelle verlinken. Das spart bei einfachen lesezugriffen, dass die 100 Bilder jedesmal von der Platte in den RAM geladen werden müssen.

    Mit PHP wirst du ja in der Regel einmal das HTML mit den Daten zusammenbauen, und darin ein Bild verlinken (evtl. über get_bild.php?bild_id=2444), weswegen du beim ersten Request das Bild noch nicht brauchst und beim 2. nur den Blob lesen musst.

    Der Implementierungsaufwand ist nur geringfügig höher, da man das ja in einer Klasse verschachteln kann, der das Bild an einen Datensatz direkt dran hängt.
    Dank der Rekursion kann ich IF-Schleifen bauen.

    In neuem Glanz: www.turbohummel.de

  9. #9
    Registrierter Benutzer
    Registriert seit
    18.03.2005
    Beiträge
    211
    Schliesse mich Jasper an, Bilder in der DB ham durchaus in manchen Situationen einen Sinn.
    Stell dir ne nicht Browser basierende App vor in ner heterogenen netzwerkumgebung vor, wenn man da die Pfade, wenns geht durch firewalls verschiedene Filesysteme noch einstellen muss, der Admin wird sich freuen ^^ Die TCP Verbindung zum server muss eh stehen, dann noch extra fuer die bilder was getrennt administrieren ?
    Den Overhaed von TCP und der Bilder allgemein bekommt man durch nen Caching der Bilder in der App weg. Iss natuerlich bisserl mehr Aufwand.

    In ner Webumgebung, wo Du sowieso auf nen relativ verlinktes Filesystem zugreifst, was nur durch die DB "befuelllt" wird, faellt der extra administrationsaufwand fuer den filezugang eh weg, da kann man die bilder einfacher extern lagern ....

    Backup darf bei heutigen System kein Thema mehr sein .... da sollts auf die paar MB ned ankommen und unterstuetzen datenbanken nicht teilweisse auch inkrementelle backups ?

    Ciao ...

  10. #10
    Registrierter Benutzer
    Registriert seit
    29.10.2003
    Ort
    Neuss
    Beiträge
    19
    Hallo zusammen

    danke nochmals fuer eure meinungen.

    als resüme kann ich nun sagen das ich meine meinung zu bildern in der datenbank nun ein wenig ins gleichgewicht gebracht habe
    ich glaube zwar das ich aus gewohnheit auch weiterhin bilder lieber im dateisystem ablege aber ich ich werde sicherlich auch mal die andere variante ausprobieren und bilder in einer datenbank speichern um zu schauen ob es mir die gleichen vorteile verschafft.

    in der datenbank um die es in diesem konkreten fall geht sind derzeit ca 50% der bilder vorhanden. einen leistungseinbruch kann ich nicht feststellen. sehen wir mal ob es auch so bleibt aber ich denke da recht optimistisch

    ich würde mich auch weiterhin über meinungen und beispiele pro/contra zu diesem thema freuen. ich hoffe das auch der eine oder andere der sich schonmal vor die selbe frage gestellt sah hier ein paar anregung und evtl. eine antwort findet.

    danke nochmals an alle

    j:

  11. #11
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Na gut, dann hier noch mal Gründe:
    Vorteil von Bildern in der DB:
    - Sie liegen nicht im Dateisystem und es wird weniger leicht von anderen daran herumgepfuscht.
    - es reicht die Datenbankverbindung, ich brauche nicht noch zusätzlich einen Dateisystemzugriff zu überwachen.

    Nachteile:
    Will man sein System unabhängig vom Datenbanksystem halten, _kann_ es sich anbieten, clobs zu vermeiden.
    Das Ziel ist das Ziel.

  12. #12
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Man kann auch komplette Programme in einer DB Speichern (theoretisch).

    Spaß beseite.
    Einfach mal überlegen wie funktioniert eine DB Abfrage, und z.
    B. wie viel RAM wird Wann, Warum verbraucht.

    http://www.php-faq.de/q/q-db-blob.html
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  13. #13
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    Zitat Zitat von Romanday
    Man kann auch komplette Programme in einer DB Speichern (theoretisch).

    Spaß beseite.
    ist garnicht so abwegig.

    bei uns läuft seit jahren ein (eigenentwickeltes) system auf den win-clients. ein startprog bekommt den auftrag das anwendungsprog zu starten. bevor das aber passiert, wird in der datenbank nach updates zur entspeechenden applikation gesucht und ggf. aus der db runtergeladen und installiert. damit benötigen wir keinerlei filezugriff der clients in unser netzwerk, sondern regeln das über die db...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  14. #14
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von elrond
    ist garnicht so abwegig.

    bei uns läuft seit jahren ein (eigenentwickeltes) system auf den win-clients. ein startprog bekommt den auftrag das anwendungsprog zu starten. bevor das aber passiert, wird in der datenbank nach updates zur entspeechenden applikation gesucht und ggf. aus der db runtergeladen und installiert. damit benötigen wir keinerlei filezugriff der clients in unser netzwerk, sondern regeln das über die db...
    Ist ja auch absolut sinnvoll, aber nicht fürs Internet gegeignet.
    Das weißt du vorher nicht wie viele Leute gleichzeichtig auf deine
    DB zugreifen.
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  15. #15
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    da hassu latürnich recht...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •