当前位置: 首页 > news >正文

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,这会导致读取变慢。

相关文章:

LSM Tree 深度解析

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

BurpSuite安装

下载 BurpSuite 下载 Java17 下载后确定版本 java -version获取启动器 密钥生成器 破解 将下载的 BurpSuite、启动器、密钥生成器,放入同一个目录 打开 CMD 进入该目录 启动密钥生成器 java -jar burp-keygen-scz.jar开启新的CMD,进入该目录 启动…...

VB.NET 三层登录系统实战:从设计到部署全流程详解

目录 前言: 什么是三层 为什么要用到三层: 饭店→软件 理解: 过程: 1.三层包图: 2.数据库 3.三层项目 4.用户界面 5.添加引用 代码实现: Entity层 BLL层 DAL层 UI层 总结: 前言: 什么是三层 三层就是把各个功能模块划分为表示层&#…...

【前端性能】性能优化手段-高频面试题

持续更新.............................最近更新2023/10/24 1. 讲一下png8、png16、png32的区别,并简单讲讲 png 的压缩原理 PNG8、PNG16、PNG32 是 PNG 图像格式的不同变种,它们主要区别在于颜色深度和透明度支持的不同。 区别 PNG8: PN…...

cleanmymacX4.14免费版mac清除浏览器缓存软件

当我们使用浏览器访问网站时,浏览器会自动缓存一些数据,比如网页缓存、DNS缓存、插件缓存、SSL证书缓存和Cookie缓存等。虽然有些缓存可以提高浏览器的使用体验,但是缓存过多也会导致一些问题,比如网页更新后浏览器仍然显示旧的内…...

分享个包含各省、市、区的编码数据的在线静态资源脚本

在翻《SpringBootVue3》——十三尼克陈作者的大型前后端分离项目实战里面&#xff0c;在看到地址管理的部分时&#xff0c;发现了该作者记录有一个静态的地址资源脚本 这里做个记录&#xff0c;打点 一、引入js <script src"https://s.yezgea02.com/1641120061385/td…...

Elasticsearch聚合----aggregations的简单使用

文章目录 Getting started1、搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄&#xff0c;但不显示这些人的详情2、size0不展示命中记录&#xff0c;只展示聚合结果3、按照年龄聚合&#xff0c;并且请求这些年龄段的这些人的平均薪资4、查出所有年龄分布&#xff0c;…...

GOPS·2023上海站 | 提前剧透!阿里、腾讯、字节、擎创等专家齐聚上海,共话互联网运维

一、前言 2023年10月26日-27日&#xff0c;第二十一届 GOPS 全球运维大会 2023 上海站即将举行。作为年终前最后一场面向 IT 技术从业者的高端运维盛会。大会上&#xff0c;来自腾讯、阿里、字节跳动、抖音、美团、擎创科技等明星专家&#xff0c;将带来十大互联网行业精彩主…...

防关联浏览器推荐:MuLogin指纹浏览器安全登录多平台账号

在现今的数字时代&#xff0c;我们的生活离不开互联网。我们使用在线平台进行银行交易、购物、社交媒体互动和其他各种活动。为了保护个人隐私和账号安全&#xff0c;我们需要寻找一种安全且方便的方式来管理我们的在线账号。MuLogin指纹浏览器正是为了满足这些需求而设计的一款…...

部署SeaTunnel单节点Standalone 模式环境

1.前置准备: SeaTunnel支持运行在JDK8及以上环境。该步骤需要用户自行安装JDK环境。 2.下载安装包 本次部署使用的是2.3.1版本。如果你需要下载其它版本&#xff0c;可以从如下网址中查询对应的版本。 Apache SeaTunnel ​ mkdir ~/seatunnel cd ~/seatunnelwget https://dl…...

二十三、设计模式之组合模式![

目录 二十三、设计模式之组合模式能帮我们干什么&#xff1f;主要解决什么问题&#xff1f;优缺点优点缺点&#xff1a; 使用的场景理解实现角色组合模式 总结 魔战已经完结。成功登顶。占领敌军最高峰。 二十三、设计模式之组合模式 “组合模式”也被称为“部分整体模式”该…...

hbase和aerospike基础概念及所对应的python包API使用

Hbase Hbase shell常用操作 1.创建表 create table name,column familytable name&#xff1a;表名 column family:列族名 2.查看所有表名称 list3.插入操作 put table name,row1,column family:column name,valuerow1:行键(即Row Key) column family:column name&#xf…...

监测难?误差大?北斗突破铁路监测预警难题,24小时全方位守护

受极端气象和复杂地形地质条件的影响&#xff0c;近年来铁路沿线地质灾害易发频发。为防范化解重大安全风险&#xff0c;提高自然灾害防治能力&#xff0c;国务院决策部署制定了《关于加强铁路自然灾害监测预警工作的指导意见》&#xff0c;强调了利用先进技术和手段开展各类自…...

kafka入门03——简单实战

目录 安装Java 安装Zookeeper 安装Kafka 生产与消费 主要是记录下Kafka的安装配置过程&#xff0c;前置条件需要安装jdk和zookeeper。 安装Java 1.Oracle官网下载对应jdk安装包 官网地址&#xff1a;Java Downloads | Oracle 好人分享了下载需要的oracle账号&#xff0c…...

工作两年,本地git分支达到了惊人的361个,该怎么快速清理呢?

说在前面 不知道大家平时工作的时候会不会需要经常新建git分支来开发新需求呢&#xff1f;在我这边工作的时候&#xff0c;需求都是以issue的形式来进行开发&#xff0c;每个issue新建一个关联的分支来进行开发&#xff0c;这样可以通过issue看到一个需求完整的开发记录&#x…...

行业追踪,2023-10-24

自动复盘 2023-10-24 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

【成功实现】CentOS磁盘扩容

对服务器磁盘扩容操作步骤 查看磁盘信息 fdisk -l 创建新分区 fdisk /dev/sda P n p … t 回车 8e w 重启虚拟机 reboot mkfs.ext4 /dev/sda4 查看磁盘信息 fdisk -l 创建物理卷 pvcreate /dev/sda4 y 创建卷组 并绑定物理卷 vgcreate centos /dev/sda4 创建逻辑…...

为什么亚马逊卖家一定要有独立站?新手低成本快速搭建跨境电商独立站完整图文教程

效果展示 翻译助手 一、购买域名 二、购买主机托管 三、搭建独立网站 四、网站装修设计 五、网站迁移 六、补充 前言&#xff1a;为什么亚马逊卖家一定要有独立站&#xff1f; 先来谈谈为什么亚马逊卖家一定得有独立站&#xff0c;从我一些个人经历来看&#xff0c;有独…...

spring Environment上下文环境参数变量

spring通过Environment对象来存储上下文环境变量信息&#xff0c;即包含当前系统环境变量也包含配置文件配置变量。Environment作为一个bean被存放在容器中&#xff0c;可以在需要的地方进行依赖注入直接使用。 Environment的创建 以AnnotationConfigApplicationContext容器类…...

【数据库】组合查询 UNION

组合查询 概述组合查询UNIONUNION ALLINTERSECTEXCEPT 概述 组合查询允许将两个或多个查询的结果合并成一个单一的结果集。组合查询分类包括 UNION、UNION ALL、INTERSECT 和 EXCEPT 来合并查询结果。下述不同的组合查询&#xff1b; 下述示例中将使用的表&#xff1a;Illino…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...