27、磁盘文件中,40个bit位的数据头以及真实数据是如何存储的?
00 分钟
2022-8-26

27、磁盘文件中,40个bit位的数据头以及真实数据是如何存储的?

之前我们已经学过了在磁盘上储存数据的时候,每一行数据都会有变长字段长度列表,逆序存放这行数据里的变长字段的长度,然后会有NULL值列表,对于允许为NULL的字段都会有一个bit位标识那个字段是否为NULL,也是逆序排列的。
今天我们继续学习每一行数据存储的时候,还得有40个bit位的数据头,这个数据头是用来描述这行数据的。
这40个bit位里,第一个bit位和第二个bit位,都是预留位,是没任何含义的
然后接下来有一个bit位是delete_mask,他标识的是这行数据是否被删除了,其实看到这个bit位,很多人可能已经反映过来了,这么说在MySQL里删除一行数据的时候,未必是立马把他从磁盘上清理掉,而是给他在数据头了搞1个bit标记他已经被删了?
没错,其实大家现在看这些数据头,只要先留有一个印象就可以了,知道每一行数据都有一些数据头,不同的数据头都是用来描述这行数据的一些状态和附加信息的。
然后下一个bit位是min x_rec_mask,这个bit位大家现在先不用去关注,他的含义以后我们在学习到对应的内容的时候再说,他其实就是说在B+树里每一层的非叶子节点里的最小值都有这个标记。
接下来有4个bit位是n_owned,这个暂时我们也先不用去管他,他其实就是记录了一个记录数,这个记录数的作用,后续我们学习到对应的概念时会告诉大家的。
接着有13个bit位是heap_no,他代表的是当前这行数据在记录堆里的位置,现在大家可能也很难去理解他,这些概念都要结合后续的一些内容才能理解的,,这里只能是初步的给大家介绍下。
然后3个bit位的record_type,这就是说这行数据的类型
0代表的是普通类型,1代表的是B+树非叶子节点,2代表的是最小值数据,3代表的是最大值数据
很多朋友可能也不理解这些是什么意思,其实我们现在也不用在乎他,因为很多这些概念都是往后在学习索引之类的技术的时候才会设计到的。
今天是周六,大家可以利用周末复习一下咱们最近学习的知识,对于我来说只有把这个东西给别人讲清楚了,才算是自己学会了,大家可以模拟一人提问,一人作答。试试看自己是否掌握住了这些知识

评论