引言
RocksDB 在 Facebook 开始时是作为各种存储介质上服务器工作负载的存储引擎,最初专注于快速存储(尤其是闪存存储)。这是一个C++库,用于存储任意大小的keys和values。它支持点查找和范围扫描,并提供不同类型的 ACID 保证。
RocksDB借鉴了开源leveldb项目的重要代码以及Apache HBase的想法。最初的代码是从开源leveldb 1.5派生而来。也基于在RocksDB之前在Facebook开发的代码和想法。
上层结构
RocksDB的三个组成部分有memtable,sstfile和logfile。memtable是一个内存型数据结构。新的写入会写进memtable,并且可以有选择的写入logfile。logfile是一个顺序写入的文件。当一个memtable 内存写满,相应的刷写到磁盘上的sstfile,相应的logfile也可以安全的删除。sstfile中的数据是有序的。
源码分析
Memtable 数据结构
Memtable 是一个持有数据的内存数据结构,在落盘成为sstfile文件操作之前。memtable 同时用于读写,新的数据会写入memtable,读操作也必须查询memtable,因为在memtable中的数据是最新的。有一个后台线程会将memtable中的数据刷写到一个SST文件。
默认memtable的实现是基于skiplist。用户也可以使用其他数据结构,比如 HashLinkList,HashSkipList或者Vector