0041]本發(fā)明實施例中,將包含某個維鍵的特定范圍的值的集合稱作一個段,因此一個維可以由η個不相交的段組成;維上所有段的取值范圍是維的一個覆蓋;每個段可表示為一個二元組〈i,sv>,其中i表示段的id號,sv表示每個段建立的時期,從I開始計數(shù),并且以I遞增,同一時期可以創(chuàng)建不同的段。
[0042]本發(fā)明實施例中,在維的初始階段,為了表示對數(shù)值型數(shù)據(jù)與文本型數(shù)據(jù)分段方式的不同,分別以O(shè)rigin和Month維舉例;對數(shù)值型數(shù)據(jù)和文本型數(shù)據(jù)分別采用圖3和圖4的方式進(jìn)行分段,其中Si表示值為空的情況(空段),s2,s4分別表示值超出正常范圍的情況(溢出段),s3表示所屬鍵正常范圍的取值情況(合理段),基于常識可知,月份的正常的取值范圍是I到12,并且在數(shù)據(jù)中發(fā)現(xiàn)對于Origin中,其字母的開頭一般為c到q。對數(shù)值型數(shù)據(jù)與文本型數(shù)據(jù)分段的最大的不同是:由于文本型數(shù)據(jù)都是由各個字母所組成,因此在每一層的分段都是對文本型數(shù)據(jù)中的第i個字母進(jìn)行分段,分段過程中不區(qū)分大小寫。在維中,這些段也有唯一的id,這個id采用按序編碼的方式進(jìn)行編碼,此編碼方式應(yīng)該能為段的回溯服務(wù),此時Origin維中的段分別有:<sl,I>,〈s2,I>,〈s3,I>,〈s4,1> ,Month中的段有:〈sl,l>,〈s2,l>,〈s3,l>,〈s4,l>,與此同時一個新的多維的cube被建立起來;
[0043]步驟3、將數(shù)據(jù)庫中每一條記錄中的數(shù)據(jù)按照每一維屬性的分段進(jìn)行劃分,若某一段中數(shù)據(jù)量大于所有段數(shù)據(jù)量之和的30%,則對該段再進(jìn)行下一層的分段,若每一段中的數(shù)據(jù)量均小于所有段數(shù)據(jù)量之和的30%,則停止分段;
[0044]本發(fā)明實施例中,除了Si之外的所有段都可以進(jìn)行再次被分成固定數(shù)量的子段,因此將沒有子段的段成為活躍段,有子段的段成為休眠段;隨著數(shù)據(jù)的增多,會造成段中所對應(yīng)數(shù)據(jù)的不均衡,在這種情況下可對段進(jìn)行再分操作;
[0045]本發(fā)明實施例中,當(dāng)段中所對應(yīng)的數(shù)據(jù)超過了200M,可以采取分段的方式,如圖5和圖6所示,對段中的數(shù)據(jù)進(jìn)行再次劃分,本發(fā)明實施例中,規(guī)定除了Si之外的其他段可固定的再分為3個子段,并且對于數(shù)值型數(shù)據(jù),進(jìn)行等寬劃分,對于文本型數(shù)據(jù),進(jìn)行字符個數(shù)上的等寬劃分,此時048丨11維中的段分別有:〈81,1>,〈82,1>,〈88,2>,〈89,2>,〈810,2>,〈84,1>,]?011讓中的段有:〈81,1>,〈82,1>,〈88,2>,〈89,2>,〈810,2>,〈84,1>;
[0046]步驟4、根據(jù)每個維所劃分的段,在多維漸增數(shù)據(jù)模型中構(gòu)成單元格,并將單元格各段的索引按照建維順序進(jìn)行線性化,將線性化后的數(shù)據(jù)作為單元格的標(biāo)識號;
[0047]本發(fā)明實施例中,一條數(shù)據(jù)可以根據(jù)cube每個維上段的取值范圍定位到空間中的一個單元格,在這個單元格中對應(yīng)了包含具有相同鍵并且取值在同一個段中的多條數(shù)據(jù),將構(gòu)成單元格的段的Index按建維的順序進(jìn)行線性化,然后將線性化之后的結(jié)果作為每個cell的id;
[0048]本發(fā)明實施例中,采用z-ordering的方式對構(gòu)成單元格的段的Index按建維的順序進(jìn)行線性化,然后將線性化之后的結(jié)果作為每個cell的id;
[0049]步驟5、當(dāng)有新的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫時,更新多維漸增數(shù)據(jù)模型;
[0050]步驟6、根據(jù)實際所需查詢的屬性類型,在當(dāng)前多維漸增數(shù)據(jù)模型中查詢所需屬性的標(biāo)識號,即獲得對應(yīng)單元格的所有數(shù)據(jù);
[°°511 本發(fā)明實施例中,對查詢語句進(jìn)行分析,形如select,.from,.where...,根據(jù)where后的查詢條件定位到所要約束的維鍵,可以通過計算得出在當(dāng)前的cube中維上符合查詢條件的一系列段;將符合查詢條件的段按照段所對應(yīng)維的順序進(jìn)行線性化,線性化后的結(jié)果就是目前cube中符合查詢結(jié)果的所有數(shù)據(jù);
[0052]本發(fā)明實施例中,米用的查詢語句是select*from this where Month>3andOrigin= ‘BOS’.;從查詢語句可知,查詢條件中包含的維鍵是Month<15,Month,l,Imonth>和Origin<16,Origin, I ,1rigin>,Imonth= {1,2,8,9,10,4},1rigin= {I,2,8,9,10,4},因此在活躍段中只有此111:11中的88,89,810,84和01^8;[11中的82滿足條件,然而對于10111:11中的88和Origin中的s2會存在一些不符合查詢條件的數(shù)據(jù),由這些段所組成的單元格稱為處于邊緣部分的單元格,會對他們進(jìn)行后續(xù)的過濾處理;將Month維和Origin維中符合查詢條件的s8,s9,slO,s4和s2,與其他各個維的段,按照建維的順序,采用z-ordering的方式進(jìn)行線性化;
[0053]步驟7、根據(jù)查詢所獲的數(shù)據(jù)采用回溯操作的方式查詢歷史數(shù)據(jù);
[0054]本發(fā)明實施例中,由于此模型是漸增的,目前的cube可能是增維之后的版本,因此目前所查詢出的結(jié)果只是一部分查詢結(jié)果,對于每一個線性化之后的結(jié)果,還需要進(jìn)行回溯操作來尋找歷史數(shù)據(jù)中的查詢結(jié)果;
[0055]具體包括:
[0056]步驟7-1、對多維漸增數(shù)據(jù)模型的維進(jìn)行回溯,獲得每次更新時和初始時多維漸增數(shù)據(jù)模型的對應(yīng)單元格;
[0057]本發(fā)明實施例中,對維的回溯找出由不同維版本夠成的各個cube;維上的回溯過程如圖7所示,圖中,由上至下由最大維版本為η至最大維版本為I;記錄下當(dāng)前的所有維,在其中找出具有最高維版本的維,然后刪除此版本的維,循環(huán)整個過程直到維中的版本只有I,最后在每個過程中記錄的維的集合就是所對應(yīng)的不同時期的鍵立方,即不同時期的歷史數(shù)據(jù);本發(fā)明實施例中,維版本最高為2,只增了CarrierDelay維,因此不同時期的cube只有兩個,第一個cube由之前的21個維鍵組成,第二個cube由之前的21個維鍵加上新增的CarrierDelay 維組成。
[0058]步驟7-2、在所獲的單元格中對各段進(jìn)行回溯,即由子段尋找父段;
[0059]本發(fā)明實施例中,對維上段的回溯,在各個cube中對段進(jìn)行回溯;在各個時期的cube中會有不同的段發(fā)生改變,因此還需要在各個段的順序列表中進(jìn)行段的回溯,段的回溯就是由子段找父段的過程,如圖8所示,即根據(jù)當(dāng)前子段的id,得到父段id的過程,其過程主要為:將線性化的結(jié)果y進(jìn)行反線性化,得到構(gòu)成該結(jié)果的各個維中段ai,a2,...an,在這些中段中找出具有最大段版本號的段&?,然后根據(jù)段的編碼方式,可以由段的id進(jìn)而得到其父段bj^id;在本實施中,例如對Month和Origin維中的段s3都進(jìn)行了再分,并且除了 Si不可再分,其他每個段可分子段的數(shù)量都固定為3,因此,當(dāng)對s8,s9,sl0進(jìn)行回溯的時即可獲得其父段s3 ;
[0060]步驟7-3、對回溯后獲得的父段的索引按照建維順序進(jìn)行線性化,從而查詢獲得對應(yīng)單元格內(nèi)的所有數(shù)據(jù);所述的單元格,若其位于邊緣部分,則需將其內(nèi)部不符合查詢條件的數(shù)據(jù)進(jìn)行濾除。
[0061]本發(fā)明實施例中,最后對所有的回溯結(jié)果進(jìn)行線性化,從而查詢出所有符合條件的單元格;查詢結(jié)果中的一些處于邊緣部分的單元格,它們所包含的數(shù)據(jù)中會有一些不符合查詢條件的數(shù)據(jù),因此只需對這些邊緣單元格用mapreduce做過濾處理,在本實施中,例如對Month中的s8和Origin中的s2過濾處理中,1< =Month<3的數(shù)據(jù)和Origin中以a(不區(qū)分大小寫)開頭的數(shù)據(jù)會被過濾掉,當(dāng)過濾過程完成之后,所有符合查詢條件的數(shù)據(jù)會被查詢出來。
【主權(quán)項】
1.一種基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法,其特征在于,具體包括以下步驟: 步驟1、確定出數(shù)據(jù)庫中高頻率的屬性類型,并根據(jù)所確定的屬性類型建立多維漸增數(shù)據(jù)模型; 步驟2、對多維漸增數(shù)據(jù)模型中的每一維屬性的值進(jìn)行分段,包括空段、溢出段和合理段; 步驟3、將數(shù)據(jù)庫中每一條記錄中的數(shù)據(jù)按照每一維屬性的分段進(jìn)行劃分,若某一段中數(shù)據(jù)量大于設(shè)定值,則對該段再進(jìn)行下一層的分段,若每一段中的數(shù)據(jù)量均小于設(shè)定值,則停止分段; 步驟4、根據(jù)每個維所劃分的段,在多維漸增數(shù)據(jù)模型中構(gòu)成單元格,并將單元格各段的索引按照建維順序進(jìn)行線性化,將線性化后的數(shù)據(jù)作為單元格的標(biāo)識號; 步驟5、當(dāng)有新的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫時,更新多維漸增數(shù)據(jù)模型; 步驟6、根據(jù)實際所需查詢的屬性類型,在當(dāng)前多維漸增數(shù)據(jù)模型中查詢所需屬性的標(biāo)識號,即獲得對應(yīng)單元格的所有數(shù)據(jù); 步驟7、根據(jù)查詢所獲的數(shù)據(jù)采用回溯操作的方式查詢歷史數(shù)據(jù),具體包括: 步驟7-1、對多維漸增數(shù)據(jù)模型的維進(jìn)行回溯,獲得每次更新時和初始時多維漸增數(shù)據(jù)模型的對應(yīng)單元格; 步驟7-2、在所獲的單元格中對各段進(jìn)行回溯,即由子段尋找父段; 步驟7-3、對回溯后獲得的父段的索引按照建維順序進(jìn)行線性化,從而查詢獲得對應(yīng)單元格內(nèi)的所有數(shù)據(jù)。2.根據(jù)權(quán)利要求1所述的基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法,其特征在于,步驟I所述的高頻率的屬性類型為出現(xiàn)頻率大于70%屬性類型。3.根據(jù)權(quán)利要求1所述的基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法,其特征在于,步驟3所述的設(shè)定值為:所有段數(shù)據(jù)量之和的30%。4.根據(jù)權(quán)利要求1所述的基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法,其特征在于,步驟3所述的數(shù)據(jù)庫中每一條記錄中的數(shù)據(jù),包括數(shù)值型和文本型; 當(dāng)為數(shù)據(jù)型時:采用平均分的方式進(jìn)行分段,即對數(shù)據(jù)的取值范圍進(jìn)行等寬劃分; 當(dāng)為文本型時:第一層時,按照屬性的首字母將26個字母進(jìn)行分段; 第η層時,按照屬性從前向后的第η個字母將26個字母進(jìn)行分段。5.根據(jù)權(quán)利要求1所述的基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法,其特征在于,步驟7-3所述的單元格,若其位于邊緣部分,則需將其內(nèi)部不符合查詢條件的數(shù)據(jù)進(jìn)行濾除。
【專利摘要】本發(fā)明一種基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法,屬于數(shù)據(jù)查詢技術(shù)領(lǐng)域,本發(fā)明將某些頻繁出現(xiàn)的鍵建立成為集合空間中的維,并根據(jù)值(value)在維上進(jìn)行分段,而對于那些出現(xiàn)次數(shù)較少的鍵定義為平凡鍵,通過這樣的方式,所有的數(shù)據(jù)都會被組織成一個高維的模型,簡稱為key-cube(鍵立方);在查詢過程中,符合查詢條件的數(shù)據(jù)會被鎖定在相關(guān)的cell(單元格)之中,因此查詢的范圍大大的減小了;其次這個數(shù)據(jù)模型具有一定的適應(yīng)性會根據(jù)數(shù)據(jù)中鍵值對出現(xiàn)的次數(shù)從而做出相應(yīng)的反應(yīng);這個key-cube是漸增式的,隨著鍵值中數(shù)據(jù)的增多,此模型會根據(jù)鍵的頻繁程度拓展出新的維,從而形成新的key-cube。
【IPC分類】G06F17/30
【公開號】CN105677840
【申請?zhí)枴緾N201610005893
【發(fā)明人】宋杰, 何虹燕, 張莉, 張一川
【申請人】東北大學(xué)
【公開日】2016年6月15日
【申請日】2016年1月6日