Just a few short years ago, MySQL was the undisputed king of the open-source database hill. But, today, non-relational, “cloud,” or “NoSQL” databases are gaining mindshare as an alternative model for database management, with its market emerging at an 82% compound annual growth rate.
NoSQL recently received quite a positive bump when Twitter announced it was moving from MySQL to the Java-based NoSQL Cassandra database. Among most popular NoSQL databases are: Cassandra, CouchDB, HBase, MongoDB, and Redis. Twitter isn’t the only one to be using NoSQL. Other notable sites using various types of NoSQL implementations are Facebook, and Rackspace, Digg ,Disney, Forbes, foursquare and MTV.
The term “NoSQL” was coined back in 1998, and it originally stood for Not Only SQL. So the name NoSQL is a bit of a misnomer. NoSQL began its life as an alternative form of structured data storage. Today’s NoSQL databases are distributed data stores that are designed for very large-scale data access requirements.
So as you see from the examples of companies that are using NoSQL, NoSQL databases are fast becoming popular for web apps because of the simplicity and scalability they provide as compared to regular relational databases. This is especially helpful when designing social networking apps because of the sheer amount of data that needs to be processed and served.
Key advantages of using NoSQL database are:
1. Flexible key/value store – This makes reading and writing data super-fast.
2. Schema less – This makes then a great fit for non-structured or semi-structured data.
3. High Scalability – Most NoSQL databases are designed from ground up to run on multiple servers, which makes partitioning and hence scaling for higher loads much easier compared to regular relations databases.
But of course, you will never find an ideal tool and everything comes with a cost. NoSQL databases sacrifice a little bit on consistency in favor of scalability and latency. So, they turn out to be not a good choice for mission critical data, like banking, stock markets, or any other financial institutions.
All pros and cons should be taken into consideration while choosing what technology to use. Also different approaches can be combined together. Depending on the app, we can either choose to store all data in a NoSQL database or store just transient data like status updates, comments, notifications, etc.
NoSQL databases are becoming an increasingly important part of the database landscape, and when used appropriately, can offer real benefits. However, enterprises should proceed with caution with full awareness of the legitimate limitations and issues that are associated with these databases. What are your thoughts on NoSQL database? Do you use it in your business? Will be interesting to know your thoughts.
Hey, great article. I have never used NoSQL but i was planning to use MongoDB for my personal blog (learning purposes). For big projects i’m not going to use it very soon because i don’t think is “mature” enough. Also, support is offered only by small start-ups without much credibility (in contrast to SQL which is supported by companies like Microsoft, Oracle, IBM)
There are excellent and mature commercial NoSQL alternatives out there as well. Versant is extremely fast and powerful and what we are looking to use for our MMO platform.
Take a look at NuoDB, http://www.nuodb.com. It is SQL based but scales like NoSQL databases.
Twitter was only using the backend of MySQL and was not use the relational engine (the SQL), so Twitter was already ‘no SQL’. So the move to Cassandra is more a reflection on the stability and performance of the backend. What I find astounding is that storage engines in Java and Erlang (Riak) can run on virtual machines faster than well written storage engines in C (MySQL).
The NoSQL databases have a wide variety of data models that make them appropriate for different roles. I am currently experimenting with neo4j because it offers high performance graph traversal with a syntax that is much cleaner than writing recursive SQL in some platform-specific syntax. We need to be able to efficiently find local dealers, which can involve traversing organization hierarchies and doing location-bases searches, which are notoriously difficult to make efficient in SQL without a full GIS framework.
The more general point is that the NoSQL databases have a wide range of supported data structures and they have different support for consistency and durability. The various NoSQL databases also have differing support for transactions; eventual consistency offers improved performance, but at the cost of much more complex coding.
What would be ideal would be a pluggable collection of supported data structures and consistency models so that an organization could use a single framework and choose exactly the right sort of engine for its needs. In a fantasy land, we could even have a cross module query engine to allow joins across multiple backends. Something of a NoSQL/MED that extends SQL/MED to Not Only SQL. (MED=Management of External Data)
I’ve been using MySQL for years now, and have never turned to any other alternative. However, I like what I’m reading here. Thanks for sharing. I’ll have to look into this NoSQL.