【大数据】LSM树,专为海量数据读写而生的数据结构

目录

1.什么是LSM树?

2.LSM树的落地实现


1.什么是LSM树?

LSM树(Log-Structured Merge Tree)是一种专门针对大量写操作做了优化的数据存储结构,尤其适用于现代大规模数据处理系统,如NoSQL数据库(如Cassandra、HBase、RocksDB等)和键值存储。尽管其名称中包含“树”,但它并不直接对应于传统的树状数据结构,而是指一种数据管理策略或体系架构。

LSM为什么会出现:

当数据量大了之后,读操作采用顺序遍历来进行查找肯能是不行的,性能太低了。所以需要维护一种数据结构用来帮助提升读的效率,在关系型数据库中用B+树(索引)来维护数据的关系,便于查找。

B树和B+树详细内容可移步作者的另一篇文章,作者有个数据结构专栏,专门讲解了所有常用数据结构:

数据结构(8)树形结构——B树、B+树(含完整建树过程)_排序好的数怎么画b+树-CSDN博客

img

关系型数据库中对B+树的使用在读的时候性能不错,但是在写的时候存在明显的性能问题。不是说B+树这种数据结构在写的时候存在性能问题,而是关系型数据库中是将树结构存在磁盘上的,并且树的节点在磁盘上的存储是分散的,数据的存储也是分散的,这种落地方式在面对写操作的时候会有性能瓶颈。

原因如下:

首先是写操作。写操作是容易引起B+树的结构的调整的,要调整树的结构当然要去读写树的节点,树的整个结构都存在磁盘上的,所以要走磁盘IO,调整树当然就要去对磁盘上存的树的节点进行读写,B+树在磁盘中的存储是分散的,所以这里的IO是随机IO。写数据的时候,数据也不是顺序存放的,也是分散存放的,也会是随机IO。

其次是读操作,即使B+树尽力优化了树的层高,减少了磁盘IO次数,但是毕竟树的节点和数据不是顺序写入进行存储的,所以在访问的时候还是会进行随机IO,在关系型数据库的场景下倒是没什么问题,在大数据场景下要读的数据量是海量的,海量数据都是进行随机IO的读,性能上来说也是不佳的。

所以在海量数据的写入的时候B+树不是一个优质的选择。对着大数据场景的出现,LSM树出现,用于专门应对海量数据的写入。

总结一下B+树面对海量数据无力是因为:

  • 树存在磁盘上,读写都是磁盘IO

  • 树是分散存放的,读写都是随机IO

  • 数据是分散存放的,读写都是随机IO

LSM树其实就是一套打法,核心目的就是为了规避上面的问题。

LSM树会将树结构放在内存中,从而规避磁盘IO,当然内存是有限的,到了一定条件后会将当前内存中这个版本的树存到磁盘中,存磁盘的时候开辟一块连续空间,将树的节点连续存储在一起,然后刷新内存再重新开始存新进来的内容。读的时候就会先去读内存,内存中没有再去读磁盘。由于磁盘中树的节点是连续写在一起的,会减少随机IO。

当在落磁盘的时候,磁盘上如果有历史版本的话,会和最新的历史版本进行合并。也就是说越新的历史版本,树越”茂盛“:

2.LSM树的落地实现

LSM树的落地实现通常包含内存中的MemTable(内存表)和磁盘上的SSTable(Sorted String Table,有序字符串表)两部分。

数据首先写入内存中的MemTable,数据在memtable中就会被组织成平衡二叉树:

当MemTable达到一定大小时,会被转换为不可变的SSTable并刷写到磁盘,写入磁盘的时候会开辟一段连续的存储空间,将树的内容连续存储在一起:

除了上面的内容外,还有一个核心内容——Compaction,合并。

由于肯定会落多次磁盘,生成多个版本的sstable,会浪费磁盘空间,所以还会存在合并操作,将多棵小树合成一棵大树。合并的时机一般有两个:

