网通社科技快报

LevelDB MemTable采用跳表骨架实现单写多读无锁并发

LevelDB的MemTable作为写入路径核心内存结构,采用跳表(SkipList)作为底层骨架,支撑高频插入、点查、顺序遍历及无锁并发读需求。其设计针对四大约束:key为变长字节串、单线程写入、多线程无锁读取、整体换代不删单节点。跳表以概率平衡替代红黑树的旋转重平衡——插入时通过‘抛硬币’随机生成节点高度h,一次性分配新节点并预设各层next指针,仅修改各层前驱节点的next指针,对已有节点内容零修改,确保无锁读者始终看到一致状态。key数据编码后存入Arena内存池,节点仅保存const char*指针,结构固定紧凑(8字节指针+8×(h−1)字节next数组),避免变长key内存浪费与缓存效率损失。查找过程分层抽样,期望时间复杂度O(log n);因MemTable生命周期为‘一代而终’,flush后整体废弃,无需支持删除与原地更新,进一步简化逻辑。该设计在代码量不足600行前提下,兼顾简洁性、并发安全与性能稳定,被RocksDB继承,体现‘合适优于先进’的工程哲学。