本技術(shù)涉及計算機(jī),尤其涉及一種基于區(qū)塊鏈的數(shù)據(jù)處理方法、裝置、設(shè)備及可讀存儲介質(zhì)。
背景技術(shù):
1、隨著區(qū)塊鏈技術(shù)的發(fā)展,基于區(qū)塊鏈的應(yīng)用逐漸落地,越來越多的數(shù)據(jù)被放置到區(qū)塊鏈中,以保證數(shù)據(jù)的不可篡改性。
2、現(xiàn)有的基于區(qū)塊鏈的去中心化應(yīng)用及其對應(yīng)的智能合約,在將第一對象的對象屬性數(shù)據(jù)存儲至區(qū)塊鏈網(wǎng)絡(luò)中時,通常是將第一對象對應(yīng)的某個唯一的特定信息作為key(鍵),例如,將第一對象的對象標(biāo)識作為key,然后將第一對象對應(yīng)的對象屬性數(shù)據(jù)作為value(值),以key-value的方式將其存儲至區(qū)塊鏈網(wǎng)絡(luò)對應(yīng)的狀態(tài)數(shù)據(jù)庫中。但是,將數(shù)據(jù)存儲進(jìn)區(qū)塊鏈的狀態(tài)數(shù)據(jù)庫中,所需工作量較大,相應(yīng)需要付出的資源就較多。而且,不管第一對象是新增對象屬性數(shù)據(jù)還是更改部分之前存儲的對象屬性數(shù)據(jù)時,均需要將所有對象屬性數(shù)據(jù)作為新的value,重新進(jìn)行存儲,因此,每次存儲第一對象均需要消耗較多的資源。此外,當(dāng)?shù)谝粚ο笮枰鎯Φ膶ο髮傩詳?shù)據(jù)逐漸增多時,第一對象存儲對象屬性數(shù)據(jù)所需要消耗的資源會越多。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)實(shí)施例提供了一種基于區(qū)塊鏈的數(shù)據(jù)處理方法、裝置、設(shè)備及可讀存儲介質(zhì),可以降低區(qū)塊鏈中存儲對象屬性數(shù)據(jù)的資源消耗。
2、本技術(shù)實(shí)施例一方面提供了一種基于區(qū)塊鏈的數(shù)據(jù)處理方法,包括:
3、執(zhí)行第一區(qū)塊中與第一對象相關(guān)的業(yè)務(wù)數(shù)據(jù),得到針對第一對象的業(yè)務(wù)執(zhí)行結(jié)果;業(yè)務(wù)執(zhí)行結(jié)果包含針對第一對象的一個或多個對象屬性,以及每個對象屬性對應(yīng)的對象屬性數(shù)據(jù);
4、調(diào)用對象數(shù)據(jù)存儲合約,若通過對象數(shù)據(jù)存儲合約確定狀態(tài)數(shù)據(jù)庫中已存儲有第一對象相關(guān)聯(lián)的區(qū)塊號,則獲取最大區(qū)塊號以及歷史相鄰區(qū)塊號;最大區(qū)塊號為第一區(qū)塊對應(yīng)的區(qū)塊號;歷史相鄰區(qū)塊號為第二區(qū)塊對應(yīng)的區(qū)塊號;第二區(qū)塊是指與第一對象相關(guān)聯(lián)的剩余區(qū)塊中,區(qū)塊高度最大的區(qū)塊;剩余區(qū)塊包括第一對象相關(guān)聯(lián)的區(qū)塊中除了第一區(qū)塊以外的區(qū)塊;
5、將第一對象對應(yīng)的第一對象標(biāo)識與最大區(qū)塊號存儲至狀態(tài)數(shù)據(jù)庫中,將第一對象標(biāo)識、業(yè)務(wù)執(zhí)行結(jié)果以及歷史相鄰區(qū)塊號存儲至第一區(qū)塊對應(yīng)的區(qū)塊日志中。
6、本技術(shù)實(shí)施例一方面提供了一種基于區(qū)塊鏈的數(shù)據(jù)處理裝置,包括:
7、執(zhí)行模塊,用于執(zhí)行第一區(qū)塊中與第一對象相關(guān)的業(yè)務(wù)數(shù)據(jù),得到針對第一對象的業(yè)務(wù)執(zhí)行結(jié)果;業(yè)務(wù)執(zhí)行結(jié)果包含針對第一對象的一個或多個對象屬性,以及每個對象屬性對應(yīng)的對象屬性數(shù)據(jù);
8、第一獲取模塊,用于調(diào)用對象數(shù)據(jù)存儲合約,若通過對象數(shù)據(jù)存儲合約確定狀態(tài)數(shù)據(jù)庫中已存儲有第一對象相關(guān)聯(lián)的區(qū)塊號,則獲取最大區(qū)塊號以及歷史相鄰區(qū)塊號;最大區(qū)塊號為第一區(qū)塊對應(yīng)的區(qū)塊號;歷史相鄰區(qū)塊號為第二區(qū)塊對應(yīng)的區(qū)塊號;第二區(qū)塊是指與第一對象相關(guān)聯(lián)的剩余區(qū)塊中,區(qū)塊高度最大的區(qū)塊;剩余區(qū)塊包括第一對象相關(guān)聯(lián)的區(qū)塊中除了第一區(qū)塊以外的區(qū)塊;
9、第一存儲模塊,用于將第一對象對應(yīng)的第一對象標(biāo)識與最大區(qū)塊號存儲至狀態(tài)數(shù)據(jù)庫中,將第一對象標(biāo)識、業(yè)務(wù)執(zhí)行結(jié)果以及歷史相鄰區(qū)塊號存儲至第一區(qū)塊對應(yīng)的區(qū)塊日志中。
10、其中,第一存儲模塊,包括:
11、第一存儲單元,用于調(diào)用對象數(shù)據(jù)存儲合約中的狀態(tài)數(shù)據(jù)庫更新函數(shù),通過狀態(tài)數(shù)據(jù)庫更新函數(shù)將第一對象對應(yīng)的第一對象標(biāo)識與最大區(qū)塊號存儲至狀態(tài)數(shù)據(jù)庫中;
12、第二存儲單元,用于調(diào)用對象數(shù)據(jù)存儲合約中的對象屬性更新事件,通過對象屬性更新事件,將第一對象標(biāo)識、業(yè)務(wù)執(zhí)行結(jié)果以及歷史相鄰區(qū)塊號存儲至第一區(qū)塊對應(yīng)的區(qū)塊日志中。
13、其中,第一存儲模塊,包括:
14、第三存儲單元,用于將第一對象對應(yīng)的第一對象標(biāo)識與最大區(qū)塊號存儲至狀態(tài)數(shù)據(jù)庫中;
15、格式轉(zhuǎn)換單元,用于對業(yè)務(wù)執(zhí)行結(jié)果進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換處理,得到具有數(shù)據(jù)解析格式的業(yè)務(wù)執(zhí)行數(shù)據(jù);具有數(shù)據(jù)解析格式的業(yè)務(wù)執(zhí)行數(shù)據(jù)包含一個或多個對象屬性組;一個對象屬性組包含一個對象屬性,以及一個對象屬性數(shù)據(jù);
16、第四存儲單元,用于將第一對象標(biāo)識、具有數(shù)據(jù)解析格式的業(yè)務(wù)執(zhí)行數(shù)據(jù)以及歷史相鄰區(qū)塊號存儲至第一區(qū)塊對應(yīng)的區(qū)塊日志中。
17、其中,上述數(shù)據(jù)處理裝置,還包括:
18、識別模塊,用于通過對象數(shù)據(jù)存儲合約,獲取第一對象對應(yīng)的第一對象標(biāo)識;
19、識別模塊,還用于在狀態(tài)數(shù)據(jù)庫中獲取第一對象標(biāo)識關(guān)聯(lián)的存儲數(shù)據(jù),對存儲數(shù)據(jù)進(jìn)行區(qū)塊號識別,得到區(qū)塊號識別結(jié)果;
20、識別模塊,還用于若區(qū)塊號識別結(jié)果為區(qū)塊號有效結(jié)果,則確定狀態(tài)數(shù)據(jù)庫中已存儲有第一對象相關(guān)聯(lián)的區(qū)塊號;
21、識別模塊,還用于若區(qū)塊號識別結(jié)果為區(qū)塊號無效結(jié)果,則確定狀態(tài)數(shù)據(jù)庫中未存儲有第一對象相關(guān)聯(lián)的區(qū)塊號。
22、其中,上述數(shù)據(jù)處理裝置,還包括:
23、第二獲取模塊,用于若通過對象數(shù)據(jù)存儲合約確定狀態(tài)數(shù)據(jù)庫中未存儲有第一對象相關(guān)聯(lián)的區(qū)塊號,則獲取最大區(qū)塊號以及初始化區(qū)塊號;初始化區(qū)塊號為無效區(qū)塊號;
24、第二存儲模塊,用于將第一對象對應(yīng)的第一對象標(biāo)識與最大區(qū)塊號存儲至狀態(tài)數(shù)據(jù)庫中,將第一對象標(biāo)識、業(yè)務(wù)執(zhí)行結(jié)果以及初始化區(qū)塊號存儲至第一區(qū)塊對應(yīng)的區(qū)塊日志中。
25、其中,上述數(shù)據(jù)處理裝置,還包括:
26、第三獲取模塊,用于獲取針對第一對象的對象屬性讀取請求;對象屬性讀取請求包括第一對象標(biāo)識;
27、第四獲取模塊,用于根據(jù)對象屬性讀取請求在狀態(tài)數(shù)據(jù)庫中獲取與第一對象標(biāo)識關(guān)聯(lián)的最大區(qū)塊號;
28、數(shù)據(jù)讀取模塊,用于從具有最大區(qū)塊號的第一區(qū)塊對應(yīng)的區(qū)塊日志開始遍歷與第一對象相關(guān)聯(lián)的區(qū)塊日志,獲取遍歷到的區(qū)塊日志中的業(yè)務(wù)執(zhí)行數(shù)據(jù),根據(jù)所獲取到的業(yè)務(wù)執(zhí)行數(shù)據(jù)生成用于響應(yīng)對象屬性讀取請求的完整對象屬性數(shù)據(jù)集;所遍歷到的最后一個區(qū)塊日志包含無效區(qū)塊號。
29、其中,數(shù)據(jù)讀取模塊,包括:
30、日志獲取單元,用于將具有最大區(qū)塊號的第一區(qū)塊對應(yīng)的區(qū)塊日志,作為查詢區(qū)塊日志;
31、數(shù)據(jù)獲取單元,用于獲取查詢區(qū)塊日志中與第一對象標(biāo)識關(guān)聯(lián)的業(yè)務(wù)執(zhí)行數(shù)據(jù);
32、數(shù)據(jù)集生成單元,用于根據(jù)查詢區(qū)塊日志中與第一對象標(biāo)識關(guān)聯(lián)的業(yè)務(wù)執(zhí)行數(shù)據(jù)對應(yīng)的業(yè)務(wù)執(zhí)行順序,生成針對第一對象的中間對象屬性數(shù)據(jù)集;
33、區(qū)塊號獲取單元,用于在查詢區(qū)塊日志中獲取與第一對象標(biāo)識對應(yīng)的關(guān)聯(lián)區(qū)塊號信息;
34、追溯更新單元,用于若查詢區(qū)塊日志中的關(guān)聯(lián)區(qū)塊號信息為歷史相鄰區(qū)塊號,則將具有歷史相鄰區(qū)塊號的區(qū)塊對應(yīng)的區(qū)塊日志,作為追溯查詢區(qū)塊日志,根據(jù)追溯查詢區(qū)塊日志對中間對象屬性數(shù)據(jù)集進(jìn)行更新,得到更新對象屬性數(shù)據(jù)集;
35、數(shù)據(jù)集確定單元,用于繼續(xù)遍歷追溯查詢區(qū)塊日志,若追溯查詢區(qū)塊日志中與第一對象標(biāo)識對應(yīng)的關(guān)聯(lián)區(qū)塊號信息為無效區(qū)塊號,則將更新對象屬性數(shù)據(jù)集,確定為用于響應(yīng)對象屬性讀取請求的完整對象屬性數(shù)據(jù)集。
36、其中,查詢區(qū)塊日志包含m個業(yè)務(wù)日志;業(yè)務(wù)日志包含合約地址、事件簽名、對象標(biāo)識以及業(yè)務(wù)存儲數(shù)據(jù);
37、數(shù)據(jù)獲取單元,包括:
38、第一遍歷子單元,用于遍歷m個業(yè)務(wù)日志,順序獲取第j個業(yè)務(wù)日志;j為小于或等于m的正整數(shù);
39、關(guān)系確定子單元,用于根據(jù)第j個業(yè)務(wù)日志包含的合約地址、事件簽名以及對象標(biāo)識確定第j個業(yè)務(wù)日志與第一對象標(biāo)識的關(guān)系結(jié)果;
40、第一處理子單元,用于若第j個業(yè)務(wù)日志與第一對象標(biāo)識的關(guān)系結(jié)果為不關(guān)聯(lián)結(jié)果,則繼續(xù)獲取第j+1個業(yè)務(wù)日志;
41、第二處理子單元,用于若第j個業(yè)務(wù)日志與第一對象標(biāo)識的關(guān)系結(jié)果為關(guān)聯(lián)結(jié)果,則將第j個業(yè)務(wù)日志包含的業(yè)務(wù)存儲數(shù)據(jù),確定為與第一對象標(biāo)識關(guān)聯(lián)的子數(shù)據(jù),繼續(xù)獲取第j+1個業(yè)務(wù)日志,直至遍歷完m個業(yè)務(wù)日志,將與第一對象標(biāo)識關(guān)聯(lián)的每個子數(shù)據(jù)確定為查詢區(qū)塊日志中與第一對象標(biāo)識關(guān)聯(lián)的業(yè)務(wù)執(zhí)行數(shù)據(jù)。
42、其中,關(guān)系確定子單元,具體還用于獲取第j個業(yè)務(wù)日志包含的合約地址;若第j個業(yè)務(wù)日志包含的合約地址不等于對象數(shù)據(jù)存儲合約的合約地址,則確定第j個業(yè)務(wù)日志與第一對象標(biāo)識的關(guān)系結(jié)果為不關(guān)聯(lián)結(jié)果;若第j個業(yè)務(wù)日志包含的合約地址等于對象數(shù)據(jù)存儲合約的合約地址,則確定與第一對象標(biāo)識關(guān)聯(lián)的對象屬性更新事件對應(yīng)的事件哈希;若事件哈希不等于第j個業(yè)務(wù)日志包含的事件簽名,則確定第j個業(yè)務(wù)日志與第一對象標(biāo)識的關(guān)系結(jié)果為不關(guān)聯(lián)結(jié)果;若事件哈希等于第j個業(yè)務(wù)日志包含的事件簽名,則獲取第j個業(yè)務(wù)日志包含的對象標(biāo)識;若第j個業(yè)務(wù)日志包含的對象標(biāo)識不等于第一對象標(biāo)識,則確定第j個業(yè)務(wù)日志與第一對象標(biāo)識的關(guān)系結(jié)果為不關(guān)聯(lián)結(jié)果;若第j個業(yè)務(wù)日志包含的對象標(biāo)識等于第一對象標(biāo)識,則確定第j個業(yè)務(wù)日志與第一對象標(biāo)識的關(guān)系結(jié)果為關(guān)聯(lián)結(jié)果。
43、其中,數(shù)據(jù)集生成單元,包括:
44、第二遍歷子單元,用于按照查詢區(qū)塊日志中與第一對象標(biāo)識關(guān)聯(lián)的業(yè)務(wù)執(zhí)行數(shù)據(jù)對應(yīng)的業(yè)務(wù)執(zhí)行順序,遍歷查詢區(qū)塊日志中與第一對象標(biāo)識關(guān)聯(lián)的業(yè)務(wù)執(zhí)行數(shù)據(jù),獲取第k個業(yè)務(wù)執(zhí)行數(shù)據(jù);k為小于或等于h的正整數(shù),h為業(yè)務(wù)執(zhí)行數(shù)據(jù)的總數(shù)量;第k個業(yè)務(wù)執(zhí)行數(shù)據(jù)對應(yīng)的業(yè)務(wù)執(zhí)行順序位于第k+1個業(yè)務(wù)執(zhí)行數(shù)據(jù)對應(yīng)的業(yè)務(wù)執(zhí)行順序之后;
45、融合更新子單元,用于根據(jù)第k個業(yè)務(wù)執(zhí)行數(shù)據(jù)對第k-1個更新對象屬性數(shù)據(jù)集進(jìn)行屬性融合更新處理,得到第k個更新對象屬性數(shù)據(jù)集;k為1時,第k-1個更新對象屬性數(shù)據(jù)集為初始化空集合;k不為1時,第k-1個更新對象屬性數(shù)據(jù)集包含已有對象屬性,和已有對象屬性對應(yīng)的對象屬性數(shù)據(jù);第k個更新對象屬性數(shù)據(jù)集包含第k-1個更新對象屬性數(shù)據(jù)集,以及新增對象屬性,和新增對象屬性對應(yīng)的對象屬性數(shù)據(jù);新增對象屬性為第k個業(yè)務(wù)執(zhí)行數(shù)據(jù)包含的業(yè)務(wù)對象屬性中,與已有對象屬性不相同的業(yè)務(wù)對象屬性;
46、確定子單元,用于當(dāng)查詢區(qū)塊日志中與第一對象標(biāo)識關(guān)聯(lián)的業(yè)務(wù)執(zhí)行數(shù)據(jù)遍歷完成,將第h個更新對象屬性數(shù)據(jù)集,確定為第一對象的中間對象屬性數(shù)據(jù)集。
47、其中,第k個業(yè)務(wù)執(zhí)行數(shù)據(jù)包含一個或多個業(yè)務(wù)對象屬性,以及每個業(yè)務(wù)對象屬性對應(yīng)的對象屬性數(shù)據(jù);
48、融合更新子單元,具體還用于若第k-1個更新對象屬性數(shù)據(jù)集為初始化空集合,則將一個或多個業(yè)務(wù)對象屬性,均確定為新增對象屬性;將新增對象屬性,以及新增對象屬性對應(yīng)的對象屬性數(shù)據(jù),添加至初始化空集合,得到第k個更新對象屬性數(shù)據(jù)集;若第k-1個更新對象屬性數(shù)據(jù)集不為初始化空集合,則將一個或多個業(yè)務(wù)對象屬性中,與第k-1個更新對象屬性數(shù)據(jù)集包含的已有對象屬性不相同的業(yè)務(wù)對象屬性,確定為新增對象屬性;將新增對象屬性,以及新增對象屬性對應(yīng)的對象屬性數(shù)據(jù),添加至初始化空集合,得到第k個更新對象屬性數(shù)據(jù)集。
49、本技術(shù)實(shí)施例一方面提供了一種計算機(jī)設(shè)備,包括:處理器、存儲器、網(wǎng)絡(luò)接口;
50、上述處理器與上述存儲器、上述網(wǎng)絡(luò)接口相連,其中,上述網(wǎng)絡(luò)接口用于提供數(shù)據(jù)通信網(wǎng)元,上述存儲器用于存儲計算機(jī)程序,上述處理器用于調(diào)用上述計算機(jī)程序,以執(zhí)行本技術(shù)實(shí)施例中的方法。
51、本技術(shù)實(shí)施例一方面提供了一種計算機(jī)可讀存儲介質(zhì),上述計算機(jī)可讀存儲介質(zhì)中存儲有計算機(jī)程序,上述計算機(jī)程序適于由處理器加載并執(zhí)行本技術(shù)實(shí)施例中的方法。
52、本技術(shù)實(shí)施例一方面提供了一種計算機(jī)程序產(chǎn)品或計算機(jī)程序,該計算機(jī)程序產(chǎn)品或計算機(jī)程序包括計算機(jī)指令,該計算機(jī)指令存儲在計算機(jī)可讀存儲介質(zhì)中,計算機(jī)設(shè)備的處理器從計算機(jī)可讀存儲介質(zhì)讀取該計算機(jī)指令,處理器執(zhí)行該計算機(jī)指令,使得該計算機(jī)設(shè)備執(zhí)行本技術(shù)實(shí)施例中的方法。
53、本技術(shù)實(shí)施例中,執(zhí)行第一區(qū)塊中與第一對象相關(guān)的業(yè)務(wù)數(shù)據(jù),得到針對第一對象的業(yè)務(wù)執(zhí)行結(jié)果后,可以調(diào)用對象數(shù)據(jù)存儲合約,若通過對象數(shù)據(jù)存儲合約確定狀態(tài)數(shù)據(jù)庫中已存儲有第一對象相關(guān)聯(lián)的區(qū)塊號,則獲取最大區(qū)塊號以及歷史相鄰區(qū)塊號,然后將第一對象對應(yīng)的第一對象標(biāo)識與最大區(qū)塊號存儲至狀態(tài)數(shù)據(jù)庫中,將第一對象標(biāo)識、業(yè)務(wù)執(zhí)行結(jié)果以及歷史相鄰區(qū)塊號存儲至第一區(qū)塊對應(yīng)的區(qū)塊日志中。其中,業(yè)務(wù)執(zhí)行結(jié)果包含針對所述第一對象的一個或多個對象屬性,以及每個對象屬性對應(yīng)的對象屬性數(shù)據(jù);最大區(qū)塊號為第一區(qū)塊對應(yīng)的區(qū)塊號;歷史相鄰區(qū)塊號為第二區(qū)塊對應(yīng)的區(qū)塊號;第二區(qū)塊是指與第一對象相關(guān)聯(lián)的剩余區(qū)塊中,區(qū)塊高度最大的區(qū)塊;剩余區(qū)塊包括第一對象相關(guān)聯(lián)的區(qū)塊中除了第一區(qū)塊以外的區(qū)塊。通過本技術(shù)實(shí)施例提供的方法,第一對象對應(yīng)的對象屬性數(shù)據(jù)不用寫入狀態(tài)數(shù)據(jù)庫中,而是寫入當(dāng)前區(qū)塊的區(qū)塊日志中,因?yàn)樵趨^(qū)塊日志中存儲數(shù)據(jù)所需的資源消耗遠(yuǎn)小于在狀態(tài)數(shù)據(jù)庫中存儲數(shù)據(jù)所需的資源消耗,因此可以降低存儲對象屬性數(shù)據(jù)的資源消耗;此外,通過在區(qū)塊日志中寫入歷史相鄰區(qū)塊號,可以獲取之前的區(qū)塊日志中存儲的對象屬性數(shù)據(jù),因此每次存儲第一對象對應(yīng)的對象屬性數(shù)據(jù)時,只需存儲需要更新或者新增的對象屬性數(shù)據(jù)即可,無需將所有的對象屬性數(shù)據(jù)重新進(jìn)行存儲,可以減少存儲數(shù)據(jù)量,從而進(jìn)一步降低存儲對象屬性數(shù)據(jù)的資源消耗。