Frage

    

Diese Frage bereits eine Antwort hier:

    
            
  •              Speichern von Bildern in DB - Ja oder Nein ?                                      56 Antworten                          
  •     
    

Im Rahmen einer Web-Anwendung, mein alter Chef sagte immer einen Verweis auf ein Bild in der Datenbank setzen, nicht das Bild selbst. Ich neige dazu, zu bestätigen, dass sich in der DB eine URL gegenüber der Bildspeicher ist eine gute Idee, aber wo ich jetzt arbeite, speichern wir eine Menge Bilder in der Datenbank.

Der einzige Grund, warum ich von ist denken kann, vielleicht ist es sicherer ist? Sie wollen nicht, dass jemand einen direkten Link zu einer URL mit? Aber wenn das der Fall ist, können Sie immer die Website / Server-Handle Bilder Web haben, wie Handler in asp.net, so dass ein Benutzer das Bild anzuzeigen authentifizieren muss. Ich denke, auch die Leistung durch Herausziehen der Bilder aus der Datenbank verletzt werden würde. Alle andere Gründe, warum es eine gute / nicht so gute Idee, zum Speichern von Bildern in einer Datenbank?


Genaue duplizieren: Benutzerbild: Datenbank oder Dateisystem-Speicher ?
Genaue duplizieren: Speichern von Bildern in der Datenbank: ja oder nein ?
Genaue duplizieren: Soll ich speichern meine Bilder in der Datenbank oder Ordner?
Genaue duplizieren: würden Sie speichern binäre Daten in der Datenbank oder Ordner?
Genaue duplizieren: Speicher eine kleine Anzahl von Bildern: Blob oder fs
Genaue duplizieren: store Bild-Dateisystem oder Datenbank?

War es hilfreich?

Lösung

Wenn Sie gelegentlich müssen ein Bild abrufen und hat auf verschiedenen Web-Servern zur Verfügung stehen. Aber ich denke, das ist ziemlich viel es.

  • Wenn es nicht auf mehreren Servern verfügbar sein muss, ist es immer besser, sie in das Dateisystem zu setzen.
  • Wenn es auf mehreren Servern zur Verfügung stehen muss, und es ist eigentlich eine Art von Last im System, werden Sie eine Art von verteilten Speicher benötigen.

Wir sprechen hier eine Kante Fall, wo Sie vermeiden können, einen zusätzlichen Grad an Komplexität zu Ihrem System hinzufügen, indem Sie die Datenbank nutzen.

Other than that, tut es nicht.

Andere Tipps

