[论文阅读] Lethe A Tunable Delete-Aware LSM Engine(四)

301 阅读7分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情

[论文阅读] Lethe A Tunable Delete-Aware LSM Engine(四)

第35篇,从本章为了优化secondary deletes,也就是secondary range deletes,例如回答删除大于7天的所有entries,这里的7天是key的额外的attribute,也即是所谓的二级删除设计了一个新的存储layout,emm这实际是rocksdb上的rangeDelete的一些改进工作,但本论文并没有对kiwi vs RangeDelete做一个benchmark,此外我发现作者也并未开源Kiwi的工作。在其github上只是看到了FADE的一些代码。后面会拉下来仔细阅读。

这里的量化分析真是复杂啊。还没看懂 论文来自cs-people.bu.edu/dstara/pdfs…

4.2 Key Weaving Storage Layout (KiWi)

为了促进二级范围的删除,我们引入了KiWi,这是一个连续的物理存储布局,将磁盘上的数据按照排序键和删除键的交织排序顺序排列KiWi支持二级范围删除,而不需要进行全树压缩,代价是最小的额外元数据和对读取性能的可调整的惩罚。

4.2.1 布局。图 5 展示了 KiWi 的内部结构。 本质上,KiWi 在 LSM 树的存储布局中添加了一个新层。 特别是,除了树的层级、层级的文件和文件的页面之外,我们现在还引入了属于文件且由页面组成的delete tile。 在下面的讨论中,我们使用 S 表示排序键,D 表示删除键。

image-20221226232722461

层布局。层的结构与最先进的 LSM 树中的结构相同。 每个级别都是包含 S 的非重叠范围的文件的集合。级别中文件之间的顺序遵循 S。正式地,如果 i < j,则文件 i 中的所有条目的 S 都小于文件 j 中的条目。

文件布局。文件的内容是 delete tiles,它们是页面的集合。 delete tile包含S的非重叠范围,因此从文件的角度来看,delete tile的顺序也遵循S。形式上,如果k < l,则delete tilek中的所有条目的S都小于文件l中的S。

delete tile布局。 与上面相反,delete tile的页面按 D 排序。形式上,对于 p < q,给定delete tile的页 p 包含 D 小于页 q 的条目,而我们没有关于 S 的信息。组织内容 按删除键 D 排序的 tile 允许我们快速执行范围删除,因为要删除的条目总是聚集在每个 tile 的连续页面中,这些页面可以整体删除。

页面布局。 每个页面中条目的顺序不会影响二级范围删除的性能,但是,一旦页面被提取到内存中,它就会显着影响查找成本。 为了促进页面内的快速内存搜索[66],我们根据 S 对每个页面的条目进行排序。

4.2.2 为二级范围删除提供便利。KiWi利用了这样一个事实,即在一个delete tile中,磁盘页是按删除键排序的。因此,二级范围删除所针对的条目在每个磁贴(在树的每个磁贴的一般情况下)的连续页面中都有。这种方法的好处是,这些页面可以被删除,而不需要被读取和更新。相反,它们被从其他不可变的文件中移除,并被释放出来,由底层文件系统回收。我们把这称为全页删除。包含在删除范围边缘的条目的页面,也可能包含一些有效的条目。这些页面被加载,有效的条目被用一个紧密的for-loop来识别(因为它们被排序在)。读取和重写这些页面的成本是KiWi的二级范围删除的I/O成本,与全树compaction的技术状态相比。我们称这些为部分页面下降,并构成了原地编辑的一小部分,它被限制在每个删除瓦的零或一个页面。随后的压缩将创建文件,并以预选的尺寸delete tile。

4.2.3 (LSM)调优选项与元数据

我们现在讨论调优选项和 KiWi 的元数据。

delete Tile粒度: 每个文件包含多个delete Tile,每个块包含多个页面。 KiWi的基本调优选项是每个delete tile的页数 (h),它影响可以支持的(rangeDelete)的粒度。

delete Tile的Page页数是重要的调整参数,接下来两章都在为推导h的合适大小做努力: image.png

如上图中每个Delete-Tile的page个数(h),它影响可以支持的(rangeDelete)的粒度。

对于 P 盘页的文件,每个文件的 delete tiles 数为 P/h。 delete tile 的最小粒度是当它只包含一个磁盘页面时,即 h = 1。事实上,h = 1 创建与现有技术相同的布局,因为所有内容都按 S 排序,并且 每个范围删除都需要更新所有数据页。

随着h的增加,删除系数接近1/h的删除范围将主要由 full drops 执行。 另一方面,对于更高的 h 读取性能会受到影响。 h 的最佳决策取决于工作负载(查找和范围删除的频率)和调整(分配给 BF 的内存和大小比率)。 image.png

布隆过滤器和栅栏指针。 接下来我们将在KiWi的背景下讨论布隆过滤器和栅栏指针。

布隆过滤器。KiWi以磁盘页的粒度来维护缓冲区。每页保持独立的布鲁姆过滤器,对于全页删除不需要重建布鲁姆过滤器,而对于部分页面删除则需要轻量级的CPU成本。当每页有一个BF时,在相同的内存消耗下可以达到相同的整体FPR,因为删除的磁贴不包含重复的内容[10]。

