NoSQL 基础知识
什么是 NoSQL?
NoSQL(Not Only SQL 的缩写)泛指非关系型的数据库,主要针对的是键值、文档以及图形类型数据存储。
NoSQL 数据库天生支持分布式,数据冗余和数据分片等特性,旨在提供可扩展的高可用高性能数据存储解决方案。
NoSQL 数据库代表:HBase、Cassandra、MongoDB、Redis
MySQL 和 NoSQL 的区别
MySQL | NoSQL | |
---|---|---|
数据模型 | 使用关系型数据模型(表格结构) | 使用非关系型数据模型(键值对、文档、列族等) |
数据存储 | 存储在预定义的表中 | 存储在集合、文档、列族等中 |
数据查询 | 使用结构化查询语言 (SQL) | 使用特定的查询语言或 API |
数据灵活性 | 需要预先定义表结构 | 无需预先定义结构,可以灵活添加字段 |
数据一致性 | 支持 ACID 事务,保证数据一致性 | 大多数 NoSQL 数据库是 BASE 模型,注重可用性和分区容错性,牺牲一致性 |
可扩展性 | 垂直扩展或水平分片 | 水平扩展,可以通过添加节点来扩展 |
扩展性能 | 通常在高负载时性能下降 | 可以在大规模数据时保持高性能 |
关系处理 | 支持复杂的关系查询和连接操作 | 通常不支持复杂的关系查询 |
数据模式 | 使用固定模式,需定义表结构 | 动态模式,无需事先定义 |
主要用途 | 适用于结构化数据和复杂查询 | 适用于半结构化或非结构化数据,高可扩展性和大规模数据存储 |
事务支持 | 支持原子性、一致性、隔离性和持久性 (ACID) 事务 | 通常不支持 ACID 事务,为了可扩展、高性能进行了权衡,少部分支持比如 MongoDB 。不过,MongoDB 对 ACID 事务 的支持和 MySQL 还是有所区别的。 |
示例 | Oracle、MySQL、Microsoft SQL Server、PostgreSQL | 文档:MongoDB、CouchDB,键值:Redis、DynamoDB,宽列:Cassandra、 HBase,图表:Neo4j、 Amazon Neptune、Giraph |
NoSQL 数据库有什么优势?
- **架构灵活:**NoSQL 数据库通常提供灵活的架构,以实现更快速、更多的迭代开发。灵活的数据模型使 NoSQL 数据库成为半结构化和非结构化数据的理想之选。
- **可扩展性好:**NoSQL 数据库通常被设计为通过使用分布式硬件集群来横向扩展,而不是通过添加昂贵和强大的服务器来纵向扩展。
- **高性能:**NoSQL 数据库针对特定的数据模型和访问模式进行了优化,这与尝试使用关系数据库完成类似功能相比可实现更高的性能。
- **拥有强大的功能:**NoSQL 数据库提供功能强大的 API 和数据类型,专门针对其各自的数据模型而构建。
NoSQL 数据库有哪些类型?
主要可以分为下面四种类型:
- 键值:键值数据库是一种较简单的数据库,其中每个项目都包含键和值。这是极为灵活的 NoSQL 数据库类型,因为应用可以完全控制 value 字段中存储的内容,没有任何限制。Redis 和 DynanoDB 是两款非常流行的键值数据库。
- 文档:文档数据库中的数据被存储在类似于 JSON(JavaScript 对象表示法)对象的文档中,非常清晰直观。每个文档包含成对的字段和值。这些值通常可以是各种类型,包括字符串、数字、布尔值、数组或对象等,并且它们的结构通常与开发者在代码中使用的对象保持一致。MongoDB 就是一款非常流行的文档数据库。
- 图形:图形数据库旨在轻松构建和运行与高度连接的数据集一起使用的应用程序。图形数据库的典型使用案例包括社交网络、推荐引擎、欺诈检测和知识图形。Neo4j 和 Giraph 是两款非常流行的图形数据库。
- 宽列:宽列存储数据库非常适合需要存储大量的数据。Cassandra 和 HBase 是两款非常流行的宽列存储数据库。
学习参考
- https://javaguide.cn/database/nosql.html
.html](https://javaguide.cn/database/nosql.html) - Relational vs. NoSQL data | Microsoft Learn