What are NoSQL databases?
NoSQL databases are purpose built for specific data models and have flexible schema for building modern applications. NoSQL databases are widely recognized for their ease of development, functionality, and performance at scale. They use a variety of data models, including document, graph, key-value, in-memory, and search
How Does a NoSQL (non relational) Database Work?
NoSQL databases use a variety of data models for accessing and managing data, such as document, graph, key-value, in-memory, and search. These types of databases are optimized specifically for applications that require large data volume, low latency, and flexible data models, which are achieved by relaxing some of the data consistency restrictions of other databases.
Why should you use a NoSQL database?
NoSQL databases are a great fit for many modern applications such as mobile, web, and gaming that require flexible, scalable, high-performance, and highly functional databases to provide great user experiences.
- Flexibility: NoSQL databases generally provide flexible schema that enable faster and more iterative development. The flexible data model makes NoSQL databases ideal for semi-structured and unstructured data.
- Scalability: NoSQL databases are generally designed to scale out by using distributed clusters of hardware instead of scaling up by adding expensive and robust servers. Some cloud providers handle these operations behind-the-scenes as a fully managed service.
- High-performance: NoSQL database are optimized for specific data models (such as document, key-value, and graph) and access patterns that enable higher performance than trying to accomplish similar functionality with relational databases.
- Highly functional: NoSQL databases provide highly functional APIs and data types that are purpose built for each of their respective data models.
Types of NoSQL Databases
Key-value: Key-value databases are highly partition-able and allow horizontal scaling at scales that other types of databases cannot achieve. Use cases such as gaming, ad tech, and IoT lend themselves particularly well to the key-value data model. DynamoDB is designed to provide consistent single-digit millisecond latency for any scale of workloads.
Document: In application code, data is represented often as an object or JSON-like document because it is an efficient and intuitive data model for developers. Document databases make it easier for developers to store and query data in a database by using the same document model format that they use in their application code. The flexible, semi-structured, and hierarchical nature of documents and document databases allows them to evolve with applications’ needs. The document model works well.
with catalogs, user profiles, and content management systems where each document is unique and evolves over time.
Graph: A graph database’s purpose is to make it easy to build and run applications that work with highly connected data sets. Typical use cases for a graph database include social networking, recommendation engines, fraud detection, and knowledge graphs.
In-memory: Gaming and ad-tech applications have use cases such as leader boards, session stores, and real-time analytics that require microsecond response times and can have large spikes in traffic coming at any time.
Search: Many applications output logs to help developers troubleshoot issues. Elastic-search Service is purpose built for providing near-real-time visualizations and analytics of machine-generated data by indexing, aggregating, and searching semi structured logs and metrics. Elastic-search also is a powerful, high-performance search engine for full-text search use cases.
SQL (relational) vs. NoSQL (non relational) databases
For decades, the predominant data model that was used for application development was the relational data model used by relational databases such as Oracle, DB2, SQL Server, MySQL, and PostgreSQL. It wasn’t until the mid to late 2000s that other data models began to gain significant adoption and usage. To differentiate and categorize these new classes of databases and data models, the term “NoSQL” was coined. Often the term “NoSQL” is used interchangeably with “non relational.”
Though there are many types of NoSQL databases with varying features, the following table shows some of the differences between SQL and NoSQL databases.
|Relational databases are designed for transactional and strongly consistent online transaction processing (OLTP) applications and are good for online analytical processing (OLAP).
|NoSQL key-value, document, graph, and in-memory databases are designed for OLTP for a number of data access patterns that include low-latency applications. NoSQL search databases are designed for analytics over semi-structured data.
|The relational model normalizes data into tables that are composed of rows and columns. A schema strictly defines the tables, rows, columns, indexes, relationships between tables, and other database elements. The database enforces the referential integrity in relationships between tables.
|NoSQL databases provide a variety of data models that includes document, graph, key-value, in-memory, and search.
|Relational databases provide atomicity, consistency, isolation, and durability (ACID) properties:
- Atomicity requires a transaction to execute completely or not at all.
- Consistency requires that when a transaction has been committed, the data must conform to the database schema.
- Isolation requires that concurrent transactions execute separately from each other.
- Durability requires the ability to recover from an unexpected system failure or power outage to the last known state.
|NoSQL databases often make tradeoffs by relaxing some of the ACID properties of relational databases for a more flexible data model that can scale horizontally. This makes NoSQL databases an excellent choice for high throughput, low-latency use cases that need to scale horizontally beyond the limitations of a single instance.
|Performance is generally dependent on the disk subsystem. The optimization of queries, indexes, and table structure is often required to achieve peak performance.
|Performance is generally a function of the underlying hardware cluster size, network latency, and the calling application.
|Relational databases typically scale up by increasing the compute capabilities of the hardware or scale-out by adding replicas for read-only workloads.
|NoSQL databases typically are partitionable because key-value access patterns are able to scale out by using distributed architecture to increase throughput that provides consistent performance at near boundless scale.
|Requests to store and retrieve data are communicated using queries that conform to a structured query language (SQL). These queries are parsed and executed by the relational database.
|Object-based APIs allow app developers to easily store and retrieve in-memory data structures. Partition keys let apps look up key-value pairs, column sets, or semistructured documents that contain serialized app objects and attributes.