LSM Tree 深度解析

我们将深入探讨日志结构合并树,也称为LSM Tree:这是许多高度可扩展的NoSQL分布式键值型数据库的基础数据结构,例如Amazon的DynamoDB、Cassandra和ScyllaDB。这些数据库的设计被认为支持比传统关系数据库更高的写入速率。我们将看到LSM Tree如何使它们能够实现宣称的写入速度,并以及如何促进读取。

在开始之前

•首先,我们需要一些背景信息。典型的数据库管理系统(DBMS)由多个组件组成,每个组件负责处理数据存储、检索和管理的不同方面。•其中一个组件是存储引擎,它负责提供可靠的接口,以从/向底层存储设备高效读写数据。•存储引擎的性能在选择数据库时非常重要,因为它是最接近正在使用的存储设备的组件。•用于实现存储引擎的两种流行数据结构是B+树和LSM树。在本文中,我们将覆盖LSM树。

LSM Tree 深度解析

•LSM Tree并不是一个完整的单一数据结构,而是结合了多个数据结构,利用存储层次结构中不同存储设备的响应时间。•由于是追加写入,它提供了高写入速率,同时通过在RAM中维护的索引仍然提供低成本的读取。•与基于B+树的存储引擎相比,它执行原地更新,但在LSM Tree中没有原地更新,这有助于避免随机I/O。在我们深入研究之前,让我们详细讨论在写入密集工作负载中使用基于B+树的数据库存储引擎的缺点。•大多数传统的关系型/SQL数据库使用基于B+树的存储引擎。在这些数据库中,每次写入都必须执行不仅是记录的请求写入,还必须执行对B+树不变式的任何所需的元数据更新,这涉及在B+树结构中移动/拆分/合并节点。

解剖LSM Tree

•LSM Trees凸显了磁盘上的随机I/O存在大量写入开销的问题,而顺序写入则更快,因为磁盘写入头紧挨着上一个记录的位置,且旋转和寻道延迟最小。•“Log-structured”这个术语意味着数据结构像追加日志一样被组织。•“merge”这个术语指的是用于管理结构中数据的算法。其名称中的“tree”一词来自于数据被组织成多个级别,类似于典型计算机中存储层次结构中的设备,其中顶层设备包含较小的数据子集,访问速度更快,而较低级别包含较大的数据段,访问速度较慢。•在最基本的设置中,LSM Tree由两个数据结构组成,充分利用RAM和持久磁盘的优势:LSM树被优化用于快速写入。

1. Memtable

•LSM树的工作方式不同。写入在内存中按到达的顺序进行批处理,存储在称为Mem table的结构中。Mem table按对象-键对进行排序,通常实现为平衡二叉树。

c3082a4fb5052cb41a19ff00bfecc402.jpeg

•当Mem table达到一定大小时,它将被刷新到磁盘作为不可变的有序字符串表。一个SS table以有序序列存储键值对。这些写入都是顺序I/O,在任何存储介质上都很快。

a46d4bfdca6fb29f8eb82616a4dd97f4.png

2. SS Tables

•新的SS表成为LSM树的最新段。随着更多数据的到来,越来越多的这些不可变SS表被创建并添加到LSM树中,每个都代表传入更改的小时间段。

b4ceb8f1d9f6fb6481963ed58eecd7fe.png

•由于SS表是不可变的,对现有对象键的更新不会覆盖旧的SS表。相反,将在最新的SS表中添加新条目,这将取代旧的SS表中对象键的任何条目。

LSM Tree上的操作

1. 删除

•删除对象需要特殊处理,因为我们无法标记SS表中的任何内容为已删除。•为执行删除操作,它会在对象键的最新SS表上添加一个称为墓碑的标记。当我们在读取时遇到墓碑时,我们知道该对象已被删除。是的,删除会占用额外的空间。

2. 读取

•为了响应读取请求,我们首先尝试在Mem table中查找键,然后在LSM树中的最新访问表中查找,然后在下一个SS表中查找,依此类推。由于SS表是有序的,查找可以有效进行。

8d7e683fb583ed24cb67c2e0caadea84.png

•SS表的积累产生了两个问题。随着SS表数量的增加,查找键将需要越来越长的时间。随着SS表的累积,随着键的更新和墓碑的添加,旧条目变得越来越多。这些会占用宝贵的磁盘空间。•为了解决这些问题,后台运行定期的合并和压缩过程,以合并SS表并丢弃过时或已删除的值。这可以回收磁盘空间并限制读取时必须查找的SS表数量。由于SS表是有序的,因此这个合并和压缩过程是简单而高效的。该方法类似于归并排序算法的合并阶段。

3. 写入

