本發(fā)明屬于大數(shù)據(jù)計算
技術領域:
,尤其涉及一種面向流式大數(shù)據(jù)的基數(shù)估計方法。
背景技術:
:當前大數(shù)據(jù)時代可把大數(shù)據(jù)分成兩種:批式大數(shù)據(jù)和流式大數(shù)據(jù)。如果把數(shù)據(jù)當成水庫的話,水庫里的水就是批式大數(shù)據(jù),進來的水就是流式大數(shù)據(jù)。流式大數(shù)據(jù)是指以數(shù)據(jù)流的方式到達并實時寫入到存儲管理系統(tǒng)中的數(shù)據(jù)源,也稱FastData。其具有高吞吐率、體量巨大的特點,而且數(shù)據(jù)規(guī)模與數(shù)據(jù)值范圍往往不可預知?;鶖?shù)(cardinality)是指一個集合(允許存在重復元素,與集合論對集合嚴格的定義略有不同)中不同元素的個數(shù)。精確的基數(shù)計數(shù)在面對大數(shù)據(jù)場景時往往力不從心,因此如何在誤差可控的情況下對基數(shù)進行估計就顯得十分重要。目前常見的基數(shù)估計算法有LinearCounting、LogLogCounting、AdaptiveCounting及HyperLogLogCounting等,都是基于概率統(tǒng)計理論所設計的概率算法?;鶖?shù)估計在數(shù)據(jù)庫優(yōu)化、網(wǎng)絡監(jiān)控、數(shù)據(jù)分析等領域都有廣泛的應用需求。例如數(shù)據(jù)庫優(yōu)化中需要計算的一個重要統(tǒng)計特性NDV(numberofdistinctvalues),實際上就是對表中的相應數(shù)據(jù)進行基數(shù)估計。再例如入侵檢測系統(tǒng)(IDS)中需要統(tǒng)計每一個源地址建立了多少個不同的連接,來檢測一些拒絕服務攻擊(DOS),實際上就是提取數(shù)據(jù)包頭的相應信息進行計數(shù)估計。因此,對流式大數(shù)據(jù)進行高精度實時的基數(shù)估計具有重要的價值。目前的大數(shù)據(jù)分析統(tǒng)計系統(tǒng)本質是一種精確計算的方法,例如基于Hadoop的相關大數(shù)據(jù)存儲管理系統(tǒng)與方法,是基于先存儲后處理的批處理模式實現(xiàn)的,然后掃描原始數(shù)據(jù)獲得準確的計算值,無法應對流式大數(shù)據(jù)高速到達的應用特征。盡管Tez,SparkStreaming,Storm等系統(tǒng)基于內存計算可以提高響應速度,但由于精確計算需維護與原始數(shù)據(jù)等量的內存空間來支持數(shù)據(jù)的統(tǒng)計查詢,因此很難適用流式大數(shù)據(jù)海量規(guī)模的特點。為了解決上述問題,人們提出了一些解決方案,其中:Oracle公司的數(shù)據(jù)庫團隊提出了SynopsisAggregation算法(申請?zhí)?0/859,817),是一種基于概率的基數(shù)估計算法。該方法包括一下步驟:1.將數(shù)據(jù)按照一定規(guī)則進行分區(qū),每個分區(qū)調用ApproximateNDV算法進行計算獲得一個概要元素集合Synopsis;2.對每個分區(qū)的集合Synopsis進行歸一化處理,并進行合并形成最終的集合Synopses;3.對集合Synopses中的元素再次調用ApproximateNDV算法進行計算;4.對第3步的結果調用公式即可獲得最終的基數(shù)估計值。該方法還引入了增量框架模型,對歷史分區(qū)數(shù)據(jù)進行增量計算,提高計算效率。但其存在的不足之處是:調用的ApproximateNDV算法具有較大的計算復度,同時也需要較大的內存,因此并不適用于流式大數(shù)據(jù)的實時基數(shù)估計。國家計算機網(wǎng)絡與信息安全管理中心和中國科學院信息工程研究所的專利“一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法及裝置”(申請?zhí)?01310484503.6申請公布號CN103544258A)公開了一種大數(shù)據(jù)多區(qū)間查詢條件下的基數(shù)估計方法及裝置,該方法包括以下步驟:1.按照數(shù)值屬性對大數(shù)據(jù)預先劃分成多個分區(qū),每個分區(qū)內保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間有序排列;2.建立樹形索引結構,每個分區(qū)作為樹形索引結構的一個節(jié)點,每個節(jié)點用于記錄對應的分區(qū)的最大值和最小值,每個節(jié)點中設置數(shù)據(jù)文件和基數(shù)估算器;3.獲取待寫入樹形索引結構的數(shù)據(jù)源,對支持區(qū)間查詢條件的數(shù)據(jù)源進行倒排索引處理;4.將經(jīng)過倒排索引處理的數(shù)據(jù)源的相應部分分別寫入數(shù)據(jù)文件及基數(shù)估算器內;5.根據(jù)區(qū)間查詢條件在樹形索引結構中查詢滿足區(qū)間查詢條件的節(jié)點,得到節(jié)點中的基數(shù)估算器,對基數(shù)估算器中的數(shù)據(jù)源的相應部分進行邏輯處理,得到基數(shù)估算值。該方法雖然能實現(xiàn)多區(qū)間查詢條件下的基數(shù)估計,但其存在的不足之處是:分區(qū)是嚴格依據(jù)數(shù)據(jù)值的大小排列的,而流式大數(shù)據(jù)的數(shù)據(jù)規(guī)模與數(shù)據(jù)值范圍往往不可預知,從而極大的降低了算法效率;更為重要的是,每個分區(qū)都是調用HyperLogLog基數(shù)估計算法,該算法在某些數(shù)據(jù)分布下估計精度會下降,同時當流式大數(shù)據(jù)急劇增加時,計算時間增加,不能保證數(shù)據(jù)處理的實時性。綜上所述,現(xiàn)有的流式大數(shù)據(jù)的基數(shù)估計方法存在調用的基數(shù)估計算法具有較大的計算復雜度,極大降低了算法效率;估計精度會下降,同時當流式大數(shù)據(jù)急劇增加時,計算時間增加,不能保證數(shù)據(jù)處理的實時性。技術實現(xiàn)要素:本發(fā)明的目的在于提供一種面向流式大數(shù)據(jù)的基數(shù)估計方法,旨在解決現(xiàn)有的流式大數(shù)據(jù)的基數(shù)估計方法存在調用的基數(shù)估計算法具有較大的計算復雜度,極大降低了算法效率;估計精度會下降,同時當流式大數(shù)據(jù)急劇增加時,計算時間增加,不能保證數(shù)據(jù)處理實時性的問題。本發(fā)明是這樣實現(xiàn)的,一種面向流式大數(shù)據(jù)的基數(shù)估計方法,所述面向流式大數(shù)據(jù)的基數(shù)估計方法針對流式大數(shù)據(jù),通過降低計算精度提高基數(shù)估計效率;對HyperLogLogCounting算法所需的中間統(tǒng)計信息進行分區(qū)計算,選擇高效的哈希算法和最優(yōu)的分桶個數(shù),通過改進的分桶方法將哈希過的數(shù)據(jù)較為均勻的映射到m個不同的桶號中,并進行增量維護,再進行合并得到最終的中間統(tǒng)計信息,從而計算基數(shù)估計值。進一步,所述面向流式大數(shù)據(jù)的基數(shù)估計方法包括以下步驟:步驟一,按照流式數(shù)據(jù)到達時刻以相同的時間間隔將大數(shù)據(jù)劃分成多個分區(qū),每個分區(qū)內保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間按照時序關系有序排列;步驟二,在每個分區(qū)構建統(tǒng)計信息計算器,通過改進的分桶方法將哈希過的數(shù)據(jù)較為均勻的映射到m個不同的桶號中,維護和建立一個m字節(jié)大小的記錄分區(qū)數(shù)據(jù)統(tǒng)計信息的bitmap;步驟三,建立和增量維護全局哈希表,每個分區(qū)的統(tǒng)計信息以鍵值對的形式存入全局哈希表,鍵為對應分區(qū)起始時刻時間經(jīng)過哈希后的值,值即為該分區(qū)的經(jīng)過統(tǒng)計信息計算器獲得的bitmap中存放的值;步驟四,構建分區(qū)統(tǒng)計信息合并器,從全局哈希表中獲取給定數(shù)據(jù)時間窗口中所有分區(qū)的統(tǒng)計信息bitmap,合并成可以代表數(shù)據(jù)時間窗口中所有數(shù)據(jù)的統(tǒng)計信息bitmap;步驟五,構建基數(shù)估計計算器,從分區(qū)統(tǒng)計信息合并器中獲取最終的統(tǒng)計信息bitmap,進行偏差調整,選擇最優(yōu)的結果。進一步,所述分區(qū)的建立包括:按照流式數(shù)據(jù)到達時刻以相同的時間間隔將大數(shù)據(jù)劃分成多個分區(qū),每個分區(qū)內保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間按照時序關系有序排列如下:[t1,t1+Δt),[t1+Δt,t1+2Δt),[t1+2Δt,t1+3Δt),...,[t1+kΔt,t2),其中k=floor((t2-t1)/Δt)。進一步,所述在每個分區(qū)構建統(tǒng)計信息計算器將數(shù)據(jù)映射到64比特空間;最終確定分桶數(shù)m=216;截取64比特數(shù)據(jù)值的前3組log2m比特的二進制值相互異或,將異或值作為桶號;64比特數(shù)據(jù)值去掉前l(fā)og2m比特剩余比特組成的二進制值就是需處理的真實值,計算其ρ值,更新bitmap中對應桶號的最大ρ值。進一步,所述建立和增量維護全局哈希表包括:第一步,實時監(jiān)控數(shù)據(jù)時間窗口中的分區(qū),確定離開數(shù)據(jù)時間窗口,新進入數(shù)據(jù)時間窗口,仍在數(shù)據(jù)時間窗口數(shù)據(jù)未發(fā)生改變,仍在數(shù)據(jù)時間窗口數(shù)據(jù)發(fā)生改變這四類分區(qū);第二步,根據(jù)鍵值從全局哈希表中刪除不在數(shù)據(jù)時間窗口的分區(qū)統(tǒng)計信息;第三步,計算新進入時間窗口中的分區(qū)統(tǒng)計信息,添加到全局哈希表中;第四步,重新計算仍在時間窗口中但數(shù)據(jù)發(fā)生改變的分區(qū)統(tǒng)計信息;第五步,保持仍在時間窗口中數(shù)據(jù)未發(fā)生改變的分區(qū)統(tǒng)計信息。進一步,所述構建分區(qū)統(tǒng)計信息合并器包括:1)遍歷全局哈希表,根據(jù)鍵獲取存放分區(qū)統(tǒng)計新的所有值;2)存放每個分區(qū)統(tǒng)計信息的bitmap一共有m字節(jié),有n個分區(qū)統(tǒng)計信息b1,b2,b3,...,bn,則M[i]=max{b1[i],b2[i],...,bn[i]},i=0,1,...,m-1,則M中存放的就是最終所有分區(qū)合并后的統(tǒng)計信息。進一步,所述構建基數(shù)估計計算器包括:(1)從分區(qū)統(tǒng)計信息合并器中獲取最終的統(tǒng)計信息M,通過調和平均計算初步的基數(shù)估計值E;(2)根據(jù)計算出的基數(shù)估計值,E太大就進行大范圍修正,若范圍太小則進行小范圍修正,若范圍剛好則不修正。本發(fā)明的另一目的在于提供一種應用所述面向流式大數(shù)據(jù)的基數(shù)估計方法的數(shù)據(jù)庫優(yōu)化系統(tǒng)。本發(fā)明的另一目的在于提供一種應用所述面向流式大數(shù)據(jù)的基數(shù)估計方法的網(wǎng)絡監(jiān)控系統(tǒng)。本發(fā)明的另一目的在于提供一種應用所述面向流式大數(shù)據(jù)的基數(shù)估計方法的數(shù)據(jù)分析系統(tǒng)。本發(fā)明提供的面向流式大數(shù)據(jù)的基數(shù)估計方法,在基數(shù)估計算法HyperLogLogCounting中對中間統(tǒng)計信息進行分區(qū)增量維護,同時改進分桶平均時的分桶方法,使得基數(shù)估計更加精準、高效。本發(fā)明實現(xiàn)了實時基數(shù)估計,針對流式大數(shù)據(jù),先通過降低計算精度提高基數(shù)估計效率,同時對HyperLogLogCounting算法所需的中間統(tǒng)計信息進行分區(qū)計算,選擇高效的哈希算法和最優(yōu)的分桶個數(shù),并進行增量維護,最終再進行合并得到最終的中間統(tǒng)計信息,從而計算基數(shù)估計值。有效的利用了歷史數(shù)據(jù),避免了重復計算,極大的提高了基數(shù)估計的效率。實現(xiàn)了高精度基數(shù)估計,對數(shù)據(jù)的分桶是否平均以及分桶的數(shù)量對估計精度有很大的影響,相比傳統(tǒng)算法給出了高效的分桶方法,權衡內存消耗和估計精度選擇合適的分桶數(shù),提高了基數(shù)估計的精度。算法空間復雜度很低,降低了計算資源消耗,這是由于其他的一些基數(shù)估計算法空間復雜度都是O(n)或者O(logn),而基于HyperLogLogCounting改進的所述基數(shù)估計算法空間復雜度為O(log(logn)),只需維護很小的內存數(shù)據(jù),高精度實時的對流式大數(shù)據(jù)進行基數(shù)估計,極大的降低了計算資源。整個數(shù)據(jù)時間窗口有5000萬條數(shù)據(jù),按照不同的時間間隔分區(qū),使用所述的基數(shù)估計方法進行計算,所需的時間如下表,不管分區(qū)個數(shù)是多少,都明顯比未分區(qū)的時間效率高。整個數(shù)據(jù)時間窗口有5000萬條數(shù)據(jù),按照不同的分桶數(shù)進行基數(shù)估計,所述基數(shù)估計算法誤差率都比傳統(tǒng)的基數(shù)估計算法(即原始的HyperLogLogCounting算法)誤差率低。附圖說明圖1是本發(fā)明實施例提供的面向流式大數(shù)據(jù)的基數(shù)估計方法流程圖。圖2是本發(fā)明實施例提供的實施例1的流程圖。圖3是本發(fā)明實施例提供的增量維護統(tǒng)計信息的流程圖。具體實施方式為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。下面結合附圖對本發(fā)明的應用原理作詳細的描述。如圖1所示,本發(fā)明實施例提供的面向流式大數(shù)據(jù)的基數(shù)估計方法包括以下步驟:S101:按照流式數(shù)據(jù)到達時刻以相同的時間間隔將大數(shù)據(jù)劃分成多個分區(qū),每個分區(qū)內保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間按照時序關系有序排列;S102:在每個分區(qū)構建統(tǒng)計信息計算器,通過改進的分桶方法將哈希過的數(shù)據(jù)較為均勻的映射到m個不同的桶號中,維護和建立一個m字節(jié)大小的記錄分區(qū)數(shù)據(jù)統(tǒng)計信息的bitmap;S103:建立和增量維護全局哈希表,每個分區(qū)的統(tǒng)計信息以鍵值對的形式存入全局哈希表,鍵為對應分區(qū)起始時刻時間經(jīng)過哈希后的值,值即為該分區(qū)的經(jīng)過統(tǒng)計信息計算器獲得的bitmap中存放的值;S104:構建分區(qū)統(tǒng)計信息合并器,從全局哈希表中獲取給定數(shù)據(jù)時間窗口中所有分區(qū)的統(tǒng)計信息bitmap,合并成可以代表數(shù)據(jù)時間窗口中所有數(shù)據(jù)的統(tǒng)計信息bitmap;S105:構建基數(shù)估計計算器,從分區(qū)統(tǒng)計信息合并器中獲取最終的統(tǒng)計信息bitmap,進行偏差調整,從三種方法中選擇最優(yōu)的結果。下面結合具體實施例對本發(fā)明的應用原理作進一步的描述。本發(fā)明實施例涉及如下參數(shù),符號表示與具體含義說明如表1所示:表1.符號表示與具體含義說明Δt流式大數(shù)據(jù)分區(qū)時間間隔t1數(shù)據(jù)時間窗口初始時刻t2數(shù)據(jù)時間窗口終點時刻m分桶平均時的分桶數(shù)ρ二進制數(shù)據(jù)從左往右第一個比特位為1的下標位置bj一個m字節(jié)的bitmap,每一字節(jié)存儲第j個分區(qū)對應桶號的最大ρ值bj[i]第j個分區(qū)第i個分桶的最大ρ值M一個m字節(jié)的bitmap,存儲合并后所有分區(qū)bitmap后的對應桶號的最大ρ值M[i]存儲合并后所有分區(qū)bitmap后的第i個桶號中最大的ρ值E基數(shù)估計值如圖2所示,本發(fā)明實施例提供的面向流式大數(shù)據(jù)的基數(shù)估計方法,包括如下步驟:步驟1,建立數(shù)據(jù)分區(qū)。1.1)按照流式數(shù)據(jù)到達時刻以相同的時間間隔將大數(shù)據(jù)劃分成多個分區(qū),每個分區(qū)內保存所述大數(shù)據(jù)中的一段數(shù)據(jù)源,各個分區(qū)之間按照時序關系有序排列如下:[t1,t1+Δt),[t1+Δt,t1+2Δt),[t1+2Δt,t1+3Δt),...,[t1+kΔt,t2),其中k=floor((t2-t1)/Δt)。步驟2,在每個分區(qū)構建統(tǒng)計信息計算器。2.1)本發(fā)明中哈希方法的結果必須具有很好的均勻性,碰撞幾乎可以忽略不計,哈希結果的長度固定不變,綜上選擇Murmurhash的改進版本2,將數(shù)據(jù)映射到64比特空間;2.2)本發(fā)明中通過分桶平均(類似于物理實驗的多次計算求平均值)來降低偶然因素帶來的誤差,顯然分桶數(shù)越大精度越高,但是隨著分桶數(shù)增大數(shù)據(jù)所占的內存也會增大,并且當分桶數(shù)達到一定數(shù)值時在增加分桶數(shù)估計精度并無明顯增加,經(jīng)過大量實驗最終確定分桶數(shù)m=216;2.3)本發(fā)明中如何將數(shù)據(jù)均勻的映射到m個不同的桶號,對基數(shù)估計精度有很大的影響,傳統(tǒng)的算法截取64比特數(shù)據(jù)值的前l(fā)og2m比特的二進制值作為桶號,對于某些數(shù)據(jù)分布分桶并不均勻,改進的算法是截取64比特數(shù)據(jù)值的前3組log2m比特的二進制值相互異或,增強隨機性,將異或值作為桶號;2.4)本發(fā)明中64比特數(shù)據(jù)值去掉前l(fā)og2m比特剩余比特組成的二進制值就是需處理的真實值,計算其ρ值,更新bitmap中對應桶號的最大ρ值;步驟3,建立和增量維護全局哈希表。3.1)建立全局哈希表,每個分區(qū)的統(tǒng)計信息以鍵值對的形式存入全局哈希表,鍵為對應分區(qū)起始時刻時間經(jīng)過哈希后的值,值即為該分區(qū)的經(jīng)過統(tǒng)計信息計算器獲得的bitmap中存放的值;3.2)結合圖3,本發(fā)明增量維護統(tǒng)計信息全局哈希表的步驟如下:i)構建分區(qū)監(jiān)控器。實時監(jiān)控數(shù)據(jù)時間窗口中的分區(qū),隨著數(shù)據(jù)時間窗口的移動以及數(shù)據(jù)時間窗口大小的調整,要確定離開數(shù)據(jù)時間窗口,新進入數(shù)據(jù)時間窗口,仍在數(shù)據(jù)時間窗口,仍在數(shù)據(jù)時間窗口但數(shù)據(jù)發(fā)生改動的四類分區(qū)情況,作為后面操作的依據(jù);ii)丟棄不在時間窗口中的分區(qū)統(tǒng)計信息。隨著時間的推移,一些較老的分區(qū)數(shù)據(jù)已經(jīng)不在數(shù)據(jù)時間窗口中,為了節(jié)省時間將其從內存中丟棄,即根據(jù)其鍵值從全局哈希表中刪除。特別注意,這一統(tǒng)計信息需存入歷史統(tǒng)計信息存入數(shù)據(jù)庫建立的數(shù)據(jù)表中作為備份,因為當時間窗口調整擴大時可以從數(shù)據(jù)庫中直接獲取丟棄的分區(qū)統(tǒng)計信息,而無需重新計算;iii)計算新進入時間窗口中的分區(qū)統(tǒng)計信息。隨著時間的推移,總有新的分區(qū)數(shù)據(jù)不在數(shù)據(jù)時間窗口中,就需要計算其分區(qū)統(tǒng)計信息,將其添加到全局哈希表中;iv)重新計算仍在時間窗口中但數(shù)據(jù)發(fā)生改變的分區(qū)統(tǒng)計信息。隨著時間的推移,通過分區(qū)監(jiān)控器可能會發(fā)現(xiàn)某個分區(qū)的數(shù)據(jù)發(fā)生更改,比如通過分區(qū)監(jiān)控器分析發(fā)現(xiàn)原來的數(shù)據(jù)經(jīng)過了篡改,重新進行了恢復,就需要重新計算分區(qū)統(tǒng)計信息。當然,如果分區(qū)數(shù)據(jù)更改的比例不到10%,就不進行重新計算,因為不超過10%的修改對基數(shù)估計精度的影響不是太大,重新計算反而降低效率。將重新計算的分區(qū)統(tǒng)計信息,根據(jù)鍵值,更新到全局哈希表中;v)保持仍在時間窗口中數(shù)據(jù)未發(fā)生改變的分區(qū)統(tǒng)計信息。隨著時間的推移,有一些分區(qū)數(shù)據(jù)仍在時間窗口中,并且數(shù)據(jù)未發(fā)生改變,原來計算的分區(qū)統(tǒng)計信息仍然有用,就是在全局哈希表保持不變;步驟4,構建分區(qū)統(tǒng)計信息合并器。4.1)全局哈希表中存放的是在時間窗口中的新加的、更新過的、保持不變的三類分區(qū)統(tǒng)計信息,遍歷全局哈希表,根據(jù)鍵獲取存放分區(qū)統(tǒng)計新的所有值;4.2)存放每個分區(qū)統(tǒng)計信息的bitmap一共有m字節(jié),假如有n個分區(qū)統(tǒng)計信息b1,b2,b3,...,bn,則M[i]=max{b1[i],b2[i],...,bn[i]},i=0,1,...,m-1,則M中存放的就是最終所有分區(qū)合并后的統(tǒng)計信息;步驟5,構建基數(shù)估計計算器。5.1)從分區(qū)統(tǒng)計信息合并器中獲取最終的統(tǒng)計信息M,通過調和平均計算初步的基數(shù)估計值E;5.2)根據(jù)上一步計算出的基數(shù)估計值,若E太大就進行大范圍修正,若范圍太小則進行小范圍修正,若范圍剛好則不修正,具體修正方法詳見HyperLogLogCounting的原始算法。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內。當前第1頁1 2 3