{"id":876,"date":"2008-01-16T21:35:18","date_gmt":"2008-01-16T20:35:18","guid":{"rendered":"http:\/\/www.glorf.it\/blog\/2008\/01\/16\/sql-server\/sollen-bilder-in-die-datenbank"},"modified":"2008-01-16T21:37:34","modified_gmt":"2008-01-16T20:37:34","slug":"sollen-bilder-in-die-datenbank","status":"publish","type":"post","link":"http:\/\/www.glorf.it\/blog\/2008\/01\/16\/sql-talk\/sql-server\/sollen-bilder-in-die-datenbank","title":{"rendered":"Sollen Bilder in die Datenbank?"},"content":{"rendered":"<p>Jan stellte in seinem <a href=\"http:\/\/www.glorf.it\/blog\/2008\/01\/06\/sql-talk\/bilder-mit-net-im-sql-server-ablegen#comments\">Kommentar<\/a> eine sehr gute Frage, die ich hier beantworten m&#246;chte:<\/p>\n<blockquote><p>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&#246;rigen Filesystem (Ist es das &#252;berhaupt?). Die Last der Datenbank ist ja um ein vielfaches h&#246;her als wenn zus&#228;tzlich &#252;ber das Filesystem gelesen und geschrieben wird. Gehen wir mal von eine Fotodatenbank mit vlt. 5000 Bildern \u00e0 2MB aus, das sind wir ganz schnell bei knapp 10GB die &#252;ber die DB verwaltet werden m&#252;ssen (OK, gro&#223;e Datenmengen sollten nicht das Problem sein, nur fehlt mir da die Erfahrung.). Kennst du dazu vlt. ein paar hilfreiche Quelle bzw. eine anst&#228;ndige Kosten-Nutzen-Analyse?<\/p><\/blockquote>\n<p>Zun&#228;chst muss man mal sehen, in welchem <strong>Bussiness-Sektor<\/strong> wir uns bewegen.<\/p>\n<p>Im <b>privaten Bereich<\/b> 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 &quot;billige&quot; SQL-Server-Express-Edition im Einsatz. Sie kann maximal 4 GBytes gro&#223;e Datenbanken bearbeiten. Dann ist Schluss und man m&#252;sste zu der n&#228;chst-h&#246;heren Standard-Edition greifen. Deswegen kommt es <em>hier<\/em> meines Erachten aus <em>Kostengr&#252;nden<\/em> nicht in Frage die Bilder in die DB zu packen. <\/p>\n<p>Sind wir im <strong>professionellen Bereich<\/strong>, dann l&#228;uft vermutlich eine SQL-Server-Standard-Edition auf einem Windows-Server-System. Hier gibt es keine Gr&#246;&#223;enbeschr&#228;nkung. <\/p>\n<p><strong>Performance und Ausfallsicherheit:<\/strong><\/p>\n<p>Meiner Erfahrung nach machen SQL-Datenbanken auf <a href=\"http:\/\/de.wikipedia.org\/wiki\/Integrated_Drive_Electronics\">IDE<\/a>- und <a href=\"http:\/\/de.wikipedia.org\/wiki\/Serial_ATA\">SATA<\/a>-Festplatten leichter mal schlapp als auf RAID-Systemen. Meist ist auf den PCs n&#228;mlich der Schreibcache der Festplatten bzw. deren Controllern aktiviert. Kommt es dann w&#228;hrend eines Schreibvorgangs zu einem Stromausfall oder einem harten Reset, kann die Datenbank schon mal kaputt sein. Dann ist man unter Umst&#228;nden schlecht bedient, wenn man Bilder in einer Datenbank hat. Wer hat schon eine tagesaktuelle Sicherung parat oder ist Experte in Sachen Datenbank-Reparatur?<\/p>\n<p>Schaltet man den b&#246;sen Schreib-Cache aus, dann sp&#252;rt man das in der Performance meistens sehr deutlich, wenn der SQL-Server das nicht mit einem gro&#223;en Daten-Cache etwas ausgleichen kann. Mit der Express-Edition ist der Cache auf maximal 1 GBytes beschr&#228;nkt.<\/p>\n<p>Am Server gilt das nicht so stark: hier werden (hoffentlich) schnelle <a href=\"http:\/\/de.wikipedia.org\/wiki\/RAID\">RAID-Systeme<\/a> eingesetzt, die meist noch mit der <a href=\"http:\/\/de.wikipedia.org\/wiki\/USV\">USV <\/a>(unterbrechungsfreien Stromversorgung) abgesichert sind.<\/p>\n<p>Verbl&#252;ffenderweise ist die Performance in beiden F&#228;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% &quot;Aufpreis&quot;. Das klingt nach viel, ich h&#228;tte aber durchaus mehr bef&#252;rchtet.<\/p>\n<p><strong>Handhabung<\/strong><\/p>\n<p>Als wichtigestes Kriterium w&#252;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&#246;scht.<br \/>\nWill man das mit seiner Anwendung erreichen, dann muss man sich in den Explorer &quot;einklinken&quot; und die Bilder so anzeigen als seien sie in einem Dateisystem. Das habe ich noch nicht gemacht und halte es deswegen f&#252;r nicht so einfach. Gute Dokumenten-Management-Systeme k&#246;nnen das aber.<br \/>\nWahrscheinlich ist es sau schwer, sonst s&#228;he man das &#246;fter&#8230; \ud83d\ude09<\/p>\n<p>Aus Gr&#252;nden der Handhabung w&#252;rde ich die privaten Bilder deswegen gar nicht in der Datenbank speichern.<\/p>\n<p>Weiterf&#252;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.<\/p>\n<p><strong>Alles neu macht der Mai:<\/strong><\/p>\n<p>Ab dem SQL-Server-2008 wendet sich &#252;brigens das Blatt. Der kennt als neuen Datentyp <a href=\"http:\/\/blogs.msdn.com\/manisblog\/archive\/2007\/10\/21\/filestream-data-type-sql-server-2008.aspx\">FileStreams<\/a>. Da liegen die Dateien &quot;normal&quot; auf der Platte, die Daten werden vom SQL-Server aber mit verwaltet als seien es seine eigenen. Ich denke, dass ist das Verm&#228;chtnis des <a href=\"http:\/\/de.wikipedia.org\/wiki\/WinFS\">WinFS<\/a>.<br \/>\nJetzt m&#252;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&#8230; \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jan stellte in seinem Kommentar eine sehr gute Frage, die ich hier beantworten m&#246;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&#246;rigen Filesystem (Ist es das &#252;berhaupt?). Die [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[16],"tags":[],"_links":{"self":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/876"}],"collection":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/comments?post=876"}],"version-history":[{"count":0,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/876\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/media?parent=876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/categories?post=876"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/tags?post=876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}