您的位置:首页 > 期货 > 正文
27 磁盘文件中, 40个bit位的数据头以及真实数据是如何存储的?
来源:哔哩哔哩      2023-06-21 22:56:27

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


【资料图】

之前我们已经给大家讲到了在磁盘上存储数据的时候,每一行数据都会有变长字段长度列表,逆序存放这行数据里的变长字段的长度,然后会有NULL值列表,对于允许为NULL的字段都会有一个bit位标识那个字段是否为NULL,也是逆序排列的。

今天我们接着给大家讲每一行数据存储的时候,还得有40个bit位的数据头,这个数据头是用来描述这行数据的。

这40个bit位里,第一个bit位和第二个bit位,都是预留位,是没任何含义的。

然后接下来有一个bit位是delete_mask,他标识的是这行数据是否被删除了,其实看到这个bit位,很多人可能已经反映过来了,这么说在MySQL里删除一行数据的时候,未必是立马把他从磁盘上清理掉,而是给他在数据头里搞1个bit标记他已经被删了?

没错,其实大家现在看这些数据头,只要先留有一个印象就可以了,知道每一行数据都有一些数据头,不同的数据头都是用来描述这行数据的一些状态和附加信息的。

然后下一个bit位是min_rec_mask,这个bit位大家现在先不用去关注,他的含义以后我们讲到对应的内容的时候再说,他其实就是说在B+树里每一层的非叶子节点里的最小值都有这个标记。

接下来有4个bit位是n_owned,这个暂时我们也先不用去管他,他其实就是记录了一个记录数,这个记录数的作用,后续我们讲到对应的概念时会告诉大家的。

接着有13个bit位是heap_no,他代表的是当前这行数据在记录堆里的位置,现在大家可能也很难去理解他,这些概念都要结合后续的一些内容才能理解的,这里只能是初步的给大家介绍下。

然后是3个bit位的record_type,这就是说这行数据的类型

0代表的是普通类型,1代表的是B+树非叶子节点,2代表的是最小值数据,3代表的是最大值数据

很多朋友可能也不理解这些什么意思,其实我们也现在不用在乎他,因为很多这些概念都是往后在讲解索引之类的技术的时候才会涉及到的。

最后是16个bit的next_record,这个是指向他下一条数据的指针。

今天是周五,我们就讲这些,大家利用周末复习一下我们本周讲的这些内容,务必消化吸收,下周咱们继续。

End

专栏版权归公众号儒猿技术窝所有

未经许可不得传播,如有侵权将追究法律责任

财经

Copyright @ 2008-2017 news.dfce.com.cn All Rights Reserved 东方财经网 版权所有 关于我们

联系我们:dfcjw@sohu3.com