首页 > 其他分享 >为什么leveldb/rocksdb只允许一个线程修改memtable?

为什么leveldb/rocksdb只允许一个线程修改memtable?

时间:2023-02-13 16:46:11浏览次数:39  
标签:memtable leveldb deque rocksdb 保证 线程

leveldb/rocksdb采用deque控制多线程只允许一个线程修改memtable, 是由于memtable不存在读-写冲突(采用MVCC,保证Sequence一定不同,memtable的key就一定不同,update/delete/insert操作一定不会修改已有key的数据)

这样只存在写-写冲突,只需要保证memtable只有一个写,就能保证线程安全。

这里使用一个deque,把所有线程的写write_batch放入这个deque中,只允许队头的线程写memtable,其他线程cv.wait,从而保证只有一个线程写。

而且其他线程在入队cv.wait等待同时,队头的线程还会进行合并其他线程的write_batch,这样就能以最小的代价保证整体系统的线程安全,提高系统的吞吐。

标签:memtable,leveldb,deque,rocksdb,保证,线程
From: https://www.cnblogs.com/lygin/p/17116884.html

相关文章

  • leveldb Compaction
    leveldb是典型的LSM树实现,因此需要对内存中的数据进行持久化。一次内存数据的持久化过程,在leveldb中称为MinorCompaction。一次minorcompaction的产出是一个0层的sstable......
  • leveldb的MVCC并发控制策略
    MVCC多版本是一个解决并发问题的模型,或者说是一种设计思路。whyMVCC?如果有一份数据,无论它是存储在内存里还是磁盘上,当我们读取数据时可能有写操作正在修改它。传统思路......
  • Rocksdb SStable
    sstable(sortedstringtable)是googlebigtable中引出的数据结构,在levelDB、RocksDB以及现在各类数据库存储中配合LSM有广泛应用,学习下很有必要,本位以RocksDB中SST的实现......
  • 区块链leveldb数据库安装
    一、首先,需要在电脑上安装boost库。下载地址在这里,下载压缩包之后解压,Indexofmain/release/1.79.0/source。解压完成后在解压好的文件夹里面进入cmd,之后运行bootstrip.......
  • leveldb在Windows和Linux上编译
    leveldb在Windows和Linux上编译 LevelDB是Google传奇工程师JeffDean和SanjayGhemawat开源的KV存储引擎(而非SQL),它是一种非关系型数据库。leveldb只有一层,即objects,也即key......
  • 【翻译】rocksdb调试指引
    rocksdb调试指引翻译自官方wiki:https://github.com/facebook/rocksdb/wiki/RocksDB-Tuning-Guide转载请注明出处:https://www.cnblogs.com/morningli/p/16788424.html......
  • LevelDB源码剖析(3) Skiplist跳表
    1.背景什么是跳表?跳表是SortedMap的一种具体实现,是一种概率性的数据结构。跳表拥有SortedMap的所有功能,定位和红黑树类似,其和红黑树的区别在于优点:跳表的实现更加简单......
  • LevelDB基础原理(2) LSM Tree
    1.介绍1.1描述LSMTree(LogStructuredmergeTree)意思是日志结构合并树。目前广泛应用于一些流行的KV存储引擎中(LevelDBl、HBase、Bigtable等)LSM树并不是像红黑......
  • LevelDB源码剖析(1) Arena内存管理
    1.背景对于数据库来说,内存的分配非常重要,当我们使用C++默认的内存分配方式malloc/free或者new/delete的时候,如果遇到很小的键值对时,每次调用的平均开销就会比较大,同时会......
  • LevelDB源码剖析(2) 编码与字符串
    1.背景编码指的是内存里的整数和字符串放到磁盘上的方式,其主要目的有两个对不定长整数以及字符串能够在读取的时候感知到已经读取完了整个值最大程度的节省在磁盘上占......