前面有说neo4j的底层存储,现在我们再来看看另一个图数据库Nebula ,其底层存储用的 RocksDB。
RocksDB的数据写入过程:
写入步骤:
- 写入WAL(write ahead log),用来保证异常时的数据一致性。Rocksdb所在节点出现断电异常,节点死机 等情况,内存中的数据是会丢失的。WAL机制,能够在这种异常情况下尽可能挽回多的数据。
- 数据写入缓存,先保存入Memtable
- Memtable达到一定阈值,会切换为Immutable Memtable
- 后台进程对Immutable Memtable刷盘,生成Level 0 SST文件
- 后台进程将L0-SST文件合并生成下层SST文件
Memtable结构
Memtable默认实现是SkipList ,有序的跳跃表(类似链表,在单链表之上增加多层索引增加查找性能)结构,其基本结构单元如下:
class Node {
// LevelDB SkipList