本發(fā)明涉及目錄數(shù)據(jù),特別是涉及一種基于區(qū)塊鏈的鏈上目錄數(shù)據(jù)存儲和檢索方法、一種基于區(qū)塊鏈的鏈上目錄數(shù)據(jù)存儲和檢索裝置、一種電子設(shè)備以及一種計算機(jī)可讀介質(zhì)。
背景技術(shù):
1、基于區(qū)塊鏈的多方協(xié)作數(shù)據(jù)交易和共享技術(shù),目前已經(jīng)有較多技術(shù)方案,一般均采用目錄數(shù)據(jù)鏈上存儲的方式來實現(xiàn)目錄的共享,例如cn113239376a、cn113420319a、cn110969429a、cn111090385a所公開的方案等。
2、國內(nèi)聯(lián)盟區(qū)塊鏈技術(shù)近年來有長足進(jìn)步,領(lǐng)先的區(qū)塊鏈底層平臺例如fisco-bcos已經(jīng)支持鏈上二維關(guān)系表的存儲結(jié)構(gòu),但是存在一些不同于數(shù)據(jù)庫二維關(guān)系表的限制,以fisco-bcos為例,主要包括:每個鏈上二維表必須有一個key字段,key允許相同但是相同key所能容納的記錄數(shù)有限制,一般在數(shù)萬;不能為key以外的二維的字段建立索引;任意查詢均需設(shè)置key字段的取值即不支持全表查詢。
3、前述cn113239376a、cn113420319a、cn110969429a專利公開的現(xiàn)有技術(shù)方案,并未對目錄在鏈上如何存儲,以利于數(shù)據(jù)需求方基于區(qū)塊鏈快速檢索到自身所需的數(shù)據(jù)目錄做出任何設(shè)計,而基于區(qū)塊鏈所獨(dú)有的塊鏈?zhǔn)浇灰状鎯Y(jié)構(gòu)以及key-value的世界狀態(tài)存儲結(jié)構(gòu),需求方難以實現(xiàn)快速檢索的目的。如果采用遍歷交易的方式獲取,考慮到目錄的更新情況,數(shù)據(jù)需求方檢索某一個數(shù)據(jù)目錄需遍歷區(qū)塊鏈中的所有歷史交易,而區(qū)塊鏈的歷史交易是不斷增加而不可刪除的;如采用key-value方式,則需確保key中包含了需求方所可能使用的所有檢索條件,且如果需滿足模糊檢索,則需遍歷鏈上的全部目錄的key。在cn111090385a中公開了一種基于區(qū)塊鏈+在value中增加版本號、區(qū)塊號倒排索引的方式來提供檢索能力,但是這意味著每次檢索都必須要提供數(shù)據(jù)目錄的版本號,而數(shù)據(jù)需求方較難提前知曉版本號。
4、總的來說,現(xiàn)有技術(shù)存在以下缺點:
5、1、鏈上查詢效率較低、實施難度較大:cn113239376a、cn113420319a、cn110969429a未對鏈上目錄數(shù)據(jù)快速查詢提供設(shè)計,在cn111090385a中公開了一種基于區(qū)塊鏈+在value中增加版本號、區(qū)塊號倒排索引的方式來提供檢索能力,但是這意味著每次檢索都必須要提供數(shù)據(jù)目錄的版本號,而數(shù)據(jù)需求方難以提前知曉版本號。
6、2、未有針對有多個擁有數(shù)百萬個目錄條目(例如一整套電子檔案目錄或其他數(shù)據(jù))的目錄提供方的具體存儲、查詢機(jī)制的設(shè)計;
7、3、未有針對局部目錄條目更新、刪除等情況做良好設(shè)計,以確保僅更新必要的鏈上目錄條目,以及使得數(shù)據(jù)需求方及時獲取數(shù)據(jù)目錄變更。
技術(shù)實現(xiàn)思路
1、鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的一種基于區(qū)塊鏈的鏈上目錄數(shù)據(jù)存儲和檢索方法和相應(yīng)的一種基于區(qū)塊鏈的鏈上目錄數(shù)據(jù)存儲和檢索裝置、一種電子設(shè)備以及一種計算機(jī)可讀介質(zhì)。
2、本發(fā)明公開了一種基于區(qū)塊鏈的鏈上目錄數(shù)據(jù)存儲和檢索方法,所述方法包括:
3、響應(yīng)目錄提供方對目錄提供方記錄的全生命周期管理操作更新目錄提供方表,并基于目錄提供方表的更新執(zhí)行對目錄提供方記錄對應(yīng)的目錄表的全生命周期操作;所述全生命周期管理操作包括新增、刪除、更新;
4、響應(yīng)目錄提供方對目錄條目的全生命周期管理操作更新目錄提供方記錄對應(yīng)的目錄表;
5、響應(yīng)目錄需求方的目錄提供方查詢請求,生成目標(biāo)目錄提供方列表,并響應(yīng)目錄需求方的目錄條目查詢請求,從所述目錄提供方列表對應(yīng)的目錄表中查詢出目標(biāo)目錄條目;所述目錄提供方查詢請求攜帶目錄提供方記錄的字段信息;所述目錄條目查詢請求攜帶目錄條目的字段信息。
6、可選地,所述目錄提供方表用于記錄目錄提供方,每一條記錄代表一個目錄提供方;目錄提供方記錄的字段包括key字段、名稱、提供方公鑰、編碼、狀態(tài)、更新時間、創(chuàng)建時間、刪除時間、目錄數(shù)據(jù)更新時間,所述key字段為預(yù)設(shè)統(tǒng)一值;
7、所述目錄表的表名為對應(yīng)的目錄提供方的唯一性標(biāo)識;數(shù)據(jù)提供方的唯一性標(biāo)識為提供方公鑰、名稱、編碼的組合;
8、所述目錄表的每條記錄代表目錄提供方的一個目錄條目;目錄條目的字段包括key字段、自身id、名稱、編碼、創(chuàng)建時間、更新時間、子孫目錄更新時間,所述key字段為目錄條目所屬父目錄條目的id。
9、可選地,響應(yīng)目錄提供方對目錄提供方記錄的全生命周期管理操作更新目錄提供方表,并基于目錄提供方表的更新執(zhí)行對目錄提供方記錄對應(yīng)的目錄表的全生命周期操作,包括:
10、響應(yīng)所述目錄提供方的目錄提供方注冊請求,通過唯一性標(biāo)識對所述目錄提供方進(jìn)行唯一性檢查,并在通過檢查后于目錄提供方表上創(chuàng)建所述目錄提供方的目錄提供方記錄,以及創(chuàng)建所述目錄提供方記錄對應(yīng)的目錄表;
11、或,響應(yīng)所述目錄提供方的目錄提供方更新請求,通過唯一性標(biāo)識對所述目錄提供方進(jìn)行唯一性檢查和通過提供方公鑰對所述目錄提供方進(jìn)行權(quán)限檢查,并在通過檢查后于目錄提供方表上更新所述目錄提供方的目錄提供方記錄;
12、或,響應(yīng)所述目錄提供方的目錄提供方刪除請求,通過提供方公鑰對所述目錄提供方進(jìn)行權(quán)限檢查,并在通過檢查后于目錄提供方表上雙刪除所述目錄提供方的目錄提供方記錄。
13、可選地,響應(yīng)目錄提供方對目錄條目的全生命周期管理操作更新目錄提供方記錄對應(yīng)的目錄表,包括:
14、根據(jù)提供方公鑰查詢目錄提供方表得到提供方公鑰對應(yīng)的目錄提供方記錄,并根據(jù)目錄提供方記錄確定目錄提供方的唯一性標(biāo)識;
15、根據(jù)所述目錄提供方的唯一性標(biāo)識確定需操作的目錄表的表名;
16、根據(jù)入?yún)l目信息記載的目錄條目自身id進(jìn)行目錄條目重復(fù)性檢查,并在通過檢查后于所述表名對應(yīng)的目錄表中插入包含入?yún)l目信息的目錄條目;所述入?yún)l目信息記載key字段為目錄條目所屬父目錄條目的id;
17、或,根據(jù)入?yún)l目信息記載的目錄條目自身id進(jìn)行目錄條目重復(fù)性檢查,并在通過檢查后根據(jù)所述目錄條目自身id和key字段為目錄條目所屬父目錄條目的id,在所述表名對應(yīng)的目錄表中查找目標(biāo)目錄條目,更新所述目標(biāo)目錄條目中的字段;
18、或,根據(jù)入?yún)l目信息記載的目錄條目自身id和key字段為目錄條目所屬父目錄條目的id,在所述表名對應(yīng)的目錄表中查找目標(biāo)目錄條目,刪除所述目標(biāo)目錄條目或所述目標(biāo)目錄條目中的字段。
19、可選地,所述方法還包括:
20、響應(yīng)目錄需求方的目錄提供方查詢請求,獲得所有目錄提供方列表,并按照目錄層級結(jié)構(gòu),查詢所有目錄提供方列表中每個目錄提供方的所有目錄條目并存儲至本地。
21、可選地,所述方法還包括:
22、響應(yīng)目錄需求方的目錄提供方查詢請求,獲得所有目錄提供方列表,并以上次成功同步時刻作為入?yún)?,查詢?dāng)前時刻與上次成功同步時刻之間所有的目錄條目并存儲至本地。
23、可選地,所述方法還包括:
24、通過監(jiān)聽機(jī)制監(jiān)聽鏈上目錄數(shù)據(jù)的目錄條目變更事件,根據(jù)目錄條目變更事件自動同步本地目錄數(shù)據(jù)與鏈上目錄數(shù)據(jù)。
25、本發(fā)明還公開了一種基于區(qū)塊鏈的鏈上目錄數(shù)據(jù)存儲和檢索裝置,所述裝置包括:
26、目錄提供方和目錄表操作模塊,用于響應(yīng)目錄提供方對目錄提供方記錄的全生命周期管理操作更新目錄提供方表,并基于目錄提供方表的更新執(zhí)行對目錄提供方記錄對應(yīng)的目錄表的全生命周期操作;所述全生命周期管理操作包括新增、刪除、更新;
27、目錄條目操作模塊,用于響應(yīng)目錄提供方對目錄條目的全生命周期管理操作更新目錄提供方記錄對應(yīng)的目錄表;
28、檢索模塊,用于響應(yīng)目錄需求方的目錄提供方查詢請求,生成目標(biāo)目錄提供方列表,并響應(yīng)目錄需求方的目錄條目查詢請求,從所述目錄提供方列表對應(yīng)的目錄表中查詢出目標(biāo)目錄條目;所述目錄提供方查詢請求攜帶目錄提供方記錄的字段信息;所述目錄條目查詢請求攜帶目錄條目的字段信息。
29、可選地,所述目錄提供方表用于記錄目錄提供方,每一條記錄代表一個目錄提供方;目錄提供方記錄的字段包括key字段、名稱、提供方公鑰、編碼、狀態(tài)、更新時間、創(chuàng)建時間、刪除時間、目錄數(shù)據(jù)更新時間,所述key字段為預(yù)設(shè)統(tǒng)一值;
30、所述目錄表的表名為對應(yīng)的目錄提供方的唯一性標(biāo)識;數(shù)據(jù)提供方的唯一性標(biāo)識為提供方公鑰、名稱、編碼的組合;
31、所述目錄表的每條記錄代表目錄提供方的一個目錄條目;目錄條目的字段包括key字段、自身id、名稱、編碼、創(chuàng)建時間、更新時間、子孫目錄更新時間,所述key字段為目錄條目所屬父目錄條目的id。
32、可選地,所述目錄提供方和目錄表操作模塊包括:
33、新增子模塊,用于響應(yīng)所述目錄提供方的目錄提供方注冊請求,通過唯一性標(biāo)識對所述目錄提供方進(jìn)行唯一性檢查,并在通過檢查后于目錄提供方表上創(chuàng)建所述目錄提供方的目錄提供方記錄,以及創(chuàng)建所述目錄提供方記錄對應(yīng)的目錄表;
34、或,更新子模塊,用于響應(yīng)所述目錄提供方的目錄提供方更新請求,通過唯一性標(biāo)識對所述目錄提供方進(jìn)行唯一性檢查和通過提供方公鑰對所述目錄提供方進(jìn)行權(quán)限檢查,并在通過檢查后于目錄提供方表上更新所述目錄提供方的目錄提供方記錄;
35、或,刪除子模塊,用于響應(yīng)所述目錄提供方的目錄提供方刪除請求,通過提供方公鑰對所述目錄提供方進(jìn)行權(quán)限檢查,并在通過檢查后于目錄提供方表上雙刪除所述目錄提供方的目錄提供方記錄。
36、可選地,所述目錄條目操作模塊包括:
37、唯一性標(biāo)識確定子模塊,用于根據(jù)提供方公鑰查詢目錄提供方表得到提供方公鑰對應(yīng)的目錄提供方記錄,并根據(jù)目錄提供方記錄確定目錄提供方的唯一性標(biāo)識;
38、表名確定子模塊,用于根據(jù)所述目錄提供方的唯一性標(biāo)識確定需操作的目錄表的表名;
39、目錄條目新增子模塊,用于根據(jù)入?yún)l目信息記載的目錄條目自身id進(jìn)行目錄條目重復(fù)性檢查,并在通過檢查后于所述表名對應(yīng)的目錄表中插入包含入?yún)l目信息的目錄條目;所述入?yún)l目信息記載key字段為目錄條目所屬父目錄條目的id;
40、或,目錄條目更新子模塊,用于根據(jù)入?yún)l目信息記載的目錄條目自身id進(jìn)行目錄條目重復(fù)性檢查,并在通過檢查后根據(jù)所述目錄條目自身id和key字段為目錄條目所屬父目錄條目的id,在所述表名對應(yīng)的目錄表中查找目標(biāo)目錄條目,更新所述目標(biāo)目錄條目中的字段;
41、或,目錄條目刪除子模塊,用于根據(jù)入?yún)l目信息記載的目錄條目自身id和key字段為目錄條目所屬父目錄條目的id,在所述表名對應(yīng)的目錄表中查找目標(biāo)目錄條目,刪除所述目標(biāo)目錄條目或所述目標(biāo)目錄條目中的字段。
42、可選地,所述裝置還包括:
43、第一本地同步共享模塊,用于響應(yīng)目錄需求方的目錄提供方查詢請求,獲得所有目錄提供方列表,并按照目錄層級結(jié)構(gòu),查詢所有目錄提供方列表中每個目錄提供方的所有目錄條目并存儲至本地。
44、可選地,所述裝置還包括:
45、第二本地同步共享模塊,用于響應(yīng)目錄需求方的目錄提供方查詢請求,獲得所有目錄提供方列表,并以上次成功同步時刻作為入?yún)?,查詢?dāng)前時刻與上次成功同步時刻之間所有的目錄條目并存儲至本地。
46、可選地,所述裝置還包括:
47、第三本地同步共享模塊,用于通過監(jiān)聽機(jī)制監(jiān)聽鏈上目錄數(shù)據(jù)的目錄條目變更事件,根據(jù)目錄條目變更事件自動同步本地目錄數(shù)據(jù)與鏈上目錄數(shù)據(jù)。
48、本發(fā)明還公開了一種電子設(shè)備,包括處理器、通信接口、存儲器和通信總線,其中,所述處理器、所述通信接口以及所述存儲器通過所述通信總線完成相互間的通信;
49、所述存儲器,用于存放計算機(jī)程序;
50、所述處理器,用于執(zhí)行存儲器上所存放的程序時,實現(xiàn)如本發(fā)明所述的基于區(qū)塊鏈的鏈上目錄數(shù)據(jù)存儲和檢索方法。
51、本發(fā)明還公開了一個或多個計算機(jī)可讀介質(zhì),其上存儲有指令,當(dāng)由一個或多個處理器執(zhí)行時,使得所述處理器執(zhí)行如本發(fā)明所述的基于區(qū)塊鏈的鏈上目錄數(shù)據(jù)存儲和檢索方法。
52、本發(fā)明包括以下優(yōu)點:
53、本發(fā)明的基于區(qū)塊鏈的鏈上目錄數(shù)據(jù)存儲和檢索方法,通過響應(yīng)目錄提供方對目錄提供方記錄的全生命周期管理操作更新目錄提供方表,并基于目錄提供方表的更新執(zhí)行對目錄提供方記錄對應(yīng)的目錄表的全生命周期操作,全生命周期管理操作包括新增、刪除、更新,響應(yīng)目錄提供方對目錄條目的全生命周期管理操作更新目錄提供方記錄對應(yīng)的目錄表,響應(yīng)目錄需求方的目錄提供方查詢請求,生成目標(biāo)目錄提供方列表,并響應(yīng)目錄需求方的目錄條目查詢請求,從目錄提供方列表對應(yīng)的目錄表中查詢出目標(biāo)目錄條目,目錄提供方查詢請求攜帶目錄提供方記錄的字段信息,目錄條目查詢請求攜帶目錄條目的字段信息。該方法創(chuàng)新地運(yùn)用先進(jìn)區(qū)塊鏈平臺提供的鏈上二維關(guān)系表的特性實現(xiàn)共享目錄數(shù)據(jù)的鏈上存儲,提供了基于二維關(guān)系表而非遍歷區(qū)塊交易或key-value數(shù)據(jù)庫精確查詢的能力,顯著提高了查詢的靈活性。并且創(chuàng)新性的實現(xiàn)了動態(tài)目錄表的創(chuàng)建,為每個目錄提供方在鏈上動態(tài)的創(chuàng)建目錄表,在多個目錄提供方同時存在時,既可顯著減少單表所具有的數(shù)據(jù)量而顯著提高查詢性能,也可有效解決不同目錄提供方目錄id可能重復(fù)的問題。