1      概念

LSM = Log Structured Merge Trees

来源于google的bigtable论文。

2      解决问题

传统的数据库如MySql采用B+树存放数据,B+树是一个随机读写的数据结构。 我们知道,顺序读写要比随机读写快无数倍,所以需要把数据结构改成顺序读写。

3      应用场景

LSM是当前被用在许多产品的文件结构策略:HBase, Cassandra, LevelDB, SQLite,甚至在mangodb3.0中也带了一个可选的LSM引擎(Wired Tiger 实现的)。

LSM-Tree比较适合的应用场景是:insert数据量大,读数据量和update数据量不高且读一般针对最新数据。

4      实现原理

4.1      基本原理

1、  数据按时间和大小分文件存放(sstable文件)。

2、  新的修改用Copy-On-Write Tree方式按key缓存在内存(memtable)中,内存中保序。

3、  内存达到时间或大小条件后,保存在一个新的文件里(顺序写,速度很快)。

4、  对已经保存的文件,不再修改。

5、  查询的时候,先查内存,然后依次查各个保存的文件。

6、  因为每个文件里的数据都是顺序存放的,所以查询速度较快(二分查找)。

4.2      提升读性能的方案

1、  定时触发文件合并操作,删除冗余记录,并减少文件个数,提升查询效率(由于sstable里的记录是顺序存放的,所以合并非常高效(归并算法、顺序读写))。

2、  采用页缓存,减少二分查找的消耗。LevelDB 和 BigTable 是将 block-index 保存在文件尾部,这样查找就只要一次IO操作,如果block-index在内存中。

3、  采用布隆过滤器,减少不存在数据的判定逻辑。

4、  并行合并。

打个比方,合并操作就是JVM里的GC,在合并的时候,势必会影响其他操作。所以我们用G1的思想,把文件分区域,各个区域分别合并,这样,就可以减少停顿(加锁)的时间,同时也减少了合并文件额外需要的空间。

想想这个结构,类似于一颗新的树,这个树的每个节点是一个文件,每个文件的内容是sstable。

5      优点

1、写性能高。

2、只需要对内存部分加锁,文件不会修改,无需加锁

6      缺点

1、对于频繁大规模改动的场景不好。

7      最佳实践

1、  memtable丢失的问题:需要记录redo日志和恢复时间点,用于重建memtable。

2、

8      参考

LSM存储模型

https://www.cnblogs.com/chenny7/p/4568829.html

LSM 算法的原理是什么?

https://www.zhihu.com/question/19887265

Log Structured Merge Trees (LSM)的更多相关文章

  1. Log Structured Merge Trees(LSM) 算法

    十年前,谷歌发表了 “BigTable” 的论文,论文中很多很酷的方面之一就是它所使用的文件组织方式,这个方法更一般的名字叫 Log Structured-Merge Tree. LSM是当前被用在许 ...

  2. Log Structured Merge Trees(LSM) 原理

    http://www.open-open.com/lib/view/open1424916275249.html

  3. LSM(Log Structured Merge Trees ) 笔记

    目录 一.大幅度制约存储介质吞吐量的原因 二.传统数据库的实现机制 三.LSM Tree的历史由来 四.提高写吞吐量的思路 4.1 一种方式是数据来后,直接顺序落盘 4.2 另一种方式,是保证落盘的数 ...

  4. The storage wars: Shadow Paging, Log Structured Merge and Write Ahead Logging

    The storage wars: Shadow Paging, Log Structured Merge and Write Ahead Logging previous: Seek, and yo ...

  5. SSTable and Log Structured Storage: LevelDB

    If Protocol Buffers is the lingua franca of individual data record at Google, then the Sorted String ...

  6. InfluxDB存储引擎Time Structured Merge Tree——本质上和LSM无异,只是结合了列存储压缩,其中引入fb的float压缩,字串字典压缩等

    The New InfluxDB Storage Engine: Time Structured Merge Tree by Paul Dix | Oct 7, 2015 | InfluxDB | 0 ...

  7. Log-Structured Merge Tree (LSM Tree)

    一种树,适合于写多读少的场景.主要是利用了延迟更新.批量写.顺序写磁盘(磁盘sequence access比random access快). 背景 回顾数据存储的两个“极端”发展方向 加快读:加索引( ...

  8. Pull后产生多余的log(Merge branch 'master' of ...)

    第一步: git reset --hard 73d0d18425ae55195068d39b3304303ac43b521a 第二步: git push -f origin feature/PAC_1 ...

  9. [转][译] 存储引擎原理:LSM

    原译文地址:http://www.tuicool.com/articles/qqQV7za http://www.zhihu.com/question/19887265 http://blog.csd ...

随机推荐

  1. elasticSearch6源码分析(1)启动过程

    1.找到bin目录,下面有elasticSearch的sh文件,查看执行过程 exec \ "$JAVA" \ $ES_JAVA_OPTS \ -Des.path.home=&qu ...

  2. SpringMVC源码阅读:异常解析器

    1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...

  3. 不会几个框架,都不好意思说搞过前端: React 入门实例教程

    现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...

  4. win8.1弹框

    在winform或者wp8中用MessageBox.Show()弹框,但是wp8.1中已经不存在了 private async void btn_Click(object sender, Routed ...

  5. mybatis 小结

    1.  根据后台list 在SQL中使用到In的时候 <if test="sbidList != null and sbidList.size() > 0"> A ...

  6. 主打安全 阿里巴巴联合公安部打造PMOS

    4月9日,CITE2015(第三届中国电子信息博览会)在深圳会展中心举行,大会主要以“智能新时代.数字新生活”为主题.说道这,就不得不提国内互联网巨头阿里巴巴.大会中阿里巴巴不仅带来了早前马云曾经在德 ...

  7. subltime快捷键

    subltime 是一款快速开发各种文档的软件,本文主要介绍使用编写HTML,文章末尾提供绿色版安装包下载工具 A快捷键说明 Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctr ...

  8. IDEA使用总结1-Github下载代码和上传代码到Git

    1. 首先你需要在IDEA中创建一个项目,创建完项目后使能版本管理插件 选择git后创建本地git仓库成功,提示如下 2.第二步 commit代码到 commit时会提示是否需要进行检查什么的 3.第 ...

  9. js静态数据分页展示

    拿vue做示例 首先定义data data() { return { tableData: [], // 当前页的数据,用于给表格展示用的 tableDataAll: [], // 需要拿来分页的总数 ...

  10. Tomcat启动慢原因之一 At least one JAR was scanned for TLDs yet contained no TLDs

    Tomcat启动时提示: 信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging f ...