Questo schema di suono più adatto per un archivio dati document-oriented o relazionale?
-
22-09-2019 - |
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:
- Quanto è facile scalare orizzontalmente?
- E 'più facile da gestire rispetto una soluzione basata su SQL?
- Sarebbe i dati di cui sopra che voglio archiviare essere troppo difficile da fare senza schema?
- 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?
- La mia applicazione web richiede la replica, quanto bene fa CouchDB o altri gestire questa situazione?
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:
- 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.
- 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.
- 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. - 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.
- 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.