Pros von Bildern in einer Datenbank setzen.

  1. Transaktionen. Wenn Sie den Blob speichern, können Sie es wie jedes andere Stück von DB-Daten verpflichten. Das bedeutet, dass Sie die blob zusammen mit einem der assoziierten Meta-Daten verpflichten können und sicher sein, dass die beide synchron sind. Wenn Sie aus Festplattenspeicher ausgeführt werden? Keine begehen. Datei nicht vollständig laden? Keine begehen. Dumme Fehler in der Anwendung? Keine begehen. die Bilder und ihre zugehörigen Metadaten miteinander konsistent Wenn halten Ihre Anwendung wichtig ist, dann sind die Transaktionen, die ein DB kann ein Segen zur Verfügung stellen kann.

  2. Ein System zu verwalten. Benötigen Sie die Meta-Daten und Blobs zu sichern? Sichern Sie die Datenbank. Brauchen sie zu replizieren? Replizieren Sie die Datenbank. Muß von einem teilweisen Systemausfall erholen? Laden Sie die DB und vorwärts rollen die Protokolle. Alle Vorteile, die DBs Daten im Allgemeinen (Volumen-Mapping, Speicherkontrolle, Backups, Replikation, Recovery, etc.) gelten für Ihre Blobs bringen. Mehr Konsistenz, eine einfachere Verwaltung.

  3. Sicherheit. Datenbanken haben eine sehr feinkörnige Sicherheitsfunktionen, die genutzt werden können. Schemen, Benutzerrollen, auch Dinge wie „Nur-Lese-Ansichten“ sicheren Zugriff auf eine Teilmenge von Daten zu geben. Alle diese Funktionen arbeiten mit Tabellen Blobs auch.

  4. Halten
  5. Zentrale Verwaltung. Bezogen auf # 2, aber im Grunde der DBAs bekommen (als ob sie nicht genug Kraft haben) eine Sache zu verwalten: die Datenbank. Moderne Datenbanken (vor allem die größeren) arbeiten sehr gut mit großen Installationen auf mehreren Maschinen. Einzelquelle-Management vereinfacht die Verfahren vereinfacht Wissenstransfer.

  6. Die meisten modernen Datenbanken verarbeiten Blobs gut. Mit erstklassigem Support von Blobs in Ihrer Datenebene, können Sie leicht Blobs Streamen von der DB an den Client. Zwar gibt es Vorgänge, die Sie, dass auf einmal die gesamte Blob tun kann „in saugen“, wenn Sie nicht über diese Funktionalität benötigen, dann verwenden Sie es nicht. Studieren Sie die SQL-Schnittstelle für Ihre DB und nutzen ihre Funktionen. Kein Grund zu behandeln sie wie „große strings“, die monolithisch und schalten Sie Ihre Blobs in zu groß, Speicher verschlingt, Cache Zerschlagung Bomben.

  7. behandelt werden
  8. Wie Sie dedizierte Dateiserver für Bilder einrichten können, können Sie dedizierten Blob-Server in Ihrer Datenbank einrichten. Geben Sie ihnen dedizierte Disk-Volumes, dedizierte Schemata, dedizierte Caches usw. Alle Ihre Daten in der DB ist nicht das gleiche, oder verhält sich genauso, keinen Grund zu konfigurieren, dass alle gleich. Gute Datenbanken haben die feine Maß an Kontrolle.

Der primäre nit in Bezug auf einen Blob von einem DB serviert wird sichergestellt, dass Ihre HTTP-Schicht alle das HTTP-Protokoll tatsächlich nutzt den Dienst auszuführen.

Viele naive Implementierungen einfach den Blob greifen, und steckt sie Großhandel den Sockel nach unten. Aber HTTP hat mehrere wichtige Funktionen gut geeignet Bilder zu Streaming usw. Bemerkenswerter Header Cachen, ETags und segmentierte Übertragungs Kunden zu ermöglichen, zu verlangen, „Stücke“ des Blobs.

Stellen Sie sicher, dass Ihr HTTP-Dienst ordnungsgemäß all diese Anfragen ehrt, und Ihre DB ein sehr guter Web-Bürger sein kann. Durch das Zwischenspeichern der Dateien in einem Dateisystem für durch den HTTP-Server dient, Sie einige dieser Vorteile „kostenlos“ (seit einem guten Server tun das sowieso für „statische“ Ressourcen) gewinnen, aber sicher, wenn Sie das tun, dass Sie ehre Dinge wie Änderungsdatum usw. für Bilder.

Zum Beispiel jemand spaceshuttle.jpg anfordert, ein Bild auf Jan erstellt 1, 2009. Das gecached landet auf dem Dateisystem auf dem Anforderungsdatum, sagen sie, 1. Februar 2009. Später wird das Bild aus dem Cache gelöscht (FIFO Politik, oder was auch immer), und jemand, später, am 1. März 2009 Anfragen es wieder. Nun, jetzt hat es eine 1. März 2009 „Erstellungsdatum“, auch wenn die gesamte Zeit sein Erstellungsdatum war wirklich Jan 1. So können Sie, vor allem, wenn Sie den Cache dreht sich um eine Menge, Kunden sehen, die If- können unter Verwendung von Modified Header mehr Daten werden immer als sie tatsächlich benötigen, da die server denkt, dass die Ressource hat sich verändert, wenn in der Tat hat es nicht.

Wenn Sie das Cache-Erstellungsdatum synchron mit dem tatsächlichen Erstellungsdatum zu halten, kann dies weniger ein Problem.