栅栏指针。 KiWi 在 S 上维护栅栏指针,用于跟踪每个删除块的最小排序键。 在 BF 的帮助下,S 上的栅栏指针加速查找。 为了支持二级范围删除,对于每个删除块,KiWi 在 D 上的内存中维护一个单独的栅栏指针结构。我们将其称为删除栅栏指针。 删除栅栏指针存储每个页面的最小 D,从而能够在不加载和搜索删除块的内容的情况下对相应页面进行整页删除。

内存开销。 虽然 KiWi 不需要任何额外的 BF 内存,但它维护了两个栅栏指针结构——每个删除块一个在 S 上,每个页面一个在 D 上。 由于现有技术在每页 S 上维护栅栏指针,因此 KiWi 的空间开销是每个图块的额外元数据。 假设 sizeo f (S) 和 sizeo f (D) 分别是 S 和 D 的字节大小,则空间开销为:

image.png

请注意,如果 sizeo f (S) = sizeo f (D),则开销仅为每个图块一个排序键,如果 sizeo f (D) < sizeo f (S),KiWi 可能会导致元数据的总体大小更小。

4.2.4 CPU开销。KiWi 在 Bloom 过滤器的额外散列的 CPU 成本和与数据进出磁盘相关的 I/O 成本之间进行了内在的权衡。 对于非零结果点查询,与现有技术相比,KiWi 执行 L·h/4 倍的哈希计算,在零结果点查询的情况下执行 L·h 次。 在实践中,商业 LSM 引擎,例如 RocksDB,仅使用单个 MurmurHash 哈希摘要来计算要设置哪些 Bloom 过滤器位 [58、69]。 这将哈希计算的总体成本降低了几乎一个数量级。 我们测量使用 MurmurHash 散列单个 64 位密钥的时间为 80ns,这明显小于 100µs 的 SSD 访问延迟。 这使得 Lethe 能够在 CPU 和 I/O 成本之间取得可导航的权衡,并且对于 h 的最佳值,Lethe 实现了与现有技术相比显着优越的整体性能。

4.25对性能的影响 *。KiWi在二级范围删除的成本和查找的成本之间提供了一个可调整的权衡,但不影响写入性能(包括空间和写入的放大)。

点查找。 点读取遵循与现有技术 [22] 相同的搜索算法。 在每个级别中,查找都会搜索栅栏指针(在 S 上)以定位可能包含搜索键的delete tile。 一旦找到删除磁贴,就会探测每个删除磁贴页面的 BF。 如果探测返回肯定,则将页面读入内存并进行二进制搜索,因为页面是按 S 排序的。如果找到键,则查询终止。如果不是,则 I/O 是由于误报造成的,并且会获取磁贴的下一页。查询现有条目的 I/O 成本leveling是O(1+h\cdot e^{-m/N}),对tiering是O(1+T \cdot h\cdot e^{-m/N})。对于零结果查找,预期成本分别是O(h\cdot e^{-m/N})以及O(T \cdot h\cdot e^{-m/N})。

范围查找。 通常,范围查找可能跨越分布在一个或多个连续文件中的几个删除块。 KiWi 仅在终端删除包含范围边界的图块时影响范围查找的性能——始终需要将包含在范围内的所有delete tile读取到内存中。 对于终端delete tile,查找需要平均每个图块多扫描 h/2 页,而不仅仅是符合条件的页面。 因此,对于 KiWi 的短距离查找的成本对于平整变为 O(h·L),对于分层变为 O(h·L·T)。 对于远程查找,成本的增加会在符合条件的delete tile的数量上分摊,并且渐近地保持不变,即 O() 和 O() 分别用于调平和分层。

二级范围查找。 通过交织布局,KiWi 还可以支持对删除键进行高效的范围查找。 虽然最先进的 LSM 引擎需要在删除键上维护一个二级索引,但它们仍然为扫描许多分散的页面付出了沉重的代价。 KiWi 利用删除键上的数据排序,可以以低得多的 I/O 成本实现二级范围查询。

导航设计。 KiWi 的一个基本设计目标是在二级范围删除和查找成本之间进行权衡。 KiWi 提供了一个可导航的连续存储布局,可以根据工作负载特征和性能要求对其进行调整以获得 h 的最佳值。 假设工作负载可以通过以下分数来描述:(a) 具有零结果 fEPQ 的点查询,(b) 具有非零结果 fPQ 的点查询,(c) 短程查询 fSRQ,(d) 长程查询 fLRQ 选择性 s,(e)次要范围删除 fSRD,和(f)插入 fI,然后我们可以比较 Lethe 和现有技术的这个工作负载的成本。

image-20221225213508327

如果我们用 fSRD 除 等式1 的两边,我们将得到关于每个操作相对于范围删除的相对频率的成本。

image.png

使用Eq. 2,我们导航二级范围删除与查找性能权衡,以找到最佳布局。