合并日志树——LSM Tree

news2024/11/16 23:41:35

一、背景

大数据情景下,需要巨量的读写数据,即良好的IO效率。传统的B树以及其变种无法满足,因为它的读写在物理上是随机的,这样IO的效率就不高。于是便有了LSM(log_structed_merge_tree) 合并日志树这个设计思想或者说存储结构。他在大数据的存储上广泛引用(HBase,Kudu,Clickhouse的MergeTree等),它的处理情景是将随机读写操作变成顺序读写操作,从而提高IO效率。

二、设计思想

LSM是通过顺序读写来提高IO 效率,所以它的存储数据结构就是要保证有序。

如图所示,LSM的存储是分层的(内存和磁盘),主要有4个角色

1:memTable

        按照Key有序的组织数据,用于保存最新的数据。常用的数据结构有:map,红黑树,跳表。因为是在内存,为了防止断电丢失数据,所以有磁盘的备份,预写式日志WAL(write-ahead-logging)

2: immutable memtable

        当memTable达到阈值后,会溢写到immutable memtable(不可改变内存表),然后再flush到磁盘中

3: SStable ( Sorted String Table ) , 有序字符表

        这里因为数据量大,且可能存在冗余数据(一个key不同的值),所以为了保证读取的是正确的有效的,需要顺序读取所有的数据,从memTable开始。所以查询策略上是有做优化的,常见的有建立key的所以或者布隆过滤器。 明显读取的性能是收到影响的

4: BlockCache

        缓存读取的SSTable数据,用于加快读取的速度。


这里现在 合并结构化日志树的 结构化是体现了,数据都是键值形式,那么日志是体现在哪里?

        传统的数据库B树是直接在原有的数据所在处直接修改值,而LSM为了顺序写,他的数据更新是日志式的,即记录的数据是操作日志,记录的方式是append。

这样的记录方式肯定是会有数据冗余,例如插入一条数据,后续有更改,那么在不同的SStable中会有两条数据,怎么办? 这就体现在  合并上

        LSM会将SStable进行合并,不同的合并策略有不同的优缺点。

合并结构化日志树的数则是体现在数据结构

     在 memTable和 SSTable都是采用了树。  memTable是map,红黑树,跳表。

SSTable则是类似B树。


三、增删改查

1:增和该记录

        在memTable和WAL增加记录,然后等待后续的flush和compact。最后增加和修改磁盘的数据

2:删除记录

       在memTable和WAL增加记录,然后在需要删除的数据上打一个标签(tombstone),最后等待compact操作将数据从磁盘中删除。

3: 查操作

        从memTable 开始查询,如果命中了则返回,没有则继续顺序查询直至查到。可见如果运气不好可能需要查询所有的数据,因此这里有不同的优化策略,给key做索引和布隆过滤器。

四、总结

        LSM树是牺牲了部分的读取性能来换取写入性能。

参考:

最容易理解的LSM树--以示例讲解合并查找过程_lsm树 例子_土豆西瓜大芝麻的博客-CSDN博客

 LSM Tree-Based存储引擎的compaction策略(feat. RocksDB) - 简书

LSM树详解 - 知乎

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

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

相关文章

【亲测好用】解决 OneDrive 同步被挂起

本教程演示了如何以 2 种有效方式修复 OneDrive 同步被挂起错误。如果您被这个问题困扰,可以在本文中找到适合您的方法。 “如何处理 OneDrive 同步被挂起问题? 我的 OneDrive 存在同步问题。即使任务栏上的 OneDrive 图标指示同步完毕状态,某…

导出/入表数据

1、连接mysql导出2、使用mysqldump导出3、mysql命令导出load data导入mysqlimport命令导入 1、连接mysql导出 select columnList from tableName where conditions into outfile fileName [options]-- fileName 默认是secure-file-priv路径 -- options lines必须置于fields后…

git status和git push扩展脚本

git status和git push扩展脚本 1、对git status扩展使用方法 我们先来看看效果: 在之前的时候,我是用git status 查看工作区的变化,我想看某个文件的变化必须使用git diff file_abs_path,必须要输入文件的相对目录。每次都输入我…

计及N-k安全约束的含光热电站电力系统优化调度模型【IEEE14节点、118节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

别再无脑背八股文了

大家好,我是帅地。 记得两年前我参加校招的时候,还没怎么听过八股文这个词,这两年,到处是八股文,可见校招是越来越激烈了。 有些人可能还不知道八股文是啥,八股文其实就是指面试中那些经常被问到的基础知…

前端009_类别模块_修改功能

第九章 1、需求分析2、Mock添加查询数据3、Mock修改数据4、Api调用回显数据5、提交修改后的数据6、效果1、需求分析 需求分析 当点击 编辑 按钮后,弹出编辑窗口,并查询出分类相关信息进行渲染。修改后点击 确定 提交修改后的数据。 2、Mock添加查询数据 请求URL: /article/…

面试篇:多线程

