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

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查起,逐层查

逐层查太慢了

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

在这里插入图片描述

  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.lryc.cn/news/31518.html

相关文章:

  • Python QT5设计UI界面教程
  • uniapp系列-图文并茂手把手教你hbuilder进行uniapp云端打包 - 安心打包
  • 【精品】SpringBoot中基于拦截器实现登录验证功能
  • 哈工大服务科学与工程第一章作业
  • SpringMVC源码:参数解析、方法调用与返回值处理
  • 【MySQL】表的数据处理
  • 反思当下所处的环境,有没有让你停滞不前、随波逐流
  • 小程序(十四)后端-签到成功
  • X264简介-Android使用(一)
  • DetectGPT:使用概率曲率的零样本机器生成文本检测
  • 【深度学习】BERT变体—BERT-wwm
  • 【华为OD机试真题 java、python、c++】优秀学员统计【2022 Q4 100分】(100%通过)
  • JavaScript里的循环方法:forEach,for-in,for-of
  • 汽车标定知识整理(二):CCP报文基本命令介绍
  • windows系统安装Linux虚拟机教程
  • “基于Spring Cloud Alibaba的微服务架构实战:Nacos配置管理“
  • 【Linux】常见面试题
  • 【数据结构】顺序表:尾部操作我很行,随机访问我超快!!!
  • SQL优化
  • Java ArrayList 和 LinkList 原理对比
  • 【Spring】入门概述(一)
  • 十二、面向切面编程AOP
  • Mybatis 处理 CLOB/BLOB 类型数据
  • 【NLP经典论文阅读】Efficient Estimation of Word Representations in Vector Space(附代码)
  • Spring bean生命周期分为几个阶段?
  • 【基础算法】单链表的OJ练习(4) # 分割链表 # 回文链表 #
  • SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)
  • Arduino添加ESP32开发板
  • Mysql通配符的使用
  • RocketMQ-02