LSM-Tree

2023-11-14

LSM-Tree的设计思路是,将数据拆分为几百M大小的Segments,并是顺序写入

        它的核心思路其实非常简单,就是假定内存足够大,因此不需要每次有数据更新就必须将数据写入到磁盘中, 而可以先将最新的数据驻留在内存中。等到积累到最后多之后,再使用归并排序的方式将内存内的数据合并追加到磁盘队尾 (因为所有待排序的树都是有序的,可以通过合并排序的方式快速合并到一起)。

优点

  1. LSM-Tree的优点是支持高吞吐的写(可认为是O(1))

    • 写入 memTable 后就返回

  2. 针对读取普通的LSM-Tree结构,读取是O(N)的复杂度,在使用索引或者缓存优化后的也可以达到O(logN)的复杂度。

缺点

  1. 写放大:整个系统需要频繁的compaction,消耗CPU和存储IO

  2. 读放大

write

        大体思路是:插入一条新纪录时,首先在日志文件中插入操作日志,以便后面恢复使用,日志是以append形式插入,所以速度非常快;将新纪录的索引插入到C0中,这里在内存中完成,不涉及磁盘IO操作;当C0大小达到某一阈值时或者每隔一段时间,将C0中记录滚动合并到磁盘C1中;对于多个存储结构的情况,当C1体量越来越大就向C2合并,以此类推,一直滚动往上合并Ck。

  1. WAL(write ahead log): 先写日志,即使宕机了,也能恢复之前写入的数据

  2. “顺序追加”写内存中的memTable,memTable采用跳表的数据结构,因此按照key进行排序

  3. 当memTable超过一定大小后,会在内存中冻结,变成不可变的memTable(immutable memTable),同时,为了不阻塞写,会新建一个memTable继续提供服务

  4. 把内存中的immutable memTable保存到SSTable层中,此步骤称为minor compaction

    • 这里需要注意

      • 在L0层的SSTable是没有进行合并的,所以这里的key range在多个SSTable中可能会出现重叠

      • 在层数大于0之后的SSTable不存在重叠key(因为>0层的SSTable会发生合并)

  5. 当每层磁盘上的SSTable的体积超过一定的大小或个数,就会周期性的合并。此步骤称为major compaction。这个阶段会真正的清除掉被标记删除掉的数据以及多版本数据的合并,避免浪费空间。

    • 由于每个SSTable都是有序的,在合并的时候,可以采用merge sort进行高效合并

[[Q1] ]  为什么LSM不直接顺序写磁盘,而是需要在内存中缓存一下? 

[A1]: ①单条写的性能肯定没有批量写来的快,批量写入来提高写入速度 ②针对新增数据,可以直接从内存中查询到,加速查询速度

read

  1. 查询内存中的memTable

  2. 依次下沉,直到把所有level层的SSTable查询一遍得到最终结果

[Q]: level 0的多个SSTable有重叠的key,它是怎么保证读取时怎么保证读到的不是老的数据?

[A]: read(key)时得到的val也一定是最新的==>是因为是按照顺序追加写入的,后写入的key,一定会落在新的SSTable上(读取时的顺序,也是按照读取最新的SSTable)

  • read优化

    1. 优化原因

      • read最坏的情况,将所有level上的SSTable都扫描一遍

    2. 优化方式

      1. 压缩

        • 这种压缩并不是将整个SSTable一起压缩,而是根据locality将数据分组,每个分组分别压缩,这样的好处是当读取数据的时候,不需要解压缩整个文件,而是解压缩部分Group就可以读取

      2. 缓存

        • 因为SSTable在写入磁盘后,除了Compaction之外,是不会变化的 ==> 所以可以将Scan的Block进行缓存,从而提高检索效率

      3. 索引、BloomFilter

        1. 正常情况下,一个read操作需要读取所有SSTable将结果合并后再返回,但是对于某些key而言,有写SSTable上根本不包含该key对应的数据 ==> 所以,可以给每个SSTable添加BloomFilter ==> 用于判断某个SSTable不存在某个key

      4. 合并时间在晚上开启,白天禁用合并

        • 这个在前面的写入流程中已经介绍过,通过定期合并瘦身,可以有效的清除无效数据,缩短读取路径,提高磁盘利用空间。但Compaction操作是非常消耗CPU和磁盘IO的,尤其是在业务高峰期,如果发生了Major Compaction,则会降低整个系统的吞吐量,这也是一些NoSQL数据库,比如Hbase里面常常会禁用Major Compaction,并在凌晨业务低峰期进行合并的原因。



