Leveldb源码解读(二)
Leveldb源码解读(二)
基本组件
1.1 内存管理
1.2 引用计数
1.3 各种Key与Compare
1.3.1 前置知识点
1.3.2 各类key
1.3.2各类compare
1.4 WriteBatch
1.4.1 数据结构
1.4.2 基本组成
1.4.3 使用方式
1.4.4 重点说一下Iterate
1.5 Env家族
1.5.1 Env
1.5.2 EnvWrapper
1.5.3 WritableFile&PosixWritableFile
1.5.4 RandomAccessFile&PosixRandomAccessFile/PosixMmapReadableFile
1.5.4.1 资源限制类Limiter
1.5.4.2 RandomAccessFile
1.5.4.3 PosixRandomAccessFile
1.5.4.4 PosixMmapReadableFile
1.5.5 SequentialFile
1.5.6 FileLock
1.5.6.1 PosixFileLock
1.5.6.2 PosixLockTable
1.5.6.3 文件锁
1.5.7 RAII
1.5.8 Env中的线程池
1.6 filename
1.7 Logger
1.7.1 PosixLogger
1.7.2 使用方式
1.8 WAL日志
1.8.1 基本组成
1.8.2 代码分析
1.8.3 例子
1.8.4 WAL日志什么时候被删除呢?
Leveldb源码解读(二)
基本组件
1.1 内存管理
有内存频繁创建释放的地方就会有内存池的出现,leveldb也不例外。在im/memtable组件中,会有大量内存创建(数据持续put)和释放(dump到磁盘后内存结束)
基本原理图
先来看看Allo
c
ate
再来看看AllocateFallback:
再来看看
AllocateAligned
:
1.2 引用计数
引用计数是一种内存管理方式。在leveldb中,memtable/version等组件,可能被多个线程共享,因此不能直接删除,需要等到没有线程占用时,才能删除。这里可以扩展一下。
1.3 各种Key与Compare
1.3.1 前置知识点
SequenceNumber
一个递增的uint64整数,相同key则按照其降序,最大值为
static const SequenceNumber kMaxSequenceNumber = ((0x1ull << 56) - 1);