導讀
首先問大家一個小問題?區塊鏈的賬本數據存儲格式主要是什么類型的?
相信聰明的你一定知道是Key-Value類型存儲。
下一個問題,這些Key-Value數據在底層數據庫如何高效組織?
答案就是我們本期介紹的內容:LSM。
LSM是一種被廣泛采用的持久化Key-Value存儲方案,如LevelDB,RocksDB,Cassandra等數據庫均采用LSM作為其底層存儲引擎。
據公開數據調研,LSM是當前市面上寫密集應用的最佳解決方案,也是區塊鏈領域被應用最多的一種存儲模式,今天我們將對LSM基本概念和性能進行介紹和分析。
LSM-Tree背景:追本溯源
LSM-Tree的設計思想來自于一個計算機領域一個老生常談的話題——對存儲介質的順序操作效率遠高于隨機操作。
如圖1所示,對磁盤的順序操作甚至可以快過對內存的隨機操作,而對同一類磁盤,其順序操作的速度比隨機操作高出三個數量級以上,因此我們可以得出一個非常直觀的結論:應當充分利用順序讀寫而盡可能避免隨機讀寫。
Figure1Randomaccessvs.Sequentialaccess
青海省長劉寧:推廣應用區塊鏈等信息技術 推動產業鏈數字化改造:6月17日消息,青海省人民政府省長劉寧刊文《以“四種經濟形態”為引領加快構建高質量發展新格局》。他表示,數字經濟在創造新的產業形態、商業模式和創新模式的同時,也深刻地影響了傳統產業及其相關的商業和創新模式。劉寧在文中提出,下一步將充分發揮青海在發展數字經濟方面的比較優勢,建設大數據產業園、數字經濟發展展示運行平臺,組建數字經濟發展集團,加快建設“云上青海”。推進5G網絡和智慧廣電建設,推廣應用物聯網、云計算、大數據、區塊鏈、人工智能等新一代信息技術,整合現有產業、企業和產品,與國際國內市場耦合,發展平臺經濟,謀劃和推動產業鏈數字化改造。(學習時報)[2020/6/17]
考慮到這一點,如果我們想盡可能提高寫操作的吞吐量,那么最好的方法一定是不斷地將數據追加到文件末尾,該方法可將寫入吞吐量提高至磁盤的理論水平,然而也有顯而易見的弊端,即讀效率極低,我們稱這種數據更新是非原地的,與之相對的是原地更新。
為了提高讀取效率,一種常用的方法是增加索引信息,如B+樹,ISAM等,對這類數據結構進行數據的更新是原地進行的,這將不可避免地引入隨機IO。
LSM-Tree與傳統多叉樹的數據組織形式完全不同,可以認為LSM-Tree是完全以磁盤為中心的一種數據結構,其只需要少量的內存來提升效率,而可以盡可能地通過上文提到的Journaling方式來提高寫入吞吐量。當然,其讀取效率會稍遜于B+樹。
螞蟻正研發區塊鏈新技術 或推動區塊鏈大規模應用提前十年:6月3日消息,近日,金融科技專家Yassine Regragui在社交平臺爆料稱,螞蟻集團正研發一項名為LedgerDB的新技術,比現有聯盟鏈快至少80倍,稱將區塊鏈大規模應用時代提前至少十年。[2020/6/3]
LSM-Tree數據結構:抽絲剝繭
圖2展示了LSM-Tree的理論模型(a)和一種實現方式(b)。LSM-Tree是一種層級的數據結構,包含一層空間占用較小的內存結構以及多層磁盤結構,每一層磁盤結構的空間上限呈指數增長,如在LevelDB中該系數默認為10。
Figure2LSM與其LevelDB實現
對于LSM-Tree的數據插入或更新,首先會被緩存在內存中,這部分數據往往由一顆排序樹進行組織。
當緩存達到預設上限,則會將內存中的數據以有序的方式寫入磁盤,我們稱這樣的有序列為一個SortedRun,簡稱為Run。
隨著寫入操作的不斷進行,L0層會堆積越來越多的Run,且顯然不同的Run之前可能存在重疊部分,此時進行某一條數據的查詢將無法準確判斷該數據存在于哪個Run中,因此最壞情況下需要進行等同于L0層Run數量的I/O。
福州一批新建項目將使用區塊鏈技術 包括渣土車監管平臺等:4月14日消息,針對游雄峰代表提出的關于推廣區塊鏈技術應用和制定相關政策法規的建議,福州市大數據發展管理委員會近日表示,福州市積極推進區塊鏈落地應用,渣土車監管平臺等一批新建項目中將使用區塊鏈技術。
在加強區塊鏈行業監管、制定和完善相關政策法規方面,福州市成立了區塊鏈發展工作領導小組。市政府也加強了對虛擬貨幣交易場所、首次代幣發行排查清理,協調金融機構和非銀行支付機構不得開展與代幣發行融資交易相關的業務,加強風險防范。此外,福州市政府已規劃在濱海新城建立區塊鏈監管沙盒,進一步加強區塊鏈行業監管研究。(福州新聞網)[2020/4/14]
為了解決該問題,當某一層的Run數目或大小到達某一閾值后,LSM-Tree會進行后臺的歸并排序,并將排序結果輸出至下一層,我們將一次歸并排序稱為Compaction。如同B+樹的分裂一樣,Compaction是LSM-Tree維持相對穩定讀寫效率的核心機制,我們將會在下文詳細介紹兩種不同的Compaction策略。
另外值得一提的是,無論是從內存到磁盤的寫入,還是磁盤中不斷進行的Compaction,都是對磁盤的順序I/O,這就是LSM擁有更高寫入吞吐量的原因。
Levelingvs.Tiering:一讀一寫,不分伯仲
LSM-Tree的Compaction策略可以分為Leveling和Tiering兩種,前者被LevelDB,RocksDB等采用,后者被Cassandra等采用,稱采用Leveling策略的的LSM-Tree為LeveledLSM-Tree,采用Tiering的LSM-Tree為TieredLSM-Tree,如圖3所示。
婁底市長:運用區塊鏈技術 建設婁底誠信醫保管理體系:3月25日,婁底市委副書記、市長楊懿文在研究醫保有關工作時強調,醫療保障是減輕群眾就醫負擔、增進民生福祉、維護社會和諧穩定的重大制度安排,要運用區塊鏈技術,建設婁底誠信醫保管理體系,采取強有力措施,堅決打擊欺詐騙保等違法犯罪行為。(婁底新聞網)[2020/3/26]
Figure3兩種Compaction策略對比
▲Leveling
簡而言之,Tiering是寫友好型的策略,而Leveling是讀友好型的策略。在Leveling中,除了L0的每一層最多只能有一個Run,如圖3右側所示,當在L0插入13時,觸發了L0層的Compaction,此時會對Run-L0與下層Run-L1進行一次歸并排序,歸并結果寫入L1,此時又觸發了L1的Compaction,此時會對Run-L1與下層Run-L2進行歸并排序,歸并結果寫入L2。
▲Tiering
反觀Tiering在進行Compaction時并不會主動與下層的Run進行歸并,而只會對發生Compaction的那一層的若干個Run進行歸并排序,這也是Tiering的一層會存在多個Run的原因。
▲對比分析
聲音 | 大連港:將繼續開拓區塊鏈技術 深入開展創新工作:金色財經報道,大連港(601880)被提問“除了區塊鏈電子放貨平臺之外,接下來還有什么區塊鏈項目落地”時表示,目前,大連港利用區塊鏈的去中心化、不可篡改、共享賬本等特征所建立的區塊鏈信任機制,使業務信息公開透明公正,借助區塊鏈的數據加密作用強化數據信息安全功能,確保數據的安全性、完整性和一致性,使船、輪駁公司、智慧港口平臺各方都能實時、安全、無縫地傳遞拖輪作業信息,實現全程留痕和全程可追溯,滿足輪駁業務的安全性和準確性要求。未來大連港還將繼續開拓區塊鏈技術業務實現場景,深入開展創新工作,在全港口領域推行區塊鏈技術應用落地。(上證e互動)[2019/10/30]
相比而言,Leveling方式進行得更加貪婪,進行了更多的磁盤I/O,維持了更高的讀效率,而Tiering則相正好反。
本節我們將對LSM-Tree的設計空間進行更加形式化的分析。
LSM層數
布隆過濾器
LSM-Tree應用布隆過濾器來加速查找,LSM-Tree為每個Run設置一個布隆過濾器,在通過I/O查詢某個Run之前,首先通過布隆過濾器判斷待查詢的數據是否存在于該Run,若布隆過濾器返回Negative,則可斷言不存在,直接跳到下個Run進行查詢,從而節省了一次I/O;而若布隆過濾器返回Positive,則仍不能確定數據是否存在,需要消耗一次I/O去查詢該Run,若成功查詢到數據,則終止查找,否則繼續查找下一個Run,我們稱后者為假陽現象,布隆過濾器的過高的假陽率會嚴重影響讀性能,使得花費在布隆過濾器上的內存形同虛設。限于篇幅本文不對布隆過濾器做更多的介紹,直接給出FPR的計算公式,為公式2.
其中是為布隆過濾器設置的內存大小,為每個Run中的數據總數。讀寫I/O
考慮讀寫操作的最壞場景,對于讀操作,認為其最壞場景是空讀,即遍歷每一層的每個Run,最后發現所讀數據并不存在;對于寫操作,認為其最壞場景是一條數據的寫入會導致每一層發生一次Compaction。
核心理念:基于場景化的設計空間
基于以上分析,我們可以得出如圖4所示的LSM-Tree可基于場景化的設計空間。
簡而言之,LSM-Tree的設計空間是:在極端優化寫的日志方式與極端優化讀的有序列表方式之間的折中,折中策略取決于場景,折中方式可以對以下參數進行調整:
當Level間放大比例時,兩種Compaction策略的讀寫開銷是一致的,而隨著T的不斷增加,Leveling和Tiering方式的讀開銷分別提高/減少。
當T達到上限時,前者只有一層,且一層中只有一個Run,因此其讀開銷到達最低,即最壞情況下只需要一次I/O,而每次寫入都會觸發整層的Compaction;
而對于后者當T到達上限時,也只有一層,但是一層中存在:
因此讀開銷達到最高,而寫操作不會觸發任何的Compaction,因此寫開銷達到最低。
Figure4LSM由日志到有序列的設計空間
事實上,基于圖4及上文的分析可以進行對LSM-Tree的性能進一步的優化,如文獻對每一層的布隆過濾器大小進行動態調整,以充分優化內存分配并降低FPR來提高讀取效率;文獻提出“LazyLeveling”方式來自適應的選擇Compaction策略等。
限于篇幅本文不再對這些優化思路進行介紹,感興趣的讀者可以自行查閱文獻。
小結
LSM-Tree提供了相當高的寫性能、空間利用率以及非常靈活的配置項可供調優,其仍然是適合區塊鏈應用的最佳存儲引擎之一。
本文對LSM-Tree從設計思想、數據結構、兩種Compaction策略幾個角度進行了由淺入深地介紹,限于篇幅,基于本文之上的對LSM-Tree的調優方法將會在后續文章中介紹。
作者簡介葉晨宇來自趣鏈科技基礎平臺部,區塊鏈賬本存儲研究小組
參考文獻
.O’NeilP,ChengE,GawlickD,etal.Thelog-structuredmerge-tree(LSM-tree).ActaInformatica,1996,33(4):351-385.
.JacobsA.Thepathologiesofbigdata.CommunicationsoftheACM,2009,52(8):36-44.
.LuL,PillaiTS,GopalakrishnanH,etal.Wisckey:Separatingkeysfromvaluesinssd-consciousstorage.ACMTransactionsonStorage(TOS),2017,13(1):1-28.
.DayanN,AthanassoulisM,IdreosS.Monkey:Optimalnavigablekey-valuestore//Proceedingsofthe2017ACMInternationalConferenceonManagementofData.2017:79-94.
.DayanN,IdreosS.Dostoevsky:Betterspace-timetrade-offsforLSM-treebasedkey-valuestoresviaadaptiveremovalofsuperfluousmerging//Proceedingsofthe2018InternationalConferenceonManagementofData.2018:505-520.
.LuoC,CareyMJ.LSM-basedstoragetechniques:asurvey.TheVLDBJournal,2020,29(1):393-418.
12月18日-20日,2020網易未來大會在杭州盛大舉行。在今日“2020網易未來大會·區塊鏈與人工智能”現場,網易集團副總裁胡志鵬、中國萬向控股有限公司副董事長肖風、中國工程院院士陳曉紅、網易.
1900/1/1 0:00:00今日看到有一些文章描述了算力NFT化之后,可以進行二級市場交易,可以極大地刺激算力市場。我認為這可能是個偽命題,今天簡述一下相關邏輯.
1900/1/1 0:00:00去年年底,我寫了一篇關于2020年三種未被關注的產品趨勢的文章。在預測2021年之前,我們先來看看之前的預測實現了沒有。 1.智能合約保險 預測準確.
1900/1/1 0:00:0012月25日,封面新聞記者獲悉,成都區塊鏈公司樂鏈科技于12月24日宣布完成1200萬元天使輪融資,由香投集團領投。作為成都新經濟領域的“硬核科技”,區塊鏈產業正成為自主創新主要突破口.
1900/1/1 0:00:00作者:MattHussey 來源:Decrypt 2020年,大型投資者和一家全球金融機構發布的一系列聲明點燃了比特幣價格下的觸角。近期,一系列知名的投資者紛紛宣布,他們對比特幣進行了大量投資.
1900/1/1 0:00:00現在比特幣的4千4百億美元市值已經超過了Visa的美元市值,更是遠遠超過了大通摩根的3千8百億美元的市值。比特幣同這兩個公司相比,它同Visa的可比性更強.
1900/1/1 0:00:00