Lynn Monson (@lmonson) has a very good list of possible issues while scaling out with MySQL (relational db):
You’re going to have to face a few realities:
- Master DB machines go down or get sick. Given a number of read slaves of that master, it’s non trivial to figure out which of the slaves becomes the new master and how to get the other read slaves to begin replicating from that new master at the proper point. (Amazon’s upcoming RDS read slaves are, therefore, pretty amazing technology)
- When master DB machines go down, you will incur a delay in setting up a new master
- How do you add new shards and rebalance the data?
- You need a way to know which shard to talk to. Perhaps by implementing your own version of Consistent Hashing?
- Caching is also your problem. You can use off the shelf systems, say memcached, to reduce the work but its till not zero work.
- You will most likely give up distributed joins between the various shards.
On the other hand, not all NoSQL databases are solving all these issues.
Original title and link: NoSQL: The Alternative to MySQL Sharding (NoSQL databases © myNoSQL)