Log Structure Merge Tree
LSM是一种基于日志追加写的数据结构,非常适合为具有高写入数据提供索引访问
LSM基于以下前提
- 内存读写速度远高于磁盘,但内存有限
- 磁盘顺序读写速度远高于随机读写
结构
WAL
WAL(write-ahead log)是用于在系统错误时提供持久化,在写入数据的时候会首先写入到WAL文件中
Memtable
LSM中在内存中的数据结构称之为memtable,通常是红黑树结构。
SSTable
SSTable(sorted strings table)是在磁盘中有序字符串表。

过程
LSM是多层结构,在内存中的是C0层,保存了最近写入的数据。当C0层达到阈值后将合并C1层形成新的C1层,如此循环往复下去
查询
查询是从C0查起,逐层查
逐层查太慢了
可以采用稀疏索引来优化。

- 二分查找找到key的offset
- 根据offset找到相应的value
此外,还可以运用bloom filter过滤掉一定不在的key
写入
- 收到写请求,会将该数据记录在WAL(write ahead log,预写log)中,用于故障恢复
- 接着将该数据写入内存的memtable(为维持有序性可以在内存中采用红黑树或者跳表)
- 当内存memtable超过一定阈值,就会合并到SSTable

删除
每次删除时仅仅只是标记删除了,实际删除过程由后台进程compaction负责。
compaction会持续合并新旧segment

