levedb层级组织
如图,leveldb由内存中的memtable和磁盘文件组成,memtable和ldb文件中均按key有序存储,level0的各文件管理的key空间可能有重合,从level1到level6,每个level内的文件key范围不会重合。下面分别介绍memtable和磁盘文件格式。
memtable数据结构
memtable使用skiplist维护插入的数据,不允许删除数据,插入数据按自定义的Comparator进行比较按序插入。memtable内部没有同步机制,由于不会删除数据,因此memtable支持并发读,写不可并发,需要在memtable外部进行同步。值得注意的是,写不阻塞读,读可能丢失同时进行的写操作,但读者不会读到不一致的数据。
leveldb使用两个memtable,平时只有一个mutable memtable,插入数据在这个memtable中进行,当这个memtable到达一定大小,就转换成immutable memtable,等待后台刷入磁盘形成ldb文件,同时新产生一个空