后端基础| 青训营笔记

84 阅读4分钟

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

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

image.png

image.png

image.png

image.png

image.png 高并发 image.png 高可靠 image.png

前DBNS时代
人工管理:
在现代计算机发明出来以前,通过人工的方式进行数据记录和管理 结绳计事、账本、打孔机(效率低)
文件系统
记事本通过文本文件进行记录,就是从纸到文件
DBMS时代
DBMS:按照某种数据模型来组织、存储和管理数据的仓库,分为网状数据库、层状数据库和关系数据库
网状数据库所基于的网状数据模型建立的数据之间的联系,能反映现实世界中信息的关联,是许多空间对象的自然表达形式。

image.png

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

image.png 关系模型

image.png 对比

image.png

SQL(Structred Query Language)结构化查询语言
语法风格接近自然语言;高度非过程化;面向集合的操作方式;语言简洁,易学易用。

image.png

image.png

关键技术:
一条SQL的一生

image.png

SQL引擎
Parser语法解析器:一般分为词法分析、语法分析、语义分析等步骤

image.png

optimizer优化器

image.png 基于规则的优化(ROB)

image.png 数据库索引:是数据库管理系统中辅助数据结构,以协助快速查询、更新数据库表中数据。目前数据库中最常用的索引是通过B+树实现的。
基于代价的优化(CBO)
一个查询由多种执行方案,CBO会选择其中代价最低的方案去真正的执行

image.png excutor执行器
火山模型:

image.png
每个Operator调用next操作,访问下层Operator返回的一行数据,经过计算之后,将这行数据返回给上层
优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单
缺点:每计算一条数据有多次函数调用开销,导致CPU效率不高 向量化

image.png
每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算子返回一个Batch。
优点: ①函数调用次数降低为1/N ; ②CPU cache命中率更高 ; ③可以利用CPU提供的SIMD(Single Instruction Multi Data)机制。
编译执行: 把所有的代码集合到一个大的SQL里面,没有函数的调用

image.png

存储引擎
InnoDB

image.png
Buffer Pool
image.png

image.png
数据库中基本都是使用LRU算法来管理内存空间
Page

image.png
B+ Tree
页面内:页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。
从根到叶:中间节点存储

image.png

事务引擎
原子性和Undo Log image.png
Isolation(隔离性)与锁

image.png

MVCC的意义:
读写互不阻塞;降低死锁概率;实现一致性读。

image.png 一致性
事务结束之后,对数据的修改永久的保存
方案一:事务提交前页面写盘
问题:随机IO(随机访问磁盘),写放大(整个页面都写进去)
方案二: WAL(Write-ahead logging)
redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入磁盘前发生故障,重启MySQL后会根据redo log重做。
企业实践
红包雨挑战:
大流量-Sharding
问题背景: 单节点写容易成为瓶颈 单机数量容量上限
解决方案: 业务数据进行水平拆分 代理层进行分片路由
实施效果: 数据库写入性能线性拓展 数据库容量线性拓展 image.png 流量突增-扩容
活动背景: 活动流量上涨 集群性能不满足要求
解决方案: 扩容DB物理节点数量 利用影子表进行压测
实施效果: 数据库集群提供更高的吞吐 保证集群可以承担预期流量

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

image.png
稳定性&可靠性-3AZ高可用
三个城市建立独立的机房,不同机房之间通过日志同步,代理也会把请
求分配到三个机房之间。

image.png

问题背景: db所在机器异常宕机 db节点异常宕机
解决方案:
ha服务监管、切换宕机节点
代理支持配置热加载
代理自动屏蔽宕机读节点

image.png