Reducing Write Amplification of LSM-Tree with Block-Grained Compaction

Reducing Write Amplification of LSM-Tree with Block-Grained Compaction

      LSM-tree作为一种写优化的存储引擎,广泛应用于LevelDB和RocksDB等键值存储系统中。然而,传统的LSM-tree上的合并操作需要读取、合并和写入许多sstable,本文称之为表合并。表合并会导致两个主要问题,即写放大和块缓存失效。它们会降低lsm树的写和读性能。为了解决这些问题,我们提出了一种新的合并方案——块合并方案,该方案采用块粒度的合并策略来执行LSM-tree上的合并操作。块合并(Block Compaction)通过确定数据块的边界,尽量避免数据块的重复使用,既减少了写放大,又缓解了块缓存失效问题。通过代价分析,从理论上证明了块合并比表合并更高效。此外,我们还分析了块合并的副作用,并提出了3种优化方法:(1)选择性合并,通过将表合并与块合并相结合来减少块合并带来的空间放大;(2)并行合并将合并任务划分为多个子任务,使用多个worker并行完成子任务。(3)延迟删除减少了在合并操作的末尾遍历文件所带来的开销。我们基于块合并及其优化实现了一个名为BlockDB的新的键值存储。然后,我们使用YCSB基准将BlockDB与LevelDB、RocksDB和L2SM进行比较。实验结果表明,BlockDB与同类算法相比,最高可降低32%的写放大,最高可降低43.6%的运行时间。此外,它还能保持点查找和范围扫描的高性能。 

研究内容

本文提出了一种新的合并方法,称为块合并(Block compaction)。与许多key-value存储如LevelDB和RocksDB采用的传统的SSTable-grained compaction(在本文中我们称之为表合并)不同,块合并只读取合并操作涉及的数据块,而不是读取整个SSTable。此外,它只是将数据块添加到sstable中,而不是回写整个sstable。因此,通过采用块粒度的合并单元,块合并可以显著减少写放大。此外,通过块合并,许多数据块不需要重新构建,这意味着块缓存中的大多数块在块合并后仍然有效。因此,块合并可以缓解LSM-tree合并导致的块缓存失效问题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值