这是我参与「第五届青训营 」笔记创作活动的第26天
深入理解RDBMS
经典案例--比如抖音红包雨
- RDBMS
- 事务(transaction):是由一组SQL语句组成的一个程序执行单元,它需要满足ACID特性.
- ACID
- A原子一致性:事务是一个不可再分割的工作单元,事物中的操作要么都发生,要么都不发生
- C一致性:数据库事物不能破坏关系数据的完整性以及业务逻辑上的一致性
- I隔离性:多个事物并发访问后,事物之间是隔离的,一个事物不应该影响其他事物运行结果
- D持久性:在事物完成以后,该事物所作的更改便持久的保存在数据库中,并不会被回滚
红包雨与几个高要求
- 高并发
- 全国上亿人同时开抢红包,因此需要高并发
- 高可靠
- 在这样大的活动下,高可靠显然也很重要,不然服务器挂了短时间处理不过来
发展历史
人工管理 ---》 文件系 ----》网状模 ---》层次模 ----》关系模
- RDBMS模型比对
-
网状模型
- 优势:能直接描述现实世界
- 存取效率高
- 劣势:结构复杂
- 用户不易使用
- 访问程序设计复杂
-
层次模型
- 优势:结构简单
- 查询效率高
- 可以提供较好的完整性支持
- 劣势:无法表示M:N的关系
- 插入,删除限制多
- 遍历里子节点必须经过父节点
- 访问程序设计复杂
-
关系模型
- 优势:实体与实体间的联系都通过二维表结构表示
- 可以方便的表示M:N关系
- 数据访问路径对用户透明
- 劣势:关联查询效率不够高
- 关系必须规范化
-
在关系模型之后,SQL语句诞生
- 语法风格接近自然语言
- 高度非过程化
- 面向集合的操作方式
- 语言简介,易学易用
关键技术
引擎
- Parser
- 词法分析
- 语法分析
- 语义分析
- Optimizer(优化器
- 进行基于规则的优化
- 条件化简
- 表连接优化
- Scan优化
- 基于代价的优化
- 进行基于规则的优化
- Executor
- 火山模型
- 向量化
- 存储引擎 InnoDB
- 存储引擎 Buffer pool
- 存储引擎 page
- 存储疫情 B+Tree
- 事物引擎
- atomicity与Undo
- Undo log 是逻辑日志,记录的是数据的增量变化。利用Undo Log可以进行事物回滚,从而保证事物的原子性。同时也实现了多版本MVCC
- Isolation与MVCC
- MVCC的意义
- 读写互不阻塞
- 降低死锁概率
- 实现一致性度
- Durability 与 Redo Log
- 如何保证事务结束后对数据的修改永久保存?
- 1.事物提交前页面写盘
- MVCC的意义
- atomicity与Undo
企业实践
大流量
Sharding
- 问题
- 单节点写容易成为瓶颈
- 单机数据容量上限
- 解决方案
- 业务数据进行水平拆分
- 代理层进行分片路由
- 实施效果
- 数据库写入性能线程拓展
- 数据容量线性拓展
扩容
- 问题
- 活动流量上涨
- 集群性能不满足要求
- 解决方案
- 扩容DB物理结点数量
- 利用影子表进行压测
- 实施效果
- 数据库集群提供更高的吞吐
- 保证集群可以承担预期流量
代理连接池
- 问题
- 突增流量导致大量建联
- 大量建联导致负载变大,延时上升
- 方案
- 业务侧预热连接池
- 代理测预热连接池
- 代理测支持连接队列
- 效果
- 避免DB被突增流量打死
- 避免代理和DB被大量建联打死
稳定性&可靠性
- 三机房部署
- proxy
- 监控报警
- HA
HA
- 问题
- db所在机器异常宕机
- db结点异常宕机
- 解决方案
- ha服务监管,切换宕机结点
- 代理支持配置热加载
- 代理自动屏蔽宕机读结点
- 实施效果
- 读结点宕机秒级恢复
- 写结点宕机30s内恢复服务