李楠



摘要:對區塊鏈上數據查詢功能單一且查詢效率低等問題,提出一種查詢技術的優化方案,該方案對區塊鏈的Merkle樹進行了修改,結合了B+樹的結構,不僅能夠快速驗證(基于M-B+樹根hash),還可以利用B+樹的結構快速查找特定記錄。并將交易的關鍵信息和對應的區塊號等數據存入到關系數據庫MySQL中,從而支持關系查詢。實驗結果表明,基于M-B+樹的區塊鏈系統不僅查詢速度效率提升而且具有豐富的查詢手段。
關鍵詞:區塊鏈;超級賬本;關系查詢;B+樹
中圖分類號:TP3? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)11-0213-03
1 引言
區塊鏈技術主要是解決在分布式、不可信的場景下進行安全、可靠、不可更改的交易問題。目前研究內容涉及:系統性能分析、安全性能和共識算法研究、技術應用探索等方面,查詢技術和底層數據管理研究不多,由于區塊鏈采用鏈式結構,在查詢的業務場景中,查詢效率低、方法有限,且時間復雜度高,使區塊鏈技術應用價值被削弱。
在查詢領域的研究主要有兩大方向:第一種,對結點進行區分,并且對查詢的路徑進行優化,來提升查詢效率,但是這種方法還是在區塊鏈原有的查詢方式上進行優化,對原有的區塊鏈查詢功能沒有提升;第二種,將區塊鏈和現有的數據庫連接,借助數據庫豐富的查詢功能,但是這種方法存在數據庫數據安全問題。
第一種方法只是對現有的節點進行優化,在區塊鏈原有的查詢方式上進行優化,卻沒有從區塊鏈本身進行相應的提升改進,對原有的區塊鏈查詢功能應用場景和查詢手段的改進不大;第二種,將區塊鏈和現有的數據庫連接,使用數據庫豐富的查詢功能,但是存在數據庫數據的安全問題,而且會使區塊鏈系統的復雜性變大,使系統的運行效率變低。
為了解決區塊鏈查詢效率低,豐富查詢功能。本文提出一種新的區塊鏈查詢方法:結合B+樹和Merkle樹的各自特點,建立基于M-B+樹的區塊存儲結構,并將區塊號同步到數據庫,在進行查詢時先在數據庫中查找到相應區塊號后,然后到對應區塊查詢數據,因為數據庫只保留了區塊號,數據都在鏈上,這樣解決了數據庫數據被篡改的風險。
2 相關工作
針對區塊鏈查詢,目前的研究如下:
賈大宇等[1]在ElasticChain模型基礎上,提出一種新的高效查詢方法:ElasticQM。該框架主要在數據層建立B-M樹的區塊鏈存儲結構,提高局部查詢效率。
Trent等提出了BigchainDB[2]區塊鏈數據庫,具有高吞吐量、低延遲、大容量、豐富的查詢功能和去中心化、不可篡改和能夠進行數字資產創建、傳輸的特性。
北京眾享比特科技有限公司提出ChainSQL[3]技術,該技術是將數據庫的操作記錄各個節點共識之后記錄到區塊鏈上,如果共識執行失敗或不通過,數據庫執行回滾操作,這樣就實現了兼顧區塊鏈和傳統數據庫的優點。
余濤等[4]提出FabricSQL方法,該方法將鏈上的有效交易同步至SQL數據庫中,借助數據庫管理系統對區塊鏈數據關系查詢。
本文所提出一種區塊鏈數據關系查詢解決方案,對區塊鏈區塊結構修改,結合Merkle樹和B+樹的特點,建立M-B+區塊結構,并設計相關模塊結合數據庫,實現高效、安全的數據查詢。
3 區塊鏈結構設計
3.1 現有的區塊鏈區塊結構
在現有的區塊鏈系統中,區塊主要包含區塊頭、區塊體兩大部分。區塊頭包含:版本號、時間戳、難度系數、隨機數、前區塊hash、Merkle樹根hash;區塊體包含:魔法數、區塊大小、交易數量、交易詳情大小。如圖1所示。
區塊結構說明。在區塊頭中,版本號是用來標記當前區塊對應的系統版本,大小為4 byte;時間戳是記錄區塊創建的時間,大小為4 byte;難度系數是記錄區塊鏈工作量證明的難度目標,儲存格式為難度系數的hash;隨機數是記錄區塊鏈工作量的計算參數,大小為4 byte,存儲格式為hash;前區塊頭的hash是當前區塊的前一個區塊的區塊頭的hash,大小為32 byte;Merkle樹根hash是當前區塊打包所有的交易記錄都是以Merkle樹的方式記錄的,記錄的是交易樹根的hash,當有新的信息存入時,該字段會重新計算更新。
在區塊體中,魔法數是客戶端解析區塊數據時的識別碼,大小為4 byte,是不變常量;區塊大小為4 byte;交易數量,記錄上一個區塊創建之后到本區塊創建完成之間所有的交易筆數;交易詳情,記錄所有交易詳情,包括收支地址、比特幣收支數量、Merkle節點值和數字簽名等,采用的數據結構是Merkle樹。
區塊號,是區塊的編號,也稱區塊高度,從0開始計算,下一個區塊的為1,區塊號和區塊一一對應,可以根據區塊號快速查詢區塊的信息。
3.2 物流信息平臺中區塊結構設計
1)M-B+樹的區塊存儲結構
Merkle樹的結構設計可以保證了數據安全不被篡改,還能快速驗證數據的hash是否存在于區塊上,查找具體的信息時,根據區塊號找到相應的區塊,遍歷區塊查找相應的信息。隨著區塊鏈上的數據變多,查詢相關數據的效率越來越低。本節提出一種M-B+樹的區塊存儲結構,這種結構不僅結合了現有的Merkle樹的特點,又提高了查詢效率。
基于B+樹和Merkle樹的優點,設計了M-B+樹的區塊存儲結構。節點結構如圖2。
數據結構如下:
Node{
Node left;
Value value;
Hash hash;
Node right;
}
節點1-5的M-B+樹的區塊存儲結構如下:
2)基于M-B+樹的區塊鏈結構
基于M-B+樹的區塊結構,利用該結構搭建的區塊鏈,形成一種新的區塊鏈。
如圖所示,每一個區塊都存儲著M-B+樹根hash和M-B+樹根,樹的其余部分放在了區塊體中。在驗證相關數據是否存在于該區塊時只需要驗證是否和M-B+樹根hash相等就能快速得到結果。
4 區塊鏈查詢技術
下面將開始分析傳統的區塊鏈查詢方法,然后提出一種基于M-B+樹結構的區塊鏈查詢方法。
4.1 現有的區塊鏈查詢方法
在區塊鏈中,除了創世區塊,其他區塊都記錄了前一個區塊的hash,形成按時間順序組成的鏈。
在查找數據時,從區塊號或區塊哈希來確定所在的區塊,然后找到相應的區塊后,在交易信息中找到想要的交易記錄。
在交易過程中,查詢流程如下:一個SPV節點查詢交易地址,節點間的通信鏈接上建立起bloom過濾器,以Merkleblock消息的形式發送該區塊。Merkleblock消息包含區塊頭和一條連接目標交易與Merkle根的Merkle路徑,驗證交易的真實性。
4.2 基于M-B+樹的區塊鏈結構查詢方法
針對區塊鏈查詢方面的不足,本節會將基于M-B+樹的區塊鏈和關系型數據庫MySQL結合,將新生成的區塊的區塊號、M-B+樹哈希、M-B+路徑、交易信息同步到關系型數據庫MySQL中。
在關系型數據庫MySQL中,會將同步過來的區塊鏈的區塊號、M-B+樹哈希、M-B+路徑、交易信息進行判斷、同步、提取后,處理成MySQL數據庫要求的數據格式存儲。
查詢方法主要分為三個主要部分:數據處理和同步模塊、外部數據庫、查詢接口。在基于M-B+樹的區塊鏈運行過程中,數據判斷和提出模塊會通過區塊鏈的數據接口,將新生成的區塊的區塊號、M-B+樹哈希、M-B+路徑、交易信息同步到關系型數據庫MySQL中。
5 實驗與分析
本章主要是對基于M-B+樹的區塊鏈結構查詢方法進行試驗并和傳統的區塊鏈系統進行比較,并通過試驗結果證明方案可行性。
5.1 實驗環境
本文采用Hyperledger Fabric開源框架,基于M-B+樹的區塊結構搭建區塊鏈系統。實驗的硬件配置為:Intel Core I5-7300HQ 2.50 GHZ CPU和16GB內存的PC,操作系統為Windows10 專業版。使用VMware Workstation 12.5 建立虛擬機,在虛擬機上模擬實驗的真實節點,節點的內存為1GB,硬盤為25GB的Ubuntu16.04系統。數據來自脫敏的電子交易數據集和賬戶數據集。
圖6所示的實驗部署圖,為了構成P2P網絡,首先選擇一個普通結點作為初始節點,然后選擇一個超級節點和初始節點進行鏈接。普通節點只同步區塊頭,超級節點同步整個區塊的整體信息。當普通用戶獲取不在本節點的信息時,可以在超級節點上同步信息,減少普通用戶本地存儲。
5.2 實驗分析
實驗1:在兩個系統中分別錄入相同的原始數據,然后進行一筆交易信息的查詢,利用區塊鏈上的查詢的接口,控制變量,進行多組對照實驗。觀察兩個系統的查詢時間。
查詢時間如圖所示,由于單個查詢時間較短,采用1000筆重復查詢實驗然后取平均值。圖中的橫坐標是上鏈的數據量規模,分別是300M,600M和900M,縱坐標是時間值,通過實驗結果可以看出,基于M-B+樹的區塊鏈系統的查詢時間較傳統的區塊鏈系統查詢響應時間有著明顯的提升。
實驗2:在兩個系統中分別錄入相同的原始數據,然后利用外接數據庫MySQL提供的查詢接口,根據相同的區塊號進行信息查詢,取區塊號10、100、150、200、250、300進行查詢,觀察查詢時間。
如圖所示,利用外接數據庫提供的查詢接口,利用區塊號進行查詢實驗,通過對實驗結果進行分析,外接數據庫查詢時間相較于傳統查詢時間縮短。有些數據會緩存在服務器上,所以整體查詢時間比直接利用區塊鏈的查詢接口要快。
6 結束語
本文研究當前的區塊鏈系統的查詢技術,發現查詢功能不完善,效率低,對區塊鏈查詢方法進行了研究和改善。
傳統Fabric區塊鏈系統的查詢功能是通過文件系統和Key-value數據庫實現的,隨著區塊鏈技術的普及和廣泛應用在各行各業,系統對存儲數據的訪問方法支持不足,而且查詢功能單一、效率不高。本文針對在物流中區塊鏈查詢方面的不足,提出一種解決方案:基于M-B+樹的區塊鏈系統,該方案對區塊鏈的Merkle樹進行了修改,結合了B+樹的結構,能夠使區塊鏈系統在進行交易查詢時不僅能夠快速驗證(基于M-B+樹根hash),而且可以利用B+樹的結構快速查找特定記錄。而且基于M-B+樹的區塊鏈系統外接了MySQL數據庫,將新生成的區塊的區塊號、M-B+樹hash、M-B+路徑、交易信息同步到關系型數據庫MySQL中。利用MySQL數據庫豐富的查詢功能,能夠快速驗證和得到需要查詢的信息的區塊號,然后到區塊鏈中查找特定信息。
參考文獻:
[1] 賈大宇,信俊昌,王之瓊,等.存儲容量可擴展區塊鏈系統的高效查詢模型[J].軟件學報,2019,30(9):2655-2670.
[2] McConaghy T, Marques R, Müller A, et al. BigchainDB: a scalable blockchain database[J]. white paper, BigChainDB, 2016.
[3] Beijing PeerSafe Technology Limited Company. White paper for blockchain database application platform [EB/OL]. [2017-01-22]. http://chainsql.net/pdf/chainSql-WhitEpaper.pdf.
[4] 余濤,牛保寧,樊星.FabricSQL:區塊鏈數據的關系查詢[J].計算機工程與設計,2020,41(10):2988-2995.
【通聯編輯:代影】