从关系型瓶颈到五大 NoSQL 类型,用 CAP / BASE 建立选型大脑
目 录
[一、导读:为什么需要 NoSQL](#一、导读:为什么需要 NoSQL)
[1.1 关系型数据库的成就与瓶颈](#1.1 关系型数据库的成就与瓶颈)
[1.2 NoSQL 的定位:Not Only SQL](#1.2 NoSQL 的定位:Not Only SQL)
[二、NoSQL 认知地图:四大类型 + 搜索](#二、NoSQL 认知地图:四大类型 + 搜索)
[2.1 键值存储(Key-Value)](#2.1 键值存储(Key-Value))
[2.2 文档存储(Document)](#2.2 文档存储(Document))
[2.3 列族存储(Wide-Column)](#2.3 列族存储(Wide-Column))
[2.4 图数据库(Graph)](#2.4 图数据库(Graph))
[2.5 搜索引擎(Search)](#2.5 搜索引擎(Search))
[2.6 五大类型综合对比](#2.6 五大类型综合对比)
[三、选型的理论基础:CAP 与 BASE](#三、选型的理论基础:CAP 与 BASE)
[3.1 CAP 定理](#3.1 CAP 定理)
[3.2 P 是必选项:CP 与 AP 的权衡](#3.2 P 是必选项:CP 与 AP 的权衡)
[3.3 BASE 理论](#3.3 BASE 理论)
[3.4 从理论到选型](#3.4 从理论到选型)
[4.1 关键决策维度](#4.1 关键决策维度)
[4.2 决策流程](#4.2 决策流程)
[4.3 边界:何时仍该用关系型 / NewSQL](#4.3 边界:何时仍该用关系型 / NewSQL)
一、导读:为什么需要 NoSQL
本系列面向非关系型数据库的运维实战。作为第 0 篇导读,本文先帮你在脑中建立一张 NoSQL 认知地图,理解它从哪里来、分哪几类、如何按业务选型,再进入后续各技术族的子系列。
1.1 关系型数据库的成就与瓶颈
关系型数据库以 SQL 与 ACID 事务为基石,几十年来一直是企业数据存储的中流砥柱。但当互联网业务走向高并发、海量数据、模型快速迭代时,关系型自身的几个短板被不断放大:
- 单机扩展受限:垂直扩展(加 CPU / 内存)有物理上限,水平分库分表又显著抬高运维复杂度。
- 强一致事务带来锁与协调开销,高并发写入场景下吞吐与扩展性受限。
- 表结构固定,schema 变更成本高,难以匹配快速变化的业务数据模型。
1.2 NoSQL 的定位:Not Only SQL
NoSQL(Not Only SQL)并非要取代关系型,而是在特定场景下的补充与扩展。它往往放弃部分一致性或通用 SQL 能力,换取更高的扩展性、吞吐与模型灵活度。真实生产环境中,NoSQL 与关系型绝大多数时候是协作关系,而不是替代关系。
二、NoSQL 认知地图:四大类型 + 搜索
主流 NoSQL 按数据模型可分为四大类型,外加承担搜索职责的搜索引擎,共同构成完整的认知地图。
2.1 键值存储(Key-Value)
最简洁的模型,数据以「键---值」形式存储,读写性能极高,常用于缓存、会话、实时计数。
|-----------------------|
| SET user:1001 "Tommy" |
| GET user:1001 |
代表产品:Redis、DynamoDB、Memcached。
2.2 文档存储(Document)
以 JSON 类文档(MongoDB 为 BSON)存储,结构灵活、支持嵌套与丰富查询,适合内容管理、用户档案、订单等半结构化数据。
|-----------------------------------------------------------|
| { "_id": 1001, "name": "Tommy", "tags": "运维", "DBA" } |
代表产品:MongoDB、CouchDB。
2.3 列族存储(Wide-Column)
以列族(Column Family)组织数据,擅长海量结构化数据的横向扩展,适合日志、时序、物联网等海量写入场景。
代表产品:Cassandra、HBase、ScyllaDB。
2.4 图数据库(Graph)
以节点和边建模实体及其关系,擅长多跳关联查询,适合社交网络、推荐系统、风控反欺诈等强关系场景。
代表产品:Neo4j、JanusGraph、ArangoDB。
2.5 搜索引擎(Search)
基于倒排索引实现全文检索与实时分析,通常不充当主存储,而是承载站内搜索与日志分析。
代表产品:Elasticsearch、Solr。
2.6 五大类型综合对比
|------------|--------------|----------------------|----------------|--------------|
| 类型 | 数据模型 | 代表产品 | 核心优势 | 典型场景 |
| 键值 | 键值对 | Redis / DynamoDB | 极高读写性能 | 缓存、会话、实时计数 |
| 文档 | JSON 文档 | MongoDB / CouchDB | 灵活 schema、丰富查询 | 内容管理、用户档案、订单 |
| 列族 | 列族 / 宽表 | Cassandra / HBase | 海量横向扩展 | 日志、时序、物联网 |
| 图 | 节点 + 边 | Neo4j / JanusGraph | 多跳关联查询 | 社交、推荐、风控 |
| 搜索 | 倒排索引 | Elasticsearch / Solr | 全文检索、实时分析 | 站内搜索、日志分析 |
三、选型的理论基础:CAP 与 BASE
3.1 CAP 定理
CAP 定理(布鲁尔定理)由 Eric Brewer 于 2000 年提出,2002 年由 Gilbert 与 Lynch 形式化证明:分布式系统中,一致性、可用性、分区容错三者最多只能同时满足两个。
- 一致性 C(Consistency):所有节点同一时刻看到相同数据,读操作返回最近一次写入结果。
- 可用性 A(Availability):每个请求都能在有限时间内得到非错误响应。
- 分区容错 P(Partition Tolerance):网络分区(节点间通信中断)时系统仍能继续运行。
3.2 P 是必选项:CP 与 AP 的权衡
分布式系统必然跨多节点,网络分区客观存在、无法消除,因此 P 不可舍弃。真正的设计决策是在 C 与 A 之间权衡:
- CP(强一致):金融核心、账户余额等场景,宁可短暂拒绝服务也不接受数据不一致。如 HBase、TiKV 等多副本多数派确认。
- AP(最终一致):互联网高并发场景,宁可数据暂时不一致也要保证服务可用。如 Cassandra、DynamoDB。
3.3 BASE 理论
BASE 是对 CAP 中 AP 路线的细化,与关系型的 ACID 相对:
- 基本可用(Basically Available):故障时允许部分功能降级,系统整体保持响应。
- 软状态(Soft State):允许数据在节点间出现短暂不一致。
- 最终一致(Eventually Consistent):在没有新写入的前提下,数据最终会收敛到一致。
3.4 从理论到选型
理论上,数据强相关、一致性要求高的场景优先关系型或 CP 型 NoSQL;对扩展性与吞吐要求高、可接受最终一致的场景优先 AP 型 NoSQL。这把 CAP 取舍映射到具体的业务诉求上。
四、选型框架:从业务需求到技术决策
4.1 关键决策维度
|------------|---------------|---------------------------|
| 维度 | 关注问题 | 决策影响 |
| 数据结构 | 结构化、半结构化还是强关系 | 决定文档 / 列族 / 图 |
| 读写模式 | 读多写少还是海量写入 | 缓存(Redis)vs 列族(Cassandra) |
| 一致性要求 | 能否接受最终一致 | 关系型 / CP vs AP |
| 扩展方式 | 需要水平扩展的规模 | 单机 / 主从 / 分片集群 |
| 查询复杂度 | 是否需多表 / 多跳关联 | 关系型 / 图 |
| 运维成本 | 团队熟悉度与运维投入 | 优先成熟生态 |
4.2 决策流程
- 先定数据模型:结构化强关联 → 关系型;半结构化灵活 → 文档;实体强关系 → 图;热点键值 → 键值;海量写入 → 列族。
- 再定一致性:强一致优先 → 关系型 / CP;最终一致可接受 → AP。
- 最后看扩展与生态:评估集群方案、工具链、团队经验。
4.3 边界:何时仍该用关系型 / NewSQL
并非所有场景都适合 NoSQL。需要复杂关联查询、强一致事务的核心系统,关系型仍是首选。若既要 SQL 与强事务、又要水平扩展,可考虑 NewSQL------它在 SQL 便利性与 NoSQL 可扩展性之间求平衡,代表产品有 TiDB、CockroachDB、OceanBase。NoSQL 的定位是补充与扩展,而非全面替代。
五、本系列路线图
作为第 0 篇导读,本文负责建立认知地图。后续按技术族各开一个 8 篇闭环子系列,读者可按需选读,也可顺序通读形成完整知识闭环。
- Redis 系列(键值)------ 运维度最高,建议先行。
- MongoDB 系列(文档)------ 副本集 / 分片高可用实操强。
- 列族系列(Cassandra / HBase)------ 海量横向扩展。
- 图数据库系列(Neo4j)------ 关系建模。
搜索系列(Elasticsearch)------ 倒排索引 / 日志分析。