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