[后端与RDBMS核心技术2|青训营笔记]

29 阅读2分钟

这是我参与[第五届青训营]笔记创作活动的第12天 本文主要想对课堂上学的一些内容进行总结整理。今天学习的是关系型数据的核心技术中的存储引擎及其分析。

一、本堂课重点内容

  1. 存储引擎

二、详细知识点介绍

存储引擎

概况

MySQL中使用的存储引擎是innoDB

innoDB分为两部分

In-Memory:

  • Buffer Pool(做为数据缓存的一部分)
  • Change Buffer
  • Adaptive Hash Index
  • Log Buffer(日志先写入Buffer再写入磁盘)

On-Disk:

  • System Tablespace(ibdata1)(数据库使用时需存元数据,元信息(表名、列名、用户及权限等)一般存在系统表中)
  • General Tablespaces(xxx.ibu)(存普通数据的普通表)
  • Undo Tablespaces(xxx.ibu)(存Undo日志)
  • Temporary Tablespaces(xxx.ibt)(存)
  • Redo Log(ib_logfileN)

内存态做一部分数据缓存,因为访问内存和磁盘代价不同。磁盘一部分用于存储元信息,用户的真实数据和事务所用的日志等。

Buffer Pool

Buffer Pool一般被分为多个instance(16k小内存空间),可以降低页面访问的冲突。

Buffer Pool管理:

Hash Map,LRU(磁盘一般要远大于内存,磁盘的数据量远大于内存能容纳的数据量。LRU算法保留最近最常使用的数据保留下来,把其余的内存释放。)

每个小内存空间(page)

  • Page Header(120B)
  • UserRecords
  • Free Space
  • Page Directory(列表)
  • FIL Trailer(8B)

Header一般包含

  • delete_mask:用于标识此条数据是否被删除。
  • next_record:记录下一条数据的位置。
  • record_type:表示当前记录的类型。

B+ Tree

B+Tree一般用于索引,是B Tree的扩展。在页面先通过二分查找快速定位对应的槽,再遍历(从根到叶)该槽中对应分组中的记录找到指定的记录。叶子节点间通过双向链表串联,不管是点查还是范围查都可以快速查询。