支持海量數(shù)據(jù)分組統(tǒng)計的智能索引構(gòu)建、查詢及維護方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種支持海量數(shù)據(jù)分組統(tǒng)計的智能索引構(gòu)建、查詢及維護方法,屬于大數(shù)據(jù)處理技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]隨著計算機技術(shù)的不斷發(fā)展和信息化程度的不斷提高,數(shù)據(jù)量迅速增長,面向海量數(shù)據(jù)存儲及應(yīng)用也隨之蓬勃發(fā)展,大數(shù)據(jù)應(yīng)用越來越廣泛。如,在網(wǎng)絡(luò)安全上,使用大數(shù)據(jù)技術(shù)分析網(wǎng)絡(luò)攻擊行為;在電子商務(wù)上,使用大數(shù)據(jù)技術(shù)分析用戶購物喜好或最受青睞的商品;在城市建設(shè)上,利用大數(shù)據(jù)技術(shù)構(gòu)建智慧城市,方便人民出行。諸如此類,大數(shù)據(jù)技術(shù)在建設(shè)節(jié)約型社會,提高生成效率等方面起到了積極的推動作用。
[0003]但隨著數(shù)據(jù)量的持續(xù)增大和大數(shù)據(jù)應(yīng)用的不斷發(fā)展,對大數(shù)據(jù)處理能力的要求越來越高。在海量數(shù)據(jù)分析應(yīng)用中,對數(shù)據(jù)分組統(tǒng)計是常用的應(yīng)用模式,其處理效率直接影響了業(yè)務(wù)應(yīng)用。目前常用的分組統(tǒng)計方法主要利用分布式數(shù)據(jù)庫,或者分布式計算集群來對存儲于其內(nèi)的海量數(shù)據(jù)進行普通的分析和分類匯總。這些方法的主要特點是對涉及到的數(shù)據(jù)全盤掃描,其對系統(tǒng)資源,特別是I/O會有極大的占用,從而對整個存儲系統(tǒng)帶來巨大壓力,其統(tǒng)計效率難以應(yīng)對業(yè)務(wù)需求。因此,通過構(gòu)建索引,降低磁盤I/O開銷,成為提高分組統(tǒng)計效率需要解決的關(guān)鍵問題。
【發(fā)明內(nèi)容】
[0004]為提高分組統(tǒng)計效率,降低磁盤I/O開銷,本發(fā)明提供了一種支持分組統(tǒng)計的智能索引構(gòu)建、查詢和維護方法。
[0005]本發(fā)明提供的支持海量數(shù)據(jù)分組統(tǒng)計的智能索引構(gòu)建、查詢和維護方法,通過如下四方面實現(xiàn):
[0006]第一方面,建立智能索引的數(shù)據(jù)組織結(jié)構(gòu),以使智能索引支持海量數(shù)據(jù)分組統(tǒng)計。
[0007]智能索引的數(shù)據(jù)組織結(jié)構(gòu)包括索引元數(shù)據(jù)和索引數(shù)據(jù)。索引元數(shù)據(jù)是創(chuàng)建索引的依據(jù),包括分組列簇和統(tǒng)計列簇。分組列簇采用二維表存儲,存儲信息包括分組字段名稱、分組字段類型和分組方式;分組字段類型包括整型、字符型和時間類型,分組方式包括區(qū)間、等值和哈希三種方式。統(tǒng)計列簇采用二維表存儲,存儲信息包括統(tǒng)計字段名稱、統(tǒng)計字段類型和統(tǒng)計方式;統(tǒng)計字段類型包括整型、字符型和時間類型,統(tǒng)計方式包括聚合、平均值、最大值、最小值、方差和求和。索引數(shù)據(jù)是對原始數(shù)據(jù)構(gòu)建的索引,一個原始數(shù)據(jù)塊對應(yīng)一個索引數(shù)據(jù)塊,每個索引數(shù)據(jù)塊包括分組數(shù)值區(qū)和統(tǒng)計數(shù)值區(qū)兩部分。分組數(shù)值區(qū)由多個字典組成,一個字典對應(yīng)一個分組字段,每個字典包括分組字段值及其應(yīng)用的位置ID,分組字段值和位置ID均使用有序鏈表存儲;統(tǒng)計數(shù)值區(qū)根據(jù)位置ID分段按行存儲,每個段按ID排序,使用有序鏈表存儲。
[0008]第二方面,在寫入數(shù)據(jù)時在內(nèi)存中實時創(chuàng)建智能索引。
[0009]首先根據(jù)索引元數(shù)據(jù)確定分組字段和統(tǒng)計字段,然后對每條原始記錄在內(nèi)存中計算,包括對分組字段按分組方式計算和對統(tǒng)計字段按統(tǒng)計方式計算,更新維護好分組數(shù)值區(qū)鏈表和統(tǒng)計數(shù)值區(qū)鏈表,最終將索引數(shù)據(jù)持久化到磁盤。
[0010]第三方面,利用智能索引進行分組統(tǒng)計的操作。
[0011]首先通過判定器判讀本次統(tǒng)計是否可以使用智能索引,當能使用時,通過執(zhí)行器讀取索引數(shù)據(jù),最后通過匯聚器對分組值進行匯聚計算。
[0012]第四方面,實現(xiàn)對智能索引的刪除操作。
[0013]預(yù)設(shè)原始數(shù)據(jù)與索引數(shù)據(jù)物理存儲規(guī)則,根據(jù)待刪除的原始數(shù)據(jù)塊存儲路徑,來構(gòu)造索引數(shù)據(jù)存儲路徑,將建立的索引數(shù)據(jù)刪除。
[0014]本發(fā)明提出的支持海量數(shù)據(jù)分組統(tǒng)計的智能索引構(gòu)建、查詢及維護方法,相對于現(xiàn)有技術(shù)來說,實現(xiàn)了對海量數(shù)據(jù)的實時自動創(chuàng)建索引,在對海量數(shù)據(jù)進行分組統(tǒng)計時極大降低了磁盤I/O和計算時間,從而大幅提高了分組統(tǒng)計效率,并實現(xiàn)了對索引數(shù)據(jù)全生命周期的自動管理,符合目前的大數(shù)據(jù)分析應(yīng)用需求,在大數(shù)據(jù)處理領(lǐng)域具有很強的實用性和應(yīng)用范圍,具有廣闊的應(yīng)用前景。
【附圖說明】
[0015]圖1為本發(fā)明支持海量數(shù)據(jù)分組統(tǒng)計的智能索引的數(shù)據(jù)組織結(jié)構(gòu)示意圖;
[0016]圖2為本發(fā)明在存儲備份數(shù)據(jù)時智能索引創(chuàng)建的流程圖;
[0017]圖3為本發(fā)明利用智能索引進行分組統(tǒng)計的操作流程圖;
[0018]圖4為智能索引刪除的操作流程圖。
【具體實施方式】
[0019]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,下面結(jié)合附圖,對根據(jù)本發(fā)明一個實施例的層次分段式的備份數(shù)據(jù)組織管理方法進一步詳細說明。
[0020]本發(fā)明的支持海量數(shù)據(jù)分組統(tǒng)計的智能索引構(gòu)建、查詢及維護方法,包括四個實現(xiàn)方面:(I)建立支持海量數(shù)據(jù)分組統(tǒng)計的智能索引的數(shù)據(jù)組織結(jié)構(gòu);(2)智能索引創(chuàng)建操作;⑶利用智能索引進行分組統(tǒng)計的操作;⑷實現(xiàn)對智能索引的刪除操作。通過本發(fā)明方法,可有效降統(tǒng)計時的磁盤I/O及系統(tǒng)計算資源,提高對大數(shù)據(jù)分組統(tǒng)計的效率。
[0021]圖1給出了本發(fā)明支持海量數(shù)據(jù)分組統(tǒng)計的智能索引的數(shù)據(jù)組織結(jié)構(gòu)示意圖。
[0022]—種實現(xiàn)例中,智能索引采用如圖1所示的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)。智能索引包括索引元數(shù)據(jù)和索引數(shù)據(jù)兩部分。其中,索引元數(shù)據(jù)是對索引的描述,是創(chuàng)建索引的依據(jù)。索引元數(shù)據(jù)包括分組列簇和統(tǒng)計列簇兩部分。分組列簇采用二維表存儲,存儲信息包括分組字段名稱、分組字段類型和分組方式,分組字段類型包括整型、字符型和時間類型,分組方式包括區(qū)間、等值和哈希三種方式。統(tǒng)計列簇采用二維表存儲,存儲信息包括統(tǒng)計字段名稱、統(tǒng)計字段類型和統(tǒng)計方式,統(tǒng)計字段類型包括整型、字符型和時間類型,統(tǒng)計方式包括聚合、平均值、最大值、最小值、方差和求和。索引數(shù)據(jù)是對原始數(shù)據(jù)構(gòu)建的索引,一個原始數(shù)據(jù)塊對應(yīng)一個索引數(shù)據(jù)塊,每個索引數(shù)據(jù)塊包括分組數(shù)值區(qū)和統(tǒng)計數(shù)值區(qū)兩部分。分組數(shù)值區(qū)由多個字典組成,一個字典對應(yīng)一個分組字段,每個字典包括分組字段值及其應(yīng)用的位置ID,分組字段值和位置ID均使用有序鏈表存儲。統(tǒng)計數(shù)值區(qū)根據(jù)位置ID分段按行存儲,每個段按ID排序。
[0023]圖1所示示例中,統(tǒng)計列簇的字段有NAME(名稱)和NUM(數(shù)量),字符類型分別為char和Int,統(tǒng)計方式分別為Count (計數(shù))和Sum(求和);分組列簇的字段包括CITY(城市)和??ΜΕ(時間),字符類型分別為char和Int,分組方式分別為等值和區(qū)間。圖1也給出了一個依據(jù)該索引元數(shù)據(jù)所構(gòu)建的一個索引數(shù)據(jù)塊,例如,字段CITY的值包括有ZB、JN、QD、WF和HZ,均為某城市代碼簡寫,每個字段值的應(yīng)用的位置ID以鏈表組織,例如QD所應(yīng)用的位置ID為4和5。在統(tǒng)計數(shù)值區(qū)根據(jù)位置ID分段按行存儲,示例中分為3個段,每段中給出統(tǒng)計字段按所設(shè)置的統(tǒng)計方式得到的統(tǒng)計值,例如段I中的位置ID I對NAME按Count方式統(tǒng)計的值為20。
[0024]在寫入數(shù)據(jù)時實時創(chuàng)建智能索引,通過智能索引創(chuàng)建操作。首先根據(jù)索引元數(shù)據(jù)描述,確定分組字段和統(tǒng)計字段,然后對每條原始記錄在內(nèi)存中計算,包括對分組字段按分區(qū)方式計算和對統(tǒng)計字段按統(tǒng)計方式計算,維護好分組數(shù)值區(qū)鏈表和統(tǒng)計數(shù)值區(qū)鏈表,最終將索引數(shù)據(jù)持久化到磁盤。圖2示出了智能索引創(chuàng)建過程,具體步驟如下:
[0025]步驟201:讀取索引元數(shù)據(jù),并初始化索引數(shù)據(jù)存儲結(jié)構(gòu);
[0026]步驟202:判斷索引數(shù)據(jù)是否可以持久化到磁盤上,如果需要持久化到磁盤,則轉(zhuǎn)到步驟206,否則轉(zhuǎn)到步驟203。索引數(shù)據(jù)持久化到磁盤上的判斷標準為其對應(yīng)的原始數(shù)據(jù)塊已經(jīng)被穩(wěn)定寫入磁盤;
[0027]步驟203:讀取下一條原始數(shù)據(jù);
[0028]步驟204:根據(jù)分組方式,計算每個分組字段的分組值。計算分組值K,K依據(jù)分區(qū)方式計算得出:如果是等值方式,則K為字段值V;如果是區(qū)間方式,則K是通過字段值V計算得出,計算方法為字段值/區(qū)間跨度。然后將分組值K更新到分組數(shù)值區(qū)鏈表中,并按分組字段值進行排序,保持鏈表有序;
[0029]步驟205:計算統(tǒng)計值。根據(jù)所設(shè)定的統(tǒng)計方式,計算每個統(tǒng)計字段的統(tǒng)計值,并更新到統(tǒng)計數(shù)值區(qū)鏈表中,并位置ID進行排序,保持鏈表有序,轉(zhuǎn)到步驟202;
[0030]步驟206:將統(tǒng)計數(shù)值區(qū)鏈表寫入文件中,并按鏈表ID分段,依據(jù)數(shù)量分段,每個段內(nèi)數(shù)量不大于預(yù)設(shè)數(shù)量N,每個段生成一個文件;
[0031]步驟207:將分組數(shù)值區(qū)鏈表寫入文件中,并按分組字段分成不同字典鏈表,每個字典生成一個