Wenn 100 Benutzer 100 100-MB-Dateien (gespeichert über FILESTREAM) innerhalb eines 10-Sekunden-Fensters anfordern, würde die Leistung von SQL Server 2008 zu einem Crawling verlangsamen?
Auf was für einem Server?? Welche Art von Hardware, um diese Dateien zu bedienen? Was für Platten, Netzwerk etc.?? So viele Fragen......
Es gibt einen wirklich guten Blogbeitrag von Paul Randal auf SQL Server 2008:FILESTREAM-Leistung - Hör zu. Es gibt auch ein 25-seitiges Whitepaper auf FILESTREAM verfügbar - enthält auch einige Tipps zur Leistungsoptimierung.
Sehen Sie sich aber auch den Microsoft Research TechReport To BLOB or Not To BLOB
Es ist ein sehr tiefgründiger und sehr fundierter Artikel, der all diese Fragen auf Herz und Nieren prüft.
Ihr Fazit:
Wenn Sie also davon ausgehen, dass Ihre Blobs normalerweise weniger als 1 MB groß sind, speichern Sie sie einfach als VARBINARY (MAX) in der Datenbank. Wenn sie normalerweise größer sind, dann nur die FILESTREAM-Funktion.
Ich würde mir nicht so viele Gedanken über die Leistung machen, sondern über andere Vorteile von FILESTREAM gegenüber der „nicht verwalteten“ Speicherung in einem NTFS-Dateiordner:Wenn Sie Dateien außerhalb der Datenbank ohne FILESTREAM speichern, haben Sie keine Kontrolle darüber:
- keine Zugriffskontrolle durch die Datenbank bereitgestellt
- die Dateien sind nicht Teil Ihrer SQL Server-Sicherung
- die Dateien werden nicht transaktional gehandhabt, z.B. Sie könnten am Ende "Zombie"-Dateien haben, auf die nicht mehr von der Datenbank verwiesen wird, oder "Skelett"-Einträge in der Datenbank ohne die entsprechende Datei auf der Festplatte
Allein diese Features machen die Verwendung von FILESTREAM absolut lohnenswert.