学习这件事要一点一滴积累,不可心急。

1、LSM树,它是一种数据结构。英文全称,The Log-Structured Merge Tree,翻译为日志结构合并树

2、LSM树并不像B+树、红黑树一样是一颗严格的树状数据结构。

3、HBase、Cassandra、RocksDB和LevelDB这样的Nosql数据库,以及Prometheus,其底层的存储引擎都是基于LSM树。

4、那么多数据结构,LSMTree应该是最年轻的一个,它在1996年被设计出来。

5、LSM树的核心特点是利用顺序写来提高写性能,但因为分层的设计会稍微降低读性能,但是通过牺牲小部分读性能换来高性能写,使得LSM树成为非常流行的存储结构。

6、LSM树是一个横跨内存和磁盘的,包含多颗"子树"的一个森林。

7、LSM树有以下三个重要组成部分:MemTable、Immutable MemTable和SSTable(Sorted String Table)

8、LSM树的Compact策略:size-tiered 策略 和leveled策略

9、LSM树的优点是写入速度快,因为利用了磁盘的顺序写,所以才让Nosql数据库性能比关系型数据库要好。

Nosql存储系统多是 Key-Value结构,最主要功能只有两个:put 和 get

10、LSM树 提供了 排序能力。

11、LSM树是一个多层结构,自上而下存储的数据越来越多。

c0层(内存里)是默认有序的,这个顺序就是key的字典顺序

c1-cN层在磁盘上,每一层都安装key的字典顺序排列。

12、c0层数据写入达到阈值时,会c0层数据会合并到c1层,合并的过程叫compaction。

13、LSM会在compaction中自动删除早期的key 。compaction是个异步的过程,不会影响写入性能

14、从c0到cN数据越来越旧,查询时候是先查c0层,然后c1再c2.,逐层查找。

15、针对读的优化,不同的nosql数据库对其采用不同的方案进行了优化处理,这个和LSM树无关。

16、总结:LSM树的结构就像多层喷泉,上层满了,就会溢出到下一层。

17、LSM的合并compaction在不同的nosql数据库中的落地实践是不一样的。

参考:

LSM树详解 - 知乎

深入浅出分析LSM树(日志结构合并树) - 知乎

LSM树日志结构合并树相关推荐

  1. LSM tree(日志结构合并树)_笔记

    WAL:Write Ahead Log 写前日志,顺序日志文件 1 LSM tree的定义 LSM tree: Log-Structured-Merge-Tree,日志结构合并树. Log-Struc ...

  2. LSM树(日志结构合并树)总结-java版

    目录 为什么要有LSM树 数据库存储引擎索引的底层结构 BTree的随机写特点 LSM树的诞生背景 简介 LSM树与B树的差异 LSM树优化 LSM树基本原理 LevelDB中的LSM HBase中的 ...

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

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

  4. 【图文详解】一文全面彻底搞懂HBase、LevelDB、RocksDB等NoSQL背后的存储原理:LSM-tree日志结构合并树...

    LSM 树广泛用于数据存储,例如 RocksDB.Apache AsterixDB.Bigtable.HBase.LevelDB.Apache Accumulo.SQLite4.Tarantool.W ...

  5. 【图文详解】一文全面彻底搞懂HBase、LevelDB、RocksDB等NoSQL背后的存储原理:LSM-tree 日志结构合并树...

    LSM 树广泛用于数据存储,例如 RocksDB.Apache AsterixDB.Bigtable.HBase.LevelDB.Apache Accumulo.SQLite4.Tarantool.W ...

  6. three.js实现3d球体树状结构布局——添加入场、出场、点击放大等动画

    目录 系列文章 前言 新增功能 添加背景 灯光旋转动画 数据入场.出场动画 点击放大 实现效果 实现源码 相关资源 系列文章 three.js实现3d球体树状结构布局--树状结构的实现 前言 本文建议 ...

  7. LSM树——LSM 将B+树等结构昂贵的随机IO变的更快,而代价就是读操作要处理大量的索引文件(sstable)而不是一个,另外还是一些IO被合并操作消耗。...

    Basic Compaction 为了保持LSM的读操作相对较快,维护并减少sstable文件的个数是很重要的,所以让我们更深入的看一下合并操作.这个过程有一点儿像一般垃圾回收算法. 当一定数量的ss ...

  8. SDUT 2127 树-堆结构练习——合并果子之哈夫曼树(优先队列)

    树-堆结构练习--合并果子之哈夫曼树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description ...

  9. 树-堆结构练习——合并果子之哈夫曼树

    树-堆结构练习--合并果子之哈夫曼树 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆 ...

最新文章

  1. MyBatis的一对和多对对和动态SQL
  2. javascript运行过程中的“预编译阶段”和“执行阶段”
  3. python signal模块作用_如何理解python中信号Signal?
  4. linux安装之后缺少命令,CentOS7安装成功后缺少命令的解决办法
  5. 我的世界java版_我的世界Java版1.15版本
  6. Zookeeper开源客户端curator
  7. 部署war包到tomcat根目录
  8. 传感器实训心得体会_传感器心得体会范文
  9. php exeil导入,反编译工具ILSpy.exe
  10. vue3中json编辑器
  11. Js实现实时显示系统时间(获取当前时间并显示)
  12. three.js 08-03 之 加载和保存对象
  13. invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix
  14. 友善串口工具 电子秤_Serial Port Utility(友善串口调试助手)
  15. 我用python代码表白,泡到了大学小师妹
  16. Windows技术文章汇集
  17. oracle中execute是什么意思,oracle中EXECUTEIMMEDIATE是什么意思?如何使用,请用自己......
  18. 送20本豆瓣高分技术图书!
  19. git代码使用空格缩进
  20. 前端Vue制作日历插件FullCalendar

热门文章

  1. 数据标注有哪些类型?
  2. Nginx在linux上的安装
  3. android 原生按键事件触发
  4. linux应用程序通常由哪些文件组成,Linux系统的帐号文件由哪些组成( )。
  5. RabbitMQ延迟消息:死信队列 | 延迟插件 | 二合一用法+踩坑手记+最佳使用心得
  6. 判断正规的股票杠杆平台?五大特点请查收
  7. Macbook pro 加内存
  8. 锋利的JQuery:Ajax方法获取后端Json数据(Object、List、Map)并遍历
  9. 抖音seo优化排名搜索算法规则,关键词下拉框搜索栏标签流量技术代码分享
  10. 元素显示和隐藏的过渡效果