•LSM树会在内存中缓冲传入的写入。当缓冲区填满时,我们对其进行排序并将其刷新到磁盘作为不可变的SS表。•随着更多的缓冲区刷新到磁盘,这会为读取创建问题,因为每个读取都必须搜索这些SS表以执行查找。•为了限制每个读取时必须搜索的SS表数量,LSM树会在后台合并SS表并进行压缩。

4. 压缩策略

•让我们更仔细地看看压缩过程。当合并SS表时,它们会被组织成级别。这是LSM树名称中“树”的部分发挥作用的地方。

5fa0c85f688f061700a4952b0aed9693.png

•有不同的策略来确定何时以及如何合并和压缩SS表。有两种广泛的策略:大小分层压缩和级别压缩。大小分层压缩针对写入吞吐量进行了优化,而级别压缩则更多地针对读取进行了优化。•压缩可以使SS表数量保持在可管理的水平。SS表被组织成级别,每个级别的SS表随着来自上一级别的SS表的出现而呈指数增长。•压缩会消耗大量I/O。错误调整的压缩可能会使系统饿死,并减慢读取和写入速度。

LSM Tree 的增强

最后,让我们了解一些生产系统中LSM树的标准优化。

•为了查找键,它会在每个级别的SS表上执行搜索。尽管在排序数据上搜索很快,但在所有这些SS表上进行搜索会消耗大量I/O。•许多系统在内存中保留一个摘要表,其中包含每个级别的每个磁盘块的最小/最大范围。这允许系统跳过那些键不在范围内的磁盘块上的搜索,从而节省大量随机I/O。•另一个可能昂贵的问题是查找不存在的键。这将需要查找所有级别的所有合格块。大多数系统在每个级别上保留了一个Bloom过滤器。•Bloom过滤器是一种空间高效的数据结构,如果键不存在,则返回确定的“不存在”,如果键可能存在,则返回“可能存在”。这允许系统跳过一个级别,如果键在那里不存在,从而大大减少了需要的随机I/O数量。

613301419af4ada7fad8f5723581fde2.png

LSM Tree 的缺点

•LSM树的主要缺点是压缩的成本,它影响读取和写入性能。由于涉及数据的压缩/解压缩、复制和比较,压缩是LSM树中资源占用最高的阶段。•所选的压缩策略必须试图最小化读取放大、写入放大和空间放大。•LSM树的另一个缺点是执行读取在最坏情况下会变慢。由于是追加方式,读取必须在最低级别的SSTable中进行搜索。这涉及到寻找的文件I/O,这会导致读取变慢。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

驱动开发4 使用字符设备驱动的分步实现编写LED驱动(LED亮灯)

一、思维导图 二、通过字符设备驱动的分步实现编写LED驱动&#xff0c;另外实现特备文件和设备的绑定 应用程序 test.c #include<stdlib.h> #include<stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include…

Jenkins部署失败:JDK ‘jdk1.8.0_381‘ not supported to run Maven projects

Jenkins部署报错&#xff1a;JDK ‘jdk1.8.0_381’ not supported to run Maven projects提示使用的jdk有问题&#xff0c;启动的jdk版本不能满足项目启动。 登录Jenkins管理页面&#xff0c;系统管理——全局工具配置——JDK安装配置满足条件的JDK版本&#xff0c;保存配置&…

Parallels Client for Mac:改变您远程控制体验的革命性软件

在当今数字化的世界中&#xff0c;远程控制软件已经成为我们日常生活和工作中不可或缺的一部分。在众多远程控制软件中&#xff0c;Parallels Client for Mac以其独特的功能和出色的性能脱颖而出&#xff0c;让远程控制变得更加简单、高效和灵活。 Parallels Client for Mac是…

08数据结构——排序

8.2 插入排序 8.2.1 直接插入排序 直接插入排序&#xff08;用哨兵&#xff09;代码如下&#xff1a; void InsertSort(ElemType A[],int n){int i,j;for(i2;i<n;i) //依次将A[2]~A[n]插入前面已排序序列if(A[i]<A[i-1]){ //若A[i]关键码小于其前驱…

成都瀚网科技有限公司抖音小店:创新营销引领电商潮流

在当今数字化时代&#xff0c;抖音作为一款备受欢迎的短视频平台&#xff0c;不仅吸引了大量用户的关注&#xff0c;还为众多电商企业提供了新的销售渠道。成都瀚网科技有限公司抖音小店便是其中之一&#xff0c;凭借其独特的营销策略和优质的产品&#xff0c;成为了抖音电商领…

PyCharm改变代码背景图片的使用教程

一个好的集成环境是学习和使用一门编程语言的重中之重&#xff0c;这次我给大家分享如何改变PyCharm软件的代码背景图片。 说明&#xff1a;本教程使用的是汉化版PyCharm软件。 打开PyCharm软件。 点击软件最上方导航栏的文件&#xff0c;然后找到设置。 打开设置然后点击外观…

总结使用React做过的一些优化

