LSM-tree 3.3 Multi-Component LSM-trees

翻译内容

3.3 Multi-Component LSM-trees

给定lsm -树的参数M被定义为在滚动合并期间插入到C1树的每个单页叶节点的C0树中的条目的平均数量。我们一直认为量M大于1,因为在合并到C1树的节点之前,新元素在C0树中积累的延迟时间。但是,从公式(3.2)可以清楚地看到,如果C1树相对于C0树非常大,或者条目非常大,只适合很小的数字到一页,数量M可能小于1。对于M的这样一个值意味着,对于从C0树合并进来的每个条目,平均必须有多个C1树页面进入或离开内存。在公式(3.4)中M非常小的情况下,特别是当M < K1。COSTπ/ cost,这甚至可以取消多页磁盘读取的批处理效果,所以我们最好使用普通的b树来代替lsm树来进行插入。(有道翻译)

为了避免M值偏小,唯一使用双分量lsm树的方法是相对于C1增大C0分量大小。考虑一个给定总叶条目大小S (S = S0 + S1,一个近似稳定的值)的双组分lsm树,并假设我们有一个恒定的速率R(以字节/秒为单位),将新条目插入C0。为简单起见,我们假设之前没有删除条目插入C0组件C1,因此条目必须迁移通过滚动组件C1合并以同样的速度,他们——泽特C0 C0接近阈值的大小尺寸。(考虑到总大小S是近似稳定的,这也意味着对C0的插入率必须与C1的常量删除率平衡,可能使用一系列谓词删除。)当我们改变C0的大小时,就会影响合并游标的循环速度。不断迁移率在字节每秒C1要求滚动游标移动通过合并条目的C0以恒定速率每秒字节,因此C0减少循环率的大小从最小到最大的索引值C0将增加;因此,C1中执行滚动合并的多页块的I/O率也必须增加。如果单个条目的C0大小是可能的,在这个概念上的极端点上,我们需要为每个新插入的条目在C1的所有多页块中循环,这对I/O有巨大的需求。合并C0和C1的方法,而不是像b树那样为每个新插入的条目访问C1的相关节点,将成为我们的负担。相比之下,更大的C0组件将减缓合并游标的循环,并降低插入的I/O成本。然而,这将增加内存驻留组件C0的成本。(有道翻译)

现在,C0有一个标准大小,由LSM树的总成本(C0的内存成本加上C1组件的媒体/磁盘臂成本)最小的点决定。为了达到这一平衡,我们从一个大的C0组件开始,并将C1组件紧密地封装在磁盘介质上。如果C0组件足够大,C1的I/O率将非常小。现在,我们可以减小C0的大小,以昂贵的内存换取廉价的磁盘空间,直到为C1服务的I/O速率增加到某个点,即位于C1组件媒体上的磁盘臂以全速运行。在这一点上,进一步节省内存C0将导致成本增加媒体成本,我们需要分散C1组件在略微满磁盘来减少磁盘臂负载,并在某种程度上我们继续缩小C0将达到一个最低成本点。现在,在两个组件lsm树中,我们为C0确定的规范大小在内存使用方面仍然非常昂贵,这是很常见的。另一种方法是考虑采用由三个或更多组件组成的lsm树。从概念上讲,如果C0组件的大小非常大,内存成本是一个重要因素,那么我们考虑在这两个极端之间创建另一个中等大小的基于磁盘的组件。这将允许我们限制磁盘臂的成本,同时减少C0组件的尺寸。

一般来说,含有K+1个分量的lsm -树有分量C0、C1、C2、…、CK-1和CK,这些分量都是大小递增的索引树结构;C0组件树是内存驻留的,而所有其他组件都是磁盘驻留的(但流行页面与任何磁盘驻留访问树一样都缓冲在内存中)。在插入的压力下,在所有组件对(Ci-1, Ci)之间存在异步滚动合并进程,每当较小的组件Ci-1超过其阈值大小时,就将条目从较小的组件移到较大的组件。在lsm树中插入的长期条目的生命周期中,它从C0树开始,并通过一系列的K个异步滚动合并步骤最终迁移到CK。(有道翻译)

这里的重点是插入流量下的性能,因为我们假设LSM-Tree存在于以插入为主的环境中。lsm树发现三个或更多组件时,性能会有所下降,通常是每个磁盘组件多一个页面I/O。(有道翻译)

todo:自己翻译 仔细看一遍

你可能感兴趣的:(LSM-tree 3.3 Multi-Component LSM-trees)