2010-02-17 8 views
14

Unsere Anwendung wird eine große Anzahl von kleinen Bildern in Thumbnail-Größe (ca. 6-12 KB groß) über HTTP bereitstellen. Ich wurde gebeten zu untersuchen, ob die Verwendung eines NoSQL-Datenspeichers eine praktikable Lösung für die Datenspeicherung ist. Idealerweise möchten wir, dass unser Datenspeicher fehleranfällig und verteilt ist.Speichern von Bildern in NoSQL-Speichern

Ist es eine gute Idee, Blobs in NoSQL-Stores zu speichern, und welche ist dafür gut? Ist NoSQL auch eine gute Lösung für unser Problem, oder wären wir besser darin, die Bilder im Dateisystem zu speichern und direkt vom Webserver aus zu bedienen (CDN ist derzeit für uns keine Option)?

Antwort

9

Mongo DB sollte gut für Sie arbeiten. Ich habe es noch nicht für Blobs benutzt, aber hier ist ein nettes FLOSS Weekly podcast interview with Michael Dirolf vom Mongo DB Team, wo er diesen Anwendungsfall anspricht.

+0

Danke, ich überprüfe es –

+0

Sie können die ersten 13 Minuten dieses Podcast überspringen :) –

8

Ob Bilder in einer DB oder im Dateisystem gespeichert werden sollen, ist manchmal eine dieser Debatten des "Heiligen Krieges"; Jede Seite fühlt, dass ihre Art, Dinge zu tun, der richtige Weg ist. Allgemein gilt:

in der DB zu speichern:

  • einfacher zu verwalten Back-up/replizieren alles auf einmal in einmal Platz.
  • Hilft bei der Datenkonsistenz und -integrität. Sie können das BLOB-Feld so einstellen, dass NULL nicht zulässig ist, aber Sie können nicht verhindern, dass eine externe Datei gelöscht wird. (Dies gilt jedoch nicht für NoSQL, da es keine traditionellen Einschränkungen gibt).

im Dateisystem zu speichern:

  • Ein Dateisystem entworfen wird, um Dateien zu dienen. Lass es seine Arbeit machen.
  • Die DB ist oft Ihr Flaschenhals in einer Anwendung. Welche Last Sie auch immer nehmen können, desto besser.
  • Einfacher auf einem CDN zu dienen (die Sie erwähnt, ist nicht in Ihrer Situation anwendbar).

Ich neige dazu, auf der Seite des Dateisystems zu kommen, weil es viel besser skaliert. Aber abhängig von der Größe Ihres Projekts wird eine der beiden Optionen wahrscheinlich gut funktionieren. Mit NoSQL sind die Unterschiede noch weniger offensichtlich.

+2

Die Frage ist über das Speichern von Blobs in einem verteilten Schlüssel-Wert-Speicher. Ein Dateisystem ist nicht fehlertolerant oder verteilt, so dass es keinen Vergleich gibt. –

+2

Je nach Dateisystem kann es sowohl fehlertolerant als auch verteilt sein - siehe Dinge wie MogileFS, Hadoop DFS, GlusterFS. –

+1

Dies sind nicht ganz Dateisysteme. –

3

Nun CDN wäre die offensichtliche Wahl. Da das raus ist, würde ich sagen, dass Ihre beste Wette für Fehlertoleranz und Lastenausgleich Ihr eigenes privates Rechenzentrum (was auch immer das für Sie bedeutet) hinter 2 oder mehr Load Balancern wie einem F5 ist. Dies wird Ihr leichtestes Verwaltungssystem sein und Sie können so viel Fehlertoleranz erhalten, wie es Ihr Hardware-Budget erlaubt. Sie brauchen keine neue Software-Expertise, nur XCOPY.

Für eine echte Fehlertoleranz benötigen Sie eine geografische Verteilung, oder Sie sind jedem mit einem Tieflöffelbagger ausgesetzt.

(Gravatars?)

+1

CDN plus eine NoSQL db als Ursprung ist eine großartige Kombination. Ich habe das ein paar Mal mit MongoDB (und seinem GridFS-Modul) erfolgreich gesehen. –

2

Wenn Sie in einer Python-Umgebung, sollten Sie die y_serial Moduls sind: http://yserial.sourceforge.net/

In weniger als 10 Minuten, können Sie Ihre Bilder speichern und darauf zugreifen (in der Tat, jede beliebiges Python-Objekt einschließlich Webseiten) - in komprimierter Form; NoSQL.

3

Ich suchte nach einer ähnlichen Lösung für ein persönliches Projekt und stieß auf , die für mich scheint eine erstaunliche Lösung für dieses Problem. Grundsätzlich verteilt es eine bestimmte Anzahl von Kopien jeder Datei an die Server im Netzwerk. Es ist so konzipiert, dass ein Server kommen oder gehen ist keine große Sache. Alle Kopien auf einem Server, der verlässt, werden unter den anderen verteilt.

Mit der richtigen Konfiguration kann Riak mit dem Absturz eines gesamten Rechenzentrums fertig werden.

Oh, und es hat kommerzielle Unterstützung zur Verfügung.