一个时机是在落磁盘生成新的sstable的时候会和之前最新的历史版本对应的sstable进行一次合并,两棵小树合并出一棵大树来。另一个时机是磁盘的存储达到一定阈值之后多个历史版本的sstable会进行合并合并出一棵大树来。

还有最后一个问题就是如何删除LSM树中的元素?

在memtable中删除了,但是sstable中还有,直接删除是没有用的,下次合并的时候还是会把已经删除的元素合并进来。所以LSM的做法是给要删除的元素打上一个墓碑标记,墓碑标记用来标记数据被删除了,下次合并的时候就能通过墓碑标记来判断哪些元素不用合并进来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2981392.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

电商API采集的优势、使用场景,如何实时获取主流电商API数据

电商API采集简介 随着电子商务行业的快速发展,电商API采集成为了许多电商平台和企业的重要工具。API(应用程序接口)是不同软件系统之间进行数据交互的协议,通过API采集,电商平台可以方便地获取其他电商平台的商品信息…

如何在Facebook上发布广告?

在广告管理工具中创建广告 创建广告系列和广告组。在广告名称文本框中输入描述性名称。选择代表您业务的Facebook 公共主页和Instagram 帐户。 所有广告都必须具有关联的Facebook 公共主页。选择广告格式。 选择素材。 您可能还会看到其他选项,具体取决于您先前所做…

coredns部署

coredns部署 coredns部署 一:coredns-rbac.yaml apiVersion: v1 kind: ServiceAccount metadata:name: corednsnamespace: kube-systemlabels:kubernetes.io/cluster-service: "true"addonmanager.kubernetes.io/mode: Reconcile --- apiVersion: rbac…

2024年阿里云轻量应用服务器最低61元,云服务器最低仅需99元(附购买教程)

2024年阿里云最便宜的云服务器多少钱?目前阿里云最便宜的轻量应用服务器价格为61元1年,最便宜的云服务器价格为99元1年,有的新手用户不是很清楚具体的购买教程,本文为大家展示详细的购买教程,以供参考。 注册或者登陆…

创建钉钉审批流实例

1、依赖 <!--钉钉 api --> <dependency><groupId>com.aliyun</groupId><artifactId>dingtalk</artifactId><version>2.0.14</version> </dependency> <!--钉钉 事件订阅--> <dependency><groupId>co…

32 信号入门

重点 1.掌握linux信号的基本概念 2.掌握信号产生的一般方式 3.理解信号递达和阻塞的概念&#xff0c;原理 4.掌握信号捕捉的一般形式 5.重新了解可重入函数的概念 6.了解竞态条件的情景和处理方式 7.了解SIGCHLD信号&#xff0c;重新编写信号处理函数的一般处理机制 目录 1.…

网络研讨会 | 数据中心中的人工智能

人工智能&#xff08;AI&#xff09;是嵌入式开发人员必须解决的最复杂的技术之一。将其集成到您的系统中会带来很多问题而不是很多答案。行业媒体Embedded Computing Design特地推出“工程师的人工智能集成指南”月度网络研讨会系列&#xff0c;目的是尽可能地简化嵌入式计算设…

[SWPUCTF 2022 新生赛]ez_ez_unserialize

要绕过wakeup函数&#xff0c;只要序列化的中的成员数大于实际成员数&#xff0c;即可绕过。 <?php class X {public $x fllllllag.php; }$anew X(); echo serialize($a); O:1:“X”:1:{s:1:“x”;s:13:“fllllllag.php”;} 修改为 O:1:“X”:3:{s:1:“x”;s:13:“flllll…

自动化立体库安全使用管理制度

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》 完整版文件和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载 关于自动化立体库安…

如何看待AIGC技术

介绍 AIGC技术&#xff08;人工智能、互联网、物联网、大数据和云计算&#xff09;是指结合人工智能、互联网、物联网、大数据和云计算等技术&#xff0c;形成一个综合的技术体系。以下是一些观点&#xff0c;可供参考&#xff1a; • 创新和发展&#xff1a; AIGC技术…

北京筑龙当选中招协第二届招标采购数字化专业委员会执行主任单位

