关系型数据库 | 青训营笔记

69 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

今日学习关系型数据库(RDBMS)

发展历史

最早出现的是网状模型和层次模型,之后才出现便于使用的关系模型数据库

image.png

关键技术

一条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管理:自动识别不可用设备和备份启用