LSMTree是什么

LSMTree是Log Structrued Merge Tree,这是一种分层有序,硬盘友好的数据结构。核心思想是利用磁盘顺序写性能远高于随机写。LSMTree 并不是一种严格的树结构,而是一种内存+磁盘的多层存储结构。HBase、LevelDB、RocksDB这些 NoSQL 存储都使用了 LSMTree。

一、LSMTree的概念

LSMTree是Log Structrued Merge Tree,这是一种分层有序,硬盘友好的数据结构。核心思想是利用磁盘顺序写性能远高于随机写。LSMTree 并不是一种严格的树结构,而是一种内存+磁盘的多层存储结构。HBase、LevelDB、RocksDB这些 NoSQL 存储都使用了 LSMTree。

LSM树的核心特点是利用顺序写来提高写性能,但因为分层(此处分层是指的分为内存和文件两部分)的设计会稍微降低读性能,但是通过牺牲小部分读性能换来高性能写,使得LSM树成为非常流行的存储结构。

二、LSMTree的组成部分

1、MemTable

MemTable是在内存中的数据结构,用于保存最近更新的数据,会按照Key有序地组织这些数据,LSM树对于具体如何组织有序地组织数据并没有明确的数据结构定义,例如Hbase使跳跃表来保证内存中key的有序。

因为数据暂时保存在内存中,内存并不是可靠存储,如果断电会丢失数据,因此通常会通过WAL(Write-ahead logging,预写式日志)的方式来保证数据的可靠性。

2、Immutable MemTable

当 MemTable达到一定大小后,会转化成Immutable MemTable。Immutable MemTable是将转MemTable变为SSTable的一种中间状态。写操作由新的MemTable处理,在转存过程中不阻塞数据更新操作。

3、SSTable(Sorted String Table)

有序键值对集合,是LSM树组在磁盘中的数据结构。为了加快SSTable的读取,可以通过建立key的索引以及布隆过滤器来加快key的查找。

这里需要关注一个重点,LSM树(Log-Structured-Merge-Tree)正如它的名字一样,LSM树会将所有的数据插入、修改、删除等操作记录(注意是操作记录)保存在内存之中,当此类操作达到一定的数据量后,再批量地顺序写入到磁盘当中。这与B+树不同,B+树数据的更新会直接在原数据所在处修改对应的值,但是LSM数的数据更新是日志式的,当一条数据更新是直接append一条更新记录完成的。这样设计的目的就是为了顺序写,不断地将Immutable MemTable flush到持久化存储即可,而不用去修改之前的SSTable中的key,保证了顺序写。

三、LSM树的Compact策略

1、size-tiered 策略

size-tiered策略保证每层SSTable的大小相近,同时限制每一层SSTable的数量。如上图,每层限制SSTable为N,当每层SSTable达到N后,则触发Compact操作合并这些SSTable,并将合并后的结果写入到下一层成为一个更大的sstable。

由此可以看出,当层数达到一定数量时,最底层的单个SSTable的大小会变得非常大。并且size-tiered策略会导致空间放大比较严重。即使对于同一层的SSTable,每个key的记录是可能存在多份的,只有当该层的SSTable执行compact操作才会消除这些key的冗余记录。

2、leveled策略

leveled策略也是采用分层的思想,每一层限制总文件的大小。但是跟size-tiered策略不同的是,leveled会将每一层切分成多个大小相近的SSTable。这些SSTable是这一层是全局有序的,意味着一个key在每一层至多只有1条记录,不存在冗余记录。之所以可以保证全局有序,是因为合并策略和size-tiered不同。

四、LSMTree的优化策略

1、布隆过滤器

布隆过滤器就是个带随即概率的bitmap,可以快速的告诉你,某一个小的有序结构里有没有指定的那个数据的。于是就可以不用二分查找,而只需简单的计算几次就能知道数据是否在某个小集合里啦。效率得到了提升,但付出的是空间代价。

2、多路归并

小树合并为大树——因为小树性能有问题,所以要有个进程不断地将小树合并到大树上,这样大部分的老数据查询也可以直接使用log2N的方式找到,不需要再进行(N/m)*log2n的查询了。

延伸阅读

LSM-Tree读数据流程

  1. 当收到读请求,现在内存中查询,查询到就返回。
  2. 如果没有查询到,由内存到磁盘,在各级 SSTable 中依次下沉,直到得到结果。

文章标题:LSMTree是什么,发布者:Z, ZLW,转载请注明出处:https://worktile.com/kb/p/49432

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年4月15日
下一篇 2023年4月16日

