| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> mysql——页 -> 正文阅读 |
|
[大数据]mysql——页 |
1.概念
2.页的结构? ? ? ? ?如图所示,页主要包括File Header、Page Header、Infimum+Supremum、User Records、Free Space、Page Directory以及File Trailer 其中: ? ? ? ? File Header:文件头 存储页的通用信息 页跟页之间的双向关联,指针等 ????????Page Header:页头 存储数据页专有的信息? ????????Infimum+Supremum:页中的最小和最大记录 表中的数据都会最小记录大,比最大记录小,相当于数学中的-∞、+∞的概念。 ????????User Records:用户记录 存放用户记录,因为最小最大记录不是用户主动去存储的,所以为了方便管理,把最小和最大记录单独进行管理, ????????Free Space:空闲空间 与User Records是互斥的关系,主要用来记录当前页的剩余空间大小 ????????Page Directory:目录,存储记录在页中的相对位置,为了加快查找,能够查询到记录所在的组 ????????File Trailer:文件尾 校验页是否完整 3.页中存储数据的流程
4.记录的头信息
记录的真实数据(insert语句中插入的内容):
记录的额外信息:
? ? ? ? ? ? ? ? 目录项的作用是快速找到对应的页,在record_type的类型1中使用。
5.删除记录操作对next_record的影响? ? ? ? 记录在页中是根据主键从小到大顺序排列的 ? ? ? ? 记录之间是单向链表,优势是存储空间小,缺点是不能往前遍历 ?由上图可以看出:
?????????需要注意的是,图中显示的是虚线,实际上这条数据并没有被删除,这就产生了垃圾链,原因是为了复用空间,如果将这条数据直接删除的话,会出现如下问题:记录是顺序存储的,删除之后会出现碎片空间,如果不处理,会造成资源浪费,如果处理,后续的记录需要向前移动,会产生性能损耗;如果只是修改了记录的状态,后续恢复时只需要,将上述步骤进行反向操作即可,此时避免了分配空间。 6. Page Directory(页目录)— — 记录在页中的展现? ? ? ? 作用是在页中直接定位记录,提高查找性能 分组规则:????????
?????????上图的分组即为满足分组条件之后分组情况,此时分组1中只有Infimum,分组2中有5条记录,其中最大的是Supremum(依照主键排列,而Supremum是最大的),上图中的Slot即为槽位,也就是page Directory,Slot指向组中最大的那条记录的next_record。 ????????查询:先查询page Directory,使用二分法查找,查到对应的slot即可指定到对应的组,由于组中都是单向链表形式,所以从组中的第一个元素,依次遍历查找即可,因为组中的记录数不多,所以此时效率也不会损耗很多。 7.页满后的插入操作? ?????????插入的时候指定id乱序插入,不使用order by查询出来的结果依然是根据id排序的,存储的时候就是根据主键排序。 ????????如果页已经满了,此时插入新的记录时,会申请一个新的页,此时根据主键排序,进行记录迁移,上图中插入的记录比已有的页中的最大用户记录小,此时会将原id为10的记录迁移到新的页中,而将新插入的id为7的记录插入到原10那个位置。? ????????所以开发过程中在设计表时需要有一个id,设置自增,这样就可以避免因为主键排序导致的记录迁移,从而规避不必要的性能消耗。?? ????????主键自增有一个auto_increment锁,在单体的时候可以保证id唯一,但是分布式部署的时候,多台mysql没法保证id唯一,此时可以使用雪花算法生成唯一id来标记数据唯一,不同库的id相同也没所谓。? ? ? ? ? ?在进行记录迁移的过程中,heap_no也不会发生变化,查找记录根据next_record来查找,不根据heap_no ? **************此文章只是本人学习过程中的学习笔记,不做其他用途,如果有其他意见,欢迎一起讨论,谢谢,侵删************************* |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 0:55:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |