"The log-structured merge-tree (LSM-tree)" by Patrick O'Neil是LSM Tree的开创性论文,介绍了LSM Tree的基本结构和设计理念。 论文首先将LSM树和数据库中传统使用的B树索引结构进行的对比,LSM树大大减少了磁盘臂的移动,从而提高了数据写入的成本性能,其最大优势在于写入性能。通过批量写入和合并操作,它能够高效...
本文是对VLDB22的文章——Spooky: Granulating LSM-Tree Compactions Correctly的翻译,在个别地方对原文内容作了修改以更方便理解,同时在一些地方给出了笔者的思考和对论文的理解。 本文重点关注Compaction的粒度——Full Merge还是Partial Merge? 关键名词和符号介绍: N:LSM-tree中总数据大小(bytes) B:LSM-tree中的...
但是存在非常严重的读写放大问题, 而产生读写放大的根源就是需要不停的compact. 那如果把value独立存储到一个叫做vLog的文件里, 使用lsm-tree只存储索引的话, 就可以极大的减少lsm-tree后台compact的开销了. 不过想法虽然简单, 却仍然有不少问题需要考虑, 这篇论文针对这些问题给出了相应的解法, 下面...
因此LSM-tree的研究往往在读放大, 写放大和空间放大之间进行折中. 这篇论文观察到有很多workload, 他们的key存在所谓的semi-sorted特点, 具体的来说就是很多key存在共同的前缀, 比如推荐系统的特征存储, 文件系统的元数据存储, 图数据库存储等. 针对semi-sorted特点, 这篇论文提出了更优的索引和filter设计方法....
当使用就地更新的方式写入kv数据时,原来的value会被替换成新的数据。非就地更新则会将新数据选择磁盘的其他空间进行存储,此时系统中可能会有对应同一个key的多个kv pair。在LSM-Tree中数据分层分块存储,以LevelDB为例,当写入WAL(Write Ahead Log)后,首先会将数据写入内存中的memtable,当memtable大小达到上限后会转...
The Log-Structured Merge-Tree (LSM-Tree) 论文原文:https://www.cs.umb.edu/~poneil/lsmtree.pdf 原文部分翻译 摘要: 高性能事务系统应用程序通常在历史记录表中插入行,以提供活动跟踪;同时,事务系统生成用于系统恢复的日志记录。这两种类型的生成信息都可以从高效的索引中受益。众所周知的设置中的一个例子是...
The Log structured Merge-Tree(LSM-Tree)论文发表于1996年,本文就围绕这篇论文,介绍一下LSM-Tree。 一. 为什么要有LSM-Tree 在一个(随机)写多读少的场景下,B-Tree的写入会带来额外的I/O开销 Unfortunately, standard disk-based index structures such as the B-tree will effectively double the I/O cost...
Monkey论文没有对空间放大进行建模, 空间放大建模比较容易. 我们知道, 1到L-1层包含了大约N/T个entry, L层包含N(T-1)/T个entry. 对于leveling来说, 最坏情况就是1到L-1层的entry全部被更新了, 那么L层就会包含N/T个无效的entry, 空间放大就是O(1/T), 如果T=10, 那么空间放大大约是10%. 对于...
对于点查(point lookup),论文中分别分析了查找不存在kv和kv在最后一层两种情况,并基于论文Monkey的思路对每层的bloom filter bit进行了优化,可以达到与Leveling+Monkey策略相匹配的点查性能。对于长范围查询,Lazy Leveling可以做到与Leveling一致的性能,而短范围查询则退化至接近Tiering的水平。
LSM-Tree (Log Structured Merge Tree),日志结构合并树。它在 1996 年由论文《The Log-Structured Merge-Tree (LSM-Tree) 》[1]首次提出,但真正得到广泛应用是在 2006 年Google Bigtable 论文之后,论文中提到 Bigtable 使用的数据结构就是 LSM-Tree。