Speichern einer kleinen Anzahl von Bildern: Blob oder fs?

8

Ich füge meiner Website einige Funktionen hinzu, damit Benutzer ihre eigenen Profilbilder hochladen können, also fragte ich mich, ob ich sie als BLOB in der Datenbank speichern oder in das Dateisystem einfügen soll.

Ich habe eine ähnliche Frage hier gefunden: Speichern von Bildern in DB: Ja oder Nay , aber die Antworten waren eher auf Menschen ausgerichtet, die viele, viele tausend oder sogar Millionen von Bildern erwarten, während ich eher auf kleine Bilder (JPEGs bis zu 150x150 Pixel) und kleine Zahlen von ihnen bedacht bin: vielleicht bis zu ein oder zweitausend.

Was sind die Gefühle über DB BLOB vs Dateisystem für dieses Szenario? Wie gehen Clients mit Zwischenspeichern von Bildern aus der DB vs aus dem Dateisystem?

Wenn BLOBs, die in der Datenbank gespeichert sind, der richtige Weg sind - sollte ich etwas über wo wissen, um sie zu speichern? Da ich mir vorstelle, dass ein Großteil meiner Benutzer kein Bild hochladen wird, sollte ich eine user_pics -Tabelle erstellen, um (extern) bei Bedarf zur normalen Tabelle users zu gelangen?

Bearbeiten: Ich öffne diese Frage erneut, weil nicht ein Duplikat der beiden ist, mit denen Sie verknüpft sind. Diese Frage bezieht sich speziell auf die Vor- / Nachteile der Verwendung einer DB oder FS für eine kleine Anzahl von Bildern. Wie ich bereits sagte, richtet sich die andere Frage an Menschen, die Tausende und Abertausende großer Bilder speichern müssen.

    
nickf 28.11.2008, 06:02
quelle

7 Antworten

7

Um Teile Ihrer Frage zu beantworten:

  

Wie gehen Clients mit dem Zwischenspeichern von Images von der DB vs von dem Dateisystem?

Für eine Datenbank: Haben Sie ein last_modified-Feld in Ihrer Datenbank. Verwenden Sie den Last-Modified HTTP-Header, damit der Browser des Clients ordnungsgemäß zwischenspeichern kann. Stellen Sie sicher, dass Sie die entsprechenden Antworten senden, wenn der Browser ein Bild "if neuere" anfordert (kann nicht aufgerufen werden, wie es heißt; ein HTTP-Anfrage-Header).

Für ein Dateisystem: Machen Sie dasselbe, aber mit der geänderten Zeit der Datei.

  

Wenn BLOBs, die in der Datenbank gespeichert sind, der richtige Weg sind - sollte ich irgendetwas darüber wissen, wo ich sie speichern kann? Da ich mir vorstelle, dass ein Großteil meiner Benutzer kein Bild hochladen wird, sollte ich eine user_pics-Tabelle erstellen, um bei Bedarf die (externe) Verknüpfung zur regulären Benutzertabelle zu erstellen?

Ich würde das BLOB und verwandte Metadaten in eine eigene Tabelle einfügen, mit einer Art Beziehung zwischen ihm und Ihrer Benutzertabelle. Dadurch wird es einfacher, die Tabellenspeichermethode für Ihre Daten zu optimieren, die Dinge übersichtlicher zu gestalten und Spielraum für Erweiterbarkeit zu lassen (z. B. eine allgemeine "Datei" -Tabelle).

    
strager 28.11.2008, 06:14
quelle
1

Ich hatte einmal eine ähnliche Frage mit einem kleinen DMS für PDF-Dateien. Das Szenario war anders als bei Ihnen: Maximal 100 Dateien mit Größen von jeweils bis zu 10 MB - nicht das, was Sie für Profilbilder erwarten. Aber die Antwort, die mir ein Freund damals gegeben hat, gilt auch für Ihren Fall:

  

Verwenden Sie jedes Speichersystem für die Zwecke, für die es vorgesehen ist.

     

