RocksDB源码-0x02-LSM概念厘清

在真正进入RocksDB之前,很有必要了解LSM-Tree,我第一次见到这个名次是在HBase的架构设计那边,当初我看到Tree就想当然认为是一个数据结构。

1 Tree数据结构

2 LSMT

我猜测LSM-Tree之所以叫Tree,跟树形数据结构唯一相似点应该是层级式

所以LSM-Tree不是所谓的简单的数据结构,它是一个用顺序写+多层有序结构+后台合并这样组合机制的方案设计,用来换取高性能读写,尤其是大数据量的写入性能。

一个共识是,想要提升写入性能,没有其他方法,只能是顺序写。所以下面在看RocksDB的时候就是从中找到一个答案: RocksDB是怎么做的顺序写,以及顺序写的数据怎么作为数据库结果查询呈现的。

RocksDB源码-0x03-DB-LSM-Tree核心实现

3 MySQL的B+树

B树的特征就是检索性能,B+树是B树的变种,优势有

  • 1 单一节点存储更多的元素,使得查询的IO次数减少
  • 2 所有查询都要查找到叶子节点,查询性能稳定
  • 3 所有叶子节点形成有序链表,便于范围查询

可以看得出来在检索的时候,尤其是单点查询,B+树无敌。写入面临的问题也是一目了然

  • 1 为了保证B+树的平衡性,导致页分裂和页合并
  • 2 数据插入位置随机导致B+树结点在磁盘上不连续增加了内存碎片同时增加了写入开销

所以看得出来,MySQL写性能瓶颈的本质是数据随机写


RocksDB源码-0x02-LSM概念厘清
https://bannirui.github.io/2026/01/29/RocksDB/RocksDB源码-0x02-LSM概念厘清/
作者
dingrui
发布于
2026年1月29日
许可协议