深入理解RDBMS | 青训营

33 阅读3分钟
  1. RDBMS 关系型数据库管理系统
    • Transaction ACID
      • Atomicity 原子性 事务要不都发生 要不都不发生
      • Consistency 一致性 不能破坏数据的完整性 不能余额为1 扣10块成功 每个操作都是合法的 业务逻辑的合法性
      • Isolation 隔离性 事务并发之间是隔离的 互不影响 应当类似于串行
      • Durability 持久性 事务完成不会被回滚 持久更改 更新的结果应当永久保留下来
    • 高并发 10亿并发抢红包
    • 高可靠 高可用 服务是可靠的 不能宕机
  2. 数据库发展历史 不重要
    • 人工记账
    • 文件系统 类似于电子记事本
    • 网状数据库 多对多
    • 层次模型(类似于树) 一对多
    • 关系模型
    • SQL语言 Structured Query Language
      • 结构化语言
      • 高度非过程化
      • 语法接近自然语言
  3. 关键技术
    • 一条SQL的一生
      • 解析SQL Parser (语法解析器) 生成AST 语法树
      • 优化器 Optimizer -> Plan ...
    • SQL引擎
      • Parser 词法分析 语法分析(生成语法树) 语义分析(合法性校验)
      • Optimizer 优化器 多条路径的到结果 得到最优实现
        • 基于规则的优化 RBO
          • 条件化简
          • 总是小表进行连接
          • Scan 优化 唯一索引 普通索引 全表扫描
        • 基于代价的优化 CBO
          • 时间为主要代价 时延
          • IO CPU NET MEN 这些也考虑
      • Executor 执行器
        • 向下执行 返回给上层
        • Operator 每个算子(函数)独立实现 没有耦合
        • 缺点 有函数调研开销 导致CPU效率不高
        • 向量化
          • 也就是利用CPU缓存 Batch返回 分批返回 每次操作一批数据
          • CPU的SIMD 一次加完
        • 编译执行
          • LLVM 动态编译执行技术
    • 存储引擎 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
          • 如何保证事务结束后 对数据的修改永久的报错
            • 事务提交前页面写盘 存在随机IO 写放大的问题
          • WAL Write-ahead logging
            • redo log物理日志 记录页面的变化
            • 若数据写入磁盘发生故障 重启MySQL 重做
  4. 企业实践
    • 字节红包雨 大约400w/s 并发量
    • 流量大 流量突增 稳定性
    • 大流量 Sharding 分库分表
      • 单节点写有瓶颈 单机数据容量有限
      • 业务数据进行水平拆分
      • 代理层 进行分片路由
      • 写入性能 容量 线性扩展了
    • 流量突增 扩容
      • 扩容DB物理节点
      • 扩容方案 云原生扩容很快
      • 代理测预热连接缓存 不那么快接触到数据库
    • 稳定性和可靠性
      • 三机房部署
      • proxy 读写分离 限流 分库分表
      • 监控报警
      • HA管理