数据库系统
一、数据库的第一性原理
1.1 数据问题的本质
在任何信息系统中,核心问题并不是"如何存数据",而是:
如何在时间与规模不断扩大的情况下,可靠、可控、可解释地维护"状态"。
文件系统无法解决以下根本矛盾:
- 状态的**一致性**(多副本、多用户)
- 状态的**演进性**(更新、回滚、历史)
- 状态的**可组合性**(查询、关联)
- 状态的**安全与治理**
数据库系统,正是为了解决"状态管理的系统性复杂度"而诞生的。
二、数据库的四层认知模型(总纲)
数据库的一切复杂性,都可以被收敛到一个稳定的四层抽象模型中:
┌───────────────┐│ 架构层 │ 扩展性 / 并行性 / 可用性├───────────────┤│ 物理层 │ 如何高效执行├───────────────┤│ 逻辑层 │ 用户如何表达意图├───────────────┤│ 理论层 │ 数据如何被形式化└───────────────┘这一模型将全文内容统一到一个稳定坐标系中。
三、理论层:数据如何被形式化
3.1 数据与数据库的抽象
- **数据**:对现实世界对象及其关系的符号化描述
- **数据库**:长期存在、可共享、受控的数据集合
- **DBMS**:数据一致性、完整性、并发性与安全性的执行者
3.2 数据模型:对现实世界的建模工具
数据模型回答的是:我们如何"看待"世界。
- 关系模型:世界是表与表之间的关系
- 实体-联系模型:世界由实体与联系构成
- 对象模型:世界由对象与行为构成
- 半结构化模型:世界是松散、异构、演化的
为什么关系模型胜出?
因为它提供了三点关键优势:
- 数学基础(集合论)
- 查询可组合性
- 实现与物理存储解耦
四、逻辑层:用户如何表达意图
4.1 三层模式与数据独立性
数据库通过抽象屏障来对抗复杂性:
- 物理模式:数据如何存
- 逻辑模式:数据是什么
- 用户模式:用户看到什么
这保证了:
数据的逻辑结构不应被物理实现所绑架。
4.2 关系代数:查询的逻辑语言
关系代数是一种可推导、可变换、可优化的查询表示。
- 选择、投影:过滤与裁剪
- 连接:关系组合
- 并、差、交:集合运算
SQL 的本质:
并非告诉系统"怎么做",而是声明"我想要什么"。
五、物理层:查询如何被高效执行
5.1 查询处理的基本流程
- SQL → 关系代数
- 关系代数 → 查询执行计划
- 执行计划 → 算子流水线
5.2 存储管理与文件组织
数据库并不"相信"操作系统的默认抽象:
- 定长 / 变长记录
- 堆文件 / 顺序文件 / 散列文件
- 聚簇存储
其目标只有一个:
最小化磁盘 IO,最大化局部性。
5.3 连接、排序与聚合的实现哲学
- Nested Loop:通用但昂贵
- Hash Join:以内存换时间
- Sort-Merge:顺序访问友好
设计取舍的本质:
时间、空间与确定性的三角平衡。
六、查询优化:从可能性空间中选择最优
6.1 查询优化的本质
在语义等价的前提下,寻找执行代价最低的路径。
6.2 两类优化思想
- 基于规则:安全但有限
- 基于代价:复杂但通用
代价模型考虑:
- IO
- CPU
- 网络
6.3 统计信息与不确定性
优化从来不是精确科学,而是:
基于概率的工程决策。
七、架构层:数据库如何扩展与演进
7.1 从单机到并行
- IO 并行
- 查询内并行
- 查询间并行
核心挑战:
- 数据倾斜
- 资源竞争
- 同步代价
7.2 从集中式到分布式
扩展带来的不是免费午餐,而是:
一致性、可用性与性能的再平衡。
八、数据库的分化:为什么不再只有关系型
关系数据库解决了"通用问题",但并非所有问题。
| 约束瓶颈 | 架构分化 |
|---|---|
| Schema 刚性 | 文档数据库 |
| 高并发 KV | 键值数据库 |
| 时间序列 | 时序数据库 |
| 对象映射 | 对象数据库 |
这些系统不是"更先进",而是:
在特定维度上放弃通用性,换取极致效率。
九、演进视角下的数据库选型方法论
选型不是"哪个更好",而是:
- 状态规模
- 一致性要求
- 查询模式
- 演进频率
数据库设计,本质是系统架构设计的一部分。
关联内容(自动生成)
- [/中间件/数据库/数据库优化.html](/中间件/数据库/数据库优化.html) 数据库优化与本文档的查询优化、架构层内容密切相关,提供了性能优化的实践指导
- [/中间件/数据库/分布式数据库.html](/中间件/数据库/分布式数据库.html) 分布式数据库扩展了本文档中架构层内容,探讨了数据库扩展与演进的具体实现
- [/中间件/数据库/数据类型.html](/中间件/数据库/数据类型.html) 数据类型是数据库理论层的重要组成部分,与本文档数据模型部分形成补充
- [/中间件/数据库/数据库系统/事务管理/事务.html](/中间件/数据库/数据库系统/事务管理/事务.html) 事务管理是数据库一致性保证的核心机制,与本文档理论层和物理层内容相关
- [/中间件/数据库/数据库系统/数据库设计.html](/中间件/数据库/数据库系统/数据库设计.html) 数据库设计与本文档逻辑层内容密切相关,提供了数据建模和设计的实践方法
- [/中间件/数据库/文档数据库.html](/中间件/数据库/文档数据库.html) 文档数据库是数据库分化的一种具体实现,与本文档第八部分数据库分化内容相关
- [/中间件/数据库/索引.html](/中间件/数据库/索引.html) 索引是数据库物理层的重要组成部分,与本文档物理层内容密切相关
- [/中间件/数据库/mysql/查询优化.html](/中间件/数据库/mysql/查询优化.html) 具体数据库的查询优化实践,与本文档查询优化部分形成理论与实践的结合
- [/数据技术/数据存储.html](/数据技术/数据存储.html) 数据存储技术是数据库物理层的基础,与本文档物理层内容相关
- [/软件工程/架构/系统设计/高并发.html](/软件工程/架构/系统设计/高并发.html) 高并发系统设计中的数据库优化是数据库架构层内容的具体应用