【博客718】时序数据库基石:LSM Tree(log-structured merge-tree)

时序数据库基石:LSM Tree(log-structured merge-tree)

1、为什么需要LSM Tree

LSM被设计来提供比传统的B+树更好的写操作吞吐量,通过消去随机的本地更新操作来达到这个目标,使得写入都是顺序写,而不是随机写。
那么为什么这是一个好的方法呢?这个问题的本质还是磁盘随机操作慢,顺序读写快的老问题。这二种操作存在巨大的差距,无论是磁盘还是SSD。

2、LSM Tree是一种思想,非固定实现方式

LSM树是一种将:

  • 磁盘顺序写
  • 多个树状数据结构集合
  • 冷热(新老)数据分级
  • 定期归并
  • 非原地更新

这几种特性统一在一起的思想。

综述:LSM树的核心特点是利用顺序写来提高写性能,但因为分层(此处分层是指的分为内存和文件两部分)的设计会稍微降低读性能,但是通过牺牲小部分读性能换来高性能写,使得LSM树成为非常流行的存储结构。

3、LSM Tree的定义:

  • LSM树是一个横跨内存和磁盘的,包含多颗"子树"的一个森林。
  • LSM树分为Level 0,Level 1,Level 2 … Level n 多颗子树,其中只有Level 0在内存中,其余Level 1-n在磁盘中。
  • 内存中的Level 0子树一般采用排序树(红黑树/AVL树)、跳表或者TreeMap等这类有序的数据结构,方便后续顺序写磁盘。
  • 磁盘中的Level 1-n子树,本质是数据排好序后顺序写到磁盘上的文件,只是叫做树而已。
  • 每一层的子树都有一个阈值大小,达到阈值后会进行合并,合并结果写入下一层。
  • 只有内存中数据允许原地更新,磁盘上数据的变更只允许追加写,不做原地更新。

在这里插入图片描述

4、LSM Tree中的各级结构

在这里插入图片描述

4-1、MemTable

MemTable是在内存中的数据结构,用于保存最近更新的数据,会按照Key有序地组织这些数据,LSM树对于具体如何组织有序地组织数据并没有明确的数据结构定义,例如Hbase使跳跃表来保证内存中key的有序。

因为数据暂时保存在内存中,内存并不是可靠存储,如果断电会丢失数据,因此通常会通过WAL(Write-ahead logging,预写式日志)的方式来保证数据的可靠性。

4-2、Immutable MemTable

当 MemTable达到一定大小后,会转化成Immutable MemTable。Immutable MemTable是将转MemTable变为SSTable的一种中间状态。写操作由新的MemTable处理,在转存过程中不阻塞数据更新操作。

4-3、SSTable

LSM Tree采取读写分离的策略,会优先保证写操作的性能;其数据首先存储内存中,而后需要定期 Flush 到硬盘上。LSM-Tree 通过内存插入与磁盘的顺序写,来达到最优的写性能,因为这会大大降低磁盘的寻道次数,一次磁盘 IO 可以写入多个索引块。HBase, Cassandra, RockDB, LevelDB, SQLite 等都是基于 LSM Tree 来构建索引的数据库;LSM Tree 的树节点可以分为两种,保存在内存中的称之为 MemTable, 保存在磁盘上的称之为 SSTable。

LSM tree 通过一种叫做 SSTable (Sorted Strings Table) 的格式,持久化到硬盘上。正如其名,SSTable 是一种用来存储有序的键值对的格式,其中键的组织是有序存储的。一个SSTable 会包括多个有序的子文件,被称为 segment 。 这些 segments 一旦被写入硬盘,就不可以再修改了。一个简单的SSTable 例子如下图所示:

在这里插入图片描述

SSTable的查找优化:
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Redis在互联网大厂中的应用案例分析

携程金融的Redis架构 携程金融在经过多年的演进后,形成了多层次的系统架构,其中基础数据(如用户信息、产品信息、订单信息等)由底层系统产生,并服务于所有的金融系统。这些基础数据通过统一的缓存服务(系统名utag)进行缓存。缓存数据具有全量、准实时、永久有效的特点,…

【漏洞复现】东胜物流软件 GetProParentModuTreeList SQL注入漏洞

0x01 产品简介 东胜物流软件是青岛东胜伟业软件有限公司-款集订单管理、仓库管理、运输管理等多种功能于一体的物流管理软件。该公司初创于2004年11月(前身为青岛景宏物流信息技术有限公司),专注于航运物流相关环节的产品和服务。东胜物流信息管理系统货代版采用MS…

个人网站制作 Part 26 添加在线日历功能 | Web开发项目添加页面缓存

文章目录 👩‍💻 基础Web开发练手项目系列:个人网站制作🚀 添加在线日历功能🔨使用日历服务🔧步骤 1: 选择日历服务🔧步骤 2: 安装FullCalendar🔧步骤 3: 创建FullCalendar组件&…

【健身经验】3 拜拜肉

1 女性手臂粗细与紧实程度,除了取决于运动和生活习惯,很大程度上取决于遗传因素 2 2 如果体脂已经很正常了,整体看起来匀称不胖,偏偏这两块肌肉附近的脂肪“顽固不化”的话,可以试试以下两个简单方法 对于体脂率正常…

