深入理解RDBMS | 青训营
- RDBMS 关系型数据库管理系统
- Transaction ACID
- Atomicity 原子性 事务要不都发生 要不都不发生
- Consistency 一致性 不能破坏数据的完整性 不能余额为1 扣10块成功 每个操作都是合法的 业务逻辑的合法性
- Isolation 隔离性 事务并发之间是隔离的 互不影响 应当类似于串行
- Durability 持久性 事务完成不会被回滚 持久更改 更新的结果应当永久保留下来
- 高并发 10亿并发抢红包
- 高可靠 高可用 服务是可靠的 不能宕机
- 数据库发展历史 不重要
- 人工记账
- 文件系统 类似于电子记事本
- 网状数据库 多对多
- 层次模型(类似于树) 一对多
- 关系模型
- SQL语言 Structured Query Language
- 关键技术
- 一条SQL的一生
- 解析SQL Parser (语法解析器) 生成AST 语法树
- 优化器 Optimizer -> Plan ...
- SQL引擎
- Parser 词法分析 语法分析(生成语法树) 语义分析(合法性校验)
- Optimizer 优化器 多条路径的到结果 得到最优实现
- 基于规则的优化 RBO
- 条件化简
- 总是小表进行连接
- Scan 优化 唯一索引 普通索引 全表扫描
- 基于代价的优化 CBO
- 时间为主要代价 时延
- IO CPU NET MEN 这些也考虑
- Executor 执行器
- 向下执行 返回给上层
- Operator 每个算子(函数)独立实现 没有耦合
- 缺点 有函数调研开销 导致CPU效率不高
- 向量化
- 也就是利用CPU缓存 Batch返回 分批返回 每次操作一批数据
- CPU的SIMD 一次加完
- 编译执行
- 存储引擎 InnoDB
- In-Memory
- Buffer Pool
- page 16k -> chunk 128M -> instance
- 通过HashMap找 page_id block
- LRU 磁盘数据远大于内存 内存数据淘汰
- LRU(
Least Recently Used)算法是一种常见的页面置换算法
- Page
- 变长字段列表 NULL值标志位 Header ......
- Change Buffer
- Adaptive Hash Index
- Log Buffer
- On-Disk
- 系统表 元数据
- General Tablespaces
- Undo Table....
- B+ tree 作为索引使用
- 事务引擎
- Atomicity
- 如何将数据库回退到修改之前的状态
- 通过 Undo Log 实现 (逻辑日志)
- 记录数据增量的变化
- 也实现了 MVCC
- Isolation
- 通过锁机制实现
- 读锁 Share Lock
- 写锁 Exclusive Lock
- 同时读写呢??
- MVCC
- roll ptr连接了Record(真实数据里)和Undo Segemnt(老版本数据)
- MVCC意义
- Durability与Redo Log
- 如何保证事务结束后 对数据的修改永久的报错
- WAL Write-ahead logging
- redo log物理日志 记录页面的变化
- 若数据写入磁盘发生故障 重启MySQL 重做
- 企业实践
- 字节红包雨 大约400w/s 并发量
- 流量大 流量突增 稳定性
- 大流量 Sharding 分库分表
- 单节点写有瓶颈 单机数据容量有限
- 业务数据进行水平拆分
- 代理层 进行分片路由
- 写入性能 容量 线性扩展了
- 流量突增 扩容
- 扩容DB物理节点
- 扩容方案 云原生扩容很快
- 代理测预热连接缓存 不那么快接触到数据库
- 稳定性和可靠性
- 三机房部署
- proxy 读写分离 限流 分库分表
- 监控报警
- HA管理