Ich habe eine kleine Demo-Site erstellt und speichere darauf Bilder in einer Bildspalte auf dem SQL Server. Ein paar Fragen, die ich habe, sind ...
Ist das eine schlechte Idee?
Beeinträchtigt es die Leistung meiner Website, wenn sie wächst?
Die Alternative wäre, das Bild auf einer Disc zu speichern und nur den Verweis auf das Bild in der Datenbank zu speichern. Dies muss ein allgemeines Dilemma sein, das viele Menschen hatten. Ich würde einige Ratschläge begrüßen und würde mich freuen, wenn ich einen Fehler machen könnte.
sql-server
image
Marko
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 VARBINARY-Datenbankspalte 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:
Schauen Sie sich das MSDN-Intro für Dateigruppen an und spielen Sie damit herum!
quelle
Ich bin einmal in dieses Dilemma geraten und habe bei Google ziemlich viel nach Meinungen gesucht. Was ich fand, war, dass tatsächlich viele das Speichern von Bildern auf der Festplatte für größere Bilder besser sehen, während mySQL einen einfacheren Zugriff ermöglicht, insbesondere aus Sprachen wie PHP.
Ich habe eine ähnliche Frage gefunden
MySQL BLOB vs Datei zum Speichern kleiner PNG-Bilder?
Mein endgültiges Urteil war, dass für Dinge wie ein Profilbild, nur ein kleines quadratisches Bild, das pro Benutzer vorhanden sein muss, mySQL besser wäre, als ein paar Daumen auf der Festplatte zu speichern, während für Fotoalben und ähnliches Ordner / Bilddateien sind besser.
Ich hoffe es hilft
quelle
Ich würde es vorziehen, das Bild in einem Verzeichnis zu speichern und dann einen Verweis auf die Bilddatei in der Datenbank zu speichern.
Wenn Sie das Bild jedoch in der Datenbank speichern, sollten Sie Ihre Datenbank partitionieren, damit sich die Bildspalte in einer separaten Datei befindet.
Weitere Informationen zur Verwendung von Dateigruppen finden Sie hier http://msdn.microsoft.com/en-us/library/ms179316.aspx .
quelle
Warum es sinnvoll sein kann, Bilder in der Datenbank und nicht in einem Katalog auf dem Webserver zu speichern.
Sie haben eine Anwendung mit vielen Bildern erstellt, die in einem Ordner auf dem Server gespeichert sind, den der Client seit Jahren verwendet.
Jetzt kommen sie zu dir. Der Server wurde zerstört und muss auf einem neuen Server wiederhergestellt werden. Sie haben keinen Zugriff mehr auf den alten Server. Die einzige Sicherung, die sie haben, ist die Datenbanksicherung.
Sie haben natürlich die Quelle und können sie einfach auf dem neuen Server bereitstellen, SqlServer installieren und die Datenbank wiederherstellen. Aber jetzt sind alle Bilder weg.
Wenn Sie die Bilder in SqlServer gespeichert haben, funktioniert alles wie zuvor.
Nur meine 2 Cent.
quelle
Wenn Sie Bilder in SQL Server speichern, verwenden Sie nicht den Datentyp 'image' . Laut MS wird dieser in neuen Versionen von SQL Server auslaufen. Verwenden Sie stattdessen varbinary (max)
https://msdn.microsoft.com/en-us/library/ms187993.aspx
quelle
2012 wurde eine weitere Option namens Dateitabellen veröffentlicht: https://msdn.microsoft.com/en-us/library/ff929144.aspx
quelle
Während Leistungsprobleme gültig sind, liegen die wahren Gründe in der Praxis, die Sie vermeiden sollten, Bilder in einer Datenbank zu speichern, in Gründen der Datenbankverwaltung. Ihre Datenbank wächst sehr schnell und Datenbanken kosten viel mehr als einfache Dateispeicherung. Datenbanksicherungen und -wiederherstellungen sind viel teurer und zeitaufwändiger als Dateisicherungswiederherstellungen. Zur Not können Sie eine kleinere Datenbank viel schneller wiederherstellen als eine mit Bildern aufgeblähte. Wenn Sie 1 TB Dateispeicher in Azure mit einer 1 TB-Datenbank vergleichen, werden Sie den enormen Kostenunterschied feststellen.
quelle
Nach meiner Erfahrung ist das Speichern der an einem anderen Ort gespeicherten Bilder in der URL der beste Weg für ein einfaches Projekt.
quelle