SQL Imagehoster DB Design

w0nd4bra

Commander
Registriert
März 2008
Beiträge
2.512
Hallo,

weniger ein Hilfegesuch für Codevervollständigung, sondern eher eine Frage, die mich seit einem Semester beschäftigt und sich jetzt wieder in mein Kopf gebrannt hat.

Wie werden große Mengen an Bildern (oder auch heutzutage WebMs) in Datenbanken untergebracht?
Werden diese, wie ich es mir mittlerweile denke, als Binärdateien direkt in der DB abgelegt?
Oder simpel in Ordnerstrukturen?
Wo sind hier die Pro/Cons?

Vll. findet sich hier einer vom Fach wieder und kann mir die Frage beantworten.
 
Hi,

Dateien gehören in ein Dateisystem - sagt schon der Name. In einer Datenbank können die Pfade oder Metainformationen gelagert werden, die Datei selber sollte da aber nicht rein.

VG,
Mad
 
Falls ACID aber strikt gewahrt werden muss, kommt man oft nicht drumherum Dateien als BLOBs in die Datenbank zu speichern - da Datenbank- und Dateisystem-Operationen nicht in einer gemeinsamen atomaren Transaktion laufen können. Auch ist die Konsistenz nur noch umständlich über Checksummen zu prüfen.

Eine möglicher Kompromiss der die Vorteile beider Konzepte vereint, ist z.B. die FILESTREAM Unterstützung des SQL Servers.
 
Mal ein Paar Argumente pro DB (d.h. nicht, dass ich diesen Ansatz favorisiere, sondern immer abwägen würde!):
Zum Teil gibt es auch Restriktionen (in Firmen), die es untersagen das Filesystem zu nutzen. Hier muss man unweigerlich auf Blobs zurückgreifen.
In diesem Fall ist keine Argumentation notwendig.

Vom Aufwand her kann es durchaus deutlich mehr Zeit kosten, wenn man die Dateien nicht in der DB ablegt (gerade bei datenbanknahen Anwendung-> z.B Oracle Apex). Zu Mal man dann auch das Backupkonzept nicht nur auf die DB richten muss.
 
Nicht zu vergessen, dass es wesentlich aufwändiger ist ein Dateisystem mit Sharding und Replication zu betreiben. Mit HDFS/Hadoop oder GridFS/MongoDB bekommt man diese Möglichkeiten out of the box. Ich speichere, seit ich GridFS kenne, nichts mehr auf dem Dateisystem. Die Daten werden automatisch in Chunks abgelegt, was Streaming von riesigen Dateien ermöglicht. Natürlich fällt die Performance etwas geringer aus als wenn man direkt mit dem Dateisystem arbeitet, allerdings kann man das im Normalfall getrost ignorieren - und zur Not kann man natürlich einfach das Sharding nutzen und steigert die Performance damit quasi beliebig.
 
Zurück
Oben