相关推荐

  • 人力资源管理系统有哪些功能

    人力资源管理系统有以下几点功能:1、岗位规划与招聘;2、学习培训;3、考勤管理;4、绩效管理;5、薪酬管理;6、劳动关系管理;7、移动OA系统。 1、岗位规划与招聘 HR部门可以根据企业的战略发展来规划招聘岗位,通过HR系统来设定职位需求。用人部门如有招聘需求,也可以通过HR系统来提交岗位招聘需求,…

    2022年10月24日
    23700
  • C  语言与Java语言的区别有哪些

    C语言和Java语言的区别有:1、在继承中的区别;2、在动态、静态绑定中的区别;3、在初始值的区别;4、在抽象方法或抽象类的区别;5、super关键字的区别。在继承中的区别是指C语言是多线继承,JAVA是单继承的。 1、在继承中的区别 C语言是多线继承,比如:小轿车和货车都继承了汽车类,奥迪2000…

    2023年2月12日
    8700
  • C语言中printf函数里转义字符“\\”存在的意义

    反斜杠 \ 是C语言中一个非常重要的转义字符,它的存在使得我们可以方便地在输出中使用各种特殊符号,同时也可以用于转义一些特殊的字符。在C语言中,理解并熟练掌握反斜杠 \ 的用法是非常重要的。 在C语言中,printf函数是非常常用的一个输出函数。我们可以使用printf函数在控制台输出各种各样的信息…

    2023年2月28日
    37200
  • 高级任务管理工具有哪些

    高级任务管理工具有:1、PingCode;2、Worktile;3、Asana;4、禅道;5、Redmine。PingCode是国内国内的一款知名研发项目管理软件,曾在2021年,被知名媒体36氪评为:2021年国内研发项目管理榜单名列前茅的研发项目管理系统。 一、PingCode 这是国内国内的一…

    2023年4月21日
    6900
  • golang: sort.Sort(sort.Reverse(n))是怎么进行逆排序

    Reverse()只是返回了一个继承Interface(Golang中没有继承,这个只是为了方便理解,实际应该是组合)的结构体,但是这个结构体和其他不同的是他重新定义了Less()函数(比较函数),所以Reverse()虽然返回的是初始数据,但是改变了数据的Less()方法,在排序时调用这个就会产生…

    2023年2月23日
    28100
  • 燃尽图包含的元素有哪些

    燃尽图有4个重要组成元素,包括:1、纵轴;2、横轴;3、计划曲线;4、实际曲线。一般来说,纵轴表示剩余工作量,横轴表示时间,计划曲线代表理想情况下的任务进展曲线,实际曲线代表任务的实际进展曲线。 1、纵轴 纵轴也就是Y轴,纵轴表示剩余工作量。代表需要在项目中完成的工作,用户故事剩余的工作量也由该轴表…

    2022年11月30日
    19000
  • 用什么软件可以做日常工作的管理

    做日常工作管理的软件有:一、任务管理软件;二、日程管理软件;三、云存储软件;四、办公软件。任务管理软件可以帮助我们记录、安排和完成任务。其中比较常见的有:1、Trello;2、Asana;3、Todoist。 一、任务管理软件 任务管理软件可以帮助我们记录、安排和完成任务。其中比较常见的有以下几种:…

    2023年3月3日
    24600
  • 开发需求怎么写

    写开发需求要包括:1. 引言;2. 业务需求;3. 用户需求;4. 系统需求;5. 功能需求;6. 非功能需求;7. 约束;8. 附录。开发需求文档的引言应该明确说明文档的目的、范围和受众。它通常包括项目的背景信息、业务需求、用户需求和系统目标等。 1. 引言 开发需求文档的引言应该明确说明文档的目…

    2023年2月27日
    34000
  • 实施看板管理的条件是什么

    实施看板管理的条件是:1、必须是以流水作业为基础的作业,不适用于单件生产;2、企业生产秩序稳定,有均衡生产基础,工艺规程,工艺流程执行良好,工序质量能控制;3、设备工装精度良好,保证加工质量稳定;4、原材料、协作件供应数量、质量有保证等。 一、实施看板管理的条件 1、必须是以流水作业为基础的作业,不…

    2023年5月5日
    4800
  • 测试用例中用例标题前置条件怎么写

    测试用例中用例标题的写法:1、功能点;2、功能-流程;3、某种状态或条件-结果。测试用例中前置条件的写法:1、确认测试点;2、列出步骤和预期;3、留下证明性的关键性步骤和预期。功能点是指能够单独完成的某个具体业务流程。 一、测试用例中用例标题的写法 1、功能点 功能点是指能够单独完成的某个具体业务流…

    2023年4月6日
    24900

发表回复

登录后才能评论
联系我们
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部