论文阅读(9):lsbmtree

LSbM-tree: Re-enabling Buffer Caching in Data Management for Mixed Reads and Writes

本文主要针对的问题是,在如leveldb等传统lsmtree的kvstore中,普通的buffercache会在compact过程之后失效,因为Ci+1层的重排序会导致已经缓存的block位置变化

现有的其他替代策略:

  1. cache中存放的是kvpair,不会随着compact失效。但在应对范围查询以及存在局部性的情况,没有办法起到buffer的作用。
  2. 专用的compact服务器,使用增量热身算法,在compact过程中,替换buffercache为新compacted的dataset,但作者通过实验证明,并不是很有效。(这部分感觉理解的有问题)
  3. stepped-merge算法:每个level中的data并不是完全有序,而只在compact到下一level时才会重排。这样可以显著减少缓存无效的情况。但因为data不是完全有序,在范围查询时效率不高,而且,因为重复数据不会被检测,所以可能会额外消耗磁盘空间。

本文提出的解决方法 lsbmtree

就像上面图中显示的一样,在原始的LSMtree(ci)之外,增加了SMtree(bi),每层blocks间无序,block内部有序,当ci满要compact到ci+1时,将bi对应的所有block重排序,append到bi+1中最开始(因为最新),然后删除掉bi的所有block。同时采用buffermerge策略,在ci满size之后,不是立刻compact到ci+1,而是先转换成ci`,然后生成新的ci处理compact到ci的任务。
所以bi,ci两边都能处理请求任务,范围请求时,因为ci是完全有序的,而bi+1其实代表了bi的所有block的重排序,也是有序的,只要在bi+1中查找就可以(增加了缓存hit)。

相关文章: