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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Z, ZLWZ, ZLW认证作者
上一篇 2023年4月15日
下一篇 2023年4月16日

相关推荐

  • 什么是MQTT的“保留”消息

    MQTT的“保留”消息是一种特定类型的消息,其设置标志位指示代理存储该消息并将其作为新客户端订阅对应主题的最新消息立即传送。这种机制允许新订阅者获得最近的更新而无需等待发布者发送下一条消息。在使用MQTT协议时,这一功能对于确保新参与者能够迅速获取最新状态信息至关重要。 消息保留功能的典型场景:若某…

    2024年1月5日
    30500
  • 工资oa是什么意思

    工资OA指的是采用办公自动化(Office Automation)系统进行工资管理和发放的一种方式。它利用计算机软件和网络技术,实现对员工工资计算、分配、查询和相关人事信息的管理。工资OA系统通常包含员工个人信息管理、工时跟踪、薪酬标准设定、绩效考核、福利管理、工资发放记录等功能。通过这样的系统,提…

    2024年1月11日
    30000
  • 甘特图中的自定义字段和过滤器如何使用

    甘特图中的自定义字段允许用户根据特定需求跟踪和显示数据,极大提升项目管理灵活性和准确性。使用过滤器可以快速定位特定任务或资源,简化项目监控流程。自定义字段和过滤器的应用使甘特图成为一种更加强大的项目管理工具。这俩工具经常被用于1、改进个性化的数据追踪,2、增进团队成员间的沟通效率,3、提供项目状态的…

    2023年12月21日
    31100
  • python中安装第三方库的命令是什么

    python中安装第三方库的三种工具:1、setup.py;2、easy_install;3、pip。setup.py是指,python模块分发与安装的指导文件,常用于tar.gz 或 zip的源码安装。 1、setup.py setup.py常用于tar.gz 或 zip的源码安装,由于pypi官…

    2023年1月9日
    3.7K00
  • 如何在多元化团队中有效实施OKR

    摘要:在多元化团队中有效实施OKR(Objectives and Key Results)主要依赖于明确的目标设置、跨文化沟通技巧和定期的跟进。1、设置包容性和具体的目标;确保团队中的每个成员能够看到他们在目标中的位置和作用。2、优化跨文化沟通;强调开放式对话和反馈,采取适应性的沟通方式以适应不同的…

    2023年12月8日
    35900
  • 如何结合AI和大数据技术优化私域流量的管理

    结合AI和大数据技术优化私域流量的管理,主要涉及数据分析 、个性化内容创建 、客户服务自动化 、精准营销 、风险管理 、五个核心观点。首先通过大数据对用户行为进行详细分析,识别消费者习惯和偏好。接着利用AI技术生成个性化内容,提升用户体验并促进互动。利用聊天机器人和自动化系统进行客户服务自动化,以迅…

    2023年11月20日
    34300
  • 数据分析中常用的工具有哪些

    数据分析工具是数据分析师进行数据处理、可视化和高级分析的重要帮手。在选择工具时,重点考虑的包括:易用性、功能性、灵活性和社区支持等因素。1、Excel拥有强大的数据整理和初步分析功能;2、SQL是处理数据库的基本语言;3、Python凭借其丰富的库在数据科学领域广受欢迎;4、R语言专注于统计分析和图…

    2023年12月14日
    46700
  • Session和token的区别

    Session和token的区别在于:Session是存放在服务器端的可以保存在内存、数据库、NoSQL中,而Token是放在客户端存储的,采用了时间换空间策略,它也是无状态的,所以在分布式环境中应用广泛。 Session和Token机制原理上差不多,都是用户身份验证的一种识别手段,它们都有过期时间…

    2023年1月31日
    48400
  • 有什么好用的neo4j工具

    好用的neo4j工具有:一、Neo4j浏览器;二、Cypher Shell;三、APOC工具包;四、GraphAware框架;五、Neo4j ETL工具;六、GrapheneDB;七、Neo4j Bloom。Neo4j浏览器是一个Web应用程序,它提供了图形界面来管理和查询Neo4j数据库。Neo4…

    2023年5月29日
    1.1K00
  • devops需要什么

    DevOps需要以下要素:1、文化变革,2、自动化工具,3、持续集成与持续交付(CI/CD),4、强调合作与沟通,5、监控与反馈机制。特别是文化变革,它涉及到组织内部的思维方式、工作方法以及跨团队合作的方式,是实施DevOps的基础。这一点要求企业构建一个无壁垒的组织环境,促进开发、运维团队之间的紧…

    2024年3月26日
    6200

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部