存储层
ZNBase数据库存储层采用RocksDB存储引擎,架构图如下:
RocksDB具有以下特点:
一个可嵌入、高性能的Key-Value 开源数据库。
由Facebook 基于levelDB 开发
为快速存储(flash 、RAM) 而优化,延迟极小
大量灵活的配置,使之能针对不同的生产环境进行调优
完善的持久化机制,同时保证性能和安全性。
RocksDB 使用LSM 结构,纯C++
RocksDB的结构如下:
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接口