There is a lot of discussion about the pros and cons of NoSQL databases and where and when you should use them versus using an RDBMS.
This discussion sounds really familiar. Before relational databases existed, there were several choices:
These choices provided various ways to create, read, update and delete records of information which were stored in files for persistence. While these techniques each have their advantages and disadvantages, the thing that they have in common is that the programmer had to know their structure and navigate accordingly. This meant that there was a one-to-one relationship between how the data is stored and how it needed to be accessed. Many years ago, I had the displeasure of using these techniques using COBOL.
The arrival of relational databases and the SQL language meant that programmers did not need to know how that the data was stored when they had to access it. The SQL query optimizer provided an abstraction such that the programmer would define what data that they wanted rather than how they should access that data. The challenge with early RDBMS was that they were not as fast as the non SQL alternatives and tended to need more expensive hardware to run on. This situation caused conflict as there were debates about :
Eventually this debate was resolved as RDBMS and their SQL optimizers became more efficient and the hardware improved to the point that most system eventually ended up using an RDBMS with the SQL language.
Back in the present, the discussion about SQL vs NoSQL databases is complex, but the following three things are critical:
It is true that there are some NoSQL databases which are very fast and very scalable. It appears to me that the current NoSQL databases are like the old non SQL in that they force the programmer to know how that the data is physically stored in order to be able to access it. It is also true that some RDBMS do are not as fast as some of the NoSQL databases and do not scale as well as the best NoSQL databases. If the data that you need to model is so simple that it can effectively be represented as name/value pairs, then using a relational data model is over kill. However if the data that you need to model is complex and you want to minimize the size of the data stored, then using a normalized relational data model can be a good thing.
What if there was an RDBMS which was as fast as or faster than the NoSQL databases? What if there was an RDBMS which could scale as well or better than the NoSQL databases? If this were true and NoSQL databases no longer had performance or scalability advantages of RDBMS, then long term what would be the value proposition of NoSQL databases?
It turns out that there is a new RDBMS which is fast as or faster than the NoSQL databases and that can scale as well or better than the NoSQL databases. This new RDBMS is called Oracle TimesTen Velocity Scale In-Memory Database.
Disclaimer: these are my personal thoughts and do not represent Oracle's official viewpoint in any way, shape, or form.