XUbuntu22.04之ssh+x11显示远程图形到本机(二百四十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

手把手带你开发一套用户权限系统,精确到按钮级

在实际的软件项目开发过程中,用户权限控制可以说是所有运营系统中必不可少的一个重点功能,根据业务的复杂度,设计的时候可深可浅,但无论怎么变化,设计的思路基本都是围绕着用户、角色、菜单这三个部分展开。 如何设计…

光电展厅如何运用数字多媒体实现互动传播?

近年来,展厅设计行业在多媒体技术的推动下,迎来了前所未有的变革与繁荣。在这一浪潮中,光电展厅凭借其智能化科技的应用和紧跟时代潮流的设计,成为了电力知识普及的璀璨舞台。它不仅在展示形式上实现了多元化和创新,更…

【linux】认识“文件”的本质,理解“文件系统”的设计逻辑,体会linux优雅的设计理念

⭐⭐⭐个人主页⭐⭐⭐ ~~~~~~~~~~~~~~~~~~ C站最❤❤❤萌❤❤❤博主 ~~~~~~~~~~~~~~~~~~~ ​♥东洛的克莱斯韦克-CSDN博客♥ ~~~~~~~~~~~~~~~~~~~~ 嗷呜~ ✌✌✌✌ 萌妹统治世界~ 🎉🎉🎉🎉 ✈✈✈✈相关文章✈✈✈✈ &#x1f4a…

REST风格

黑马程序员Spring Boot2 文章目录 1、REST简介1.1 优点1.2 REST风格简介1.3 注意事项 2、RESTful入门案例 1、REST简介 1.1 优点 隐藏资源的访问行为,无法通过地址的值对资源适合中操作书写简化 1.2 REST风格简介 按照RST风格访问资源时使用行为动作区分对资源进…

unity跑酷游戏(源码)

包括:触发机关, 优化 fog的调试 效果 碰到障碍物游戏时间暂停(挂载到障碍物上) 上面需要有碰撞体 游戏物体上需要有标签 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Barri…

SSM考研咨询app-计算机毕业设计源码05262

摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设考研咨询app。 本设计…

系统运维联盟 5 月会议召开,围绕“进展、规划与合作”展开讨论

2024 年 5 月 28 日,龙蜥社区系统运维联盟(SOMA,以下简称“运维联盟”)月度会议于线上召开,12 家运维联盟单位、 20 位代表出席,缺席 1 家。本次会议由龙蜥社区运营委员会副主席、运维联盟秘书处负责人金美…

使用Python和TCN进行时间序列预测:一个完整的实战示例

使用Python和TCN进行时间序列预测:一个完整的实战示例 时间卷积网络(TCN)已被证明在处理序列数据方面表现出色,尤其是在需要捕获长期依赖关系的任务中。在本文中,我们将通过一个简单的例子,展示如何使用Py…

24年最新版基础入门大模型辅助Python编程指南

今天这篇文章只会聊 Python 入门基础,如何通过大模型辅助Python 编程,在 后续的文章里慢慢聊。 一点点 python都不会。又想用大模型带飞,辅助 python 编程,提升数据分析能力和效率,怎么办? 一点都不需要担…

孟德尔随机化R包:TwoSampleMR和MR-PRESSO安装

1. 孟德尔随机化R包 看一篇文章,介绍孟德尔随机化分析,里面推荐了这两个R包,安装了解一下: Methods:Genome-wide association study (GWAS) data for autoimmune diseases and AMD were obtained from the IEU Open GWAS databas…

Three.js动效(第12辑):效果炫酷,但性能问题突出,如何破?

Three.js是一款强大的3D渲染引擎,但是在处理大量数据时,可能会出现性能问题。贝格前端工场结合过往经验,给大家几条性能优化的建议。 1. 减少渲染次数: 可以通过合并对象、使用InstancedMesh等方式减少渲染次数,从而…

Nginx+keepalived实现高可用

目录 主要功能 典型应用场景 优点 keepalived工作原理 Nginxkeepalived高可用实验 一. 环境准备 二. 下载并部署配置 对master和backup都操作 对master主机操作 对备用backup主机进行操作 验证当主节挂掉,VIP能否转义到备用机 "Keepalived" …

SpringBoot+Vue实现Excel文档导入和导出

1.准备工作 1.1.前端程序 在前端首先加上批量导出的按钮&#xff0c;如下 <el-button size"small" type"warning" plain click"exportData"> 批量导出 </el-button> 在添加了点击事件之后&#xff0c;在methods中要与之对应的添加上…

c#引用dll报错cs8370功能“本地函数特性“在c#7.3中不可用

cs8370:功能"本地函数特性"在c#7.3中不可用 解决方法&#xff1a; 代码放在form类里面

SJ703安全帽防静电测试仪

一、仪器用途 专门检测安全帽防静电性能。 二、仪器特征 1、携带使用轻便、量程宽广、读数准确&#xff0c;耐震性强等卓越优点 2、超上限时显示‘1’提示和低于下限时声响报警。 3、电池欠压时显示欠压符号“←”提示。 4、交流或直流&#xff08;电池&#xff09;供电任…