Lsm數(shù)據(jù)合并排序方法和裝置的制造方法
【技術領域】
[0001]本發(fā)明實施例涉及計算機技術,尤其涉及一種日志結構合并(Log StructuredMerge,以下簡稱:LSM)數(shù)據(jù)合并排序方法和裝置。
【背景技術】
[0002]LSM是一種有序非本地更新的數(shù)據(jù)結構,常用于大數(shù)據(jù)合并排序的數(shù)據(jù)結構,其主要應用于頻繁更新的數(shù)據(jù)索引,數(shù)據(jù)頻繁更新意味著存儲設備中有大量鍵值(key/value)存在兩個或更多版本。
[0003]通常,LSM有7級(level),現(xiàn)有技術中,當某級的數(shù)據(jù)大小超過預設閾值時,將該級中的某個鍵范圍(key Range)內(nèi)的排序字符串表(Sorted String Table,以下簡稱:SSTable)與下一級中的相同的鍵范圍內(nèi)的SSTable進行合并排序(compact)操作,從而,實現(xiàn)對鍵值的壓縮和排序。SSTable是指在一個鍵范圍內(nèi)存儲的鍵值的排序表。
[0004]然而,采用現(xiàn)有技術的方法,針對存儲設備中同一個鍵值不能及時刪除舊版本,導致存儲空間的利用率不高。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例提供一種LSM數(shù)據(jù)合并排序方法和裝置,以提高存儲空間的利用率。
[0006]本發(fā)明實施例第一方面提供一種LSM數(shù)據(jù)合并排序方法,包括:
[0007]獲取相鄰兩級之間鍵值相似度最高的一對排序字符串表;
[0008]對所述一對排序字符串表進行合并排序操作。
[0009]結合第一方面,在第一種可能的實現(xiàn)方式中,所述獲取相鄰兩級之間鍵值相似度最聞的一對排序字符串表,包括:
[0010]以預設時間間隔獲取相鄰兩級之間鍵值相似度最高的一對排序字符串表。
[0011]結合第一方面,在第二種可能的實現(xiàn)方式中,所述獲取相鄰兩級之間鍵值相似度最聞的一對排序字符串表,包括:
[0012]判斷所述相鄰兩級中的上一級存儲的數(shù)據(jù)大小是否超過預設閾值;
[0013]當所述相鄰兩級中的上一級存儲的數(shù)據(jù)大小超過預設閾值時,則獲取相鄰兩級之間鍵值相似度最高的一對排序字符串表。
[0014]結合第一方面或第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述對所述一對排序字符串表進行合并排序操作,包括:
[0015]從所述一對排序字符串表的相同的鍵值中確定舊版本的鍵值;
[0016]將所述舊版本的鍵值刪除;
[0017]對刪除所述舊版本之后的所述一對排序字符串表中的各鍵值進行排序。
[0018]本發(fā)明實施例第二方面提供一種LSM數(shù)據(jù)合并排序裝置,包括:
[0019]獲取模塊,用于獲取相鄰兩級之間鍵值相似度最高的一對排序字符串表;
[0020]處理模塊,用于對所述一對排序字符串表進行合并排序操作。
[0021]結合第二方面,在第一種可能的實現(xiàn)方式中,所述獲取模塊具體用于以預設時間I司隔獲取相鄰兩級之間鍵值相似度最聞的一對排序字符串表。
[0022]結合第二方面,在第二種可能的實現(xiàn)方式中,所述獲取模塊具體用于判斷所述相鄰兩級中的上一級存儲的數(shù)據(jù)大小是否超過預設閾值;當所述相鄰兩級中的上一級存儲的數(shù)據(jù)大小超過預設閾值時,則獲取相鄰兩級之間鍵值相似度最高的一對排序字符串表。
[0023]結合第二方面或第一種可能的實現(xiàn)方式或第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述處理模塊具體用于從所述一對排序字符串表的相同的鍵值中確定舊版本的鍵值;將所述舊版本的鍵值刪除;對刪除所述舊版本之后的所述一對排序字符串表中的各鍵值進行排序。
[0024]本發(fā)明實施例提供的LSM數(shù)據(jù)合并排序方法和裝置,通過利用相鄰兩級之間SSTable的相似度,對相鄰兩級中鍵值相似度最高的一對SSTable進行合并排序操作,因為,鍵值相似度最高的一對SSTable內(nèi)存在相同的鍵值最多,也就是存在鍵值的舊版本最多,因此,根據(jù)鍵值相似度確定進行合并排序操作的SSTable,能夠最早最多的刪除舊版本的鍵值,避免舊版本的鍵值在存儲設備中存儲較長時間,占用存儲空間,從而,提高存儲空間的利用率。
【附圖說明】
[0025]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0026]圖1為本發(fā)明的LSM存儲結構示意圖;
[0027]圖2為本發(fā)明LSM數(shù)據(jù)合并排序方法實施例一的流程示意圖;
[0028]圖3為本發(fā)明LSM數(shù)據(jù)合并排序方法實施例二的流程示意圖;
[0029]圖4為本發(fā)明LSM數(shù)據(jù)合并排序裝置實施例一的結構示意圖;
[0030]圖5為本發(fā)明LSM數(shù)據(jù)合并排序裝置實施例二的結構示意圖。
【具體實施方式】
[0031]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0032]LSM通常有7級,如圖1所示,圖1為本發(fā)明的LSM存儲結構示意圖,自上而下將每級分別標記為Li,其中,O < i < 6,從第O級到第6級每級的存儲空間大小呈遞增趨勢,也就是,第O級的存儲空間最小,第6級的存儲空間最大;通常,第O級設置在內(nèi)存中,也是數(shù)據(jù)最開始寫入的一級,其他各級設置在磁盤中;根據(jù)鍵值將每級劃分為多個鍵范圍,例如:每級劃分為3個范圍,分別為K1-K100,K101-K200, K201-K300,當有鍵值存入時,存到相應的鍵值范圍內(nèi),例如:K15存在Kl-KlOO的鍵范圍內(nèi),并且,同一鍵范圍內(nèi)的鍵值按序排列;為了便于進行合并排序操作,通常,每級的鍵范圍劃分方式相同,例如:L0劃分為K1-K100、K101-K200、K201-K300 ;L1 ?L6 也劃分為 K1-K100、K101-K200、K201-K300。
[0033]當某級存儲的數(shù)據(jù)大小超過預設閾值時,為了便于描述,將存儲的數(shù)據(jù)大小超過預設閾值的一級稱為“待操作級”,將待操作級中的某個鍵范圍內(nèi)的SSTable與待操作級的下一級的同一鍵范圍內(nèi)的SSTable進行合并排序(compact)操作;例如:待操作級為L2,待操作級的下一級則為L3,合并排序操作具體為:按照輪詢規(guī)則確定L2級中待合并的鍵范圍的SSTable,例如為K1-K100的SSTable,則從L3中獲取K1-K100的SSTable,在L2的存儲空間中,將L2中的Kl-KlOO的SSTable與L3中的K1-K100的SSTable中進行合并排序操作,具體是,從相同的鍵值中確定一個最新版本,刪除所有舊版本,實現(xiàn)對鍵值的壓縮,然后,對各鍵值進行排序,將壓縮排序之后的鍵值寫入到L3的Kl-KlOO的SSTable中。其中,在相同的鍵值中確定一個最新版本可以根據(jù)鍵值的編號進行確定,上述鍵值的編號是按照鍵值存儲到存儲設備(LO)的先后順序編排的,通常,存入越晚,編號越大,因此,通常確定相同的鍵值中編號最大的為最新版本。
[0034]然而,采用上述方法,不能盡早的刪除相同的鍵值中舊版本,舊版本的鍵值可能會經(jīng)過多次合并排序操作與新版本的鍵值層級相距越來越大,因此,新版本的鍵值要經(jīng)過多次合并排序操作之后,才能與舊版本的鍵值進行合并排序,將舊版本的鍵值刪除,因此,相同的鍵值中舊版本的鍵值會在存儲設備中存在較長時間,會造成存儲空間利用率不高。
[0035]為了解決上