415 Stimmen

Speichern von Bildern in der DB - ja oder nein?

Ich verwende also eine Anwendung, die Bilder in der DB speichert. Was ist Ihre Meinung dazu? Ich bin eher der Typ, der den Speicherort im Dateisystem speichert, als ihn direkt in der DB zu speichern.

Was sind Ihrer Meinung nach die Vor- und Nachteile?

350voto

Mark Harrison Punkte 281807

Ich bin für einige Anwendungen zuständig, die viele TB an Bildern verwalten. Wir haben festgestellt, dass das Speichern Dateipfade in der Datenbank am besten sein.

Es gibt ein paar Probleme:

  • Datenbankspeicher ist in der Regel teurer als Dateisystemspeicher
  • Sie können den Zugriff auf das Dateisystem mit Standardprodukten von der Stange superbeschleunigen
    • Zum Beispiel verwenden viele Webserver das Betriebssystem Datei senden() Systemaufruf zum asynchronen Senden einer Datei direkt vom Dateisystem an die Netzwerkschnittstelle. Bilder, die in einer Datenbank gespeichert sind, profitieren nicht von dieser Optimierung.
  • Dinge wie Webserver usw. benötigen keine spezielle Kodierung oder Verarbeitung für den Zugriff auf Bilder im Dateisystem
  • Datenbanken gewinnen, wenn die Transaktionsintegrität zwischen dem Bild und den Metadaten wichtig ist.
    • es ist komplexer, die Integrität zwischen den Metadaten der Datenbank und den Daten des Dateisystems zu verwalten
    • es ist (im Rahmen einer Webanwendung) schwierig, zu gewährleisten, dass die Daten auf dem Dateisystem auf die Festplatte gespült wurden

140voto

Rad Punkte 8279

Wie bei den meisten Themen ist es nicht so einfach, wie es klingt. Es gibt Fälle, in denen es sinnvoll wäre, die Bilder in der Datenbank zu speichern.

  • Sie speichern Bilder, die dynamisch ändern, zum Beispiel Rechnungen, und Sie wollen eine Rechnung so erhalten, wie sie am 1. Januar 2007?
  • Die Regierung möchte, dass Sie eine 6-jährige Geschichte führen
  • Für die in der Datenbank gespeicherten Bilder ist keine andere Sicherungsstrategie erforderlich. Auf dem Dateisystem gespeicherte Bilder benötigen
  • Es ist einfacher, den Zugriff auf die Bilder zu kontrollieren, wenn sie in einer Datenbank gespeichert sind. Untätige Administratoren können auf jeden Ordner auf der Festplatte zugreifen. Es braucht einen wirklich entschlossenen Administrator, um in einer Datenbank zu schnüffeln und die Bilder zu extrahieren.

Andererseits gibt es Probleme im Zusammenhang mit

  • Erfordert zusätzlichen Code zum Extrahieren und Streaming der Bilder
  • Die Latenzzeit kann sein langsamer als direkter Dateizugriff
  • Höhere Belastung des Datenbankservers

99voto

jason saldo Punkte 9556

Datei speichern. Die Facebook-Ingenieure hatten einen tollen Vortrag darüber. Eine Erkenntnis war, dass man die praktische Grenze der Dateien in einem Verzeichnis kennen sollte.

Die Nadel im Heuhaufen: Effiziente Speicherung von Milliarden von Fotos

56voto

Ray Punkte 44499

Es ist vielleicht etwas weit hergeholt, aber wenn Sie SQL Server 2008 verwenden (oder dies planen), empfehle ich Ihnen, einen Blick auf das neue FileStream Datentyp.

FileStream löst die meisten Probleme rund um die Speicherung der Dateien in der DB:

  1. Die Blobs werden eigentlich als Dateien in einem Ordner gespeichert.
  2. Der Zugriff auf die Blobs erfolgt über entweder eine Datenbankverbindung o über das Dateisystem.
  3. Backups sind integriert.
  4. Migration "funktioniert einfach".

Die "Transparente Datenverschlüsselung" von SQL verschlüsselt jedoch keine FileStream-Objekte, so dass es besser ist, sie einfach als varbinary zu speichern.

Aus dem MSDN-Artikel:

Mit Transact-SQL-Anweisungen können FILESTREAM-Daten eingefügt, aktualisiert, abgefragt, gesucht und gesichert werden. Win32-Dateisystemschnittstellen bieten Streaming-Zugriff auf die Daten.
FILESTREAM verwendet den NT-Systemcache zum Zwischenspeichern von Dateidaten. Dies trägt dazu bei, die Auswirkungen von FILESTREAM-Daten auf die Leistung der Datenbank-Engine zu verringern. Der Pufferpool des SQL Servers wird nicht verwendet; daher ist dieser Speicher für die Abfrageverarbeitung verfügbar.

39voto

Greg Hurlman Punkte 17467

Die Dateipfade in der DB lauten definitiv Ich habe von Kunden mit TB an Bildern gehört, dass es ein Alptraum ist, eine nennenswerte Menge an Bildern in einer DB zu speichern - allein der Leistungsverlust ist zu groß.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X