本文是2018年IEEE的协会文章,思路比较简单
主要针对的是leveldb的写放大以及memtable unavailable的问题。
解决的思路都很直接。写放大问题的原因是compact过程中,leveli某个sstable与leveli+1中键值交叠的sstable,读到内存,重排序,去重等再写回leveli+1的sstable中。本文就是迭代leveli层的sstable,找到与下层sstable键值交叠最少的sstable进行compact。leveldb本身的sstable选择,应该就是按照顺序一个一个来。
另外一点就是,前段memtable dump到disk的过程,使用工作队列进行缓存,并用多个线程处理minorcompact和majorcompact过程。
性能比较:可以看到有一定提升,无论是随机读写还是顺序读写,并且db随着kv数量的上升,它的性能降级问题也有一定改善。