NoSQL databases
Relational databases aren't going away, and the teams behind them have been remarkably successful in adapting and scaling to new challenges. However, the NoSQL technologies, which mostly only have in common with each other that they do not fully implement the relational model and most do not guarantee ACID compliance, have seen increasing use over the years.
The two primary appeals of NoSQL databases are:
- Better scaling. When the demands of managing a dataset exceed those which can be met by an affordable server, relational databases become expensive. Although some multi-server federation of relational databases is achievable, it is not easily or cheaply done while maintaining the ACID commitment required by the relational model
- Unstructured data. While it's possible to fit unstructured data into a relational database, it either means a profusion of NULLable columns and potentially adding more as needed, which is symptomatic of a poor design for the task at hand, or the unstructured part of the data ends up in one column as a payload, which makes querying it harder. Although many RDBMSs do now have a JSON datatype—and JSON is the most common format for many of these unstructured datasets—it's not a clean match with SQL syntax
There are many NoSQL databases, many of which are very different to each other. Examples include:
- MongoDB
- CouchDB
- Redis
- Apache Cassandra
- Amazon DynamoDB
Originally, "NoSQL" was considered to mean "non-SQL" but is now often described as "not only SQL"; many NoSQL databases do, in fact, provide a SQL-like query interface. Deciding that it is necessary to investigate a NoSQL solution is only the beginning, as the variation between NoSQL offerings far exceeds that between relational databases, so it's important to understand why a relational database is insufficient in this case. Additionally, it's often the case that NoSQL and relational databases will be used together in a hybrid manner, building on the ACID compliance and data integrity of relational databases and the scaling behavior and tolerance for irregular data from NoSQL databases.