I came across this great article on Microsoft Azure Docs on NoSQL vs. SQL. In the development world, there are new technologies coming down like rain every day. It is easy to get caught up in the latest and biggest trend and have a tendency to replace your current favorite technology (a hammer) for any problem (a nail) with a different technology (a different hammer). It is important to not lose focus of what are the true applications of any new technology, and when to use it or not use it.
The Microsoft article example gives a great example on a social site where you may have a user making a post with different media that get comments and likes by other users. To think of it in a purely relational database sense, you may end up creating different tables to host users, posts, media types, comments, etc. with one-to-many or many-to-many relationships going every which way. And to do something simple like showing a post from a user may require you to run joins on several of these tables. Definitely not great for performance.
In comparison, in a document based NoSQL database, you could have entire documents saved with all the relevant information for a particular post, assigned to a user. It would be very performant unlike the multi-table, multi-relationship joins all over solution an RDBMS would offer.
There are things that relational databases are good at, for instance
- Relational Queries
- Defined and uniform table structure (all entries have same fields)
- Well Defined Schema (though adding properties requires more work)
- Structured Data
- Vertical Scaling (More RAM, More Processing Power)
and there are things NoSQL storage is good at, for instance
- Non-relational data (JSON, key-value pairs, etc.)
- Ease of adding new properties
- Unstructured data
- Availability of Consistency (CAP Theorem)
- Horizontal Scaling (Add Servers)