leveldb线程模型

概述

  1. leveldb支持一个进程中多线程访问
  2. leveldb会启动一个后端线程进行compact操作
  3. 涉及的竟态访问资源,memtable,sstable,manifest,各种文件的生成和删除

写操作

  1. 通过写队列的方式,只允许一个线程进行写操作
  2. 并且在写log和memtable会进行unlock,其他时候都是加了锁的

读操作

  1. 读操作运行多个线程同时进行
  2. 读操作开始时会进行上锁,并复制mem_/imem_/current_version并增加引用, 防止其他线程释放mem或者删除sstable文件
  3. 再从mem_/imem_/current_version读取数据时会进行unlock,mem的底层实现是SkipList,允许读写并发

compact操作

  1. compact操作全程都会上锁,除了耗时操作: BuildTable, 遍历compact任务中的key进行compact
posted @ 2022-07-23 14:51  nhj11  阅读(205)  评论(0)    收藏  举报