Szenario:
SQL Server 2005-Datenbank, die eine ASP.NET-Anwendung (auf einem separaten Webserver) bedient.
Datenbank: Die Datenbank
enthält ungefähr 5 GB "normale" Daten und ungefähr 15 GB "Dateien" (z. B. ein als Bild gespeichertes 200-KB-PDF (BLOB), so etwas). Weitere Dateien werden von Benutzern hochgeladen und verbrauchen schnell mehr Speicherplatz (die Datenbank könnte in den nächsten Monaten auf 50 GB anwachsen, hauptsächlich Dateien).
Bedenken: Das
Speichern so vieler Dateien in der Datenbank verursacht bereits Probleme (z. B.: Die große Gesamtgröße der Datenbank erschwert gelegentliche Sicherungen und Bereitstellungen der gesamten Datenbank.).
Und wir befürchten, dass es weitere Probleme geben wird . (zB: Leistungsprobleme - möglicherweise dadurch verursacht, dass nicht die gesamte Datenbank im RAM gehalten werden kann?)
Frage:
Welche technische Lösung würden Sie für dieses Problem vorschlagen? Dateien im Dateisystem speichern? Teilen Sie die Datenbank in zwei Teile und haben Sie eine größere, langsamere für Dateien?
Weitere Details, falls erforderlich:
Diese Dateien sind nicht besonders wichtig und benötigen keine sehr schnellen Zugriffszeiten. Ein paar Sekunden wären in Ordnung, und derzeit gibt es möglicherweise höchstens ein Dutzend Auswahlen pro Stunde. Die anderen "normalen" Daten in der Datenbank enthalten Informationen, die mehrmals pro Sekunde benötigt werden.
Antworten:
Ich kümmere mich um eine sehr ähnliche Datenbank, derzeit 3 TB und 5 GB pro Tag.
Wägen Sie die Vor- und Nachteile von Filestream ab und prüfen Sie, ob es in Ihren Fall passt. In unserem Fall haben wir einen anderen Weg eingeschlagen und uns für die Partitionierung der Datenbank entschieden, damit wir die teilweise Verfügbarkeit / stückweise Wiederherstellung nutzen können .
Eine Option, die uns möglicherweise nicht zur Verfügung stand, besteht darin, ältere / archivierte Dateigruppen als schreibgeschützt zu markieren. Die schreibgeschützten Dateigruppen können dann selten gesichert werden.
Wenn Sie sich an 2005 Standard halten (Partitionierung ist eine Enterprise Edition-Funktion) und die Option haben, für den Verlauf schreibgeschützt zu sein, können Sie dies auf die altmodische Weise angehen.
Eine letzte Option (die wir für unseren 3-TB-Blobber in Betracht ziehen) besteht darin, die Dateidaten in eine Dokumentendatenbank oder einen Cloud-Speicher (z. B. AmazonS3 , Azure BLOB-Speicher ) zu verschieben. Dies führt zwar zu dem zuvor erwähnten Problem der Transaktionskonsistenz, entlastet jedoch diese sehr teuren SQL Server.
quelle
Probieren Sie die FILESTREAM- Funktion in SQL Server aus.
FILESTREAM integriert das SQL Server-Datenbankmodul in ein NTFS-Dateisystem, indem varbinary (max) BLOB-Daten (Binary Large Object) als Dateien im Dateisystem gespeichert werden
schöne Artikel darüber
quelle