Frage

Hinweis: Lassen Sie mich wissen, ob diese Frage besser für serverfault.com geeignet ist


Ich möchte Informationen über Musik speichern, und zwar:

  • Genres
  • Künstler
  • Alben
  • Lieder

Diese Informationen werden in einer Web-Anwendung verwendet werden, und ich mag Menschen in der Lage sein, alle Songs auf ein Album verbunden ist, um zu sehen, und Alben zu einem Künstler verbunden und Künstler zu einem Genre zugeordnet ist.

Ich bin derzeit MySQL verwenden, aber bevor ich eine Entscheidung treffen, ich wechseln will wissen:

  1. Wie einfach ist die Skalierung horizontal?
  2. Ist es einfacher zu verwalten als eine SQL-basierte Lösung?
  3. würde die oben genannten Daten Ich mag zu hart speichern zu tun Schema frei?
  4. Wenn ich denke, Verein, habe ich sofort RDBMS denken; können die Daten in so etwas wie CouchDB gespeichert werden, aber immer noch eine Art von Assoziation haben, wie oben angegeben?
  5. My Web-Anwendung erfordert die Replikation, wie gut funktioniert CouchDB oder andere damit umgehen?
War es hilfreich?

Lösung

Diese Art von Informationen ist ideal geeignet, um Dokumentendatenbanken. Wie viele Daten der realen Welt, ist es nicht von Natur aus relationalen, so Schuh-Horning in ein relationales Schema Kopfschmerzen auf der ganzen Linie bringen (auch mit Hilfe eines ORM - ich spreche aus Erfahrung). Ubuntu bereits verwendet CouchDB für die Speicherung von Musik-Metadaten, sowie andere Dinge, in dem Ein Produkt .

Unter dem Rest Ihrer Fragen one-by-one:

  1. Horizontale Skalierung WAY einfacher als mit RDBMS. Dies ist einer der vielen Gründe, große Sites wie Facebook, Digg und LinkedIn verwenden oder untersuchen aktiv, Schema-weniger-Datenbanken. Zum Beispiel Sharding (Ihre Daten über verschiedene Knoten in einem System, Dividieren) funktioniert wunderbar dank einem Konzept namens Eventual Consistency ; das heißt, können die Daten über den Knoten für eine Weile inkonsequent sein, aber es wird schließlich entschlossen in einen konsistenten Zustand.
  2. Es hängt davon ab, was Sie unter „Verwaltung“ ... Installation im Allgemeinen schnell und einfach abzuschließen. Es sind keine Benutzerkonten konfigurieren und sicher (dies stattdessen in der Business-Logik-Schicht der Anwendung der Regel der Fall ist). Das Arbeiten mit einem Dokument DB in Echtzeit kann interessant sein: Es gibt keine Ad-hoc-Abfragen in CouchDB, zum Beispiel; müssen Sie den Futon UI oder mit ihm kommunizieren über HTTP-Anfragen verwenden. MongoDB, unterstützt allerdings Ad-hoc-Abfragen.
  3. Ich sollte nicht so denken. Bastien Antwort liefert ein gutes Beispiel für ein JSON-Dokument Serialisierung einige Daten. Die Schönheit der schemaless DBs ist, dass Felder können aus einem Dokument und in einem anderen fehlt, oder die Dokumente vollständig voneinander verschieden sein. Dies beseitigt viele der Probleme mit RDBMS‘null Wert, die zahlreich und vielfältig sind.
  4. Ja; die Verbände werden als verschachtelte Dokumente gespeichert, die als Objektreferenzen in Ihrer Anwendung analysiert werden, Sammlungen usw. In Bastien Antwort, die „Lieder“ Schlüssel identifiziert eine Reihe von Song-Dokumenten.
  5. Dies ist sehr ähnlich zu Ihrer ersten Frage um die horizontale Skalierung (horizontale Skalierung und Replikation sind miteinander verflochten). Da die CouchIO Post Bastien Blog Staaten erwähnt, „Replikation: ... wurde in CouchDB von Anfang an gebacken.“. Mein Verständnis ist, dass alles Dokument Datenbanken verarbeitet Replikation gut und tut so leichter, als es ist es in einem RDBMS einzurichten.

Haben Sie sich zu entscheiden, die Song-Datei selbst zusammen mit den Metadaten speichern wollten, Sie das auch in CouchDB tun könnte, indem die Song-Datei als Anhang zu dem Dokument zu liefern; mehr weiter, würden Sie haben kein Schema Inkonsistenzen als Ergebnis nicht, dies zu tun, denn es gibt kein Schema ist!

Ich hoffe, ich habe nicht zu viele Fehltritte hier gemacht; Ich bin ganz neu in Dokument DBs ich.

Andere Tipps

Ihre Daten scheint ideal für Dokument orientierte Datenbanken.
Document Beispiel:
{
"type":"Album",
"artist":"ArtistName",
"album_name":"AlbumName",
"songs" : [
{"title":"SongTitle","duration":4.5}
],
"genres":["rock","indie"]
}

Und Replikation eines von CouchDB coolsten Features ( http://blog.couch.io/post/468392274/whats-new-in-apache-couchdb-0-11-part-three-new )
Vielleicht haben Sie auch einen Blick auf Riak wollen nehmen.

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