最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

28 我們每一行的實(shí)際數(shù)據(jù)在磁盤上是如何存儲(chǔ)的?

2023-06-21 21:31 作者:儒猿課堂  | 我要投稿

我們每一行的實(shí)際數(shù)據(jù)在磁盤上是如何存儲(chǔ)的?


之前我們已經(jīng)給大家講過了,一行數(shù)據(jù)在磁盤文件里存儲(chǔ)的時(shí)候,實(shí)際上首先會(huì)包含自己的變長(zhǎng)字段的長(zhǎng)度列表,然后是NULL值列表,接著是數(shù)據(jù)頭,然后接著才是真實(shí)數(shù)據(jù),所以這一次我們就講講真實(shí)數(shù)據(jù)是如何存儲(chǔ)的。


首先我們?cè)诖鎯?chǔ)真實(shí)數(shù)據(jù)的時(shí)候,并沒什么特別的,無非就是按照我們那個(gè)字段里的數(shù)據(jù)值去存儲(chǔ)就行了


比如我們之前說了一個(gè)例子,有一行數(shù)據(jù)是“jack NULL m NULL xx_school”,那么他真實(shí)存儲(chǔ)大致如下所示:


0x09 0x04 00000101 0000000000000000000010000000000000011001 jack m xx_school


剛開始先是他的變長(zhǎng)字段的長(zhǎng)度,用十六進(jìn)制來存儲(chǔ),然后是NULL值列表,指出了誰是NULL,接著是40個(gè)bit位的數(shù)據(jù)頭,然后是真實(shí)的數(shù)據(jù)值,就放在后面。


在讀取這個(gè)數(shù)據(jù)的時(shí)候,他會(huì)根據(jù)變長(zhǎng)字段的長(zhǎng)度,先讀取出來jack這個(gè)值,因?yàn)樗拈L(zhǎng)度是4,就讀取4個(gè)長(zhǎng)度的數(shù)據(jù),jack就出來了;


然后發(fā)現(xiàn)第二個(gè)字段是NULL,就不用讀取了;


第三個(gè)字段是定長(zhǎng)字段,直接讀取1個(gè)字符就可以了,就是m這個(gè)值;


第四個(gè)字段是NULL,不用讀取了;


第五個(gè)字段是變長(zhǎng)字段長(zhǎng)度是9,讀取出來xx_school就可以了。


但是等等,大家覺得真正在磁盤上存儲(chǔ)的時(shí)候,我們那些字符串就是直接這么存儲(chǔ)在磁盤上嗎?


顯然不是的!


實(shí)際上字符串這些東西都是根據(jù)我們數(shù)據(jù)庫(kù)指定的字符集編碼,進(jìn)行編碼之后再存儲(chǔ)的,所以大致看起來一行數(shù)據(jù)是如下所示的:


0x09 0x04 00000101 0000000000000000000010000000000000011001 616161 636320 6262626262


大家會(huì)看到上面,我們的字符串和其他類型的數(shù)值最終都會(huì)根據(jù)字符集編碼,搞成一些數(shù)字和符號(hào)存儲(chǔ)在磁盤上


所以其實(shí)一行數(shù)據(jù)是如何存儲(chǔ)的,我相信大家就都已經(jīng)了解的很清晰了,那么我們今天來給大家簡(jiǎn)單提一下,在實(shí)際存儲(chǔ)一行數(shù)據(jù)的時(shí)候,會(huì)在他的真實(shí)數(shù)據(jù)部分,加入一些隱藏字段,這個(gè)隱藏字段跟后續(xù)的一些內(nèi)容是有關(guān)聯(lián)的,大家先了解一下。


首先有一個(gè)DB_ROW_ID字段,這就是一個(gè)行的唯一標(biāo)識(shí),是他數(shù)據(jù)庫(kù)內(nèi)部給你搞的一個(gè)標(biāo)識(shí),不是你的主鍵ID字段。如果我們沒有指定主鍵和unique key唯一索引的時(shí)候,他就內(nèi)部自動(dòng)加一個(gè)ROW_ID作為主鍵。


接著是一個(gè)DB_TRX_ID字段,這是跟事務(wù)相關(guān)的,他是說這是哪個(gè)事務(wù)更新的數(shù)據(jù),這是事務(wù)ID,這個(gè)后續(xù)我們講解到事務(wù)的時(shí)候會(huì)跟大家說的。


最后是DB_ROLL_PTR字段,這是回滾指針,是用來進(jìn)行事務(wù)回滾的,也是我們后續(xù)在講解事務(wù)的時(shí)候再詳細(xì)說。


所以如果你加上這幾個(gè)隱藏字段之后,實(shí)際一行數(shù)據(jù)可能看起來如下所示:


0x09 0x04 00000101 0000000000000000000010000000000000011001 00000000094C(DB_ROW_ID)00000000032D(DB_TRX_ID) EA000010078E(DB_ROL_PTR) ?616161 636320 6262626262


我給上面幾個(gè)隱藏字段都加了括號(hào)說明了,上面那基本就是最終在磁盤上一行數(shù)據(jù)是長(zhǎng)成什么樣的了


我們?cè)倏纯聪旅娴膱D,大家回憶一下之前我們給大家講解的,當(dāng)你執(zhí)行crud的時(shí)候,先會(huì)把磁盤上的數(shù)據(jù)加載到Buffer Pool里緩存,然后更新的時(shí)候也是更新Buffer Pool的緩存,同時(shí)維護(hù)一堆鏈表。


然后定時(shí)或者不定時(shí)的,根據(jù)flush鏈表和lru鏈表,Buffer Pool里的更新過的臟數(shù)據(jù)就會(huì)刷新到磁盤上去。

? ? ? ? ? ?

好,現(xiàn)在我們?cè)俳Y(jié)合最近講解的一些內(nèi)容思考一下,那么在磁盤上的數(shù)據(jù),每一行數(shù)據(jù)是不是就是類似“0x09 0x04 00000101 0000000000000000000010000000000000011001 00000000094C(DB_ROW_ID)00000000032D(DB_TRX_ID) EA000010078E(DB_ROL_PTR) ?616161 636320 6262626262”這樣的東西?


所以現(xiàn)在我們就初步的把磁盤上的數(shù)據(jù)和內(nèi)存里的數(shù)據(jù)給關(guān)聯(lián)起來了,他每一行數(shù)據(jù)的真實(shí)存儲(chǔ)結(jié)構(gòu)我們就了解了,希望大家能在頭腦里屢清楚這個(gè)他們之間的關(guān)系,其實(shí)這些都是有機(jī)一體的。

End


專欄版權(quán)歸公眾號(hào)儒猿技術(shù)窩所有

未經(jīng)許可不得傳播,如有侵權(quán)將追究法律責(zé)任

28 我們每一行的實(shí)際數(shù)據(jù)在磁盤上是如何存儲(chǔ)的?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
台东县| 禹州市| 鄄城县| 淮安市| 双流县| 澄迈县| 利川市| 邹平县| 连城县| 武宣县| 双辽市| 辉县市| 铜山县| 涡阳县| 莱西市| 铜鼓县| 修水县| 大荔县| 瑞丽市| 凯里市| 垫江县| 松潘县| 仁布县| 安岳县| 福泉市| 大邑县| 平湖市| 河间市| 巍山| 广河县| 清河县| 天峨县| 独山县| 响水县| 富民县| 新化县| 安多县| 全椒县| 桂平市| 罗平县| 儋州市|