本發(fā)明涉及多ndp系統(tǒng)數(shù)據(jù)讀寫處理,尤其涉及一種基于鍵值分離技術(shù)的多ndp系統(tǒng)讀寫加速方法。
背景技術(shù):
::1、根據(jù)預(yù)測,全球數(shù)據(jù)總量預(yù)計將從2020年的44zb(1zb=10^21字節(jié))增長到2025年的175zb。其中,應(yīng)用于特定數(shù)據(jù)驅(qū)動型應(yīng)用領(lǐng)域(如社交媒體)的非結(jié)構(gòu)化數(shù)據(jù)將占全球數(shù)據(jù)總量的比例超過80%。因此,高效存儲和處理這些非結(jié)構(gòu)化數(shù)據(jù)已成為當(dāng)前大數(shù)據(jù)智能處理的前沿?zé)狳c(diǎn)技術(shù),受到產(chǎn)業(yè)界的廣泛關(guān)注。2、非結(jié)構(gòu)化數(shù)據(jù)的復(fù)雜性和多樣性,使得傳統(tǒng)關(guān)系型數(shù)據(jù)庫難以存儲和管理,而基于lsm-tree數(shù)據(jù)組織的鍵值存儲因其簡單和靈活的特性被廣泛用于高效管理非結(jié)構(gòu)化數(shù)據(jù),例如leveldb、rocksdb、redis和cassandra等。在lsm-tree中,數(shù)據(jù)首先被寫入以日志為組織結(jié)構(gòu)的內(nèi)存組件,然后以批量方式周期性地轉(zhuǎn)儲到以分層排序字符串為結(jié)構(gòu)的磁盤組件,將隨機(jī)寫轉(zhuǎn)換為順序?qū)懸蕴岣邔懶阅?。?dāng)內(nèi)存組件達(dá)到預(yù)定閾值時,數(shù)據(jù)將被排序并轉(zhuǎn)儲到新的sstable中。隨著時間的推移,磁盤上會積累多個鍵范圍重疊的sstable,導(dǎo)致存儲空間浪費(fèi)和讀性能的降低。此時lsm-tree定期執(zhí)行compaction操作,將具有重疊鍵范圍的sstable合并成無重疊鍵范圍的新表,從而減少磁盤占用空間,優(yōu)化讀性能。3、傳統(tǒng)的以cpu為中心的架構(gòu)對compaction進(jìn)行優(yōu)化,如wisckey、hashkv、glsm等,這些方法的compaction操作仍涉及大量數(shù)據(jù)在存儲設(shè)備(如ssd、hdd)和cpu之間的移動,帶來巨大的開銷。4、因此,近數(shù)據(jù)計算(ndp)架構(gòu)被引入以處理compaction操作。例如:cokv、pstore和nkv從單ndp系統(tǒng)的角度出發(fā),使compaction在更靠近存儲介質(zhì)的地方進(jìn)行處理,減少數(shù)據(jù)搬移,從而加速compaction。然而,單ndp的處理能力難以應(yīng)對大規(guī)模數(shù)據(jù)的處理需求;因此,mstore在此基礎(chǔ)上提出了多ndp架構(gòu)。5、但以mstore為代表的多ndp系統(tǒng)仍存在一些問題:在mstore中,通過引入多個ndp設(shè)備,雖然擴(kuò)展了lsm-tree每一層的容量,降低了lsm-tree的層級結(jié)構(gòu),采用這種設(shè)計顯著減少了高層數(shù)據(jù)的寫入頻率和高層的compaction次數(shù),從而有效地降低了寫放大效應(yīng)。采用這種方法雖然在寫密集和讀密集負(fù)載下表現(xiàn)優(yōu)異,但在讀寫混合負(fù)載下,寫放大問題仍然顯著存在;此外,在大規(guī)模數(shù)據(jù)環(huán)境中(例如100gb的數(shù)據(jù)量),研究觀察到,mstore系統(tǒng)在寫性能優(yōu)化方面的改進(jìn)遠(yuǎn)遠(yuǎn)超過了對讀性能的優(yōu)化,這導(dǎo)致了讀寫性能之間的嚴(yán)重不對稱性,限制了系統(tǒng)在讀密集負(fù)載下的整體性能表現(xiàn)。6、因此,現(xiàn)實(shí)中需要一種基于鍵值分離技術(shù)的多ndp系統(tǒng)讀寫加速方法,可以提升多ndp系統(tǒng)的讀寫性能,并降低寫放大效應(yīng)。技術(shù)實(shí)現(xiàn)思路1、針對上述問題,本發(fā)明的目的在于提供一種基于鍵值分離技術(shù)的多ndp系統(tǒng)讀寫加速方法,在多ndp系統(tǒng)中引入鍵值分離技術(shù),降低compaction的執(zhí)行時間,提升多ndp系統(tǒng)讀寫性能,降低寫放大效應(yīng)。2、本發(fā)明實(shí)施例提供一種基于鍵值分離技術(shù)的多ndp系統(tǒng)讀寫加速方法,包括主機(jī)端和設(shè)備端共同組成的多ndp系統(tǒng),當(dāng):3、數(shù)據(jù)寫入時,將寫入多ndp系統(tǒng)批處理區(qū)的數(shù)據(jù)鍵值對進(jìn)行拆分,鍵經(jīng)過哈希處理后確定目標(biāo)設(shè)備,然后進(jìn)行鍵處理和值處理,鍵處理后目標(biāo)設(shè)備進(jìn)行鍵存儲,值處理后對應(yīng)的值被追加至目標(biāo)設(shè)備的值日志文件中;在值處理過程中,當(dāng)系統(tǒng)無法一次性傳輸所有數(shù)據(jù)時,多ndp系統(tǒng)值存儲采用流水線式flush策略;4、數(shù)據(jù)查詢時,首先對查詢鍵進(jìn)行哈希運(yùn)算,隨后采用主從多級熱緩存策略,依次檢索內(nèi)存表(memtable)、不可變內(nèi)存表(immutable?memtable)、主機(jī)端緩存、設(shè)備端緩存和目標(biāo)設(shè)備的lsm-tree(log-structured?merge?tree),一旦獲取到目標(biāo)值的位置信息,便返回該索引信息,并根據(jù)該索引進(jìn)行對應(yīng)值的查詢;5、值日志文件中臟數(shù)據(jù)占比超過閾值,觸發(fā)垃圾回收時,通過后臺線程執(zhí)行本地垃圾回收(gc)操作。6、進(jìn)一步地,所述數(shù)據(jù)寫入時:7、鍵處理包括:將鍵寫入對應(yīng)目標(biāo)設(shè)備的內(nèi)存表(memtable),當(dāng)memtable達(dá)到預(yù)定閾值時,系統(tǒng)將其轉(zhuǎn)換為不可變內(nèi)存表(immutable?memtable),隨后觸發(fā)鍵flush操作,將數(shù)據(jù)寫入目標(biāo)設(shè)備磁盤并生成sst文件;觸發(fā)compaction操作時,系統(tǒng)后臺執(zhí)行鍵compaction操作,更新臟鍵索引表,對sst文件進(jìn)行合并與整理;8、值處理包括:將值寫入目標(biāo)設(shè)備的值緩沖區(qū)vbuffer中的vtable,當(dāng)vtable達(dá)到預(yù)定閾值時,通過流水線式flush策略寫入目標(biāo)設(shè)備值日志文件中。9、進(jìn)一步地,所述流水線式flush策略包括:10、系統(tǒng)依據(jù)不阻塞情況下基于單個vtable的平均傳輸時間進(jìn)行限時管理,超過限時后,傳輸權(quán)將移交至下一個設(shè)備,設(shè)備間的傳輸優(yōu)先級則基于已寫滿的vtable數(shù)量進(jìn)行確定,vtable數(shù)量越多,設(shè)備的傳輸優(yōu)先級越高;11、當(dāng)多個設(shè)備的vtable傳輸優(yōu)先級相近且同時達(dá)到傳輸閾值時,系統(tǒng)根據(jù)網(wǎng)絡(luò)帶寬上限估計最大并行度進(jìn)行調(diào)度分組,并對每個vtable進(jìn)行校驗(yàn)和確認(rèn)。12、進(jìn)一步地,所述數(shù)據(jù)查詢時,采用主從多級熱緩存策略,包括:13、系統(tǒng)對查詢的鍵進(jìn)行哈希運(yùn)算,確定目標(biāo)存儲設(shè)備;14、系統(tǒng)依次查詢該目標(biāo)設(shè)備的內(nèi)存表(memtable),如果找到匹配的鍵,則返回對應(yīng)的值索引,如果未找到,則繼續(xù)查詢該設(shè)備的不可變內(nèi)存表(immutable?memtable);15、如immutable?memtable中仍未找到,則查詢主機(jī)端的鍵緩存,并依此返回對應(yīng)的值索引;16、如主機(jī)端的鍵緩存中仍未找到,則進(jìn)一步查詢目標(biāo)設(shè)備的鍵緩存,并依此返回對應(yīng)的值索引;17、如果目標(biāo)設(shè)備的鍵緩存中仍未找到,則從目標(biāo)設(shè)備的lsm-tree的level?0層開始逐層查詢,直至找到該鍵,并依此返回對應(yīng)的值索引,或確認(rèn)該鍵不存在;18、根據(jù)獲取到的值索引信息,在目標(biāo)設(shè)備值日志中檢索對應(yīng)的數(shù)據(jù),并將結(jié)果返回給用戶。19、進(jìn)一步地,所述主從多級熱緩存策略,包括主機(jī)端與設(shè)備端兩級緩存:20、寫入數(shù)據(jù)時,主機(jī)端維護(hù)一個鍵映射表,根據(jù)映射表判斷寫入的鍵的次數(shù)是否超過3次,若超過,則認(rèn)為其是熱鍵,該鍵和對應(yīng)的值索引信息會直接寫入主機(jī)端緩存;21、如果不是熱鍵,數(shù)據(jù)直接寫入目標(biāo)設(shè)備的sst文件,如果此時觸發(fā)了compaction操作,系統(tǒng)將重復(fù)出現(xiàn)的鍵的最新版本及其值索引寫入設(shè)備端緩存;22、當(dāng)設(shè)備端緩存中某個鍵出現(xiàn)重復(fù)次數(shù)達(dá)到3次或以上時,該鍵被標(biāo)記為高頻訪問鍵并同步至主機(jī)端緩存,這些高頻訪問鍵將被優(yōu)先放置在主機(jī)端緩存的前列。23、進(jìn)一步地,還包括:多個線程同時訪問緩存時,系統(tǒng)采用讀寫鎖(read-writelock)并發(fā)控制機(jī)制,讀操作可以并行進(jìn)行,而寫操作則獨(dú)占進(jìn)行。24、進(jìn)一步地,緩存替換時,采取基于訪問頻率的lru(least?recently?used)策略和lfu(least?frequently?used)策略的結(jié)合,確保在緩存空間有限的情況下,優(yōu)先保留高頻訪問的數(shù)據(jù)。25、進(jìn)一步地,所述本地垃圾回收(gc)操作,包括:將值數(shù)據(jù)存儲進(jìn)行冷層和熱層劃分,值寫入操作時,系統(tǒng)判斷該值對應(yīng)鍵是否唯一,如果鍵唯一,則值數(shù)據(jù)被寫入冷層vlog(值日志),如果該該值對應(yīng)鍵不唯一或經(jīng)過多次更新,則將值數(shù)據(jù)寫入熱層vlog(值日志);26、當(dāng)冷層或熱層的vlog達(dá)到預(yù)設(shè)閾值時,系統(tǒng)優(yōu)先對熱層vlog執(zhí)行垃圾回收操作。27、進(jìn)一步地,所述通過后臺線程執(zhí)行g(shù)c操作,包括:28、系統(tǒng)通過后臺線程持續(xù)監(jiān)控整體負(fù)載情況,包括cpu利用率、內(nèi)存使用情況以及i/o操作頻率,公示表示為:29、30、其中,gc_trigger是垃圾回收啟動的閾值,當(dāng)達(dá)到或超過該閾值時,系統(tǒng)會啟動垃圾回收;n表示監(jiān)控的時間窗口長度,即系統(tǒng)在過去n個時間單位內(nèi)的平均負(fù)載情況;cpu_utilizationi是在第i個時間單位內(nèi)的cpu利用率;memory_usagei是在第i個時間單位內(nèi)的內(nèi)存使用情況;io_frequencyi是在第i個時間單位內(nèi)的i/o操作頻率。α、β、γ是加權(quán)系數(shù),用于調(diào)整各負(fù)載指標(biāo)對垃圾回收觸發(fā)的影響。31、本發(fā)明的有益效果:32、1.本發(fā)明多ndp系統(tǒng)鍵值分離,首次在多ndp系統(tǒng)中引入了鍵值分離技術(shù),通過分離鍵和值的處理方式,在執(zhí)行compaction時,各ndp設(shè)備僅需處理鍵的合并操作,顯著降低了compaction的執(zhí)行時間,并減少了compaction對用戶寫入操作的影響,從而大幅提升了寫入性能。33、2.本發(fā)明多ndp系統(tǒng)采用流水線flush策略,通過流水線調(diào)度多個ndp設(shè)備的值數(shù)據(jù),使這些數(shù)據(jù)不必同時競爭有限的帶寬,從而最大限度地減少值數(shù)據(jù)的flush等待時間。34、3.本發(fā)明多ndp系統(tǒng)采用主從多級熱緩存策略:提出一種通過主機(jī)端和設(shè)備端兩級緩存來存儲更多熱鍵的策略,該策略通過在主機(jī)端和設(shè)備端之間實(shí)現(xiàn)有效的協(xié)同,將設(shè)備端的熱數(shù)據(jù)及時同步更新到主機(jī)端,從而最大化熱數(shù)據(jù)的快速讀取性能,提升系統(tǒng)的響應(yīng)速度和整體效率。35、4.本發(fā)明多ndp系統(tǒng)采用臟數(shù)據(jù)垃圾回收(gc)策略,在處理各ndp設(shè)備內(nèi)部值日志文件的臟數(shù)據(jù)時,采用了分層處理的策略,首次寫入的值數(shù)據(jù)被存儲在冷層,后續(xù)重復(fù)寫入的值數(shù)據(jù)則被存儲在熱層,系統(tǒng)優(yōu)先執(zhí)行熱層的垃圾回收,以盡量減少開銷大、耗時長的冷層垃圾回收次數(shù),此外,值日志文件的垃圾回收過程由后臺線程執(zhí)行,不阻塞前臺用戶的讀寫操作。當(dāng)前第1頁12當(dāng)前第1頁12