Frage

Ich füge an meiner Seite einige Funktionen, so dass Benutzer ihre eigenen Profilbilder hochladen, so dass ich mich gefragt, ob sie in der Datenbank speichern als BLOB oder sie im Dateisystem setzen.

fand ich eine Frage ähnlich wie diese hier: Speichern von Bildern in DB: Ja oder Nay , aber die Antworten gegeben wurden mehr gegenüber den Menschen ausgerichtet viele, viele tausende oder sogar Millionen von Bildern erwartet, während ich mehr Sorgen um kleine Bilder (JPEGs bis zu vielleicht 150x150 Pixel) bin, und eine kleine Anzahl von ihnen: vielleicht bis zu ein- oder zweitausend.

Was sind die Gefühle über DB BLOB vs Dateisystem für dieses Szenario? Wie gehen Kunden mit Caching-Bildern aus der DB vs aus dem Dateisystem?

Wenn in der DB gespeichert BLOBs sind der Weg zu gehen - ist es etwas, das ich wissen sollte über mit um sie zu speichern? Da ich, dass eine Mehrheit meiner Benutzer vorstellen, wird kein Bild werden Hochladen, sollte ich eine user_pics Tabelle (äußeren) erstellen, um den regulären users Tisch kommen, wenn nötig?


Edit: Ich bin diese Frage der Wiedereröffnung, denn es ist nicht ein Duplikat der beiden letztgenannten Ihnen verbunden. Diese Frage ist insbesondere über die Vor / Nachteile einer DB oder FS für eine kleine Anzahl von Bildern verwenden. Wie ich oben sagte, ist die andere Frage gegenüber den Menschen ausgerichtet, die Tausende und Abertausende von großen Bildern.

speichern müssen
War es hilfreich?

Lösung

Um Teile Ihrer Frage zu beantworten:

  

Wie Kunden gehen mit Caching-Bildern aus der DB vs aus dem Dateisystem?

Für eine Datenbank: Haben Sie eine last_modified Feld in Ihrer Datenbank. Verwenden Sie die Last-Modified-HTTP-Header so den Browser richtig kann der Client-Cache. Achten Sie darauf, die entsprechenden Antworten zu senden, wenn der Browser für ein Bild anfordert „wenn neuere“ (kann mich nicht erinnern, was es heißt, einen HTTP-Request-Header).

Für ein Dateisystem. Machen Sie dasselbe, aber mit der modifizierten Zeit der Datei

  

Wenn BLOBs in der DB gespeichert sind der Weg zu gehen - ist es etwas, was ich wissen sollte über, wo sie gespeichert werden? Da ich, dass eine Mehrheit meiner Benutzer vorstellen, wird kein Bild werden Hochladen, sollte ich eine user_pics Tabelle (äußeren) erstellen, um den regulären Benutzer Tisch sitzen, wenn nötig?

würde ich die BLOB und zugehörige Metadaten in einem eigenen Tisch, mit irgendeiner Art von Beziehung zwischen ihm und Ihrer Benutzertabelle. machen Dadurch wird es einfacher, den Tabellenspeichermethode für Ihre Daten zu optimieren, macht die Dinge aufgeräumter und lässt Raum für Erweiterbarkeit (zum Beispiel eine allgemeine „Dateien“ Tabelle).

Andere Tipps

ich konfrontiert einmal eine ähnliche Frage mit einem kleinen DMS für PDF-Dateien. Das Szenario war anders verkaufen: Es kann maximal 100 sein können Dateien mit einer Größe von bis zu 10 MB je - nicht das, was Sie für Profilbilder erwarten. Aber die Antwort ist ein Freund gab mir damals gilt für Ihren Fall auch:

  

Mit jedem Speichersystem für das, was es konzipiert ist zu tun.

     

Speichern Daten in Datenbank . Shop Dateien in Dateisystem .

Dies ist nicht die ultimative Antwort (*), aber es ist eine gute Daumenregel für den Anfang.

Ich habe noch nie von der Windows-FS ist langsam und manchmal unzuverlässig hörte, wie Aaron Digulla in seiner Antwort erklärt. Wenn es solche Probleme gibt, dies muss sicherlich einkalkuliert werden. Aber für Avatar-Bilder, ist es mir nicht so wichtig schlagen.

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

Was aus der Perspektive sie dienen würde, schreiben Sie den Code bequemer, um ihnen zu dienen, Sicherungsverfahren, usw.? Sie wollen die richtige Antwort für Sie, nicht die richtige Antwort für jemand anderen.

Aus meiner Sicht alles, was außerhalb der Datenbank gelassen werden soll draußen bleiben. Es kann Dateisystem oder getrennte Tabellen sein, die Sie nicht jeden Tag replizieren oder Backup. Es macht Datenbank viel leichter, es wächst langsamer und es leichter zu verstehen und zu warten.

Wenn Sie auf MSSQL sind sicher, dass Blobs in separater Datendatei gespeichert werden. Nicht in die Primär- als alles andere.

Unter Windows setzen, so viel wie möglich in der Datenbank. Das Dateisystem ist etwas langsam und manchmal sogar unzuverlässig.

Unter Linux haben Sie mehr Möglichkeiten. Hier sollten Sie große Dateien in einem Dateisystem in Erwägung ziehen und halten Sie einfach den Namen in der DB. Wenn Sie ein modernes Dateisystem wie Ext3 oder ReiseFS verwenden, können Sie sogar mit ziemlich guter Leistung viele kleine Dateien erstellen.

Sie müssen auch berücksichtigen, wie Sie auf die Daten zugreifen können. Wenn Sie alles in der DB haben, haben Sie ein Zugriffspfad, brauchen sich nicht um einen anderen Satz von Berechtigungen zu sorgen, aber Sie haben mit der zusätzlichen Komplexität der Lese- / Schreib BLOBs beschäftigen. In vielen DBs, BLOBs können nicht durchsucht werden.

Auf dem Dateisystem, können Sie andere Tools auf Ihren Daten ausführen, die nicht möglich ist, wenn die Dateien in einem DB gespeichert werden.

Ich würde sie in der Datenbank gespeichert werden:

  1. Backup / Restore ist einfach (wenn Sie Backup-Dateien und auch die Datenbank, Point-in-Time-Recovery ist komplizierter)
  2. Transaktionen in der db bedeuten sollten Sie nie auf einen Dateinamen zeigt am Ende, das nicht da ist
  3. Weniger Chance jemand geht eine hinterhältige Art und Weise ein Skript auf Ihren Server über eine zweifelhafte Bild, um herauszufinden, von Putten Upload Hack

Da Sie über eine kleine Anzahl von Bildern sprechen, einfachen Bedienung / Administration Vorzug vor Performance-Problemen nehmen soll, die in den verknüpften Fragen diskutiert werden.

Ich denke, es ist ein Verwaltbarkeit Vorteil sie in der Datenbank zu speichern; sie können mit anderen Daten gesichert und wiederhergestellt konsequent sein - Sie werden nicht obsolet diejenigen löschen vergessen (na ja, man könnte, aber es ist ein bisschen weniger wahrscheinlich), und wenn Sie die Datenbank auf einem anderen Rechner zu migrieren, die Bilder gehen mit es.

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