27|LSM Tree:LevelDB的索引是如何建立的?
黄清昊
该思维导图由 AI 生成,仅供参考
你好,我是微扰君。
上一节我们学习了数据库中非常常用的索引数据结构——B+ 树,在过去很多年里它都是数据库索引的首选实现方式,但是这种数据结构也并不是很完美。
因为,每次修改数据都很有可能破坏 B+ 树的约束,我们需要对整棵树进行递归的合并、分裂等调整操作,而不同节点在磁盘上的位置很可能并不是连续的,这就导致我们需要不断地做随机写入的操作。
众所周知,随机写入的性能是比较差的。这个问题在写多读少的场景下会更加明显,而且现在很多非关系型数据库就是为了适用写多读少的场景而设计的,比如时序数据库常常面对的 IOT 也就是物联网场景,数据会大量的产生。所以,如果用 B+ 树作为索引的实现方式,就会产生大量的随机读写,这会成为系统吞吐量的瓶颈。
但是考虑到非关系型数据库的检索,往往都是针对近期的数据进行的。不知道你会不会又一次想到 Kafka 的线性索引呢?不过很可惜,非关系型数据库的 workload 也不是完全 append only 的,我们仍然需要面对索引结构变动的需求。
那在写多读少的场景下,如何降低 IO 的开销呢?
LSM Tree(Log Structure Merge Tree)就是这样比 B+ 树更适合写多读少场景的索引结构,也广泛应用在各大 NoSQL 中。比如基于 LSM 树实现底层索引结构的 RocksDB,就是 Facebook 用 C++ 对 LevelDB 的实现,RocksDB 本身是一个 KV 存储引擎,现在被很多分布式数据库拿来做单机存储引擎,其中 LSM 树对性能的贡献功不可没。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
LSM Tree是一种适用于写多读少场景的索引结构,相比传统的B+树,它能够降低IO开销并提高系统吞吐量。LSM Tree通过延迟写入磁盘的时机,利用内存维护有序结构,并通过合并多次随机写操作来降低磁盘臂移动的开销。现代的LSM-tree已经简化了这种繁琐的结构,但核心思想仍然是一致的。LSM Tree广泛应用于各大NoSQL数据库中,如RocksDB,对于处理大量写入的场景能够获得比B+树更好的性能表现。 LSM Tree的核心组成部分包括Memtable、Immutable Table和SSTable。Memtable存储内存中的近期更新记录值,而Immutable Table则是其不可变副本,有助于避免读写冲突竞争,提高系统性能。SSTable则是在磁盘上做持久化的部分,通过多路归并的方式合并segment,实现数据的压缩和删除操作。 LSM Tree的设计理念和实现细节为读者提供了一种新的索引结构思路,能够帮助他们更好地理解和应用于实际的数据库系统中。LSM Tree通过预写日志的方式保证数据的安全性,同时采用压缩数据和标记删除的策略来优化存储和检索效率。总体而言,LSM Tree在写多读少的场景下能够带来更快的写性能提升,同时通过合并操作和特殊状态标记实现了高效的数据存储和管理。LSM Tree的实现还涉及稀疏索引和布隆过滤器,这些技术能够提高查询效率和快速过滤掉不存在的字段,为读者提供了更深入的技术理解和应用思路。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《业务开发算法 50 讲》,新⼈⾸单¥59
《业务开发算法 50 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(6)
- 最新
- 精选
- 那时刻我想最小的segment应该与内存叶相适应,一般是4k。如果是内存大叶,可能是16k吧
作者回复: 是的 通常是内存页的整数倍
2022-02-2424 - 泛岁月的涟漪rocksdb主要是cpp吧
作者回复: 你说的对!我更正一下。
2022-04-21 - Paul ShanSegment是从内存到磁盘的读写单位,最小要设置成虚拟内存的页的大小。个人觉得设置成虚拟内存页的大小的整数倍都可以,太大会影响内存调度。
作者回复: 嗯嗯 我的观点和你是一样的
2022-02-24 - 小麦MySQL InnoDB 存储引擎也提供了 MRR 优化,将批量随机写入转换成顺序写入。 此外,MySQL InnoDB 在删除行数据时也采用的标记删除,磁盘空间并不会立即回收2022-06-193
- 蒋某人尚需顿悟es的存储应该也是lsm吧,还有个fsm是什么关系呢2023-05-18归属地:上海
- 药师每层遍历segment时也应该从最新加入的segment开始遍历吧?一层是有可能出现相同的key出现在不同的segment的情况的,那么越晚加入的到这层的segment的数据越新 如果上面成立,那是不是要维护每层segment的顺序2022-03-16
收起评论