Spooky: Granulating LSM-Tree Compactions Correctly

现代存储引擎和键值存储已经开始依赖日志结构合并树(log-structured merge-tree, LSM-tree)作为其核心数据结构。LSM-tree的操作方式是在指数级增长的存储空间中逐步对数据进行归并排序。LSM-tree的一个重要设计维度是压缩粒度。有些设计执行完全合并,即一次性合并整个关卡。另一些执行部分合并,即对键范围重叠的文件进行独立合并。本文表明,这两种策略都存在严重缺陷。在完全合并的情况下,空间放大是过分的。原因是在合并lsm树的最大层级时,必须至少有两倍于数据的存储空间来存储原始文件和新文件,直到合并完成。另一方面,部分合并表现出过度的写扩增。原因有二。(1)被合并的文件通常没有完全重叠的键范围,因此在每次合并中,一些不重叠的数据会被多余的重写。(2)不同生命周期的文件分散在SSD中,导致SSD的垃圾回收开销较大。随着数据规模的增长,这些问题也变得越来越严重。

本文提出Spooky,一种新的压缩粒度方法来解决这些问题。Spooky将最大级别的数据划分为大小相等的文件,并基于最大级别的文件边界将较小级别的数据划分。这允许一次合并一组完全重叠的文件,以限制空间放大和合并的开销。与此同时,Spooky会同时写入更大但更少的文件,这样具有不同生命周期的文件就不会分散在SSD中。这贬低垃圾收集。根据经验,Spooky的空间放大比完全合并低>2倍,同时写入放大比部分合并低2倍。 

 下面介绍Spooky: KeyValue存储的分区合并。Spooky将lsm树的最大层划分为大小相等的文件,然后根据最大层的文件边界对后续的几个最大层进行划分。这允许一次合并一组完全重叠的文件,以限制空间放大和合并的开销。在较小的级别上,Spooky执行完全合并来限制写放大,同时不会增加空间需求,因为这些级别是指数级小的。此外,Spooky在每个级别内连续写入和删除文件,并且一次跨更少的级别。因此,分散在SSD中的文件变少了,从而降低了垃圾收集的效率。

 1 Two-Level Spooky

两级Spooky (2L-Spooky)在lsm树的最大两层执行分区合并,如图8所示。𝐿级别(最大的级别)被划分为文件,每个文件最多包含𝑁𝐿/𝑇字节,其中𝑁𝐿是𝐿级别的数据大小,𝑇是lsm树的大小比率。这将级别𝐿划分为至少𝑇个大小大致相同的文件。级别𝐿−1(第二大级别)也划分为文件,每个文件的键范围最多与一个级别𝐿的文件重叠。这允许一次跨最大的两个级别合并一对重叠文件。在级别0到𝐿−1,2L-Spooky执行完全抢占式合并。算法1描述了2L-Spooky的工作流程,每当缓冲区填满并决定合并哪些文件时,就会调用该流程。让我们详细介绍一下它的步骤。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值