Datei-Stream vs lokale Speicherung in SQL-Server?

8

Meine Anwendung spielt Videos nach dem Benutzer, für den sie registriert sind (Dateien sind größer als 100 MB).

  1. Ist es besser, ich speichere sie auf der Festplatte und halte den Dateipfad in der Datenbank? Oder speicher ich in der Datenbank als File Stream Type?

  2. Wenn Daten in der Datenbank gespeichert werden, sind sie sicherer gegen Manipulation als mit in hart gespeichert?

  3. Wie kann man Daten vor Manipulation schützen?

Danke.

    
user2135285 12.03.2013, 08:12
quelle

2 Antworten

10

Es gibt ein wirklich gutes Paper von Microsoft Research namens To Blob oder nicht Blob .

Ihre Schlussfolgerung nach einer großen Anzahl von Leistungstests und Analysen ist dies:

  • Wenn Ihre Bilder oder Dokumente in der Regel weniger als 256 KB groß sind, ist das Speichern in einer Datenbank-VARBINARY-Spalte effizienter.

  • Wenn Ihre Bilder oder Dokumente in der Regel mehr als 1 MB groß sind, ist ihre Speicherung im Dateisystem effizienter (und mit dem FILESTREAM -Attribut von SQL Server 2008 befinden sie sich immer noch unter Transaktionskontrolle und Teil der Datenbank )

  • zwischen diesen beiden, es ist ein bisschen ein Toss-up, abhängig von Ihrer Verwendung

Wenn Sie Ihre Bilder in eine SQL Server-Tabelle einfügen möchten, empfehle ich Ihnen dringend, eine separate Tabelle zum Speichern dieser Bilder zu verwenden. Speichern Sie das Mitarbeiterfoto nicht in der Mitarbeitertabelle, sondern in einer separaten Tabelle. Auf diese Weise kann die Employee -Tabelle schlank und gemein und sehr effizient bleiben, vorausgesetzt, Sie müssen nicht immer auch das Mitarbeiterfoto als Teil Ihrer Abfragen auswählen.

Für Dateigruppen sollten Sie Dateien und Dateigruppenarchitektur für ein Intro herunterladen. Grundsätzlich würden Sie Ihre Datenbank entweder von Anfang an mit einer separaten Dateigruppe für große Datenstrukturen erstellen oder später eine zusätzliche Dateigruppe hinzufügen. Nennen wir es LARGE_DATA .

Wenn Sie nun eine neue Tabelle erstellen müssen, die Spalten VARCHAR(MAX) oder VARBINARY(MAX) speichern soll, können Sie diese Dateigruppe für die großen Daten angeben:

%Vor%

Überprüfen Sie die MSDN-Einführung in Dateigruppen und spielen Sie damit herum!

    
marc_s 12.03.2013, 09:03
quelle
2

1 - hängt davon ab, wie Sie "besser" definieren. Im Allgemeinen bevorzuge ich es, binäre Assets in der Datenbank zu speichern, sodass sie zusammen mit den zugehörigen Daten gesichert werden, diese jedoch im Dateisystem zwischengespeichert werden. Das Streaming der Binärdaten aus SQL Server für eine Seitenanforderung ist ein echtes Performance-Hog und skaliert nicht wirklich.

  1. Wenn ein Angreifer auf Ihre Festplatte zugreifen kann, ist Ihr gesamtes System kompromittiert - das Speichern von Daten in der Datenbank bietet keine wesentliche zusätzliche Sicherheit.

3 - das ist eine ganze Frage für sich. Zu breit für Stack Overflow ...

    
Neville Kuyt 12.03.2013 08:33
quelle