If one looks at nosql-database.org, there are more than 200 NoSQL databases registered and it keeps increasing. This article would help with the question – ‘Which one is the best Choice?’.
Well, the answer would be ‘It Depends’. If this brings forth a frown, it is understandable. The follow-up question would be ‘Depends on What?’. Well, the answer for this also would be quite simple – ‘It depends on the usecase’. May be that clears things a little.
Yes, unlike SQL databases which have an underlying philosophy about the way data is stored, NoSQL databases do not have that restriction. Hence there are more than 200 different ways to store data and which way to store totally depends on the application that is meant to access and retrieve data. The databases, depending on the way they store data, have been placed into multiple categories. The top 4 categories that are widely used are –
- Key Value Stores (Redis, MemcacheDB, Aerospike, BerkeleyDB)
- Document Stores (CouchDB, MongoDB, Azure DocumentDB, AWS DynamoDB)
- Wide Column Stores (Hadoop/HBase, Cassandra, Druid, ConcourseDB)
- Graph Databases (Neo4J, InfiniteGraph, AllegroGraph, HyperGraphDB)
There other types like Multi-Model Databases, Multi-Dimensional Databases, MultiValue databases, etc. Each of the above have specific purpose and can be used in tandem to support different parts of the application / usecase.
To know which option would be the best, it is necessary to get an understanding of the requirement from the database need perspective. Few of the inputs that would help narrow down would be:
- What is the required consistency model?
Almost all the databases would be eventually consistent by default. Many would offer strongly consistent read/write configurations.
- Do you need any Deployment/Management Support?
As part of definition on nosql-database.org, NoSQL database would be opensource. Many of them would have deployment support on Cloud and traditional Data Centers and manage the same. They also have custom deployment options in case one has the skills to deploy and manage the database.
- What level of Scalability and Fault Tolerance is needed?
Most of the NoSQL databases are designed to be seamlessly scalable, meaning they don’t need to be brought down to add extra capacity. They also support automatic failover and Point-In-Time recovery. Few databases are single master systems and some of them are multi-master systems, having no single point of failures.
- Do you need support for Big Data activities?
Few of the databases have tight integration with Big Data products to perform various MapReduce or also have inbuilt functionality to perform MapReduce actions.
- Does the application need an OLAP or an OLTP type of database?
This would be the most vital question to determine the database needed. Most of the applications today, need databases to perform higher reads. Hence, all the databases look at providing higher read throughputs, but the types of reading the application does, is important to figure out which database would be the best choice.
So, I hope my initial answer ‘It Depends’ makes complete sense now. Depending on the application needs, one can go with a specific category of databases and looking at database specific requirement like scalability, fault tolerance, availability SLAs, management support, ease for developers, you should be able to narrow down to a single database.
When it comes to the four categories mentioned above, below pointers should give an idea of which category is good for which usecase.
As the above four types are most widely used to build web applications and data warehouses, I have considered them for this article. Please feel free to use the comment section to discuss other types of NoSQL Databases that you have used and use cases for the same.
You can also check out following MongoDB courses that we offer:
If you need any consultation on MongoDB, please let us know in the comment section below.