RDBMS笔记|青训营笔记

92 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记

  1. 基本概念

    RDBMS事务:一组SQL语句组成的一个程序执行单元,满足ACID特性

    • A指原子性:事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生,undo日志实现

    • C指一致性:数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性(比如扣钱不能扣成负数),主要由业务层实现

    • I指隔离性:多个事务并发访问时,事物之间是隔离的,一个事务不应该影响其他事务运行效果,通过锁实现

    • D指持久性:在事务完成后,该事务对数据库做出的更改能持久的保存在数据库之中,并不会被回滚(也就是不会因为宕机等问题丢失),利用redo日志实现

  2. DBMS的发展

    • 传统数据库分为网状数据库、层次数据库和关系数据库
    • SQL语言:核心九个动词CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、CRANT、REVOKE
  3. 关键技术

    • Parser:词法分析(抓取关键词)-->语法分析-->语义分析(合法性校验),将sql语句解析成语法树
    • optimizer: 将语法树转成plan树,基于规则的优化(比如总是先连接小表)、基于代价的优化(比如用时间、资源的使用作为代价)
    • Executor:从文件中读取数据,写数据,读数据,返回数据。火山模型(逐层调用、逐层返回)、向量化(在火山模型的基础上每次返回一批rows)、编译执行(不同算子合在一个函数里) 以上都是SQL引擎

    存储引擎:InnoDB(MySQL中的)

    • In-Memory: Buffer pool(数据缓存),由多个instance组成,每个instance包含多个128M的chunk,每个chunk由16kpage组成。Buffer pool用哈希表根据page_id找到对应的block,用LRU置换走不常访问的页面
    • On-Disk: 系统表(存储元数据)、undo表、redo表 事务引擎:写日志