本說明書實施例屬于計算機,尤其涉及一種區(qū)塊鏈系統(tǒng)中狀態(tài)數(shù)據(jù)的垃圾回收方法及區(qū)塊鏈節(jié)點。
背景技術(shù):
1、區(qū)塊鏈(blockchain)系統(tǒng)是分布式數(shù)據(jù)存儲、點對點傳輸、共識機制、加密算法等計算機技術(shù)的新型應用模式。區(qū)塊鏈系統(tǒng)中按照時間順序?qū)?shù)據(jù)區(qū)塊以順序相連的方式組合成鏈式數(shù)據(jù)結(jié)構(gòu),并以密碼學方式保證的不可篡改和不可偽造的分布式賬本。由于區(qū)塊鏈系統(tǒng)具有去中心化、信息不可篡改、自治性等特性,區(qū)塊鏈系統(tǒng)受到人們越來越多的重視和應用。
2、區(qū)塊鏈系統(tǒng)中可以通過樹形結(jié)構(gòu)來管理狀態(tài)數(shù)據(jù),前述樹形結(jié)構(gòu)可以包括但不限于mpt(merkle?patricia?tree)以及smt(sparse?merkle?tree,稀疏默克爾樹)等等。該樹形結(jié)構(gòu)中的一個葉子節(jié)點存儲一個狀態(tài)變量的value,該樹形結(jié)構(gòu)的根節(jié)點至葉子節(jié)點間的有向路徑中的部分信息組成狀態(tài)變量的key,數(shù)據(jù)存儲系統(tǒng)中可存儲該樹形結(jié)構(gòu)中樹節(jié)點自身的key-value對;基于不同版本的狀態(tài)數(shù)據(jù)各自對應的樹形結(jié)構(gòu),可計算出不同的狀態(tài)根(state_root)哈希,狀態(tài)根哈??梢宰鳛橄鄳姹镜臓顟B(tài)數(shù)據(jù)的標識并錨定至相應的區(qū)塊頭中。
3、基于前述樹形結(jié)構(gòu)的特點,區(qū)塊鏈系統(tǒng)中可以實現(xiàn)以僅追加的形式,通過相對較少的數(shù)據(jù)存儲量實現(xiàn)存儲生成的多個區(qū)塊所對應的多個版本的狀態(tài)數(shù)據(jù)。然而隨著狀態(tài)數(shù)據(jù)版本的大量增加,仍然會導致區(qū)塊鏈系統(tǒng)所存儲狀態(tài)數(shù)據(jù)的數(shù)據(jù)量大幅增加,需要持續(xù)的對數(shù)據(jù)存儲系統(tǒng)中所存儲的狀態(tài)數(shù)據(jù)進行剪枝/數(shù)據(jù)治理,以刪除較早版本的狀態(tài)數(shù)據(jù)。
技術(shù)實現(xiàn)思路
1、本發(fā)明的目的在于提供一種區(qū)塊鏈系統(tǒng)中狀態(tài)數(shù)據(jù)的垃圾回收方法及區(qū)塊鏈節(jié)點。
2、第一方面,提供了一種區(qū)塊鏈系統(tǒng)中狀態(tài)數(shù)據(jù)的垃圾回收方法,所述區(qū)塊鏈系統(tǒng)通過持久化存儲介質(zhì)存儲多個數(shù)據(jù)文件和多個索引文件,所述數(shù)據(jù)文件中存儲狀態(tài)變量的變量值,所述索引文件中存儲多個索引條目以及基于所述多個索引條目確定的數(shù)據(jù)文件使用信息,所述索引條目包括狀態(tài)變量的變量值在所述持久化存儲介質(zhì)中的位置信息,所述方法包括:根據(jù)所述多個索引文件中的數(shù)據(jù)文件使用信息,預測所述多個數(shù)據(jù)文件的垃圾比;根據(jù)所述多個數(shù)據(jù)文件的垃圾比,從所述多個數(shù)據(jù)文件中確定待回收的目標數(shù)據(jù)文件;從所述目標數(shù)據(jù)文件中選擇有效數(shù)據(jù),并利用所述有效數(shù)據(jù)生成新數(shù)據(jù)文件;從所述持久化存儲介質(zhì)中刪除所述目標數(shù)據(jù)文件,向所述持久化存儲介質(zhì)存入所述新數(shù)據(jù)文件,以及在所述多個索引文件中,更新所述新數(shù)據(jù)文件中的變量值所對應的索引條目。
3、第二方面,提供了一種區(qū)塊鏈系統(tǒng)中的區(qū)塊鏈節(jié)點,所述區(qū)塊鏈系統(tǒng)通過持久化存儲介質(zhì)存儲多個數(shù)據(jù)文件和多個索引文件,所述數(shù)據(jù)文件中存儲狀態(tài)變量的變量值,所述索引文件中存儲多個索引條目以及基于所述多個索引條目確定的數(shù)據(jù)文件使用信息,所述索引條目包括狀態(tài)變量的變量值在所述持久化存儲介質(zhì)中的位置信息,所述區(qū)塊鏈節(jié)點包括:垃圾比預測單元,配置為根據(jù)所述多個索引文件中的數(shù)據(jù)文件使用信息,預測所述多個數(shù)據(jù)文件的垃圾比;目標確定單元,配置為根據(jù)所述多個數(shù)據(jù)文件的垃圾比,從所述多個數(shù)據(jù)文件中確定待回收的目標數(shù)據(jù)文件;文件生成單元,配置為從所述目標數(shù)據(jù)文件中選擇有效數(shù)據(jù),并利用所述有效數(shù)據(jù)生成新數(shù)據(jù)文件;更新處理單元,配置為從所述持久化存儲介質(zhì)中刪除所述目標數(shù)據(jù)文件,向所述持久化存儲介質(zhì)存入所述新數(shù)據(jù)文件,并在所述多個索引文件中,更新所述新數(shù)據(jù)文件中的變量值所對應的索引條目。
4、第三方面,提供了一種計算設備,包括存儲器和處理器,所述存儲器中存儲有計算機程序,所述處理器執(zhí)行所述計算機程序時,實現(xiàn)第一方面中所述的方法。
5、第四方面,提供了一種計算機可讀存儲介質(zhì),其上存儲有計算機程序,當所述計算機程序在計算設備中執(zhí)行時,計算設備執(zhí)行第一方面中所述的方法。
6、本說明書實施例提供的技術(shù)方案中,通過在存儲于持久化存儲介質(zhì)的索引文件中直接維護該索引文件自身的數(shù)據(jù)文件使用信息,當持久化存儲介質(zhì)中的某些索引文件被刪除而需要對區(qū)塊鏈系統(tǒng)的狀態(tài)數(shù)據(jù)進行垃圾回收時,可以根據(jù)未被刪除的多個索引文件中所維護的數(shù)據(jù)文件使用信息,快速且高效的預測出當前時刻下于持久化存儲介質(zhì)中存儲的多個數(shù)據(jù)文件的垃圾比,無需在每次進行垃圾回收時,均對多個索引文件中的索引條目進行遍歷來準確計算多個數(shù)據(jù)文件各自的垃圾比,有利于更加快速且高效的實施對狀態(tài)數(shù)據(jù)進行垃圾回收。
1.一種區(qū)塊鏈系統(tǒng)中狀態(tài)數(shù)據(jù)的垃圾回收方法,所述區(qū)塊鏈系統(tǒng)通過持久化存儲介質(zhì)存儲多個數(shù)據(jù)文件和多個索引文件,所述數(shù)據(jù)文件中存儲狀態(tài)變量的變量值,所述索引文件中存儲多個索引條目以及基于所述多個索引條目確定的數(shù)據(jù)文件使用信息,所述索引條目包括狀態(tài)變量的變量值在所述持久化存儲介質(zhì)中的位置信息,所述方法包括:
2.根據(jù)權(quán)利要求1所述的方法,所述位置信息包括,對應的變量值所屬數(shù)據(jù)文件的文件標識、對應的變量值在所屬數(shù)據(jù)文件中的地址偏移量和數(shù)據(jù)長度。
3.根據(jù)權(quán)利要求1所述的方法,所述區(qū)塊鏈系統(tǒng)中通過樹形結(jié)構(gòu)管理狀態(tài)數(shù)據(jù),所述樹形結(jié)構(gòu)的一個葉子節(jié)點中,存儲一個狀態(tài)變量的變量值在所述持久化存儲介質(zhì)中的位置信息,所述樹形結(jié)構(gòu)的根節(jié)點至所述葉子節(jié)點間的有向路徑中,存儲所述狀態(tài)變量的key;
4.根據(jù)權(quán)利要求3所述的方法,所述樹形結(jié)構(gòu)被劃分為多個邏輯頁;
5.根據(jù)權(quán)利要求4所述的方法,所述索引文件中的數(shù)據(jù)文件使用信息包括若干使用記錄,所述若干使用記錄用于指示若干第一文件標識以及其各自對應的數(shù)據(jù)占用比例,所述若干第一文件標識提取自所述若干索引條目中的位置信息,所述數(shù)據(jù)占用比例是若干目標索引條目所對應各個變量值的累計數(shù)據(jù)長度,與對應的第一文件標識所指示數(shù)據(jù)文件的文件大小間的比值,所述若干目標索引條目屬于所述若干索引條目且包括所述對應的第一文件標識。
6.根據(jù)權(quán)利要求5所述的方法,所述根據(jù)所述多個索引文件中的數(shù)據(jù)文件使用信息,預測所述多個數(shù)據(jù)文件的垃圾比,包括:對于所述多個數(shù)據(jù)文件中的任意數(shù)據(jù)文件,從所述多個索引文件各自存儲的若干使用記錄中,確定出與所述數(shù)據(jù)文件的文件標識相對應的若干目標數(shù)據(jù)占用比例,基于所述若干目標數(shù)據(jù)占用比例確定所述數(shù)據(jù)文件的垃圾比。
7.根據(jù)權(quán)利要求1所述的方法,所述從所述目標數(shù)據(jù)文件中選擇有效數(shù)據(jù),包括:遍歷所述多個索引文件中的索引條目,當所述索引條目中所包括的位置信息指向所述目標數(shù)據(jù)文件時,將所述目標數(shù)據(jù)文件中與所述位置信息對應的數(shù)據(jù)內(nèi)容作為有效數(shù)據(jù)。
8.一種區(qū)塊鏈系統(tǒng)中的區(qū)塊鏈節(jié)點,所述區(qū)塊鏈系統(tǒng)通過持久化存儲介質(zhì)存儲多個數(shù)據(jù)文件和多個索引文件,所述數(shù)據(jù)文件中存儲狀態(tài)變量的變量值,所述索引文件中存儲多個索引條目以及基于所述多個索引條目確定的數(shù)據(jù)文件使用信息,所述索引條目包括狀態(tài)變量的變量值在所述持久化存儲介質(zhì)中的位置信息,所述區(qū)塊鏈節(jié)點包括:
9.一種計算設備,包括存儲器和處理器,所述存儲器中存儲有計算機程序,所述處理器執(zhí)行所述計算機程序時,實現(xiàn)權(quán)利要求1-7中任一項所述的方法。
10.一種計算機可讀存儲介質(zhì),其上存儲有計算機程序,當所述計算機程序在計算設備中執(zhí)行時,計算設備執(zhí)行權(quán)利要求1-7中任一項所述的方法。