后端基础班Day14-深入理解RDBMS | 青训营笔记

75 阅读3分钟

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

本篇笔记主要记录一下深入理解RDBMS的学习知识

1.RDBMS发展历程

  1. 前DBMS时代 - 人工管理
  2. 前DBMS时代 - 文件系统
  3. DBMS时代 按照数据模型特点分为网状数据库、层次数据库、关系数据库三类

DBMS数据模型

  1. 网状模型 - 网状数据库所基于的网状数据模型建立的数据之间的联系,能反映现实世界中信息的关联,是许多空间对象的自然表达形式

image.png

  1. 层次模型 - 使用树形结构来描述实体及其之间关系的数据模型

image.png

  1. 关系模型

image.png

SQL语言:1974年IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL语言

  • 语法风格接近自然语言
  • 高度非过程化
  • 面向集合的操作方式
  • 语言简洁,易学易用

2.关键技术

1.一条SQL的历程

image.png

2.SQL引擎

解析器Parser:一般分为词法分析、语法分析、语义分析等步骤 优化器Optimizer

  • 基于规则的优化 (RBO Rule Base Optimizer)
    • 条件化简
    • 表连接优化,总是小表先进行连接
    • Scan优化,唯一索引、普通索引、全表扫描
  • 基于代价的优化 (CBO Cost Base Optimizer)
  • 一个查询有多种执行方案,CBO会选择其中代价最低的方案去真正的执行 执行器Executor

火山模型

image.png

每个Operator调用Next操作,访问下层Operator,获得下层Operator返回的一行数据,经过计算之后将这行数据返回给上层

  • 优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单
  • 缺点:每计算一条数据有多次函数调用开销,导致CPU效率不高

向量化模型

image.png

每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算子返回一个Batch

优点:

  • 函数调用次数降低为1/N
  • CPU cache命中率更高
  • 可以利用CPU提供的SIMD(Single Instruction Multi Data)机制

编译执行

image.png

3.存储引擎

  • InnoDB
  • Buffer Pool
  • Page
  • B+ Tree

4.事务引擎

  • Atomicity与Undo LogUndo Log是逻辑日志,记录的是数据的增量变化。利用Undo Log可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制 (MVCC) 解决读写冲突和一致性读的问题
  • Lsolation与锁:写写冲突,只允许一个执行
  • Lsolation与MVCC:读写互不阻塞,降低死锁概率,实现一致性读 (MVCC的意义)
  • Durability与Redo LogRedo Log是物理日志,记录的是页面的变化,它的作用是保证事务持久化

3.场景实践

  • 大流量
    • 问题背景:单节点写容易成为瓶颈、单机数据容量上限
    • 解决方案:业务数据进行水平拆分、代理层进行分片路由
    • 实施效果:数据库写入性能线性扩展、数据库容量线性扩展
  • 流量突增
    • 扩容
      • 问题背景:活动流量上涨、集群性能不满足要求
      • 解决方案:扩容DB物理节点数量、利用影子表进行压测
      • 实施效果:数据库集群提供更高的吞吐、保证集群可以承担预期流量
    • 代理连接池
      • 问题背景:突增流量导致大量建联、大量建联导致负载变大,延时上升
      • 解决方案:业务侧预热连接池、代理侧预热连接池、代理侧支持连接队列
      • 实施效果:避免DB被突增流量打死宕机、避免代理和DB被大量建联打死宕机
  • 稳定性&可靠性
    • 3AZ高可用

image.png

    • HA管理

image.png

4.总结

image.png

人生苦短,不如go浪一下。