4月18-19日&#xff0c;中国招标投标协会&#xff08;以下简称中招协&#xff09;2024年年会在宁波召开&#xff0c;北京筑龙作为中招协理事会员单位受邀出席会议。会议期间举行了“电子招标采购专业委员会换届会议暨第二届第一次工作会议”&#xff0c;北京筑龙当选第二届招标…

MySQL--对于库的操作对于表的操作

一、库的查看创建删除 库的查看 show databases; 库的创建&#xff08;创建一个test1数据库&#xff09; create database test1; 同样&#xff0c;我们另起一个root会话&#xff0c;并执行 cd /var/lib/mysql 然后发现多了一个test1目录 删除库&#xff08;删除test1数…

消息队列 Kafka 入门篇(二) -- 安装启动与可视化工具

一、Windows 10 环境安装 1、下载与解压 首先&#xff0c;访问Apache Kafka的官方下载地址&#xff1a; https://kafka.apache.org/downloads 在本教程中&#xff0c;我们将使用kafka_2.13-2.8.1版本作为示例。下载完成后&#xff0c;解压到您的工作目录的合适位置&#xff…

操作系统—系统调用(实验)

文章目录 系统调用1.实验目标2.实验过程记录(1).理解系统调用接口(2).阅读argraw、argint、argaddr和argstr(3).理解系统调用的解耦合实现方式(4).wait系统调用的非阻塞选项实现(5).yield系统调用的实现 3.存在的问题及解决方案实验小结 系统调用 1.实验目标 阅读并了解xv6内核…

酷开科技逐步为用户构建健全的智慧家庭生活场景

大规模与精细化人群技术则是通过大量的计算能力和精细化的运营能力&#xff0c;建立用户专属数据储存区域&#xff0c;使得用户在使用不同电视的观影偏好和兴趣能够能够得以延续。 不拘泥于自有品牌终端数量&#xff0c;酷开系统除了集成在创维电视上&#xff0c;还服务于飞利…

http是什么?http的基础知识教程详解(2024-04-24)

1、http的概念 HTTP&#xff08;超文本传输协议&#xff0c;HyperText Transfer Protocol&#xff09;是一种用于分布式、协作式、超媒体信息系统的应用层协议。 HTTP 是万维网&#xff08;WWW&#xff09;的数据通信的基础&#xff0c;设计目的是确保客户端与服务器之间的通…

CUDA的开发框架

CUDA的开发框架主要提供了一系列工具和库&#xff0c;使得开发者可以充分利用NVIDIA GPU进行高效的并行计算。以下是CUDA开发框架的一些关键组成部分。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.CUDA核心库&#xff1a;这些是构…

苍穹外卖day11 Apache ECharts 数据统计-图形报表

文章目录 前言一、Apache ECharts二、营业额统计1. 业务规则2. 接口设计3. 代码实现 三、用户统计1. 业务规则2. 接口设计3. 代码实现 四、订单统计1. 业务规则2. 接口设计3. 代码实现 五、销量排名Top101. 业务规则2. 接口设计3. 代码实现 前言 作为后端开发人员使用Echarts&…

2024年阿里云新用户购买云服务器,六大优惠活动介绍

假如你是一个初次购买阿里云服务器产品的新手用户&#xff0c;在购买阿里云服务器过程中如果直接注册账号然后通过云服务器ECS产品页下单购买可能会多花很多钱&#xff0c;作为一个老用户&#xff0c;有必要把这2024年新手用户必须了解的六大优惠活动介绍给大家&#xff0c;让大…

护眼灯到底有用吗?必选机型护眼灯十大品牌推荐

护眼灯到底有用吗&#xff1f;答案是有用的。护眼灯不是智商税&#xff0c;尤其对有娃、爱玩游戏的人士。儿童青少年近视率高&#xff0c;学习环境照明影响大。普通灯光不足以满足需求&#xff0c;蓝光频闪加剧用眼疲劳&#xff0c;导致近视。选择适合孩子的护眼灯至关重要&…