專(zhuān)利名稱(chēng):基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)庫(kù)存儲(chǔ)方法,尤其涉及一種基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,屬于數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù)領(lǐng)域。
背景技術(shù):
隨著數(shù)據(jù)庫(kù)應(yīng)用規(guī)模的擴(kuò)展,需要管理的數(shù)據(jù)規(guī)模也越來(lái)越大,普通的數(shù)據(jù)庫(kù)查詢(xún)優(yōu)化機(jī)制在某些情況下已不能滿(mǎn)足性能要求。利用數(shù)據(jù)庫(kù)分區(qū)技術(shù),可以有效減少數(shù)據(jù)吞吐(I/O)量,提升系統(tǒng)查詢(xún)性能。
數(shù)據(jù)庫(kù)分區(qū)是一種物理數(shù)據(jù)庫(kù)設(shè)計(jì)技術(shù),其主要目的是為了在特定的SQL操作中減少數(shù)據(jù)吞吐的總量以縮減響應(yīng)時(shí)間。在數(shù)據(jù)庫(kù)分區(qū)技術(shù)中,對(duì)于一個(gè)大的數(shù)據(jù)表,既可以選擇進(jìn)行水平分區(qū),也可以選擇進(jìn)行垂直分區(qū)。其中,水平分區(qū)在主流的數(shù)據(jù)庫(kù)產(chǎn)品中都得到了實(shí)現(xiàn),垂直分區(qū)一般要靠數(shù)據(jù)庫(kù)設(shè)計(jì)人員自行實(shí)現(xiàn)。
垂直分區(qū)通過(guò)對(duì)表的垂直劃分來(lái)減少目標(biāo)表的寬度,使某些特定的列被劃分到特定的分區(qū),每個(gè)分區(qū)都包含了其中的列所對(duì)應(yīng)的行。使用垂直分區(qū)主要利用了數(shù)據(jù)庫(kù)應(yīng)用對(duì)數(shù)據(jù)表中字段訪(fǎng)問(wèn)的如下特性
(1)字段訪(fǎng)問(wèn)頻率的不均勻性即某些字段訪(fǎng)問(wèn)特別頻繁,其他字段則訪(fǎng)問(wèn)的較少。
(2)應(yīng)用對(duì)字段訪(fǎng)問(wèn)的聚集性即數(shù)據(jù)庫(kù)應(yīng)用中的查詢(xún)傾向于一起訪(fǎng)問(wèn)某些字段,如a、b、c三列總是一起訪(fǎng)問(wèn);d、e兩列總是一起訪(fǎng)問(wèn)。
(3)字段訪(fǎng)問(wèn)順序的依賴(lài)性即數(shù)據(jù)庫(kù)應(yīng)用中的查詢(xún)按照某個(gè)特定的順序訪(fǎng)問(wèn)字段,例如訪(fǎng)問(wèn)d、e字段前總是先訪(fǎng)問(wèn)a、b、c字段。
在數(shù)據(jù)庫(kù)應(yīng)用對(duì)數(shù)據(jù)表的訪(fǎng)問(wèn)滿(mǎn)足以上特性之一時(shí),使用垂直分區(qū)可以使訪(fǎng)問(wèn)/ 修改這些列的查詢(xún)不再需要訪(fǎng)問(wèn)/修改其他無(wú)關(guān)列,從而減少數(shù)據(jù)吞吐(I/O)量。
目前,主流的垂直分區(qū)技術(shù)均是基于行拆分的原則,即根據(jù)分區(qū)列將一行元組拆成多個(gè)獨(dú)立的元組存儲(chǔ)在不同的子表中。對(duì)于僅需要訪(fǎng)問(wèn)某個(gè)子表的查詢(xún),這種存儲(chǔ)方式能夠有效降低數(shù)據(jù)吞吐(I/O)量,但對(duì)于需要訪(fǎng)問(wèn)跨多個(gè)子表的列時(shí),由于涉及到多個(gè)子表的連接,導(dǎo)致分區(qū)比較大時(shí)嚴(yán)重影響數(shù)據(jù)庫(kù)的性能。發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法。該存儲(chǔ)方法可以實(shí)現(xiàn)提高數(shù)據(jù)表的命中率,提高數(shù)據(jù)庫(kù)緩存的利用率,降低IO訪(fǎng)問(wèn)。
為實(shí)現(xiàn)上述的發(fā)明目的,本發(fā)明采用下述的技術(shù)方案
一種基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)表被分為若干個(gè)分區(qū),其中最先訪(fǎng)問(wèn)的第一個(gè)分區(qū)為主分區(qū),其特征在于所述主分區(qū)內(nèi)記錄有后面一個(gè)或多個(gè)分區(qū)的行指針。
較優(yōu)地,所述主分區(qū)內(nèi)記錄有后面一個(gè)分區(qū)的行指針,且除最后一個(gè)分區(qū)之外,其他分區(qū)均記錄有下一個(gè)分區(qū)的行指針。
較優(yōu)地,所述主分區(qū)內(nèi)記錄有后面所有分區(qū)的行指針。
較優(yōu)地,所述行指針指向所述分區(qū)中相應(yīng)的分區(qū)元組。
較優(yōu)地,所述主分區(qū)的每一個(gè)元組包含有下一個(gè)分區(qū)的與所述主分區(qū)的所述元組相對(duì)應(yīng)的元組的行指針。
較優(yōu)地,所述主分區(qū)的每一個(gè)元組包含有所有分區(qū)的與所述主分區(qū)的所述元組相對(duì)應(yīng)的元組的行指針。
較優(yōu)地,所述主分區(qū)包含頻繁訪(fǎng)問(wèn)/更新的列,最后一個(gè)分區(qū)包含不頻繁訪(fǎng)問(wèn)或通過(guò)索引即可訪(fǎng)問(wèn)的列。
較優(yōu)地,最后一個(gè)分區(qū)包含不需要訪(fǎng)問(wèn)的索引列。
較優(yōu)地,所述主分區(qū)包含頻繁訪(fǎng)問(wèn)/更新的列,后面所有分區(qū)分別包含訪(fǎng)問(wèn)頻度差異性不大的不同列。
與現(xiàn)有技術(shù)相比較,本發(fā)明中涉及的垂直分區(qū)技術(shù)更加靈活。通過(guò)兩種基于行指針的垂直分區(qū)表的存儲(chǔ)方式,實(shí)現(xiàn)了在多數(shù)情況僅需訪(fǎng)問(wèn)主分區(qū),部分情況下訪(fǎng)問(wèn)主分區(qū)就能夠直接跳到其他分區(qū)的元組,僅需要訪(fǎng)問(wèn)特定的分區(qū),而跳過(guò)其它的不必要分區(qū)的訪(fǎng)問(wèn),有效提高了跨分區(qū)訪(fǎng)問(wèn)時(shí)的效率。
下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。
圖1是鏈型元組存儲(chǔ)結(jié)構(gòu)的示意圖2是星型元組存儲(chǔ)結(jié)構(gòu)的示意圖3是鏈型垂直分區(qū)的存儲(chǔ)結(jié)構(gòu)示意圖4是星型垂直分區(qū)的存儲(chǔ)結(jié)構(gòu)示意圖。
具體實(shí)施方式
在數(shù)據(jù)庫(kù)技術(shù)中,將數(shù)據(jù)表中的行作為元組,列作為字段。一個(gè)數(shù)據(jù)表由行(元組)和列(字段)構(gòu)成,組成一個(gè)二維關(guān)系表。若干個(gè)數(shù)據(jù)表、視圖及相關(guān)的文件等組成一個(gè)統(tǒng)一的相關(guān)聯(lián)的數(shù)據(jù)庫(kù)系統(tǒng)。為了解決基于行拆分的垂直分區(qū)技術(shù)帶來(lái)的跨表操作需要進(jìn)行表連接的問(wèn)題,本發(fā)明在子元組間通過(guò)指向存儲(chǔ)磁盤(pán)存儲(chǔ)位置的指針進(jìn)行順次連接或一對(duì)多連接等多種方式的連接,使得在訪(fǎng)問(wèn)數(shù)據(jù)表的不同列時(shí),僅需要訪(fǎng)問(wèn)特定的分區(qū),而跳過(guò)其它的不必要分區(qū)的訪(fǎng)問(wèn),從而節(jié)省了數(shù)據(jù)吞吐(IO)量。在數(shù)據(jù)庫(kù)應(yīng)用中,根據(jù)該應(yīng)用對(duì)數(shù)據(jù)表的數(shù)據(jù)訪(fǎng)問(wèn)特點(diǎn),靈活地設(shè)計(jì)基于行指針的垂直分區(qū)表結(jié)構(gòu)及各分區(qū)元組間的連接方式,從而提高數(shù)據(jù)庫(kù)應(yīng)用過(guò)程中對(duì)數(shù)據(jù)庫(kù)緩存的利用率,達(dá)到降低IO訪(fǎng)問(wèn)的效果。
為此,本發(fā)明中使用了兩種元組存儲(chǔ)結(jié)構(gòu)一對(duì)一的鏈型(chain)元組存儲(chǔ)結(jié)構(gòu)和一對(duì)多的星型(star)元組存儲(chǔ)結(jié)構(gòu)。如圖1所示,在一對(duì)一的鏈型元組存儲(chǔ)結(jié)構(gòu)中,垂直分區(qū)的元組通過(guò)行指針順次連接在一起,訪(fǎng)問(wèn)后面的分區(qū)需要通過(guò)訪(fǎng)問(wèn)前面分區(qū)里存儲(chǔ)的行指針進(jìn)行。如圖2所示,在一對(duì)多的星型元組存儲(chǔ)結(jié)構(gòu)中,垂直分區(qū)的首個(gè)元組存儲(chǔ)所有其它子元組的行指針,訪(fǎng)問(wèn)后面的元組僅需要通過(guò)訪(fǎng)問(wèn)首個(gè)元組相應(yīng)的行指針進(jìn)行。
基于上述的兩種元組存儲(chǔ)結(jié)構(gòu),本發(fā)明可以實(shí)現(xiàn)兩種垂直分區(qū)存儲(chǔ)方式鏈型垂直分區(qū)存儲(chǔ)方式和星型垂直分區(qū)存儲(chǔ)方式。這兩種垂直分區(qū)存儲(chǔ)方式均要求首先訪(fǎng)問(wèn)數(shù)據(jù)表的主分區(qū),并且主分區(qū)內(nèi)記錄有后面一個(gè)(鏈型垂直分區(qū)存儲(chǔ)方式)或多個(gè)(星型垂直分區(qū)存儲(chǔ)方式)分區(qū)的行指針。在需要訪(fǎng)問(wèn)多個(gè)垂直分區(qū)時(shí),根據(jù)垂直分區(qū)之間的索引關(guān)系,通過(guò)行指針直接定位到相應(yīng)的分區(qū)元組。
如圖3所示,鏈型垂直分區(qū)存儲(chǔ)方式是將一個(gè)數(shù)據(jù)表分為若干個(gè)分區(qū),其中第一個(gè)分區(qū)為主分區(qū)。除最后一個(gè)分區(qū)外的每個(gè)分區(qū)均需要記錄下一個(gè)分區(qū)的行指針。主分區(qū)的每一個(gè)元組包含有下一個(gè)分區(qū)的與主分區(qū)的元組相對(duì)應(yīng)的元組的行指針。在圖3中,分區(qū)1 (主分區(qū))的第一元組(位于圖3中分區(qū)1中的上方的元組)中包含有,與分區(qū)2中第一元組相對(duì)應(yīng)的行指針。類(lèi)似的,分區(qū)1中的第二元組(位于圖3中分區(qū)1中的中部的元組)中包含有與分區(qū)2中第二元組相對(duì)應(yīng)的行指針。分區(qū)1中的第三元組(位于圖3中分區(qū)1中的下方的元組)中包含有與分區(qū)2中第三元組相對(duì)應(yīng)的行指針。同樣,分區(qū)2的第一元組中包含有與分區(qū)3中第一元組相對(duì)應(yīng)的行指針;第二元組中包含有與分區(qū)3中第二元組相對(duì)應(yīng)的行指針;第三元組中包含有與分區(qū)3中第三元組相對(duì)應(yīng)的行指針。
在這種存儲(chǔ)方式下,當(dāng)訪(fǎng)問(wèn)主分區(qū)的列時(shí),同拆分列的垂直分區(qū)相同,因此僅需要訪(fǎng)問(wèn)主分區(qū)即可。當(dāng)訪(fǎng)問(wèn)分區(qū)的列時(shí),需要首先訪(fǎng)問(wèn)主分區(qū),然后根據(jù)行指針依次往后找到所需的分區(qū)元組。當(dāng)分區(qū)比較靠后(第三個(gè)分區(qū)或第三個(gè)分區(qū)之后)時(shí),這種存儲(chǔ)方式需要多次訪(fǎng)問(wèn)前面分區(qū)的訪(fǎng)問(wèn)接口,有些得不償失。因此,這種存儲(chǔ)方式適用于數(shù)據(jù)庫(kù)應(yīng)用的列訪(fǎng)問(wèn)階段性差異比較大的情況,這時(shí)可以將頻繁訪(fǎng)問(wèn)的列放到第一個(gè)分區(qū)(即主分區(qū)),將次頻繁訪(fǎng)問(wèn)的列放到第二個(gè)分區(qū),將不頻繁訪(fǎng)問(wèn)、根本不會(huì)訪(fǎng)問(wèn)或通過(guò)索引即可訪(fǎng)問(wèn)(需要確保應(yīng)用使用索引掃描)的列,即訪(fǎng)問(wèn)頻度差異性不大的多個(gè)列,放到后面的分區(qū)中。
如圖4所示,星型垂直分區(qū)存儲(chǔ)方式是將一個(gè)數(shù)據(jù)表分為若干個(gè)分區(qū),其中第一個(gè)分區(qū)為主分區(qū),需要記錄后面所有分區(qū)的行指針,其它分區(qū)則不需要記錄行指針的信息。 主分區(qū)的每一個(gè)元組包含有,所有分區(qū)的與主分區(qū)的元組相對(duì)應(yīng)的元組的行指針。具體而言,在圖4中分區(qū)1(主分區(qū))中第一元組(位于圖4的分區(qū)1中的上方的元組),依次包含有后面所有分區(qū),分區(qū)2、分區(qū)3直到分區(qū)η的第一元組的行指針。分區(qū)1中第二元組依次包含有后面所有分區(qū)的第二元組的行指針。分區(qū)1中的第η元組依次包含有后面所有分區(qū)的第η元組的行指針。
在這種存儲(chǔ)方式下,主分區(qū)存儲(chǔ)的內(nèi)容相比鏈型垂直分區(qū)存儲(chǔ)方式有所增多,需要存儲(chǔ)多個(gè)行指針的信息。但與鏈型垂直分區(qū)存儲(chǔ)方式相比,星型垂直分區(qū)存儲(chǔ)方式對(duì)于后面分區(qū)的訪(fǎng)問(wèn),僅僅需要多一次主分區(qū)訪(fǎng)問(wèn)的數(shù)據(jù)讀寫(xiě)過(guò)程。因此,這種存儲(chǔ)方式適用于某些列訪(fǎng)問(wèn)較頻繁,其余列訪(fǎng)問(wèn)相對(duì)較少,但列訪(fǎng)問(wèn)模式又比較分散的情況,例如有時(shí)訪(fǎng)問(wèn)這幾列、有時(shí)訪(fǎng)問(wèn)那幾列的情況。換言之,主分區(qū)包含頻繁訪(fǎng)問(wèn)/更新的列,后面所有分區(qū)分別包含訪(fǎng)問(wèn)頻度差異性不大的不同列。
這兩種垂直分區(qū)存儲(chǔ)方式各自有其優(yōu)缺點(diǎn)。例如對(duì)于鏈型垂直分區(qū)存儲(chǔ)方式而言,當(dāng)訪(fǎng)問(wèn)后面的分區(qū)時(shí),需要首先訪(fǎng)問(wèn)前面的分區(qū),這樣對(duì)于后面分區(qū)的訪(fǎng)問(wèn)可能造成多次數(shù)據(jù)讀寫(xiě)過(guò)程。對(duì)于星型垂直分區(qū)存儲(chǔ)方式而言,訪(fǎng)問(wèn)非主分區(qū)都需要發(fā)生一次訪(fǎng)問(wèn)主分區(qū)的額外數(shù)據(jù)讀寫(xiě)過(guò)程,但對(duì)于僅訪(fǎng)問(wèn)主分區(qū)的列的情況,則不會(huì)引起訪(fǎng)問(wèn)分區(qū)的數(shù)據(jù)讀寫(xiě)過(guò)程。同時(shí),星型垂直分區(qū)存儲(chǔ)方式不需要為每個(gè)垂直分區(qū)子表均建立索引,僅需要對(duì)垂直分區(qū)的主分區(qū)表建立索引即可。特別地,索引列可以存放在后面的分區(qū)中,以減少主分區(qū)元組的大小。索引列的值可以直接通過(guò)索引元組字段獲得,而不需要訪(fǎng)問(wèn)索引列所在內(nèi)存堆(heap)的分區(qū)。
鏈型垂直分區(qū)存儲(chǔ)方式和星型垂直分區(qū)存儲(chǔ)方式可以在同一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)中并存。用戶(hù)可以根據(jù)鏈型垂直分區(qū)和星型垂直分區(qū)中數(shù)據(jù)表的不同存儲(chǔ)方式,結(jié)合數(shù)據(jù)庫(kù)應(yīng)用中對(duì)數(shù)據(jù)表的列的訪(fǎng)問(wèn)特點(diǎn),決定每個(gè)數(shù)據(jù)表在數(shù)據(jù)庫(kù)中的最優(yōu)存儲(chǔ)方式,從而達(dá)到數(shù)據(jù)庫(kù)檢索時(shí)能夠節(jié)省數(shù)據(jù)吞吐(IO)量,同時(shí)避免表連接操作的效果。
下面,以TPCC(基準(zhǔn)測(cè)試)應(yīng)用中的(^customer表為例,具體闡述本發(fā)明的實(shí)施步驟及其效果
1.首先,判斷(^customer表是否需要進(jìn)行垂直分區(qū),以及進(jìn)行垂直分區(qū)所采用的具體存儲(chǔ)方式。經(jīng)過(guò)研究,確認(rèn)該表應(yīng)該進(jìn)行垂直分區(qū),具體理由如下
(1) c_customer表中的一個(gè)元組平均占543個(gè)字節(jié),c_data列即占404個(gè)字節(jié),且訪(fǎng)問(wèn)頻率很小。
(2) c_customer表的列數(shù)很多,但訪(fǎng)問(wèn)上比較有聚集性。
(3) c_customer表的訪(fǎng)問(wèn)具有一定的規(guī)律性,列之間訪(fǎng)問(wèn)頻率差異很大,少數(shù)列的訪(fǎng)問(wèn)頻率達(dá)到80%以上
2.選擇進(jìn)行垂直分區(qū)所采用的具體存儲(chǔ)方式
由于少數(shù)列訪(fǎng)問(wèn)頻率達(dá)到80%,故把這些列放到主分區(qū)后,要求主分區(qū)元組應(yīng)該盡量小。同時(shí)列訪(fǎng)問(wèn)聚集性較高,但無(wú)法明確分成若干類(lèi),不適合星型垂直分區(qū)存儲(chǔ)方式, 應(yīng)該使用鏈型垂直分區(qū)存儲(chǔ)方式。
3.進(jìn)行具體分區(qū)的劃分
參照分區(qū)原則,可以確定如下的分區(qū)劃分方法
(l)c_data由于比較大,且訪(fǎng)問(wèn)頻率小,比較獨(dú)立,最好單獨(dú)分一個(gè)分區(qū),且放到最后一個(gè)分區(qū)。
(2)對(duì)于訪(fǎng)問(wèn)頻率達(dá)到80%的列c_delivery_cnt和c_balance,可以都放到第一個(gè)分區(qū),同時(shí)列(3_1&計(jì),(3_1(1訪(fǎng)問(wèn)頻率較高,也可以放到第一個(gè)分區(qū)。
(3)其余各列相對(duì)訪(fǎng)問(wèn)比較集中,但有一些列的訪(fǎng)問(wèn)模式比較散(即不固定地被多個(gè)查詢(xún)?cè)L問(wèn)),可以統(tǒng)一放到第二個(gè)分區(qū)。
(4)由于索引的存在,c_W_ic^nc_d_id這兩個(gè)索引列從來(lái)不會(huì)被從內(nèi)存堆(heap) 上訪(fǎng)問(wèn)到,且所占空間較小,可與c_data—同放到最后一個(gè)分區(qū)。
依照上面的分區(qū)劃分方法進(jìn)Sccustomer表的劃分后,可以計(jì)算出第一個(gè)分區(qū)的元組長(zhǎng)度為40字節(jié),第二個(gè)分區(qū)的元組長(zhǎng)度為1 個(gè)字節(jié),第三個(gè)分區(qū)的元組長(zhǎng)度為408 個(gè)字節(jié)。
在數(shù)據(jù)庫(kù)應(yīng)用中,選定查詢(xún)計(jì)劃后會(huì)首先掃描獲得(^customer表的主分區(qū)元組。 對(duì)于大多數(shù)查詢(xún)來(lái)說(shuō),通過(guò)該主分區(qū)元組即可獲得需要操作的列,不需要訪(fǎng)問(wèn)后面的分區(qū)。 對(duì)于部分查詢(xún)來(lái)說(shuō),需要讀取第二個(gè)分區(qū)的元組進(jìn)行操作。對(duì)于極少數(shù)的查詢(xún),才需要訪(fǎng)問(wèn)到C_data字段,需要讀取第三個(gè)分區(qū)。
在針對(duì)(^customer表的實(shí)際測(cè)試中,通過(guò)iostat磁盤(pán)工具觀(guān)察到每秒讀扇區(qū)數(shù)從50000降到了 35000,每秒寫(xiě)扇區(qū)數(shù)從15000降到了 10000左右。觀(guān)察命中率時(shí),發(fā)現(xiàn) c_customer三個(gè)分區(qū)的命中率分別是0. 94,0. 73,0. 76,兩個(gè)索引的命中率分別是0. 99,0. 97,這說(shuō)明所使用的鏈型垂直分區(qū)存儲(chǔ)方式解決了原先C_CUStomer表命中率過(guò)低的問(wèn)題。
在使用本發(fā)明所提供的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法后,多個(gè)垂直分區(qū)子表對(duì)用戶(hù)來(lái)說(shuō)是透明的。用戶(hù)使用順序掃描或索引掃描得到的均是主分區(qū)的元組,然后,根據(jù)查詢(xún)需要訪(fǎng)問(wèn)的列來(lái)決定是否需要繼續(xù)掃描哪些元組。對(duì)于鏈型垂直分區(qū)存儲(chǔ)方式而言,訪(fǎng)問(wèn)第η 個(gè)分區(qū)的元組需要訪(fǎng)問(wèn)所有前面η-1個(gè)分區(qū)的元組,通過(guò)每個(gè)分區(qū)的行指針找到后面分區(qū)的元組,依此類(lèi)推。對(duì)于星型垂直分區(qū)存儲(chǔ)方式而言,訪(fǎng)問(wèn)第η個(gè)分區(qū)的元組僅需要通過(guò)主分區(qū)中存儲(chǔ)該分區(qū)元組的行指針即可直接定位。相應(yīng)地,更新列的過(guò)程如果僅涉及個(gè)別幾個(gè)分區(qū),也只需要在這幾個(gè)分區(qū)上進(jìn)行更新即可。
上述的技術(shù)解決方案提供了在數(shù)據(jù)庫(kù)應(yīng)用中節(jié)省IO操作、提高效率的一種有效途徑。用戶(hù)還可以依據(jù)上面提到的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,根據(jù)數(shù)據(jù)庫(kù)應(yīng)用的具體要求來(lái)判定是否定義類(lèi)似垂直分區(qū)的數(shù)據(jù)表來(lái)提升性能。具體來(lái)說(shuō),使用基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)需要滿(mǎn)足以下條件
1.數(shù)據(jù)表的列比較多,或個(gè)別字段的長(zhǎng)度比較大,如果集中存儲(chǔ)會(huì)造成訪(fǎng)問(wèn)比較隨機(jī);
2.數(shù)據(jù)庫(kù)應(yīng)用對(duì)數(shù)據(jù)表的訪(fǎng)問(wèn)模式基本確定,即可以根據(jù)數(shù)據(jù)表的訪(fǎng)問(wèn)的統(tǒng)計(jì)信息確定數(shù)據(jù)表中每個(gè)字段的訪(fǎng)問(wèn)模式及頻率;
3.根據(jù)對(duì)數(shù)據(jù)表的訪(fǎng)問(wèn)模式,可以推測(cè)出數(shù)據(jù)表的列的訪(fǎng)問(wèn)存在比較大的差異性。
在進(jìn)行基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)劃分時(shí)需要遵循以下原則
1.查詢(xún)/更新語(yǔ)句訪(fǎng)問(wèn)的頻度較高的列應(yīng)該盡可能放在前面的分區(qū)中;
2.對(duì)于列訪(fǎng)問(wèn)頻度差異非常大的數(shù)據(jù)庫(kù)應(yīng)用,應(yīng)優(yōu)先考慮鏈型垂直分區(qū)存儲(chǔ)方式;對(duì)于列訪(fǎng)問(wèn)頻度差異不大、但不同查詢(xún)?cè)L問(wèn)不同列的數(shù)據(jù)庫(kù)應(yīng)用,應(yīng)優(yōu)先考慮星型垂直分區(qū)存儲(chǔ)方式;
3.對(duì)于同一查詢(xún)中涉及的列,盡量集中存儲(chǔ)在同一個(gè)分區(qū)中;
4.對(duì)于更新的列,應(yīng)盡量存儲(chǔ)在同一個(gè)分區(qū)中,且盡量靠前;
5.如果數(shù)據(jù)庫(kù)應(yīng)用中使用索引掃描,則不需要從內(nèi)存堆(heap)中訪(fǎng)問(wèn)索引列。對(duì)于不需要訪(fǎng)問(wèn)的索引列,則可以放到最后一個(gè)分區(qū)。
6.劃分過(guò)程中應(yīng)盡量避免劃分過(guò)小的數(shù)據(jù)表,因?yàn)閯澐忠粋€(gè)數(shù)據(jù)表需要多出存儲(chǔ)行指針的空間。如果劃分的數(shù)據(jù)表中元組不超過(guò)行指針大小或基本持平,則無(wú)分區(qū)的必要。
以上對(duì)本發(fā)明所提供的基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法進(jìn)行了詳細(xì)的說(shuō)明。對(duì)本領(lǐng)域的技術(shù)人員而言,在不背離本發(fā)明實(shí)質(zhì)精神的前提下對(duì)它所做的任何顯而易見(jiàn)的改動(dòng),都將構(gòu)成對(duì)本發(fā)明專(zhuān)利權(quán)的侵犯,將承擔(dān)相應(yīng)的法律責(zé)任。
權(quán)利要求
1.一種基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)表被分為若干個(gè)分區(qū),其中最先訪(fǎng)問(wèn)的第一個(gè)分區(qū)為主分區(qū),其特征在于所述主分區(qū)內(nèi)記錄有后面一個(gè)或多個(gè)分區(qū)的行指針。
2.如權(quán)利要求1所述的基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,其特征在于所述主分區(qū)內(nèi)記錄有后面一個(gè)分區(qū)的行指針,且除最后一個(gè)分區(qū)之外,其他所述分區(qū)均記錄有下一個(gè)分區(qū)的行指針。
3.如權(quán)利要求1所述的基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,其特征在于 所述主分區(qū)內(nèi)記錄有后面所有分區(qū)的行指針。
4.如權(quán)利要求2或3所述的基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,其特征在于 所述行指針指向所述分區(qū)中相應(yīng)的分區(qū)元組。
5.如權(quán)利要求2所述的基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,其特征在于 所述主分區(qū)的每一個(gè)元組包含有下一個(gè)分區(qū)的與所述主分區(qū)的所述元組相對(duì)應(yīng)的元組的行指針。
6.如權(quán)利要求3所述的基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,其特征在于 所述主分區(qū)的每一個(gè)元組包含有所有分區(qū)的與所述主分區(qū)的所述元組相對(duì)應(yīng)的元組的行指針。
7.如權(quán)利要求2所述的基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,其特征在于所述主分區(qū)包含頻繁訪(fǎng)問(wèn)/更新的列,最后一個(gè)分區(qū)包含不頻繁訪(fǎng)問(wèn)或通過(guò)索引即可訪(fǎng)問(wèn)的列。
8.如權(quán)利要求7所述的基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,其特征在于 最后一個(gè)分區(qū)包含不需要訪(fǎng)問(wèn)的索引列。
9.如權(quán)利要求3所述的基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法,其特征在于所述主分區(qū)包含頻繁訪(fǎng)問(wèn)/更新的列,后面所有分區(qū)分別包含訪(fǎng)問(wèn)頻度差異性不大的不同列。
全文摘要
本發(fā)明公開(kāi)了一種基于行指針的數(shù)據(jù)庫(kù)垂直分區(qū)存儲(chǔ)方法。在該方法中,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)表被分為若干個(gè)分區(qū),其中最先訪(fǎng)問(wèn)的第一個(gè)分區(qū)為主分區(qū),在主分區(qū)內(nèi)記錄有后面一個(gè)或多個(gè)分區(qū)的行指針。與現(xiàn)有技術(shù)相比較,本發(fā)明通過(guò)兩種基于行指針的垂直分區(qū)表的存儲(chǔ)方式,實(shí)現(xiàn)了在多數(shù)情況僅需訪(fǎng)問(wèn)主分區(qū),部分情況下訪(fǎng)問(wèn)主分區(qū)就能夠直接跳到其他分區(qū)的元組,僅需要訪(fǎng)問(wèn)特定的分區(qū),而跳過(guò)其它的不必要分區(qū)的訪(fǎng)問(wèn),有效提高了跨分區(qū)訪(fǎng)問(wèn)時(shí)的效率。
文檔編號(hào)G06F17/30GK102521282SQ20111038222
公開(kāi)日2012年6月27日 申請(qǐng)日期2011年11月25日 優(yōu)先權(quán)日2011年11月25日
發(fā)明者馮玉, 冷建全, 李祥凱, 李茂增, 楊尚, 王穎澤 申請(qǐng)人:北京人大金倉(cāng)信息技術(shù)股份有限公司