一種鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮方法及裝置制造方法【專利摘要】本發(fā)明公開一種鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮方法及裝置,屬于計(jì)算機(jī)【
技術(shù)領(lǐng)域:
】。所述方法包括:將數(shù)據(jù)節(jié)點(diǎn)的所有數(shù)據(jù)文件劃分為若干個(gè)數(shù)據(jù)層級(jí)進(jìn)行存儲(chǔ),其中,新增的數(shù)據(jù)文件存儲(chǔ)在最低的數(shù)據(jù)層級(jí);按照預(yù)定的合并周期對(duì)各數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件進(jìn)行合并壓縮,并將合并壓縮生成的數(shù)據(jù)文件從當(dāng)前數(shù)據(jù)層級(jí)搬移到上一層數(shù)據(jù)層級(jí),其中,所述合并壓縮為消除各數(shù)據(jù)文件中的重復(fù)數(shù)據(jù)塊。根據(jù)本發(fā)明,能夠在保證重復(fù)數(shù)據(jù)塊消重效果、提高存儲(chǔ)空間利用率的基礎(chǔ)上,降低對(duì)磁盤I/O資源的占用率。【專利說明】一種鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮方法及裝置【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及計(jì)算機(jī)【
技術(shù)領(lǐng)域:
】,具體涉及一種鍵-值(Key-Value)存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮方法及裝置。【
背景技術(shù):
】[0002]在很多大數(shù)據(jù)存儲(chǔ)系統(tǒng)中,數(shù)據(jù)塊(數(shù)據(jù)記錄)是以Key-Value對(duì)的方式存儲(chǔ),基于存儲(chǔ)與讀寫性能的考慮,在實(shí)現(xiàn)上都采用數(shù)據(jù)添加(Append)模式,即所有的寫操作都先將數(shù)據(jù)塊寫入內(nèi)存表(Memtable),當(dāng)Memtable達(dá)到一定大小時(shí),再將Memtable中的數(shù)據(jù)塊排序?qū)懭?Dump)到磁盤上的有序字符串表(SSTable)文件中。后續(xù)通過合并壓縮(Compaction)機(jī)制將全部或部分SSTable文件合并形成新的SSTable文件,從而達(dá)到降低數(shù)據(jù)文件個(gè)數(shù)以提高訪問性能、去除重復(fù)數(shù)據(jù)以節(jié)省磁盤空間的目的。[0003]Cassandra系統(tǒng)也采用了類似的設(shè)計(jì)方式。Cassandra數(shù)據(jù)存儲(chǔ)空間可以抽象為一個(gè)環(huán)形結(jié)構(gòu),數(shù)據(jù)塊就是通過哈希(hash)分散在這個(gè)環(huán)形存儲(chǔ)空間上。每個(gè)數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)管理這個(gè)環(huán)形存儲(chǔ)空間上的某一塊連續(xù)的范圍(也叫Range),落在此Range空間上的數(shù)據(jù)塊就存儲(chǔ)在這個(gè)數(shù)據(jù)節(jié)點(diǎn)上。[0004]SSTable是Cassandra系統(tǒng)中數(shù)據(jù)處理和交換的文件存儲(chǔ)格式。SSTable是存儲(chǔ)一組任意有序Key-Value對(duì)的數(shù)據(jù)文件。SSTable—旦完成寫入,就不可更改,只能讀取。在Cassandra系統(tǒng)中,Compaction分為MinorCompaction(部分合并壓縮)和MajorCompaction(全部合并壓縮)。MajorCompaction指的是全部數(shù)據(jù)文件都參與Compaction操作,但是隨著寫入的數(shù)據(jù)塊越來越多,磁盤剩余空間不足,MajorCompaction無法實(shí)施,這樣,每次Compaction只能有部分?jǐn)?shù)據(jù)文件參與,也就是只能做MinorCompaction。而在大量的MinorCompaction下,如何保證既能盡量去除重復(fù)的數(shù)據(jù)塊,又能避免數(shù)據(jù)文件重復(fù)參與Compation而浪費(fèi)磁盤輸入/輸出(I/0)資源,是眾多Compaction策略需要解決的問題。[0005]現(xiàn)有的一種技術(shù)方案為TieredCompaction(階梯合并壓縮),其實(shí)現(xiàn)原理為:[0006](I)首先將SSTable文件按照大小范圍劃分為若干級(jí)別;[0007](2)當(dāng)Memtable刷新到磁盤SSTable文件中時(shí),從文件較小的SSTable級(jí)別開始,逐級(jí)檢查SSTable個(gè)數(shù),發(fā)現(xiàn)數(shù)目超過4個(gè)就將其做一次Compaction,生成一個(gè)新的SSTable文件[0008](3)直到各級(jí)別的SSTable文件都少于4個(gè)為止,這樣,通過對(duì)每次4個(gè)SStable進(jìn)行合并壓縮,達(dá)到局部減小存儲(chǔ)空間的目的。[0009]上述技術(shù)方案的缺點(diǎn)在于:[0010](I)對(duì)磁盤I/0性能有影響。由于一條記錄的多個(gè)版本可能存在于多個(gè)SSTable文件中,最差的情況下可能某一條記錄會(huì)存在于所有SSTable文件中,因此一條記錄所在的SSTable文件可能多次重復(fù)參與Compaction才能將數(shù)據(jù)消除,并且參與次數(shù)無法確定,無形中浪費(fèi)了I/0資源,間接也影響了讀寫性能。[0011](2)在存儲(chǔ)空間上浪費(fèi)嚴(yán)重。因?yàn)橐粋€(gè)被刪除記錄的老版本可能會(huì)一直存在于一些老的SSTable文件中,直到這個(gè)老的SSTable文件參與Compaction才可能消除掉;或者只有進(jìn)行一次MajorCompaction才可以消除。由于TieredCompaction是按照SSTable文件大小進(jìn)行級(jí)別劃分進(jìn)而分級(jí)做MinorCompaction,這樣往往導(dǎo)致刪除操作較多(SSTable文件較小)的SSTable文件和插入操作過多(SSTable文件較大)的SSTable文件分在不同的級(jí)別中,因而對(duì)于一個(gè)經(jīng)常有刪除操作的應(yīng)用來說會(huì)造成空間的極大浪費(fèi)。[0012]現(xiàn)有的另一種技術(shù)方案為LeveledCompaction(層級(jí)合并壓縮),這種Compaction機(jī)制借鑒自LevelDB。如圖1所示,LeveledCompaction方式將數(shù)據(jù)分成金字塔形的若干個(gè)層級(jí)(Level),最底層的叫LevelO,其上分別是Levell、Level2和Level3。新寫入的SSTable文件存放在LevelO,其余Level上的文件為Compaction生成的文件,因此在本Level(除了LevelO之外)內(nèi)是全局有序的。同時(shí),每個(gè)Level上的SSTable文件按照固定大小切分,因此文件大小是固定的。當(dāng)LevelO生成一個(gè)SSTable文件后,會(huì)和Levell上所有與其有交集的SSTable文件進(jìn)行一次合并,生成若干有序的SSTable文件存放在Levell上,然后Levell上的SSTable文件會(huì)和Level2上所有與其有交集的SSTable文件進(jìn)行一次合并,依次類推,運(yùn)行到Level3后周而復(fù)始。[0013]上述技術(shù)方案的缺點(diǎn)在于會(huì)造成磁盤I/0負(fù)載嚴(yán)重。由于數(shù)據(jù)塊的寫入都是完全隨機(jī)的,因此一個(gè)Memtable寫入到LevelO的SSTable文件中時(shí),這個(gè)SStale文件上的存儲(chǔ)的數(shù)據(jù)塊范圍是分散在整個(gè)邏輯存儲(chǔ)空間的,每一個(gè)SSTable文件和Levell所有的SStable文件都有交集。因此每一次LevelO的SSTable文件Compaction,Levell的所有SSTable文件都要全部重復(fù)參與,這造成了磁盤I/0負(fù)載過大,I/0浪費(fèi)比較嚴(yán)重?!?br/>發(fā)明內(nèi)容】[0014]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮方法及裝置。[0015]根據(jù)本發(fā)明的一個(gè)方面,提供了一種鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮方法,包括:[0016]將數(shù)據(jù)節(jié)點(diǎn)的所有數(shù)據(jù)文件劃分為若干個(gè)數(shù)據(jù)層級(jí)進(jìn)行存儲(chǔ),其中,新增的數(shù)據(jù)文件存儲(chǔ)在最低的數(shù)據(jù)層級(jí);[0017]按照預(yù)定的合并周期對(duì)各數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件進(jìn)行合并壓縮,并將合并壓縮生成的數(shù)據(jù)文件從當(dāng)前數(shù)據(jù)層級(jí)搬移到上一層數(shù)據(jù)層級(jí),其中,所述合并壓縮為消除各數(shù)據(jù)文件中的重復(fù)數(shù)據(jù)塊。[0018]可選地,所述合并壓縮方法還包括:對(duì)于除了最低的數(shù)據(jù)層級(jí)之外的其他所有數(shù)據(jù)層級(jí),將各數(shù)據(jù)層級(jí)的存儲(chǔ)空間劃分為若干個(gè)存儲(chǔ)范圍;[0019]所述將合并壓縮生成的數(shù)據(jù)文件從當(dāng)前數(shù)據(jù)層級(jí)搬移到上一層數(shù)據(jù)層級(jí)為:將合并壓縮生成的數(shù)據(jù)文件存儲(chǔ)到上一層數(shù)據(jù)層級(jí)中與該數(shù)據(jù)文件對(duì)應(yīng)的存儲(chǔ)范圍中。[0020]可選地,所述對(duì)各數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件進(jìn)行合并壓縮為:依次對(duì)數(shù)據(jù)層級(jí)中各存儲(chǔ)范圍中的數(shù)據(jù)文件進(jìn)行合并壓縮。[0021]可選地,任一數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期小于上一層數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期。[0022]可選地,所述合并壓縮方法還包括:控制任一數(shù)據(jù)層級(jí)的合并壓縮速度小于下一層數(shù)據(jù)層級(jí)的合并壓縮速度。[0023]根據(jù)本發(fā)明的另一個(gè)方面,提供了一種鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮裝置,包括:[0024]層級(jí)劃分器,適于將數(shù)據(jù)節(jié)點(diǎn)的所有數(shù)據(jù)文件劃分為若干個(gè)數(shù)據(jù)層級(jí)進(jìn)行存儲(chǔ),其中,新增的數(shù)據(jù)文件存儲(chǔ)在最低的數(shù)據(jù)層級(jí);[0025]合并壓縮器,適于按照預(yù)定的合并周期對(duì)各數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件進(jìn)行合并壓縮,并將合并壓縮生成的數(shù)據(jù)文件從當(dāng)前數(shù)據(jù)層級(jí)搬移到上一層數(shù)據(jù)層級(jí),其中,所述合并壓縮為消除各數(shù)據(jù)文件中的重復(fù)數(shù)據(jù)塊。[0026]可選地,所述合并壓縮裝置還包括:[0027]存儲(chǔ)范圍劃分器,適于對(duì)于除了最低的數(shù)據(jù)層級(jí)之外的其他所有數(shù)據(jù)層級(jí),將各數(shù)據(jù)層級(jí)的存儲(chǔ)空間劃分為若干個(gè)存儲(chǔ)范圍;[0028]所述合并壓縮器進(jìn)一步適于:將合并壓縮生成的數(shù)據(jù)文件存儲(chǔ)到上一層數(shù)據(jù)層級(jí)中與該數(shù)據(jù)文件對(duì)應(yīng)的存儲(chǔ)范圍中。[0029]可選地,所述合并壓縮器進(jìn)一步適于:依次對(duì)數(shù)據(jù)層級(jí)中各存儲(chǔ)范圍中的數(shù)據(jù)文件進(jìn)行合并壓縮。[0030]可選地,任一數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期小于上一層數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期。[0031]可選地,所述合并壓縮裝置還包括:[0032]限速器,適于控制任一數(shù)據(jù)層級(jí)的合并壓縮速度小于下一層數(shù)據(jù)層級(jí)的合并壓縮速度。[0033]根據(jù)本發(fā)明上述的一個(gè)或多個(gè)技術(shù)方案,通過對(duì)數(shù)據(jù)文件進(jìn)行分層級(jí)和分階段進(jìn)行壓縮合并,能夠消除各數(shù)據(jù)文件中的重復(fù)數(shù)據(jù)塊,從而保證重復(fù)數(shù)據(jù)塊的消重效果。由于每次對(duì)數(shù)據(jù)文件進(jìn)行合并壓縮都是在當(dāng)前數(shù)據(jù)層級(jí)內(nèi)部進(jìn)行,不存在跨數(shù)據(jù)層級(jí)做合并壓縮的情況,這樣,參與合并壓縮的數(shù)據(jù)量較小,一方面對(duì)磁盤剩余空間要求較低,提高了存儲(chǔ)空間的利用率,另一方面避免了對(duì)磁盤I/0資源的占用過大。[0034]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】?!緦@綀D】【附圖說明】[0035]通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:[0036]圖1示出了現(xiàn)有技術(shù)的基于層級(jí)的合并壓縮方法示意圖;[0037]圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)丈件的合并壓縮方法流程圖;[0038]圖3示出了本發(fā)明一個(gè)應(yīng)用實(shí)例的基于層級(jí)的合并壓縮方法示意圖;[0039]圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮裝置結(jié)構(gòu)圖?!揪唧w實(shí)施方式】[0040]下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。[0041]圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮方法流程圖。所述合并壓縮方法可以應(yīng)用于鍵-值存儲(chǔ)系統(tǒng)例如Cassandra系統(tǒng)的數(shù)據(jù)節(jié)點(diǎn)中,所述數(shù)據(jù)文件可以是SSTable文件。參照圖2,所述合并壓縮方法可以包括:[0042]步驟202,將數(shù)據(jù)節(jié)點(diǎn)的所有數(shù)據(jù)文件劃分為若干個(gè)數(shù)據(jù)層級(jí)進(jìn)行存儲(chǔ),其中,新增的數(shù)據(jù)文件存儲(chǔ)在最低的數(shù)據(jù)層級(jí);[0043]所劃分的數(shù)據(jù)層級(jí)的數(shù)量可以根據(jù)實(shí)際需要(例如數(shù)據(jù)節(jié)點(diǎn)中存儲(chǔ)的數(shù)據(jù)量大小)進(jìn)行設(shè)置,例如,將所有數(shù)據(jù)文件劃分為4個(gè)數(shù)據(jù)層級(jí),即所有數(shù)據(jù)文件是分布在4個(gè)數(shù)據(jù)層級(jí)中進(jìn)行存儲(chǔ)。在Key-Value存儲(chǔ)系統(tǒng)中,所有的寫操作都是先將數(shù)據(jù)塊(數(shù)據(jù)記錄)寫入Memtable,當(dāng)Memtable達(dá)到一定大小時(shí),再將Memtable中的數(shù)據(jù)塊按照Key排序?qū)懭氲酱疟P上的SSTable文件中。新寫入到磁盤上的SSTable文件即新增的數(shù)據(jù)文件是存儲(chǔ)在所述若干個(gè)數(shù)據(jù)層級(jí)的最底層,其他數(shù)據(jù)層級(jí)存儲(chǔ)的則是該數(shù)據(jù)層級(jí)的下一層數(shù)據(jù)層級(jí)合并壓縮生成的數(shù)據(jù)文件。[0044]步驟204,按照預(yù)定的合并周期對(duì)各數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件進(jìn)行合并壓縮,并將合并壓縮生成的數(shù)據(jù)文件從當(dāng)前數(shù)據(jù)層級(jí)搬移到上一層數(shù)據(jù)層級(jí),其中,所述合并壓縮為消除各數(shù)據(jù)文件中的重復(fù)數(shù)據(jù)塊。[0045]每個(gè)數(shù)據(jù)層級(jí)對(duì)應(yīng)一個(gè)合并周期,各合并周期可以相同,也可以不相同,具體可以根據(jù)實(shí)際需要進(jìn)行設(shè)置(請參見后文)。當(dāng)最底層(LevelO)對(duì)應(yīng)的合并周期到達(dá)時(shí),對(duì)該數(shù)據(jù)層級(jí)中的所有數(shù)據(jù)文件進(jìn)行合并壓縮。如前所述,由于數(shù)據(jù)節(jié)點(diǎn)中數(shù)據(jù)塊的寫入是完全隨機(jī)的,因此將一個(gè)Memtable中的數(shù)據(jù)塊排序?qū)懭氲酱疟P中成為LevelO的SSTable文件時(shí),這個(gè)SSTable文件上的存儲(chǔ)的數(shù)據(jù)范圍是分散在整個(gè)邏輯存儲(chǔ)空間的,因此LevelO中每一個(gè)SSTable文件和該層的其他所有SSTable文件都有交集,通過合并壓縮能夠消除這些SSTable文件中的重復(fù)數(shù)據(jù)塊。LevelO的合并壓縮結(jié)束后,將合并壓縮得到的SSTable文件搬移到LevelO的上一層即Levell層。[0046]Levell層中的SSTable文件有可能是在LevelO層在不同的合并周期中壓縮合并得到的,因此,這些SSTable文件中仍然有可能存儲(chǔ)有數(shù)據(jù)塊的不同版本,即這些SStable文件相互之間有交集。當(dāng)Levell層對(duì)應(yīng)的合并周期到達(dá)時(shí),進(jìn)行一次合并壓縮,通過合并壓縮來消除這些SSTable文件中的重復(fù)數(shù)據(jù)塊,并將合并壓縮得到的SSTable文件搬移到Levell的上一層即Level2層。依次類推,直到最高的數(shù)據(jù)層級(jí)完成合并壓縮操作。其中,最高的數(shù)據(jù)層級(jí)對(duì)數(shù)據(jù)文件進(jìn)行合并壓縮操作的結(jié)果仍然存儲(chǔ)在該最高的數(shù)據(jù)層級(jí)中。[0047]可以看出,根據(jù)本發(fā)明實(shí)施例的上述合并壓縮方法,通過對(duì)數(shù)據(jù)文件進(jìn)行分層級(jí)和分階段進(jìn)行壓縮合并,能夠消除各數(shù)據(jù)文件中的重復(fù)數(shù)據(jù)塊,從而保證重復(fù)數(shù)據(jù)塊的消重效果。由于每次對(duì)數(shù)據(jù)文件進(jìn)行合并壓縮都是在當(dāng)前數(shù)據(jù)層級(jí)內(nèi)部進(jìn)行,不存在跨數(shù)據(jù)層級(jí)做合并壓縮的情況,這樣,參與合并壓縮的數(shù)據(jù)量較小,一方面對(duì)磁盤剩余空間要求較低,提高了存儲(chǔ)空間的利用率,另一方面避免了對(duì)磁盤I/0資源的占用過大。[0048]為進(jìn)一步降低進(jìn)行數(shù)據(jù)文件合并壓縮時(shí)對(duì)磁盤I/0資源的占用,在本發(fā)明實(shí)施例的一種實(shí)現(xiàn)方式中,所述合并壓縮方法還包括:對(duì)于除了最低的數(shù)據(jù)層級(jí)之外的其他所有數(shù)據(jù)層級(jí),將各數(shù)據(jù)層級(jí)的存儲(chǔ)空間劃分為若干個(gè)存儲(chǔ)范圍,其中,各存儲(chǔ)范圍的大小可以相同,也可以不同。相應(yīng)地,在步驟204中,所述將合并壓縮生成的數(shù)據(jù)文件從當(dāng)前數(shù)據(jù)層級(jí)搬移到上一層數(shù)據(jù)層級(jí)為:將合并壓縮生成的數(shù)據(jù)文件存儲(chǔ)到上一層數(shù)據(jù)層級(jí)中與該數(shù)據(jù)文件對(duì)應(yīng)的存儲(chǔ)范圍中。之后,對(duì)該上一層數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件進(jìn)行合并壓縮則為:依次對(duì)該數(shù)據(jù)層級(jí)中各存儲(chǔ)范圍中的數(shù)據(jù)文件進(jìn)行合并壓縮。[0049]如前所述,最低數(shù)據(jù)層級(jí)中數(shù)據(jù)文件來自于Memtable,每個(gè)數(shù)據(jù)文件存儲(chǔ)的數(shù)據(jù)范圍是分散在整個(gè)邏輯存儲(chǔ)空間的,因此對(duì)該數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件不需要進(jìn)行存儲(chǔ)范圍的劃分。而其他數(shù)據(jù)層級(jí)的數(shù)據(jù)文件是來自于下一層數(shù)據(jù)層級(jí)中數(shù)據(jù)文件的合并壓縮,每個(gè)數(shù)據(jù)文件的數(shù)據(jù)范圍對(duì)應(yīng)于邏輯存儲(chǔ)空間的一段有限存儲(chǔ)范圍,因此可以按照存儲(chǔ)范圍進(jìn)行存儲(chǔ)。上述實(shí)現(xiàn)方式相當(dāng)于對(duì)數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件分批次進(jìn)行合并壓縮,這進(jìn)一步降低參與合并壓縮的數(shù)據(jù)量,從而進(jìn)一步降低了對(duì)磁盤I/0資源的占用。[0050]需要說的是,如果合并壓縮生成的數(shù)據(jù)文件跨兩個(gè)或多個(gè)存儲(chǔ)范圍,則在進(jìn)行存儲(chǔ)前,還可以將其分割成兩個(gè)或多個(gè)數(shù)據(jù)文件,并將分割得到的數(shù)據(jù)文件分別存儲(chǔ)到與其對(duì)應(yīng)的存儲(chǔ)范圍中。[0051]另外,各數(shù)據(jù)層級(jí)劃分的存儲(chǔ)范圍的數(shù)目可以根據(jù)需要進(jìn)行設(shè)置。例如,對(duì)于越高的數(shù)據(jù)層級(jí),其對(duì)應(yīng)的存儲(chǔ)范圍的數(shù)目越小。又例如,各數(shù)據(jù)層級(jí)劃分的存儲(chǔ)范圍的數(shù)目可以相同。[0052]如前所述,每個(gè)數(shù)據(jù)層級(jí)對(duì)應(yīng)一個(gè)合并周期,各合并周期可以相同,也可以不相同。由于數(shù)據(jù)層級(jí)越高,其對(duì)應(yīng)的數(shù)據(jù)文件也相對(duì)越有序,其包含的重復(fù)的數(shù)據(jù)塊數(shù)目也相對(duì)越少。因此,在一種實(shí)現(xiàn)方式中,任一數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期小于上一層數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期,即越高的數(shù)據(jù)層級(jí),其對(duì)應(yīng)的合并周期越大。這樣,能夠兼顧每次讀數(shù)據(jù)塊時(shí)打開盡量少的數(shù)據(jù)文件的需求,和降低由于數(shù)據(jù)文件的合并壓縮對(duì)磁盤I/0資源的占用的需求?;陬愃频睦碛?,還可以控制任一數(shù)據(jù)層級(jí)的合并壓縮速度小于下一層數(shù)據(jù)層級(jí)的合并壓縮速度,即越低的數(shù)據(jù)層級(jí)`,其對(duì)應(yīng)的合并壓縮速度越快。[0053]以下給出本發(fā)明實(shí)施例的一個(gè)應(yīng)用實(shí)例。參照圖3,該應(yīng)用實(shí)例的實(shí)現(xiàn)原理為:[0054](I)所有SSTable文件被劃分為4個(gè)數(shù)據(jù)層級(jí),從下到上依次為LevelO、LevelULevel2和Level3,所有新寫入的數(shù)據(jù)塊形成的新增SSTable文件都放在最低層LevelO。[0055](2)每一層級(jí)做完合并壓縮(Compaction)生成的新的SSTable文件都提升一個(gè)層級(jí),如LevelO做Compaction生成的SSTable文件升至Levell,依此類推,頂層Level3的Compaction做完后,生成的新的SSTable文件仍然存放在Level3中。特別地,與圖1所示的方案的一個(gè)不同在于,在任何時(shí)刻不存在跨層級(jí)做Compaction的情況。[0056](3)LevelO每天執(zhí)行Compaction—次,Level每周執(zhí)行Compaction—次,Level2每兩周執(zhí)行Compaction—次,Level3每四周執(zhí)行Compaction—次。[0057](4)LevelI~Level3每個(gè)層級(jí)都將存儲(chǔ)空間平均化分為n個(gè)等大小的存儲(chǔ)范圍(Range),分別為RangeO、Rangel、?..、Range_n。Levell~Level3中任何一個(gè)SSTable文件都是Compaction生成的有序文件并按照Range邊界切分。因此任何一個(gè)SSTable文件都不會(huì)跨Range而存在。在執(zhí)行該Level的Compaction時(shí),以Range為粒度,依次合并。[0058]具體執(zhí)行流程如下:[0059](I)首先做LevelO的Compaction,LevelO存放的是一段時(shí)間新增數(shù)據(jù),每次Compaction都是MajorCompaction(該層的所有數(shù)據(jù)文件),每天執(zhí)行此Compaction—次。[0060](2)從Levell開始依次檢查是否到達(dá)了該Level對(duì)應(yīng)的Compaction的執(zhí)行時(shí)間點(diǎn),如果到達(dá)時(shí)間點(diǎn)則執(zhí)行相應(yīng)的Compaction。Levell至Level3的Compaction的時(shí)間間隔分別為一周、兩周、四周。在對(duì)任何一個(gè)Level進(jìn)行Compaction時(shí),會(huì)按照Range范圍提交,即每次做一個(gè)Range內(nèi)的所有SSTable文件的Compaction。[0061](3)分別對(duì)每個(gè)Level的Compaction做不同的速度的限制,Level越高限速越低,優(yōu)先保證每天新增LevelO數(shù)據(jù)的Compaction。[0062]以下結(jié)合上述應(yīng)用實(shí)例對(duì)本發(fā)明實(shí)施例的有益效果進(jìn)行詳細(xì)分析。[0063]首先,從存儲(chǔ)空間利用率角度上講,上述技術(shù)方案能夠保證即使在數(shù)據(jù)塊頻繁的重復(fù)插入情況下,在4個(gè)數(shù)據(jù)層級(jí)中也只存在極少個(gè)重復(fù)副本(由于LevelO每天一次合并,Levell每周一次合并,Level2每兩周一次合并,Level3每四周一次合并,因此在最差的情況下,Levell中的重復(fù)數(shù)據(jù)最多只存在7個(gè)副本,Level2/Level3最多存在2個(gè)副本)。而且這種最差情況只會(huì)持續(xù)很短的時(shí)間,因?yàn)檫@種情況出現(xiàn)時(shí)即已達(dá)到該Level執(zhí)行Compaction的時(shí)間點(diǎn)條件,從而執(zhí)行Compaction完成該Level的消重。(假設(shè)在最差的情況下,同一數(shù)據(jù)每天都會(huì)重復(fù)插入,這樣在每天完成了LevelO的Compaction后,Levell就會(huì)新增一份重復(fù)數(shù)據(jù),當(dāng)Levell的重復(fù)數(shù)據(jù)一旦達(dá)到7個(gè),也就意味著Levell執(zhí)行Compaction的時(shí)間點(diǎn)已到。同理,其他Level—旦出現(xiàn)2個(gè)重復(fù)數(shù)據(jù)即到達(dá)該Level的Compaction時(shí)間點(diǎn))。同時(shí),每次參與Compaction的數(shù)據(jù)都是其中一個(gè)Range中的SSTable集合,參與數(shù)據(jù)量較小,對(duì)磁盤剩余空間要求較低,額外開銷較小,因此大大減少了磁盤空間的浪費(fèi),提聞了存儲(chǔ)空間的利用率。[0064]其次,從磁盤I/0利用效率上講,由于每天的Compaction只需要將當(dāng)天新增的LevelO的數(shù)據(jù)讀寫一遍即可,而每天的新增的LevelO的數(shù)據(jù)量又是有限的,遠(yuǎn)遠(yuǎn)小于Levell中的數(shù)據(jù)總量,因此和現(xiàn)有技術(shù)方案比,每天LevelO的Compaction過程中I/0負(fù)載大幅降低,對(duì)正常在線訪問性能影響較小。同時(shí)其他Level的Compaction的執(zhí)行頻度又大幅降低,從而避免了磁盤I/0資源的浪費(fèi),提升了磁盤I/0利用效率。[0065]圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮裝置結(jié)構(gòu)圖。所述合并壓縮裝置可以應(yīng)用于鍵-值存儲(chǔ)系統(tǒng)例如Cassandra系統(tǒng)的數(shù)據(jù)節(jié)點(diǎn)中,所述數(shù)據(jù)文件可以是SSTable文件。參照圖4,所述合并壓縮裝置可以包括層級(jí)劃分器42和合并壓縮器44,其中:[0066]層級(jí)劃分器42適于將數(shù)據(jù)節(jié)點(diǎn)的所有數(shù)據(jù)文件劃分為若干個(gè)數(shù)據(jù)層級(jí)進(jìn)行存儲(chǔ),其中,新增的數(shù)據(jù)文件存儲(chǔ)在最低的數(shù)據(jù)層級(jí)。所劃分的數(shù)據(jù)層級(jí)的數(shù)量可以根據(jù)實(shí)際需要(例如數(shù)據(jù)節(jié)點(diǎn)中存儲(chǔ)的數(shù)據(jù)量大小)進(jìn)行設(shè)置。在Key-Value存儲(chǔ)系統(tǒng)中,所有的寫操作都是先將數(shù)據(jù)塊(數(shù)據(jù)記錄)寫入Memtable,當(dāng)Memtable達(dá)到一定大小時(shí),再將Memtable中的數(shù)據(jù)塊按照Key排序?qū)懭氲酱疟P上的SSTable文件中。新寫入到磁盤上的SSTable文件即新增的數(shù)據(jù)文件是存儲(chǔ)在所述若干個(gè)數(shù)據(jù)層級(jí)的最底層,其他數(shù)據(jù)層級(jí)存儲(chǔ)的則是上一層數(shù)據(jù)層級(jí)合并壓縮生成的數(shù)據(jù)文件。[0067]合并壓縮器44適于按照預(yù)定的合并周期對(duì)各數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件進(jìn)行合并壓縮,并將合并壓縮生成的數(shù)據(jù)文件從當(dāng)前數(shù)據(jù)層級(jí)搬移到上一層數(shù)據(jù)層級(jí),其中,所述合并壓縮為消除各數(shù)據(jù)文件中的重復(fù)數(shù)據(jù)塊。[0068]可以看出,根據(jù)本發(fā)明實(shí)施例的上述合并壓縮裝置,通過對(duì)數(shù)據(jù)文件進(jìn)行分層級(jí)和分階段進(jìn)行壓縮合并,能夠消除各數(shù)據(jù)文件中的重復(fù)數(shù)據(jù)塊,從而保證重復(fù)數(shù)據(jù)塊的消重效果。由于每次對(duì)數(shù)據(jù)文件進(jìn)行合并壓縮都是在當(dāng)前數(shù)據(jù)層級(jí)內(nèi)部進(jìn)行,不存在跨數(shù)據(jù)層級(jí)做合并壓縮的情況,這樣,參與合并壓縮的數(shù)據(jù)量較小,一方面對(duì)磁盤剩余空間要求較低,提高了存儲(chǔ)空間的利用率,另一方面避免了對(duì)磁盤I/0資源的占用過大。[0069]為進(jìn)一步降低進(jìn)行數(shù)據(jù)文件合并壓縮時(shí)對(duì)磁盤I/0資源的占用,在本發(fā)明實(shí)施例的一種實(shí)現(xiàn)方式中,所述合并壓縮裝置還包括存儲(chǔ)范圍劃分器(圖未示),適于對(duì)于除了最低的數(shù)據(jù)層級(jí)之外的其他所有數(shù)據(jù)層級(jí),將各數(shù)據(jù)層級(jí)的存儲(chǔ)空間劃分為若干個(gè)存儲(chǔ)范圍。相應(yīng)地,所述合并壓縮器44進(jìn)一步適于:將合并壓縮生成的數(shù)據(jù)文件存儲(chǔ)到上一層數(shù)據(jù)層級(jí)中與該數(shù)據(jù)文件對(duì)應(yīng)的存儲(chǔ)范圍中,以及,依次對(duì)數(shù)據(jù)層級(jí)中各存儲(chǔ)范圍中的數(shù)據(jù)文件進(jìn)行合并壓縮。[0070]合并壓縮器44在數(shù)據(jù)文件的合并壓縮時(shí),每個(gè)數(shù)據(jù)層級(jí)對(duì)應(yīng)一個(gè)合并周期,各合并周期可以相同,也可以不相同。由于數(shù)據(jù)層級(jí)越高,其對(duì)應(yīng)的數(shù)據(jù)文件也相對(duì)越有序,其包含的重復(fù)的數(shù)據(jù)塊數(shù)目也相對(duì)越少。因此,在一種實(shí)現(xiàn)方式中,任一數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期小于上一層數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期,即越高的數(shù)據(jù)層級(jí),其對(duì)應(yīng)的合并周期越大。這樣,能夠兼顧每次讀數(shù)據(jù)塊時(shí)打開盡量少的數(shù)據(jù)文件的需求,和降低由于數(shù)據(jù)丈件的合并壓縮對(duì)磁盤I/0資源的占用的需求。基于類似的理由,本發(fā)明實(shí)施例的數(shù)據(jù)合并裝置還可以包括限速器(圖未示),適于控制任一數(shù)據(jù)層級(jí)的合并壓縮速度小于下一層數(shù)據(jù)層級(jí)的合并壓縮速度,即越低的數(shù)據(jù)層級(jí),其對(duì)應(yīng)的合并壓縮速度越快。[0071]對(duì)于上述裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。[0072]在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。[0073]在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。[0074]類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循【具體實(shí)施方式】的權(quán)利要求書由此明確地并入該【具體實(shí)施方式】,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。[0075]本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。[0076]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。[0077]本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的合并壓縮裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。[0078]應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱?!緳?quán)利要求】1.一種鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮方法,包括:將數(shù)據(jù)節(jié)點(diǎn)的所有數(shù)據(jù)文件劃分為若干個(gè)數(shù)據(jù)層級(jí)進(jìn)行存儲(chǔ),其中,新增的數(shù)據(jù)文件存儲(chǔ)在最低的數(shù)據(jù)層級(jí);按照預(yù)定的合并周期對(duì)各數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件進(jìn)行合并壓縮,并將合并壓縮生成的數(shù)據(jù)文件從當(dāng)前數(shù)據(jù)層級(jí)搬移到上一層數(shù)據(jù)層級(jí),其中,所述合并壓縮為消除各數(shù)據(jù)文件中的重復(fù)數(shù)據(jù)塊。2.如權(quán)利要求1所述的合并壓縮方法,其中,還包括:對(duì)于除了最低的數(shù)據(jù)層級(jí)之外的其他所有數(shù)據(jù)層級(jí),將各數(shù)據(jù)層級(jí)的存儲(chǔ)空間劃分為若干個(gè)存儲(chǔ)范圍;所述將合并壓縮生成的數(shù)據(jù)文件從當(dāng)前數(shù)據(jù)層級(jí)搬移到上一層數(shù)據(jù)層級(jí)為:將合并壓縮生成的數(shù)據(jù)文件存儲(chǔ)到上一層數(shù)據(jù)層級(jí)中與該數(shù)據(jù)文件對(duì)應(yīng)的存儲(chǔ)范圍中。3.如權(quán)利要求2所述的合并壓縮方法,其中,所述對(duì)各數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件進(jìn)行合并壓縮為:依次對(duì)數(shù)據(jù)層級(jí)中各存儲(chǔ)范圍中的數(shù)據(jù)文件進(jìn)行合并壓縮。4.如權(quán)利要求1、2或3所述的合并壓縮方法,其中:任一數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期小于上一層數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期。5.如權(quán)利要求4所述的合并壓縮方法,其中,還包括:控制任一數(shù)據(jù)層級(jí)的合并壓縮速度小于下一層數(shù)據(jù)層級(jí)的合并壓縮速度。6.一種鍵-值存儲(chǔ)系統(tǒng)中數(shù)據(jù)文件的合并壓縮裝置,包括:層級(jí)劃分器,適于將數(shù)據(jù)節(jié)點(diǎn)的所有數(shù)據(jù)文件劃分為若干個(gè)數(shù)據(jù)層級(jí)進(jìn)行存儲(chǔ),其中,新增的數(shù)據(jù)文件存儲(chǔ)在最低的數(shù)據(jù)層級(jí);合并壓縮器,適于按照預(yù)定的合并周期對(duì)各數(shù)據(jù)層級(jí)中的數(shù)據(jù)文件進(jìn)行合并壓縮,并將合并壓縮生成的數(shù)據(jù)文件從當(dāng)前數(shù)據(jù)層級(jí)搬移到上一層數(shù)據(jù)層級(jí),其中,所述合并壓縮為消除各數(shù)據(jù)文件中的重復(fù)數(shù)據(jù)塊。7.如權(quán)利要求6所述的合并壓縮裝置,其中,還包括:存儲(chǔ)范圍劃分器,適于對(duì)于除了最低的數(shù)據(jù)層級(jí)之外的其他所有數(shù)據(jù)層級(jí),將各數(shù)據(jù)層級(jí)的存儲(chǔ)空間劃分為若干個(gè)存儲(chǔ)范圍;所述合并壓縮器進(jìn)一步適于:將合并壓縮生成的數(shù)據(jù)文件存儲(chǔ)到上一層數(shù)據(jù)層級(jí)中與該數(shù)據(jù)文件對(duì)應(yīng)的存儲(chǔ)范圍中。8.如權(quán)利要求7所述的合并壓縮裝置,其中,所述合并壓縮器進(jìn)一步適于:依次對(duì)數(shù)據(jù)層級(jí)中各存儲(chǔ)范圍中的數(shù)據(jù)文件進(jìn)行合并壓縮。9.如權(quán)利要求6、7或8所述的合并壓縮裝置,其中:任一數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期小于上一層數(shù)據(jù)層級(jí)對(duì)應(yīng)的合并周期。10.如權(quán)利要求9所述的合并壓縮裝置,其中,還包括:限速器,適于控制任一數(shù)據(jù)層級(jí)的合并壓縮速度小于下一層數(shù)據(jù)層級(jí)的合并壓縮速度?!疚臋n編號(hào)】G06F3/06GK103744617SQ201310711265【公開日】2014年4月23日申請日期:2013年12月20日優(yōu)先權(quán)日:2013年12月20日【發(fā)明者】王鋒申請人:北京奇虎科技有限公司,奇智軟件(北京)有限公司