27 磁盤文件中, 40個bit位的數(shù)據(jù)頭以及真實數(shù)據(jù)是如何存儲的?

磁盤文件中, 40個bit位的數(shù)據(jù)頭以及真實數(shù)據(jù)是如何存儲的?
之前我們已經(jīng)給大家講到了在磁盤上存儲數(shù)據(jù)的時候,每一行數(shù)據(jù)都會有變長字段長度列表,逆序存放這行數(shù)據(jù)里的變長字段的長度,然后會有NULL值列表,對于允許為NULL的字段都會有一個bit位標(biāo)識那個字段是否為NULL,也是逆序排列的。
今天我們接著給大家講每一行數(shù)據(jù)存儲的時候,還得有40個bit位的數(shù)據(jù)頭,這個數(shù)據(jù)頭是用來描述這行數(shù)據(jù)的。
這40個bit位里,第一個bit位和第二個bit位,都是預(yù)留位,是沒任何含義的。
然后接下來有一個bit位是delete_mask,他標(biāo)識的是這行數(shù)據(jù)是否被刪除了,其實看到這個bit位,很多人可能已經(jīng)反映過來了,這么說在MySQL里刪除一行數(shù)據(jù)的時候,未必是立馬把他從磁盤上清理掉,而是給他在數(shù)據(jù)頭里搞1個bit標(biāo)記他已經(jīng)被刪了?
沒錯,其實大家現(xiàn)在看這些數(shù)據(jù)頭,只要先留有一個印象就可以了,知道每一行數(shù)據(jù)都有一些數(shù)據(jù)頭,不同的數(shù)據(jù)頭都是用來描述這行數(shù)據(jù)的一些狀態(tài)和附加信息的。
然后下一個bit位是min_rec_mask,這個bit位大家現(xiàn)在先不用去關(guān)注,他的含義以后我們講到對應(yīng)的內(nèi)容的時候再說,他其實就是說在B+樹里每一層的非葉子節(jié)點里的最小值都有這個標(biāo)記。
接下來有4個bit位是n_owned,這個暫時我們也先不用去管他,他其實就是記錄了一個記錄數(shù),這個記錄數(shù)的作用,后續(xù)我們講到對應(yīng)的概念時會告訴大家的。
接著有13個bit位是heap_no,他代表的是當(dāng)前這行數(shù)據(jù)在記錄堆里的位置,現(xiàn)在大家可能也很難去理解他,這些概念都要結(jié)合后續(xù)的一些內(nèi)容才能理解的,這里只能是初步的給大家介紹下。
然后是3個bit位的record_type,這就是說這行數(shù)據(jù)的類型
0代表的是普通類型,1代表的是B+樹非葉子節(jié)點,2代表的是最小值數(shù)據(jù),3代表的是最大值數(shù)據(jù)
很多朋友可能也不理解這些什么意思,其實我們也現(xiàn)在不用在乎他,因為很多這些概念都是往后在講解索引之類的技術(shù)的時候才會涉及到的。
最后是16個bit的next_record,這個是指向他下一條數(shù)據(jù)的指針。
今天是周五,我們就講這些,大家利用周末復(fù)習(xí)一下我們本周講的這些內(nèi)容,務(wù)必消化吸收,下周咱們繼續(xù)。
End
專欄版權(quán)歸公眾號儒猿技術(shù)窩所有
未經(jīng)許可不得傳播,如有侵權(quán)將追究法律責(zé)任