Aber der Punkt ist, dass es etwas ist, durch über das gesamte Problem, um eine „gute Web-Bürger“ zu denken, und speichern Sie und Ihre Kunden möglicherweise etwas Bandbreite etc.

Ich habe gerade durch all dies für ein Java-Projekt gegangen Videos von einem DB dient, und es funktioniert alles einen Genuss.

Ich verstehe, dass die Mehrheit der Datenbank-Profis werden die Finger kreuzen und an Sie zischen, wenn Sie Bilder in der Datenbank speichern (oder sogar nennen es). Ja, es gibt definitiv Leistung und Lagerung Auswirkungen, wenn für große Blöcke von binären Daten jeglicher Art, die Datenbank als Repository verwendet (Bilder neigen dazu, nur die am häufigsten verwendeten Bits von Daten zu sein, die nicht normalisiert werden können). Allerdings gibt es sicherlich Situationen, in denen die Datenbankspeicherung von Bildern ist nicht nur zulässig, sondern ratsam .

Zum Beispiel in meinem alten Job hatten wir eine Anwendung, bei der Nutzer Bilder auf mehrere verschiedene Punkte eines Berichts legen würde, dass sie schrieben, und die Bilder werden mussten ausgedruckt, wenn es fertig war. Diese Berichte wurden über SQL Server-Replikation bewegen über, und es wäre ein großen Kopfschmerzen eingeführt, um zu versuchen, diese Bilder und Dateipfade über mehrere Systeme und Server mit jeder Art von Zuverlässigkeit zu verwalten. Deren Speicherung in der Datenbank hat uns alle, dass „kostenlos“ und das Reporting-Tool musste nicht auf das Dateisystem hinausgehen, um das Bild abzurufen.

Mein allgemeiner Rat wäre, dich nicht zu einem Ansatz zu begrenzen oder die andere - gehen Sie mit der Technik, die die Situation paßt. Dateisysteme sind sehr gut im Speichern von Dateien und Datenbanken sind sehr gut auf der Bereitstellung mundgerechte Stücke von Daten auf Anfrage. Auf der anderen Seite, eine meiner Produkte des Unternehmens hat eine Anforderung, den gesamten Zustand der Anwendung in der Datenbank zu speichern, was bedeutet, dass Dateianhänge gehen auch dort. Mit unserem DB-Server (SQL Server 2005) Ich habe noch in beobachtbare Performance-Probleme auch bei großen Kunden und Datenbanken ausgeführt wird.

Microsoft SQL 2008 gibt Ihnen das Beste aus beiden Welten mit der Filestream-Funktion - möglicherweise wert. http://technet.microsoft.com/en-us/library/bb933993.aspx

Einer der Vorteile der Bilder in der Datenbank zu speichern ist, dass es über die Systeme tragbar ist und unabhängig von Dateisystem (e) Layout.

Die einfachste / performante / skalierbarste Lösung ist Ihre Bilder auf dem Dateisystem zu speichern. Wenn Sicherheit ein Anliegen ist, steckt sie in einem Ort, der nicht mit dem Web-Server und ein Skript schreiben, Sicherheitsgriffe und die Dateien serviert.

Angenommen, Ihre Web / app-Server und DB-Server sind verschiedene Maschinen, nehmen Sie ein paar Hits von Bildern in der DB setzen: (1) Netzwerklatenz zwischen den beiden Maschinen, (2) DB-Verbindung Overhead, (3) raubend eine zusätzliche DB-Verbindung für jedes Bild serviert. Ich wäre mehr besorgt über den letzten Punkt. Wenn Ihre Website viele Bilder dient, Ihre Web-Server raubend viele DB-Verbindungen sein werden und Ihre Verbindungspools erschöpfen könnte

Wenn Ihre Anwendung auf mehreren Servern ausgeführt wird, würde ich speichern die Referenzkopie Ihrer Bilder in der Datenbank und sie dann bei Bedarf auf die Dateisysteme zwischenzuspeichern. Dabei ist gerade Art und Weise weniger ein fehleranfällig Nervensäge als zu versuchen, Dateisysteme seitlich zu synchronisieren.

