To get this straight I would like to mention that NoSQL specifically MongoDB is not only a key/value store but it provide more value than only a key value store database, but it’s not a RDBMS either, I have not worked with MongoDB in production with huge data but I have used it with quite a big data and I find out that it’s cool technology it seems to be very good in performance, fault tolerance and auto Sharding (which is also known as auto scale).
Out of other Document Oriented Database (NoSQL) I have used I have come to a conclusion that MongoDB is the closest replacement to RDBMS I have ever seen, and this is also true as it’s not perfect for all kinds of apps and software you develop but it will satisfy your normal CRUD stuff if all your application need is simple CRUD.
And if your database structured to Third Normal Form 3NF and you don’t do a lot of joints in your tables what I mean is your only running a bunch of select statement in your database if this is your situation then Monogo is the perfect solution for you.
Bottom line is if you are going to build something and you are waiting to decide what to you use for your database then you are doing it wrong, if you know ver well MySQL then go for that or if you are good and have resources in PostgreSQL then go for that, what you need to do is optimise that particular database for the application you are going to make, NoSQL is great tool to have but it does not make your software magically faster and scaleable, your user don’t even care or notice what kind of database you use in back end but they certainly care how fast you can deliver the content for them so use it when you need something from it.
It wouldn’t be surprise for you that most of tech giants still uses RDBMS specially MySQL like Facebook still uses MySQL a lot , Wikipedia uses MySQL a lot and also FriendsFeed uses MySQL a lot and these are not the only giants uses MySQL but there is many others but I named some of them.
What NoSQL database in general lack is as bellow, I have summarize some of the main points that is missing from NoSQL database are:
- You probably need to write all your joints in application level as NoSQL does not support, this is something that RDBMS gives you automatically.
- ACIDity is missing in NoSQL database Mongo maybe the closes to the RDBMS query but trust me it’s not even close to the normal queries.
- NoSQL database retrieving data from a single collection and take advantage of one index and this means to many round trips to server to find related record and the de-normalizing of the data happens I background job.
- The fact that this is not RDBM is you are missing the foreign key in your tables, which means your database is inconsistence and you have to take care of that in application level.
To conclude this NoSQL database is not perfect for all application and software you develop but it’s also true that NoSQL database does have many tools that might be perfect for the application your going to develop, if that is the case then use it but this is also true as I believe that 89% of apps and software you develop you can do it with RDBMS.
When to use NoSQL or RDBMS Databases?