Frage

  

Mögliche Duplizieren:
   hochgeladenen Fotos und Dokumente zu speichern - Dateisystem vs Datenbank blob

Ich beginne eine Web-App, die in erster Linie der Entwicklung ist es, Fotos anzuzeigen. Die Benutzer werden in der Lage sein, um Fotos zu als auch.

Die erste Frage, die aufkam war, wo die Fotos zu speichern. Auf dem Dateisystem oder die Datenbank

Ich werde einen Windows-Rechner werden mit der Website zu hosten. Die Datenbank ist MySQL und der Back-End-Code ist in C # unter Verwendung von ASP.NET MVC.

War es hilfreich?

Lösung

Dateisystem, natürlich, wenn Sie für eine Geschichte auf thedailywtf sind mit dem Ziel. Der einfachste Weg ist es, die Fotos von einem Objekt organisiert haben Sie aus der Datei selbst, wie sein SHA-1-Hash ableiten können. Dann speichern Sie einfach den Hash in der Datenbank, die an das Foto des Primärschlüssel und andere Attribute (die es hochgeladen, Upload-Datum usw.).

Es ist auch eine gute Idee, die Fotos auf dem Dateisystem divvy, so dass Sie Millionen von Dateien in einem einzigen Verzeichnis am Ende nicht mit. So können Sie etwas davon haben werden:

storage/00/e4/f56c0de1c61fdb926e79e8a0a65bd12930c9.jpg
storage/25/9a/ec1c55bfb660548a6770238668c4b117d92f.jpg
storage/5d/d5/4b01d98f17a9ad9dd1526b49ba39b5aa37a1.jpg
storage/63/49/6f740b6c284ce6685dc17d473a7360ace249.jpg
storage/b1/75/066d178188dde110149a8422ab651b0ee615.jpg
storage/b1/20/a2b7d02b7b0c43530677ab06235382a37e20.jpg
storage/da/39/a3ee5e6b4b0d3255bfef95601890afd80709.jpg

Dies ist auch einfach zu portieren, wenn Sie jemals zu sharded Speicher verschieben.

Andere Tipps

Wenn Sie SQL Server 2008 verwenden gibt es einen Filestream-Datentyp, dass Griffe der meisten der genannten Probleme über die DB immer größer. Es kümmert sich um alle lästigen Details zwischen dem Dateisystem und der Tabelle synchronisiert wird.

Sehen Sie hier für eine Blog-Post über das Thema: speichern alle Daten in SQL Server 2008 (Katmai)

Wenn Sie eine Webseite um Bilder Gebäude vergessen dann die Datenbank. Wenn es populär geworden, wird Ihre Datenbank wird zu hart getroffen und die Mehrheit seiner Zeit liefert Fotos ausgegeben werden. Auch Datenbanken nicht sehr gut skalieren. Es gibt so viel mehr Vorteile sie auf dem Dateisystem zu halten. Und Sie können sehr gut skalieren, statische Content-Server mit, Dienstleistungen für Content-Delivery verwendet wird.

Auch Amazon S3 oder andere Cloud-Anbieter haben ihre Vorteile. Zum Beispiel S3 + wird Amazon Cloudfront eine gute Leistung bieten. Cloudfront-Caches Ihre Dateien auf Servern auf der ganzen Welt, so dass sie sehr leicht / schnell von überall zugänglich sein werden. Aber wenn wir Bilder reden und die Seite wird immer beliebter Ihre Rechnungen könnten recht hoch sein.

Für S3 Amazon Gebühren pro Lagerung und pro Transfer in / aus der Wolke. Für Cloudfront pro Transfer .

Im Allgemeinen speichern Menschen binäre Daten wie Bilder auf dem Dateisystem, nicht die Datenbank. Sie verweisen auf den Dateisystem-Pfad aus der Datenbank. Abrufen von BLOBs (Binary Large Objects) aus der Datenbank ist langsamer als so dass der Web-Server statische Dateien aus dem Dateisystem dienen.

würde ich so etwas wie Amazon S3 verwenden.

Aber, wenn die Wahl zwischen Dateisystem und Datenbank würde ich Dateisystem wählen, weil es schneller ist auf Server-Images von einem Dateisystem als eine Datenbank.

Der einzige Grund würde ich Fotos setzen als BLOBs in einer Datenbank wäre, wenn ich einen Cluster von Servern hatte, und ich war mit der Datenbankreplikation, um automatisch die Fotos zu jeder Maschine im Cluster kopiert werden.

Das Leben ist viel einfacher, wenn Sie nur die Fotos als Dateien speichern, und speichern Sie die Dateinamen der Fotos in der Datenbank. Wenn Sie eindeutige Dateinamen für die Fotos erstellen, dann können Sie einen Primärschlüssel ganze Zahl aus der Datenbank als Teil des Dateinamen verwenden. Aber man könnte auch einfach einen Hash des Fotos selbst, wie von John Milliken vorgeschlagen. Das ist einfach und einfach besser.

Punkt Einige Leute heraus, dass es einfacher zu verwalten, wenn alles in der Datenbank ist: inkl. Erstellung von Backups und referentielle Integrität zu bewahren

Wenn Sie es in db speichern, wird der db schnell wachsen und wird viel, viel größer. Es ist nur ein Hauch komplizierte mehr ein Bild von db für die Anzeige zu erhalten dann, um sie aus einem Dateisystem zu erhalten sind. Auf der anderen Seite, sollten Sie besser stellen Sie sicher, dass die Dateinamen und Pfade erhielten heraus nicht mehr synchron mit dem, was in db gespeichert wird. In der Vergangenheit habe ich zum Speichern auf der Festplatte gewählt statt db. Das machte es leichter für mich, um die Datenbank zu verschiedenen Box tun bewegen. Hat gut funktioniert.

Wir hatten eine ähnliche Entscheidung für ein Projekt zu machen, ich bin auf. Die überzeugende Sache über Sachen Jamming (Bilder und andere Bloby Dinge) in die DB ist, dass es weniger wahrscheinlich ist, dass jemand könnte / Alter etwas löscht (entweder absichtlich oder unabsichtlich). Aber das ist nicht die Wahl, die wir gemacht. Stattdessen haben wir den Pfad Info im DB gespeichert und verwendet die Daten über UNC-Pfad zu verweisen. Datenpfade sind in zwei Teilen gespeichert, - ein Teil, die Referenzen der Ort der Daten relativ zu der Maschine es sich auf und ein Teil, die Punkte, auf der Maschine, die Gruppe von Daten ist. Wenn wir brauchen, um Daten bewegen wir die entsprechenden Pfad Informationen zu aktualisieren.

Es ist sicherlich schnell die Daten zu bekommen, ohne von der DB herausziehen. Letzten Endes, das war ein wichtiger Entscheidungsfaktor.

Es macht das Leben so einfach, wenn man eine Blob-Datenbank. Sie sollten über den Alptraum vergessen, die Dateisystemverwaltung ist.

Bearbeiten

ID
VARBINARY

Aus Erfahrung ist dies eine effiziente Möglichkeit, binäre Dateien zu verwalten. Sie haben eine Datenbank, die nur binäre Dateien. Wie kann das Backup härter sein?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top