一種基于ObjectStore的LogStructure存儲(chǔ)系統(tǒng)及其數(shù)據(jù)寫入方法
【專利說明】一種基于ObjectStore的LogStructure存儲(chǔ)系統(tǒng)及其數(shù)據(jù)寫入方法
技術(shù)領(lǐng)域
[0001 ] 本發(fā)明涉及計(jì)算機(jī)存儲(chǔ)技術(shù)領(lǐng)域,更具體地說,涉及一種基于Ob jectstore的LogStructure存儲(chǔ)系統(tǒng)及其數(shù)據(jù)寫入方法。
【背景技術(shù)】
[0002]Ceph是一套開源統(tǒng)一分布式存儲(chǔ)系統(tǒng),具有優(yōu)異的性能、可靠性、可擴(kuò)展性,在各個(gè)領(lǐng)域都有廣泛的使用,并獲得了大量的開源組織的支持,主要由0SD、M0N和MDS三部分構(gòu)成,其中,OSD作為基礎(chǔ)的數(shù)據(jù)存儲(chǔ)單元,如圖1所示,為OSD的整體架構(gòu),如圖所示,在底層的存儲(chǔ)中當(dāng)前主要有Fi IeStore、KeyValueStore和NewStore,該底層的不同存儲(chǔ)均實(shí)現(xiàn)了面向?qū)ο髷?shù)據(jù)庫系統(tǒng)Ob jectStore的相關(guān)接口。
[0003]然而,當(dāng)前的面向?qū)ο髷?shù)據(jù)庫系統(tǒng)ObjectStore存在如下問題:
[0004](I)在F i I e Stor e中,數(shù)據(jù)寫入先存儲(chǔ)到j(luò) ourna I上,有利于提升小1的性能,但存在數(shù)據(jù)雙倍寫放大的問題,在為順序?qū)懭霑r(shí)該數(shù)據(jù)雙倍寫放大問題尤其嚴(yán)重,從而使得整個(gè)Ceph系統(tǒng)的順序?qū)懭氲乃俣炔⒉桓?,并且在?shù)據(jù)修復(fù)時(shí),其內(nèi)部大部分為順序讀寫,使得系統(tǒng)存在1阻塞,影響系統(tǒng)的正常使用。同時(shí),當(dāng)前的SSD加速全部體現(xiàn)的寫加速上,對讀并沒有提尚;
[0005](2)KeyValueSt0re將全部數(shù)據(jù)全部存入到數(shù)據(jù)庫中,但由于一般的數(shù)據(jù)庫都不是針對存儲(chǔ)大對象而設(shè)計(jì)的,因此存在寫入性能不高的問題,在對于順序讀寫時(shí)尤其嚴(yán)重;
[0006](3 )NewStore又稱KeyFi IeStore,其通過使用數(shù)據(jù)庫存儲(chǔ)元數(shù)據(jù)以及文件系統(tǒng)存儲(chǔ)實(shí)際數(shù)據(jù),解決了 Fi IeStore和KeyValueStore中的上述問題,但是在數(shù)據(jù)寫入時(shí),緩存直接使用數(shù)據(jù)庫進(jìn)行存儲(chǔ),同樣會(huì)存在數(shù)據(jù)庫不適合存儲(chǔ)大數(shù)據(jù)塊的問題,使得在實(shí)際使用時(shí)順序讀寫的性能有所提升,但隨機(jī)讀寫的性能的提升并不明顯。
【發(fā)明內(nèi)容】
[OOO7 ]本發(fā)明要解決的技術(shù)問題在于,針對面向?qū)ο髷?shù)據(jù)庫系統(tǒng)Ob jectstore在應(yīng)用于Ceph時(shí)存在上述問題,提供一種基于0b jectStore的LogStructure存儲(chǔ)系統(tǒng)及其數(shù)據(jù)寫入方法。
[0008]為實(shí)現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種基于ObjectStore的LogStructure存儲(chǔ)系統(tǒng),所述LogStructure存儲(chǔ)系統(tǒng)包括元數(shù)據(jù)管理器和數(shù)據(jù)管理器,其中,所述元數(shù)據(jù)管理器與所述數(shù)據(jù)管理器之間是解耦的;所述數(shù)據(jù)管理器為LogStructure引擎;所述LogStructure引擎包括多個(gè)內(nèi)存索引表、多個(gè)日志文件與多個(gè)歸檔日志索引文件以及對象文件;所述多個(gè)內(nèi)存索引表、所述多個(gè)日志文件與多個(gè)歸檔日志索引文件以及所述對象文件分別存儲(chǔ)于內(nèi)存、SSD以及HDD中,且所述內(nèi)存中的所述多個(gè)內(nèi)存索引表分別——對應(yīng)于所述SSD的所述多個(gè)日志文件。
[0009]于本發(fā)明的一實(shí)施例中,所述內(nèi)存索引表中的索引信息通過跳表結(jié)構(gòu)來組織,且所述索引表的查詢時(shí)間復(fù)雜度為O(1gN)。
[00?0] 于本發(fā)明的一實(shí)施例中,所述LogStructure存儲(chǔ)系統(tǒng)還包括處理器,所述處理器用于當(dāng)數(shù)據(jù)寫入時(shí)將數(shù)據(jù)按文件尾部追加的方式寫入到日志文件中,同時(shí)在內(nèi)存中建立該日志文件中的相關(guān)位置的索引信息。
[0011]于本發(fā)明的一實(shí)施例中,所述所述處理器還用于當(dāng)一個(gè)日志文件中的數(shù)據(jù)條目在達(dá)到預(yù)設(shè)閾值時(shí),將該日志文件對應(yīng)的內(nèi)存索引表進(jìn)行凍結(jié),并生成出一個(gè)新的日志文件繼續(xù)接替寫入的操作。
[0012]于本發(fā)明的一實(shí)施例中,所述處理器還用于當(dāng)日志文件在SSD的空間達(dá)到預(yù)設(shè)閾值時(shí),將SSD中的日志文件的數(shù)據(jù)迀移到HDD中。
[0013]本發(fā)明還提供了一種數(shù)據(jù)寫入方法,應(yīng)用于如上述的基于Objectstore的LogStructure存儲(chǔ)系統(tǒng)中,所述LogStructure存儲(chǔ)系統(tǒng)包括元數(shù)據(jù)管理器和數(shù)據(jù)管理器,其中,所述元數(shù)據(jù)管理器與所述數(shù)據(jù)管理器之間是解耦的;所述數(shù)據(jù)管理器為LogStructure引擎;所述LogStructure引擎包括多個(gè)內(nèi)存索引表、多個(gè)日志文件與多個(gè)歸檔日志索引文件以及對象文件;所述多個(gè)內(nèi)存索引表、所述多個(gè)日志文件與多個(gè)歸檔日志索引文件以及所述對象文件分別存儲(chǔ)于內(nèi)存、SSD以及HDD中,且所述內(nèi)存中的所述多個(gè)內(nèi)存索引表分別一一對應(yīng)于所述SSD的所述多個(gè)日志文件;所述方法包括以下步驟:S1、創(chuàng)建所述對象文件并將數(shù)據(jù)寫入到創(chuàng)建的所述對象文件中;S2、在判斷能對所述數(shù)據(jù)進(jìn)行尾部添加時(shí),將所述數(shù)據(jù)寫入到底層的所述對象文件中;S3、在判斷所述數(shù)據(jù)的長度超過所述SSD的寫入緩存區(qū)的限制閾值時(shí),將所述數(shù)據(jù)寫入到所述HDD的所述對象文件中,并將所述寫入緩存區(qū)中存在的部分?jǐn)?shù)據(jù)設(shè)置為刪除狀態(tài);S4、將寫入到寫入緩存區(qū)的所述數(shù)據(jù)分頁以分成多個(gè)頁對齊的小對象,并將所述多個(gè)小對象寫入到所述內(nèi)存索引表的記錄中。
[0014]于本發(fā)明的一實(shí)施例中,所述內(nèi)存索引表中的索引信息通過跳表結(jié)構(gòu)來組織,且所述索引表的查詢時(shí)間復(fù)雜度為O(1gN)。
[0015]于本發(fā)明的一實(shí)施例中,所述LogStructure存儲(chǔ)系統(tǒng)還包括處理器,所述處理器用于當(dāng)數(shù)據(jù)寫入時(shí)將數(shù)據(jù)按文件尾部追加的方式寫入到日志文件中,同時(shí)在內(nèi)存中建立該日志文件中的相關(guān)位置的索引信息。
[0016]于本發(fā)明的一實(shí)施例中,所述處理器還用于當(dāng)一個(gè)日志文件中的數(shù)據(jù)條目在達(dá)到預(yù)設(shè)閾值時(shí)將該日志文件對應(yīng)的內(nèi)存索引表進(jìn)行凍結(jié),并生成出一個(gè)新的日志文件繼續(xù)接替寫入的操作。
[0017]于本發(fā)明的一實(shí)施例中,所述處理器還用于當(dāng)日志文件在SSD的空間達(dá)到預(yù)設(shè)閾值時(shí),將SSD中的日志文件的數(shù)據(jù)迀移到HDD中。
[0018]如上所述,本發(fā)明的基于Ob jectstore的LogStructure存儲(chǔ)系統(tǒng)及其數(shù)據(jù)寫入方法,具有以下有益效果= LogStructure引擎存儲(chǔ)于內(nèi)存、SSD以及HDD,充分考慮了不同存儲(chǔ)介質(zhì)的特性,使得該LogStructure存儲(chǔ)系統(tǒng)進(jìn)行數(shù)據(jù)存儲(chǔ)發(fā)揮了數(shù)據(jù)的存儲(chǔ)性能。在SSD中使用LogStructure結(jié)構(gòu)來進(jìn)行數(shù)據(jù)存儲(chǔ),很好地將隨機(jī)寫轉(zhuǎn)化為順序?qū)懀岣吡讼到y(tǒng)的寫入性能,從而提升Ceph的整體讀寫性能。同時(shí),HDD中使用對象文件進(jìn)行存儲(chǔ),權(quán)衡了數(shù)據(jù)的讀寫要求,使得該LogStructure存儲(chǔ)系統(tǒng)可適用于不同應(yīng)用場景中。另外,LogStructure存儲(chǔ)系統(tǒng)解決了原有的Ob jectstore的寫放大問題,提高設(shè)備的有效利用率。該LogStructure存儲(chǔ)系統(tǒng)實(shí)現(xiàn)分層存儲(chǔ),將熱數(shù)據(jù)緩存到SSD中,并實(shí)現(xiàn)可讀的寫緩存。對于順序數(shù)據(jù)的寫入,直接寫入到磁盤中,不經(jīng)過SSD,避免數(shù)據(jù)修復(fù)或迀移時(shí)制作的大量順序1以引起系統(tǒng)的性能抖動(dòng)出現(xiàn)“Slow 10”現(xiàn)象。
【附圖說明】
[0019]圖1顯示為當(dāng)前Ceph的OSD的基本架構(gòu)圖。
[°02°]圖2顯示為本發(fā)明實(shí)施例的基于Ob jectstore的LogStructure存儲(chǔ)系統(tǒng)的結(jié)構(gòu)圖。[0021 ] 圖3顯示為圖2中的LogStructure引擎的結(jié)構(gòu)圖。
[0022]圖4顯示為圖3中的內(nèi)存索引表的結(jié)構(gòu)圖。
[0023]圖5顯示為圖3中的日志文件的結(jié)構(gòu)圖。
[0024]圖6顯示為日志追加寫入的示意圖
[0025]圖7顯示為本發(fā)明的基于Objectstore的LogStructure存儲(chǔ)系統(tǒng)的基本1數(shù)據(jù)流圖。
[0026]圖8顯示為本發(fā)明實(shí)施例的基于ObjectStore的LogStructure存儲(chǔ)系統(tǒng)的數(shù)據(jù)寫入方法的流程圖。
【具體實(shí)施方式】
[0027]以下通過特定的具體實(shí)例說明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可以通過另外不同的【具體實(shí)施方式】加以實(shí)施或應(yīng)用,本說明書中的各項(xiàng)細(xì)節(jié)也可以基于不同觀點(diǎn)與應(yīng)用,在沒有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。需說明的是,在不沖突的情況下,以下實(shí)施例及實(shí)施例中的特征可以相互組合。
[0028]需要說明的是,以下實(shí)施例中所提供的圖示僅以示意方式說明本發(fā)明的基本構(gòu)想,遂圖式中僅顯示與本發(fā)明中有關(guān)的組件而非按照實(shí)際實(shí)施時(shí)的組件數(shù)目、形狀及尺寸繪制,其實(shí)際實(shí)施時(shí)各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復(fù)雜。
[0029]請參閱2至圖8。圖2所示,是本發(fā)明實(shí)施例的基于Ob jectStore的LogStructure存儲(chǔ)系統(tǒng)的結(jié)構(gòu)圖。參考圖2,該LogStructure存儲(chǔ)系統(tǒng)包括元數(shù)據(jù)管理器和數(shù)據(jù)管理器,其中,該元數(shù)據(jù)管理器與該數(shù)據(jù)管理器之間是解耦的,該元數(shù)據(jù)管理器為一個(gè)Κ/V數(shù)據(jù)庫(K/VDatabase),該數(shù)據(jù)管理器為LogStructure引擎(LogStructure Engine)。
[0030]該Κ/V數(shù)據(jù)庫包括Omap和0bjectMeta,0map用于匹配對應(yīng)的Ceph 0bjectSore的相關(guān)接口,并存儲(chǔ)對象的相關(guān)屬性信息,ObjectMeta用于數(shù)據(jù)管理,并映射到LogStructure引擎的對象管理中。該LogStructure引擎中包含WAL、ReadCache和0b jectFiIeStore,WAL和ReadCache作為讀寫的加速器,ObjectFi IeStore使用獨(dú)立的分塊文件存儲(chǔ)具體的數(shù)據(jù)對象。
[0031 ] 如圖3所示,LogStructure引擎包括多個(gè)內(nèi)存索引表(MemIndexTable)、多個(gè)日志文件(Log File)與多個(gè)歸檔日志索引(ArchiveLogIndex)文件以及多個(gè)對象文件(ObjectFile),其中,多個(gè)內(nèi)存索引表存儲(chǔ)于內(nèi)存中,多個(gè)日志文件和多個(gè)歸檔日志索引文件存儲(chǔ)于SSD(Solid State Drive,固態(tài)硬盤)中,以及多個(gè)對象文件存儲(chǔ)于HDD(Mechanical harddisk,機(jī)械硬盤)中,且內(nèi)存的內(nèi)存索引表對應(yīng)于SSD的日志文件,實(shí)現(xiàn)了LogStructure引擎存儲(chǔ)于SSD與HDD的混合環(huán)境中。進(jìn)一步地,對象文件的大小為IM?16M。
[0032]其中,通過跳表數(shù)據(jù)結(jié)構(gòu)來組織內(nèi)存索引表中的索引信息,內(nèi)存索引表的查詢時(shí)間復(fù)雜度為O(1gN),如圖4所示,索引信息的基本結(jié)構(gòu)為:key、日志ID(1gno)、日志偏移(offset)和seq,其中,日志ID與日志偏移用于定位出具體的數(shù)據(jù)記錄;seq表示數(shù)據(jù)存儲(chǔ)的方式,這樣不需要修改數(shù)據(jù)內(nèi)容,只采用追加的方式,因此該LogStructure存儲(chǔ)系統(tǒng)是可以實(shí)現(xiàn)系統(tǒng)并行性為“寫互斥讀共享且寫