Wenn Ihre Anwendung auf einem einzelnen Server ist, dann ja, halten Sie sich an das Dateisystem und haben die Datenbank einen Pfad zu den Daten erhalten.

Die meisten SQL-Datenbanken sind natürlich nicht mit serviert Bildern im Auge, aber es gibt ein gewisses Maß an Komfort, die mit ihnen in der Datenbank hat.

Zum Beispiel, wenn Sie bereits eine Datenbank laufen haben und die Replikation konfiguriert. Sie haben sofort einen HA-Bildspeicher anstatt zu versuchen, etwas rsync oder nfs basierte Dateisystem-Replikation zu arbeiten. Auch eine Reihe von Web-Prozessen (oder einen neuen Service-Gestaltung) Dateien schreiben auf der Festplatte Ihrer Komplexität ein wenig erhöht. Wirklich ist es nur mehr bewegliche Teile.

Am allerwenigsten, würde ich empfehlen ‚Meta‘ Daten über das Bild zu halten (wie irgendwelche Rechte, das es besitzt, usw.) und die tatsächlichen in verschiedene Tabellen getrennten Daten, so dass es ziemlich einfach sein wird, zu einem anderen wechseln Datenspeicher auf der ganzen Linie. Die in Verbindung mit irgendeiner Art von CDN oder Caching sollten Ihnen ziemlich gute Leistung bis zu einem Punkt geben, so dass ich denke, es hängt davon ab, wie skalierbar diese Anwendung sein muss und wie Sie das Gleichgewicht mit einfacher Implementierung.

Sie müssen die URL nicht speichern (wenn Sie das Gefühl, das ist unsicher). Sie können nur eine eindeutige ID speichern, die an anderer Stelle das Bild verweist.

Datenbankspeicher neigen als ein Dateisystem teurer und teuer in der Unterhaltung zu sein - daher würde ich nicht in einer Datenbank viele Bilder speichert

.

Disaster Recovery ist absolut kein Spaß, wenn man Terabytes von Bilddaten in der Datenbank gespeichert hat. Du bist besser dran, einen besseren Weg zu finden, um Ihre Daten zu verteilen, um sie zuverlässiger etc zu machen ... Natürlich sind alle der Aufwand (siehe oben) multipliziert wird, wenn die Replikation und so weiter ...

Just do not do it!

Das scheint wirklich wie ein KISS (Keep it simple stupid) Problem. Dateisysteme werden vorgenommen, um bequem Speichern von Bilddateien zu verarbeiten, aber es ist nicht einfach, in einer Datenbank zu tun und einfach die Daten vermasseln. Warum nehmen Sie eine Performance-Einbußen und all die Schwierigkeiten in den SQL und Rendering, wenn Sie können nur um Datei Sicherheit sorgen? Sie können auch Mischsysteme Emit NFS oder CIFS behandeln. Dateisysteme sind ausgereifte Technologien. Viel einfacher, robuster.

ich Bilder in einer Datenbank für eine Demo-Anwendung gespeichert. Der Grund, warum ich es tat, war Sicherheit - das Löschen eines Datensatzes, sollte ich nicht war kein großes Problem, aber das Löschen einer Datei ich sollte kein Problem gewesen sein könnte haben

Wenn die Leistung ein Problem geworden ist, würde ich untersucht, ob Schelm Löschen von Dateien eine reale Möglichkeit war oder nicht.

Wenn es sind Bilder, die gezogen werden, in regelmäßigen Abständen die Datenbank aus, würde ich immer versuchen, das Dateisystem zu verwenden.

Wenn es Bilder, die einmal in einer Weile zu gezogen müssen aus, und sie in der Datenbank gespeichert macht das Leben leichter, ich habe kein Problem mit diesem.

  • Datenbank für die Daten
  • Dateisystem für Dateien
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top