Bilder abspeichern: Datenbank vs. Dateisystem

theHacker

sieht vor lauter Ads den Content nicht mehr
Teammitglied
ID: 69505
L
20 April 2006
22.680
1.315
Moin.

Diskussionsthema steht im Titel: Was spricht dafür/dagegen, komplette Grafiken zusammen mit weiteren Daten in einer Datenbank abzulegen, statt nur einen Dateinamen als Referenz abzuspeichern?
 
Die Art wie es in Datenbanken abgespeichert und gelesen wird :biggrin:
Und auch die komplizierte Auslieferung der Bilder.

Vllt mach ich mir noch nen paar Gedanken dazu und schreibe was genaueres wenn du sagst welche Datenbank du verwendest, und im Falle von MySQL welche Engine ;)

Edit: und die angestrebte DB-Struktur
 
Eigentlich hatte ich das im Post stehen und dann wieder irgendwie rausgemacht vor dem Abschicken :biggrin:

Ich nutz wie gewohnt ne MySQL-Datenbank und die MyISAM-Engine.

DB-Struktur is nix besonderes. Ich will an verschiedenen Stellen Bilder verwenden. Stells dir wie ne Art Bildergalerie vor.
id |title|picture/filename|width|height

100%ig hab ich die DB-Struktur selber noch ned. Ich bin noch am ER-Diagramme auf Papier schmieren, weil ich selber noch ned ganz weiß, was ich will :biggrin:
Was würde die DB-Struktur denn ändern?
 
Ich denke mal, du willst dadurch HTTP-Requests sparen und die Bilder Base64-enkodiert inline einbinden. Problem dabei: Der IE kann das nicht :ugly:

Ansonsten ist die Filename-Variante wesentlich performanter, da du ja eh auf eine externe Resource zugreifen musst. Speicherst du die Bilder in der Datenbank, musst du dafür dann ein PHP-Script vorschalten... reines Filesystem ist dann natürlich schneller.

Aber ohne Anwendungsfall ist es echt schwer, dir was zu empfehlen ;)

Greetz

paddya
 
Ich denke mal, du willst dadurch HTTP-Requests sparen und die Bilder Base64-enkodiert inline einbinden. Problem dabei: Der IE kann das nicht :ugly:
Ne, das war nicht wirklich gedacht :biggrin:

Ich hätte auch irgendwie intuitiv gesagt, dass Filesystem direkt besser is, aber fragen kostet ja nix.
 
Also ich wollte ja nen paar Gründe nennen die gegen die Datenbank sprechen:
  • Sollten durch irgendeine Operation mit den Blobs temporäre Tabellen entstehen (Joins, Group Bys, Subselects usw) werden diese immer auf die Festplatte geschrieben und finden nicht wie normal im Arbeitsspeicher statt
  • MySQL kann sich auch bei vorhandenen Indexen zu einem Full-Table-Scan entscheiden, wenn man dann Blobs hat, wird das natürlich besonders schön (muss ja alles von der Platte gelesen werden)
  • Die MySQL-Configvariable max_allowed_packet regelt den maximalen Puffer für die Kommunikation, bei meinem MySQL lokal steht die Größe auf 1MB (bei meinem Hoster auf 16MB), das bedeutet bei allem über 1MB bzw. 16MB gibt einen "Max packet error". Also bist du mit deiner Größe begrenzt.

Ich denke mal das sind genug Gründe für das Filesystem statt einer Db oder ?