Meine Frage ist ziemlich allgemein gehalten und ich weiß, dass es möglicherweise keine 100% ige Antwort darauf gibt. Ich baue eine ASP .NET-Weblösung, die viele Bilder und hoffentlich ziemlich viel Verkehr enthält. Ich möchte wirklich Leistung erzielen.
Soll ich die Bilder in der Datenbank oder im Dateisystem speichern? Und unabhängig von der Antwort interessiert mich mehr, warum ich einen bestimmten Weg wähle.
Vielen Dank, Stefan
DUPLIKAT : Bilder in DB speichern - Ja oder Nein? , Speichern von Bildern in Ihrem Dateisystem , Speichern einer kleinen Anzahl von Bildern: Blob oder Fs? und wahrscheinlich einige andere.
KOMMENTAR: Danke für viele gute Antworten. Ich werde mich für eine dateibasierte Lösung entscheiden, auch wenn mir die Idee einer 100% datenbankgesteuerten Lösung gefällt. Es scheint, dass es heute gute Lösungen gibt, um mit Datenbanken usw. das zu tun, was ich will, aber ich habe ein paar Gründe, es nicht zu tun.
Ich werde auf einer gehosteten Lösung sein, ich habe eine riesige Menge an Speicher (10 GB), aber nur 300 MB für die Datenbank. Es kostet viel für zusätzlichen Speicher in der DB.
Ich bin kein DB-Experte und habe auch keine Kontrolle über die Einstellungen der DB. Eine DB-basierte Lösung muss möglicherweise benutzerdefiniert konfiguriert werden.
Wenn wir die Site auf unserem eigenen Server ausführen, könnte ich eine DB-basierte Lösung in Betracht ziehen. Danke, Stefan
quelle
Antworten:
Speichern Sie die Bilder im Dateisystem und die Bildspeicherorte in der Datenbank.
Warum? Weil...
quelle
In meinen kürzlich entwickelten Projekten habe ich Bilder (und alle Arten von Binärdokumenten) als Bildspalten in Datenbanktabellen gespeichert.
Der Vorteil der Speicherung von Dateien in der Datenbank besteht offensichtlich darin, dass beim Löschen eines Datensatzes keine nicht referenzierten Dateien auf der Festplatte gespeichert werden, da die Synchronisierung zwischen Datenbank (= Metadaten) und Festplatte (= Dateispeicherung) nicht integriert ist und muss manuell programmiert werden.
Mit der heutigen Technologie schlage ich vor, dass Sie Bilder in SQL Server 2008 FILESTREAM-Spalten speichern (zumindest werde ich das mit meinem nächsten Projekt tun), da sie den Vorteil kombinieren, Daten in einer Datenbank zu speichern UND große Binärdateien in separaten Dateien zu haben (at am wenigsten laut werbung;))
quelle
Das Sprichwort war immer "Dateien im Dateisystem, Dateimetadaten in der Datenbank".
quelle
Besser Dateien als Dateien speichern. Verschiedene Datenbanken behandeln Blob-Daten unterschiedlich. Wenn Sie also Ihr Back-End migrieren müssen, können Probleme auftreten.
Beim Bereitstellen der Impages ist ein <img src = für eine Datei, die bereits auf dem Server vorhanden ist, wahrscheinlich schneller als das Erstellen einer temporären Datei aus dem Datenbankfeld und das Zeigen des <img-Tags darauf.
Ich fand diese Antwort, indem ich Ihre Frage googelte und die Kommentare unter http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html las
quelle
Normalerweise möchte ich Binärdateien in der Datenbank haben, weil:
quelle
Das Speichern von Bildern in der Datenbank erhöht den DB-Overhead für die Bereitstellung einzelner Bilder und erschwert das Auslagern in einen alternativen Speicher (S3, Akami), wenn Sie auf diese Ebene wachsen. Das Speichern in der Datenbank erleichtert das Verschieben Ihrer App auf einen anderen Server erheblich, da nur die Datenbank jetzt verschoben werden muss.
Das Speichern von Bildern auf der Festplatte erleichtert das Auslagern in einen alternativen Speicher und macht Bilder zu statischen Elementen, sodass Sie nicht mit HTTP-Headern in Ihrer Web-App herumspielen müssen, um die Bilder zwischenspeicherbar zu machen. Der Nachteil ist, dass Sie beim Verschieben Ihrer App auf einen anderen Server daran denken müssen, auch die Bilder zu verschieben. etwas, das leicht vergessen wird.
quelle
Bei webbasierten Anwendungen erzielen Sie eine bessere Leistung, wenn Sie das Dateisystem zum Speichern Ihrer Bilder verwenden. Auf diese Weise können Sie das Zwischenspeichern der Bilder auf mehreren Ebenen in Ihrer Anwendung problemlos implementieren. Das Speichern von Bildern in einer Datenbank bietet einige Vorteile, die jedoch meistens mit clientbasierten Anwendungen verbunden sind.
quelle
Nur um den bisher guten Antworten noch etwas hinzuzufügen. Sie können weiterhin die Vorteile des Caching von sowohl der Web - Ebene erhalten vielleicht und der Datenbank - Ebene , wenn Sie die Route halten Sie Bilder in der Datenbank gehen.
Ich denke, für die Datenbank können Sie dies erreichen, indem Sie die Bilder in Bezug auf die damit verbundenen Textdaten speichern und wenn Sie auf die Bilder in einer bestimmten Abfrage zugreifen können, damit die Datenbank die Abfrage zwischenspeichern kann (allerdings nur theoretisch) Fühlen Sie sich frei, mich in diesem Teil zu nuklearisieren).
Mit der Webseite würde ich vermuten, dass Sie, da Ihre Frage mit asp.net markiert ist, einen http-Handler verwenden würden, um die Bilder bereitzustellen. Dann stehen Ihnen alle Vorteile des Frameworks zur Verfügung, und Sie können Ihre Domänenlogik sauberer halten, indem Sie nur den Schlüssel für Ihr Image an den http-Handler übergeben müssen.
quelle
Wählen Sie eine einzelne NoSql-Datenbank zum Speichern Ihrer Dateien.
Es bringt Ihnen Datenintegrität und Datenkonsistenz, wie @chburd erwähnt.
Während Sie rdbms noch klein halten.
quelle
Eclipse
) zum Speichern von Bildern im Dateisystem und zum Speichern ihrer Metadaten in der Datenbank - http://www.devmanuals.com/tutorials/java/spring/spring3/mvc /Spring3MVCImageUpload.htmlquelle