大數(shù)據(jù)“復(fù)活”記
1496
2025-04-01
GaussDB(DWS)實(shí)時(shí)數(shù)倉(cāng)的數(shù)據(jù)都是存儲(chǔ)在非易失性的存儲(chǔ)設(shè)備上,本文從行存表的存儲(chǔ)結(jié)構(gòu)出發(fā),幫助大家更好的了解GaussDB(DWS)是怎么在物理磁盤(pán)上存儲(chǔ)數(shù)據(jù)的。
行存表的數(shù)據(jù)文(表、索引、cudesc表等文件),被劃分為多個(gè)固定大小的page頁(yè)面(block),每個(gè)page頁(yè)面默認(rèn)大小為8K,頁(yè)面編號(hào)(block number)從0開(kāi)始計(jì)數(shù)。如果當(dāng)前page頁(yè)面已經(jīng)存滿,則在末尾會(huì)新增一個(gè)page,繼續(xù)存儲(chǔ)。
行存表的page頁(yè)面主要由page header(頁(yè)頭)、空閑空間、數(shù)據(jù)heap tuple組成,下圖展示了page頁(yè)頭各個(gè)字段的存儲(chǔ)信息:
pd_lsn:本頁(yè)面最后一次變更所寫(xiě)入的xlog記錄對(duì)應(yīng)的lsn。
pd_checksum:主要用于校驗(yàn)頁(yè)面的完整性,避免數(shù)據(jù)由于磁盤(pán)、IO等原因?qū)е庐惓!?/p>
pd_flags:表示頁(yè)面狀態(tài)。
pd_lower:執(zhí)行l(wèi)ine pointers末尾,也就是空閑空間的起始位置。
pd_uppder:指向最后一個(gè)tuple,也就是空閑空間的結(jié)束為止。
pd_special:用在索引頁(yè)中,在索引頁(yè)中它指向特殊空間的起始位置,在堆表頁(yè)面中它指向頁(yè)尾。
pd_pagesize_version:頁(yè)面大小以及頁(yè)面版本號(hào)。
pd_prune_xid:該xid主要用于頁(yè)面內(nèi)清理
line pointers:該指針數(shù)據(jù)指向每一個(gè)對(duì)應(yīng)的tuple,也表示每個(gè)tuple在頁(yè)內(nèi)的偏移offset。
那么頁(yè)頭在存儲(chǔ)數(shù)據(jù)過(guò)程中,有什么作用呢,下面通過(guò)tuple插入的過(guò)程,給大家展示下一些頁(yè)頭信息時(shí)如何更新的
(1)假設(shè)有一張表僅包含了一個(gè)tuple,那么該page header的pd_lower指向line pointers的第一個(gè)。在line pointers末尾和最后一個(gè)tuple之前的空間被稱為free space。為了能夠唯一確定頁(yè)內(nèi)的tuple,常用ctid(block number, offset)唯一確定對(duì)應(yīng)的tuple。
(2)當(dāng)插入第二個(gè)tuple,則生成line pointer遞增,并指向第二個(gè)tuple。與此同時(shí),pd_lower、pd_upper更新對(duì)應(yīng)的指向,具體可見(jiàn)下圖說(shuō)明。
由此可見(jiàn),隨著數(shù)據(jù)的插入,頁(yè)頭信息也在不斷實(shí)時(shí)更新。
總結(jié):當(dāng)然GaussDB(DWS)數(shù)據(jù)庫(kù)不僅僅只有行存這一種存儲(chǔ)格式,還有另外一種列存存儲(chǔ)格式,后續(xù)的文章中我們會(huì)對(duì)列存頁(yè)面結(jié)構(gòu)跟大家進(jìn)行講解說(shuō)明,對(duì)GaussDB(DWS)數(shù)據(jù)庫(kù)底層數(shù)據(jù)存儲(chǔ)有一個(gè)全面的認(rèn)識(shí)。
數(shù)據(jù)倉(cāng)庫(kù)服務(wù) GaussDB(DWS) Gauss AP EI企業(yè)智能
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。