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