一種基于概率的大數(shù)據(jù)查詢方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明屬于數(shù)據(jù)庫
技術(shù)領(lǐng)域:
,特別涉及一種基于概率的大數(shù)據(jù)查詢方法?!?br>背景技術(shù):
】[0002]人、機、物三元世界的高度融合引發(fā)了數(shù)據(jù)規(guī)模的爆炸式增長和數(shù)據(jù)模式的高度復(fù)雜化,世界已進入網(wǎng)絡(luò)化的大數(shù)據(jù)時代。大數(shù)據(jù)時代的到來給傳統(tǒng)的數(shù)據(jù)管理系統(tǒng)帶來了極大的挑戰(zhàn),NoSQUNotonlySQL)數(shù)據(jù)庫憑借其高擴展、高可用以及靈活的數(shù)據(jù)模型等特點得到了學(xué)術(shù)界和工業(yè)界的廣泛青睞。數(shù)據(jù)查詢技術(shù)作為數(shù)據(jù)庫系統(tǒng)的核心技術(shù)之一,伴隨著云計算技術(shù)以及NoSQL數(shù)據(jù)庫技術(shù)的發(fā)展,基于NoSQL的數(shù)據(jù)查詢技術(shù)備受關(guān)注,而且在業(yè)界也得到了廣泛的研究。[0003]眾所周知,當(dāng)前主流的NoSQL數(shù)據(jù)庫主要基于MapReduce編程模型、分布式文件系統(tǒng)等技術(shù)來對大數(shù)據(jù)進行管理,其中,分布式文件系統(tǒng)主要用于大數(shù)據(jù)的存儲,MapReduce編程模型用于大數(shù)據(jù)的處理。NoSQL數(shù)據(jù)庫的數(shù)據(jù)查詢性能與數(shù)據(jù)存儲與索引設(shè)計、基于MapReduce的查詢處理、查詢優(yōu)化等問題密切相關(guān),目前大數(shù)據(jù)查詢技術(shù)的研究主要集中在這些關(guān)鍵技術(shù)的性能優(yōu)化上,而且關(guān)于這些問題目前已經(jīng)得到了廣泛深入的研究,擁有許多優(yōu)秀的解決方案,論文"云數(shù)據(jù)管理系統(tǒng)中查詢技術(shù)研究綜述"從索引管理、查詢處理、查詢優(yōu)化以及在線聚集等多個方面對云數(shù)據(jù)管理系統(tǒng)中查詢技術(shù)的研究工作進行了總結(jié)分析。然而,就數(shù)據(jù)的查詢方式而言,無論是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫還是新型的NoSQL數(shù)據(jù)庫,其所采用的查詢方式都是完整查詢,即對于給定的查詢條件,無論如何定義查詢條件的匹配算法(精確或近似),無論如何對查詢結(jié)果集排序,查詢都將確定地返回所有匹配數(shù)據(jù)。例如,某一用戶信息表包括身份證號、姓名、年齡等字段,對于任一給定的查詢條件,如查詢年齡大于30歲的所有用戶或者所有姓名是張三的用戶,查詢都將確定地返回所有滿足查詢條件的數(shù)據(jù)。[0004]在大數(shù)據(jù)環(huán)境下,由于數(shù)據(jù)規(guī)模較大以及數(shù)據(jù)結(jié)構(gòu)的復(fù)雜性,完整查詢需要消耗較大的時間代價。許多實際應(yīng)用表明,人們并不需要確定完整的查詢結(jié)果,也不需要對查詢結(jié)果精確排序(如Top-k查詢),僅僅需要滿足一定完整性要求的部分查詢結(jié)果,或者可以適當(dāng)?shù)負p失查詢完整性來滿足性能要求。例如,人們在機場查詢滿足某條件的酒店時,他們并不需要返回的結(jié)果集是全部數(shù)據(jù),相反他們對響應(yīng)時間的要求會更高。而當(dāng)前數(shù)據(jù)庫系統(tǒng)采用的完整查詢方式已無法滿足這種查詢需求,亟需定義一種近似完整性查詢技術(shù)來彌補這一空缺。近似完整性查詢不同于傳統(tǒng)的完整查詢,其近似性主要體現(xiàn)在數(shù)據(jù)查全的可能性上,即查詢到滿足查詢條件的所有數(shù)據(jù)的概率,在此將其稱之為查全概率,查全概率描述了查詢結(jié)果集是完整數(shù)據(jù)集的可能性。【
發(fā)明內(nèi)容】[0005]針對現(xiàn)有技術(shù)存在的不足,本發(fā)明的目的是提供一種基于概率的大數(shù)據(jù)查詢方法,以滿足在大數(shù)據(jù)環(huán)境中近似完整性查詢的需求。[0006]本發(fā)明的技術(shù)方案是這樣:[0007]-種基于概率的大數(shù)據(jù)查詢方法,包括以下步驟:[0008]步驟1:對具有多個屬性的數(shù)據(jù)集進行劃分;[0009]步驟I.1:選擇數(shù)據(jù)集的一個或者多個屬性作為數(shù)據(jù)集的查詢屬性,給定每個查詢屬性值域的等寬劃分粒度;[0010]步驟1.2:填補數(shù)據(jù)集中查詢屬性取值空缺的數(shù)據(jù),通常情況下,將這些查詢屬性的取值設(shè)為該查詢屬性在其值域的最小值、最大值或者空值;[0011]步驟1.3:判斷查詢屬性取值的數(shù)據(jù)類型,查詢屬性取值的數(shù)據(jù)類型共有數(shù)值和文本兩種類型;如果是數(shù)值類型,則執(zhí)行步驟1.4,如果是文本類型,則執(zhí)行步驟1.5;[0012]步驟1.4:按照查詢屬性取值的大小進行排序,根據(jù)查詢屬性的劃分粒度對查詢屬性進行等寬劃分,繼續(xù)執(zhí)行步驟1.6;[0013]步驟1.5:按照查詢屬性取值首字母的字典序進行排序,根據(jù)查詢屬性的劃分粒度對查詢屬性進行等寬劃分,繼續(xù)執(zhí)行步驟1.6;[0014]步驟1.6:將各個維的維信息存儲在分布式文件系統(tǒng)中,維信息主要包括維名稱、維值取值類型以及維的劃分粒度。[0015]步驟2:對經(jīng)過劃分后的數(shù)據(jù)集進行裝載;[0016]步驟2.1:對數(shù)據(jù)集中所有劃分得到的數(shù)據(jù)分塊進行分組;[0017]將每個查詢屬性作為多維數(shù)據(jù)空間的一個維,那么該數(shù)據(jù)集中的數(shù)據(jù)分布在一個多維數(shù)據(jù)空間中,對查詢屬性的值域進行等寬劃分其實也就是對每個維的取值空間進行等寬劃分,基于每個維的劃分,分布在多維數(shù)據(jù)空間中的數(shù)據(jù)被劃分為多個小的數(shù)據(jù)塊,在此將劃分得到的每個小的數(shù)據(jù)塊稱作一個block;[0018]基于多維空間線性化方法對多維數(shù)據(jù)空間中的block進行編號,按照編號的大小順序?qū)lock劃分一個或者多個block小組;[0019]步驟2.2:創(chuàng)建數(shù)據(jù)集在分布式文件系統(tǒng)中的存儲目錄;[0020]步驟2.2.1:判斷數(shù)據(jù)庫系統(tǒng)存儲數(shù)據(jù)的根目錄root目錄是否存在,如果不存在,則執(zhí)行步驟2.2.2;如果存在,則執(zhí)行步驟2.2.3;[0021]步驟2.2.2:創(chuàng)建數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)存儲數(shù)據(jù)根目錄root目錄,執(zhí)行步驟2.2.3;[0022]步驟2.2.3:在根目錄root目錄下創(chuàng)建該存儲該數(shù)據(jù)的特定目錄table目錄,該目錄以該數(shù)據(jù)集所指定的名稱命名;[0023]步驟2.2.4:為每個block小組創(chuàng)建m個bucket子目錄來存放數(shù)據(jù),這m個子目錄的命名規(guī)則為"block小組編號.子目錄bucket編號";[0024]步驟2.3:將每個block小組中各個block中的數(shù)據(jù)分別以m個不同的放置概率放置到table目錄中的m個不同的bucket子目錄中,數(shù)據(jù)存儲在bucket子目錄的trunk文件中;[0025]對于block中的任意一條數(shù)據(jù),數(shù)據(jù)可能存放在m個bucket子目錄中的不同的trunk文件中,在此稱這m個trunk文件為一個trunk小組;對于放置到該trunk小組的任意一個block的數(shù)據(jù),需要記錄block數(shù)據(jù)在該trunk小組的放置次數(shù);[0026]如果trunk小組中任意一個trunk文件達到了指定的大小,則執(zhí)行步驟2.4;否貝IJ,繼續(xù)執(zhí)行步驟2.3;[0027]如果完成數(shù)據(jù)集中的所有數(shù)據(jù)的放置,則執(zhí)行步驟2.5;[0028]步驟2.4:在m個bucket子目錄中分別創(chuàng)建新的trunk文件存儲數(shù)據(jù),執(zhí)行步驟2.3;[0029]步驟2.5:將每個block小組中各個block在所有trunk小組的放置次數(shù)存放在分布式文件系統(tǒng)中。[0030]步驟3:對數(shù)據(jù)集進行概率查詢;[0031]步驟3.1:用戶通過輸入查詢語句設(shè)置查詢條件;[0032]查詢語句包括select、from、where和recall四個子句,其中,select子句表示需要查詢的屬性以及聚集操作的類型,包括avg,min,max,sum和count;from子句表示需要查詢的目標(biāo)數(shù)據(jù)集;where子句表示查詢屬性及其取值;recall子句表示查全概率,Pr表示查全概率的大小,查全概率是一個取值大于〇小于等于1的數(shù),表示查詢到滿足查詢條件的所有數(shù)據(jù)的可能性的大??;[0033]步驟3.2:判斷步驟3.1設(shè)置好的查詢條件是否滿足如下約束條件:[0034]約束1:目標(biāo)數(shù)據(jù)集必須存在于數(shù)據(jù)庫系統(tǒng)中;[0035]約束2:查詢屬性是指定的查詢屬性,且是查詢屬性集合的一個非空子集;[0036]約束3:聚集方式是指定的聚集方法中的一個;[0037]約束4:查全概率必須是一個大于0小于等于1的小數(shù);[0038]若滿足約束1~約束3,未指定或不滿足約束4,則執(zhí)行步驟3.3;若同時滿足上述4個約束,則執(zhí)行步驟3.4;若不滿足約束1~約束3的任意一個約束條件,則查詢失敗,結(jié)束;[0039]步驟3.3:將查全概率設(shè)為1,執(zhí)行步驟3.4;[0040]步驟3.4:根據(jù)查詢語句所指定的數(shù)據(jù)表以及查詢屬性確定查詢數(shù)據(jù)所屬的block以及block小組;[0041]步驟3.5:讀取block小組中該block的數(shù)據(jù)在各個trunk小組的放置次數(shù);[0042]步驟3.6:求解查詢數(shù)據(jù)在各個trunk文件的存在概率;[0043]存在概率的求解公式為A=〗-(1-凡)'丨其中P1表示該block數(shù)據(jù)在第i個bucket子目錄的放置概率,wk表示該block數(shù)據(jù)在第k個trunk小組的放置次數(shù);[0044]步驟3.7:根據(jù)數(shù)據(jù)在各個trunk文件的存在概率,啟發(fā)式地選擇trunk文件,使所選的trunk文件滿足以下兩個約束條件;[0045]約束1:查詢數(shù)據(jù)在所選擇的trunk文件上的查全概率大于或者等于查全概率P1^[0046]約束2:對于相同的查詢條件,每次查詢所選擇的trunk文件不完全相同,使得每次的查詢結(jié)果具有一定的隨機性,保證滿足查詢條件的所有數(shù)據(jù)都有可能被查詢到;[0047]trunk文件的啟發(fā)式選擇方法具體步驟描述如下:[0048]步驟3.7.1:對可能存儲查詢數(shù)據(jù)的所有trunk文件的存在概率進行歸一化處理;[0049]步驟3.7.2:選擇不存在概率l-pe小于或者等于查全概率p1^的trunk文件,將其添加到MapSeIe當(dāng)前第1頁1 2 3 4