目的是:为了防止写入kv时被阻塞。

设想,如果没有immutable memtable,当memtable满了之后后台线程需要将memtable 立即flush到新建的sst中,在flush的过程中,新的KV记录是无法写入的,只能等待,就会造成新写入的KV记录被阻塞。

盗一个其他人的图如下:

在leveldb中,为什么要有immutable memtable?

延伸:在leveldb中只有两个memtable:memtable和immutable memtable;但是在rocksdb中,memtable的数量是可以配置的,当memtable中的数据量超过设定值后,默认是64MB,就会转变为一个immutable memtable,后台线程就会将immutable memtable通过pipe形式,以异步批量的方式flush到level0层中新建的sst文件,如果该新建的sst文件与level 0层其他sst文件中的key的范围有重叠的就会留在level 0层中,否则就会向上推到level 1最高推到level 2层中。

 

相关文章:

  • 2022-12-23
  • 2021-10-18
  • 2021-09-26
  • 2022-01-03
  • 2021-10-24
猜你喜欢
  • 2022-12-23
  • 2021-10-17
  • 2021-05-04
  • 2021-09-06
  • 2020-03-20
  • 2021-11-10
  • 2021-12-19
相关资源
相似解决方案