2009-04-03 3 views
22

Mögliche Duplizieren:
Storing Images in DB - Yea or Nay?Soll ich meine Bilder in der Datenbank oder den Ordnern speichern?

Hallo

Im Moment jedes Unternehmen auf meiner Website haben 1 Bild, das sie zu ihrem Profil hinzufügen können. Ich speichere dieses Bild in der Datenbank .... es ist ihr Firmenlogo.

Jetzt möchte ich ihnen erlauben, mehr Bilder hinzuzufügen. Jetzt weiß ich nicht, ob ich alles in der Datenbank speichern oder es in Ordnern speichern muss ????

Grund, warum ich denke, Ordner wird besser sein, weil es so viele schöne Artikel mit ausgefallenen Silberlicht ein bisschen Funktionen, die ich verwenden kann, aber alle nur für Bilder in Ordnern gespeichert sorgen.

Und da ich nicht so gut bin, ist es schwer für mich, den Code zu ändern, um die Datenbank anstelle der Beispiele zu betrachten, die Ordner für die Bildersuche verwenden.

Ich möchte so etwas zu meiner Website (Durchsuchen der Bilder) hinzufügen. Irgendwelche Codebeispiele für mich, wie man das macht, wenn Bilder in der Datenbank gespeichert werden? Ich benutze ASP.NET mit VB.net. Click here to view what i am talking about

Irgendwelche Ideen Leute?

Grüße Etienne

Antwort

13

Ich habe es in letzter Zeit in beide Richtungen getan. Ich bevorzuge die Verzeichnismethode, um die Bilder zu speichern, während ihre Eigenschaften in einer DB behalten werden.

Hauptgrund: Ich hatte Client für ich eine Website für. Es gab einen Fotogallerieabschnitt, der es ihnen erlaubte, neue Fotos hochzuladen, die von der öffentlichen Seite durchsucht werden konnten. Mein Kunde hat nicht daran gedacht, seine Bilder vor dem Hochladen zu optimieren. Also im Grunde war jedes .jpg über 1mb. Ich fügte die Fähigkeit hinzu, ein Bild zu aktualisieren, sobald es in der DB gespeichert wurde, aber es musste ein Satz nach dem anderen getan werden.

Wenn das gleiche beim Speichern der Bilder in einem Verzeichnis passiert, können die Dateien lokal gespeichert, optimiert und wieder auf den Server gestellt werden.

Here is an example

13

würde ich für Ordner gehen. Mehr Flexibilität, wenn Sie keinen Speicherplatz mehr haben (einfach auf einen anderen Datenträger verschieben und neu ausrichten), mehr Flexibilität mit anderen Apps (zB Silverlight). Ich würde die DB nur für Dateien verwenden, die sicher sein müssen.

+1

Was meinst du mit "sicher" in Bezug auf ihre Speicherung in der DB? – IrishChieftain

+2

Angenommen, Ihre Datenbank ist effektiv gesichert, bietet sie eine zusätzliche Schicht. Angreifer muss identifizieren Bilder in SQL gespeichert sind, identifizieren Server, Benutzername/Passwort, Tabelle. Ein einfaches Scannen eines Dateisystems auf einem kompromittierten Computer führt nicht zu Ergebnissen, und eine schlecht geschriebene Website stellt keine Dateien über HTTP-Anfragetechniken zur Verfügung (z. B. das Herunterladen von Dateien). Funktioniert noch besser, wenn sich der SQL Server auf einem separaten Rechner/Netzwerk befindet. –

3

Der Ansatz, den ich hauptsächlich verwende, besteht darin, Bilder in einen Ordner zu kopieren und die relativen URLs in der Datenbank zu behalten. Der Nachteil dieses Ansatzes besteht darin, dass, wenn jemand die Bilder löscht, auf Ihren Webseiten "Bild nicht gefunden" angezeigt wird, es sei denn, Sie überprüfen jedes Mal, wenn Sie eine Seite rendern.

2

Ich hatte die gleiche Frage für meine Website auch. Ich habe mich entschieden, die Ordner-Implementierung zu verwenden, denn wenn Sie die Datenbank verwenden, wenn Sie nur die Bilder sichern möchten, sollten Sie die gesamte Datenbank sichern ... auf der anderen Seite können Sie die Verzeichnisstruktur beibehalten und ein einfaches Backup erstellen .

Separate Dinge mein Freund, mit freundlichen Grüßen!

5

Für jede normale Website möchten Sie dies unbedingt als Teil der Website-App selbst, nicht in einer DB gespeichert. Eine Website sollte so weit wie möglich eigenständig sein, um sie portabel zu halten, und das Hinzufügen von Rundreisen zur DB (selbst wenn Zwischenspeichern) kann nur eine gute Sache sein. Webserver sind sehr gut bei Bilddateien.

Ich arbeite jedoch persönlich an einer App, bei der die Bilder dynamisch erstellt und über eine zweite Verwaltungsanwendung der Site zur Verfügung gestellt werden. Natürlich müssen diese in irgendeiner Form DB-gesichert sein, um die Bilder wartbar und sicher zu halten.

