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.

Cade
quelle

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.

Michael Stum
quelle
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

Jon Galloway
quelle
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.

Lance Fisher
quelle
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.

ZombieSheep
quelle
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.

Marcus Downing
quelle
Was halten Sie von einer kleinen oder großen Datei?
Ubiquibacon
2

Wir haben die Entscheidung getroffen, als varbinary für http://www.freshlogicstudios.com/Products/Folders/ zu speichern, wobei Leistungsprobleme auf halbem Wege erwartet werden. Ich kann sagen, dass wir angenehm überrascht waren, wie gut es geklappt hat.

Shawn Miller
quelle
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

martinsb
quelle
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ß.

Jon Limjap
quelle
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.

N8g
quelle