LSM树 · 进击的java菜鸟

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LSM-Tree 的相关文章

  • 模拟电路设计的九个级别,你是模电几段?

    众 生 所 搬 周 硬 知 套 模拟电路设计的九个级别 类似下围棋的段位 快来看看自己处于什么水平 感觉九段已经是世外高人了 一段 你刚开始进入这行 对PMOS NMOS BJT什么的只不过有个大概的了解 各种器件的特性你也不太清楚 具体设
  • VSCode——修改VSCode背景图片

    1 以管理员身份运行VS Code 安装background插件 2 打开设置 在搜索框中输入background 选择扩展中的plugin background 选择在setting json中编辑 3 在用户设置中输入以下代码 修改完后
  • [QT入门篇]信号槽机制

    一 信号与槽的引入 信号与槽 Signal Slot 是 Qt 编程的基础 信号槽 实际是观察者模式 发布 订阅模式 当某个事件发生之后 比如 按钮检测到自己被点击了一下 它就会发出一个信号 signal 这种发出是没有目的的 类似广播 如
  • 【NLP】第 1 章 :机器阅读理解简介

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • Python可视化-气泡图

    气泡图类似散点图 也是表示XY轴坐标之间的变化关系 也可以像彩色散点图给点上色 区别在于可以通过图中散点的大小来直观感受其所表示的数值大小 一 数据文件准备 1 PeopleNumber csv city people price NJ 8
  • Android VNDK的作用

    本文目的是让你理解VNDK是什么作用 暂不做细节讲解 在Android 8 0及更高版本中 引入了很多技术都是为了将system和vendor分离 这样设备厂商和芯片供应商只需关心vendor实现 那么vendor实现时要加载framewo
  • 【总结】前端常用编码写法合集

    一 css样式 1 文字多行溢出 单行溢出 overflow hidden white space nowrap text overflow ellipsis 多行溢出 display webkit box webkit box orien
  • Vue教程(一):Vue核心

    Vue教程 一 Vue核心 1 1 Vue简介 1 1 1 Vue是什么 一套用于构建用户界面的渐进式JS框架 1 1 2 谁开发的 尤雨溪 2015 10 27 正式发布 Vue1 0 0 Evangelion 新世纪福音战士 2016
  • C语言 结构体初阶

    头文件 define CRT SECURE NO WARNINGS 1 include
  • 毕设系列三之利用tensorflow做深度学习情感分析

    利用tensorflow做深度学习情感分析 深度学习作为一项学习数据的多层特征或表征的强大机器学习技术 此项目中 将使用tensorflow深度学习平台 通过相关模型的构建 以及数据的处理 完成微博评论情感分析 已到达类似百度AI情感分析功
  • 多态(polymorphic)

    目录 1 多态的基本介绍 2 多态实现条件 3 重写 重写的介绍 重写和重载的区别 动 静态绑定机制 5 向上转型和向下转型 向上转型 向上转型的特点 总结 向下转型 多态的优缺点 多态是Java三大基本特征中最抽象也是最重要的特征 多态是
  • Html获取Url参数 解决中文乱码

    Html 获取 Url 参数 解决中文乱码 方法一 分割为数组 function getQueryVariable name var query window location search substring 1 var vars que
  • hibernate 反向生成数据库表

    hibernate 配置属性中 hibernate hbm2ddl auto可以帮助你实现正向工程 即由 java 代码生成数据库脚本 进而生成具体的表结构 在hibernate cfg xml中 java 代码 html view pla

