System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內(nèi)的位置。 參數(shù)名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術(shù)實現(xiàn)步驟摘要】
本公開涉及數(shù)據(jù)處理,具體涉及一種追加數(shù)據(jù)寫入方法、追加數(shù)據(jù)寫入裝置、存儲介質(zhì)及電子設(shè)備。
技術(shù)介紹
1、存儲引擎是一種線上的系統(tǒng),它提供數(shù)據(jù)存儲服務(wù),能夠允許使用者對數(shù)據(jù)進行寫入和查詢,通常會在毫秒級的時間內(nèi)作出響應(yīng)。當向lsm存儲引擎中的長序列value追加更新數(shù)據(jù)時,現(xiàn)有技術(shù)會先從存儲引擎中讀取當前value,在value末尾追加新元素,然后再將更新后的value寫回存儲引擎。
2、這種方法雖然能完成追加更新,但是效率很低。首先,對于長序列value,序列的元素個數(shù)能到上萬甚至更多,value的字節(jié)數(shù)能到幾百kb甚至更多。假設(shè)當前value長度100kb,需添加的序列長度3kb,那么需要先讀取100kb的原數(shù)據(jù),再寫入103kb的新數(shù)據(jù)。這個過程雖然簡單,但涉及到較大的磁盤數(shù)據(jù)讀寫。更嚴重的問題是,由于lsm的底層設(shè)計原理,雖然寫入數(shù)據(jù)很快,但需要不定期的做數(shù)據(jù)合并(compaction)來清除老數(shù)據(jù),導致會進一步放大讀寫磁盤的數(shù)據(jù)量。對于kv存儲引擎這樣的高性能要求場景,頻繁讀寫大value數(shù)據(jù)會造成嚴重的性能問題,影響存儲引擎的服務(wù)能力。
3、需要說明的是,在上述
技術(shù)介紹
部分公開的信息僅用于加強對本公開的背景的理解,因此可以包括不構(gòu)成對本領(lǐng)域普通技術(shù)人員已知的現(xiàn)有技術(shù)的信息。
技術(shù)實現(xiàn)思路
1、本公開的目的在于提供一種追加數(shù)據(jù)寫入方法、追加數(shù)據(jù)寫入裝置、存儲介質(zhì)及電子設(shè)備,旨在解決value追加數(shù)據(jù)需要頻繁讀寫而造成更新效率低的問題。
2
3、根據(jù)本公開實施例的一方面,提供了一種追加數(shù)據(jù)寫入方法,包括:預(yù)先將lsm存儲引擎中sst文件中的第一value分離存儲至blob文件中,并在所述blob文件中增設(shè)預(yù)設(shè)大小的待寫入空間得到第二value;
4、在所述第一value中存儲所述blob文件對應(yīng)的blob位置索引以更新所述第一value;
5、響應(yīng)于value追加數(shù)據(jù)的寫入請求,在所述lsm中查詢是否存在與所述value追加數(shù)據(jù)對應(yīng)的目標key;
6、在存在所述目標key時,將所述value追加數(shù)據(jù)寫入所述目標key對應(yīng)的blob文件中的所述待寫入空間中。
7、根據(jù)本公開的一些實施例,基于前述方案,在不存在所述目標key時,所述方法還包括:
8、在所述lsm中創(chuàng)建key,在sst文件中寫入所述value追加數(shù)據(jù)得到第一value;
9、將所述第一value分離存儲至blob文件中,并在所述blob文件中增設(shè)與所述value追加數(shù)據(jù)的序列長度相匹配的待寫入空間得到第二value。
10、根據(jù)本公開的一些實施例,基于前述方案,在將所述value追加數(shù)據(jù)寫入所述待寫入空間中之前,所述方法還包括:
11、對所述blob文件中的待寫入空間進行空間校驗和有效性校驗;
12、在所述空間校驗和所述有效性校驗通過時,將所述value追加數(shù)據(jù)寫入所述待寫入空間中;以及
13、在所述空間校驗和/或所述有效性校驗未通過時,讀取當前value,并基于所述value追加數(shù)據(jù)更新所述當前value。
14、根據(jù)本公開的一些實施例,基于前述方案,對所述blob文件中的待寫入空間進行空間校驗,包括:
15、獲取所述value追加數(shù)據(jù)的序列長度,以及獲取所述待寫入空間的序列長度;
16、檢驗所述待寫入空間的序列長度是否滿足存儲所述value追加數(shù)據(jù)的序列長度的條件。
17、根據(jù)本公開的一些實施例,基于前述方案,對所述blob文件中的待寫入空間進行有效性校驗,包括:
18、獲取所述lsm的無效value數(shù)據(jù);其中,所述無效value數(shù)據(jù)是在所述lsm進行無效數(shù)據(jù)合并后生成的;
19、校驗所述blob文件是否存在于所述無效value數(shù)據(jù)中。
20、根據(jù)本公開的一些實施例,基于前述方案,所述第一value包括版本信息、已使用空間大小、blob位置索引;所述第二value包括value序列數(shù)據(jù)和待寫入空間。
21、根據(jù)本公開的一些實施例,基于前述方案,在將所述value追加數(shù)據(jù)寫入所述待寫入空間中之前,所述方法還包括:
22、根據(jù)所述目標key確定所述第一value;
23、確定所述value追加數(shù)據(jù)的版本信息高于所述第一value中的版本信息。
24、根據(jù)本公開實施例的第二方面,提供了一種追加數(shù)據(jù)寫入裝置,包括:
25、存儲模塊,用于預(yù)先將lsm存儲引擎中sst文件中的第一value分離存儲至blob文件中,并在所述blob文件中增設(shè)預(yù)設(shè)大小的待寫入空間得到第二value;
26、更新模塊,用于在所述第一value中存儲所述blob文件對應(yīng)的blob位置索引以更新所述第一value;
27、查詢模塊,用于響應(yīng)于value追加數(shù)據(jù)的寫入請求,在所述lsm中查詢是否存在與所述value追加數(shù)據(jù)對應(yīng)的目標key;
28、寫入模塊,用于在存在所述目標key時,將所述value追加數(shù)據(jù)寫入所述目標key對應(yīng)的blob文件中的所述待寫入空間中。
29、根據(jù)本公開實施例的第三方面,提供了一種計算機可讀存儲介質(zhì),其上存儲有計算機程序,所述程序被處理器執(zhí)行時實現(xiàn)如上述實施例中的追加數(shù)據(jù)寫入方法。
30、根據(jù)本公開實施例的第四方面,提供了一種電子設(shè)備,其特征在于,包括:一個或多個處理器;存儲裝置,用于存儲一個或多個程序,當所述一個或多個程序被所述一個或多個處理器執(zhí)行時,使得所述一個或多個處理器實現(xiàn)如上述實施例中的追加數(shù)據(jù)寫入方法。
31、本公開示例性實施例可以具有以下部分或全部有益效果:
32、在本公開的一些實施例所提供的技術(shù)方案中,對存儲格式進行設(shè)計,將value數(shù)據(jù)kv分離機制的基礎(chǔ)上,提前在kv分離后的blob文件中對每個value預(yù)留一部分磁盤空間,序列追加更新時直接寫入到blob文件中value的尾部。這樣一來value追加數(shù)據(jù)更新時,能夠原地更新value數(shù)據(jù),將其寫入預(yù)留的待寫入空間中,可以省去不必要的大量磁盤讀寫,提高更新效率,從而顯著提升存儲引擎在此場景下的服務(wù)性能。
33、應(yīng)當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不能限制本公開。
本文檔來自技高網(wǎng)...【技術(shù)保護點】
1.一種追加數(shù)據(jù)寫入方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的追加數(shù)據(jù)寫入方法,其特征在于,在不存在所述目標key時,所述方法還包括:
3.根據(jù)權(quán)利要求1所述的追加數(shù)據(jù)寫入方法,其特征在于,在將所述value追加數(shù)據(jù)寫入所述待寫入空間中之前,所述方法還包括:
4.根據(jù)權(quán)利要求3所述的追加數(shù)據(jù)寫入方法,其特征在于,對所述blob文件中的待寫入空間進行空間校驗,包括:
5.根據(jù)權(quán)利要求3所述的追加數(shù)據(jù)寫入方法,其特征在于,對所述blob文件中的待寫入空間進行有效性校驗,包括:
6.根據(jù)權(quán)利要求1所述的追加數(shù)據(jù)寫入方法,其特征在于,所述第一value包括版本信息、已使用空間大小、blob位置索引;所述第二value包括value序列數(shù)據(jù)和待寫入空間。
7.根據(jù)權(quán)利要求1所述的追加數(shù)據(jù)寫入方法,其特征在于,在將所述value追加數(shù)據(jù)寫入所述待寫入空間中之前,所述方法還包括:
8.一種追加數(shù)據(jù)寫入裝置,其特征在于,包括:
9.一種計算機可讀存儲介質(zhì),其上存儲有計算機程序,所述程序被處理器
10.一種電子設(shè)備,其特征在于,包括:
...【技術(shù)特征摘要】
1.一種追加數(shù)據(jù)寫入方法,其特征在于,包括:
2.根據(jù)權(quán)利要求1所述的追加數(shù)據(jù)寫入方法,其特征在于,在不存在所述目標key時,所述方法還包括:
3.根據(jù)權(quán)利要求1所述的追加數(shù)據(jù)寫入方法,其特征在于,在將所述value追加數(shù)據(jù)寫入所述待寫入空間中之前,所述方法還包括:
4.根據(jù)權(quán)利要求3所述的追加數(shù)據(jù)寫入方法,其特征在于,對所述blob文件中的待寫入空間進行空間校驗,包括:
5.根據(jù)權(quán)利要求3所述的追加數(shù)據(jù)寫入方法,其特征在于,對所述blob文件中的待寫入空間進行有效性校驗,包括:
6.根...
【專利技術(shù)屬性】
技術(shù)研發(fā)人員:柳奇濤,張磊,李雪冬,黃崛,駱庚,
申請(專利權(quán))人:杭州網(wǎng)易云音樂科技有限公司,
類型:發(fā)明
國別省市:
還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會獲得科技券。