Es ist eine alte Frage, die ich kenne, aber mit SQL Server 2012 ist es endlich in Ordnung, Dateien in der Datenbank zu speichern, oder sollten sie wirklich im Dateisystem mit nur Verweisen auf sie in der Datenbank gespeichert werden?
Wenn das Speichern in der Datenbank heutzutage als akzeptabel angesehen wird, wie geht das am effektivsten?
Ich habe vor, Verschlüsselung anzuwenden, daher schätze ich, dass die Verarbeitung nicht blitzschnell sein wird.
sql-server
CompanyDroneFromSector7G
quelle
quelle
Antworten:
Es gibt ein wirklich gutes Papier von Microsoft Research mit dem Titel To Blob oder Not To Blob .
Ihre Schlussfolgerung nach einer Vielzahl von Leistungstests und Analysen lautet:
Wenn Ihre Bilder oder Dokumente in der Regel weniger als 256 KB groß sind, ist das Speichern in einer Datenbank-Spalte VARBINARY effizienter
Wenn Ihre Bilder oder Dokumente in der Regel größer als 1 MB sind, ist das Speichern im Dateisystem effizienter (und mit dem FILESTREAM-Attribut von SQL Server 2008 stehen sie weiterhin unter Transaktionskontrolle und sind Teil der Datenbank).
Dazwischen ist es je nach Verwendung ein bisschen durcheinander
Wenn Sie Ihre Bilder in eine SQL Server-Tabelle einfügen möchten, würde ich dringend empfehlen, eine separate Tabelle zum Speichern dieser Bilder zu verwenden. Speichern Sie das Mitarbeiterfoto nicht in der Mitarbeitertabelle. Bewahren Sie sie in einer separaten Tabelle auf. Auf diese Weise kann die Mitarbeitertabelle schlank und gemein und sehr effizient bleiben, vorausgesetzt, Sie müssen nicht immer auch das Mitarbeiterfoto als Teil Ihrer Abfragen auswählen.
Informationen zu Dateigruppen finden Sie unter Dateien und Dateigruppenarchitektur . 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 jetzt eine neue Tabelle erstellen müssen, in der VARCHAR- (MAX) oder VARBINARY- (MAX) Spalten gespeichert werden müssen, können Sie diese Dateigruppe für die großen Datenmengen angeben:
CREATE TABLE dbo.YourTable (....... define the fields here ......) ON Data -- the basic "Data" filegroup for the regular data TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data
Schauen Sie sich das MSDN-Intro für Dateigruppen an und spielen Sie damit herum!
quelle
VARBINARY(MAX)
in einem separaten Dateigruppe, wenn Sie eine separate „Datei“ Tabelle haben, speichern Sie nur , dass ganze Tabelle in der separaten Dateigruppe oder speichern Sie die Datei „meta“ Daten in der Standard - Dateigruppe (n) und speichern nur dieVARBINARY(MAX)
in die neue Dateigruppe?FILETABLE
Funktion in SQL Server 2012? Dort werden nur die Metadaten über die Datei in SQL Server gespeichert (wie beiFILESTREAM
) - die eigentliche Datei (die Bytes, aus denen sie besteht) werden außerhalb der Datenbank auf einem Laufwerk gespeichertEs gibt immer noch keine einfache Antwort. Das hängt von Ihrem Szenario ab. MSDN verfügt über eine Dokumentation, die Ihnen bei der Entscheidung hilft.
Hier werden weitere Optionen behandelt. Anstatt direkt oder in einem BLOB im Dateisystem zu speichern, können Sie FileStream oder File Table in SQL Server 2012 verwenden. Die Vorteile von File Table scheinen ein Kinderspiel zu sein (aber ich habe zugegebenermaßen keine persönlichen Erfahrungen aus erster Hand mit ihnen .)
Der Artikel ist auf jeden Fall eine Lektüre wert.
quelle
Sie können auf FILESTREAM nachlesen . Hier sind einige Informationen aus den Dokumenten, die Ihnen bei der Entscheidung helfen sollen:
quelle