There are several reasons for the downfall of relational databases and before I start off with the various aspects of NoSQL designs, I would like to highlight a few factors which have made relational models a misfit for global applications today.
Manual Intervention:Relational databases were designed in an era when human workforce was cheaper than technology. Thus, relational models have a lot of gaps. For example, data distribution, sharding, partitioning and similar functions are mostly managed through human intervention.
Expensive Vertical Scalability:Relational model designs rely heavily on the underlying hardware’s capacity and quality for performance. They were never designed for clustered storage and operation. Thus, to upgrade a relational database’s capacity it has been necessary to upgrade server hardware which increases costs substantially.
REDO and UNDO logs:Persistent REDO logs slow down the write performance as every write operation is recorded in REDO logs. UNDO logs are also updated for each transaction, slowing down the system considerably.
Transaction Support Through Two-Phase Commit:Two-phase-commit transactions (used to ensure consistency) are known to degrade performance.
Rigid Schema Design:RDBMS architecture requires fixed schema designs. All tables and columns need to be pre-defined along with the data type and length constraints. Most of today’s applications generate a lot of unstructured/semi structured data. What is required today is a flexible schema free architecture for storing such data.
REDO and UNDO logs are used by relational databases to ensure ACID compliance of transactions. Getting rid of these persistent logs would be a huge performance booster but that would make them ACID non-compliant. Considerable design changes are needed to make the relational databases horizontally scalable and schema free.
We can therefore conclude that a highly efficient and scalable database must have the following characteristics:
• It must be designed to work in distributed architecture,• It must be horizontally scalable,• It must have memory based caching mechanism, and,• It must not make use of REDO and UNDO logs. (However, one must remember the fact that getting rid of REDO and UNDO logs will improve performance but such databases may not be ACID compliant and may not support transactions).
NoSQL databases offer all the advantages mentioned above and they offer the right fit for most applications. Obviously they are here to stay!
Do you agree or have you come across some hitches with NoSQL which makes you believe that there are other, better databases available today?