tags:

views:

479

answers:

3

I am in the middle of designing a highly-scalable application which must store a lot of data. Just for example it will store lots about users and then things like a lot of their messages, comments etc. I have always used MySQL before but now I am minded to try something new like couchdb or similar which is not SQL.

Does anyone have any thoughts or guidance on this?

+4  A: 

Here's a quote from a recent blog post from Dare Obasanjo.

SQL databases are like automatic transmission and NoSQL databases are like manual transmission. Once you switch to NoSQL, you become responsible for a lot of work that the system takes care of automatically in a relational database system. Similar to what happens when you pick manual over automatic transmission. Secondly, NoSQL allows you to eke more performance out of the system by eliminating a lot of integrity checks done by relational databases from the database tier. Again, this is similar to how you can get more performance out of your car by driving a manual transmission versus an automatic transmission vehicle.

However the most notable similarity is that just like most of us can’t really take advantage of the benefits of a manual transmission vehicle because the majority of our driving is sitting in traffic on the way to and from work, there is a similar harsh reality in that most sites aren’t at Google or Facebook’s scale and thus have no need for a Bigtable or Cassandra.

To which I can add only that switching from MySQL, where you have at least some experience, to CouchDB, where you have no experience, means you will have to deal with a whole new set of problems and learn different concepts and best practices. While by itself this is wonderful (I am playing at home with MongoDB and like it a lot), it will be a cost that you need to calculate when estimating the work for that project, and brings unknown risks while promising unknown benefits. It will be very hard to judge if you can do the project on time and with the quality you want/need to be successful, if it's based on a technology you don't know.

Now, if you have on the team an expert in the NoSQL field, then by all means take a good look at it. But without any expertise on the team, don't jump on NoSQL for a new commercial project.

Update: Just to throw some gasoline in the open fire you started, here are two interesting articles from people on the SQL camp. :-)

I Can't Wait for NoSQL to Die
Fighting The NoSQL Mindset, Though This Isn't an anti-NoSQL Piece

Franci Penov
The process of scaling SQL solutions is the process of removing features and relationships. So I don't think this is an entirely fair assessment. Also, I wouldn't group NoSQL databases together like this, Cassanda for instance focuses solely on scaling *up* while CouchDB is concerned with scaling the api *down* and making it easy to use and attempts to allow that api to scale as far up as possible.
mikeal
Might this be the link to the quote? http://www.25hoursaday.com/weblog/2010/03/29/TheNoSQLDebateAutomaticVsManualTransmission.aspx
edosoft
Ah, yes indeed. I missed that he made it a public blog post as well. I'll update the post.
Franci Penov
A: 

if you are looking for a highly scalable open source nosql solution check out cassandra or hbase

edit: bad word choice, corrected, "real" has been replaced by "highly scalable open source"

imightbeinatree at Cloudspace
Please explain your definition of "real".
Jan Lehnardt
A: 

Here's a Visual Guide to NoSQL Systems that illustrates the primary trade-offs involved, the biggest being choosing two of the following: consistency, availability, and partition tolerance.

Nathan Hurst