随机推荐

  • idea

    1 本人最近刚开始切换到 Intellij idea 发现一个问题 maven工程项目老是有红色下划线提示错误 Cannot Resolve Symbol 但是这些依赖都已经通过pom引进了 idea的Library中也能看到 试一下Fil
  • mysql 建表语句 及完整案例

    1 最简单的 表名为name info 只包含id列和name列 执行sql语句 CREATE TABLE name info id int not null name char 12 2 将id列设置为主键 执行sql语句 CREATE
  • 数据结构Java实现06----中缀表达式转换为后缀表达式

    本文转载至 http www cnblogs com smyhvae p 4790373 html 本文主要内容 表达式的三种形式 中缀表达式与后缀表达式转换算法 一 表达式的三种形式 中缀表达式 运算符放在两个运算对象中间 如 2 1 3
  • 【华为OD机试真题 JS】火锅

    标题 火锅 时间限制 1秒 内存限制 262144K 语言限制 不限 入职后 导师会请你吃饭 你选择了火锅 火锅里会在不同时间下很多菜 不同食材要煮不同的时间 才能变得刚好合适 你希望吃到最多的刚好合适的菜 但是你的手速不够快 用m代表手速
  • [培训-无线通信基础-2]:无线电磁波传播机制(传播、衰减、链路预算)

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 118667807 引言 既然无
  • vue crypto-js加解密

    1 安装crypto js npm install crypto js save 2 编写encrypt js const CryptoJS require crypto js import md5 from js md5 var key
  • 关于程序员【锁死】服务器

    干程序员这么多年 头一次听说 锁死 服务器这么个名词 乍一听到被媒体造的这个名词 觉着很突兀 自己念两遍就会感到头疼 恶心 想吐这么膈应 服务器到底是怎么 锁死 的 什么玩意 你看看人家 数据库系统概论 里面人家关于 锁 的一个翻译 死锁
  • ARM单片机通用IAP在线升级YMODEM协议

    ARM单片机通用IAP在线升级YMODEM协议 效果 YMODEM协议格式 移植修改接口 测试代码 代码获取 效果 YMODEM协议格式 接收开始流程 接收者1HZ发送接收状态 C C 代表字符 C 进入接收状态 发送者发送起始帧 SOH
  • 目标检测学习笔记+附入门资料+表面缺陷检测

    待更新补充 文章目录 放在最前 MARK入门阅读学习资料 一 目标检测基本概念 1 名词含义 目标检测 目标检测方法的分类 Bounding box 滑动窗口 R CNN步骤详解 交并比Interest over Union IoU 平均精
  • 对全连接层(fully connected layer)的通俗理解

    原文地址 https blog csdn net qq 39521554 article details 81385159 定义 全连接层 fully connected layers FC 在整个卷积神经网络中起到 分类器 的作用 如果说
  • matplotlib绘图

    孤影常伴灯 你在夜里写字 我在昏黄中布景 风吹皱那烟波浩渺的迷离 也想吹散关于你的记忆 你在红尘打坐 我在紫陌修佛 万般皆因果 何须嗔叹 闲来无事 索然无趣 忽而兴起 画几个简单的数据分析图 一 将数据生成柱状图 代码 coding utf
  • 【计算机网络】TCP/IP网络模型里这些问题你会吗

    零 为什么需要有TCP IP网络模型 不同设备的进程之间相互通信 需要网络通信 而设备存在多样性 需要兼容各种设备 从而协商出一套通用的网络协议 并且这个网络协议是分层的 每层都有各自的作用和职责 一 最上层是哪层 应用层 1 该层有哪些协
  • SQL 经典面试题:统计最近七天连续三天活跃的用户

    1 需求 给定 mid dt 的用户登录记录表 查找最近 7 天内连续 3 天活跃的用户 id 2 数据表 tmp table tmp login test CREATE TABLE tmp table tmp login test mid
  • 5G UE测量

    目录 系列文章目录 一 为何干测量 二 测量干了啥 三 何时干测量 四 用啥干测量 五 怎么干测量 如 以上就是今天要讲的内容 本文仅仅简单从缘由 结果 时机 原料 过程五个方面概述了5G UE测量大至的来龙去脉 一 为何测量 移动 性管理
  • 【hello Linux】进程信号

    目录 1 进程信号的引出及整体概况 2 信号的产生 1 键盘产生 2 进程异常 3 系统调用 4 软件条件 3 信号的保存 1 信号相关的常见概念 2 sigset t 3 信号集操作函数 4 sigprocmask 对block位图的操作
  • 5.4双积分ADC工作原理

    文章目录 1 高中几个知识点 exp n log n lgx lnx 电容充放电公式 2 双积分型ADC工作原理 3 SAR和 型模数转换器 ADC 1 高中几个知识点 exp n exp函数即指数函数 e的n次方的函数 自然常数e 2 7
  • Java 异常创建及控制

    最近在重新拾起Java 想开始分享一些自己的表达 就从这里开始了 Java中有一个Throwable类 它是所有异常或者说是违例的基础 包括了两种类型的异常 一种叫Error 表示的是编译器和系统错误 我们通常不需要去在意它们 另一种叫Ex
  • 国产版ChatGPT大盘点

    我们看到 最近 国内大厂开始密集发布类ChatGPT产品 一方面 是因为这是最近10年最大的趋势和机会 另一方面 国内的AI 不能别国外卡了脖子 那在类ChatGPT赛道上 哪些中国版的ChatGPT能快速顶上 都各有哪些困境需要突破呢 本
  • 第七周作业1

    1 调试分析课本每一个例题 有可能的话更改成2 3个方法的新程序 2 编程实现课本每一个编程习题 例5 1 include
  • LSM-Tree

    LSM Tree的设计思路是 将数据拆分为几百M大小的Segments 并是顺序写入 它的核心思路其实非常简单 就是假定内存足够大 因此不需要每次有数据更新就必须将数据写入到磁盘中 而可以先将最新的数据驻留在内存中 等到积累到最后多之后 再