RocksDB Introduction

Fork me on GitHub
  

Introduction

RocksDB 是一个基于LevelDB开发的支持并发的键值数据库。主要在LevelDB上增加了多线程Compaction, 多线程Memtable插入, 并且从HBase里引入了ColumnFamily

RocksDB Architecture

LevelDB在架构上基本是一致的, 如下图所示: rocksdb arch

RocksDB Write Path

类似的, RocksDB首先写入WAL log里, 然后写入MemTable, rocksdb archMemTable写满了之后, 就转换成IMemtable, rocksdb arch 并准备写到L0 sstfilerocksdb archLSM 结构的sstfile则会进行Compaction来对数据进行去重。 rocksdb arch

LSM Compaction

Compaction 是指周期的读入不同文件并合并删掉重复的信息,形成新的文件的过程。

LSMsstfiles结构如下所示: rocksdb arch

首先从L0和L1里选出Key range重叠的sstfile, 经过删除重复冗余键值然后写出新文件到L1 rocksdb arch

接下来从Compact L1和L2 sstfiles, 类似之前操作, 不过现在新文件写出到L2 rocksdb arch

LSM 里每一层都进行类似操作 rocksdb arch rocksdb arch rocksdb arch rocksdb arch rocksdb arch

LSM Size分布

LSM里, 最下面一层保存数据占据了总体的90%, 如下面分布 rocksdb arch

LSM Multithread Compaction

为了提高数据Compaction的效率( 可以影响数据库写效率), RocksDB使用了多线程Compaction操作, rocksdb arch

Multithread Memtable Insert

LevelDB主要不同是, RocksDB支持MemTable 的并行插入操作(只有skiplistMemtable支持) rocksdb arch

ColumnFamily

每个ColumnFamily都有自己独立的Memtablesstfiles rocksdb arch

Reference

  
志飞 /
Published under (CC) BY-NC-SA