Log Structure Merge Tree

news2024/10/5 15:26:24

LSM是一种基于日志追加写的数据结构,非常适合为具有高写入数据提供索引访问

LSM基于以下前提

  • 内存读写速度远高于磁盘,但内存有限
  • 磁盘顺序读写速度远高于随机读写

结构

WAL

WAL(write-ahead log)是用于在系统错误时提供持久化,在写入数据的时候会首先写入到WAL文件中

Memtable

LSM中在内存中的数据结构称之为memtable,通常是红黑树结构。

SSTable

SSTable(sorted strings table)是在磁盘中有序字符串表。

在这里插入图片描述

过程

LSM是多层结构,在内存中的是C0层,保存了最近写入的数据。当C0层达到阈值后将合并C1层形成新的C1层,如此循环往复下去

查询

查询是从C0查起,逐层查

逐层查太慢了

可以采用稀疏索引来优化。

在这里插入图片描述

  1. 二分查找找到key的offset
  2. 根据offset找到相应的value

此外,还可以运用bloom filter过滤掉一定不在的key

写入

  1. 收到写请求,会将该数据记录在WAL(write ahead log,预写log)中,用于故障恢复
  2. 接着将该数据写入内存的memtable(为维持有序性可以在内存中采用红黑树或者跳表)
  3. 当内存memtable超过一定阈值,就会合并到SSTable

在这里插入图片描述

删除

每次删除时仅仅只是标记删除了,实际删除过程由后台进程compaction负责。

compaction会持续合并新旧segment

在这里插入图片描述

ref

  1. https://en.wikipedia.org/wiki/Log-structured_merge-tree
  2. https://medium.com/swlh/log-structured-merge-trees-9c8e2bea89e8
  3. https://www.cnblogs.com/zxporz/p/16021373.html
  4. https://yetanotherdevblog.com/lsm/

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

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

相关文章

SpringBoot自动装配原理、条件注解及封装Starter

1.什么是 SpringBoot 自动装配? 我们现在提到自动装配的时候,一般会和Spring Boot联系在一起。但是实际上SpringFramework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。 SpringBoot 定义了…

C++之string字符串不同类型间转换

📣📣📣📣📣📣📣📣 ✏️作者主页:枫霜剑客 📋 系列专栏:C实战宝典 🌲上一篇: VS2019加载解决方案时不能自动打开之前的文档&#xff08…

pytorch 笔记:torch.fft

1 FFT 进行一个维度的快速傅里叶变换 torch.fft.fft(input, nNone, dim- 1, normNone, *, outNone) 1.1 主要参数 input输入,需要傅里叶变换的tensorn 需要变换的tensor的长度,默认是input的长度 如果比input长度大,那么补0如果比input长度…

乐山持点科技:抖音极速版电商入驻指南

“抖音极速版电商”拥有海量活跃用户,着眼下沉市场,为消费者带来高性价比产业带源头好货。针对中小商家设立更宽松的经营要求、提供简单易上手的经营工具,助力商家轻松经营!来看入驻指南:一、抖音与抖音极速版电商入驻…

JavaScript基础五、语句

零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…

float的表示范围为什么比long大

●很多人会有一个疑问, 一个用来表示小数的 float 为什么表示的范围会比 long 还要大呢 ? ●这次, 咱们就来详细说一说这个事情 从长计议 ●聊到这个话题, 我们就要从计算机存储数字这个位置说起了 ●计算机存储数字的方式其实就是 : 二进制 二进制是计算机中最基本的数字存储…

Java学习笔记 --- jQuery

一、jQuery介绍 jQuery,顾名思义,也就是JavaScript和查询(Query),它就是辅助JavaScript开发的js类库。它的核心思想是write less,do more(写得更少,做得更多)&#xff0c…

2023王道考研数据结构笔记第五章——树

第五章 树 5.1 树的基本概念 树是n(n≥0)个结点的有限集合,n 0时,称为空树。 空树——结点数为0的树 非空树——①有且仅有一个根节点 ​ ②没有后继的结点称为“叶子结点”(或终端结点) ​ ③有后继的结…

webStorm svn不显示的问题

看图就行了,怎么下载安装我就不说了,网上一搜全是

<JVM上篇:内存与垃圾回收篇>13 - 垃圾回收器

笔记来源:尚硅谷 JVM 全套教程,百万播放,全网巅峰(宋红康详解 java 虚拟机) 文章目录13.1. GC 分类与性能指标13.1.1. 垃圾回收器概述13.1.2. 垃圾收集器分类13.1.3. 评估 GC 的性能指标13.2. 不同的垃圾回收器概述13.…

JavaScript基础一、简介

零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…

1.认识网络爬虫

1.认识网络爬虫网络爬虫爬虫的合法性HTTP协议请求与响应(重点)网络爬虫 爬虫的全名叫网络爬虫,简称爬虫。他还有其他的名字,比如网络机器人,网络蜘蛛等等。爬虫就好像一个探测机器,它的基本操作就是模拟人的行为去各个网站溜达&am…

Modbus转profinet网关连接Smart PLC与ABB变频器实现Modbus通信

本案例讲述了modbus转profinet网关,在系统改造中把ABB变频器接入到Smart PLC的Profinet总线上,PLC不用编程实现Profinet转modbus的协议互转,并且SmartPLC485口连接触摸屏采集数据,完成对变频器读写控制 网络拓展图如下图所示&…

达梦数据库运行内存参数配置学习笔记

一、设置运行中的数据库参数 SP_SET_PARA_VALUE(2,MAX_SESSIONS,500) 设置数据库运行参数,参数为 1 表示获取 INI 文件中配置参数的值,为 2 表示获取内存中配置参数的值 二、修改dm.ini数据库运行参数文件,重启数据库 不能动态修改dm.ini参数…

【k8s】安装dashboard以及报错处理

安装步骤: 点击进入dashboard 的 GitHub - kubernetes/dashboard: General-purpose web UI for Kubernetes clustershttps://github.com/kubernetes/dashboard 查看当前k8s版本对应的dashboard版本,点击右边releases 执行对应版本指令安装(我的k8s是v…

近自由电子近似

假设 potential 的变化是非常小的 我们可以找到一条平均线 代表的就是我们的平均值 这样我们用原来的 就可以得到一个 和平均的这条线相比,上下变化不大,这个对我们薛定谔方程求解能带来很大的便利 我们就可以得到一个平均势场 这样的话,…

40-Golang中的文件

Golang中的文件基本介绍文件的打开和关闭读文件操作应用实例写文件操作实例判断文件是否存在基本介绍 文件在程序中是以流的形式存在的 流:数据在数据源(文件)和程序(内存)之间经历的路程 输入流:数据从数据源到程序之间的路径 输出流:数据…

【C++知识点】多态

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:C/C知识点 📣专栏定位:整理一下 C 相关的知识点,供大家学习参考~ ❤️如果有收获的话,欢迎点赞👍…

Java与Winform进行AES加解密数据传输的工具类与对应关系和示例

场景 AndroidJava中使用Aes对称加密的工具类与使用: AndroidJava中使用Aes对称加密的工具类与使用_霸道流氓气质的博客-CSDN博客 上面讲的Java与安卓进行数据传输时使用AES加解密的示例工具类。 如果Java需要与其他第三方平台比如Winform程序进行数据传递时也需…

一文吃透前端低代码的 “神仙生活”

今天来说说前端低代码有多幸福? 低代码是啥?顾名思义少写代码…… 这种情况下带来的幸福有:代码写得少,bug也就越少(所谓“少做少错”),因此开发环节的两大支柱性工作“赶需求”和“修bug”就…