Jan stellte in seinem Kommentar eine sehr gute Frage, die ich hier beantworten möchte:
Dann habe ich gleich mal eine Frage an den Profi: Ab wann /bis wann ist es sinnvoll und praktikabel eine Datei in einer Datenbank zu speichern und nicht nur den Pfad der Datei im dazugehörigen Filesystem (Ist es das überhaupt?). Die Last der Datenbank ist ja um ein vielfaches höher als wenn zusätzlich über das Filesystem gelesen und geschrieben wird. Gehen wir mal von eine Fotodatenbank mit vlt. 5000 Bildern à 2MB aus, das sind wir ganz schnell bei knapp 10GB die über die DB verwaltet werden müssen (OK, große Datenmengen sollten nicht das Problem sein, nur fehlt mir da die Erfahrung.). Kennst du dazu vlt. ein paar hilfreiche Quelle bzw. eine anständige Kosten-Nutzen-Analyse?
Zunächst muss man mal sehen, in welchem Bussiness-Sektor wir uns bewegen.
Im privaten Bereich wird man vermutlich die Daten auf der Festplatte des PCs speichern (unter Windows XP oder Vista) oder ein Windows XP/Vista als Peer-Server nutzen. Dann hat man vermultich die "billige" SQL-Server-Express-Edition im Einsatz. Sie kann maximal 4 GBytes große Datenbanken bearbeiten. Dann ist Schluss und man müsste zu der nächst-höheren Standard-Edition greifen. Deswegen kommt es hier meines Erachten aus Kostengründen nicht in Frage die Bilder in die DB zu packen.
Sind wir im professionellen Bereich, dann läuft vermutlich eine SQL-Server-Standard-Edition auf einem Windows-Server-System. Hier gibt es keine Größenbeschränkung.
Performance und Ausfallsicherheit:
Meiner Erfahrung nach machen SQL-Datenbanken auf IDE- und SATA-Festplatten leichter mal schlapp als auf RAID-Systemen. Meist ist auf den PCs nämlich der Schreibcache der Festplatten bzw. deren Controllern aktiviert. Kommt es dann während eines Schreibvorgangs zu einem Stromausfall oder einem harten Reset, kann die Datenbank schon mal kaputt sein. Dann ist man unter Umständen schlecht bedient, wenn man Bilder in einer Datenbank hat. Wer hat schon eine tagesaktuelle Sicherung parat oder ist Experte in Sachen Datenbank-Reparatur?
Schaltet man den bösen Schreib-Cache aus, dann spürt man das in der Performance meistens sehr deutlich, wenn der SQL-Server das nicht mit einem großen Daten-Cache etwas ausgleichen kann. Mit der Express-Edition ist der Cache auf maximal 1 GBytes beschränkt.
Am Server gilt das nicht so stark: hier werden (hoffentlich) schnelle RAID-Systeme eingesetzt, die meist noch mit der USV (unterbrechungsfreien Stromversorgung) abgesichert sind.
Verblüffenderweise ist die Performance in beiden Fällen nicht so gravierend anders als seien die Bilder direkt auf der Platte abgelegt. Je nach API (.Net bekommt im Punkto Laufzeit hier einen Malus) reden wir von 20 bis 50% "Aufpreis". Das klingt nach viel, ich hätte aber durchaus mehr befürchtet.
Handhabung
Als wichtigestes Kriterium würde ich aber heranziehen, wie mit den Bildern gearbeitet werden soll. Wenn man beispielsweise mit einem beliebigen Programm darauf zugreifen will, dann muss man tief in die Trickkiste greifen, wenn sie in einer Datenbank liegen. Im Normalfall kann man weder im Explorer, noch im Bildverarbeitungsprogramm die Bilder sehen, bearbeiten oder speichern, die in einer Datenbank liegen. Ich nutze beispielsweise gelegentlich eine Software, die doppelte Bilder erkennt und dann löscht.
Will man das mit seiner Anwendung erreichen, dann muss man sich in den Explorer "einklinken" und die Bilder so anzeigen als seien sie in einem Dateisystem. Das habe ich noch nicht gemacht und halte es deswegen für nicht so einfach. Gute Dokumenten-Management-Systeme können das aber.
Wahrscheinlich ist es sau schwer, sonst sähe man das öfter… 😉
Aus Gründen der Handhabung würde ich die privaten Bilder deswegen gar nicht in der Datenbank speichern.
Weiterführende Quellen (oder eine Kosten-Nutzen-Analyse) fallen mir gerade nicht ein. Meist wird nur thematisiert wie man Bilder als BOLBs schreibt oder liest. Falls ich noch etwas finde, dann schiebe ich den Link nach.
Alles neu macht der Mai:
Ab dem SQL-Server-2008 wendet sich übrigens das Blatt. Der kennt als neuen Datentyp FileStreams. Da liegen die Dateien "normal" auf der Platte, die Daten werden vom SQL-Server aber mit verwaltet als seien es seine eigenen. Ich denke, dass ist das Vermächtnis des WinFS.
Jetzt müssen wir noch die Daumen halten, dass dies Feature wegen zu vieler Fehler nicht aus der Liste purzelt, sondern wirklich in der Freigabeversion drin ist… 😉