存储层

ZNBase数据库存储层采用RocksDB存储引擎,架构图如下:

存储层 - 图1

RocksDB具有以下特点:

  • 一个可嵌入、高性能的Key-Value 开源数据库。

  • 由Facebook 基于levelDB 开发

  • 为快速存储(flash 、RAM) 而优化,延迟极小

  • 大量灵活的配置,使之能针对不同的生产环境进行调优

  • 完善的持久化机制,同时保证性能和安全性。

  • RocksDB 使用LSM 结构,纯C++

RocksDB的结构如下:

存储层 - 图2

​ Rocksdb中引入了ColumnFamily(列族,CF)的概念,所谓列族也就是一系列kv组成的数据集。所有的读写操作都需要先指定列族。

​ 写操作先写WAL,再写memtable,memtable达到一定阈值后切换为ImmutableMemtable,只能读不能写。后台Flush线程负责按照时间顺序将Immu Memtable刷盘,生成level0层的有序文件(SST)。后台合并线程负责将上层的SST合并生成下层的SST。

​ Manifest负责记录系统某个时刻SST文件的视图,Current文件记录当前最新的Manifest文件名。每个ColumnFamily有自己的Memtable,SST文件,所有ColumnFamily共享WAL、Current、Manifest文件,用户可以基于RocksDB构建自己的columnfamilies。很多应用程序把RocksDB当做库(libary),尽管他提供server或者CLI接口