导读
首先问大家一个小问题?区块链的账本数据存储格式主要是什么类型的?
相信聪明的你一定知道是Key-Value类型存储。
下一个问题,这些Key-Value数据在底层数据库如何高效组织?
答案就是我们本期介绍的内容:LSM。
LSM是一种被广泛采用的持久化Key-Value存储方案,如LevelDB,RocksDB,Cassandra等数据库均采用LSM作为其底层存储引擎。
据公开数据调研,LSM是当前市面上写密集应用的最佳解决方案,也是区块链领域被应用最多的一种存储模式,今天我们将对LSM基本概念和性能进行介绍和分析。
LSM-Tree背景:追本溯源
LSM-Tree的设计思想来自于一个计算机领域一个老生常谈的话题——对存储介质的顺序操作效率远高于随机操作。
如图1所示,对磁盘的顺序操作甚至可以快过对内存的随机操作,而对同一类磁盘,其顺序操作的速度比随机操作高出三个数量级以上,因此我们可以得出一个非常直观的结论:应当充分利用顺序读写而尽可能避免随机读写。
Figure1Randomaccessvs.Sequentialaccess
川渝高院将共同利用区块链等技术 深度与诉讼服务进行融合:近日,四川省高级人民法院和重庆市高级人民法院采用远程音视频联调方式签署《成渝地区双城经济圈跨域诉讼服务合作协议》,根据协议内容,两地法院将共同拓展人工智能、大数据、区块链等新兴技术与诉讼服务的深度融合,建立智慧服务共建共享机制。
四川省高级人民法院副院长张能表示,本次“云签约”所采用的区块链存证技术,尤其是音视频存证、电子协议存证,是未来川渝两地跨域诉讼服务合作的一次技术性“试水”。 他表示,未来在川渝地区一系列跨域诉讼服务合作的开展, 都将以此为技术支撑循序展开。[2020/9/19]
考虑到这一点,如果我们想尽可能提高写操作的吞吐量,那么最好的方法一定是不断地将数据追加到文件末尾,该方法可将写入吞吐量提高至磁盘的理论水平,然而也有显而易见的弊端,即读效率极低,我们称这种数据更新是非原地的,与之相对的是原地更新。
为了提高读取效率,一种常用的方法是增加索引信息,如B+树,ISAM等,对这类数据结构进行数据的更新是原地进行的,这将不可避免地引入随机IO。
LSM-Tree与传统多叉树的数据组织形式完全不同,可以认为LSM-Tree是完全以磁盘为中心的一种数据结构,其只需要少量的内存来提升效率,而可以尽可能地通过上文提到的Journaling方式来提高写入吞吐量。当然,其读取效率会稍逊于B+树。
昆明市委宣传部部长:依托区块链等技术 大力发展数字文创产业:4月26日消息,日前,昆明市召开文化创意产业工作推进会。昆明市委宣传部部长金幼和在会上表示,要以文化建设和产业发展“510”工程为抓手,突出民族化、国际化、时尚化,依托5G、大数据、云计算、区块链等技术创新的广泛应用,大力发展数字文创产业等新产业、新业态,培育一批有示范引领作用的骨干文化企业,建成一批有核心竞争力的文创园区,打造一批展现春城魅力的文化品牌。(昆明日报)[2020/4/26]
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。
为了解决该问题,当某一层的Run数目或大小到达某一阈值后,LSM-Tree会进行后台的归并排序,并将排序结果输出至下一层,我们将一次归并排序称为Compaction。如同B+树的分裂一样,Compaction是LSM-Tree维持相对稳定读写效率的核心机制,我们将会在下文详细介绍两种不同的Compaction策略。
现场 | 刘航:区块链是可信的数据技术 必将与大数据融合发展:金色财经现场报道,由中关村科技园区管理委员会、中国信息协会指导,中国信息化发展研究院、中国通信工业协会区块链专委会主办的“区块链&数字经济高峰论坛暨2019第八届中关村大数据日”于12月12日在北京中关村举行。中关村科技园区管理委员会副巡视员刘航发表致辞,他表示本次大会是加强合作,共谋发展的好时机。当今随着人工智能、大数据、物联网、5G,特别是区块链应用的创新,区块链技术快速迈向万物互联,万物上链的规模化阶段,催生了一批新产业新业态新模式。区块链实际上是可信的数据技术,必将与大数据融合发展。中关村率先布局大数据展业,2016年成立中关村区块产业联盟,成立了25家大数据领域的协同创新平台,支持基金超过累计2亿元,大数据企业达到1600余家,产业规模增长达到20%以上,领先全国。[2019/12/12]
另外值得一提的是,无论是从内存到磁盘的写入,还是磁盘中不断进行的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所示。
金色晨讯 | 人民日报:区块链不只是下一代互联网技术 更是下一代合作机制和组织形式;BitMEX泄漏的用户邮箱至少有23000个:1.上周8只区块链概念股接交易所监管函 “炒作股价配合股东减持”成问询重点;
2.爱沙尼亚加密交易所DX.Exchange暂时关闭交易所,寻求合并或出售;
3.上海市人民政府参事:区块链第一重要的是落地 要为实体经济服务;
4.人民日报:区块链不只是下一代互联网技术 更是下一代合作机制和组织形式;
5.全球化智库副主席:区块链会对诚信、信任带来一次革命性的变化;
6.Ripple创始人:美国制定明确的指导方针以支持区块链等金融科技解决方案至关重要;
7.雄安新区4大水利防洪项目将于近期实施 建设内容要求以区块链等为基础
8.济南市副市长:基于区块链技术和大数据的新系统助力政府审批流程;;
9.报告:全球Top10的加密基金主要集中在美国;
10.Calibra产品副总裁:无法决定Libra何时发布,这是Libra协会的事;
11.数据:Bakkt比特币月度期货合约交易量近期增长明显;
12.报告:64%的数字证券投资者来自传统风投公司,仅28%来自区块链风投公司;
13.云南省委:积极应用区块链技术,大力发展云南中医药事业;
14.The Block研究总监:BitMEX泄漏的用户邮箱至少有23000个。[2019/11/4]
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。
动态 | 只有少数货运公司应用了区块链等数字化技术 高人才成本等因素成其阻力:据人民日报6月10日消息,德国联邦信息技术、电信和新媒体协会日前公布的一项调查结果显示,79%的货运公司将数字化视为物流领域的最大挑战。虽然绝大多数企业都不否认数字化带来的好处,但只有少数应用了人工智能、区块链或3D打印技术。阻力主要来自高人才成本、技术工人储备不足和激烈的国际竞争。[2019/6/10]
▲Tiering
反观Tiering在进行Compaction时并不会主动与下层的Run进行归并,而只会对发生Compaction的那一层的若干个Run进行归并排序,这也是Tiering的一层会存在多个Run的原因。
▲对比分析
相比而言,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.
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。