1、数据库系统概述
1.1 给入门小白洗洗脑
1.1.1 为什么学习数据库内核
- 了解底层
- 出故障救火
- 数据库开发不吃青春饭,越老越吃香
- 未来趋势,国家要防止数据库被老美卡脖子
1.1.2 数据库开发入门难吗
不难。可以从简单的MiniOB的开始,
MiniOB只有几万行,
SQLLite只有二十多万行源码,
还有大神早就写了经典教材
《数据库系统实践》
《数据库系统概念》
而且你们还有我帮你们踩坑。
1.1.3 这篇文章教你什么内容
课程分为两部分。入门与进阶。这篇先带大家入门,该专栏后续还有很多文章带大家深入。
进阶超级超级硬核的~
点击关注不迷路。
1.2 数据库的那些事儿
1.2.1 没有数据库真的让开发头大
1.2.2 数据库要解决什么问题
最大的问题归根结是没有进行抽象。
1.2.3 早期的数据库系统
淘汰原因:描述的世界,结构太死板,不灵活。不够简单,无法提供抽象简单数据库语言,根本原因!
1.2.4 现代主流数据库系统
关系型数据库
关系间可以相互转化,不会丢失语义。
逻辑层关系代数,物理层用关系存储清晰。
NoSQL
解决存储容量不能线性扩展的痛点:提出分布式支持数据库无限线性
底层数据模型:K-V,不需要预定义结构
1.2.5 数据库简史
数据库是图灵奖最多的领域,膜拜数据库之神
数据库简史
MongoDB:在文档上解决特别好
OceanBase:NewSql + HTAP
Amazon Aurora:云上数据库系统
1.2.6 数据库架构
parser:词法分析、语法分析(生成语法树)。
Query result cache:直接对SQL进行硬解析。
resolver:对部分变量进行替换,生成语法树。
plan chache:命中plan chache成功则将其丢到物理执行器Executor中,否则扔到优化器里去
Transformer:进行逻辑优化,比如索引下推。
Optimizer:进行代价优化,从众多物理执行计划选出最优。工业中与transformer进行混杂,选择相对优的执行计划(为了节约时间、不一定会选最优)。
code generator:将多个算子merge,生成更加高效的算子。
日志恢复分为物理日志和逻辑日志。
B+树,平衡二叉树,读写性能均衡算法
2 MiniOB——从底层深入了解数据库实现
2.1 MiniOB介绍
2.1.1 数据库系统学习的难点
2.1.2 MiniOB架构