第五届青训营后端第四天学习笔记| 青训营笔记

65 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

一、本堂课重点内容:

  • InnoDB
  • B+ tree
  • bifeer pool

心态有点崩,没保存,算了接着上面的话题,继续讲,本次文章讲的是InnoDB中B+tree,以及它的一些小细节,不完全,但是是我之前学习的一点梳理

二、InnoDB:

百度百科上说,InnoDB,是MySQL数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL

  • 原理图
  • image.png
  • 因此可以看出来,InnoDB包括buffer pool,事务日志,数据文件等内容,而数据文件的数据结构则是B+tree

三、B+ tree

  • b+ tree是在b树的基础上改进的,先讲解b树比较好,其实就是个m阶平衡树,鉴于树的特性,其搜索比较简单
  • 而B+tree则是搜索只会在叶子结点,因此可以进一步优化,引入b+tree是为了节省储存成本,同时尽可能增快速度,如果只是为了速度,可以采用空间换时间的策略,列表都可以,如果是为了空间,可以用队列,但是搜索简单,增加删除就不方便,选用b+tree是一个综合的考虑

image.png

四、# InnoDB Buffer Pool 缓冲池详解:

image.png

  • 简介:MySQ InnoDB Buffer Pool,从字面意思理解就是:MySQL InnoDB缓冲池,既然是缓冲池,那么里面应该缓存着大量的数据,使CPU读取或者写入数据时,不直接和低速的磁盘打交道,直接和缓冲区进行交互,从而解决了因为磁盘性能慢导致的数据库性能差的问题,弥补了两者之间的速度差异。 本质上是一个缓冲词,类似cache的手段
  • 紧接着上一篇文章的问题,InnoDB 的 buffer pool 是怎么实现页面管理和淘汰的?
    • lru链表:缓存了所有读入内存的数据页,包含三类
      • 1)未修改的页面,可以从该列表中摘除,然后移到free列表中。
      • 2)已修改还未刷新到磁盘的页面。
      • 3)已修改且已经刷新到磁盘的页面,可并为第一类。
    • free链表:空闲内存页(块)列表,需要装载(缓存)磁盘上的数据页的时候,从此列表取内存块。
    • flush链表:在内存中被修改但还没有刷新到磁盘的数据页列表,就是所谓的脏页列表,内存中的数据跟对应的磁盘上的数据不一致,属于该列表的页面同样存在于lru列表中,但反之未必。
    • unzip_lru链表:包含所有解压页。
    • 通过四个链表进行管理,lru算法进行淘汰,储存的时候通过free进行

五、引用参考:

  1. baike.baidu.com/item/MySQL/…
  2. www.360doc.com/content/18/…
  3. zhuanlan.zhihu.com/p/65811829
  4. betheme.net/xiaochengxu…