Kurz gesagt, wo die Bilder einen geschäftlichen Wert haben (d. H. Sie sind Inhalt, sie brauchen Sicherheit oder sie sind dynamisch), müssen Sie sie in einer Datenbank speichern. Wo sie statisch und trivial sind, sei die Website eine Website.

+0

Wenn sie dynamisch erstellt werden, warum sollten sie überhaupt gespeichert werden? –

+1

zur Wiederverwendung - es ist viel billiger, ein vorhandenes Bild zu verwenden, als jedes Mal das gleiche Bild zu erstellen – annakata

1

Der Vorteil der Verwendung von Ordnern besteht darin, dass Sie keinen benutzerdefinierten Handler benötigen, der diese BLOBs aus einer Datenbank holt und in reguläre Streams umwandelt. Es ist auch einfacher, sie von verschiedenen Standorten aus zu hosten, und Sie vermeiden die Belastung des Datenbankservers.

Sie müssen beim Speichern der Pfadnamen vorsichtig sein. Relative Pfadnamen funktionieren besser als URLs und ermöglichen Ihnen eine gewisse Flexibilität und Skalierung, wo Sie sie speichern, wie Sie sie bereitstellen und so weiter.

0

Ich werde für beide gehen.

Speichern Sie zunächst jedes Bild als BLOB-Spalte in der Datenbank. Auf diese Weise können Sie sicher sein, dass das Image immer in Ihrer Datenbanksicherung enthalten ist (vorausgesetzt, Sie tun dies).

Zweitens, kopieren Sie die Datei in den Ordner. Auf diese Weise können Sie vermeiden, die Datenbank (für die Image-Datei) jedes Mal abzufragen. allein kann Auswirkungen haben wie

  • Datei verloren in Ordner zu speichern aufgrund Platten
  • Datei enthalten sind, nicht in Sicherungsoperation

Bisher alle unsere Kundenprojekte nehmen den gleichen Ansatz beschädigt und Wir haben verschiedene Probleme festgestellt, aber keine hochgeladenen Dateien sind verloren. (Wir sprechen von> 100 GB hochgeladenen Dokumenten).

Hinweis, können Sie unter der folgenden aussehen wollen:

  1. Stellen Sie sicher, dass, wenn die Datei aktualisiert wird/ersetzen, tun Sie es sowohl auf Datenbank- und Ordner. Andernfalls wird es inkonsistent sein.
  2. Möglicherweise möchten Sie eine separate Tabelle zum Speichern der Dateiinformationen haben. In der Regel möchten Sie möglicherweise Folgendes speichern: (1) Dateiname (2) Dateityp (3) Dateigröße/MIME-Typ
  3. Sie können die Tabellen, die Daten speichern, aufteilen. Unsere Praxis ist, sobald der Tisch 2GB erreicht, erstellen wir einen anderen Tisch. Konzipiert richtig, sollte es kein Problem geben, den richtigen Tisch zu finden.

Hoffe, das hilft.

4

Zwei Gedanken dazu:

  1. das Dateisystem verwenden. Aber stellen Sie sicher, dass Sie Ihr Schema so gut entwerfen, dass ein Ordner nicht mit Bildern überladen ist und es zu einem Alptraum wird, ihn zu verwalten. Zum Beispiel können Sie es mit ersten oder letzten Buchstaben des Bezeichners oder einer nachfolgenden Positionsnotation abstecken. Ihr Kilometerstand wird variieren, also stellen Sie sicher, dass das Schema zu Ihrer Datensatzgröße passt. Keine Notwendigkeit, zu detaillierten Längen zu gehen, wenn Sie nur, sagen wir, 20 Bilder verwalten.

  2. Verwenden Sie SQL Server 2008. Es hat einen neuen Datentyp namens filestream, während die Bilder im Dateisystem gespeichert werden, Sie aber über Standard-Datenbankabfragen abrufen können. Weitere Informationen finden Sie unter http://msdn.microsoft.com/en-us/library/cc949109.aspx.

Diese sind nicht exklusive Auswahl, aber zumindest würde ich Option # 1 für die schiere Tatsache wird empfohlen, anstatt die Speicherung eines bessere Leistung aus einem Dateisystem-basierten-Schemas der Verwendung erhalten werden und Blobs aus einer Datenbank lesen.

4

denke ich Bilder in Systemordner Speichern der beste Weg ist.
arbeiten mit DB und Abfragen, die Sie wissen, wird einige Überlastungen verursachen und DB Transanktionen sind in der Regel schwer und es kann mehr Stress auf Ihrem Server.
mit der Art und Weise, wie Sie Bilder in Ordnern speichern und nur URLs in DB setzen, ist es besser für Ihre App geladen.
aber der Vorteil von DB ist, dass Sie Ihre Bilder sichern können.


Mein Vorschlag: Speichern Sie Ihre Bilder in Ordnern. Sie müssen nur über System-E/A-Vorgänge informiert werden.

2

AFAIK, Flickr.com geht mit Ordnern/Dateiserver auch mit der Referenz, Metadaten, etc in db gespeichert. Siehe flickr architecture

Verwandte Themen