一、修改css模拟v-show {!flag && <MyComponent style{{display: none}} />} {flag && <MyComponent />}<MyComponent style{{ display: flag ? block : none }} />二、循环使用key const todosList todos.map(item > {<li key{it…

Web APIs——焦点事件以及小米搜索框

一、事件类型 二、焦点事件 <body><input type"text"><script>const input document.querySelector(input)input.addEventListener(focus,function(){console.log(有焦点触发)})input.addEventListener(blur,function(){console.log(失去焦点触…

如何使用 JMeter 进行 HTTPS 请求测试?

本文将介绍如何使用 JMeter 测试 HTTPS 请求&#xff0c;并提供相关的技巧和注意事项。 在进行性能测试时&#xff0c;很多网站都采用了 HTTPS 协议。当我们测试 HTTPS 请求&#xff0c;如果服务端开启了双向认证&#xff0c;则需要客户端发送请求时带上证书。本文介绍如何在 …

【Axure视频教程】曲线图

今天教大家在Axure制作可视化曲线图的原型模板&#xff0c;鼠标移入曲线图后&#xff0c;会显示弹窗并回显对应折点的具体数据&#xff0c;该模板是用Axure原生元件制作的&#xff0c;所以使用方便&#xff0c;可以任意修改对应样式或者交互效果。该原型模板的具体效果可以参考…

Pytorch--3.使用CNN和LSTM对数据进行预测

这个系列前面的文章我们学会了使用全连接层来做简单的回归任务&#xff0c;但是在现实情况里&#xff0c;我们不仅需要做回归&#xff0c;可能还需要做预测工作。同时&#xff0c;我们的数据可能在时空上有着联系&#xff0c;但是简单的全连接层并不能满足我们的需求&#xff0…

【Docker】Docker学习之一:离线安装Docker步骤

前言&#xff1a;基于Ubuntu Jammy 22.04 (LTS)版本安装和测试 1、Docker安装 1.1、离线安装 步骤一&#xff1a;官网下载 docker 安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz步骤二&#xff1a;解压安装包; tar -zxvf docker…

谈谈Net-SNMP软件

Net-SNMP是一个开源的SNMP软件套件&#xff0c;它提供了SNMP代理&#xff08;snmpd&#xff09;和SNMP工具&#xff08;如snmpget、snmpwalk等&#xff09;&#xff0c;可以用于监控和管理网络设备。 Net-SNMP最初是从UC Davis的SNMP软件衍生而来&#xff0c;现在已经成为广泛…

小程序设计基本微信小程序的校园生活助手系统

项目介绍 通篇文章的撰写基础是实际的应用需要&#xff0c;然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程&#xff0c;以校园生活助手系统的实际应用需要出发&#xff0c;架构系统来改善现校园生活助手系统工作流程繁琐等问题。不仅如此以操作者…

纺织工厂数字孪生3D可视化管理平台,推动纺织产业数字化转型

近年来&#xff0c;我国加快数字化发展战略部署&#xff0c;全面推进制造业数字化转型&#xff0c;促进数字经济与实体经济深度融合。以数字孪生、物联网、云计算、人工智能为代表的数字技术发挥重要作用。聚焦数字孪生智能工厂可视化平台&#xff0c;推动纺织制造业数字化转型…

【Java集合类面试十八】、ConcurrentHashMap是怎么分段分组的?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;ConcurrentHashMap是怎么…

手把手教你在项目中引入Excel报表组件

摘要&#xff1a;本文由葡萄城技术团队原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 GrapeCity Documents for Excel&#xff08;以下简称GcExcel&#xff09;是葡萄城公司的…

【TES641】基于VU13P FPGA的4路FMC接口基带信号处理平台

板卡概述 TES641是一款基于Virtex UltraScale系列FPGA的高性能4路FMC接口基带信号处理平台&#xff0c;该平台采用1片Xilinx的Virtex UltraScale系列FPGA XCVU13P作为信号实时处理单元&#xff0c;该板卡具有4个FMC子卡接口&#xff08;其中有2个为FMC接口&#xff09;&#x…

Vue3.3指北(二)

Vue3.3指北 Vue31、组件基础1.1、全局组件1.2、局部组件1.3、组件的命名1.4、组件的数据存放1.5、组件标签化 2、父组件向子组件传递数据2.1、props2.2、动态props2.3、props传数组2.4、props传对象2.4.1、默认值和必传值 3、子组件向父组件传递数据4、父子组件互相访问4.1、父…

03初始Docker

一、初始Docker 1.什么是Docker 问题 ①大型项目组件复杂&#xff0c;运行环境复杂&#xff0c;部署时依赖复杂&#xff0c;出现兼容性问题。 ②开发&#xff0c;测试&#xff0c;生产环境有差异。不同的环境操作系统不同 解决 ①Docket将应用、依赖、函数库、配置一起打…