Speichern einer Datei in einer Datenbank im Gegensatz zum Dateisystem?


83

Wie schlecht ist es im Allgemeinen, wenn eine Datei in einer Datenbank (insbesondere mssql) gespeichert wird, im Gegensatz zum Dateisystem? Ich kann keinen Grund außerhalb der Anwendungsportabilität finden, warum ich meine Dateien als varbinaries in SQL Server speichern möchte.

Antworten:


77

Schauen Sie sich diese Antwort an:

Bilder in DB speichern - Ja oder Nein?

Im Wesentlichen kann der Platz- und Leistungseinbruch je nach Anzahl der Benutzer sehr groß sein. Denken Sie auch daran, dass Webserver billig sind und Sie leicht mehr hinzufügen können, um die Last auszugleichen, während die Datenbank normalerweise der teuerste und am schwierigsten zu skalierende Teil einer Webarchitektur ist.

Es gibt einige entgegengesetzte Beispiele (z. B. Microsoft Sharepoint), aber normalerweise ist das Speichern von Dateien in der Datenbank keine gute Idee.

Sofern Sie möglicherweise keine Desktop-Apps schreiben und / oder ungefähr wissen, wie viele Benutzer Sie jemals haben werden, aber auf etwas so Zufälligem und Unerwartetem wie einer öffentlichen Website, zahlen Sie möglicherweise einen hohen Preis für das Speichern von Dateien in der Datenbank.


36

Wenn Sie zu SQL Server 2008 wechseln können, können Sie die FILESTREAM-Unterstützung nutzen, die Ihnen das Beste aus beiden bietet: Die Dateien werden im Dateisystem gespeichert, aber die Datenbankintegration ist viel besser als nur das Speichern eines Dateipfads in einem varchar-Feld. Ihre Abfrage kann einen Standard-.NET-Dateistream zurückgeben, was die Integration erheblich vereinfacht.

Erste Schritte mit FILESTREAM Storage


1
Ich habe hier einige Vorbehalte. Insbesondere die Skalierbarkeits- und Verfügbarkeitsseite: Wie steuern Sie, wo diese "Blobs" gespeichert werden?
Dave Van den Eynde

3
Skalierbarkeit und Verfügbarkeit scheinen ziemlich gut durchdacht zu sein - siehe dieses Whitepaper: msdn.microsoft.com/en-us/library/cc949109.aspx
Jon Galloway

2
Eine Einschränkung ist, dass Sie beim Herstellen einer
Sven Grosen

22

Ich würde sagen, es hängt von Ihrer Situation ab. Zum Beispiel arbeite ich in der Kommunalverwaltung und wir haben viele Bilder wie Fahndungsfotos usw. Wir haben keine große Anzahl von Benutzern, aber wir müssen eine gute Sicherheit und Prüfung der Daten haben. Die Datenbank ist eine bessere Lösung für uns, da sie dies einfacher macht und wir nicht auf Skalierungsprobleme stoßen werden.



3

Nach meiner eigenen Erfahrung ist es immer besser, Dateien als Dateien zu speichern. Der Grund dafür ist, dass das Dateisystem für die Speicherung von Dateien optimiert ist, eine Datenbank jedoch nicht. Natürlich gibt es einige Ausnahmen (z. B. soll das vielbeachtete MS-Dateisystem der nächsten Generation auf SQL Server aufgebaut sein), aber im Allgemeinen ist das meine Regel.


3

Während Leistung ein Problem ist, denke ich, dass moderne Datenbankdesigns es für kleine Dateien viel weniger problematisch gemacht haben.

Abgesehen von der Leistung hängt es auch davon ab, wie eng die Daten gekoppelt sind. Wenn die Datei Daten enthält, die in engem Zusammenhang mit den Feldern der Datenbank stehen, gehört sie konzeptionell in ihre Nähe und kann in einem Blob gespeichert werden. Wenn es Informationen enthält, die sich möglicherweise auf mehrere Datensätze beziehen oder außerhalb des Datenbankkontexts verwendet werden können, gehört es außerhalb. Beispielsweise wird ein Bild auf einer Webseite auf eine separate Anforderung von der Seite abgerufen, die darauf verweist, sodass es möglicherweise nach außen gehört (abhängig vom spezifischen Design und den Sicherheitsaspekten).

Unser Kompromiss, und ich verspreche nicht, dass es der beste ist, bestand darin, kleinere XML-Dateien in der Datenbank zu speichern, aber Bilder und andere Dateien außerhalb der Datenbank.


Was halten Sie von einer kleinen oder großen Datei?
Ubiquibacon


1

Ich stimme @ZombieSheep zu. Nur noch eine Sache - ich glaube im Allgemeinen nicht, dass Datenbanken tatsächlich portabel sein müssen, da Sie alle Funktionen vermissen, die Ihr DBMS-Anbieter bietet. Ich denke, dass die Migration in eine andere Datenbank das Letzte ist, was man in Betracht ziehen würde. Nur meine $ .02


1

Der Aufwand, einen Blob (ein Bild) in ein Byte-Array zu analysieren und ihn dann im richtigen Dateinamen auf die Festplatte zu schreiben und dann zu lesen, reicht aus, um Sie davon abzuhalten, dies zu oft zu tun, insbesondere wenn es sich um Dateien handelt eher groß.


1
Ich sehe nirgendwo erwähnt, dass diese "Datei" auf die Festplatte geschrieben und erneut gelesen werden muss.
Dave Van den Eynde

Dies ist eine implizite Aufgabe, wenn Bilder anschließend angezeigt werden müssen, insbesondere wenn sie in verschiedenen Formaten oder in Szenarien gespeichert werden, in denen sie aufgrund ihrer Größe nicht für längere Zeiträume gespeichert werden können.
Jon Limjap

0

Um nicht vage zu sein oder so, aber ich denke, die Art der 'Datei', die Sie speichern, ist einer der wichtigsten bestimmenden Faktoren. Wenn Sie im Wesentlichen über ein großes Textfeld sprechen, das als Datei gespeichert werden könnte, würde ich den Datenbankspeicher bevorzugen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.