一種基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)據(jù)查詢技術(shù)領(lǐng)域,具體涉及一種基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法。
【背景技術(shù)】
[0002]近些年,隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展與數(shù)據(jù)采集技術(shù)的不斷提高,人們可獲得的數(shù)據(jù)量越來(lái)越大,然而隨著如此海量數(shù)據(jù)的出現(xiàn),傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)不能滿足人們對(duì)拓展性以及可伸縮性的需求,尤其是在應(yīng)付web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動(dòng)態(tài)網(wǎng)站方面,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)顯得力不從心,暴露了很多難以克服的問(wèn)題。因此研究者們強(qiáng)調(diào)找到一個(gè)有效的,成本低廉的,有著良好并行性和伸縮性的方式來(lái)存儲(chǔ)這些海量的數(shù)據(jù);經(jīng)研究調(diào)查,目前來(lái)說(shuō),在工業(yè)和學(xué)術(shù)界廣泛接受的是一種新型的非關(guān)系型數(shù)據(jù)庫(kù);與傳統(tǒng)的基于行存儲(chǔ)的數(shù)據(jù)庫(kù)相比,它采取基于列的存儲(chǔ)方式,不需要事先定義數(shù)據(jù)模式,預(yù)定義表結(jié)構(gòu),此外制表,列族或者列簇為它的基本數(shù)據(jù)模型。在這個(gè)模型中,一條記錄或者數(shù)據(jù)被一系列鍵值對(duì)的集合來(lái)表示;然而,在這種情況下,當(dāng)數(shù)據(jù)量達(dá)到TB甚至PB級(jí)的時(shí)候,數(shù)據(jù)的查詢效率,以及數(shù)據(jù)查詢的實(shí)時(shí)性仍然是我們所面臨的一個(gè)巨大的挑戰(zhàn)。
[0003]最近幾年,為解決對(duì)海量數(shù)據(jù)中查詢效率以及性能的問(wèn)題,不同的大型數(shù)據(jù)庫(kù)提出了層次結(jié)構(gòu);例如基于DHT的P2P系統(tǒng)。它使用的是兩層架構(gòu),一層是為了資源共享,另一層是為了資源發(fā)現(xiàn),以便加速多維數(shù)據(jù)查詢的過(guò)程;但是這個(gè)方法依賴于一個(gè)具有順序的hash函數(shù),和一個(gè)較小數(shù)量的P2P節(jié)點(diǎn)來(lái)存儲(chǔ)數(shù)據(jù);由于被分配到節(jié)點(diǎn)數(shù)據(jù)都會(huì)降低它的維度到一維空間,因此P2P的節(jié)點(diǎn)上散布著一維數(shù)據(jù)的取值范圍;隨后作者也提出了一個(gè)多維查詢算法,在一個(gè)穩(wěn)定的網(wǎng)絡(luò)環(huán)境下,該模型能夠表現(xiàn)出良好的性能,但是在實(shí)際情況下,真實(shí)的網(wǎng)絡(luò)環(huán)境并不如實(shí)驗(yàn)設(shè)想的那樣穩(wěn)定,查詢效果并不像那樣理想。
【發(fā)明內(nèi)容】
[0004]針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出一種基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法,以達(dá)到提高查詢效率并優(yōu)化查詢時(shí)間目的。
[0005]—種基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法,具體包括以下步驟:
[0006]步驟1、確定出數(shù)據(jù)庫(kù)中高頻率的屬性類型,并根據(jù)所確定的屬性類型建立多維漸增數(shù)據(jù)模型;
[0007]步驟2、對(duì)多維漸增數(shù)據(jù)模型中的每一維屬性的值進(jìn)行分段,包括空段、溢出段和合理段;
[0008]步驟3、將數(shù)據(jù)庫(kù)中每一條記錄中的數(shù)據(jù)按照每一維屬性的分段進(jìn)行劃分,若某一段中數(shù)據(jù)量大于設(shè)定值,則對(duì)該段再進(jìn)行下一層的分段,若每一段中的數(shù)據(jù)量均小于設(shè)定值,則停止分段;
[0009]步驟4、根據(jù)每個(gè)維所劃分的段,在多維漸增數(shù)據(jù)模型中構(gòu)成單元格,并將單元格各段的索引按照建維順序進(jìn)行線性化,將線性化后的數(shù)據(jù)作為單元格的標(biāo)識(shí)號(hào);
[0010]步驟5、當(dāng)有新的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)時(shí),更新多維漸增數(shù)據(jù)模型;
[0011]步驟6、根據(jù)實(shí)際所需查詢的屬性類型,在當(dāng)前多維漸增數(shù)據(jù)模型中查詢所需屬性的標(biāo)識(shí)號(hào),即獲得對(duì)應(yīng)單元格的所有數(shù)據(jù);
[0012]步驟7、根據(jù)查詢所獲的數(shù)據(jù)采用回溯操作的方式查詢歷史數(shù)據(jù),具體包括:
[0013]步驟7-1、對(duì)多維漸增數(shù)據(jù)模型的維進(jìn)行回溯,獲得每次更新時(shí)和初始時(shí)多維漸增數(shù)據(jù)模型的對(duì)應(yīng)單元格;
[0014]步驟7-2、在所獲的單元格中對(duì)各段進(jìn)行回溯,即由子段尋找父段;
[0015]步驟7-3、對(duì)回溯后獲得的父段的索引按照建維順序進(jìn)行線性化,從而查詢獲得對(duì)應(yīng)單元格內(nèi)的所有數(shù)據(jù)。
[0016]步驟I所述的高頻率的屬性類型為出現(xiàn)頻率大于70%屬性類型。
[0017]步驟3所述的設(shè)定值為:所有段數(shù)據(jù)量之和的30%。
[0018]步驟3所述的數(shù)據(jù)庫(kù)中每一條記錄中的數(shù)據(jù),包括數(shù)值型和文本型;
[0019]當(dāng)為數(shù)據(jù)型時(shí):采用平均分的方式進(jìn)行分段,即對(duì)數(shù)據(jù)的取值范圍進(jìn)行等寬劃分;
[0020]當(dāng)為文本型時(shí):第一層時(shí),按照屬性的首字母將26個(gè)字母進(jìn)行分段;
[0021]第η層時(shí),按照屬性從前向后的第η個(gè)字母將26個(gè)字母進(jìn)行分段。
[0022]步驟7-3所述的單元格,若其位于邊緣部分,則需將其內(nèi)部不符合查詢條件的數(shù)據(jù)進(jìn)行濾除。
[0023]本發(fā)明優(yōu)點(diǎn):
[0024]本發(fā)明提出一種基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法,通常真實(shí)環(huán)境中的一條數(shù)據(jù)都是由許多的鍵值(key-value)對(duì)所組成,對(duì)于這些鍵值對(duì)來(lái)說(shuō),它們可能具有相同的鍵(key),或者屬于同一條記錄;本發(fā)明將某些頻繁出現(xiàn)的鍵建立成為集合空間中的維,并根據(jù)值(value)在維上進(jìn)行分段,而對(duì)于那些出現(xiàn)次數(shù)較少的鍵定義為平凡鍵,通過(guò)這樣的方式,所有的數(shù)據(jù)都會(huì)被組織成一個(gè)高維的模型,簡(jiǎn)稱為key-Cube(鍵立方);在查詢過(guò)程中,符合查詢條件的數(shù)據(jù)會(huì)被鎖定在相關(guān)的cell(單元格)之中,因此查詢的范圍大大的減小了;其次這個(gè)數(shù)據(jù)模型具有一定的適應(yīng)性會(huì)根據(jù)數(shù)據(jù)中鍵值對(duì)出現(xiàn)的次數(shù)從而做出相應(yīng)的反應(yīng);這個(gè)key-cube是漸增式的,隨著鍵值中數(shù)據(jù)的增多,此模型會(huì)根據(jù)鍵的頻繁程度拓展出新的維,從而形成新的key-cube。
【附圖說(shuō)明】
[0025]圖1為本發(fā)明一種【具體實(shí)施方式】中基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法流程圖;
[0026]圖2為本發(fā)明一種【具體實(shí)施方式】中的所用數(shù)據(jù)的示意圖;
[0027]圖3為本發(fā)明一種【具體實(shí)施方式】中的對(duì)數(shù)值型數(shù)據(jù)分段劃分的示意圖;
[0028]圖4為本發(fā)明一種【具體實(shí)施方式】中的對(duì)文本型數(shù)據(jù)分段劃分的示意圖;
[0029]圖5為本發(fā)明一種【具體實(shí)施方式】中的對(duì)數(shù)值型數(shù)據(jù)的段進(jìn)行再分的示意圖;
[0030]圖6為本發(fā)明一種【具體實(shí)施方式】中的對(duì)文本型數(shù)據(jù)的段進(jìn)行再分的示意圖;
[0031 ]圖7為本發(fā)明一種【具體實(shí)施方式】中的對(duì)維進(jìn)行回溯的示意圖;
[0032]圖8為本發(fā)明一種【具體實(shí)施方式】中的對(duì)段進(jìn)行回溯的示意圖。
【具體實(shí)施方式】
[0033]下面結(jié)合附圖對(duì)本發(fā)明一種實(shí)施例做進(jìn)一步說(shuō)明。
[0034]本發(fā)明實(shí)施例中,以RITA中航班延遲的數(shù)據(jù)為例,記錄了1987-2008年航班延遲的詳細(xì)信息,每一條記錄都包括了 29個(gè)屬性如Year (年),Month(月),DayofMonth(天數(shù)),DayOfWeek(周數(shù)),DepTime(實(shí)際離場(chǎng)時(shí)間),CRSDepTime(預(yù)計(jì)離場(chǎng)時(shí)間),ArrTime(實(shí)際到達(dá)時(shí)間),CRSArrTime(預(yù)計(jì)到達(dá)時(shí)間),UniqueCarrier(航空公司代碼),F(xiàn)lightNum(航班號(hào))等,但是在這29個(gè)屬性中有些屬性的值是可空的,如CancelIat1nCode(取消的原因),而對(duì)于Cancelled(是否被取消),Diverted(改飛),CarrierDelay (貨物晚點(diǎn)),WeatherDelay(天氣晚點(diǎn)),NASDelay(NAS晚點(diǎn)),SecurityDelay(安全晚點(diǎn)),LateAircraftDelay(飛機(jī)晚點(diǎn))這些屬性中有部分?jǐn)?shù)據(jù)非零數(shù),大部分?jǐn)?shù)據(jù)是O;當(dāng)基于這些記錄進(jìn)行數(shù)據(jù)分析或執(zhí)行特定查詢時(shí),整個(gè)操作的時(shí)間開(kāi)銷(xiāo)極大,并且浪費(fèi)了大量的存儲(chǔ),通過(guò)本發(fā)明提出的基于多維漸增數(shù)據(jù)模型的查詢方法對(duì)數(shù)據(jù)的查詢進(jìn)行優(yōu)化;并且在此實(shí)驗(yàn)中,將每一條記錄都看成是這29個(gè)鍵值對(duì)的集合,并且當(dāng)某個(gè)鍵中的數(shù)據(jù)是O或空時(shí),就在這條記錄中去掉這個(gè)鍵,如圖2所示,匕表示記錄;K表示鍵,即屬性;V1表示值。
[0035]本發(fā)明實(shí)施例中,基于多維漸增數(shù)據(jù)模型的數(shù)據(jù)查詢方法,方法流程圖如圖1所示,具體包括以下步驟:
[0036]步驟1、確定出數(shù)據(jù)庫(kù)中出現(xiàn)頻率大于70%屬性類型,并根據(jù)所確定的屬性類型建立多維漸增數(shù)據(jù)模型;
[0037]本發(fā)明實(shí)施例中,數(shù)據(jù)源都是由一系列的鍵值對(duì)所組成,根據(jù)某一個(gè)鍵在源數(shù)據(jù)或者新增數(shù)據(jù)中出現(xiàn)的次數(shù)從而可以判斷出這個(gè)鍵在數(shù)據(jù)中出現(xiàn)的頻繁程度,將出現(xiàn)不頻繁的鍵稱為不頻繁鍵,將出現(xiàn)頻繁的鍵稱為維鍵;隨著數(shù)據(jù)量的增多,某個(gè)不頻繁的鍵在新增的數(shù)據(jù)中出現(xiàn)次數(shù)變得頻繁,可將新增的頻繁鍵建立成為維;將維鍵建立成一個(gè)維,每一個(gè)維都有一個(gè)唯一維名稱(name),并且記錄下每個(gè)維建立的順序(index)以及維建立的版本號(hào)(vers1n),因此一個(gè)維可用元祖<index,name ,vers1n,I〉來(lái)表示,其中,I表示活躍段id(標(biāo)識(shí)號(hào))的集合;
[0038]本發(fā)明實(shí)施例中,運(yùn)用Mapreduce計(jì)算工具對(duì)源數(shù)據(jù)或者新增數(shù)據(jù)中的鍵值對(duì)進(jìn)行掃描,并對(duì)數(shù)據(jù)中的每個(gè)鍵出現(xiàn)的頻數(shù)進(jìn)行統(tǒng)計(jì),將出現(xiàn)次數(shù)多于總數(shù)的70%的鍵稱為維鍵,其余的鍵稱為不頻繁鍵,在本實(shí)施中,維鍵有21個(gè),分別是Year (年),Month(月),DayofMonth(天數(shù)),DayOfWeek(周數(shù)),DepTime(實(shí)際離場(chǎng)時(shí)間),CRSDepTime(預(yù)計(jì)離場(chǎng)時(shí)間),ArrTime(實(shí)際到達(dá)時(shí)間),CRSArrTime(預(yù)計(jì)到達(dá)時(shí)間),UniqueCarrier(航空公司代碼),F(xiàn)lightNum(航班號(hào)),TailNum(機(jī)翼的數(shù)量),Dest(目的地),ActualElapsedTime(實(shí)際起飛時(shí)間),CRSElapsedTime(預(yù)計(jì)起飛時(shí)間),AirTime(飛行時(shí)間),ArrDelay(到達(dá)延遲),DepDelay(出發(fā)晚點(diǎn)),0rigin(出發(fā)地),Distance(距離),TaxiIn(到達(dá)滑行),Tax1ut(起飛滑行),不頻繁鍵是Cancelled(是否被取消),Cancellat1nCode(取消原因),Diverted(改飛),CarrierDelay (貨物晚點(diǎn)),WeatherDelay (天氣晚點(diǎn)),NASDelay (NAS晚點(diǎn)),SecurityDelay(安全晚點(diǎn)),LateAircraftDelay(飛機(jī)晚點(diǎn));
[0039]本發(fā)明實(shí)施例中,將每個(gè)維鍵根據(jù)其出現(xiàn)的頻繁程度排序,如果此模型中已經(jīng)有維了,就依次在排序后的結(jié)果加上現(xiàn)有模型中最大維的順序號(hào),如果模型中還沒(méi)有維,排序的結(jié)果就是建維的順序,如果有頻繁程度一樣的維鍵,就根據(jù)字母序;本發(fā)明實(shí)施例中,維鍵ActualElapsedTime可以表不成〈I ,ActualElapsedTime,I,I〉,維鍵AirTime可以表不成〈2,八:[1'111116,1,1>,維鍵01^8;[11(出發(fā)地)可以表示成〈16,01^8;[11,1,I〉,維鍵Month可以表示成〈15,Month,I,I〉; index從I開(kāi)始計(jì)數(shù),它不會(huì)隨著模型的更新而重置,在第一次建立模型的時(shí)候vers1n從I開(kāi)始計(jì)數(shù),以后每更新模型一次,都將vers1n加I,以此來(lái)區(qū)別模型的不同版本;隨著數(shù)據(jù)量的增多,CarrierDelay變得相當(dāng)頻繁,因此可將CarrierDelay建立成為新的維〈22 ,CarrierDelay,2,I〉;
[0040]步驟2、對(duì)多維漸增數(shù)據(jù)模型中的每一維屬性的值進(jìn)行分段,包括空段、溢出段和合理段;
[