文章目录

  • 是什么
  • LSM树诞生背景
  • LSM树原理
  • 数据结构
  • 写操作原理
  • Compact
    • size-tiered 策略
    • level策略
  • 和mysql的B+树对比

是什么

LSM树,日志结构合并树(Log-Structured Merge-Tree)。
其实它并不属于一个具体的数据结构,它更多是一种数据结构的设计思想。大多NoSQL数据库都是基于LSM来做的。

LSM树诞生背景

传统关系型数据库使用btree或一些变体作为存储结构,能高效进行查找。但保存在磁盘中时它也有一个明显的缺陷,那就是逻辑上相离很近但物理却可能相隔很远,这就可能造成大量的磁盘随机IO。为了提升IO性能,可以利用LSM树实现顺序写磁盘,从而大幅提升写操作,作为代价的是牺牲了一些读性能(因为LSM树的两个数据结构分别在内存和磁盘,所以读数据会比较慢)。
所以利用LSM树的话,写操作效率高于读操作

LSM树原理

LSM树由两个或以上的存储结构组成,
一个存储结构常驻内存中,称为C0 tree,具体可以是任何方便健值查找的数据结构,比如红黑树。
另外一个存储结构常驻在硬盘中,称为C1 tree,具体结构类似B树。C1所有节点都是100%满的,节点的大小为磁盘块大小。

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

数据结构


如上图所示,LSM树有以下三个重要组成部分:

  1. MemTable

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

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

  1. Immutable MemTable

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

  1. SSTable(Sorted String Table)

有序键值对集合,是LSM树组在磁盘中的数据结构。为了加快SSTable的读取,可以通过建立key的索引以及布隆过滤器来加快key的查找。

写操作原理

每执行一条数据更新操作,LSM树就会将数据更新的操作记录(注意是操作记录)顺序append到内存之中,由于是顺序写所以很快,当日志达到一定的数据量后,再批量地顺序写入到磁盘当中。

存在问题:冗余存储
因为每条更新操作都会保存下来,所以存在对同一key的多条数据操作记录日志,而只有最新的一条日志是有效的,其余都是过期日志。
解决办法:Compact操作(合并多个SSTable)来清除冗余的记录。

Compact

Compact有两种模式:size-tiered和leveled

size-tiered 策略

size-tiered策略保证每层SSTable的大小相近,同时限制每一层SSTable的数量。如上图,每层限制SSTable为N,当每层SSTable达到N后,则触发Compact操作合并这些SSTable,并将合并后的结果写入到下一层成为一个更大的sstable。

由此可以看出,当层数达到一定数量时,最底层的单个SSTable的大小会变得非常大。并且size-tiered策略会导致空间放大比较严重。即使对于同一层的SSTable,每个key的记录是可能存在多份的,只有当该层的SSTable执行compact操作才会消除这些key的冗余记录。

level策略

推荐看这个讲解

和mysql的B+树对比

这与B+树不同,B+树数据的更新会直接在原数据所在处修改对应的值,所以存在随机写导致写操作很慢,
而LSM是将更新操作顺序append到内存,然后批量顺序写入磁盘,两次写操作都是顺序写,会很快。

