欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種日志合并樹的合并方法及系統(tǒng)與流程

文檔序號:12667159閱讀:165來源:國知局
本發(fā)明涉及日志合并數(shù)
技術(shù)領(lǐng)域
:,特別涉及一種日志合并樹的合并方法及系統(tǒng)。
背景技術(shù)
::日志合并樹(Log-StructuredMergeTree,簡稱LSM-Tree)由多組件組成,包括一個內(nèi)存組件和多個磁盤組件,組件大小呈指數(shù)增長,其架構(gòu)如圖2所示,內(nèi)存組件有內(nèi)存表(Memtable)組成,每個磁盤組件都是由一個或者多個排序字符串表(SSTable)組成,LSM-Tree的主要思想是將對數(shù)據(jù)的寫或者更新保存在內(nèi)存中,達到指定的閾值后將這些操作順序地寫入到存儲設(shè)備中,插入、更新、刪除等更新操作由內(nèi)存組件服務(wù),查找和掃描等操作由所有組件服務(wù),它采用異地更新方式,因此,在LSM-tree中,同一個key可能存在多個版本的value,刪除操作只是在內(nèi)存組件中添加一個刪除標記,而沒有真正刪除數(shù)據(jù),在后續(xù)的compact過程中會根據(jù)同一個key的新舊版本和刪除標志做數(shù)據(jù)的刪除及合并,不同key之間做排序操作,生成新的SSTable文件,并刪除舊的SSTable文件。為了保持LSM-tree對于將來的讀、寫操作高效,需要不斷地將數(shù)據(jù)從高組件向低組件移動,當某個組件的大小超過閾值時,觸發(fā)其合并(Compaction)操作,每次數(shù)據(jù)移動在相鄰組件之間進行,期間將兩組件部分數(shù)據(jù)進行排序,刪除無效數(shù)據(jù)和舊數(shù)據(jù),這個過程稱為compaction,以圖3為例,當組件C2超過閾值,則在組件C2中選擇一個SSTableT22進行合并,從組件C3中選擇與組件C2中T22的key-range存在overlap的SSTableT32和T33。將T22和T32、T33合并為三個新的SSTable,為T35、T36、T37;并將新構(gòu)造的SSTable放置在C3。以這種方式,將數(shù)據(jù)T22從組件C2向下移動到組件C3。Compaction會控制基于LSM-Tree的key/value存儲的IO操作,在Compaction過程中,鍵值對會從smallerlevel(低層)流向largerlevel(高層),由于每層預設(shè)定的容量的限制,鍵值對像largerlevel的緩慢流動會導致系統(tǒng)的寫暫停,圖4顯示了一個鍵值對從smallerlevel流向largerlevel過程中的讀寫操作過程,在compaction過程中,一個鍵值對會被讀入寫出很多次,即使是在同一個層中,原因是compaction過程是一個輪詢調(diào)度的,而在smallerlevel層中輪詢的速度會快過largerlevel層,結(jié)果在一個鍵值對移動到相鄰層之前就已經(jīng)參與了多次compaction過程,這種嚴重的寫放大現(xiàn)象導致了經(jīng)常出現(xiàn)寫暫停,從而降低系統(tǒng)的寫性能?,F(xiàn)有針對LSM-Tree寫放大問題的解決方案,主要有以下幾種方式:技術(shù)方案1:將傳統(tǒng)LSM-Tree觸發(fā)compaction的條件放大,即增大每個組件的閾值大小,主要的缺點在于:只能緩解組件0到組件1的寫放大問題,而后續(xù)層級依舊存在寫放大問題。技術(shù)方案2:bLSM將key分成多個keyrange,使得compaction落在少量的keyrange中,避免不相關(guān)keyrange中的數(shù)據(jù)進行compaction,如圖5所示,假設(shè)N~Q范圍內(nèi)不斷有數(shù)據(jù)插入,則只會引發(fā)N~Q范圍內(nèi)的compaction,而不會引發(fā)其他范圍的compaction,如圖5所示。其主要缺點在于:無法避免某一keyrange內(nèi)的compaction所帶來的寫放大問題。bLSM發(fā)表在Proceedingsofthe2012ACMSIGMODInternationalConferenceonManagementofData。技術(shù)方案3:VT-Tree會判斷當一個鍵值對在連續(xù)多層中都沒有相同key對應的其它版本的鍵值對時,可以直接跨越這些層到達含有相同key值的層或最后一層,從而節(jié)省了鍵值對在多層之前移動所帶來的I/O開銷,如圖6所示。其主要缺點在于:無法緩解熱點數(shù)據(jù)進行compaction所帶來的寫放大問題。VT-Tree發(fā)表在11thUSENIXConferenceonFileandStorageTechnologies(FAST’13)技術(shù)方案4:Wisckey中將key與value在LSM-Tree中分開存儲,即將key與value的指針存儲在LSM-Tree中,而value的真實數(shù)據(jù)則存儲在其他地方,因此在進行compaction過程中,只有key與value的指針會進行重復讀寫,如圖7所示。其主要缺點在于:Key由于compaction被反復讀寫,在一些key較大的場景下,LSM-Tree的寫放大問題仍然存在。Wisckey發(fā)表在14thUSENIXConferenceonFileandStorageTechnologies(FAST’16)技術(shù)實現(xiàn)要素:本發(fā)明的目的是解決上述現(xiàn)有技術(shù)無法解決由于LSM-Tree中數(shù)據(jù)由于合并(同層&跨層)導致反復讀寫而引發(fā)的LSM-Tree寫放大問題,提出一種日志合并樹的合并方法及系統(tǒng)。本發(fā)明提出一種日志合并樹的合并方法,包括:實合并步驟,包括數(shù)據(jù)合并與元數(shù)據(jù)合并,并生成RealSSTable,其中數(shù)據(jù)合并為將SSTable進行合并,元數(shù)據(jù)合并包括合并keyrange,filenumber,filesize信息;虛合并步驟,生成VirtualSSTable,并只對元數(shù)據(jù)進行合并,元數(shù)據(jù)進行合并包括合并keyrange,filenumber,filesize信息,并記錄所述VirtualSSTable的數(shù)據(jù)來源;RealSSTable的讀取步驟,對所述RealSSTable進行讀取,其中當key落在所述RealSSTable的keyrange中,則直接在所述RealSSTable上查找key所對應的value值;VirtualSSTable的讀取步驟,當key落在VirtualSSTable的keyrange中,則通過元數(shù)據(jù)信息查找所述VirtualSSTable與key相對應的數(shù)據(jù)來源,并在所述RealSSTable中查找key所對應的value值;VirtualSSTable的合并步驟,在讀取過程中對所述VirtualSSTable進行合并,將所述VirtualSSTable變成RealSSTable,從而提升讀性能。所述實合并步驟包括:11.依次讀取各個RealSSTable的key/value;12.通過歸并排序,將符合條件的key/value順序?qū)懭氲焦潭ù笮〉腞ealSSTable中;13.寫滿之后,重新創(chuàng)建一個新的RealSSTable,繼續(xù)將排好序的key/value寫入其中,直至寫完。所述虛合并步驟包括:21.收集RealSSTable的元數(shù)據(jù);22.根據(jù)RealSSTable中的keyrange,獲取新的keyrange,覆蓋所有RealSSTable的范圍;23.根據(jù)RealSSTable的個數(shù)N,將新的keyrange分成N個,表示N個VirtualSSTable,其中VirtualSSTable的文件大小設(shè)置成與RealSSTable的文件大小相同,VirtualSSTable的文件編號通過虛合并進程統(tǒng)一分配,數(shù)據(jù)源則為虛合并中所涉及到的所有RealSSTable。所述VirtualSSTable的讀取步驟包括41.判斷需要查找的key是否落在VirtualSSTable的key范圍中;42.如果不在,則返回43.如果在,則通過VirtualSSTable的元數(shù)據(jù)找到數(shù)據(jù)源,即RealSSTables;44.根據(jù)RealSSTable的索引進行查找key;45.如果找到,則返回key的value值;46.如果沒有找到,則進行下一個RealSSTable的查找,直至將VirtualSSTable的數(shù)據(jù)源中所包含的RealSSTable都查找一遍;47.如果還是沒有找到,則返回。所述VirtualSSTable的合并步驟包括51.獲取VirtualSSTable的數(shù)據(jù)源RealSSTables;52.依次讀取各個RealSSTable的key/value;53.通過歸并排序,將符合條件的key/value順序?qū)懭氲焦潭ù笮〉腞ealSSTable中;54.寫滿之后,重新創(chuàng)建一個新的RealSSTable,繼續(xù)將排好序的key/value寫入其中,直至寫完。本發(fā)明還提出一種日志合并樹的合并系統(tǒng),包括:實合并模塊,包括數(shù)據(jù)合并與元數(shù)據(jù)合并,并生成RealSSTable,其中數(shù)據(jù)合并為將SSTable進行合并,元數(shù)據(jù)合并包括合并keyrange,filenumber,filesize信息;虛合并模塊,用于生成VirtualSSTable,并只對元數(shù)據(jù)進行合并,元數(shù)據(jù)進行合并包括合并keyrange,filenumber,filesize信息,并記錄所述VirtualSSTable的數(shù)據(jù)來源;RealSSTable的讀取模塊,用于對所述RealSSTable進行讀取,其中當key落在所述RealSSTable的keyrange中,則直接在所述RealSSTable上查找key所對應的value值;VirtualSSTable的讀取模塊,用于當key落在VirtualSSTable的keyrange中,則通過元數(shù)據(jù)信息查找所述VirtualSSTable與key相對應的數(shù)據(jù)來源,并在所述RealSSTable中查找key所對應的value值;VirtualSSTable的合并模塊,用于在讀取過程中對所述VirtualSSTable進行合并,將所述VirtualSSTable變成RealSSTable,從而提升讀性能。所述實合并模塊包括:11.依次讀取各個RealSSTable的key/value;12.通過歸并排序,將符合條件的key/value順序?qū)懭氲焦潭ù笮〉腞ealSSTable中;13.寫滿之后,重新創(chuàng)建一個新的RealSSTable,繼續(xù)將排好序的key/value寫入其中,直至寫完。所述虛合并模塊包括:21.收集RealSSTable的元數(shù)據(jù);22.根據(jù)RealSSTable中的keyrange,獲取新的keyrange,覆蓋所有RealSSTable的范圍;23.根據(jù)RealSSTable的個數(shù)N,將新的keyrange分成N個,表示N個VirtualSSTable,其中VirtualSSTable的文件大小設(shè)置成與RealSSTable的文件大小相同,VirtualSSTable的文件編號通過虛合并進程統(tǒng)一分配,數(shù)據(jù)源則為虛合并中所涉及到的所有RealSSTable。所述VirtualSSTable的讀取模塊包括41.判斷需要查找的key是否落在VirtualSSTable的key范圍中;42.如果不在,則返回43.如果在,則通過VirtualSSTable的元數(shù)據(jù)找到數(shù)據(jù)源,即RealSSTables;44.根據(jù)RealSSTable的索引進行查找key;45.如果找到,則返回key的value值;46.如果沒有找到,則進行下一個RealSSTable的查找,直至將VirtualSSTable的數(shù)據(jù)源中所包含的RealSSTable都查找一遍;47.如果還是沒有找到,則返回。所述VirtualSSTable的合并模塊包括51.獲取VirtualSSTable的數(shù)據(jù)源RealSSTables;52.依次讀取各個RealSSTable的key/value;53.通過歸并排序,將符合條件的key/value順序?qū)懭氲焦潭ù笮〉腞ealSSTable中;54.寫滿之后,重新創(chuàng)建一個新的RealSSTable,繼續(xù)將排好序的key/value寫入其中,直至寫完。由以上方案可知,本發(fā)明的優(yōu)點在于:1.本發(fā)明能夠降低合并所帶來的寫放大問題,從而提升系統(tǒng)的寫性能,并且與其他降低LSM-Tree寫放大問題的方法是正交的,可疊加使用;2.本發(fā)明能夠減少合并中的I/O量,對于SSD這類存儲設(shè)備,延長其使用壽命;圖1展示了本發(fā)明與RocksDB的性能評測,從圖1中可以看出,本發(fā)明的優(yōu)勢在于:Write-intensive(寫密集)的負載下,整體性能提升30%~1倍;Read-intensive(讀密集)的負載下,整體性能基本上與RocksDB持平;本身LSM-Tree主要用于Write-intensive負載。附圖說明圖1是本發(fā)明性能評測圖;圖2是LSM-Tree架構(gòu)圖;圖3是LSM-TreeCompaction示例圖;圖4是LSM-Tree進行Compaction過程中鍵值對的流動過程圖;圖5是bLSM圖;圖6是VT-Tree圖;圖7是Wisckey圖;圖8是實合并具體流程圖;圖9是虛合并具體流程圖;圖10是VirtualSSTable的讀取流程圖;圖11是VirtualSSTable的合并圖;圖12是不同VCT對于寫性能的影響圖;圖13是不同VCT對于I/O量和合并時間的影響圖;圖14是不同MCT對于讀性能的影響圖。具體實施方式以下為本發(fā)明的整體流程,如下所示:1.實合并實合并包括數(shù)據(jù)合并和元數(shù)據(jù)合并,其產(chǎn)生的SSTable為RealSSTable。其中數(shù)據(jù)合并是SSTable合并,而元數(shù)據(jù)合并包括合并keyrange,filenumber,filesize等信息,具體流程如圖8所示。11.依次讀取各個RealSSTable的key/value;12.通過歸并排序,將符合條件的key/value順序?qū)懭氲焦潭ù笮〉腞ealSSTable中(默認為2MB)13.寫滿之后,重新創(chuàng)建一個新的RealSSTable,繼續(xù)將排好序的key/value寫入其中,直至寫完。2.虛合并虛合并產(chǎn)生的SSTable為VirtualSSTable。虛合并只對元數(shù)據(jù)合并。元數(shù)據(jù)合并包括合并keyrange,filenumber,filesize等,以及記錄該VirtualSSTable是由哪些RealSSTable構(gòu)成(稱為parentSST),即VirtualSSTable的數(shù)據(jù)來源。具體流程如圖9所示。21.收集虛合并中所涉及到的RealSSTable的元數(shù)據(jù);22.根據(jù)RealSSTable中的keyrange,得到一個新的keyrange,覆蓋上述所有RealSSTable的范圍;23.根據(jù)虛合并中RealSSTable的個數(shù)N,將新的keyrange分成N個,這N個key的范圍表示N個VirtualSSTable,其中文件大小統(tǒng)一設(shè)置成與RealSSTable大小一樣(默認為2MB),文件編號通過虛合并進程統(tǒng)一分配,數(shù)據(jù)源則是本次虛合并中所涉及到的所有RealSSTable。3.RealSSTable的讀取RealSSTable的讀取流程(與傳統(tǒng)基于LSM-Tree的鍵值系統(tǒng),例如LevelDB、RocksDB,相同):當key落在RealSSTable的keyrange中,則直接在其上查找key所對應的value值。4.VirtualSSTable的讀取VirtualSSTable的讀取流程:當key落在VirtualSSTable的keyrange中,則通過元數(shù)據(jù)信息找到VirtualSSTable相應的數(shù)據(jù)源,即RealSSTable,并在RealSSTable中查找key所對應的value值,具體流程如圖10所示。41.判斷需要查找的key是否落在VirtualSSTable的key范圍中;42.如果不在,則返回43.如果在,則通過VirtualSSTable的元數(shù)據(jù)找到其數(shù)據(jù)源,即RealSSTables;44.根據(jù)RealSSTable的索引進行查找key;45.如果找到,則返回key的value值;46.如果沒有找到,則進行下一個RealSSTable的查找,直至將該VirtualSSTable的數(shù)據(jù)源中所包含的RealSSTable都找一遍;47.如果還是沒有找到,則返回;5.VirtualSSTable的合并為了減少VirtualSSTable對讀性能的影響,在讀取過程中會對VirtualSSTable進行合并,將VirtualSSTable變成RealSSTable,從而提升讀性能。具體流程如圖11所示。51.獲取VirtualSSTable的數(shù)據(jù)源—RealSSTables;52.依次讀取各個RealSSTable的key/value;53.通過歸并排序,將符合條件的key/value順序?qū)懭氲焦潭ù笮〉腞ealSSTable中(默認為2MB)54.寫滿之后,重新創(chuàng)建一個新的RealSSTable,繼續(xù)將排好序的key/value寫入其中,直至寫完。實例1:合并操作(虛合并與實合并的結(jié)合)在本發(fā)明中當LSM-Tree的某一層達到閾值時,需要進行合并,則具體流程如下所示:a.選擇需要進行合并的SSTable;b.統(tǒng)計這些SSTable中包含RealSSTable的個數(shù),記為N;c.如果N超過閾值VCT,則進行實合并;d.N小于VCT,則進行虛合并;其中VCT是區(qū)分實合并和虛合并的參數(shù),不同VCT對于合并的影響是不同:VCT越小,實合并次數(shù)越多,從而導致I/O開銷較大;VCT越大,虛合并次數(shù)越多,雖然能夠節(jié)省I/O開銷,但是后續(xù)的實合并開銷較大,從而導致合并時間較長;圖12展示了在Write-100%負載下,不同的VCT對寫性能的影響,其中當VCT=12時,寫性能是最優(yōu)的,其主要原因在于兩個方面:節(jié)約的I/O量以及總的合并時間,具體如圖13所示,VCT=12能夠節(jié)約一定的I/O量,并且合并的時間最少,因此在本例中VCT=12是最優(yōu)的。實例2:Get操作(RealSSTable和VirtualSSTable的讀取、VirtualSSTable的合并)其基本流程如下所示:a.從LSM-Tree中由上往下找;b.對于每一層的SSTable,通過其上的元數(shù)據(jù)信息—keyrange,來定位SSTable;c.如果是RealSSTable,則直接進行查找;d.如果是VirtualSSTable,則通過VirtualSSTable的parentSST,找到其數(shù)據(jù)源之后,再進行查找;e.沒有找到,則繼續(xù)在本層或者下一層定位相應的SSTable進行查找,直到找到或者找完為止;本發(fā)明的Get操作還會涉及VirtualSSTable的合并,具體流程如下所示:a.當Get操作涉及到VirtualSSTable時,會判斷當前VirtualSSTable的兩個值:讀取該VirtualSSTable的累積次數(shù)(R)和該VirtualSSTable所包含的RealSSTable的個數(shù)(M)b.當R>RCT&&M>MCT時,則進行VirtualSSTable的合并,否則不合并;使用讀取該VirtualSSTable的累積次數(shù)和和該VirtualSSTable所包含的RealSSTable的個數(shù)來作為觸發(fā)VirtualSSTable合并的條件,主要原因在于:讀取累積次數(shù)從熱度角度考慮,熱度越高,virtualSSTable被頻繁讀,熱度越低,virtualSSTable很少被讀;VirtualSSTable所包含的RealSSTable個數(shù)越多,讀性能越差;反之,讀性能越好;因此當R和M同時滿足條件時,表明當前VirtualSSTable的熱度較高,且所包含的realSSTable個數(shù)超過了閾值范圍,會嚴重影響讀性能,需要進行合并。RCT的默認值采用5,而對于MCT的選取,圖14展示了不同MCT對于讀性能的影響。當MCT=3~5時,讀性能與RocksDB基本相同;當MCT=7~11時,讀性能較差,其主要原因在于沒有被合并的VirtualSSTable影響了讀性能;因此,MCT的選取需要考慮兩個因素:讀性能和合并帶來的開銷,綜合上述兩個因素,在本例中MCT=5較為合適,原因在于1)讀性能與RocksDB基本上相同;2)相比于MCT=3,能夠觸發(fā)較少的VirtualSSTable合并,節(jié)省資源。本發(fā)明還提出一種日志合并樹的合并系統(tǒng),包括:實合并模塊,包括數(shù)據(jù)合并與元數(shù)據(jù)合并,并生成RealSSTable,其中數(shù)據(jù)合并為將SSTable進行合并,元數(shù)據(jù)合并包括合并keyrange,filenumber,filesize信息;虛合并模塊,用于生成VirtualSSTable,并只對元數(shù)據(jù)進行合并,元數(shù)據(jù)進行合并包括合并keyrange,filenumber,filesize信息,并記錄所述VirtualSSTable的數(shù)據(jù)來源;RealSSTable的讀取模塊,用于對所述RealSSTable進行讀取,其中當key落在所述RealSSTable的keyrange中,則直接在所述RealSSTable上查找key所對應的value值;VirtualSSTable的讀取模塊,用于當key落在VirtualSSTable的keyrange中,則通過元數(shù)據(jù)信息查找所述VirtualSSTable與key相對應的數(shù)據(jù)來源,并在所述RealSSTable中查找key所對應的value值;VirtualSSTable的合并模塊,用于在讀取過程中對所述VirtualSSTable進行合并,將所述VirtualSSTable變成RealSSTable,從而提升讀性能。所述實合并模塊包括:11.依次讀取各個RealSSTable的key/value;12.通過歸并排序,將符合條件的key/value順序?qū)懭氲焦潭ù笮〉腞ealSSTable中;13.寫滿之后,重新創(chuàng)建一個新的RealSSTable,繼續(xù)將排好序的key/value寫入其中,直至寫完。所述虛合并模塊包括:21.收集RealSSTable的元數(shù)據(jù);22.根據(jù)RealSSTable中的keyrange,獲取新的keyrange,覆蓋所有RealSSTable的范圍;23.根據(jù)RealSSTable的個數(shù)N,將新的keyrange分成N個,表示N個VirtualSSTable,其中VirtualSSTable的文件大小設(shè)置成與RealSSTable的文件大小相同,VirtualSSTable的文件編號通過虛合并進程統(tǒng)一分配,數(shù)據(jù)源則為虛合并中所涉及到的所有RealSSTable。所述VirtualSSTable的讀取模塊包括41.判斷需要查找的key是否落在VirtualSSTable的key范圍中;42.如果不在,則返回43.如果在,則通過VirtualSSTable的元數(shù)據(jù)找到數(shù)據(jù)源,即RealSSTables;44.根據(jù)RealSSTable的索引進行查找key;45.如果找到,則返回key的value值;46.如果沒有找到,則進行下一個RealSSTable的查找,直至將VirtualSSTable的數(shù)據(jù)源中所包含的RealSSTable都查找一遍;47.如果還是沒有找到,則返回。所述VirtualSSTable的合并模塊包括51.獲取VirtualSSTable的數(shù)據(jù)源RealSSTables;52.依次讀取各個RealSSTable的key/value;53.通過歸并排序,將符合條件的key/value順序?qū)懭氲焦潭ù笮〉腞ealSSTable中;54.寫滿之后,重新創(chuàng)建一個新的RealSSTable,繼續(xù)將排好序的key/value寫入其中,直至寫完。當前第1頁1 2 3 當前第1頁1 2 3 
當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
韶关市| 凤冈县| 武隆县| 保定市| 新建县| 马边| 抚顺市| 古交市| 黎平县| 如皋市| 怀安县| 西丰县| 巨鹿县| 个旧市| 汝南县| 三河市| 偃师市| 乌拉特后旗| 滨海县| 甘德县| 油尖旺区| 鄢陵县| 新民市| 蒲城县| 靖安县| 刚察县| 建平县| 商城县| 江永县| 肃南| 元朗区| 景德镇市| 龙陵县| 尼木县| 永清县| 五大连池市| 长阳| 赣榆县| 平江县| 平山县| 洛扎县|