本發(fā)明屬于計算機(jī)技術(shù)領(lǐng)域,尤其是涉及一種分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化方法和系統(tǒng)。
背景技術(shù):
單個分布式存儲系統(tǒng)已無法滿足現(xiàn)在大規(guī)模海量數(shù)據(jù)的存儲、管理和搜索的需求。目前分布式存儲系統(tǒng)和多數(shù)據(jù)中心存儲是滿足EB級數(shù)據(jù)存儲需求的關(guān)鍵的技術(shù)途徑。如何從大規(guī)模的數(shù)據(jù)集中快速地搜索滿足用戶要求的數(shù)據(jù)是當(dāng)前跨數(shù)據(jù)中心存儲系統(tǒng)亟待解決的問題,特別是SSD等新型存儲介質(zhì)的出現(xiàn)以其優(yōu)良的性能對分布式存儲系統(tǒng)的搜索帶來深遠(yuǎn)的影響,因此為了提高搜索效率,需要突破基于SSD和負(fù)載局部性特征的搜索技術(shù)的瓶頸問題。
相對傳統(tǒng)機(jī)械硬盤,固態(tài)硬盤SSD在性能上具有非常大的優(yōu)勢。SSD有極高的性能,非常適合要求較快響應(yīng)時間和每秒讀寫次數(shù)高的請求。目前SSD在大規(guī)模存儲系統(tǒng)中應(yīng)用分為SSD分層存儲技術(shù)和SSD緩存技術(shù)。SSD分層存儲技術(shù)通過分層存儲的方法能夠存儲系統(tǒng)的高吞吐量和低存取響應(yīng)時間,但是采用分層技術(shù)的方法的困難是如何判定不同的存儲數(shù)據(jù)和文件的價值從而獲得良好的吞吐率和低時延,同時分層tier方法需要更多的SSD,也即需要更高的存儲成本;SSD緩存技術(shù)是根據(jù)數(shù)據(jù)訪問的時間局部性和空間局部性采用SSD作為存儲系統(tǒng)的緩存技術(shù)。
目前常見的以BigTable為代表的NoSQL存儲系統(tǒng),包括HBase、Cassandra等,底層采用LSM樹的方式組織數(shù)據(jù),數(shù)據(jù)寫入不再更改。但是針對SSD的緩存存儲等通用解決方案,并沒有針對上層具體的負(fù)載特征建立具體的SSD緩存方法,也沒有針對上述寫一次讀多次的NoSQL系統(tǒng)建立數(shù)據(jù)搜索的緩存方法,尤其是在跨數(shù)據(jù)中心環(huán)境中異地環(huán)境條件下對于分布式存儲系統(tǒng)NoSQL的數(shù)據(jù)訪問。對應(yīng)的,導(dǎo)致其數(shù)據(jù)搜索效率較低,有較大的提供改進(jìn)空間。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例提供一種分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化方法和系統(tǒng),以解決現(xiàn)有技術(shù)沒有針對上層具體的負(fù)載特征以及分布式存儲系統(tǒng)NoSQL寫一次讀多次的特征的緩存方法導(dǎo)致數(shù)據(jù)搜索效率較低的技術(shù)問題,達(dá)到提高數(shù)據(jù)搜索效率的目的。
本發(fā)明提供的技術(shù)方案如下:
一種分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化方法,包括:
步驟S101,在HBase客戶端中,預(yù)先設(shè)置本地SSD作為只讀緩存;
步驟S102,當(dāng)HBase客戶端讀取目標(biāo)數(shù)據(jù)時,判斷目標(biāo)數(shù)據(jù)是否位于所述本地SSD上,如果是,則進(jìn)入步驟S104;如果否,則進(jìn)入步驟S103;
步驟S103,從HDFS集群中讀取目標(biāo)數(shù)據(jù)并緩存到所述本地SSD上;
步驟S104,所述本地SSD返回所述目標(biāo)數(shù)據(jù)。
較佳的,所述步驟S102之前,還包括:
HBase客戶端將讀取請求發(fā)送至對應(yīng)的HRegionServe;
HRegionServer根據(jù)接收到的讀取請求,判斷目標(biāo)數(shù)據(jù)是否位于本地內(nèi)存中,如果是,則從本地內(nèi)存中返回所述目標(biāo)數(shù)據(jù),如果否,則進(jìn)入步驟S102。
較佳的,所述步驟S104包括:
所述本地SSD返回所述目標(biāo)數(shù)據(jù)到所述本地內(nèi)存,并且所述本地內(nèi)存返回所述目標(biāo)數(shù)據(jù)。
較佳的,所述步驟S103之前,還包括:
判斷所述本地SSD的剩余存儲空間是否滿足預(yù)設(shè)要求,如果是,則進(jìn)入步驟S103;如果否,則執(zhí)行替換算法,用讀取的目標(biāo)數(shù)據(jù)替換所述本地SSD中的已有數(shù)據(jù)。
較佳的,所述方法還包括:
HBase客戶端生成Compact操作請求,判斷Compact操作請求對應(yīng)的目標(biāo)HFile文件是否位于所述本地SSD上,如果是,則執(zhí)行Compact操作;如果否,則從HDFS集群中讀取目標(biāo)HFile文件緩存到所述本地SSD上并執(zhí)行Compact操作,Compact操作完成后,將原HFile文件從本地SSD中刪除,并將新生成的HFile文件寫入HDFS集群以及緩存到本地SSD中。
較佳的,所述方法還包括:
HBase客戶端生成Split操作請求,判斷Split操作請求對應(yīng)的目標(biāo)HFile文件是否位于所述本地SSD上,如果是,則執(zhí)行Split操作;如果否,則從HDFS集群中讀取目標(biāo)HFile文件緩存到所述本地SSD上并執(zhí)行Split操作,Split操作完成后,將原HFile文件從本地SSD中刪除。
相應(yīng)于上述方法,本發(fā)明還提供了一種分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化系統(tǒng),包括:
本地SSD,用于作為只讀緩存設(shè)置在HBase客戶端中;
第一判斷模塊,用于在HBase客戶端讀取目標(biāo)數(shù)據(jù)時,判斷目標(biāo)數(shù)據(jù)是否位于所述本地SSD上;
數(shù)據(jù)讀取模塊,用于在目標(biāo)數(shù)據(jù)不位于所述本地SSD上時,從HDFS集群中讀取目標(biāo)數(shù)據(jù)并緩存到所述本地SSD上;
數(shù)據(jù)返回模塊,用于在目標(biāo)數(shù)據(jù)位于所述本地SSD上時,從所述本地SSD返回所述目標(biāo)數(shù)據(jù)。
較佳的,所述的系統(tǒng),還包括:
第二判斷模塊,用于判斷所述本地SSD的剩余存儲空間是否滿足預(yù)設(shè)要求;
替換模塊,用于在所述本地SSD的剩余存儲空間不滿足預(yù)設(shè)要求時,執(zhí)行替換算法,用讀取的目標(biāo)數(shù)據(jù)替換所述本地SSD中的已有數(shù)據(jù)。
較佳的,所述的系統(tǒng),還包括:
Compact模塊,用于當(dāng)目標(biāo)HFile文件位于所述本地SSD上時,執(zhí)行Compact操作,將原HFile文件從本地SSD中刪除,并將新生成的HFile文件寫入HDFS集群以及緩存到本地SSD中。
較佳的,所述的系統(tǒng),還包括:
Split模塊,用于當(dāng)目標(biāo)HFile文件位于所述本地SSD上時,執(zhí)行Split操作,將原HFile文件從本地SSD中刪除。
采用上述技術(shù)方案,本發(fā)明至少可取得下述技術(shù)效果:
本發(fā)明提供的技術(shù)方案,引入本地SSD提供只讀緩存功能,充分發(fā)揮SSD的隨機(jī)讀取性能,在SSD中緩存相關(guān)文件,因訪問的數(shù)據(jù)具有局部性,通過在SSD緩存的文件可以有效的減少讀取HDFS的I/O數(shù)目,從而提高分布式存儲系統(tǒng)的性能,達(dá)到提高數(shù)據(jù)搜索效率的等目的。
上述技術(shù)方案在應(yīng)用中,針對HBase采用LSM樹的方式組織數(shù)據(jù)以及上層讀數(shù)據(jù)多的負(fù)載,把本地SSD作為HBase集群的只讀緩存功能,充分利用HBase本身的特點(diǎn),尤其適用于上層遙感衛(wèi)星等應(yīng)用對于數(shù)據(jù)訪問讀多寫少的負(fù)載特征。
附圖說明
圖1為實(shí)施例一提供的分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化方法流程圖;
圖2為實(shí)施例一提供的加入本地SSD后的分布式存儲系統(tǒng)后HBase的HRregionServer架構(gòu)示意圖;
圖3為實(shí)施例二提供的Compact操作方法流程圖;
圖4為實(shí)施例三提供的Split操作方法流程圖;
圖5為實(shí)施例四提供的分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化系統(tǒng)組成圖。
具體實(shí)施方式
為使本發(fā)明解決的技術(shù)問題、采用的技術(shù)方案和達(dá)到的技術(shù)效果更加清楚,下面將結(jié)合附圖對本發(fā)明實(shí)施例的技術(shù)方案作進(jìn)一步的詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
下面結(jié)合附圖并通過具體實(shí)施方式來進(jìn)一步說明本發(fā)明的技術(shù)方案。需要說明的是,本發(fā)明以以下實(shí)施例為例對本發(fā)明的技術(shù)方案進(jìn)行說明,但并非以此作為限制。本領(lǐng)域技術(shù)人員能夠明了,本發(fā)明所提出的錢分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化方法和系統(tǒng)除用于分布式存儲系統(tǒng)之外,還可以廣泛應(yīng)用于其他相同或相近領(lǐng)域中,并取得類似的技術(shù)效果。
在跨數(shù)據(jù)中心環(huán)境條件下,底層的數(shù)據(jù)庫系統(tǒng)采用的技術(shù)方案是HBase分布式存儲系統(tǒng),HBase是一個采用LSM的方式組織底層數(shù)據(jù)的存儲系統(tǒng),且跨數(shù)據(jù)中心環(huán)境條件下,遙感衛(wèi)星等應(yīng)用呈現(xiàn)數(shù)據(jù)訪問局部性以及寫入一次讀取多次等特征。
以下對實(shí)施例中用到的HBase存儲系統(tǒng)相關(guān)技術(shù)術(shù)語進(jìn)行說明:
(1)HBase組件:在HBase存儲系統(tǒng)中包括HMaster,HRegionServer和Client。其中HMaster負(fù)責(zé)HBase存儲系統(tǒng)中數(shù)據(jù)表的創(chuàng)建、刪除等操作。HRegionServer上存儲具體表的數(shù)據(jù),包括表的多個HRegion。
(2)HRegion:每個表分成多個HRegion,每個HRegion包含多個Store,每個Store對應(yīng)于一個列簇(column family),每個Store包含一個MemStore和多個StoreFile。
(3)Compact和Split:在HBase系統(tǒng)運(yùn)行過程中,會產(chǎn)生多個HFile文件,當(dāng)HFile文件個數(shù)超過一定數(shù)目的時候,HBase集群會執(zhí)行Compact。當(dāng)HFile文件大小超過一定的閥值時執(zhí)行Split操作。
HBase存儲系統(tǒng)的一個重要的特性是一旦HFile文件寫入HDFS集群中時,HFile文件不再改變。
實(shí)施例一:
圖1為是本實(shí)施例提供的分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化方法流程圖。參考圖1所示,該方法包括如下步驟:
步驟S101,在HBase客戶端中,預(yù)先設(shè)置本地SSD作為只讀緩存;
如圖2所示的HBase客戶端(分布式存儲系統(tǒng)集群)中設(shè)置本地SSD作為只讀緩存后的架構(gòu)示意圖。其中本地SSD可以加入HRegionServer中。
步驟S102,當(dāng)HBase客戶端讀取目標(biāo)數(shù)據(jù)時,判斷目標(biāo)數(shù)據(jù)是否位于所述本地SSD上,如果是,則進(jìn)入步驟S104;如果否,則進(jìn)入步驟S103;
本步驟之前,HBase客戶端根據(jù)需求產(chǎn)生Get/Scan操作請求,根據(jù)操作的目標(biāo)數(shù)據(jù),HBase客戶端將Get/Scan等操作請求發(fā)送至對應(yīng)的HRegionServe,HRegionServer根據(jù)接收到的讀取請求,判斷目標(biāo)數(shù)據(jù)是否位于本地內(nèi)存中,其中假設(shè)需要讀取HFile文件,定位具體的HFile文件,判斷所述HFile文件中的數(shù)據(jù)庫是否在本地內(nèi)存中,如果是,則從本地內(nèi)存中返回所述目標(biāo)數(shù)據(jù),如果否,即對應(yīng)的HFileBlock數(shù)據(jù)塊不在本地內(nèi)存中,則進(jìn)入步驟S102。
步驟S103,從HDFS集群中讀取目標(biāo)數(shù)據(jù)并緩存到所述本地SSD上;
其中,在步驟S103之前還可以包括:判斷所述本地SSD的剩余存儲空間是否滿足預(yù)設(shè)要求,如果是,則進(jìn)入步驟S103;如果否,則執(zhí)行替換算法如LRU(Least Recently Used,最近最少使用)算法,用讀取的目標(biāo)數(shù)據(jù)替換所述本地SSD中的已有數(shù)據(jù),如用讀取到的HFile文件替換掉本地SSD中的舊HFile文件。
步驟S104,所述本地SSD返回所述目標(biāo)數(shù)據(jù)。
對應(yīng)的,所述步驟S104具體可以包括:所述本地SSD返回所述目標(biāo)數(shù)據(jù)到所述本地內(nèi)存,并且所述本地內(nèi)存返回所述目標(biāo)數(shù)據(jù)。
此外,上述實(shí)施例中,當(dāng)寫入數(shù)據(jù)的時候可以直接寫入到底層文件系統(tǒng),在所述本地SSD中不進(jìn)行緩存。
在大規(guī)模海量數(shù)據(jù)環(huán)境下,通過NoSQL存儲系統(tǒng)存儲數(shù)據(jù)對于快速查找提出了低時延要求。而目前以BigTable為代表的NoSQL系統(tǒng)普遍采用LSM樹的方式在組織半結(jié)構(gòu)化數(shù)據(jù),用于寫入一次讀多次的特征。
而本實(shí)施例提供的技術(shù)方案,引入本地SSD提供只讀緩存功能,充分發(fā)揮SSD的隨機(jī)讀取性能,在SSD中緩存相關(guān)文件,因訪問的數(shù)據(jù)具有局部性,通過在SSD緩存的文件可以有效的減少讀取HDFS的I/O數(shù)目,從而提高分布式存儲系統(tǒng)的性能,達(dá)到提高數(shù)據(jù)搜索效率的等目的。
上述技術(shù)方案在應(yīng)用中,針對HBase采用LSM樹的方式組織數(shù)據(jù)以及上層讀數(shù)據(jù)多的負(fù)載,把本地SSD作為HBase集群的只讀緩存功能,充分利用HBase本身的特點(diǎn),尤其適用于上層遙感衛(wèi)星等應(yīng)用對于數(shù)據(jù)訪問讀多寫少的負(fù)載特征。
實(shí)施例二:
在HBase存儲系統(tǒng)運(yùn)行過程中,會產(chǎn)生多個HFile文件,當(dāng)HFile文件個數(shù)超過一定數(shù)目的時候,HBase集群需要執(zhí)行Compact操作,以減少HFile文件數(shù)目。本實(shí)施例在實(shí)施例一的分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化方法的基礎(chǔ)上,提供了一種在HBase集群執(zhí)行Compact操作方法,如圖3所述為該方法的流程示意圖,具體包括以下步驟:
步驟S301,HBase客戶端生成Compact操作請求;
步驟S302,判斷Compact操作請求對應(yīng)的目標(biāo)HFile文件是否位于所述本地SSD上,如果是,則進(jìn)入步驟S304;如果否,則進(jìn)入步驟S303;
步驟S303,從HDFS集群中讀取目標(biāo)HFile文件緩存到所述本地SSD上;
步驟S304,執(zhí)行Compact操作;
步驟S305,Compact操作完成后,將原HFile文件從本地SSD中刪除;
步驟S306,將新生成的HFile文件寫入HDFS集群以及緩存到本地SSD中。
通過本實(shí)施例提供的方法,可以在當(dāng)HFile文件個數(shù)超過一定數(shù)目的時候,執(zhí)行Compact操作,以減少HFile文件數(shù)目。
實(shí)施例三:
在HBase存儲系統(tǒng)運(yùn)行過程中,會產(chǎn)生多個HFile文件,當(dāng)HFile文件大小超過一定的閥值時,HBase集群需要執(zhí)行Split操作以減小HFile文件大小。本實(shí)施例在實(shí)施例一的分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化方法的基礎(chǔ)上,提供了一種在HBase集群執(zhí)行Split操作方法,如圖4所述為該方法的流程示意圖,具體包括以下步驟:
步驟S401,HBase客戶端生成Split操作請求;
步驟S402,判斷Split操作請求對應(yīng)的目標(biāo)HFile文件是否位于所述本地SSD上,如果是,則進(jìn)入步驟S304;如果否,則進(jìn)入步驟S303;
步驟S403,從HDFS集群中讀取目標(biāo)HFile文件緩存到所述本地SSD上;
步驟S404,執(zhí)行Split操作;
步驟S405,Split操作完成后,將原HFile文件從本地SSD中刪除。
通過本實(shí)施例提供的方法,可以在當(dāng)HFile文件大小超過一定的閥值時,執(zhí)行Split操作,以減小HFile文件大小。
實(shí)施例四:
相應(yīng)于上述方法,本實(shí)施例還提供了一種分布式存儲系統(tǒng)NoSQL搜索緩存的優(yōu)化系統(tǒng),如圖5所示的該系統(tǒng)架構(gòu)示意圖,包括:
本地SSD501,用于作為只讀緩存設(shè)置在HBase客戶端中;
第一判斷模塊502,用于在HBase客戶端讀取目標(biāo)數(shù)據(jù)時,判斷目標(biāo)數(shù)據(jù)是否位于所述本地SSD上;
數(shù)據(jù)讀取模塊503,用于在目標(biāo)數(shù)據(jù)不位于所述本地SSD上時,從HDFS集群中讀取目標(biāo)數(shù)據(jù)并緩存到所述本地SSD上;
數(shù)據(jù)返回模塊504,用于在目標(biāo)數(shù)據(jù)位于所述本地SSD上時,從所述本地SSD返回所述目標(biāo)數(shù)據(jù)。
此外,所述系統(tǒng),還可以包括:
第二判斷模塊,用于判斷所述本地SSD的剩余存儲空間是否滿足預(yù)設(shè)要求;
替換模塊,用于在所述本地SSD的剩余存儲空間不滿足預(yù)設(shè)要求時,執(zhí)行替換算法,如LRU(Least Recently Used,最近最少使用),用讀取的目標(biāo)數(shù)據(jù)替換所述本地SSD中的已有數(shù)據(jù),如用讀取到的HFile文件替換掉本地SSD中的舊HFile文件。
在HBase存儲系統(tǒng)運(yùn)行過程中,會產(chǎn)生多個HFile文件,當(dāng)HFile文件個數(shù)超過一定數(shù)目的時候,HBase集群需要執(zhí)行Compact操作,以減少HFile文件數(shù)目。因此所述系統(tǒng),還可以包括:
Compact模塊,用于當(dāng)目標(biāo)HFile文件位于所述本地SSD上時,執(zhí)行Compact操作,將原HFile文件從本地SSD中刪除,并將新生成的HFile文件寫入HDFS集群以及緩存到本地SSD中。
當(dāng)HFile文件大小超過一定的閥值時,HBase集群需要執(zhí)行Split操作以減小HFile文件大小。因此所述的系統(tǒng),還可以包括:
Split模塊,用于當(dāng)目標(biāo)HFile文件位于所述本地SSD上時,執(zhí)行Split操作,將原HFile文件從本地SSD中刪除。
本實(shí)施例提供的技術(shù)方案,引入本地SSD提供只讀緩存功能,充分發(fā)揮SSD的隨機(jī)讀取性能,在SSD中緩存相關(guān)文件,因訪問的數(shù)據(jù)具有局部性,通過在SSD緩存的文件可以有效的減少讀取HDFS的I/O數(shù)目,從而提高分布式存儲系統(tǒng)的性能,達(dá)到提高數(shù)據(jù)搜索效率的等目的。
上述技術(shù)方案在應(yīng)用中,針對HBase采用LSM樹的方式組織數(shù)據(jù)以及上層讀數(shù)據(jù)多的負(fù)載,把本地SSD作為HBase集群的只讀緩存功能,充分利用HBase本身的特點(diǎn),尤其適用于上層遙感衛(wèi)星等應(yīng)用對于數(shù)據(jù)訪問讀多寫少的負(fù)載特征。
本發(fā)明在軟件上,操作系統(tǒng)優(yōu)選為Linux系統(tǒng),運(yùn)行在Linux機(jī)群中提供文件IO服務(wù)的軟件之上,如HDFS、GFS等分布式文件系統(tǒng)和HBase等NoSql分布式數(shù)據(jù)庫系統(tǒng),并且HDFS分布式文件系統(tǒng)配置多個DataNode。
以上實(shí)施例提供的技術(shù)方案中的全部或部分內(nèi)容可以通過軟件編程或?qū)S糜布O(shè)備實(shí)現(xiàn),其中軟件程序存儲在可讀取的存儲介質(zhì)中,存儲介質(zhì)例如:計算機(jī)中的硬盤、光盤或軟盤;專用硬件設(shè)備可以是ASIC、FPGA、SoC、或具有相應(yīng)電路的IP Core。
注意,上述僅為本發(fā)明的較佳實(shí)施例及所運(yùn)用技術(shù)原理。本領(lǐng)域技術(shù)人員會理解,本發(fā)明不限于這里所述的特定實(shí)施例,對本領(lǐng)域技術(shù)人員來說能夠進(jìn)行各種明顯的變化、重新調(diào)整和替代而不會脫離本發(fā)明的保護(hù)范圍。因此,雖然通過以上實(shí)施例對本發(fā)明進(jìn)行了較為詳細(xì)的說明,但是本發(fā)明不僅僅限于以上實(shí)施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實(shí)施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。