不互斥讀”。
[0033]日志文件包括多條日志記錄,每條日志記錄為一次完整事務提交的全部數(shù)據(jù),由于一次完整事務提交可能包括多個數(shù)據(jù)修改操作,如圖5所示,每條數(shù)據(jù)記錄包括多個K/V數(shù)據(jù)單元??梢钥闯觯捎诿織l記錄為一次完整事務操作,因此,當該LogStructure存儲系統(tǒng)重啟時,可通過回放日志文件來重新建立存儲索引結構。
[0034]進一步地,通過追加的形式對所有的數(shù)據(jù)進行更新,即不覆蓋修改。舉例說明,如圖6所示,第一次key I寫入的數(shù)據(jù)為value I,之后,key I又被修改為value3,此時,key I的數(shù)據(jù)并不會被覆蓋寫入,而是在新的位置上寫入對應被修改的數(shù)據(jù),當系統(tǒng)讀取時會讀取seq數(shù)值相對較大的值作為對應key的有效數(shù)值,S卩keyl的有效數(shù)值為讀取seq數(shù)值為3時的value30
[0035]在本發(fā)明的實施例中,該LogStructure存儲系統(tǒng)還包括處理器(圖中未示出)。在LogStructure引擎中,僅一個內(nèi)存索引表和一個日志文件為可修改的,如圖3所示,為最左邊的一個內(nèi)存索引表和一個日志文件。處理器用于當數(shù)據(jù)寫入時將數(shù)據(jù)按文件尾部追加的方式寫入到日志文件中,同時在內(nèi)存中建立該日志文件中的相關位置的索引信息。進而WAL(Write Ahead Log,預寫式日志)有利于在系統(tǒng)崩潰時準確的恢復處理。
[0036]進一步地,處理器還用于當一個日志文件中的數(shù)據(jù)條目在達到預設閾值時,將該日志文件對應的內(nèi)存索引表進行凍結,并生成出一個新的日志文件繼續(xù)接替寫入的操作。此時,處理器觸發(fā)相應的線程對凍結的內(nèi)存索引表進行歸檔處理,在歸檔處理時,根據(jù)內(nèi)存中的內(nèi)存索引表生成一個歸檔日志索引文件,并將該歸檔日志索引文件存儲在SSD中。這樣就能夠避免系統(tǒng)在重新啟動時需要直接讀取日志文件來恢復內(nèi)存中的索引信息的情況,從而直接讀取相關的歸檔日志索引文件實現(xiàn)系統(tǒng)的快速恢復。
[0037]由于內(nèi)存索引表的查詢時間復雜度為O(1gN),需要對數(shù)據(jù)進行橫向合并處理,處理器還用于對凍結的內(nèi)存索引表進行合并,將多個內(nèi)存索引表合并為一個內(nèi)存索引表,此時一個內(nèi)存索引表對應一個歸檔日志索引文件,且對應多個日志文件。
[0038]進一步地,對數(shù)據(jù)進行縱向歸并處理,處理器用于當日志文件在SSD的空間達到預設閾值時,將SSD中的日志文件的數(shù)據(jù)迀移到HDD中。此時,在進行數(shù)據(jù)的刷新操作時,遍歷最老的內(nèi)存索引表,獲得一個近似順序的數(shù)據(jù)塊,將多個小數(shù)據(jù)塊操作合并成一個大的1操作,刷寫到具體的對象文件上。
[0039]在本發(fā)明的實施例中,LogStructure引擎存儲于內(nèi)存、SSD以及HDD,充分考慮了不同存儲介質(zhì)的特性,使得該LogStructure存儲系統(tǒng)進行數(shù)據(jù)存儲發(fā)揮了數(shù)據(jù)的存儲性能。在SSD中使用LogStructure結構來進行數(shù)據(jù)存儲,很好地將隨機寫轉化為順序?qū)?,提高了系統(tǒng)的寫入性能,從而提升Ceph的整體讀寫性能。另外,HDD中使用對象文件進行存儲,權衡了數(shù)據(jù)的讀寫要求,使得該LogStructure存儲系統(tǒng)可適用于不同應用場景中。
[°04°]如圖7所示,是本發(fā)明的基于Ob jectstore的LogStructure存儲系統(tǒng)的基本1數(shù)據(jù)流圖,參考圖7,寫入1分為順序(Sequentail) 1和隨機(Random) 10,其中順序1不經(jīng)過SSD,直接寫入到磁盤中,避免數(shù)據(jù)修復或迀移時制作的大量順序1以引起系統(tǒng)的性能抖動出現(xiàn)“Slow 10”現(xiàn)象。下面結合圖8對該LogStructure存儲系統(tǒng)的數(shù)據(jù)寫入方法進行說明:
[0041]如圖8所示,是本發(fā)明實施例的數(shù)據(jù)寫入方法的流程圖,該方法應用于上述的LogStructure存儲系統(tǒng)。參考圖8,該方法包括以下步驟:
[0042]S1、創(chuàng)建對象文件并將該寫入數(shù)據(jù)寫入到創(chuàng)建的對象文件中;
[0043]在此步驟中,在判斷不存在寫入數(shù)據(jù)的對象文件時創(chuàng)建對象文件并將該寫入數(shù)據(jù)寫入到創(chuàng)建的對象文件中
[0044]S2、在判斷能對該數(shù)據(jù)進行尾部添加時,將該數(shù)據(jù)寫入到底層的對象文件中;
[0045]S3、在判斷該數(shù)據(jù)的長度超過SSD的寫入緩存區(qū)(WriteBuffer)的限制閾值時,將該數(shù)據(jù)寫入到HDD的對象文件中,并將寫入緩存區(qū)中存在的部分數(shù)據(jù)設置為刪除(delete)狀態(tài);
[0046]S4、將寫入到寫入緩存區(qū)的數(shù)據(jù)分頁以分成多個頁對齊的小對象,并將該多個小對象寫入到內(nèi)存索引表的記錄中。
[0047]對應地,對于數(shù)據(jù)的讀取,由于該LogStructure存儲系統(tǒng)中的內(nèi)存和SSD中均有加速機制,因此,數(shù)據(jù)的讀取需要不同的層次進行逐個訪問,即先讀取SSD中的寫入緩存區(qū)的數(shù)據(jù),再讀取兩級讀高速緩存(Cache)中的數(shù)據(jù),最后讀取HDD中的對象文件中的數(shù)據(jù)。
[0048]綜上所述,本發(fā)明基于Ob jectStore的LogStructure存儲系統(tǒng)及其數(shù)據(jù)寫入方法,通過硬件設備為SSD與HDD的混合環(huán)境來存儲LogStructure引擎,充分發(fā)揮SSD的高1PS特性,提高了 LogStructure存儲系統(tǒng)的1PS,解決了原有的Ob jectstore的寫放大問題,提高設備的有效利用率。同時,該LogStructure存儲系統(tǒng)實現(xiàn)分層存儲,將熱數(shù)據(jù)緩存到SSD中,并實現(xiàn)可讀的寫緩存。另外,對于順序數(shù)據(jù)的寫入,直接寫入到磁盤中,不經(jīng)過SSD,避免數(shù)據(jù)修復或迀移時制作的大量順序1以引起系統(tǒng)的性能抖動出現(xiàn)“Slow 10”現(xiàn)象。所以,本發(fā)明有效克服了現(xiàn)有技術中的種種缺點而具高度產(chǎn)業(yè)利用價值。
[0049]上述實施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術的人士皆可在不違背本發(fā)明的精神及范疇下,對上述實施例進行修飾或改變。因此,舉凡所屬技術領域中具有通常知識者在未脫離本發(fā)明所揭示的精神與技術思想下所完成的一切等效修飾或改變,仍應由本發(fā)明的權利要求所涵蓋。
【主權項】
1.一種基于ObjectStore的LogStructure存儲系統(tǒng),其特征在于,所述LogStructure存儲系統(tǒng)包括元數(shù)據(jù)管理器和數(shù)據(jù)管理器,其中,所述元數(shù)據(jù)管理器與所述數(shù)據(jù)管理器之間是解親的;所述數(shù)據(jù)管理器為LogStructure引擎;所述LogStructure引擎包括多個內(nèi)存索引表、多個日志文件與多個歸檔日志索引文件以及對象文件;所述多個內(nèi)存索引表、所述多個日志文件與多個歸檔日志索引文件以及所述對象文件分別存儲于內(nèi)存、SSD以及HDD中,且所述內(nèi)存中的所述多個內(nèi)存索引表分別一一對應于所述SSD的所述多個日志文件。2.根據(jù)權利要求1中所述的基于ObjectStore的LogStructure存儲系統(tǒng),其特征在于,所述內(nèi)存索引表中的索引信息通過跳表結構來組織,且所述索引表的查詢時間復雜度為O(1gN)03.根據(jù)權利要求2中所述的基于ObjectStore的LogStructure存儲系統(tǒng),其特征在于,所述LogStructure存儲系統(tǒng)還包括處理器,所述處理器用于當數(shù)據(jù)寫入時將數(shù)據(jù)按文件尾部追加的方式寫入到日志文件中,同時在內(nèi)存中建立該日志文件中的相關位置的索引信息。4.根據(jù)權利要求3中所述的基于ObjectStore的LogStructure存儲系統(tǒng),其特征在于,所述所述處理器還用于當一個日志文件中的數(shù)據(jù)條目在達到預設閾值時,將該日志文件對應的內(nèi)存索引表進行凍結,并生成出一個新的日志文件繼續(xù)接替寫入的操作。5.根據(jù)權利要求4中所述的基于ObjectStore的LogStructure存儲系統(tǒng),其特征在于,所述處理器還用于當日志文件在SSD的空間達到預設閾值時,將SSD中的日志文件的數(shù)據(jù)迀移到HDD中。6.—種數(shù)據(jù)寫入方法,應用于如權利要求1-5中任一項所述的基于ObjectStore的LogStructure存儲系統(tǒng)中,其特征在于,所述LogStructure存儲系統(tǒng)包括元數(shù)據(jù)管理器和數(shù)據(jù)管理器,其中,所述元數(shù)據(jù)管理器與所述數(shù)據(jù)管理器之間是解耦的;所述數(shù)據(jù)管理器為LogStructure引擎;所述LogStructure引擎包括多個內(nèi)存索引表、多個日志文件與多個歸檔日志索引文件以及對象文件;所述多個內(nèi)存索引表、所述多個日志文件與多個歸檔日志索引文件以及所述對象文件分別存儲于內(nèi)存、SSD以及HDD中,且所述內(nèi)存中的所述多個內(nèi)存索引表分別一一對應于所述SSD的所述多個日志文件;所述方法包括以下步驟: 51、創(chuàng)建所述對象文件并將數(shù)據(jù)寫入到創(chuàng)建的所述對象文件中; 52、在判斷能對所述數(shù)據(jù)進行尾部添加時,將所述數(shù)據(jù)寫入到底層的所述對象文件中; 53、在判斷所述數(shù)據(jù)的長度超過所述SSD的寫入緩存區(qū)的限制閾值時,將所述數(shù)據(jù)寫入到所述HDD的所述對象文件中,并將所述寫入緩存區(qū)中存在的部分數(shù)據(jù)設置為刪除狀態(tài); 54、將寫入到寫入緩存區(qū)的所述數(shù)據(jù)分頁以分成多個頁對齊的小對象,并將所述多個小對象寫入到所述內(nèi)存索引表的記錄中。7.根據(jù)權利要求6中所述的數(shù)據(jù)寫入方法,其特征在于,所述內(nèi)存索引表中的索引信息通過跳表結構來組織,且所述索引表的查詢時間復雜度為O(logN)。8.根據(jù)權利要求7中所述的數(shù)據(jù)寫入方法,其特征在于,所述LogStructure存儲系統(tǒng)還包括處理器,所述處理器用于當數(shù)據(jù)寫入時將數(shù)據(jù)按文件尾部追加的方式寫入到日志文件中,同時在內(nèi)存中建立該日志文件中的相關位置的索引信息。9.根據(jù)權利要求8中所述的數(shù)據(jù)寫入方法,其特征在于,所述處理器還用于當一個日志文件中的數(shù)據(jù)條目在達到預設閾值時將該日志文件對應的內(nèi)存索引表進行凍結,并生成出一個新的日志文件繼續(xù)接替寫入的操作。10.根據(jù)權利要求9中所述的數(shù)據(jù)寫入方法,其特征在于,所述處理器還用于當日志文件在SSD的空間達到預設閾值時,將SSD中的日志文件的數(shù)據(jù)迀移到HDD中。
【專利摘要】本發(fā)明提供一種基于ObjectStore的LogStructure存儲系統(tǒng),包括元數(shù)據(jù)管理器和數(shù)據(jù)管理器,其中,所述元數(shù)據(jù)管理器與所述數(shù)據(jù)管理器之間是解耦的;所述數(shù)據(jù)管理器為LogStructure引擎;所述LogStructure引擎包括多個內(nèi)存索引表、多個日志文件與多個歸檔日志索引文件以及對象文件;所述多個內(nèi)存索引表、所述多個日志文件與多個歸檔日志索引文件以及所述對象文件分別存儲于內(nèi)存、SSD以及HDD中,且所述內(nèi)存中的所述多個內(nèi)存索引表分別一一對應于所述SSD的所述多個日志文件。本發(fā)明還提供了其數(shù)據(jù)寫入方法。本發(fā)明通過LogStructure引擎來優(yōu)化數(shù)據(jù)的讀寫性能,從而提升Ceph的讀寫性能。
【IPC分類】G06F17/30, G06F3/06
【公開號】CN105574104
【申請?zhí)枴緾N201510924037
【發(fā)明人】雍帥
【申請人】上海愛數(shù)信息技術股份有限公司
【公開日】2016年5月11日
【申請日】2015年12月11日