亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法及裝置制造方法

文檔序號:6515569閱讀:349來源:國知局
一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法及裝置制造方法【專利摘要】本發(fā)明涉及一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法及裝置,包括以下步驟:按照數(shù)值屬性對大數(shù)據(jù)預(yù)先劃分成多個分區(qū);建立樹形索引結(jié)構(gòu),每個分區(qū)作為樹形索引結(jié)構(gòu)的一個節(jié)點;獲取待寫入樹形索引結(jié)構(gòu)的數(shù)據(jù)源,對支持區(qū)間查詢條件的數(shù)據(jù)源進行倒排索引處理;將經(jīng)過倒排索引處理的數(shù)據(jù)源寫入樹形索引結(jié)構(gòu)中的節(jié)點內(nèi),將數(shù)據(jù)源的相應(yīng)部分分別寫入數(shù)據(jù)文件及基數(shù)估算器內(nèi);根據(jù)區(qū)間查詢條件在樹形索引結(jié)構(gòu)中查詢滿足區(qū)間查詢條件的節(jié)點,得到節(jié)點中的基數(shù)估算器,對基數(shù)估算器進行邏輯處理,得到基數(shù)估算值。本發(fā)明通過降低數(shù)據(jù)的計算精度提高基數(shù)統(tǒng)計效率,在任意多區(qū)間查詢條件下,具備較高的查詢效率,使用了大數(shù)據(jù)增量更新技術(shù)提高索引數(shù)據(jù)在線更新效率?!緦@f明】一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法及裝置【
技術(shù)領(lǐng)域
】[0001]本發(fā)明涉及大數(shù)據(jù)計算領(lǐng)域,特別涉及一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法及裝置?!?br>背景技術(shù)
】[0002]隨著移動互聯(lián)網(wǎng)和Web2.0的發(fā)展,全球數(shù)據(jù)量正在驚人的增長:2008年全球產(chǎn)生的數(shù)據(jù)量為0.49ZB(1ZB=1021字節(jié)),2009年為0.8ZB,2010年為1.2ZB,2011年高達1.82ZB。IDC預(yù)計到2020年,全人類會產(chǎn)生超過40ZB的數(shù)據(jù)。在大數(shù)據(jù)中一類重要的數(shù)據(jù)是結(jié)構(gòu)化、半結(jié)構(gòu)化數(shù)據(jù),主要包括:交易數(shù)據(jù),日志數(shù)據(jù)等。據(jù)了解,淘寶網(wǎng)每日新增的交易數(shù)據(jù)達10TB,eBay分析平臺日處理數(shù)據(jù)量高達100PB,沃爾瑪每小時有大約2.5PB的數(shù)據(jù)存入數(shù)據(jù)庫。基于日志類數(shù)據(jù)進行挖掘、分析可以獲得越來越多的有價值的信息。如GoogleTrends對用戶上網(wǎng)記錄進行統(tǒng)計,成功預(yù)測流感在全球的擴散范圍,其準(zhǔn)確度高達到97%以上。[0003]多區(qū)間條件大數(shù)據(jù)基數(shù)估算是統(tǒng)計同時符合多個區(qū)間查詢條件下的不同的記錄的個數(shù),是聚合運算、統(tǒng)計分析的基礎(chǔ)計算工具,在數(shù)據(jù)分析、網(wǎng)絡(luò)監(jiān)控及數(shù)據(jù)庫優(yōu)化等領(lǐng)域都有廣泛的相關(guān)需求。但是目前的大數(shù)據(jù)分析統(tǒng)計系統(tǒng)本質(zhì)是一種精確計算的方法,例如Hadoop為基礎(chǔ)的大數(shù)據(jù)管理系統(tǒng)Hive,pig等通過掃描原始數(shù)據(jù)獲得準(zhǔn)確的計算值,但是隨著數(shù)據(jù)規(guī)模的增大計算效率顯著下降。近似查詢是通過降低部分計算精度,來提高大數(shù)據(jù)的計算效率。傳統(tǒng)的基數(shù)估算算法,如LinearCounting、LogLogCounting、HyperLogLogCounting、AdaptiveCounting,以及Bloomfilter等能解決簡單的不同兀素個數(shù)的統(tǒng)計,但是不支持區(qū)間查詢條件下的基數(shù)統(tǒng)計。實現(xiàn)多區(qū)間條件下的大數(shù)據(jù)高精度基數(shù)統(tǒng)計成為本發(fā)明需要解決的核心問題?!?br/>發(fā)明內(nèi)容】[0004]本發(fā)明所要解決的技術(shù)問題是提供一種大數(shù)據(jù)多區(qū)間查詢條件下的進行高精度近似計算的基數(shù)估計方法及裝置。[0005]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法,包括以下步驟:[0006]步驟1:按照數(shù)值屬性對大數(shù)據(jù)預(yù)先劃分成多個分區(qū),每個分區(qū)內(nèi)保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間有序排列;[0007]步驟2:建立樹形索引結(jié)構(gòu),每個分區(qū)作為樹形索引結(jié)構(gòu)的一個節(jié)點,每個節(jié)點用于記錄對應(yīng)的分區(qū)的最大值和最小值,每個節(jié)點中設(shè)置數(shù)據(jù)文件和基數(shù)估算器;[0008]步驟3:獲取待寫入樹形索引結(jié)構(gòu)的數(shù)據(jù)源,對支持區(qū)間查詢條件的數(shù)據(jù)源進行倒排索引處理;[0009]步驟4:將經(jīng)過倒排索引處理的數(shù)據(jù)源的相應(yīng)部分分別寫入數(shù)據(jù)文件及基數(shù)估算器內(nèi);[0010]步驟5:根據(jù)區(qū)間查詢條件在樹形索引結(jié)構(gòu)中查詢滿足區(qū)間查詢條件的節(jié)點,得到節(jié)點中的基數(shù)估算器,對基數(shù)估算器中的數(shù)據(jù)源的相應(yīng)部分進行邏輯處理,得到基數(shù)估算值。[0011]本發(fā)明的有益效果是:本發(fā)明針對大數(shù)據(jù)統(tǒng)計分析中通常使用的多區(qū)間查詢條件,提出一種近似查詢方法,通過降低數(shù)據(jù)的計算精度提高基數(shù)統(tǒng)計效率。本發(fā)明在每個分區(qū)內(nèi)使用了HyperLogLog基數(shù)估算算法,公開的資料和理論證明該算法可以在較小內(nèi)存條件下(5KB),在10億規(guī)模的數(shù)據(jù)中,獲得小于1.14%的計算誤差,并且,估算器之間的合并不會降低計算誤差,因此本發(fā)明同樣可以在任意的多區(qū)間條件下,提供較高計算精度;[0012]本發(fā)明在任意多區(qū)間查詢條件下,具備較高的查詢效率,適用于大數(shù)據(jù)的在線統(tǒng)計查詢。本發(fā)明基于分區(qū)信息建立層次化的索引結(jié)構(gòu)RC-Tree,在執(zhí)行具體的查詢操作時僅在RC-Tree中進行檢索,查詢效率與RC-Tree的節(jié)點數(shù)目相關(guān)與具體的數(shù)據(jù)量無關(guān)。在多個區(qū)間條件下的檢索運算,都轉(zhuǎn)化為二進制或運算,因此都具有較高計算效率;[0013]本發(fā)明使用了大數(shù)據(jù)增量更新技術(shù)提高索引數(shù)據(jù)在線更新效率。發(fā)明使用臨時表索引結(jié)構(gòu)保存增量更新的數(shù)據(jù),并對數(shù)據(jù)進行合并,當(dāng)?shù)竭_到一定的數(shù)據(jù)規(guī)模后,把合并以后的數(shù)據(jù)批量更新到全局的索引結(jié)構(gòu)中,并與全局索引進行再次合并,提高大數(shù)據(jù)的更新效率。[0014]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進。[0015]進一步,所述步驟3具體為:為每個待寫入的數(shù)據(jù)源分配一個全局唯一的ID,將每個數(shù)據(jù)源分別拆分為〈value,ID>結(jié)構(gòu)。[0016]進一步,所述步驟4具體為:將〈value,ID>結(jié)構(gòu)中的value寫入相應(yīng)的節(jié)點內(nèi)的數(shù)據(jù)文件中,ID利用哈希算法寫入節(jié)點內(nèi)的基數(shù)估算器中。[0017]進一步,所述步驟5具體為,當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為多個分區(qū)時,返回該多個分區(qū)內(nèi)所有基數(shù)估算器,將全部基數(shù)估算器利用哈希算法進行合并,得到合并后的符合查詢條件的全部基數(shù)值;[0018]當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為部分分區(qū),返回該部分分區(qū)所在的分區(qū)內(nèi)的數(shù)據(jù)文件,得到數(shù)據(jù)文件中的精確的value值。[0019]進一步,所述步驟3和步驟4之間還包括:[0020]步驟2-1:建立臨時表結(jié)構(gòu),所述臨時表結(jié)構(gòu)與樹形索引結(jié)構(gòu)中各個節(jié)點的結(jié)構(gòu)相同;[0021]步驟2-2:根據(jù)待寫入的數(shù)據(jù)源,在臨時表結(jié)構(gòu)中利用二分法查找到對應(yīng)的節(jié)點,將待寫入的數(shù)據(jù)源寫入該臨時表結(jié)構(gòu)中的節(jié)點中;[0022]步驟2-3:將臨時表結(jié)構(gòu)中每個節(jié)點中的數(shù)據(jù)文件存儲于樹形索引結(jié)構(gòu)中對應(yīng)的數(shù)據(jù)文件的末尾,將臨時表結(jié)構(gòu)中每個基數(shù)估算器與樹形索引結(jié)構(gòu)中對應(yīng)的技術(shù)估算器進行合并。[0023]進一步,一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計裝置,包括劃分模塊,建立模塊,倒排模塊,寫入模塊和查詢模塊;[0024]所述劃分模塊,用于按照數(shù)值屬性對大數(shù)據(jù)預(yù)先劃分成多個分區(qū),每個分區(qū)內(nèi)保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間有序排列,將各個分區(qū)的信息發(fā)送給建立模塊;[0025]所述建立模塊,用于接收所有分區(qū)的信息,建立樹形索引結(jié)構(gòu),每個分區(qū)作為樹形索引結(jié)構(gòu)的一個節(jié)點,每個節(jié)點用于記錄對應(yīng)的分區(qū)的最大值和最小值,每個節(jié)點中設(shè)置數(shù)據(jù)文件和基數(shù)估算器,將樹形索引結(jié)構(gòu)的信息、數(shù)據(jù)文件和基數(shù)估算器的信息發(fā)送給寫入豐旲塊;[0026]所述倒排模塊,用于獲取待寫入樹形索引結(jié)構(gòu)的數(shù)據(jù)源,對支持區(qū)間查詢條件的數(shù)據(jù)源進行倒排索引處理,將經(jīng)過倒排索引處理的數(shù)據(jù)源發(fā)送給寫入模塊;[0027]所述寫入模塊,用于接收經(jīng)過倒排索引處理的數(shù)據(jù)源,將經(jīng)過倒排索引處理的數(shù)據(jù)源的相應(yīng)部分分別寫入數(shù)據(jù)文件及基數(shù)估算器內(nèi),將寫入數(shù)據(jù)源后的樹形索引結(jié)構(gòu)的信息、數(shù)據(jù)文件和基數(shù)估算器的信息發(fā)送給查詢模塊;[0028]所述查詢模塊,用于接收寫入數(shù)據(jù)源后的樹形索引結(jié)構(gòu)的信息、數(shù)據(jù)文件和基數(shù)估算器的信息,根據(jù)區(qū)間查詢條件在樹形索引結(jié)構(gòu)中查詢滿足區(qū)間查詢條件的節(jié)點,得到節(jié)點中的基數(shù)估算器,根據(jù)基數(shù)估算器中的數(shù)據(jù)源的相應(yīng)部分,得到存儲于數(shù)據(jù)文件中的基數(shù)估算值。[0029]進一步,所述倒排模塊具體用于:為每個待寫入的數(shù)據(jù)源分配一個全局唯一的ID,將每個數(shù)據(jù)源分別拆分為〈value,ID>結(jié)構(gòu)。[0030]進一步,所述寫入模塊具體用于:將〈value,ID>結(jié)構(gòu)中的value寫入相應(yīng)的節(jié)點內(nèi)的數(shù)據(jù)文件中,ID利用哈希算法寫入節(jié)點內(nèi)的基數(shù)估算器中。[0031]所述查詢模塊具體用于,當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為多個分區(qū)時,返回該多個分區(qū)內(nèi)所有基數(shù)估算器,將全部基數(shù)估算器利用哈希算法進行合并,得到合并后的符合查詢條件的全部基數(shù)值;當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為部分分區(qū),返回該部分分區(qū)所在的分區(qū)內(nèi)的數(shù)據(jù)文件,得到數(shù)據(jù)文件中的精確的value值。[0032]進一步,所述倒排模塊和寫入模塊之間還包括建立臨時表結(jié)構(gòu)模塊,二分法查找模塊和存儲合并模塊;[0033]所述建立臨時表結(jié)構(gòu)模塊,用于建立臨時表結(jié)構(gòu),所述臨時表結(jié)構(gòu)與樹形索弓I結(jié)構(gòu)中各個節(jié)點的結(jié)構(gòu)相同;[0034]所述二分法查找模塊,用于根據(jù)待寫入的數(shù)據(jù)源,在臨時表結(jié)構(gòu)中利用二分法查找到對應(yīng)的節(jié)點,將待寫入的數(shù)據(jù)源寫入該臨時表結(jié)構(gòu)中的節(jié)點中;[0035]所述存儲合并模塊,用于將臨時表結(jié)構(gòu)中每個節(jié)點中的數(shù)據(jù)文件存儲于樹形索引結(jié)構(gòu)中對應(yīng)的數(shù)據(jù)文件的末尾,將臨時表結(jié)構(gòu)中每個基數(shù)估算器與樹形索引結(jié)構(gòu)中對應(yīng)的技術(shù)估算器進行合并?!緦@綀D】【附圖說明】[0036]圖1為本發(fā)明方法步驟流程圖;[0037]圖2為本發(fā)明裝置結(jié)構(gòu)圖;[0038]圖3為本發(fā)明樹形索引結(jié)構(gòu)示意圖;[0039]圖4為本發(fā)明樹形索引結(jié)構(gòu)索引數(shù)據(jù)增量合并流程圖;[0040]圖5為本發(fā)明多區(qū)間查詢過程流程圖。[0041]附圖中,各標(biāo)號所代表的部件列表如下:[0042]1、劃分模塊,2、建立模塊,3、倒排模塊,4、寫入模塊,5、查詢模塊,6、建立臨時表結(jié)構(gòu)模塊,7、二分法查找模塊,8、存儲合并模塊?!揪唧w實施方式】[0043]以下結(jié)合附圖對本發(fā)明的原理和特征進行描述,所舉實例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。[0044]如圖1所示,為本發(fā)明方法步驟流程圖;圖2為本發(fā)明裝置結(jié)構(gòu)圖;圖3為本發(fā)明樹形索引結(jié)構(gòu)示意圖;圖4為本發(fā)明樹形索引結(jié)構(gòu)索引數(shù)據(jù)增量合并流程圖;圖5為本發(fā)明多區(qū)間查詢過程流程圖。[0045]實施例1[0046]—種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法,包括以下步驟:[0047]步驟1:按照數(shù)值屬性對大數(shù)據(jù)預(yù)先劃分成多個分區(qū),每個分區(qū)內(nèi)保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間有序排列;[0048]步驟2:建立樹形索引結(jié)構(gòu),每個分區(qū)作為樹形索引結(jié)構(gòu)的一個節(jié)點,每個節(jié)點用于記錄對應(yīng)的分區(qū)的最大值和最小值,每個節(jié)點中設(shè)置數(shù)據(jù)文件和基數(shù)估算器;[0049]步驟3:獲取待寫入樹形索引結(jié)構(gòu)的數(shù)據(jù)源,對支持區(qū)間查詢條件的數(shù)據(jù)源進行倒排索引處理;[0050]步驟4:將經(jīng)過倒排索引處理的數(shù)據(jù)源的相應(yīng)部分分別寫入數(shù)據(jù)文件及基數(shù)估算器內(nèi);[0051]步驟5:根據(jù)區(qū)間查詢條件在樹形索引結(jié)構(gòu)中查詢滿足區(qū)間查詢條件的節(jié)點,得到節(jié)點中的基數(shù)估算器,對基數(shù)估算器中的數(shù)據(jù)源的相應(yīng)部分進行邏輯處理,得到基數(shù)估算值。[0052]所述步驟3具體為:為每個待寫入的數(shù)據(jù)源分配一個全局唯一的ID,將每個數(shù)據(jù)源分別拆分為〈value,ID>結(jié)構(gòu)。[0053]所述步驟4具體為:將〈value,ID>結(jié)構(gòu)中的value寫入相應(yīng)的節(jié)點內(nèi)的數(shù)據(jù)文件中,ID利用哈希算法寫入節(jié)點內(nèi)的基數(shù)估算器中。[0054]所述步驟5具體為,當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為多個分區(qū)時,返回該多個分區(qū)內(nèi)所有基數(shù)估算器,將全部基數(shù)估算器利用哈希算法進行合并,得到合并后的符合查詢條件的全部基數(shù)值;[0055]當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為部分分區(qū),返回該部分分區(qū)所在的分區(qū)內(nèi)的數(shù)據(jù)文件,得到數(shù)據(jù)文件中的精確的value值。[0056]所述步驟3和步驟4之間還包括:[0057]步驟2-1:建立臨時表結(jié)構(gòu),所述臨時表結(jié)構(gòu)與樹形索引結(jié)構(gòu)中各個節(jié)點的結(jié)構(gòu)相同;[0058]步驟2-2:根據(jù)待寫入的數(shù)據(jù)源,在臨時表結(jié)構(gòu)中利用二分法查找到對應(yīng)的節(jié)點,將待寫入的數(shù)據(jù)源寫入該臨時表結(jié)構(gòu)中的節(jié)點中;[0059]步驟2-3:將臨時表結(jié)構(gòu)中每個節(jié)點中的數(shù)據(jù)文件存儲于樹形索引結(jié)構(gòu)中對應(yīng)的數(shù)據(jù)文件的末尾,將臨時表結(jié)構(gòu)中每個基數(shù)估算器與樹形索引結(jié)構(gòu)中對應(yīng)的技術(shù)估算器進行合并。[0060]一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計裝置,包括劃分模塊1,建立模塊2,倒排模塊3,寫入模塊4和查詢模塊5;[0061]所述劃分模塊1,用于按照數(shù)值屬性對大數(shù)據(jù)預(yù)先劃分成多個分區(qū),每個分區(qū)內(nèi)保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間有序排列,將各個分區(qū)的信息發(fā)送給建立模塊2;[0062]所述建立模塊2,用于接收所有分區(qū)的信息,建立樹形索引結(jié)構(gòu),每個分區(qū)作為樹形索引結(jié)構(gòu)的一個節(jié)點,每個節(jié)點用于記錄對應(yīng)的分區(qū)的最大值和最小值,每個節(jié)點中設(shè)置數(shù)據(jù)文件和基數(shù)估算器,將樹形索引結(jié)構(gòu)的信息、數(shù)據(jù)文件和基數(shù)估算器的信息發(fā)送給與入1旲塊4;[0063]所述倒排模塊3,用于獲取待寫入樹形索引結(jié)構(gòu)的數(shù)據(jù)源,對支持區(qū)間查詢條件的數(shù)據(jù)源進行倒排索引處理,將經(jīng)過倒排索引處理的數(shù)據(jù)源發(fā)送給寫入模塊4;[0064]所述寫入模塊4,用于接收經(jīng)過倒排索引處理的數(shù)據(jù)源,將經(jīng)過倒排索引處理的數(shù)據(jù)源的相應(yīng)部分分別寫入數(shù)據(jù)文件及基數(shù)估算器內(nèi),將寫入數(shù)據(jù)源后的樹形索引結(jié)構(gòu)的信息、數(shù)據(jù)文件和基數(shù)估算器的信息發(fā)送給查詢模塊5;[0065]所述查詢模塊5,用于接收寫入數(shù)據(jù)源后的樹形索引結(jié)構(gòu)的信息、數(shù)據(jù)文件和基數(shù)估算器的信息,根據(jù)區(qū)間查詢條件在樹形索引結(jié)構(gòu)中查詢滿足區(qū)間查詢條件的節(jié)點,得到節(jié)點中的基數(shù)估算器,根據(jù)基數(shù)估算器中的數(shù)據(jù)源的相應(yīng)部分,得到存儲于數(shù)據(jù)文件中的基數(shù)估算值。[0066]所述倒排模塊3具體用于:為每個待寫入的數(shù)據(jù)源分配一個全局唯一的ID,將每個數(shù)據(jù)源分別拆分為〈value,ID>結(jié)構(gòu)。[0067]所述寫入模塊4具體用于:將〈value,ID>結(jié)構(gòu)中的value寫入相應(yīng)的節(jié)點內(nèi)的數(shù)據(jù)文件中,ID利用哈希算法寫入節(jié)點內(nèi)的基數(shù)估算器中。[0068]所述查詢模塊5具體用于,當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為多個分區(qū)時,返回該多個分區(qū)內(nèi)所有基數(shù)估算器,將全部基數(shù)估算器利用哈希算法進行合并,得到合并后的符合查詢條件的全部基數(shù)值;當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為部分分區(qū),返回該部分分區(qū)所在的分區(qū)內(nèi)的數(shù)據(jù)文件,得到數(shù)據(jù)文件中的精確的value值。[0069]所述倒排模塊3和寫入模塊4之間還包括建立臨時表結(jié)構(gòu)模塊6,二分法查找模塊7和存儲合并模塊8;[0070]所述建立臨時表結(jié)構(gòu)模塊6,用于建立臨時表結(jié)構(gòu),所述臨時表結(jié)構(gòu)與樹形索引結(jié)構(gòu)中各個節(jié)點的結(jié)構(gòu)相同;[0071]所述二分法查找模塊7,用于根據(jù)待寫入的數(shù)據(jù)源,在臨時表結(jié)構(gòu)中利用二分法查找到對應(yīng)的節(jié)點,將待寫入的數(shù)據(jù)源寫入該臨時表結(jié)構(gòu)中的節(jié)點中;[0072]所述存儲合并模塊8,用于將臨時表結(jié)構(gòu)中每個節(jié)點中的數(shù)據(jù)文件存儲于樹形索引結(jié)構(gòu)中對應(yīng)的數(shù)據(jù)文件的末尾,將臨時表結(jié)構(gòu)中每個基數(shù)估算器與樹形索引結(jié)構(gòu)中對應(yīng)的技術(shù)估算器進行合并。[0073]在具體實施中,本發(fā)明具體包括以下步驟:[0074]步驟1:大數(shù)據(jù)預(yù)分區(qū)處理:[0075]本發(fā)明首先對大數(shù)據(jù)進行預(yù)分區(qū)處理。在分布式大數(shù)據(jù)系統(tǒng)中,分區(qū)是常用的技術(shù)方法。本發(fā)明對大數(shù)據(jù)源根據(jù)數(shù)值屬性劃分為多個相互獨立的N分區(qū),每個分區(qū)表示一定范圍,例如對(-OO,+OO)之間,可以劃分為:(-°°,key),Lkey1,key2),[key2,key3),…,[keyw+)共N個區(qū)間。其中key1;key2,有序且遞增。在給定區(qū)間個數(shù)N,如何確定分區(qū)key的序列本發(fā)明首先轉(zhuǎn)化為大數(shù)(BigInteger)運算,然后利用大數(shù)除法,確定每個分區(qū)范圍。[0076]步驟2:建立RC-Tree:[0077]根據(jù)步驟I產(chǎn)生的分區(qū),建立RC-Tree索引結(jié)構(gòu)。RC-Tree在基本的BTree基礎(chǔ)上修改而來。RC-Tree每個節(jié)點記錄是一個區(qū)間信息,記為〈[start-key,end-key],CE,otherlnfo〉結(jié)構(gòu),其中:[start-key,end-key)表示一個分區(qū)內(nèi)的最大和最小值;CE是本區(qū)間內(nèi)的基數(shù)估算器,建立時初始化為空,OtherInfo是本區(qū)間內(nèi)對應(yīng)的數(shù)據(jù)文件存儲位置以及其他的一些元數(shù)據(jù)信息。RC-Tree的內(nèi)節(jié)點是葉節(jié)點合并以后的結(jié)果,區(qū)間范圍是所有葉節(jié)點的區(qū)間范圍。利用RC-Tree可以有效組織有步驟I生成的元數(shù)據(jù)信息,其中的每個區(qū)間直接使用RC-Tree的一個葉節(jié)點來管理,例如對于RC-Tree的第一個節(jié)點可以表示為:start-key=-00,end-key=keyl0[0078]步驟3:倒排加載的結(jié)構(gòu)化數(shù)據(jù)源:[0079]本發(fā)明對于寫入的數(shù)據(jù)源要進行倒排處理。首先針對寫入的日志類數(shù)據(jù)和其他半結(jié)構(gòu)化數(shù)據(jù)需要區(qū)分哪些字段支持區(qū)間查詢條件。默認的所有的字段全部支持區(qū)間條件查詢。對于支持區(qū)間條件查詢的字段要進行倒排處理。倒排的方法是對每條記錄引入一個全局唯一的ID,本發(fā)明中使用ΠΝΤ64表示。把多個字段分別拆分為〈value,ID>結(jié)構(gòu),拆分以后的字段當(dāng)ID相同時表示是來自同一條記錄。例如對于一條網(wǎng)絡(luò)訪問日志記錄為:“en,dbinfo,…”網(wǎng)絡(luò)訪問日志,其中en是頁面語言類型,dbinfo是頁面類型,倒排以后的結(jié)構(gòu)為〈en,0001〉,〈dbinfo,0001>o[0080]步驟4:更新RC-Tree:[0081]把倒排以后的多個〈value,ID>結(jié)構(gòu)寫入到RC-Tree中,寫入的方法是首先在RC-Tree中查找滿足valuee[start-key,end-key)條件的區(qū)間,value寫入到分區(qū)內(nèi)的數(shù)據(jù)文件中,ID利用hash算法寫入節(jié)點的CE中。[0082]由于大數(shù)據(jù)面臨吞吐率高的應(yīng)用特點。本發(fā)明利用臨時鏈表作為緩存結(jié)構(gòu)進行增量大數(shù)據(jù)合并提高數(shù)據(jù)的更新效率。臨時表的結(jié)構(gòu)與RC-Tree節(jié)點的結(jié)構(gòu)相同,也是記錄不同分區(qū)的索引數(shù)據(jù)。當(dāng)有更新數(shù)據(jù)到來時,首先在臨時表中利用二分法查找到對應(yīng)的分區(qū)節(jié)點,然后把value寫到臨時文件中,ID寫入到臨時節(jié)點的估算器中。由于臨時表的數(shù)據(jù)量較少,寫入效率較高。當(dāng)臨時表達到一定的規(guī)模,不20萬個節(jié)點時,把臨時表批量寫入到RC-Tree中。寫入的過程是依次把臨時表中每個臨時節(jié)點對應(yīng)的數(shù)據(jù)文件直接追加到RC-Tree數(shù)據(jù)文件的末尾,每個臨時節(jié)點的估算器利用二進制或操作與RC-Tree節(jié)點的估算器進行合并。由于此時主要是由整個文件的追加寫,以及二進制運算操作,因此提高了RC-Tree吞吐率。RC-Tree在實驗條件下,可以達到平均20MB/s的實時加載速率,具體的RC-Tree更新過程見附圖3.[0083]步驟5:多區(qū)間條件近似基數(shù)查詢:[0084]多區(qū)間條件基數(shù)查詢是統(tǒng)計滿足多個區(qū)間條件下的不同的記錄個數(shù),可以通過類sql語句表示其語法規(guī)則:[0085]Selectdistinctcount(*)fromtablenamewhere[0086]li<Pi<l2opr[0087]1介2〈1,..;[0088]其中:tabIename表示SQL語句中的表名;opr是邏輯運算符,一般包含AND,OR等邏輯運算。Pi表示查詢字段名稱;li;Ip表示一個區(qū)間范圍。[0089]區(qū)間條件是常用的過濾類查詢條件,其涵蓋的數(shù)據(jù)量大。在多條件區(qū)間查詢中,可以針對不同的字段列構(gòu)造區(qū)間查詢條件,因此目前的大數(shù)據(jù)系統(tǒng),No-SQLDB等精確計算方法,都無法高效的獲得計算結(jié)果。本發(fā)明針對上述檢索模式,基于RC-Tree提供高效的近似查詢。[0090]本發(fā)明針對多區(qū)間查詢條件分為兩個步驟實現(xiàn),首先針對每個區(qū)間查詢條件在RC-Tree中進行查詢滿足條件的估算器;然后根據(jù)邏輯運算符進行多區(qū)間邏輯運算,最后獲得計算結(jié)果。[0091]I)單區(qū)間條件查詢:[0092]RC-Tree的各個節(jié)點記錄了所有分區(qū)信息。當(dāng)一個區(qū)間條件覆蓋多個節(jié)點所包含的區(qū)間時,按序返回所有節(jié)點的估算器,然后進行估算器的merge,生成一個能夠表示多個區(qū)間基數(shù)的單一估算器。但是對于查詢條件開始和結(jié)束兩個端點會存在部分覆蓋RC-Tree節(jié)點的情況,此時本發(fā)明可以掃描數(shù)據(jù)文件獲得本區(qū)間內(nèi)的精確查詢結(jié)果,但是由于本方法是一個近似查詢方法,可以直接返回查詢條件所涉及的所有節(jié)點的估算器,作為查詢結(jié)果,盡管會增大部分查詢誤差,但是會先顯著提高查詢效率。當(dāng)有多個區(qū)間檢索條件時,一次針對每個區(qū)間查詢條件返回一個合并以后的估算器。估算器的合并方法是采用Hash值的二進制或運算實現(xiàn)。[0093]2)邏輯條件下的基數(shù)查詢:[0094]多個區(qū)間查詢條件是通過邏輯運算符連接實現(xiàn)的,一般有AND,OR等集合運算關(guān)系。本發(fā)明針對OR運算本發(fā)明對每個區(qū)間查詢條件返回的估算器進一步對其Hash值進行或運算,即可獲得由多個OR運算符連接的多區(qū)間條件的基數(shù)估算值。對于AND運算而言本發(fā)明采用集合運算的inclusive-exclusiveprinciple,即|A|ΠB|=|A|+1B|-1AU|B|。首先利用I)結(jié)果中每個區(qū)間條件的估算器計算其基數(shù)估算值,然后再利用邏輯或方法獲得基數(shù)估算器以及其基數(shù)值。結(jié)合inclusive-exclusiveprinciple即可獲得由邏輯AND連接的多個查詢條件。[0095]由于數(shù)據(jù)分布在RC-Tree和臨時表中,在查詢過程中需要針對RC-Tree和臨時表分別進行查找,然后再結(jié)合I)或2)的合并規(guī)則進行合并即可。[0096]關(guān)于多區(qū)間查詢條件見附圖5所示。[0097]以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)?!緳?quán)利要求】1.一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法,其特征在于,包括以下步驟:步驟1:按照數(shù)值屬性對大數(shù)據(jù)預(yù)先劃分成多個分區(qū),每個分區(qū)內(nèi)保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間有序排列;步驟2:建立樹形索引結(jié)構(gòu),每個分區(qū)作為樹形索引結(jié)構(gòu)的一個節(jié)點,每個節(jié)點用于記錄對應(yīng)的分區(qū)的最大值和最小值,每個節(jié)點中設(shè)置數(shù)據(jù)文件和基數(shù)估算器;步驟3:獲取待寫入樹形索引結(jié)構(gòu)的數(shù)據(jù)源,對支持區(qū)間查詢條件的數(shù)據(jù)源進行倒排索引處理;步驟4:將經(jīng)過倒排索引處理的數(shù)據(jù)源的相應(yīng)部分分別寫入數(shù)據(jù)文件及基數(shù)估算器內(nèi);步驟5:根據(jù)區(qū)間查詢條件在樹形索引結(jié)構(gòu)中查詢滿足區(qū)間查詢條件的節(jié)點,得到節(jié)點中的基數(shù)估算器,對基數(shù)估算器中的數(shù)據(jù)源的相應(yīng)部分進行邏輯處理,得到基數(shù)估算值。2.根據(jù)權(quán)利要求1所述的大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法,其特征在于,所述步驟3具體為:為每個待寫入的數(shù)據(jù)源分配一個全局唯一的ID,將每個數(shù)據(jù)源分別拆分為〈value,ID>結(jié)構(gòu)。3.根據(jù)權(quán)利要求1所述的大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法,其特征在于,所述步驟4具體為:將〈value,ID>結(jié)構(gòu)中的value寫入相應(yīng)的節(jié)點內(nèi)的數(shù)據(jù)文件中,ID利用哈希算法寫入節(jié)點內(nèi)的基數(shù)估算器中。4.根據(jù)權(quán)利要求3所述的大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法,其特征在于,所述步驟5具體為,當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為多個分區(qū)時,返回該多個分區(qū)內(nèi)所有基數(shù)估算器,將全部基數(shù)估算器利用哈希算法進行合并,得到合并后的符合查詢條件的全部基數(shù)值;當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為部分分區(qū),返回該部分分區(qū)所在的分區(qū)內(nèi)的數(shù)據(jù)文件,得到數(shù)據(jù)文件中的精確的value值。5.根據(jù)權(quán)利要求1至4任一所述的大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法,其特征在于,所述步驟3和步驟4之間還包括:步驟2-1:建立臨時表結(jié)構(gòu),所述臨時表結(jié)構(gòu)與樹形索引結(jié)構(gòu)中各個節(jié)點的結(jié)構(gòu)相同;步驟2-2:根據(jù)待寫入的數(shù)據(jù)源,在臨時表結(jié)構(gòu)中利用二分法查找到對應(yīng)的節(jié)點,將待寫入的數(shù)據(jù)源寫入該臨時表結(jié)構(gòu)中的節(jié)點中;步驟2-3:將臨時表結(jié)構(gòu)中每個節(jié)點中的數(shù)據(jù)文件存儲于樹形索引結(jié)構(gòu)中對應(yīng)的數(shù)據(jù)文件的末尾,將臨時表結(jié)構(gòu)中每個基數(shù)估算器與樹形索引結(jié)構(gòu)中對應(yīng)的技術(shù)估算器進行合并。6.一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計裝置,其特征在于:包括劃分模塊(1),建立模塊(2),倒排模塊(3),寫入模塊(4)和查詢模塊(5);所述劃分模塊(1),用于按照數(shù)值屬性對大數(shù)據(jù)預(yù)先劃分成多個分區(qū),每個分區(qū)內(nèi)保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間有序排列,將各個分區(qū)的信息發(fā)送給建立模塊(2);所述建立模塊(2),用于接收所有分區(qū)的信息,建立樹形索引結(jié)構(gòu),每個分區(qū)作為樹形索引結(jié)構(gòu)的一個節(jié)點,每個節(jié)點用于記錄對應(yīng)的分區(qū)的最大值和最小值,每個節(jié)點中設(shè)置數(shù)據(jù)文件和基數(shù)估算器,將樹形索引結(jié)構(gòu)的信息、數(shù)據(jù)文件和基數(shù)估算器的信息發(fā)送給寫入豐旲塊(4);所述倒排模塊(3),用于獲取待寫入樹形索引結(jié)構(gòu)的數(shù)據(jù)源,對支持區(qū)間查詢條件的數(shù)據(jù)源進行倒排索引處理,將經(jīng)過倒排索引處理的數(shù)據(jù)源發(fā)送給寫入模塊(4);所述寫入模塊(4),用于接收經(jīng)過倒排索引處理的數(shù)據(jù)源,將經(jīng)過倒排索引處理的數(shù)據(jù)源的相應(yīng)部分分別寫入數(shù)據(jù)文件及基數(shù)估算器內(nèi),將寫入數(shù)據(jù)源后的樹形索引結(jié)構(gòu)的信息、數(shù)據(jù)文件和基數(shù)估算器的信息發(fā)送給查詢模塊(5);所述查詢模塊(5),用于接收寫入數(shù)據(jù)源后的樹形索引結(jié)構(gòu)的信息、數(shù)據(jù)文件和基數(shù)估算器的信息,根據(jù)區(qū)間查詢條件在樹形索引結(jié)構(gòu)中查詢滿足區(qū)間查詢條件的節(jié)點,得到節(jié)點中的基數(shù)估算器,根據(jù)基數(shù)估算器中的數(shù)據(jù)源的相應(yīng)部分,得到存儲于數(shù)據(jù)文件中的基數(shù)估算值。7.根據(jù)權(quán)利要求6所述的大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計裝置,其特征在于,所述倒排模塊(3)具體用于:為每個待寫入的數(shù)據(jù)源分配一個全局唯一的ID,將每個數(shù)據(jù)源分別拆分為〈value,ID>結(jié)構(gòu)。8.根據(jù)權(quán)利要求6所述的大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計裝置,其特征在于,所述寫入模塊(4)具體用于:將〈value,ID>結(jié)構(gòu)中的value寫入相應(yīng)的節(jié)點內(nèi)的數(shù)據(jù)文件中,ID利用哈希算法寫入節(jié)點內(nèi)的基數(shù)估算器中。9.根據(jù)權(quán)利要求3所述的大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計裝置,其特征在于,所述查詢模塊(5)具體用于,當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為多個分區(qū)時,返回該多個分區(qū)內(nèi)所有基數(shù)估算器,將全部基數(shù)估算器利用哈希算法進行合并,得到合并后的符合查詢條件的全部基數(shù)值;當(dāng)區(qū)間查詢條件覆蓋的區(qū)間為部分分區(qū),返回該部分分區(qū)所在的分區(qū)內(nèi)的數(shù)據(jù)文件,得到數(shù)據(jù)文件中的精確的value值。10.根據(jù)權(quán)利要求6至9任一所述的大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計裝置,其特征在于:所述倒排模塊(3)和寫入模塊(4)之間還包括建立臨時表結(jié)構(gòu)模塊(6),二分法查找模塊(7)和存儲合并模塊(8);所述建立臨時表結(jié)構(gòu)模塊(6),用于建立臨時表結(jié)構(gòu),所述臨時表結(jié)構(gòu)與樹形索引結(jié)構(gòu)中各個節(jié)點的結(jié)構(gòu)相同;所述二分法查找模塊(7),用于根據(jù)待寫入的數(shù)據(jù)源,在臨時表結(jié)構(gòu)中利用二分法查找到對應(yīng)的節(jié)點,將待寫入的數(shù)據(jù)源寫入該臨時表結(jié)構(gòu)中的節(jié)點中;所述存儲合并模塊(8),用于將臨時表結(jié)構(gòu)中每個節(jié)點中的數(shù)據(jù)文件存儲于樹形索引結(jié)構(gòu)中對應(yīng)的數(shù)據(jù)文件的末尾,將臨時表結(jié)構(gòu)中每個基數(shù)估算器與樹形索引結(jié)構(gòu)中對應(yīng)的技術(shù)估算器進行合并。【文檔編號】G06F17/30GK103544258SQ201310484503【公開日】2014年1月29日申請日期:2013年10月16日優(yōu)先權(quán)日:2013年10月16日【發(fā)明者】云曉春,徐小琳,王明華,劉陽,李志輝,吳廣君,王樹鵬,王勇,常為領(lǐng)申請人:國家計算機網(wǎng)絡(luò)與信息安全管理中心,中國科學(xué)院信息工程研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1