Recent growth of social media networks and smartphone users have led to a sudden spike in internet user population. In today’s world a good application can become viral in a matter of few hours. Gone are the days when user-base growth was a slow, linear and predictable process. Having a million+ users is the new ‘Norm’ for any internet application. Growth estimates have become unpredictable and now companies need to implement/create applications such that they can effectively support dynamic increase in the number of users as and when required.
Today’s web applications also generate a lot of unstructured data in form of comments, feedback and access patterns. This data contains lot of useful insights about the users and usage behavior. Applications should be able to preserve and analyze this unstructured or semi structured data.
Let the facts speak for themselves,
2+ billion – Internet users
32 billion – Hours spent online daily
1+ billion – Smartphone users
566% – Growth in number of internet users in last 12 years
Scalability and Performance have become key success factors for any web app company. Normally, web applications follow a three tier design approach – Front-end (UI) layer, Model layer and Back-end (Database) layer. There are a variety of solutions and design strategies available for UI and model layer implementations, however database layer has been dominated by relational databases. Relational databases are rigid and difficult to scale. Application developers find it extremely challenging (impossible in most of the cases), to get the dynamic scalability without compromising performance. Relational databases have also failed to provide effective storage and retrieval of unstructured data. So, in nut-shell Relational databases are biggest bottleneck for rapidly growing web applications? Not anymore; NoSQL databases have emerged to their rescue.
NoSQL is a completely new approach of thinking about a database. NoSQL databases generally do not adhere to the traditional RDBMS principals and fundamentals. A NoSQL DB may not support SQL and may not provide ACID (atomicity, consistency, isolation, durability) guarantees, but compared to relational implementations, a NoSQL DB is more flexible, scalable and cost efficient.
Let me clear the ambiguity around the term ‘NoSQL’. It is a misnomer. NoSQL should be understood as ‘Not Only SQL’.NoSQL databases are – non-relational, schema-free, distributed, open-source, eventually consistent and horizontally scalable. NoSQL DB solutions available today can be classified into four major design categories, namely: key-value stores, document store, Columnar, and graph databases.
Irrespective of the design and implementation, NoSQL databases share following characteristics:
a) Auto-sharding: A NoSQL Database automatically distributes stored data across servers, without any need of explicit applications logic to do that. Servers can be added or removed from the cluster without any data loss or major application downtime.
b) Implicit cache: To increase throughput, advanced NoSQL database technologies seamlessly cache data in memory. This is implicit and transparent to the application development team.
c) Schema free: The storage structure is schema free and thus more flexible to efficiently store and retrieve unstructured data.
NoSQL may not be a fit for all applications, specially the ones which involve online transactions. However, most of the today’s web applications can break performance shackles through NoSQL. NoSQL is supported by many technology companies and is gaining momentum. It is here to stay!
Stay tuned to dive deeper into the NoSQL world in my further posts.