分享好友 最新动态首页 最新动态分类 切换频道
只需这一篇博客就能完全弄懂LSM树
2024-12-26 15:21

B+树的数据都存储在叶子节点中,而叶子节点一般都存储在磁盘中。因此,每次插入的新数据都需要随机写入磁盘,而随机写入的性能非常慢。如果是一个日志系统,每秒钟要写入上千条甚至上万条数据,这样的磁盘操作代价会使得系统性能急剧下降,甚至无法使用。
针对这种频繁写入的场景,提出一种常见的设计思路和检索技术:LSM树。
LSM树是近年来许多火热的NoSQL数据库中使用的检索技术。

只需这一篇博客就能完全弄懂LSM树

滚动归并:

  • 第一步以多页块为单位,将C1树的当前叶子节点从前往后读入内存。读入内存的多页块,叫做清空块,意思是处理完以后会被清空。
  • 第二步,将C0树的叶子节点清空块中的数据进行归并排序,把归并的结果写入内存的一个新块,叫作填充块
  • 第三步,如果填充块写满,我们就要将填充块作为新的叶节点顺序写入磁盘。这个时候,如果C0树的叶子节点和清空块都没有遍历完,我们就继续遍历归并,将数据写入新的填充块。如果清空块遍历完了,我们就去C1树中顺序读取新的多页块,加载到清空块中。
  • 第四步,重复第三步,直到遍历完C0树和C1树的所有叶子节点=,并将所有的归并结果写入到磁盘。这个时候,我们可以同时删除C0树和C1树中被处理过的叶子节点。这样就完成了滚动归并的过程。
    在C0树到C1树的滚动归并过程中,你会看到,几乎所有的读写操作都是以多页块为单位,将多个叶子节点进行顺序读写的。而且,因为磁盘的顺序读写性能和内存是一个数量级的,这使得LSM树的性能得到了大幅度的提升。

因为同时存在C0和C1树,所以要查询一个key时,我们会先到C0树中查询。如果查询到了则直接返回,不用再去查询C1树了。
而且C0树会存储最新的一批数据,所以C0树中的数据一定会比C1树中的新。因此如果一个系统的检索主要是针对近期数据的,那么大部分数据我们都能在内存中查到,检索效率会非常高。
那如果我们在C0树种没有查询到key?那这个时候系统就会去磁盘中的C1树查询,在C1树种查到了,我们能直接返回吗?如果没有特殊处理的话其实不能。
比如如果一个数据已经被写入系统,并且我们也把它写入C1树了。但是,在最新的操作中,这个数据被删除了,那我们自然不会在C0树中查询到这个数据。可是它依然存在于C1树中。这种情况下,我们在C1树中检索到的就是过期的数据。既然是过期的数据,那为了不影响检索结果,我们能否从C1树中将这个数据删除呢?删除的思路没有错,但是我们不希望对C1树进行随机访问,这时我们该怎么处理
我们依然可以采取延迟写入和批量操作的思路。对于被删除的数据,我们会将这些数据的key插入到C0树中,并且存入删除标志。如果C0树中已经存有这些数据,我们就将C0树中这些数据对应的key都加上删除标志。这样一来,当我们在C0树中查询时,如果查到了一个带着删除标志的key就直接返回查询失败,我们也就不用去查询C1树了。在滚动归并的时候,我们会查看数据在C0树中是否带有删除标志。如果,滚动归并时将它放弃。这样C1树就能批量完成数据删除操作标记删除的数据时在merge合并的时候被物理删除的

在写大于读的应用场景下,尤其在日志系统和监控系统这类应用中,我们可以使用基于LSM树的NoSQL数据库,这是比B+树更适合的技术方案。

LSM树具有以下三个特定

  • 将索引分为内存和磁盘两个部分,并在内存达到阈值时启动树合并
  • 用批量写入代替随机写入,并且用预写日志WAL技术保证内存数据在系统崩溃后可以被恢复
  • 数据采用类似日志追加写的方式写入磁盘,以顺序写的方式提高写入效率

LSM树的这些特定,使得它相对于B+树,在写入性能上有大幅提升。所以,许多NoSQL系统都使用LSM树作为检索引擎,而且还对LSM树进行了优化以提升检索性能。

B+树是写入的时候就找好key的位置,读取的时候直接根据索引查找key的值
LSM是写入是可能一个key存在不同层的树上,读取的时候,需要合并key不同树上的值。
相当于B+树是写入时merge,LSM是读取时候merge