ref
- https://en.wikipedia.org/wiki/Log-structured_merge-tree
- https://medium.com/swlh/log-structured-merge-trees-9c8e2bea89e8
- https://www.cnblogs.com/zxporz/p/16021373.html
- https://yetanotherdevblog.com/lsm/
相关文章:
Log Structure Merge Tree
LSM是一种基于日志追加写的数据结构,非常适合为具有高写入数据提供索引访问 LSM基于以下前提 内存读写速度远高于磁盘,但内存有限磁盘顺序读写速度远高于随机读写 结构 WAL WAL(write-ahead log)是用于在系统错误时提供持久化,在写入数据…...
Python QT5设计UI界面教程
简介:PyQT5开发常用知识,零基础上手,需配合我之前写的博文,配置好QT设计工具和ui文件转py文件的工具。博文为:使用Python PyQt5实现一个简单的图像识别软件;页面效果如下: 1.设计菜单栏 Contai…...
uniapp系列-图文并茂手把手教你hbuilder进行uniapp云端打包 - 安心打包
什么是安心打包 提交App的模块配置信息到云端,在云端打包机生成原生代码包 为什么使用云打包 更安全:打包时不提交应用代码、证书等信息更快速:非首次打包时不用提交云端打包机排队等待,本地直接出包省流量:减少了打…...
【精品】SpringBoot中基于拦截器实现登录验证功能
拦截器简介 拦截器是属于springmvc体系的,只能拦截controller的请求。拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行。 Interceptor 作用 日志记录:记录请求信息的日志&…...
哈工大服务科学与工程第一章作业
服务的概念服务是个非常广义的概念——涉及到经济、管理、业务、IT领域以下是一些各方对服务的定义:服务是一方向另一方提供的任意活动和好处。它是不可触知的,不形成任何所有权问题,其生产可能与物质产品有关,也可能无关。服务是…...
SpringMVC源码:参数解析、方法调用与返回值处理
参考资料: 《SpringMVC源码解析系列》 《SpringMVC源码分析》 《Spring MVC源码》 写在开头:本文为个人学习笔记,内容比较随意,夹杂个人理解,如有错误,欢迎指正。 前文: 《SpringMVC源码&a…...
【MySQL】表的数据处理
哈喽,大家好!我是保护小周ღ,本期为大家带来的是 MySQL 数据表中数据的基本处理的操作,数据表的增删改查,更多相关知识敬请期待:保护小周ღ *★,*:.☆( ̄▽ ̄)/$:*.★*一、 添加数据&a…...
反思当下所处的环境,有没有让你停滞不前、随波逐流
环境对人的影响真的很大,小时候的环境、长大后的环境、工作环境、生活环境、好的环境、差的环境......我们都生活在一定的环境中所以既是环境的产物,又是环境的创造者与改造者。我们与环境的关系是相辅相成的我们的生活和工作当中接触到的人或事或物&…...
小程序(十四)后端-签到成功
文章目录一、持久层1、CheckinMapper.xml2、CheckinMapper.java3、TbHolidaysDao.xml4、TbHolidaysDao.java5、TbWorkdayDao.xml6、TbWorkdayDao.java二、业务层1、 CheckinService.java三、conroller层1、编写 TbUserDao.xml 文件,查询员工的入职日期。2、编写 TbU…...
X264简介-Android使用(一)
X264 简介及使用 1、简介 2、环境搭建 3、使用 4、小结 简介 官网连接:https://www.videolan.org/developers/x264.html 官方文档:https://wiki.videolan.org/Category:X264/ x264是用于编码H.264/MPEG-4 AVC视频流的免费软件库。它世界上最流行的…...
DetectGPT:使用概率曲率的零样本机器生成文本检测
DetectGPT的目的是确定一段文本是否由特定的llm生成,例如GPT-3。为了对段落 x 进行分类,DetectGPT 首先使用通用的预训练模型(例如 T5)对段落 ~xi 生成较小的扰动。然后DetectGPT将原始样本x的对数概率与每个扰动样本~xi进行比较。…...
【深度学习】BERT变体—BERT-wwm
1.BERT-wwm 1-1 Whole Word Masking Whole Word Masking (wwm)是谷歌在2019年5月31日发布的一项BERT的升级版本,主要更改了原预训练阶段的训练样本生成策略。 原有基于WordPiece的分词方式会把一个完整的词切分成若干个子词,在生成训练样本时ÿ…...
【华为OD机试真题 java、python、c++】优秀学员统计【2022 Q4 100分】(100%通过)
代码请进行一定修改后使用,本代码保证100%通过率。本文章提供java、python、c++三种代码 题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。 每个员工会对应一个id,每天的打卡记录记录当…...
JavaScript里的循环方法:forEach,for-in,for-of
文章目录forEach循环for–in循环for-of循环for-of循环使用例子:循环一个数组(Array):循环一个字符串:循环一个类型化的数组(TypedArray):循环一个Map:循环一个 Set:循环一个 DOM collection循环一个拥有enumerable属性的对象循环一个生成器(g…...
汽车标定知识整理(二):CCP报文基本命令介绍
目录 一、基本命令 CRO命令报文的基本命令表: 二、基本命令与可选命令帧格式介绍 1、CONNECT——建立连接(0x01) 2、GET_CPP_VERSION——获取CCP版本(0x1B) 3、SET_MTA——设置内存传输地址(0x02&#…...
windows系统安装Linux虚拟机教程
虚拟机的安装首先要下载虚拟机的安装包,当前最新版本是VMware 16.2.1。软件我都已经给大家准备好了(含序列号),大家在这里下载就好。虚拟机安装包下载完毕之后,将它安装到电脑里。这个安装过程很简单,一路下…...
“基于Spring Cloud Alibaba的微服务架构实战:Nacos配置管理“
引言 Spring Cloud Alibaba 是 Spring Cloud 和 Alibaba 集团联合推出的开源微服务框架,旨在为 Java 开发者提供一种简单、易用、高效的微服务解决方案。Nacos 是一个面向云原生应用的动态服务发现、配置管理和服务管理平台,提供了服务注册与发现、配置管…...
【Linux】常见面试题
1. 查看文件内容 cat tail head less more 2. 几个查看文件内容的命令有什么区别 cat 文件名 # 将文件内的内容全部打印出来,cat 文件1 文件2 先将文件1全部法印,然后在打印文件2 more 文件名 # 分屏查看 less 文件名 # 上下分页查看 head 文件…...
【数据结构】顺序表:尾部操作我很行,随机访问我超快!!!
顺序表的模拟实现 文章目录顺序表的模拟实现1.线性表2.顺序表2.1概念结构2.2顺序表的模拟实现2.2.1顺序表的初始化2.2.2顺序表的销毁2.2.3尾插数据2.2.4尾删数据2.2.5头插数据2.2.6头删数据2.2.7中间插入数据2.2.8中间删除数据2.2.9打印顺序表2.2.10查找数据2.2.11复用Insert和…...
SQL优化
SQL优化 SQL优化的方法: sql查询语句尽不使用select * ,而是具体的字段。 节约资源,减少网络开销。减少回表,提高查询效率。 避免在where子句中使用or来连接条件。 or可能会使索引失效,从而进行全表查询。 尽量使用…...
TD-ACC+实验系统入门指南:手把手教你搭建典型环节模拟电路
TD-ACC实验系统实战手册:从零构建典型环节电路的21个关键细节 第一次接触TD-ACC实验系统时,看着密密麻麻的接口和旋钮,我的手指悬在半空迟迟不敢落下——生怕一个错误的连接就会烧毁昂贵的运算放大器。这种忐忑直到成功捕捉到第一个完美方波信…...
终极指南:如何在NixOS上完美打包与使用SilentSDDM主题
终极指南:如何在NixOS上完美打包与使用SilentSDDM主题 【免费下载链接】SilentSDDM A very customizable SDDM theme that actually looks good. 项目地址: https://gitcode.com/gh_mirrors/si/SilentSDDM SilentSDDM是一款高度可定制且视觉精美的SDDM登录主…...
写段代码教会你什么是HOOK技术?HOOK技术能干什么?
起因是我想在搞一些操作windows进程的事情时,老是需要右键以管理员身份运行,感觉很麻烦。就研究了一下怎么提权,顺手瞄了一眼Windows下用户态权限分配,然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧ÿ…...
Qwerty Learner单词难度分级:智能调整训练强度的终极指南
Qwerty Learner单词难度分级:智能调整训练强度的终极指南 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https://…...
苏州沃虎电子(VOOHU)10/100M集成式RJ45连接器SYT111B002BA2A1D产品介绍
苏州沃虎电子科技有限公司(品牌:VOOHU)供应的 SYT111B002BA2A1D 是一款高可靠性集成式RJ45连接器,专为10/100M以太网应用设计。该产品采用90侧插DIP封装,内置网络变压器,具备工业级宽温工作能力和优异的信号…...
Windows系统优化神器:Winhance中文版全面使用指南
Windows系统优化神器:Winhance中文版全面使用指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_CN …...
[具身智能-190]:具身智能常见的仿真平台与常见的模型算法,包括传统算法与AI算法。
在具身智能的开发中,仿真平台与模型算法是相辅相成的两个核心部分。仿真平台为算法提供了安全、高效、低成本的“练兵场”,而算法则是赋予机器人智能的“大脑”。以下为你梳理当前主流的仿真平台以及两类核心的模型算法:传统算法与AI算法。&a…...
手把手教你部署OpenClaw(小龙虾),打造专属AI数字员工
2026年,开源AI智能体OpenClaw(国内昵称“小龙虾”)凭借独特的“数字员工”定位迅速崛起,GitHub星标一路攀升至28万,成为当下最受开发者和办公人群青睐的开源AI项目。 一、OpenClaw核心优势解析 OpenClaw能在众多开源…...
音乐版权侵权避坑指南:明星翻唱踩的红线,这些行为也在踩
短视频/直播/门店公播全场景合规方案 正版商用音乐授权平台推荐央广网北京3月30日消息(记者费权)近日,歌手单依纯在深圳演唱会上未经授权演唱李荣浩原创作品《李白》,而此前李荣浩方已明确婉拒其版权授权申请,中国音乐…...
别再手动调参了!用GCNet模块给你的ResNet模型一键注入全局感知能力(附PyTorch代码)
全局感知能力升级:用GCNet模块为ResNet模型注入高效注意力机制 在计算机视觉领域,ResNet架构因其出色的性能和稳定性成为众多任务的基准模型。然而,随着注意力机制的兴起,传统卷积神经网络在长距离依赖建模上的局限性逐渐显现。本…...