数据结构-LSM树(NoSQL数据库常用)相关推荐

  1. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁

    1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...

  2. 数据库关于B树、B+树、LSM树的简介

    B树 在计算机科学中,B树(英语:B-tree)是一种自平衡的树,能够保持数据有序.这种数据结构能够让查找数据.顺序访问.插入数据及删除的动作,都在对数时间内完成.B树,概括来说是一个一般化的二叉查找 ...

  3. 数据结构(四)、LSM树(日志结构合并树)

    传统关系型数据库大都使用B-Tree或其变体作为存储结构,能够进行高效查找.但保存在磁盘中时它也有一个明显的缺陷,那就是逻辑上相离很近但物理却可能相隔很远,这就可能造成大量的磁盘随机读写.因此对于关系 ...

  4. LSM树——Log-Structured Merge-Tree数据结构、LSM树设计思想、LSM的数据写入操作、LSM的数据查询操作

    LSM树数据结构 简介 传统关系型数据库,一般都选择使用B+树作为索引结构,而在大数据场景下,HBase.Kudu这些存储引擎选择的是LSM树.LSM树,即日志结构合并树(Log-Structured ...

  5. LSM树数据结构介绍

    LSM树详情介绍 LSM树(Log-Structured-Merge-Tree)的名字往往会给初识者一个错误的印象,事实上,LSM树并不像B+树.红黑树一样是一颗严格的树状数据结构,它其实是一种存储结 ...

  6. lsm mysql_基于LSM树的Oracle数据库数据处理方法与流程

    本发明涉及一种数据处理方法,尤其涉及一种基于LSM树的Oracle数据库数据处理方法. 背景技术: 数据库有三种基本的存储方式:1.哈希表,支持增.删.改以及随机读取操作,但不支持顺序扫描,对应的存储 ...

  7. 一网打尽2013最常用的NoSQL数据库

    摘要:与关系数据库相比,每个NoSQL都有自己不同的适用场景,这里带大家盘点文档数据库.图数据库.键值数据存储.列存储数据库与内存数据网络等领域的常用的NoSQL. 在几年内,NoSQL数据库一直以性 ...

  8. SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis.

    SSDB 一个高性能的支持丰富数据结构的 NoSQL 数据库, 用于替代 Redis. 特性 替代 Redis 数据库, Redis 的 100 倍容量 LevelDB 网络支持, 使用 C/C++ ...

  9. NoSQL之Redis配置与数据库常用命令

    目录 一.关系型数据库与非关系型数据库概述 1.1 关系型数据库 1.2 非关系型数据库 二.关系型数据库与非关系型数据库的区别 2.1 数据的存储方式不一样 2.2 扩展的方式不同 2.3 对事务性 ...

最新文章

  1. shell实现批量在多台windows服务器上执行同一命令并获取返回结果
  2. Rk3288运行linux,查看“Firefly-rk3288 build linux”的源代码
  3. 【2014年计划】工作,学习两不误
  4. 【代码升级】【iCore3 双核心板】例程二十八:FSMC实验——读写FPGA
  5. linux java php_Linux PHP 搭建 JavaBridge
  6. slf4j+logback使用
  7. c语言题 设圆的半径,C语言初学者:编程序:设圆半径r圆柱高h,求圆周长面积圆柱体积圆球表面积...
  8. Mysql切换用户,登录用户
  9. 动画设计基础(第二节)-3d max2014-骨骼飘带(错帧)
  10. 南京大学计算机考研复试线2021,南京大学2021年考研复试基本分数线已发布
  11. 吴裕雄 18-MySQL GROUP BY 语句
  12. 用debugserver+lldb代替gdb进行iOS远程动态调试
  13. [ZT]把IM做成避风塘
  14. 震惊!十六岁少女竟然被三名阿里p8老师讲解{常见面试题汇总}
  15. 【多元统计分析】14.贝叶斯判别法
  16. C++ STL常见容器
  17. 直播源码网站,点击分享按钮,分享到各个渠道功能的实现
  18. 解决linux下退格时,出现^H^H^H^H的问题
  19. JAVA + OPENCV+bgra四通道转bgr三通道
  20. 微信服务器每年维护成本,运维工匠熊普江:微信精细化运维,每年节省带宽成本14亿!...

热门文章

  1. js控制div滚动条的显示/隐藏
  2. 【Java】Java中用redis生成每天从0开始的业务ID
  3. 「镁客早报」FDA试点项目将测试区块链,以遏制假药;努比亚折叠屏新品将亮相MWC2019...
  4. python removebg_不到20行实现Python代码即可制作精美证件照
  5. 洛谷P1966 火柴排队(cdq分治 + 逆序对)
  6. Midjourney摄影真人风,超高清图片一篇足够
  7. MAC vim修改hosts文件
  8. vim配置vimrc
  9. 【微信小程序项目实践总结】30分钟从陌生到熟悉
  10. KOOCAN觉得这部中国剧比电锯惊魂还要重口!