早期LSM树
实质就是利用内存,延迟写入磁盘的时机。
C0-tree 由于常驻内存,检索起来不会产生 IO,所以理论上,我们可以使用各种可用于高效索引的数据结构来存储数据,比如红黑树、跳表等等。但是因为内存成本高昂,能存储的数据必然有限,更大量的数据仍然需要存储在磁盘里。而磁盘中的 C1-tree 一般被实现为特殊的 B+ 树。数据的存储也会分为两个阶段,我们会一直先在内存中存储元素,直到内存中的数据到达一个阈值,我们会开始和 C1-tree 中的节点进行合并和覆写,过程和多路归并有点相似。因为我们可以决定写入磁盘的时机,所以完全可以保证 B+ 树的所有节点是满的,也就避免了许多单次的随机写操作
现代LSM树包含三个部分:memtable、immutable memtable、SSTable
前两个在内存中,最后一个在磁盘中。我们会先把临时地数据写在memtable中,然后在合适的时机刷入磁盘的SSTable中。(WAL机制保证数据安全

  • 内存上的部分,memtable、immutable memtable,比较简单,用通用的有序集合存储即可,跳表、红黑树都是非常不错的选择
  • 磁盘上的数据结构,SSTable,也不复杂,就是一段段连续按 key 有序存储的段,唯一需要做的就是后台启动一个程序不断地进行多路归并,得到分层的有序存储结构

-LSM(Log-Structured Merge Tree)树是一种新型的索引结构,与传统的 B+ 树相比,具有以下优点

  1. 高写入性能。LSM 树采用了日志结构存储方式,所有的写操作都追加到磁盘顺序写日志中,不需要进行随机写入操作,因此具有较高的写入性能。
  2. 空间利用率高。LSM 树使用了合并机制,将多个较小的数据文件合并成一个较大的文件,避免了 B+ 树中频繁分裂和合并导致的空间浪费问题。
最新文章
336期[彩神无需粉丝]P5万位独胆报号
336期彩神无需粉丝体彩排列五万位五码:24567 双胆:24 独胆:2 开:335期彩神无需粉丝体彩排列五万位五码:23678 双胆:23 独胆:2 开:49906[万位:4]334期彩神无需粉丝体彩排列五万位五码:23589 双胆:23 独胆:2 开:74681[万位:7]333期彩神无需粉
2016年华为10款新机盘点,总有一款适合你
“国内智能手机市场已几近饱和,用户对手机的需求向着更加细分化的方向发展,手机厂商之间的竞争愈发激烈,厂商们不约而同的都开始实施起机海战术,就连刚坐稳出货量第一的华为在短短的半年时间也已经发布了10款新机。”华为P9除了采用徕卡
AI驱动甜甜圈创新设计:从理念到实全方位报告及解决方案指南
在科技飞速发展的今天人工智能()已经渗透到了各行各业为传统产品注入了新的活力。本文将探讨怎么样利用技术,对甜甜圈实行创新设计从设计理念到实步骤,全方位展现在甜甜圈设计中的应用。甜甜圈设计思路源于对市场需求和消费者喜好的深入
ai绘画在线生成器有哪些?亲测好用的七款软件分享
绘画之路,有时候真是让人迷茫。但是,你是否曾深入思考过,这些困扰的根源究竟在哪里?是不是因为脑海中的画面太过模糊,难以用画笔捕捉,或者是色彩的搭配总是不尽人意?幸运的是,ai绘画软件就是你的救星,它就像是一个创意工坊,随时准
2022淘宝春节发货时间规定:最迟多久发货
更新时间:2024-12-20  马上就要到2022年春节了,很多小伙伴也都在关注淘宝春节期间发货安排。据悉淘宝推出春节不打烊活动,有报名的商家春节期间也是有接单发货的,2022淘宝春节发货时间规定是怎么样的?淘宝春节期间最迟多久能够发货呢
Accelerate Your Websites SEO: Quick Tips for Effeive Keyword Optimization
Abstra: In the digital landscape, search engine optimization (SEO) is crucial for any website's success, and understanding the role of keywords is fundamental to effeive optimization. This article provides a comprehensive
360借条提前还清借款可以免息吗?详细解读
360借条提前还清借款可以免息吗小编导语在现代社会中,借贷已经成为人们日常生活的一部分。无论是为了应对突发的经济需求,还是为了改善生活质量,借款都提供了便利的选择。360借条作为一款便捷的借贷工具,受到了众多用户的青睐。在借款的
AI绘画:一键生成超逼真美女写真,你准备好了吗?
总的来说,随着AI绘画工具的兴起,创造超逼真的美女写真已不再是难事。而在这些工具中,搜狐简单AI可以说是平衡了功能和操作的最佳选择,非常适合那些刚入门的用户。它不仅提供简单易用的绘画功能,也让更多的人能轻松享受到AI绘画的乐趣。
2023084期专家[词沈]双色球精准预测号下期
玩法本期推荐上期推荐命中情况红球24码01,02,03,0406,08,09,1011,12,14,1718,20,21,2223,24,26,2829,30,32,3302,04,06,0708,09,11,1314,16,17,1821,23,24,2526,27,28,2930,31,32,33对4码红球21码01,02,03,0406,08,09,1011,12,14,1820,21,22
332期[满堂红]P5缩水号码参考
24331期回顾奖号球号码:7,1,2,2,724331期形态点评:2024331期体彩排5奖球形态:大小形态为大小小小大,大小比重为2:3,012路比重: 0:3:2,奇偶形态为奇奇偶偶奇,质合形态为质质质质质,质合比为:5:0,和值为19枚,和尾为9点,跨度为6。最大号:7
相关文章
推荐文章
发表评论
0评