一、线程和进程的区别? 1、进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理I…

PySpark基础入门(8):Spark SQL(内容补充)

目录 SparkSQL Shuffle 分区数目 SparkSQL 数据清洗API dropDuplicates dropna fillna SparkSQL函数定义(UDF函数) SparkSQL 使用窗口函数 SparkSQL运行流程 SparkSQL的自动优化 Catalyst优化器 SparkSQL Shuffle 分区数目 在SparkSQL中&…

无魔法插件 - ChatGPT Sidebar with GPT-4

文章目录 1.介绍2.功能一览2.1 唤醒方式2.2 聊天功能2.3 快捷模板2.4 单独聊天界面2.5 ChatPDF2.6 任意位置快捷使用模板2.7 手机 APP 3.GPT-3.0 还是 GPT-3.5?4.免费 or 收费?5.安装 Sidebar 创作不易,如果本文对你有帮助,胖友记…

SpringCloud(22):Sentinel对Feign的支持

Sentinel 适配了 Feign组件。如果想使用,除了引入 spring-cloud-starter-alibaba-sentinel 的依赖外还需要 2个步骤: 配置文件打开 Sentinel 对 Feign 的支持:feign.sentinel.enabledtrue加入 spring-cloud-starter-openfeign 依赖使 Sentin…

springboot 整合redis

第一步&#xff1a;pom.xml文件导入坐标 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.5.4</version> </dependency 第二步&#xff1a;appli…

【iOS】—— NSProxy类

NSProxy 文章目录 NSProxyNSProxy简介NSProxy模拟多继承NSProxy 避免NSTimer循环引用 在学消息转发的时候看到过这个类&#xff0c;本来没打算细看&#xff0c;后来看学长博客循环引用的时候也看到了这个类&#xff0c;就来细看看。 NSProxy简介 NSProxy 是一个实现了 NSObjec…

在线病毒分析工具评测试用

总览 1 区分在线杀毒引擎与在线沙盒 在线杀毒引擎用的大多是国际上出名的杀毒厂商的引擎作为底层&#xff0c;对文件进行扫描&#xff0c;结论通常会反馈“无毒”或者杀毒引擎自己的代码。 在线沙盒用云端的机器跑一次程序&#xff0c;然后收集程序的相关信息。 两者各有与…

情感分析讲解

情感分析简述 情感分析(Sentiment Analysis)又称倾向性分析&#xff0c;或意见挖掘&#xff0c;它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。利用情感分析能力&#xff0c;可以针对带有主观描述的自然语言文本&#xff0c;自动判断该文本的情感正负倾向…

MongoDB 聚合操作Map-Reduce

这此之前已经对MongoDB中的一些聚合操作进行了详细的介绍&#xff0c;主要介绍了聚合方法和聚合管道&#xff1b;如果您想对聚合方法和聚合管道进行了解&#xff0c;可以参考&#xff1a; MongoDB 数据库操作汇总https://blog.csdn.net/m1729339749/article/details/130086022…

ClickHouse为何能超越Elasticsearch?

背景 Elasticsearch是一个强大的分布式全文检索和数据分析引擎&#xff0c;也是日志分析系统经常使用的一种实现方案&#xff0c;但近年来随着ClickHouse的发展&#xff0c;Elasticsearch在日志分析领域的地位逐渐被取代&#xff0c;许多公司已经将自己的日志分析解决方案从ES…

games101作业1

作业1的大致要求就是让我们实现如下两个函数&#xff0c;一个是返回在三维空间中绕着Z轴旋转的矩阵&#xff0c;另一个是返回投影矩阵。正确完成这两个函数之后&#xff0c;运行代码你就会在窗口中看到一个三角形&#xff0c;并且按a键和d键会发生旋转。 首先来实现get_model_m…

RuleApp1.4.0 文章社区客户端

简介&#xff1a; 可以打包成安卓&#xff0c;苹果&#xff0c;h5&#xff0c;小程序&#xff0c;全新的版本增加了私聊和群聊&#xff0c;动态模块等&#xff0c;还有自动和手动封禁机制。[滑稽][滑稽]主要模块&#xff1a;用户模块&#xff0c;文章模块&#xff0c;动态模块…

国产服务器tomcat开机自启

目录结构 前言方法一方法二方法三参考连接 前言 国产服务器配置tomcat开机自启动&#xff1b;目前测试两种服务器 银河麒麟&#xff08;Linux localhost.localdomain 4.19.90-52.22.v2207.ky10.x86_64 #1 SMP Tue Mar 14 12:19:10 CST 2023 x86_64 x86_64 x86_64 GNU/Linux&am…

多模态速读:ViLT、ALBEF、VLMO、BLIP

ViLT : Vision-and-Language Transformer Without Convolution or Region Supervision ViLT : Vision-and-Language Transformer Without Convolution or Region SupervisionIntroductionApproach参考 ALBEF: Vision and LanguageRepresentation Learning with Momentum Distil…