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具体是以怎样的格式持久化到磁盘上的呢?又是用什么算法高效查找一条...