views:

143

answers:

3

Disclaimer: let me know if this question is better suited for serverfault.com


I want to store information on music, specifically:

  • genres
  • artists
  • albums
  • songs

This information will be used in a web application, and I want people to be able to see all of the songs associated to an album, and albums associated to an artist, and artists associated to a genre.

I'm currently using MySQL, but before I make a decision to switch I want to know:

  1. How easy is scaling horizontally?
  2. Is it easier to manage than an SQL based solution?
  3. Would the above data I want to store be too hard to do schema-free?
  4. When I think association, I immediately think RDBMSs; can data be stored in something like CouchDB but still have some kind of association as stated above?
  5. My web application requires replication, how well does CouchDB or others handle this?
+3  A: 

Your data seems ideal for document oriented databases.
Document example:
{
"type":"Album",
"artist":"ArtistName",
"album_name":"AlbumName",
"songs" : [
{"title":"SongTitle","duration":4.5}
],
"genres":["rock","indie"]
}

And replication is one of couchDB coolest features ( http://blog.couch.io/post/468392274/whats-new-in-apache-couchdb-0-11-part-three-new )
You might also wanna take a look at Riak.

Bastien
The above data format is perfect, if you want a view of all artists or albums by genre it's a simple map/reduce function you just emit() for each genre :)
mikeal
+2  A: 
alastairs
A: 

Regarding horizontal scaling read this this

Unreason
this is incredibly old and fairly inaccurate.
mikeal