一種大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及分布式大數(shù)據(jù)的云計(jì)算領(lǐng)域,特別是一種大數(shù)據(jù)分布式存儲及并行索 引系統(tǒng)的構(gòu)建方法。
【背景技術(shù)】
[0002] 當(dāng)今社會中,信息數(shù)據(jù)呈爆炸化的增長,而爆炸化的數(shù)據(jù)增長導(dǎo)致了數(shù)據(jù)存儲困 難、檢索復(fù)雜和可靠性降低等多重問題,云計(jì)算和云存儲技術(shù)的出現(xiàn),為海量數(shù)據(jù)的處理與 存儲提供了有效的解決途徑。
[0003] 現(xiàn)有技術(shù)中,通常的云計(jì)算解決方案利用Hadoop(-種分布式系統(tǒng)基礎(chǔ)架構(gòu)) 的HDFS(-種分布式文件系統(tǒng))雖然能夠方便的實(shí)現(xiàn)海量數(shù)據(jù)存儲,同時有效防止單點(diǎn) 故障,避免不必要的損失,但是,在HDFS上進(jìn)行數(shù)據(jù)檢索時,常用的方法是開啟全局搜索 MapReduce(大規(guī)模數(shù)據(jù)并行運(yùn)算),這需要完整過濾一遍HDFS上存儲的所有數(shù)據(jù);
[0004] 然而在云計(jì)算中,尤其是在海量數(shù)據(jù)情況下,該方案會對系統(tǒng)資源造成巨大的浪 費(fèi),耗費(fèi)大量的時間,其工作效率也因此大大降低,這顯然不是一個適合投入現(xiàn)實(shí)生產(chǎn)環(huán)境 的方式,同時也是本發(fā)明所要針對解決的重要問題。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明所要解決的技術(shù)問題是,克服現(xiàn)有技術(shù)的缺點(diǎn),提供一種大數(shù)據(jù)分布式存 儲及并行索引系統(tǒng)的構(gòu)建方法,構(gòu)建后的系統(tǒng)通過索引查詢的方法,能夠提高在云計(jì)算中 海量數(shù)據(jù)檢索的速度,降低資源浪費(fèi),節(jié)省時間,同時保障云計(jì)算系統(tǒng)內(nèi)數(shù)據(jù)的安全。
[0006] 為了解決以上技術(shù)問題,本發(fā)明提供一種大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu) 建方法,數(shù)據(jù)在建立及存儲的同時,還建立有數(shù)據(jù)立方索引,所述數(shù)據(jù)立方索引中插入有B+ 樹結(jié)構(gòu)。
[0007] 本發(fā)明進(jìn)一步限定的技術(shù)方案是:
[0008] 進(jìn)一步的,前述的大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法,將數(shù)據(jù)分布式 入庫到各個數(shù)據(jù)節(jié)點(diǎn)上,每個數(shù)據(jù)節(jié)點(diǎn)分別對該節(jié)點(diǎn)上的數(shù)據(jù)獨(dú)立的建立索引,具體方法 為:
[0009] 對數(shù)據(jù)設(shè)定1個或多個關(guān)鍵字字段,針對各個關(guān)鍵字字段分別建立索引,每張索 引分別生成一張獨(dú)立的B+樹結(jié)構(gòu),各個關(guān)鍵字字段的索引被分布式存儲在不同的數(shù)據(jù)節(jié) 點(diǎn)上,查詢索引的過程是一個同步的查詢過程,每一臺數(shù)據(jù)節(jié)點(diǎn)的機(jī)器都去查找各自索引 的內(nèi)容,檢索出相關(guān)源文件記錄后再過濾匯總,形成完整的結(jié)果;
[0010] 多個B+樹結(jié)構(gòu)堆疊在一起,與數(shù)據(jù)存儲形成一個完整的數(shù)據(jù)立方結(jié)構(gòu);
[0011] 對B+樹的查找類似于二分查找,對于m階,葉子節(jié)點(diǎn)中記錄個數(shù)為n的B+樹來 說,其查找的時間復(fù)雜度為0(l〇gm+(n+l)/2);因此對于值匹配和范圍查找來說,其速度大 大的加快,此外,由于對值按照大小順序進(jìn)行了指針鏈接,因此m階B+樹還能夠?qū)χ颠M(jìn)行順 序查找。
[0012] 前述的大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法,每一條新的記錄只需要插 入到B+樹結(jié)構(gòu)中;
[0013] 當(dāng)B+樹結(jié)構(gòu)的插入僅在葉節(jié)點(diǎn)上進(jìn)行,為各個數(shù)據(jù)節(jié)點(diǎn)中的子樹棵樹設(shè)定上限 值,每插入一個索引項(xiàng)后都要判斷數(shù)據(jù)節(jié)點(diǎn)中的子樹棵數(shù)是否超出范圍,當(dāng)大于上限值時, 需要將葉節(jié)點(diǎn)分裂為兩個,它們的雙親節(jié)點(diǎn)中同時包含這兩個節(jié)點(diǎn)的最大關(guān)鍵碼和節(jié)點(diǎn)地 址;
[0014] 在非葉結(jié)點(diǎn)插入時,為非葉節(jié)點(diǎn)中的子樹棵數(shù)設(shè)定上限值,當(dāng)大于上限值時,進(jìn)行 節(jié)點(diǎn)分裂,在做根節(jié)點(diǎn)分裂時,創(chuàng)建新的雙親結(jié)點(diǎn),作為樹的新根;
[0015] 當(dāng)新的記錄積累到若干條(可根據(jù)需要任意設(shè)定)或經(jīng)過一定時間(可根據(jù)需要 任意設(shè)定)時,對于存儲在MemCache(分布式緩存服務(wù)器)中的字段索引,能夠?qū)⑦@些數(shù)據(jù) 記錄對應(yīng)的索引記錄一次性批量寫入;當(dāng)新的記錄積累到若干條(可根據(jù)需要人已設(shè)定) 或經(jīng)過一定時間(可根據(jù)需要任意設(shè)定)時,能夠?qū)⑦@些數(shù)據(jù)記錄對應(yīng)的索引記錄一次性 批量寫入HDFS (固態(tài)磁盤)上的索引文件;
[0016] 對重要字段建立索引,存儲在HDFS(固態(tài)磁盤)上。將最近常用的字段索引加載 到MemCache (高性能的分布式的內(nèi)存對象緩存系統(tǒng))中,同時刪除最不常用的字段索引以 節(jié)省空間;對于每次查詢,系統(tǒng)統(tǒng)計(jì)每個字段索引被調(diào)用的次數(shù),對于被調(diào)用次數(shù)最多的那 些字段索引就被加載到MemCache中,而在MemCache中被調(diào)用次數(shù)最少的某些字段將被刪 除。
[0017] 前述的大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法,當(dāng)新的記錄到來時,將新 的數(shù)據(jù)記錄對應(yīng)的一條索引記錄插入到所有的字段索引中。
【附圖說明】
[0018] 圖1為本發(fā)明所設(shè)計(jì)的數(shù)據(jù)立方存儲索引結(jié)構(gòu)的原理圖;
[0019] 圖2為本發(fā)明中單一關(guān)鍵字字段基于B+樹的索引結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0020] 本實(shí)施例提供的一種大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法,如圖1所 示,數(shù)據(jù)立方存儲索引結(jié)構(gòu)由全局?jǐn)?shù)據(jù)表1、索引面2組成,全局?jǐn)?shù)據(jù)表1中,x軸方向表示 不同的關(guān)鍵字字段3,y軸方向表示不同的數(shù)據(jù)記錄4,數(shù)據(jù)記錄與關(guān)鍵字字段組合組成了 不同數(shù)據(jù)記錄及其關(guān)鍵字字段內(nèi)容的對應(yīng)關(guān)系,不同關(guān)鍵字字段構(gòu)成不同的索引面,每一 張索引面分別某一字段基于B+樹的索引表。
[0021] 如圖2所示,索引表按如下方式建立索引建立時對數(shù)據(jù)中重要字段建立索引,以 B+樹的結(jié)構(gòu)生成,每一條新的記錄只需要插入到B+樹中,B+樹的插入僅在葉結(jié)點(diǎn)上進(jìn)行; 每插入一個(關(guān)鍵碼-指針)索引項(xiàng)后都要判斷結(jié)點(diǎn)中的子樹棵數(shù)是否超出范圍;當(dāng)插入 后結(jié)點(diǎn)中的子樹棵數(shù)大于m時,需要將葉結(jié)點(diǎn)分裂為兩個結(jié)點(diǎn),它們的雙親結(jié)點(diǎn)中應(yīng)同時 包含這兩個結(jié)點(diǎn)的最大關(guān)鍵碼和結(jié)點(diǎn)地址,在非葉結(jié)點(diǎn)中關(guān)鍵碼的插入和葉結(jié)點(diǎn)的插入類 似,非葉結(jié)點(diǎn)中的子樹棵數(shù)的上限為m,超出這個范圍也要進(jìn)行結(jié)點(diǎn)分裂;在做根結(jié)點(diǎn)分裂 時,因?yàn)闆]有雙親結(jié)點(diǎn),就必須創(chuàng)建新的雙親結(jié)點(diǎn),作為樹的新根,這樣樹的高度就增加一 層了。
[0022] 當(dāng)有新的記錄到來時,我們要將新的數(shù)據(jù)記錄對應(yīng)的一條索引記錄插入到所有的 字段索引中,這時要采取一定的寫入策略:
[0023] 當(dāng)新的記錄積累到nl條或經(jīng)過一定時間tl時,對于存儲在MemCache中的字段索 弓丨,能夠?qū)⑦@些數(shù)據(jù)記錄對應(yīng)的索引記錄一次性批量寫入;當(dāng)新的記錄積累到n2條或經(jīng)過 一定時間t2時,能夠?qū)⑦@些數(shù)據(jù)記錄對應(yīng)的索引記錄一次性批量寫入HDFS(固態(tài)磁盤)上 的索引文件。
[0024] 對B+樹的查找類似于二分查找,對于m階,葉子節(jié)點(diǎn)中記錄個數(shù)為n的B+樹來 說,其查找的時間復(fù)雜度為〇 (l〇gm+(n+1)/2);因此對于值匹配和范圍查找來說,有很快的 速度;此外,由于對值按照大小順序進(jìn)行了指針鏈接,因此m階B+樹還能夠?qū)χ颠M(jìn)行順序查 找。
[0025] 將最近常用的字段索引加載到MemCache(高性能的分布式的內(nèi)存對象緩存系統(tǒng)) 中,同時刪除最不常用的字段索引以節(jié)省空間。對于每次查詢,系統(tǒng)統(tǒng)計(jì)每個字段索引被調(diào) 用的次數(shù),對于被調(diào)用次數(shù)最多的那些字段索引就被加載到MemCache中,而在MemCache中 被調(diào)用次數(shù)最少的某些字段將被刪除。
[0026] 我們選取了下面幾組實(shí)驗(yàn)數(shù)據(jù)對本實(shí)施例的優(yōu)勢進(jìn)行展示:
[0027] 廣州移動測試:
[0028] 【1】云創(chuàng)存儲測試成果:
[0029] 云創(chuàng)存儲采用的自主研發(fā)的Datacube平臺,以下為系統(tǒng)查詢測試:
[0030]
[0031
[0032]【2】華為測試成果:
[0033] 華為采用的是Greenplum的平臺,以下為平臺查詢測試:
[0034]
[0035] 【3】中興測試成果:
[0036] 中興采用的是hbase的平臺,以下為平臺查詢測試:
[0037]
[0038] 【4】中創(chuàng)測試成果:
[0039] 中創(chuàng)采用的是hbase的平臺,以下為平臺查詢測試:
[0040]
[0041] 數(shù)據(jù)入庫性能:
[0042]
[0043] 以上實(shí)施例僅為說明本發(fā)明的技術(shù)思想,具體實(shí)現(xiàn)該技術(shù)方案的方法和途徑很 多,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還能 夠做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)該視為本發(fā)明的保護(hù)范圍;本實(shí)施例中未明 確的各組成內(nèi)容和功能均可用現(xiàn)有技術(shù)加以實(shí)現(xiàn)。
【主權(quán)項(xiàng)】
1. 一種大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法,其特征在于,數(shù)據(jù)在建立及存 儲的同時,還建立有數(shù)據(jù)立方索引,所述數(shù)據(jù)立方索引中插入有B+樹結(jié)構(gòu)。2. 根據(jù)權(quán)利要求1所述的大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法,其特征在 于,將數(shù)據(jù)分布式入庫到各個數(shù)據(jù)節(jié)點(diǎn)上,每個數(shù)據(jù)節(jié)點(diǎn)分別對該節(jié)點(diǎn)上的數(shù)據(jù)獨(dú)立的建 立索引,具體方法為: 對數(shù)據(jù)設(shè)定1個或多個關(guān)鍵字字段,針對各個關(guān)鍵字字段分別建立索引,每張索引分 別生成一張獨(dú)立的B+樹結(jié)構(gòu),各個關(guān)鍵字字段的索引被分布式存儲在不同的數(shù)據(jù)節(jié)點(diǎn)上, 查詢索引的過程是一個同步的查詢過程,每一臺數(shù)據(jù)節(jié)點(diǎn)的機(jī)器都去查找各自索引的內(nèi) 容,檢索出相關(guān)源文件記錄后再過濾匯總,形成完整的結(jié)果; 多個B+樹結(jié)構(gòu)堆疊在一起,與數(shù)據(jù)存儲形成一個完整的數(shù)據(jù)立方結(jié)構(gòu)。3. 根據(jù)權(quán)利要求2所述的大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法,其特征在 于,每一條新的記錄只需要插入到B+樹結(jié)構(gòu)中; 當(dāng)B+樹結(jié)構(gòu)的插入僅在葉節(jié)點(diǎn)上進(jìn)行,為各個數(shù)據(jù)節(jié)點(diǎn)中的子樹棵樹設(shè)定上限值,每 插入一個索引項(xiàng)后都要判斷數(shù)據(jù)節(jié)點(diǎn)中的子樹棵數(shù)是否超出范圍,當(dāng)大于上限值時,需要 將葉節(jié)點(diǎn)分裂為兩個,它們的雙親節(jié)點(diǎn)中同時包含這兩個節(jié)點(diǎn)的最大關(guān)鍵碼和節(jié)點(diǎn)地址; 在非葉結(jié)點(diǎn)插入時,為非葉節(jié)點(diǎn)中的子樹棵數(shù)設(shè)定上限值,當(dāng)大于上限值時,進(jìn)行節(jié)點(diǎn) 分裂,在做根節(jié)點(diǎn)分裂時,創(chuàng)建新的雙親結(jié)點(diǎn),作為樹的新根。4. 根據(jù)權(quán)利要求3所述的大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法,其特征在 于,當(dāng)新的記錄到來時,將新的數(shù)據(jù)記錄對應(yīng)的一條索引記錄插入到所有的字段索引中。
【專利摘要】本發(fā)明公開了一種大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法,數(shù)據(jù)在建立及存儲的同時,還建立有數(shù)據(jù)立方索引,所述數(shù)據(jù)立方索引中插入有B+樹結(jié)構(gòu);將數(shù)據(jù)分布式入庫到各個數(shù)據(jù)節(jié)點(diǎn)上,每個數(shù)據(jù)節(jié)點(diǎn)分別對該節(jié)點(diǎn)上的數(shù)據(jù)獨(dú)立的建立索引,多個B+樹結(jié)構(gòu)堆疊在一起,與數(shù)據(jù)存儲形成一個完整的數(shù)據(jù)立方結(jié)構(gòu);每一條新的記錄只需要插入到B+樹結(jié)構(gòu)中;當(dāng)新的記錄到來時,將新的數(shù)據(jù)記錄對應(yīng)的一條索引記錄插入到所有的字段索引中本發(fā)明所設(shè)計(jì)的大數(shù)據(jù)分布式存儲及并行索引系統(tǒng)的構(gòu)建方法,構(gòu)建后的系統(tǒng)通過索引查詢的方法,能夠提高在云計(jì)算中海量數(shù)據(jù)檢索的速度,降低資源浪費(fèi),節(jié)省時間,同時保障云計(jì)算系統(tǒng)內(nèi)數(shù)據(jù)的安全。
【IPC分類】G06F17/30
【公開號】CN105005621
【申請?zhí)枴緾N201510438030
【發(fā)明人】張真
【申請人】張真
【公開日】2015年10月28日
【申請日】2015年7月23日