LSM树**(Log-Structured-Merge-Tree)**的核心是利用顺序写来提高写性能,但是分层结构设计会稍微降低读性能。

LSM树会将所有的数据插入、修改、删除等操作记录(注意是操作记录)保存在内存之中,当此类操作达到一定的数据量后,再批量地顺序写入到磁盘当中。

🍡存储结构

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

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

  • Immutable MemTable
  • MemTable 达到一定大小后,会转化成 Immutable MemTable Immutable MemTable 是将转 MemTable 变为 SSTable 的一种中间状态。写操作由新的 MemTable

    LSM (Log-Structured-Merge-Tree)的名字往往会给初识者一个错误的印象,事实上, LSM 并不像B+ 、红黑 一样是一颗严格的 状数据结构,它其实是一种存储结构,目前HBase,LevelDB,RocksDB这些NoSQL存储都是采用的 LSM LSM 的核心特点是利用顺序写来提高写性能,但因为分层(此处分层是指的分为内存和文件两部分)的设计会稍微降低读性能,但是通过牺牲小部分读性能换来高性能写,使得 LSM 成为非常流行的存储结构。 1、 LSM 的核心思想 如上图所示, LSM 有 关于 LSM LSM ,即日志结构合并 (Log-Structured Merge-Tree)。其实它并不属于一个具体的数据结构,它更多是一种数据结构的设计思想。大多NoSQL 数据库 核心思想都是基于 LSM 来做的,只是具体的实现不同。所以本来不打算列入该系列,但是有朋友留言了好几次让我讲 LSM ,那么就说一下 LSM LSM 诞生背景 传统关系型 数据库 使用btree或一些变体作为存储结构,能... 二分查找: 将数据按一定规则顺序保存,使用二分查找可完成特定 key 的快速查找 哈希:使用哈希将数据分割存储在特定位置 B+ :使用 B+ 或者 ISAM 索引顺序存取等方法组织数据,可以减少外部文件的读取 https://juejin.cn/post/6844903863758094343 https://segmentfault.com/a/1190000039269078 https://cloud.tencent.com/developer/article/1488439 https://segmentfault.com/a/1190000021136424?utm_source=sf-similar-article LSM Tree ,这个概念就是结构化合并 的意思,它的核心思路其实非常简单,就是假定内存足够大,因此不需要每次有数据更新就必须将数据写入到磁盘中,而可以先将最新的数据驻留在内存中,等到积累到足够多之后,再使用归并排序的方式将内存内的数据合并追加到磁盘队尾(因为所有待排序的 都是有序的,可以通过合并排序的方式快速合并到一起)。4) LSM 原理把一棵大 拆分成N棵小 ,它首先写入内存中,随着小 越来越大,内存中的小 会flush到磁盘中,磁盘中的 定期可以做merge操作,合并成一棵大 ,以优化读性能。 十多年前,谷歌发布了大名鼎鼎的"三驾马车"的论文,分别是GFS(2003年),MapReduce(2004年),BigTable(2006年),为开源界在大数据领域带来了无数的灵感,其中在 “BigTable” 的论文中很多很酷的方面之一就是它所使用的文件组织方式,这个方法更一般的名字叫 Log Structured-Merge Tree。在面对亿级别之上的海量数据的存储和检索的场景下,我... 简介:为了改善数据访问特性,文件系统或 数据库 系统通常会对数据排序后存储,加快数据检索速度。传统关系 数据库 的做法是使用B+ ,保证数据在不断更新、插入、删除后依然有序。B+ 结构如下图所示。 B+ 是一种专门针对磁盘存储而优化的N叉排序 ,以 节点为单位存储在磁盘中,从根开始查找所需数据所在的节点编号和磁盘位置,将其加载到内存中然后继续查找,直到找到所需的数据。 目前 数据库 多采用两级索引的B+ 的层次最多三层,因此可能需要5次磁盘访问才能更新一条记录(3次磁盘访问获 LSM -Tree 是一种设计思想。在此思想下,可以带来极高的写入速度。但是稍微牺牲了读取的速度。另外要知道,在此设计下,无法对事务有很好的支持。 还要知道,这种方式的写入方式,它是近实时的,在实时性上略有牺牲。 在此设计下,背后要进行merge,要花费很多的资源。 十多年前,谷歌发布了大名鼎鼎的"三驾马车"的论文,分别是GFS(2003年),MapReduce(2004 年),BigTable(2006年),为开源界在大数据领域带来了无数的灵感,其中在 “BigTable” 的论文中很... 学算法认准labuladong后台回复课程查看精品课点击卡片可搜索文章????我在上篇文章 Apache Pulsar 的架构设计 中 介绍 了 Pulsar 存算分离的架构,其中 broker 只负责计算,由 BookKeeper 负责底层的存储,我还画了这样一张图说明 BookKeeper 读写分离的设计:但是再深究下去,memtable具体是以怎样的格式持久化到磁盘上的呢?又是用什么算法高效查找一条...