一種LSM樹的優化方法、裝置及電腦設備
本說明書實施例涉及資料處理技術領域,尤其涉及一種LSM樹的優化方法、裝置及電腦設備。
LSM樹(Log-Structured Merge Tree,日誌結構的合併樹)是一種基於硬碟的資料結構,其包括動態資料與靜態資料,動態資料和靜態資料儲存的是資料的修改增量。在存取LSM樹的過程中,依次讀取其動態資料和靜態資料,將所讀取到的結果進行合併,以得到最終的讀取結果。
由於LSM樹保存的是資料的修改增量,從而當LSM樹中保存有大量的用於表示資料已被刪除的修改增量時,在進行資料讀取過程中,需要遍歷大量的無用資料,才能讀取到有效的資料,這也就導致資料的讀取性能下降。
針對上述技術問題,本說明書實施例提供一種LSM樹的優化方法、裝置及電腦設備,技術方案如下:
根據本說明書實施例的第一態樣,提供一種LSM樹的優化方法,所述方法包括:
確定出LSM樹中,所指向的資料已被刪除的目標葉子節點;
在所述LSM樹的動態資料中,為所述目標葉子節點添加刪除標記。
根據本說明書實施例的第二態樣,提供一種LSM樹的優化裝置,所述裝置包括:
目標確定模組,用於確定出LSM樹中,所指向的資料已被刪除的目標葉子節點;
第一添加模組,用於在所述LSM樹的動態資料中,為所述目標葉子節點添加刪除標記。
根據本說明書實施例的第三態樣,提供一種電腦設備,包括記憶體、處理器及儲存在記憶體上並可在處理器上運行的電腦程式,其中,所述處理器執行所述程式時實現本說明書實施例提供的LSM樹的優化方法。
本說明書實施例所提供的技術方案,透過確定出LSM樹中,所指向的資料已被刪除的目標葉子節點,在該LSM樹的動態資料中,為所確定出的目標葉子節點添加刪除標記,由於在對LSM樹進行資料存取時,首先存取LSM樹的動態資料,再存取LSM樹的靜態資料,從而在動態資料中,為那些所指向的資料已被刪除的目標葉子節點添加刪除標記,可以實現在存取動態資料時,直接跳過具有刪除標記的葉子節點,從而提高資料存取效率,進一步,在存取靜態資料時,也無需重複存取具有刪除標記的葉子節點,從而提高資料存取效率。
應當理解的是,以上的一般描述和後文的細節描述僅是示例性和解釋性的,並不能限制本說明書實施例。
此外,本說明書實施例中的任一實施例並不需要達到上述的全部效果。
為了使本領域技術人員更好地理解本說明書實施例中的技術方案,下面將結合本說明書實施例中的附圖,對本說明書實施例中的技術方案進行詳細地描述,顯然,所描述的實施例僅僅是本說明書的一部分實施例,而不是全部的實施例。基於本說明書中的實施例,本領域普通技術人員所獲得的所有其他實施例,都應當屬於保護的範圍。
LSM樹是一種基於硬碟的資料結構,其代表資料庫包括Hbase、NessDB、LevelDB等。LSM樹的儲存引擎和B+樹的儲存引擎一樣,同樣支持增、刪、讀、改、順序掃描操作,而且其透過批量儲存技術可以有效規避磁碟隨機寫入問題,具體的,其核心思路是,假定內部記憶體足夠大,因此,不需要每次有資料更新就必須將資料寫入磁碟中,而可以先將最新的資料駐留在內部記憶體中,等到內部記憶體中的資料達到指定的大小限制後,再使用歸併排序的方式將內部記憶體中的資料合併追加到磁碟隊尾,基於此,也就可以將LSM樹所儲存的資料分為靜態資料和動態資料,其中,動態資料是指內部記憶體中的資料,靜態資料中的資料是指儲存于持久化媒體上,例如磁碟中的資料。本領域技術人員可以理解的是,LSM樹中儲存的是資料的修改增量,也就是資料的變更資訊。例如,如圖1所示,為LSM樹的一種示例。
在存取LSM樹的過程中,需要依次讀取其動態資料和靜態資料,將所讀取到的結果進行合併,以得到最終的讀取結果。
目前,在存取LSM的過程中,存在兩個問題:
其一:當頻繁地在動態資料中插入用於表示資料已被刪除的修改增量時,也即動態資料中保存了大量的刪除記錄時,在存取動態資料時,需要遍歷大量無用的資料,導致資料的讀取性能下降。例如,假設透過索引鍵範圍[1,50]查找資料,而如圖1所示,在索引鍵範圍[1,50]內部記憶體在大量的已被刪除的資料,例如索引鍵為3至8的葉子節點所指向的資料,索引鍵為15至31的葉子節點所指向的資料,以及索引鍵為32和索引鍵為49的葉子節點所指向的資料,那麼,在現有技術中,仍需要逐個遍歷葉子節點,最終才能得到索引鍵為9至14,以及索引鍵為33至48的葉子節點所指向的資料。
其二:在存取靜態資料時,依舊需要遍歷大量無用的資料,導致資料的查詢性能下降。例如,在存取圖1所示例的靜態資料時,依舊需要逐個遍歷索引鍵為3至99的葉子節點所指向的資料,並無法跳過所指向的資料已被刪除的葉子節點。
基於此,本說明書實施例提供一種LSM樹的優化方法,在該方法中,考慮到在存取LSM樹時,先存取其動態資料,再存取其靜態資料,從而在LSM樹的動態資料中,為所指向的資料已被刪除的葉子節點添加用於表示資料已被刪除的刪除標記,以實現後續在存取LSM樹時,若在動態資料中查找到帶有刪除標記的葉子節點,則直接跳過該葉子節點,並且,後續在查找靜態資料時,也不再查找具有相同索引鍵的葉子節點,從而提升資料查詢性能。
如下,示出下述實施例對上述LSM樹的優化方法進行詳細說明:
請參見圖2,為本說明書一示例性實施例提供的一種LSM樹的優化方法的實施例流程圖,該方法包括以下步驟:
步驟202:確定出LSM樹中,所指向的資料已被刪除的目標葉子節點。
在本說明書實施例中,可以分別針對動態資料和靜態資料,確定出所指向的資料已被刪除的葉子節點,為了描述方便,將所確定出的,也即所指向的資料已被刪除的葉子節點稱為目標葉子節點。
如下,分別從動態資料和靜態資料兩態樣進行說明:
首先,動態資料:
以圖1所示例的動態資料為例,假設透過索引鍵範圍[1,50]查找資料,在查詢過程中,可以檢測到多個索引鍵連續的葉子節點所指向的資料已被刪除,例如,索引鍵為3至8的葉子節點,索引鍵為15至31的葉子節點,那麼,則可以將這些葉子節點確定為目標葉子節點。
其次,靜態資料:
以圖3所示例的靜態資料為例,假設透過索引鍵範圍[1,50]查找資料,在查詢過程中,可以檢測到多個索引鍵連續的葉子節點所指向的資料已被刪除,例如,索引鍵為3至15的葉子節點,那麼,則可以將這些葉子節點確定為目標葉子節點。
步驟204:在LSM樹的動態資料中,為目標葉子節點添加刪除標記。
在本步驟中,仍分別從動態資料和靜態資料兩態樣進行說明:
首先,動態資料:
基於上述步驟202中的相關舉例,在動態資料中所確定出的目標葉子節點包括:索引鍵為3至8的葉子節點,索引鍵15至31的葉子節點,那麼,在本步驟中,則可以為這些目標葉子節點添加刪除標記,例如,如圖3所示,在圖3中,“dead”表示刪除標記,本領域技術人員可以理解的是,以“dead”作為刪除標記僅僅作為舉例,在實際應用中,刪除標記可以以其它形式體現,本說明書實施例對此不作限制。
此外,在本說明書實施例中還提出,若在LSM樹的動態資料中,任一枝節點下的所有葉子節點均被添加有刪除標記,則為該枝節點添加刪除標記。例如,如圖3所示,在“15”這一枝節點下,所有的葉子節點均被添加有刪除標記,則可以為該枝節點也添加刪除標記,如圖3所示。透過該種處理,後續在存取LSM樹的動態資料時,則在存取完“3”這一枝節點下的所有葉子節點後,可以直接跳過“15”這一枝節點,存取“32”這一枝節點,從而提高資料存取效率。
此外,在本說明書實施例中,考慮到後續進一步提高在靜態資料中進行資料存取的效率,可以進一步判斷被添加刪除標記的目標葉子節點中,具有最大索引鍵的目標葉子節點所指向的葉子節點的索引鍵是否與該最大索引鍵連續,若連續,則可以不做處理,若不連續,則可以在該具有最大索引鍵的目標葉子節點之後插入一個虛擬葉子節點,該虛擬葉子節點的索引鍵為該最大索引鍵加1。
舉例來說,以被添加刪除標記的目標葉子節點為索引鍵為3至8的葉子節點為例,在該些目標葉子節點中,最大索引鍵為8,如圖4所示,索引鍵為8的葉子節點所指向的下一個葉子節點的索引鍵為9,與8連續,從而則可以不做處理。
再舉例來說,以被添加刪除標記的目標葉子節點為索引鍵為15至31的葉子節點為例,在該些目標葉子節點中,最大索引鍵為31,如圖4所示,索引鍵為31的葉子節點不再指向其他葉子節點,那麼,則可以在該葉子節點之後插入一個虛擬葉子節點,該虛擬葉子節點的索引鍵為32,例如,如圖4所示。當然,本領域技術人員可以理解的是,該虛擬葉子節點不具有刪除標記。
透過該種處理,可以進一步提高在靜態資料中進行資料存取的效率,例如,在存取動態資料過程中,當遍歷到索引鍵為9的葉子節點時,發現其不具有刪除標記,則可以將[3,8]這一索引鍵範圍看作被刪除資料的索引鍵範圍,後續,在存取靜態資料時,則可以不再存取索引鍵屬於這一範圍的葉子節點。
其次,靜態資料:
基於上述步驟202中的相關舉例,在靜態資料中所確定出的目標葉子節點包括索引鍵為3至15的葉子節點,此時,則可以首先確定動態資料中是否存在索引鍵為3至15的目標葉子節點,若不存在,則可以將目標葉子節點中,具有最大索引鍵和最小索引鍵的兩個目標葉子節點插入LSM樹的動態資料中,在LSM樹的動態資料中,為所插入的目標葉子節點添加刪除標記。
例如,在索引鍵為3至15的葉子節點中,最大索引鍵為15,最小索引鍵為3,按照前述描述,將索引鍵為3和15的目標葉子節點插入LSM樹的動態資料中,並在動態資料中,為所插入的目標葉子節點添加刪除標記,具體如圖5所示。
此外,可以進一步判斷被添加刪除標記的目標葉子節點中,具有最大索引鍵的目標葉子節點所指向的葉子節點的索引鍵是否與該最大索引鍵連續,若連續,則可以不做處理,若不連續,則可以在索引鍵為該最大索引鍵的目標葉子節點之後插入一個虛擬葉子節點,該虛擬葉子節點的索引鍵為該最大索引鍵加1。
舉例來說,在圖5中,被添加刪除標記的目標葉子節點為索引鍵為3和15的葉子節點,其中的最大索引鍵為15,而在索引鍵為15的這一葉子節點之後,不具有其他葉子節點,則可以在該葉子節點之後,插入一個索引鍵為16的虛擬葉子節點,具體如圖5所示。
透過該種後續,後續在存取動態資料過程中,當遍歷到索引鍵為16的虛擬葉子節點時,發現其不具有刪除標記,則可以將[3,15]看作被刪除資料的索引鍵範圍,後續,在存取靜態資料時,則可以不再存取索引鍵屬於這一範圍的葉子節點,從而提高在靜態資料中進行資料存取的效率。
本說明書實施例所提供的技術方案,透過確定出LSM樹中,所指向的資料已被刪除的目標葉子節點,在該LSM樹的動態資料中,為所確定出的目標葉子節點添加刪除標記,由於在對LSM樹進行資料存取時,首先存取LSM樹的動態資料,再存取LSM樹的靜態資料,從而在動態資料中,為那些所指向的資料已被刪除的目標葉子節點添加刪除標記,可以實現在存取動態資料時,直接跳過具有刪除標記的葉子節點,從而提高資料存取效率,進一步,在存取靜態資料時,也無需重複存取具有刪除標記的葉子節點,從而提高資料存取效率。
相應於上述方法實施例,本說明書實施例還提供一種LSM樹的優化裝置,請參見圖6,為本說明書一示例性實施例提供的一種LSM樹的優化裝置的實施例方塊圖,該裝置可以包括:目標確定模組61、第一添加模組62。
其中,目標確定模組61,可以用於確定出LSM樹中,所指向的資料已被刪除的目標葉子節點;
第一添加模組62,可以用於在所述LSM樹的動態資料中,為所述目標葉子節點添加刪除標記。
在一實施例中,所述裝置還可以包括(圖6中未示出):
第二添加模組,用於在所述LSM樹的動態資料中,若檢測到任一枝節點下的所有葉子節點均被添加有刪除標記,則為所述枝節點添加刪除標記。
在一實施例中,所述目標確定模組61可以具體用於:
分別針對LSM樹的動態資料和靜態資料,確定出所指向的資料已被刪除,且索引鍵連續的兩個以上目標葉子節點。
在一實施例中,所述第一添加模組62可以包括(圖6中未示出):
插入子模組,用於若針對LSM樹的靜態資料確定出目標葉子節點,分別將所確定出的目標葉子節點中,具有最大索引鍵和最小索引鍵的兩個目標葉子節點插入所述LSM樹的動態資料中;
標記添加子模組,用於在所述LSM樹的動態資料中,為所插入的目標葉子節點添加刪除標記。
在一實施例中,所述裝置還可以包括(圖6中未示出):
判斷模組,用於判斷被添加刪除標記的目標葉子節點中,具有最大索引鍵的目標葉子節點所指向的葉子節點的索引鍵是否與所述最大索引鍵連續;
虛擬節點插入模組,用於若不連續,則在所述具有最大索引鍵的目標葉子節點之後插入虛擬葉子節點,其中,所述虛擬葉子節點的索引鍵為所述最大索引鍵加1。
可以理解的是,目標確定模組61與第一添加模組62作為兩種功能獨立的模組,既可以如圖6所示同時配置在裝置中,也可以分別單獨配置在裝置中,因此圖6所示的結構不應理解為對本說明書實施例方案的限定。
此外,上述裝置中各個模組的功能和作用的實現過程具體詳見上述方法中對應步驟的實現過程,在此不再贅述。
本說明書實施例還提供一種電腦設備,其至少包括記憶體、處理器及儲存在記憶體上並可在處理器上運行的電腦程式,其中,處理器執行所述程式時實現前述的LSM樹的優化方法。該方法至少包括:確定出LSM樹中,所指向的資料已被刪除的目標葉子節點;在所述LSM樹的動態資料中,為所述目標葉子節點添加刪除標記。
圖7示出了本說明書實施例所提供的一種更為具體的計算設備硬體結構示意圖,該設備可以包括:處理器710、記憶體720、輸入/輸出介面730、通信介面740和匯流排750。其中處理器710、記憶體720、輸入/輸出介面730和通信介面740透過匯流排750實現彼此之間在設備內部的通信連接。
處理器710可以採用通用的CPU(Central Processing Unit,中央處理器)、微處理器、特殊應用積體電路(Application Specific Integrated Circuit,ASIC)、或者一個或多個積體電路等方式實現,用於執行相關程式,以實現本說明書實施例所提供的技術方案。
記憶體720可以採用ROM(Read Only Memory,唯讀記憶體)、RAM(Random Access Memory,隨機存取記憶體)、靜態儲存設備,動態儲存設備等形式實現。記憶體720可以儲存操作系統和其他應用程式,在透過軟體或者韌體來實現本說明書實施例所提供的技術方案時,相關的程式程式碼保存在記憶體720中,並由處理器710來呼叫執行。
輸入/輸出介面730用於連接輸入/輸出模組,以實現資訊輸入及輸出。輸入輸出/模組可以作為組件配置在設備中(圖7中未示出),也可以外接於設備以提供相應功能。其中輸入設備可以包括鍵盤、滑鼠、觸控螢幕、麥克風、各類感測器等,輸出設備可以包括顯示器、喇叭、振動器、指示燈等。
通信介面740用於連接通信模組(圖7中未示出),以實現本設備與其他設備的通信交互。其中通信模組可以透過有線方式(例如USB、網線等)實現通信,也可以透過無線方式(例如移動網路、WIFI、藍牙等)實現通信。
匯流排750包括一通路,在設備的各個組件(例如處理器710、記憶體720、輸入/輸出介面730和通信介面740)之間傳輸資訊。
需要說明的是,儘管上述設備僅示出了處理器710、記憶體720、輸入/輸出介面730、通信介面740以及匯流排750,但是在具體實施過程中,該設備還可以包括實現正常運行所必需的其他組件。此外,本領域的技術人員可以理解的是,上述設備中也可以僅包含實現本說明書實施例方案所必需的組件,而不必包含圖中所示的全部組件。
本說明書實施例還提供一種電腦可讀儲存媒體,其上儲存有電腦程式,該程式被處理器執行時實現前述的LSM樹的優化方法。該方法至少包括:確定出LSM樹中,所指向的資料已被刪除的目標葉子節點;在所述LSM樹的動態資料中,為所述目標葉子節點添加刪除標記。
電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變記憶體(PRAM)、靜態隨機存取記憶體(SRAM)、動態隨機存取記憶體(DRAM)、其他類型的隨機存取記憶體(RAM)、唯讀記憶體(ROM)、唯讀記憶體電可抹除可編程唯讀記憶體(EEPROM)、快閃記憶體或其他內部記憶體技術、唯讀光碟唯讀記憶體(CD-ROM)、數位多功能光碟(DVD)或其他光學儲存、磁盒式磁帶,磁帶式磁碟儲存器或其他磁性儲存設備或任何其他非傳輸媒體,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀媒體不包括暫存電腦可讀媒體(transitory media),如調變的資料信號和載波。
透過以上的實施方式的描述可知,本領域的技術人員可以清楚地瞭解到本說明書實施例可借助軟體加必需的通用硬體平臺的方式來實現。基於這樣的理解,本說明書實施例的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟體產品的形式體現出來,該電腦軟體產品可以儲存在儲存媒體中,如ROM/RAM、磁碟、光碟等,包括若干指令用以使得一台電腦設備(可以是個人電腦,伺服器,或者網路設備等)執行本說明書實施例各個實施例或者實施例的某些部分所述的方法。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、行動電話、相機電話、智慧電話、個人數位助理、媒體播放器、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、可穿戴設備或者這些設備中的任意幾種設備的組合。
本說明書中的各個實施例均採用漸進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對於裝置實施例而言,由於其基本相似於方法實施例,所以描述得比較簡單,相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的模組可以是或者也可以不是實體上分開的,在實施本說明書實施例方案時可以把各模組的功能在同一個或多個軟體和/或硬體中實現。也可以根據實際的需要選擇其中的部分或者全部模組來實現本實施例方案的目的。本領域普通技術人員在不付出創造性勞動的情況下,即可以理解並實施。
以上所述僅是本說明書實施例的具體實施方式,應當指出,對於本技術領域的普通技術人員來說,在不脫離本說明書實施例原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本說明書實施例的保護範圍。
202‧‧‧步驟
204‧‧‧步驟
61‧‧‧目標確定模組
62‧‧‧第一添加模組
710‧‧‧處理器
720‧‧‧記憶體
730‧‧‧輸入/輸出介面
740‧‧‧通信介面
750‧‧‧匯流排
為了更清楚地說明本說明書實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本說明書實施例中記載的一些實施例,對於本領域普通技術人員來講,還可以根據這些附圖獲得其他的附圖。
圖1為LSM樹的一種示例;
圖2為本說明書一示例性實施例提供的一種LSM樹的優化方法的實施例流程圖;
圖3為LSM樹的靜態資料的一種示例;
圖4為在LSM樹的動態資料中添加刪除標記的一種示例;
圖5為在LSM樹的動態資料中添加刪除標記的另一種示例;
圖6為本說明書一示例性實施例提供的一種LSM樹的優化裝置的實施例方塊圖;
圖7示出了本說明書實施例所提供的一種更為具體的計算設備硬體結構示意圖。