Modern database management systems can be classified as either relational, such as many implementations of structured query language (SQL) or non-relational, now otherwise known as NoSQL. NoSQL is sometimes also referred to as “not only SQL”, non-relational or distributed databases, since the term has come to describe a larger collection of database management systems some of which now include SQL elements in some form. Such systems, employing non-relational management of databases, had existed in some form since the 1960s but did not take the name of NoSQL or come into wide use until the late 1990s and the increasingly distributed computing needs of the Web 2.0 movement.
NoSQL databases sacrifice speed and consistency for scalability (according to the CAP theorem). Relational SQL databases, while faster and more consistent, are not as scalable and thus NoSQL is needed for dispersed databases with millions of accounts and uniquely structured data. NoSQL databases can be upgraded by adding more nodes and the data is “eventually” propagated to all parts of the database, usually over milliseconds.
NoSQL databases are grouped into four subcategories:
- Key-value stores: Scales well but the simplicity of pairing keys with values can limit the use of complex database queries.
- Document stores: Allows key-value relationships to be defined in a flexible way that can imitate some of the advantages of a relational database while remaining scalable and adaptable far beyond traditional tables.
- Graph stores: The structure of the database is based on the connections between nodes. Graph store NoSQL databases have the advantages of flexibility inherent in other NoSQL implementations but lack the scalability of the other types.
- Column stores: Can improve the retrieval speed of information and are favored for warehousing and data analytics.
When selecting a database management system, the choice depends upon the size of the dataset and the particular use case. Flexible schema that allow designers to use comprehensible names, hierarchical structures and complex connections as well as scalability across millions of network nodes are reasons for selecting NoSQL databases. Consider using NoSQL systems when you require:
- Dynamic schema for unstructured data that allow designers to go beyond simple table structures
- Horizontally scalable architecture that allows for expansion beyond a single server and into millions of accounts