Domanda

Disclaimer: fatemi sapere se questa domanda è più adatto per serverfault.com


Voglio per memorizzare le informazioni sulla musica, in particolare:

  • generi
  • artisti
  • Album
  • canzoni

Queste informazioni saranno utilizzati in un'applicazione web, e voglio le persone a essere in grado di vedere tutte le canzoni associate a un album, e gli album associati ad un artista, e gli artisti associato ad un genere.

Attualmente sto usando MySQL, ma prima di prendere una decisione di passare voglio sapere:

  1. Quanto è facile scalare orizzontalmente?
  2. E 'più facile da gestire rispetto una soluzione basata su SQL?
  3. Sarebbe i dati di cui sopra che voglio archiviare essere troppo difficile da fare senza schema?
  4. Quando penso associazione, penso subito RDBMS; i dati possono essere memorizzati in qualcosa come CouchDB, ma hanno ancora un qualche tipo di associazione come detto in precedenza?
  5. La mia applicazione web richiede la replica, quanto bene fa CouchDB o altri gestire questa situazione?
È stato utile?

Soluzione

Questo tipo di informazione è ideale per i database di documenti. Come con i dati del mondo reale molto, non è intrinsecamente relazionale, così shoe-horning in uno schema relazionale porterà mal di testa su tutta la linea (anche usando un ORM - parlo per esperienza). Ubuntu utilizza già CouchDB per la memorizzazione dei metadati la musica, così come le altre cose, nella loro Un prodotto .

Prendendo il resto delle vostre domande one-by-one:

  1. scala orizzontale è WAY più facile che con RDBMS. Questo è uno dei tanti motivi grandi siti come Facebook, Digg e LinkedIn utilizzano, o stanno attivamente indagando, i database di schema-less. Ad esempio, sharding (dividendo i dati attraverso diversi nodi in un sistema) funziona a meraviglia grazie ad un concetto chiamato Coerenza Eventuale ; cioè, i dati possono essere incoerenti tra i nodi per un po ', ma poi si risolva in uno stato coerente.
  2. Dipende da cosa si intende per "gestire" ... L'installazione è generalmente veloce e facile da completare. Non ci sono account utente per configurare e sicura (questa invece è generalmente fatto in livello di logica di business dell'applicazione). Lavorare con un DB documento in tempo reale può essere interessante: non c'è l'esecuzione di query ad hoc CouchDB, per esempio; è necessario utilizzare l'interfaccia utente futon o comunicare con esso tramite richieste HTTP. MongoDB, tuttavia, non supporta l'esecuzione di query ad hoc.
  3. Non dovrei pensare così. La risposta di Bastien fornisce un buon esempio di un documento JSON serializzazione alcuni dati. La bellezza di schemaless DB è che i campi possono mancare da un documento e presente in un altro, ovvero i documenti possono essere completamente diverse l'una dall'altra. Questo elimina molti dei problemi connessi con il valore null RDBMS', che sono molte e varie.
  4. Sì; le associazioni sono archiviati come documenti nidificati, che vengono analizzati nella vostra applicazione come riferimenti a oggetti, collezioni, ecc In risposta di Bastien, il tasto "canzoni" identifica una serie di documenti di canzoni.
  5. Questo è molto simile alla tua prima domanda su scala orizzontale (scala orizzontale e la replica si intrecciano). Come il post sul blog CouchIO Bastien citato afferma: "La replica ... è stato cotto in CouchDB fin dall'inizio.". La mia comprensione è che tutti i database di documenti di gestire replica bene, e lo fanno più facilmente di quanto lo sia per configurarlo in un RDBMS.

Erano voi a decidere che si voleva memorizzare il file canzone stessa insieme con i metadati, si potrebbe fare anche in CouchDB, fornendo il file del brano come allegato al documento; ulteriormente più, non avrebbe alcun incongruenze schema come risultato di fare questo, perché non c'è schema!

Spero di non aver fatto troppi passi falsi qui; Sono abbastanza nuovo per documentare DB me stesso.

Altri suggerimenti

I dati sembra l'ideale per i database orientati documento.
Esempio di documento:
{
"type":"Album",
"artist":"ArtistName",
"album_name":"AlbumName",
"songs" : [
{"title":"SongTitle","duration":4.5}
],
"genres":["rock","indie"]
}

E la replica è una delle caratteristiche più interessanti CouchDB ( http://blog.couch.io/post/468392274/whats-new-in-apache-couchdb-0-11-part-three-new )
Si potrebbe anche voglia di dare un'occhiata a Riak.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top