这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
今日学习关系型数据库(RDBMS)
发展历史
最早出现的是网状模型和层次模型,之后才出现便于使用的关系模型数据库
关键技术
一条sql语句的执行流程:
请求通过路由转发到数据库,数据库收到语句后首先通过 Parser 解析语句,生成的语法树传入优化器 Optimizer产生一个 Plan Tree 给执行器 Executor,执行器对 Data File 进行相关的读写操作和 Log File 的写操作后返回结果
优化器:
- 条件化简
- 表连接优化(小表优先连接)
- 扫描优化(优先级由高到低:唯一索引、普通索引、全表扫描)
- 基于代价的优化(试图使整体的资源占用情况最优)
执行器:
-
火山模型:每个 Operator 调用 Next 操作访问下层 Operator,获得下层一行数据后经计算返回给上层;有点是每个算子独立抽象实现,耦合度低;缺点是计算条查询有多次调用开销,导致cpu效率不高
-
向量化模型:将每个 Operator 每次处理一行数据变为一批数据,局部性更好
存储引擎 InnoDB
页(16kB)是最小数据单位,通过一个 Buffer Pool 缓存数据页
存储数据通过 B+ 树组织起来,通过根据主键形成聚簇索引
事务引擎:
- 原子性通过 Undo Log 实现,可以将数据库回滚到某个修改之前的状态
- 隔离性通过锁和 MVCC(多版本并发控制)实现
- 持久性通过 Redo Log 实现
大流量优化
业务层水平拆分,代理层分片路由,可以对写入性能和存储容量线性扩展
尽量实现可以动态扩容缩容的效果
可以用代理连接池应对请求突增
稳定性&可靠性
3AZ 高可用:三个机房备份
HA管理:自动识别不可用设备和备份启用