Introduction
RocksDB 是一个基于LevelDB开发的支持并发的键值数据库。主要在LevelDB上增加了多线程Compaction, 多线程Memtable插入, 并且从HBase里引入了ColumnFamily。
RocksDB Architecture
与LevelDB在架构上基本是一致的, 如下图所示:
RocksDB Write Path
类似的, RocksDB首先写入WAL log里, 然后写入MemTable, 当MemTable写满了之后, 就转换成IMemtable, 并准备写到L0 sstfile里 而LSM 结构的sstfile则会进行Compaction来对数据进行去重。
LSM Compaction
Compaction 是指周期的读入不同文件并合并删掉重复的信息,形成新的文件的过程。
LSM的sstfiles结构如下所示:
首先从L0和L1里选出Key range重叠的sstfile, 经过删除重复冗余键值然后写出新文件到L1
接下来从Compact L1和L2 sstfiles, 类似之前操作, 不过现在新文件写出到L2
LSM 里每一层都进行类似操作
LSM Size分布
在LSM里, 最下面一层保存数据占据了总体的90%, 如下面分布
LSM Multithread Compaction
为了提高数据Compaction的效率( 可以影响数据库写效率), RocksDB使用了多线程Compaction操作,
Multithread Memtable Insert
和LevelDB主要不同是, RocksDB支持MemTable 的并行插入操作(只有skiplist的Memtable支持)
ColumnFamily
每个ColumnFamily都有自己独立的Memtable和sstfiles