数据库存储与索引技术(三)LSM树实现案例

我们在前文介绍过,多款分布式数据库都使用了LSM树作为底层的存储引擎,其中就包括TiDB和Oceanbase。与TiDB等数据库的存储引擎将RocksDB作为一个黑盒使用不同,虽然OceanBase的存储虽然也是基于LSM树,但却是完全自己实现,并且和自己的存储引擎做了深度的定制和整合。与RocksDB中可能存在5,6层的LSM不同,OceanBase的实现中,将LSM树划分为三层,第一层MemTable,第二层OceanBase成为增量层,也称转储层(即LSM树C0层),第三层OB称为基线层(即LSM树C1)层。

与RocksDB中实现一样,OceanBase的增量层(C0)多个SSTable之间Key会存在区间重叠的关系,读取的时候需要遍历查找每个增量SSTable才能确定Key是否存在,本文将以OceanBase 3.x版本为例,讲解其如何针对这一问题进行优化。OceanBase 的基线层数据是全局有序的,所有SSTable之间的Key不会存在区间重叠的问题。

数据库存储与索引技术(三)LSM树实现案例-1

1. MemTable