第七章 非关系型数据库 v1.0
第一部分 NoSQL概述
一、什么是NoSQL
1.定义
NoSQL(Not Only SQL)是对不同于传统关系型数据库的数据管理系统的统称。NoSQL用于超大规模数据的存储,这些数据类型不需要固定的模式,无需多余操作就可以横向扩展。
2.特点
- 高可扩展性:分布式架构,支持水平扩展
- 高可用性:无单点故障,自动故障转移
- 低延迟:针对特定数据模型优化,读写性能高
- 灵活的数据模型:无需预定义模式(Schema-less)
二、CAP理论
对于一个分布式系统,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition tolerance)三个特点最多只能三选二。
- CA系统:满足一致性和可用性,但无法容忍分区(传统关系型数据库)
- CP系统:满足一致性和分区容忍性,但可能牺牲可用性(如MongoDB、Redis)
- AP系统:满足可用性和分区容忍性,但可能牺牲一致性(如Cassandra)
第二部分 NoSQL数据库类型
一、键值存储(Key-Value)
1.特点
- 数据模型简单,通过Key直接访问Value
- 读写性能极高,通常基于内存
- 适合缓存、会话管理、排行榜等场景
2.代表产品
- Redis:支持丰富数据结构(String、Hash、List、Set、Sorted Set),支持持久化
- Memcached:高性能分布式内存缓存系统,仅支持简单键值对
- etcd:分布式键值存储,用于配置管理和服务发现
二、文档存储(Document)
1.特点
- 数据以JSON/BSON/XML等格式存储
- 支持复杂的数据结构和嵌套
- 支持丰富的查询语言和索引
2.代表产品
- MongoDB:最流行的文档数据库,支持灵活的查询和聚合
- CouchDB:面向文档的数据库,支持RESTful API
- Elasticsearch:基于Lucene的搜索引擎,也常作为文档数据库使用
三、列存储(Column-Family)
1.特点
- 数据按列族(Column Family)组织
- 适合大规模数据集的分布式存储
- 支持高并发读写
2.代表产品
- Cassandra:分布式NoSQL数据库,高可用性和可扩展性
- HBase:基于Hadoop的列存储数据库,适合大数据场景
四、图数据库(Graph)
1.特点
- 数据以节点(Node)和边(Edge)的形式存储
- 适合处理复杂的关系网络
- 支持高效的图遍历和关系查询
2.代表产品
- Neo4j:最流行的图数据库,支持Cypher查询语言
- JanusGraph:分布式图数据库,支持多种存储后端
第三部分 SQL vs NoSQL
一、对比
| 特性 | SQL | NoSQL |
|---|---|---|
| 数据模型 | 关系型(表) | 键值、文档、列、图 |
| 模式 | 固定模式(Schema-on-Write) | 动态模式(Schema-on-Read) |
| 扩展方式 | 垂直扩展(Scale Up) | 水平扩展(Scale Out) |
| 事务支持 | ACID | 最终一致性(部分支持ACID) |
| 查询语言 | SQL | 各产品自定义 |
| 适用场景 | 复杂查询、事务处理 | 大数据、高并发、灵活模型 |
二、如何选择
1.选择SQL的场景
- 数据结构稳定,关系复杂
- 需要ACID事务保证
- 需要复杂的关联查询和报表
2.选择NoSQL的场景
- 数据模型灵活多变
- 需要处理海量数据和高并发
- 需要水平扩展能力
- 对性能要求极高(如缓存)