物化視圖介紹
- 如何維護物化視圖仍舊是一個開放問題.在關系數據庫中,增量刷新的物化視圖維護策略可劃分為立即維護和延遲維護兩大類.
- 立即維護策略的優點是實現較為簡單,在單數據源下不 存在一致性問題;然而該策略將物化視圖維護過程嵌入到更新事務之中,延長了更新事務的提交時間,這在高并發的情況下易發生死鎖.
- 延遲維護策略解耦合視圖維護和更新事務,在 OLTP 場景下,可以通過合并無關更新的方法縮短視圖維護時間;但是此策略存在一致性問題,若視圖未更新完畢則不可使用.在延遲維護策略的諸多實現方法中,按需維護較為常見,即:等待查詢到來之后,只維護與查詢相關的物化視圖.
將物化視圖應用到區塊鏈的可行性分析
-
在關系語義的區塊數據,采用關系數據庫,普遍使用物化視圖的方式來提升查詢的性能。在區塊鏈中,系統需要查詢某張表的時候需要掃描所有的數據塊,當數據量龐大的時候,即使采用掃描索引也會造成巨大的查詢開銷,因此將物化視圖應用到區塊鏈上,可以優化查詢的處理效率。
問題與挑戰
- 因為區塊鏈和關系數據庫系統的存儲模型和更新系統不一樣,比如,區塊鏈以區塊為單位進行更新,單個區塊包含多條交易,并且內部的交易需要通過共識來完成。因此,在區塊鏈條建立、維護物化視圖將面臨以下的挑戰
- (1)如何選擇物化視圖的寫入時機.區塊鏈的寫入性能受到分布式共識、智能合約執行限制,而物化視圖的維護開銷對系統的性能帶來額外影響.因此,如何合理選擇視圖維護的時機來降低視圖維護對系統 整體性能的影響,是一個需要考慮的問題
- (2)如何以區塊為單位維護視圖.區塊是區塊鏈的基本數據追加單位,各區塊包含多種類型的交易,對于 一個區塊可能需要同時維護多個視圖.因此,設計的方案必須支持批量的物化視圖維護,并且使得物 化視圖維護的開銷盡可能小
- (3)如何確保查詢結果的可信性.由于數據上鏈需要經過較為昂貴的共識過程,為了提升查詢效率,物化視圖并不保存在區塊鏈上.與此同時,將物化視圖保存在本地會面臨數據被篡改的風險,需要實施相應措施來確保查詢結果可信
本文的成果
- 首次將物化視圖運用于區塊鏈,提出了一種視圖維護和共識過程并行的方法,降低物化視圖的維護開銷.
- 區塊鏈的共識過程主要消耗網絡帶寬,在此期間,CPU 和 I/O 資源消耗相對較少,而視圖維護過程卻主要消耗 CPU 和 I/O 資源.因此,將視圖維護和共識過程并行執行可減少視圖維護對寫入性能的影響.
- 提出了基于字典樹的方法,以區塊為單位批量維護視圖,并且支持多種維護策略.本文使用字典樹作為索引加快查找不同表名的更新記錄,可對相同表名的更新記錄只進行一次視圖維護操作.并且本文支持閑時維護和按需維護的維護策略.
- 提出了基于默克爾樹的查詢結果驗證方法,確保結果可信.為物化視圖構造默克 爾樹.當查詢使用物化視圖時,系統掃描物化視圖建立默克爾樹,并與預先保存的默克爾樹根進行比較,以此確保物化視圖的正確性與完整性
系統架構
- 本文原型系統架構如圖所示,包括應用層、查詢層、存儲層、共識層和網絡層:應用層包括查詢 API、訪問控制和智能合約;查詢層具有查詢引擎,負責對查詢的解析、優化、執行,包括物化視圖的維護;存儲層包括區塊鏈和鏈下數據(物化視圖、索引等);共識層負責交易的共識,運用的協議為 PBFT[8];最后,網絡層采用 Gossip協議.本文專注于查詢層、存儲層和共識層:物化視圖的更新記錄來自于共識返回的結果,查詢層負責物化視圖的維護工作,并將更新后的物化視圖存于存儲層.此外,查詢的結果來源于存儲層的區塊數據或物化視圖.
- 在此架構下,面向添加了關系語義的聯盟鏈,我們首次提出一種高效的物化視圖維護方法以提高查詢的效率,并且提出一種驗證方法來確保查詢結果的正確性.當系統應用層接收到客戶端發來的智能合約調用請求時,查詢層處理請求,然后調用智能合約產生一條新的交易,交易通過共識后被打包進區塊保存在區塊鏈中.另一方面,查詢層獲取共識成功的交易進行視圖維護,視圖維護完畢后,將更新后的物化視圖存于存儲層的磁盤中.而當系統接收到客戶端的查詢請求時,查詢層判斷該請求是否可以運用物化視圖:若可以,則獲取物化視圖數據返回給應用層;若不能使用物化視圖,則需掃描區塊鏈查找結果.接下來我們將回答 3 個問題:何時進行物化視圖的維護、如何進行物化視圖的維護以及如何保證物化視圖結果的正確性
?
?
?