MySQL - 深入理解RDBMS | 青训营笔记

59 阅读3分钟

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

今日内容

学习完了青训营课程 后端入门 - 存储与数据库 中的 RDBMS 基本情况介绍RDBMS 关键技术分析 和 RDBMS 企业实践案例 之后的一些总结。

课程内容

  1. 经典案例
  2. 发展历史
  3. 关键技术
  4. 企业实践

1. 经典案例

事务 ACID

事务(Transaction)是由一组 sql 语句组成的一个程序执行单元,它需要满足 ACID 特性

对于 ACID 的理解和高并发高可靠

2. 发展历史

  • 人工
  • 文件系统
  • DBMS
    • 网状模型
      • 优点:能直接描述现实世界;存储效率高
      • 缺点:结构复杂;用户不易使用;访问程序设计复杂
    • 层次模型
      • 优点:结构简单;查询效率高;可以提供较好的完整性支持
      • 缺点:无法表示 M:N 的关系;插入删除限制多;遍历子节点必须经过父节点;访问程序设计复杂
    • 关系模型
      • 优点:实体及实体之间的联系都通过二维结构表示;可以方便表示 M:N 关系;数据访问路径对用户透明
      • 缺点:关联查询效率不高;关系必须规范化

sql 语言

3. 关键技术

一条 sql 的一生

image.png

Parser

解析器(Parser)一般分为词法分析、语法分析、语义分析等步骤

Optimizer

为什么需要优化器(Optimizer)?效率问题

  • 基于规则的优化
  • 表连接优化
  • Scan 优化
  • 基于代价的优化

Executor

  • 火山模型:每个 Optimizer 调用 Next 操作,访问下层 Operator,获得下层 Operator 返回的一行数据,经过计算后,将这行数据返回给上层
    • 优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单
    • 缺点:每计算一条数据有多次函数调用开销,导致 CPU 效率不高
    • 向量化:批量处理数据
    • 编译执行:将所有的操作封装到一个函数里面,函数调用的代价也会降低

InnoDB

涉及到数据库存储的细节

  • 存储引擎
    • Buffer Pool
    • Page
    • B+ Tree

事务引擎

  • Atomicity 与 Undo Log
  • Isolation 与锁
  • Isolation 与 MVCC
  • Durability 与 Redo Log

4. 企业实践

大流量 - Sharding

  • 问题背景
    • 单节点容易成为瓶颈
    • 单机数据容量上限
  • 解决方案
    • 业务数据进行水平拆分
    • 代理层进行分片路由
  • 实施效果
    • 数据库写入性能线性扩展
    • 数据库容量线性扩展

流量突增 - 扩容

  • 问题背景
    • 活动流量上涨
    • 集群性能不满足要求
  • 解决方案
    • 扩容 DB 物理节点数量
    • 利用影子表进行压测
  • 实施效果
    • 数据库集群提供更高的吞吐
    • 保证集群可以承担预期流量

流量突增 - 代理连接池

  • 问题背景
    • 突增流量导致大量建联
    • 大量建联导致负载变大,延时上升
  • 解决方案
    • 业务侧预热连接池
    • 代理侧预热连接池
    • 代理侧支持连接队列
  • 实施效果
    • 避免 DB 被流量突增打死
    • 避免代理和 DB 被大量建联打死