Speichern Sie Daten in einer Datenbank . Speichern Sie Dateien in einem Dateisystem .

Dies ist nicht die ultimative Antwort (*), aber es ist eine gute Faustregel für Anfänger.

Ich habe nie gehört, dass Windows FS langsam und manchmal unzuverlässig ist, wie Aaron Digulla in seiner Antwort feststellt. Wenn es solche Probleme gibt, muss dies sicherlich berücksichtigt werden. Aber für Avatarbilder fällt mir das nicht so wichtig auf.

(*) Ich weiß, ich weiß, 42 ...

    
Treb 28.11.2008 08:37
quelle
0

Was wäre bequemer, aus der Perspektive, sie zu bedienen, den Code zu schreiben, um sie zu bedienen, Backup-Prozeduren usw.? Sie wollen die richtige Antwort für Sie, nicht die richtige Antwort für jemand anderen.

    
ysth 28.11.2008 06:05
quelle
0

Aus meiner Sicht sollte alles, was außerhalb der Datenbank bleibt, draußen bleiben. Es kann sich um Dateisystem oder separate Tabellen handeln, die Sie nicht täglich replizieren oder sichern. Es macht die Datenbank viel leichter, es wird langsamer und einfacher zu verstehen und zu pflegen.

Wenn Sie auf MSSQL sind, stellen Sie sicher, dass Blobs in einer separaten Datendatei gespeichert sind. Nicht in PRIMARY wie alles andere.

    
Din 28.11.2008 06:57
quelle
0

Tragen Sie unter Windows so viel wie möglich in die Datenbank ein. Das Dateisystem ist etwas langsam und manchmal sogar unzuverlässig.

Unter Linux haben Sie mehr Optionen. Hier sollten Sie überlegen, große Dateien in ein Dateisystem zu verschieben und den Namen in der Datenbank zu behalten. Wenn Sie ein modernes Dateisystem wie Ext3 oder ReiseFS verwenden, können Sie sogar viele kleine Dateien mit ziemlich guter Leistung erstellen.

Sie müssen auch berücksichtigen, wie Sie auf die Daten zugreifen können. Wenn Sie alles in der DB haben, haben Sie einen Zugriffspfad, brauchen sich keine Sorgen um einen anderen Satz von Berechtigungen zu machen, aber Sie müssen mit der zusätzlichen Komplexität des Lesens / Schreibens von BLOBs fertig werden. In vielen DBs können BLOBs nicht durchsucht werden.

Im Dateisystem können Sie andere Tools auf Ihren Daten ausführen, was nicht möglich ist, wenn die Dateien in einer Datenbank gespeichert sind.

    
Aaron Digulla 28.11.2008 08:08
quelle
0

Ich würde sie in der Datenbank speichern:

  1. Die Sicherung / Wiederherstellung ist einfach (wenn Sie Dateien und auch die Datenbank sichern, ist die Wiederherstellung nach einem bestimmten Zeitpunkt komplizierter)
  2. Transaktionen in der Datenbank bedeuten, dass Sie niemals auf einen Dateinamen zeigen sollten, der nicht da ist
  3. Weniger Chancen, dass jemand eine hinterhältige Methode findet, ein Skript über einen zwielichtigen Image-Upload-Hack auf deinen Server zu stellen.

Da Sie über eine kleine Anzahl von Bildern sprechen, sollte die Benutzerfreundlichkeit / Verwaltung Vorrang vor Leistungsproblemen haben, die in den verknüpften Fragen diskutiert werden.

    
WW. 15.02.2009 22:39
quelle
0

Ich denke, es gibt einen Managability-Vorteil, der sie in der Datenbank speichert; Sie können mit den anderen Daten konsistent gesichert und wiederhergestellt werden - Sie werden nicht vergessen, veraltete zu löschen (naja, Sie könnten es, aber es ist ein wenig weniger wahrscheinlich), und wenn Sie die Datenbank auf einen anderen Computer migrieren, gehen die Bilder mit es.

    
MarkR 15.02.2009 23:00
quelle

Tags und Links