專利名稱::一種用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種數(shù)據(jù)庫(kù)存儲(chǔ)方法,尤其涉及一種用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,屬于數(shù)據(jù)庫(kù)存儲(chǔ)
技術(shù)領(lǐng)域:
。
背景技術(shù):
:關(guān)系型數(shù)據(jù)庫(kù)是一個(gè)用以存儲(chǔ)及處理結(jié)構(gòu)化數(shù)據(jù)的軟件系統(tǒng),其數(shù)據(jù)分為兩個(gè)層次一是邏輯數(shù)據(jù),它是由數(shù)據(jù)表、記錄等組成;另一是物理數(shù)據(jù),它代表數(shù)據(jù)庫(kù)怎樣存儲(chǔ)邏輯數(shù)據(jù)。實(shí)現(xiàn)數(shù)據(jù)庫(kù)物理數(shù)據(jù)的方法有兩種一種是基于行存儲(chǔ),另一種是基于列存儲(chǔ)。對(duì)于基于行存儲(chǔ)的實(shí)現(xiàn)方法,它是把邏輯數(shù)據(jù)的整條記錄存儲(chǔ)到數(shù)據(jù)塊中,為了提高查詢速度,要為某些列建立B+樹(shù)等類型的索引;對(duì)于基于列存儲(chǔ)的實(shí)現(xiàn)方法,邏輯數(shù)據(jù)中的記錄不直接按條映射到物理數(shù)據(jù)中,而是把記錄按列分開(kāi),把所有記錄的相同列的值存在一起,同時(shí)提供連接數(shù)據(jù),用于把不同記錄的相應(yīng)的列值重新組合起來(lái)形成記錄。隨著企業(yè)及政府信息化的不斷深入,數(shù)據(jù)庫(kù)應(yīng)用的復(fù)雜性日益增強(qiáng)。這些需求推動(dòng)著數(shù)據(jù)庫(kù)技術(shù)向海量和智能的方向發(fā)展。同時(shí),數(shù)據(jù)倉(cāng)庫(kù)和在線分析等應(yīng)用迫切需要實(shí)時(shí)高效的數(shù)據(jù)處理技術(shù)。傳統(tǒng)的基于行存儲(chǔ)的數(shù)據(jù)庫(kù)技術(shù)已經(jīng)出現(xiàn)了技術(shù)瓶頸。如何在快速執(zhí)行復(fù)雜查詢的同時(shí),還能縮小存儲(chǔ)空間和節(jié)約成本是目前數(shù)據(jù)庫(kù)技術(shù)研究的熱點(diǎn)問(wèn)題。列數(shù)據(jù)庫(kù)是基于列存儲(chǔ)技術(shù)、主要面向企業(yè)決策分析領(lǐng)域的關(guān)系型數(shù)據(jù)庫(kù)。列存儲(chǔ)技術(shù)的特點(diǎn)是數(shù)據(jù)查詢效率高,讀磁盤(pán)少,存儲(chǔ)空間少,是構(gòu)建數(shù)據(jù)倉(cāng)庫(kù)的理想架構(gòu)。列數(shù)據(jù)庫(kù)的應(yīng)用價(jià)值來(lái)自于它對(duì)復(fù)雜查詢的快速響應(yīng)以及數(shù)據(jù)壓縮所帶來(lái)的存儲(chǔ)優(yōu)勢(shì),使其在企業(yè)決策分析、數(shù)據(jù)倉(cāng)庫(kù)、商業(yè)智能等應(yīng)用領(lǐng)域具有良好的發(fā)展前景。根據(jù)美國(guó)Gartner公司在2010年1月發(fā)布的關(guān)于數(shù)據(jù)倉(cāng)庫(kù)的分析報(bào)告列數(shù)據(jù)庫(kù)與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)相比,在數(shù)據(jù)分析方面表現(xiàn)出卓越的性能。因此,列數(shù)據(jù)庫(kù)的技術(shù)研究和產(chǎn)品開(kāi)發(fā)在學(xué)術(shù)界和工業(yè)界受到廣泛關(guān)注。目前,開(kāi)源的列數(shù)據(jù)庫(kù)有C-More,rasdaman,MonetDB等,商用列數(shù)據(jù)庫(kù)有SykiseIQ、VerticaAnalyticDatabase、ParAccelAnalyticDatabase、EXASOLEXASolution等。近5年來(lái),在國(guó)際一流的數(shù)據(jù)庫(kù)會(huì)議如VLDB、SIGM0D、ICDE上有關(guān)列數(shù)據(jù)庫(kù)領(lǐng)域的優(yōu)秀論文也頻頻出現(xiàn)。在申請(qǐng)?zhí)枮?00810187227.6的中國(guó)發(fā)明專利申請(qǐng)中,公開(kāi)了一種實(shí)現(xiàn)基于列存儲(chǔ)的關(guān)系型數(shù)據(jù)庫(kù)的方法及裝置,包括建立數(shù)據(jù)文件,并對(duì)組成數(shù)據(jù)文件的數(shù)據(jù)塊按順序編序列號(hào);定義表段;將記錄插入到表段中;對(duì)于插入到表段中的記錄生成表段內(nèi)唯一的記錄標(biāo)識(shí)號(hào),并將記錄按列分開(kāi);對(duì)于記錄中的每一個(gè)列,執(zhí)行如下操作將列值和記錄標(biāo)識(shí)號(hào)作為值數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)塊中并按列值大小排序;將記錄標(biāo)識(shí)號(hào)和存儲(chǔ)值數(shù)據(jù)的數(shù)據(jù)塊的序列號(hào)作為連接數(shù)據(jù)存儲(chǔ)到新的數(shù)據(jù)塊中,并按記錄標(biāo)識(shí)號(hào)大小排序;對(duì)存儲(chǔ)值數(shù)據(jù)的數(shù)據(jù)塊和存儲(chǔ)連接數(shù)據(jù)的數(shù)據(jù)塊建立索引,生成索引數(shù)據(jù)塊。該方法是對(duì)存儲(chǔ)值數(shù)據(jù)的數(shù)據(jù)塊和存儲(chǔ)連接數(shù)據(jù)的數(shù)據(jù)塊建立索引,而不是對(duì)屬于同一元組的不同列或列集合之間建立索引。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法。利用該存儲(chǔ)方法可以提高列數(shù)據(jù)庫(kù)的查詢效率,并減小存儲(chǔ)空間。為實(shí)現(xiàn)上述的發(fā)明目的,本發(fā)明采用下述的技術(shù)方案一種用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,所述列數(shù)據(jù)庫(kù)包括多個(gè)由行和列構(gòu)成的數(shù)據(jù)表,所述數(shù)據(jù)表被劃分為多個(gè)列集合,所述列集合包括一個(gè)或多個(gè)列,并且所述列集合的并集構(gòu)成所述數(shù)據(jù)表,其特征在于所述列集合兩兩之間建立連接索引,所述連接索引記錄建立了連接索引的兩個(gè)列集合中,屬于所述數(shù)據(jù)表的同一元組的列的存儲(chǔ)位置的一一對(duì)應(yīng)關(guān)系。其中較優(yōu)地,對(duì)每個(gè)列集合,按照屬于所述數(shù)據(jù)表的同一元組的、兩個(gè)列集合中的列的存儲(chǔ)位置值,建立連接索引;將所述連接索引對(duì)應(yīng)存儲(chǔ)到所述每個(gè)列集合中,并與所述每個(gè)列集合中的所述列對(duì)應(yīng)。其中較優(yōu)地,如果兩個(gè)列集合包含重復(fù)列,則按照所述重復(fù)列,對(duì)所述兩個(gè)列集合的行進(jìn)行排序并存儲(chǔ);如果兩個(gè)列集合沒(méi)有重復(fù)列,則將所述兩個(gè)列集合的行,分別按照查詢條件來(lái)排序并存儲(chǔ)。其中較優(yōu)地,對(duì)于沒(méi)有重復(fù)列的所述兩個(gè)列集合,如果邏輯順序相同則不建立連接索引,如果邏輯順序不相同則建立連接索引。其中較優(yōu)地,對(duì)于有重復(fù)列的所述兩個(gè)列集合,不建立連接索引。其中較優(yōu)地,估計(jì)每個(gè)執(zhí)行計(jì)劃所需的代價(jià),根據(jù)最優(yōu)代價(jià)選擇連接索引。其中較優(yōu)地,在判斷所述數(shù)據(jù)表的全部列都出現(xiàn)在所述多個(gè)列集合的并集中的時(shí)候,為每個(gè)列集合創(chuàng)建物化視圖,完成列集合的創(chuàng)建。其中較優(yōu)地,在建立連接索引的過(guò)程中還包括下述列集合加載步驟步驟1在所述數(shù)據(jù)表加載數(shù)據(jù);步驟2物化全部列集合物化視圖,包括物化每個(gè)列集合的存儲(chǔ)位置;步驟3:建立連接索引;步驟4刪除所述數(shù)據(jù)表的數(shù)據(jù);步驟5刪除不需要的存儲(chǔ)位置值。本發(fā)明打破了列存儲(chǔ)需要保持屬于同一邏輯元組的列值在每列中的位置相同的限制,使得本單表多列序存儲(chǔ)方法增加了使用上的靈活性。本發(fā)明可以根據(jù)報(bào)表類應(yīng)用的查詢來(lái)劃分最佳順序的投影以增強(qiáng)性能,也能根據(jù)連接索引處理Ad-Hoc(點(diǎn)對(duì)點(diǎn))類的查詢而不損失性能。下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。圖1顯示了一個(gè)應(yīng)用本單表多列序存儲(chǔ)方法的數(shù)據(jù)庫(kù)項(xiàng)目的示例;圖2是圖1所示的數(shù)據(jù)庫(kù)項(xiàng)目中,顯示存儲(chǔ)位置值的示意圖3是圖1所示的數(shù)據(jù)庫(kù)項(xiàng)目中,表明連接索引的示意圖4是本單表多列序存儲(chǔ)方法中,創(chuàng)建列集合的操作步驟示意圖5是在圖1所示的實(shí)施例中,所建立的連接索引的示意圖6是在圖1所示的實(shí)施例中,使用連接索引還原邏輯元組的示意圖。具體實(shí)施方式本發(fā)明使用關(guān)系數(shù)據(jù)庫(kù)的邏輯數(shù)據(jù)模型每個(gè)關(guān)系(relation)是一個(gè)二維表(table),由行(tuple,也稱元組)和列(attribute,也稱字段)構(gòu)成。在此基礎(chǔ)上,本發(fā)明使用基于列集合的物理組織來(lái)實(shí)現(xiàn)邏輯數(shù)據(jù)模型。下面首先介紹“列集合”的具體含義。列集合每個(gè)列集合都屬于一個(gè)關(guān)系,邏輯上列集合是它所屬關(guān)系的一個(gè)垂直子集;物理上包含這個(gè)關(guān)系的一個(gè)或多個(gè)列并和所屬關(guān)系有相同的行數(shù)。如果列集合所屬的關(guān)系和另一個(gè)關(guān)系是多對(duì)一的關(guān)系,列集合中也可以包含另一個(gè)關(guān)系中的列。列集合之間可以重復(fù)包含同一列,也可相互沒(méi)有重復(fù)列。換句話說(shuō),列集合之間的列可以重疊,可以包含多個(gè)數(shù)據(jù)表的相同列。屬于同一關(guān)系的所有列集合中的、列的并集就是該關(guān)系列的集合,這些列就組成了這個(gè)關(guān)系。列集合中使用列存儲(chǔ),并可以按照列集合中的一列或幾列來(lái)進(jìn)行排序。這樣的組織方式可以省去索引的存儲(chǔ)開(kāi)銷并提供針對(duì)查詢的優(yōu)化空間。在存儲(chǔ)過(guò)程中,可以使用多種列存儲(chǔ)壓縮方式,例如RLE(行程長(zhǎng)度編碼)等。另外,可以使用分段存儲(chǔ)的方式提高壓縮效率。本發(fā)明提供一種用于0LAP(聯(lián)機(jī)分析處理)場(chǎng)景的列存儲(chǔ)物理組織方式,能使用較少的存儲(chǔ)空間并提供更多的優(yōu)化靈活性。為此,在本發(fā)明所提供的單表多列序存儲(chǔ)方法中,首先將要存儲(chǔ)的數(shù)據(jù)表作為基表,劃分為多個(gè)列的集合。同時(shí)使用存儲(chǔ)位置值(storagekey)的連接建立連接索引(joinindex)。該連接索引用于記錄不同列集合之間列值的一一對(duì)應(yīng)關(guān)系。列集合通過(guò)連接其他列集合的連接索引可以獲得該列集合中列值在基表中對(duì)應(yīng)的其他列值,以便重建邏輯上的一條元組。存儲(chǔ)位置值可以根據(jù)實(shí)際需要而設(shè)定,例如可以是基表中哈希列的哈希值等。該列集合是基表的一個(gè)垂直劃分,包含一個(gè)或多個(gè)列,和基表有相同的行數(shù)。另外,列集合也可以包含其他與基表有一對(duì)多關(guān)系的數(shù)據(jù)表的列。由于本發(fā)明打破了列存儲(chǔ)需要保持屬于同一邏輯元組的列值在每列中的位置需要相同的限制,使得本單表多列序存儲(chǔ)方法可以增加使用上的靈活性。本發(fā)明可以根據(jù)報(bào)表類應(yīng)用的查詢來(lái)劃分最佳順序的投影以增強(qiáng)性能,例如在圖6中,首先進(jìn)行姓名的投影,再根據(jù)連接索引找到對(duì)應(yīng)的所在系。實(shí)現(xiàn)這個(gè)過(guò)程的前提是連接索引中記錄的是列集合所在系在列集合姓名中的存儲(chǔ)位置。因此,在每個(gè)列集合中都要存儲(chǔ)連接索引,記錄本列集合中的行在另一個(gè)列集合中的位置,即本列集合中的行與另一個(gè)列集合中的哪一行對(duì)應(yīng),也能根據(jù)連接索引處理Ad-Hoc(點(diǎn)對(duì)點(diǎn))類的查詢而不損失性能。本發(fā)明的單表多列序存儲(chǔ)方法,在列集合兩兩之間建立連接索引,連接索引記錄了,建立了連接索引的兩個(gè)列集合中,屬于數(shù)據(jù)表的同一元組的列的存儲(chǔ)位置的一一對(duì)應(yīng)關(guān)系。對(duì)每個(gè)列集合,按照屬于數(shù)據(jù)表的同一元組的、兩個(gè)列集合中的列的存儲(chǔ)位置值,建立連接索引,將連接索引對(duì)應(yīng)存儲(chǔ)到每個(gè)列集合中,并與每個(gè)列集合中的相應(yīng)列的值對(duì)應(yīng)。這樣,即使每個(gè)列集合進(jìn)行了重新排序,連接索引的值隨之而排序,也就不會(huì)影響列集合的屬于同一元組的列之間的對(duì)應(yīng)關(guān)系。下面,以一個(gè)應(yīng)用單表多列序存儲(chǔ)方法的數(shù)據(jù)庫(kù)項(xiàng)目為例,具體闡述本發(fā)明的實(shí)施步驟及其效果。該數(shù)據(jù)庫(kù)示例是用于高等院校教學(xué)管理工作的數(shù)據(jù)庫(kù)。如圖1所示,按學(xué)號(hào)排序的列集合1(學(xué)號(hào),姓名,性別,年齡)和按所在系排序的列集合2(學(xué)號(hào),所在系)組成了學(xué)生關(guān)系,列集合3中包含了課程中的列。如圖2所示,列集合中的每列的每個(gè)值都有一個(gè)存儲(chǔ)位置值,具有同一存儲(chǔ)位置值的列構(gòu)成一條邏輯元組。這個(gè)存儲(chǔ)位置值可以不采用物理存儲(chǔ)方式。如圖3所示,由于組成關(guān)系的列集合可以按照不同的列排序,在基表中具有同一存儲(chǔ)位置值的列值,可能在不同的列集合中處于不同的位置。如圖3中學(xué)號(hào)為20070026的記錄,在列集合2中位于第1行;在列集合1中位于第2行。使用連接索引標(biāo)記這種位置關(guān)系,可以在不能確定物理存儲(chǔ)位置時(shí),找出與存儲(chǔ)位置值相同的列值,進(jìn)而通過(guò)在不同的列集合上建立連接索引,可以按照某列的順序獲得邏輯元組。例如,連接索引(即圖3中右上方的“對(duì)應(yīng)位置”)標(biāo)記了,列集合2中第1行與列集合中的第2行對(duì)應(yīng)。通過(guò)以上的說(shuō)明可知,邏輯順序相同的兩個(gè)列集合間可以不需要連接索引。如果兩個(gè)列集合包含重復(fù)列,則按照該重復(fù)列,對(duì)兩個(gè)列集合的行進(jìn)行排序并存儲(chǔ);如果兩個(gè)列集合沒(méi)有重復(fù)列,則將兩個(gè)列集合的行,分別按照查詢條件來(lái)排序并存儲(chǔ)。沒(méi)有重復(fù)列的兩個(gè)列集合,如果邏輯順序相同則不建立連接索引,如果邏輯順序不相同則建立連接索引。有重復(fù)列的兩個(gè)列集合,因?yàn)槠渑判蛳嗤瑒t不需要連接索引。圖4顯示了本單表多列序存儲(chǔ)方法中,創(chuàng)建列集合的操作步驟。首先,根據(jù)列集合定義判斷列表是否為空。如果列表為空則返回,如果列表不為空則取列集合,進(jìn)一步判斷基表部分的列是否在基表列集合A中,如果結(jié)果為是則將列并入列集合B中,如果結(jié)果為否則反饋錯(cuò)誤信息。接下來(lái),進(jìn)一步檢查每個(gè)沒(méi)引用其他表的列集合中的列是否屬于基表?每個(gè)引用其他表的列集合中的列是否屬于引用表,引用表和基表是否有主外鍵關(guān)系?包含列是否屬于列表X?是否有其它列集合包含了基表的列(即是否基表的全部列都出現(xiàn)在列集合中)?在以上檢查的結(jié)果均為是的情況下,將被包含的列并入列集合B中。如果出現(xiàn)檢查的結(jié)果為否的情況,則根據(jù)情況反饋錯(cuò)誤信息。在列集合B與基表的列集合相同的情況下,為每個(gè)列集合創(chuàng)建一個(gè)物化視圖,取下一個(gè)列集合重復(fù)上述的操作步驟。下面顯示了創(chuàng)建使用列集合存儲(chǔ)方式的基表所使用的一些SQL語(yǔ)句示例CREATETABLEtable_name([{column_namedata_type[column_constraint[...]][,…]])WITH(ORIENTATION=COLUMN)[PROJECTIONS(projection_name({column_name[,...]other_table(column_name[,...])})ORDERBYcolumn_name[,..·])]語(yǔ)句說(shuō)明CREATETABLEtable_name指定了表名為table_name的基表。WITH(ORIENTATION=COLUMN)指定了基表的存儲(chǔ)方式為列存儲(chǔ)。PROJECTIONS子句用于創(chuàng)建列集合,指定了包括列集合名稱,集合中包含的列,用于排序的列。在只使用基表的列的列集合情況下,使用如下的查詢語(yǔ)句SELECTcolumn—name…FROMtable—nameORDERBYcolumn—name;在使用到其他表的列的列集合情況下,使用如下的查詢語(yǔ)句SELECTcolumn_name…FROMtable_nameJOINother_tableUSING(主夕卜鍵列)ORDERBYcolumn_name。圖5顯示了在圖1所示的實(shí)施例中,所建立的連接索引的示意圖。建立連接索引所使用的SQL語(yǔ)句如下CREATEJOININDEXindex_nameFROMprojection_aTOprojection_b;該SQL語(yǔ)句創(chuàng)建了列集合projection_a到列集合projection_b的連接索引index_name。在建立連接索引的過(guò)程中,列集合的數(shù)據(jù)加載過(guò)程是這樣的1)在基表和列集合引用到的其他表加載數(shù)據(jù);2)物化全部的列集合物化視圖,包括物化每個(gè)列集合的存儲(chǔ)位置;3)建立連接索引;4)刪除基表和列集合引用到的其他表的數(shù)據(jù);5)刪除不需要的存儲(chǔ)位置。選擇連接索引的過(guò)程可以使用基于代價(jià)的優(yōu)化方式,即估計(jì)每個(gè)執(zhí)行計(jì)劃所需的代價(jià),該代價(jià)將每個(gè)執(zhí)行計(jì)劃所耗費(fèi)的資源進(jìn)行量化,根據(jù)這個(gè)代價(jià)選擇出最優(yōu)的連接索引。由于使用連接索引會(huì)造成隨機(jī)數(shù)據(jù)庫(kù)吞吐(10),因此應(yīng)該盡可能少使用連接索引。圖6顯示了在圖1所示的實(shí)施例中,使用連接索引還原邏輯元組的操作過(guò)程。該操作過(guò)程包括如下的步驟步驟10尋找包含查詢所需要的所有目標(biāo)列的列集合,如果有,則利用該列集合還原出元組;如果沒(méi)有,則進(jìn)入下一步;在圖6中具體為尋找包含查詢所有目標(biāo),即“姓名”、“所在系”,的列集合。步驟11尋找列序相同的包含查詢所需要的所有目標(biāo)列的多個(gè)列集合;步驟12在步驟11中獲得的多個(gè)列集合中,選擇使用連接索引最少的列集合組(例如圖6中的列集合1和列集合2);步驟13完成目標(biāo)列的投影之后,利用連接索引還原元組。通過(guò)盡可能推遲連接索引的使用,直至完成目標(biāo)列的投影之后,可以增強(qiáng)查詢性能。以上對(duì)本發(fā)明所提供的用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法進(jìn)行了詳細(xì)的說(shuō)明。對(duì)本領(lǐng)域的技術(shù)人員而言,在不背離本發(fā)明實(shí)質(zhì)精神的前提下對(duì)它所做的任何顯而易見(jiàn)的改動(dòng),都將構(gòu)成對(duì)本發(fā)明專利權(quán)的侵犯,將承擔(dān)相應(yīng)的法律責(zé)任。權(quán)利要求1.一種用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,所述列數(shù)據(jù)庫(kù)包括多個(gè)由行和列構(gòu)成的數(shù)據(jù)表,所述數(shù)據(jù)表被劃分為多個(gè)列集合,所述列集合包括一個(gè)或多個(gè)列,并且所述列集合的并集構(gòu)成所述數(shù)據(jù)表,其特征在于所述列集合兩兩之間建立連接索引,所述連接索引記錄建立了連接索引的兩個(gè)列集合中,屬于所述數(shù)據(jù)表的同一元組的列的存儲(chǔ)位置的一一對(duì)應(yīng)關(guān)系。2.如權(quán)利要求1所述的用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,其特征在于包括下述步驟對(duì)每個(gè)列集合,按照屬于所述數(shù)據(jù)表的同一元組的、兩個(gè)列集合中的列的存儲(chǔ)位置值,建立連接索引;將所述連接索引對(duì)應(yīng)存儲(chǔ)到所述每個(gè)列集合中,并與所述每個(gè)列集合中的所述列對(duì)應(yīng)。3.如權(quán)利要求1所述的用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,其特征在于包括下述步驟如果兩個(gè)列集合包含重復(fù)列,則按照所述重復(fù)列,對(duì)所述兩個(gè)列集合的行進(jìn)行排序并存儲(chǔ);如果兩個(gè)列集合沒(méi)有重復(fù)列,則將所述兩個(gè)列集合的行,分別按照查詢條件來(lái)排序并存儲(chǔ)。4.如權(quán)利要求3所述的用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,其特征在于對(duì)于沒(méi)有重復(fù)列的所述兩個(gè)列集合,如果邏輯順序相同則不建立連接索引,如果邏輯順序不相同則建立連接索引。5.如權(quán)利要求3所述的用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,其特征在于對(duì)于有重復(fù)列的所述兩個(gè)列集合,不建立連接索引。6.如權(quán)利要求2所述的用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,其特征在于估計(jì)每個(gè)執(zhí)行計(jì)劃所需的代價(jià),根據(jù)最優(yōu)代價(jià)選擇連接索引。7.如權(quán)利要求1所述的用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,其特征在于包括下述創(chuàng)建列集合的步驟在判斷所述數(shù)據(jù)表的全部列都出現(xiàn)在所述多個(gè)列集合的并集中的時(shí)候,為每個(gè)列集合創(chuàng)建物化視圖,完成列集合的創(chuàng)建。8.如權(quán)利要求1所述的用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,其特征在于在建立連接索引的過(guò)程中還包括下述列集合加載步驟步驟1在所述數(shù)據(jù)表加載數(shù)據(jù);步驟2物化全部列集合物化視圖,包括物化每個(gè)列集合的存儲(chǔ)位置;步驟3:建立連接索引;步驟4刪除所述數(shù)據(jù)表的數(shù)據(jù);步驟5刪除不需要的存儲(chǔ)位置值。9.如權(quán)利要求1所述的用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,其特征在于還包括下述利用連接索引還原邏輯元組的步驟步驟1尋找包含查詢所需要的所有目標(biāo)列的列集合,如果有,則利用該列集合還原出元組;如果沒(méi)有,則進(jìn)入下一步;步驟2尋找列序相同的包含查詢所需要的所有目標(biāo)列的多個(gè)列集合;步驟3在步驟2中獲得的多個(gè)列集合中,選擇使用連接索引最少的列集合組;步驟4:完成目標(biāo)列的投影之后,利用連接索引還原元組。10.如權(quán)利要求1所述的用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法,其特征在于屬于所述數(shù)據(jù)表的同一元組的列,是指列集合中的多個(gè)列。全文摘要本發(fā)明公開(kāi)了一種用于列數(shù)據(jù)庫(kù)的單表多列序存儲(chǔ)方法。該列數(shù)據(jù)庫(kù)包括多個(gè)由行和列構(gòu)成的數(shù)據(jù)表,數(shù)據(jù)表被劃分為多個(gè)列集合,列集合包括一個(gè)或多個(gè)列,并且列集合的并集構(gòu)成數(shù)據(jù)表,列集合兩兩之間建立連接索引,連接索引記錄了建立了連接索引的兩個(gè)列集合中,屬于數(shù)據(jù)表的同一元組的列的存儲(chǔ)位置的一一對(duì)應(yīng)關(guān)系。利用本發(fā)明所提供的單表多列序存儲(chǔ)方法,可以提高列數(shù)據(jù)庫(kù)的查詢效率,并減小存儲(chǔ)空間。文檔編號(hào)G06F17/30GK102521303SQ20111039203公開(kāi)日2012年6月27日申請(qǐng)日期2011年11月30日優(yōu)先權(quán)日2011年11月30日發(fā)明者馮玉,冷建全,李祥凱,楊尚,王鴻翔申請(qǐng)人:北京人大金倉(cāng)信息技術(shù)股份有限公司