LSM-tree 3.4 LSM-trees: Component Sizes

3.4 LSM-trees: Component Sizes

不建议看,基本没过脑子,待整理。

在本节中,我们推导了在包含多个组件的lsm树中插入的I/O成本公式,并从数学上演示了如何为各个组件选择最优阈值大小。一个扩展的示例3.3说明了b -树的系统成本,两个组件的lsm树的改进系统成本,以及三个组件的lsm树的更大节省。(有道翻译)

我们定义LSM-tree组件的size,S(Ci)表示包含的叶子结点内容字节数;
Ci通过Si表示,S(Ci) = Si,S是所有叶子结点内容总大小,S = Σi Si.
我们假设插入存在稳定速率R,字节每秒基本稳定输入到C0,为了简单起见,所有新插入的条目都可以通过一系列滚动合并步骤循环到组件CK。
我们还假设每个分量,C0, C1,…, CK-1,其大小接近当前分析所确定的最大阈值大小。
组件CK被假定有一个相对稳定的大小,因为要在某个标准时间段内删除平衡插入。
组分CK的删除可以认为是在不增加组分C0的插入速率R的情况下发生的。

给一个K个组件的LSM-tree,一个固定总size为S,内存组件size为S0,
树描述为ri, i = 1, . . . ,K,表示组件之间size比例,ri=Si/Si-1,
如下描述,总的page I/O速率为所有进行中的merge操作表示为R,插入为C0,速率为ri。
我们假设不同组件的块以混合的方式跨不同的磁盘臂进行条带化,以实现利用率的平衡,因此最小化H与最小化总磁盘臂成本相同(有道翻译)
(至少在磁盘臂而不是媒体容量构成闸门成本的任何范围内)。(有道翻译)
对于给定的R,找出使总I/O率H最小化的ri值是一个标准的微积分最小化问题。(有道翻译)
结果表明,总大小S是固定的假设导致了一个相当困难的问题,ri值之间有某种复杂的递归关系。(有道翻译)
然而,如果我们做一个可比较的假设,即最大的组件大小SK是固定的(以及内存大小S0),如定理3.1所示,当所有ri值等于一个常数r时,这个最小化问题就得到了解决。(有道翻译)
我们在定理3.2中给出了稍微精确一点的关于ri值的解,其中总大小S保持不变,并论证了ri的常数值r在所有实际感兴趣的领域中给出了相似的结果。(有道翻译)
假设ri都是r,Si=ri.S0.
因此,总尺寸S由单个组件尺寸之和给出,S = S0 + r.S0 + r2。S0 +…+ rK。我们可以用S和S0来表示r。(有道翻译)

因此,在定理3.1中我们暂时最小的总I/O速率H,一个多组件的LSM-tree,有固定的SK,S0,和插入速率R,
我们用最小和最大之间的几何级数来计算中间分量的大小。(有道翻译)
我们回看到,在两个组件的LSM-tree中,如果允许S0变化,R和SK不变,H是一个S0的函数,H随S0减少增大。
现在我们可以最小化开销,内存加上磁盘臂开销,通过修改S0.
对于给定数量的组件,达到最优总成本的适当过程如下例3.3所示。(有道翻译)
唯一可变量是组件数量K+1.
我们将在本节的最后讨论这个值的权衡。(有道翻译)

定理3.1,一个K+1个组件构成的LSM-tree,有一个固定的最大组件SK,插入速度为R,内存组件大小为S0,总的I/O速度为H,ri都等于r是执行合并最小化总和。
因此,总的S是单独的组件大小和和:

(3.5) S=S0+r.S0+r2.S0+...+rK.S0,

同时可以通过S和S0获取r。类似的总的H如下:

(3.6) H = (2R/Sp).(K . (1 + r) - 1/2),

Sp表示每页的字节数。

我们假定输入数据在到达组建CK之前不会删除,
也就是插入C0速度和滚动合并Ci-1到Ci的速度一样。
假定Ci-1存储在磁盘。Ci-1到Ci内容是多页block,读取速度为R/Sp,Sp表示每页子节数。(我们从R推导出Ci-1,假设Ci-1的所有数据都删除了;其他假设出自一般情况。)假设合并多页读取速度为ri.R/Sp 页/s 这是因为滚动合并光标经过ri = Si/Si-1的页面数量是属于Ci-1的页面数量的两倍。(有道翻译)
最终速度为 (ri+1) R/Sp。
注意,这里我们考虑了合并所导致的Ci组件的放大大小。(有道翻译)
磁盘存储组件总H如下:


image.png

式中的每一项(2.ri+k)表示分量Ci: ri上的所有I/O。(ri +1) R/Sp读取Ci中的页数,用于从Ci-1合并到Ci, (ri +1) R/Sp写入Ci中的页数,以及R/Sp读取Ci中的页数,用于从Ci到Ci+1合并。很明显,C0没有术语,而CK组分的术语没有这个最后的添加。式(3.7)可以改写为:(有道翻译)


image.png

我们希望在以下条件下使函数值最小:
∏ri = (SK/S0)= C,一个常数。为了解决这个问题,我们最小化∑r,用c∏r - 1代替项r。取每个自由变量的偏导数,rj, j = 1。, K-1,并将它们等于0,我们得到一组相同的方程,形式为:0 = 1 -1 C∏r,即
∏r -1,即C1/K,表示所有r(包括r)都等于c,则r -1为正确答案。jKi1
(有道翻译)

我们改变定理3.1的假设,以确定总规模S而不是最大分量的规模SK。这个极小化问题要困难得多,但是可以用拉格朗日乘数来解决。结果是每个ri的高索引ri的一系列公式:(有道翻译)
rK-1 =rK+1
rK-2 =rK-1+1/rK-1
rK-3 = rK-2 + 1/(rK-1.rK-2) ...
We omit the proof.
忽略证明。

正如我们将看到的,ri的有用值是相当大的,比如20或更多,所以最大分量的大小,SK,支配着总大小s。注意,因此在定理3.2中,每个ri通常与它的高邻居ri+1只相差很小的分数。在接下来的内容中,我们以定理3.1的近似为基础或举例。(有道翻译)

从定理3.1,可以看出,如果我们允许S0改变而R和SK保持不变和表达总I / O率H S0的函数,然后从R由方程(3.5),增加与减少S0和H正比于R方程(3.6),显然与de - H增加压痕S0。现在,我们可以将lsm树的总成本最小化,就像在两个组件的情况下一样,用昂贵的内存换取廉价的磁盘。如果我们计算存储lsm树所需的磁盘介质和使这些磁盘臂充分利用的总I/O速率H,那么这将成为我们确定使成本最小化的S0大小的计算起点。从这一点开始,随着我们进一步减小C0的大小,磁盘介质的成本以反比的比例上升,因为我们已经进入了磁盘臂成本是限制因素的区域。下面的例子3.3是一个基于数字的lsm树处理过程的说明。在这个例子之前,我们提供了一个解析推导的双分量情况。(有道翻译)

总的内存占用是 COSTm*S0,磁盘是存储最大值和I/O,这里是多页块操作速度H/s:

COSTtot =COSTm.S0+max[COSTd.S1,COSTπ.H]

假设有两个足迹,所以K=1,r=S1/S0. s= (COSTm . S0)/(COSTd . S1) 是内存和S1相关数据。t=2.((R/Sp)/S1).(COSTπ/COSTd)(COSTm/COSTd),C=COSTtot/(COSTd.S1) 。是S1相关数据,3.6简化,假设S0/S1很小,的多近似:

C ≈ s + max(1, t/s)

C是t和s的函数;t是一个多页块I/O速度标准度量。s表示需要的内存。推导S0,最简单的是s=t,C=s+1,磁盘存储和I/O全部使用。t<=1适用,但是t>1,s=t,C=2t。结果回到如下形式,t>=1:

( 3 . 8 ) COSTmin = 2[(COSTm.S1)(2.COSTπ.R/Sp)]1/2

因此LSM-tree的总成本(t≥1)被认为是几何平均数的两倍(非常高)的成本足够的内存来保存所有LSM-tree中的数据和成本(极低)支持多页面所需的磁盘块的I / O写插入磁盘所需的最便宜的方式。总成本的一半用于用于S0的内存,另一半用于用于对S1的I/O访问的磁盘。磁盘存储的成本没有显示出来,因为t >= 1确保了数据足够热,使得磁盘I/O在最小值点上占了磁盘存储的大部分。注意,渐近地,b树的代价是R1/2而不是R,是R ->∞。(有道翻译)

在t <= 1的情况下,更冷的情况下,最小的成本发生在s = t,其中C = t + 1 < 2。这意味着在这种情况下,总成本总是小于将S1存储在磁盘上的基本成本的两倍。在这种情况下,我们根据磁盘的存储需求来设置磁盘的大小,然后使用它的所有I/O容量来最小化内存使用。(有道翻译)

我们考虑Account-ID||Timestamp索引,详见示例3.1。下面的分析仅计算索引的插入成本,插入速率R为每秒16000字节(1000个16字节的索引条目,不计算开销),结果是20天的数据的索引为5.76亿个条目,或9.2 gb的数据。(有道)

使用b -树来支持索引,磁盘I/O将是限制因素,正如我们在示例3.1中看到的那样——叶级数据是暖的。我们需要使用足够的磁盘空间来提供每秒H = 2,000个随机I/ o来在叶级更新随机页面(这假设所有的目录节点都是内存驻留节点)。使用3.1节表格中的典型值cost = 50,000。我们计算在内存中缓冲上层节点的成本如下。假设70%满的叶子节点,0.7.(4K/16) =每个叶子节点180个条目,因此叶子上面的层次包含约576mil - lion/180 = 320万个指向从属叶子的条目。如果我们允许前缀压缩,以便在这个级别的节点中容纳200个条目,这意味着大约16000页,每个4kbytes,或64mbytes,内存成本(COSTm)为每MByte 100美元,或6400美元。我们忽略了以上级别上相对不重要的节点缓冲成本,假设b -树的总成本是50,000美元的磁盘成本加上6400美元的内存成本,或者总成本是56400美元。(有道)

对于由两个组件C0和C1组成的lsm树,我们需要9.2 g字节的磁盘S1来存储条目,代价是cost。S1 = 9200美元。我们将这些数据紧密地打包在磁盘上,并使用多页块I/O计算磁盘臂中同等成本支持的总I/O率H,即H = 9200/ cost π = 3700页/秒。现在,在式(3.6)中,我们在如上设置总I/O速率H后求解r,速率r为16000字节/秒,Sp为4K。从得到的比率r = S1/S0 = 460和S1 = 9.2 GBytes的事实,我们计算出C0的20 mb内存,成本为2000美元。这是简单的s = t解决方案,总成本为$11,200,磁盘容量和I/O能力的充分利用。因为t =。22小于1,所以这是最优解。我们为包含合并块的2兆字节内存增加了200美元,最终总成本为11,400美元。这是对b树成本的一个重大改进。(有道翻译)

下面是对解决方案的详细说明。将R= 16000字节/秒的插入速率转换为需要从C0合并到C1的4页/秒。由于C1比C0大460倍,从C0来的新条目平均合并到C1中460个位置。因此,从C0合并一个页面需要读写460个C1页面,总共每秒3680个页面。但这正是9.2个磁盘在多块I/O容量方面所提供的,每个磁盘提供400页/秒,是40页/秒的名义随机I/O率的10倍。(有道翻译)

由于本示例显示了两个组件对磁盘资源的充分利用,因此我们没有理由在这里研究三组件lsm树。一个更完整的分析将考虑如何在索引中执行偶然发现,并将考虑使用更多的磁盘臂。下面的示例展示了三个组件为纯插入工作负载提供了改进的成本。(有道翻译)

    • 3.4的例子。**考虑例3.3,R增加了10倍。注意,B-tree解决方案现在需要500 gb磁盘的50万美元,以支持每秒2万I/O的I/O速度;这491 Gbytes中的一部分将未被利用。但是B-tree的大小是相同的,我们仍然需要花费6400美元来缓冲内存中的目录,总成本是506400美元。在LSM-tree分析中,R增加10个因子意味着t增加相同的因子,达到2.2。由于这个t大于1,最好的二分量解决方案将不会利用所有的磁盘容量。我们使用公式(3.8)来计算一个双组件lsm树的最低成本为27,000美元,其中一半用于支付13.5 gb的磁盘,另一半用于支付135 mb的内存。这里有4.3 g的磁盘未被利用。使用2mb的内存作为缓冲区,总成本是27200美元。(有道翻译)

下面是对双组分解的完整解释。插入速率R = 160,000字节/秒被转换为40页/秒,需要从C0合并到C1。由于C1比C0大68倍,从C0合并一个页面需要对C1进行68个页面读取和68个页面写入,总共每秒5450个页面。但这正是13.5磁盘提供的多块I/O容量。(有道翻译)

对于R = 160,000字节/秒的情况,使用由三个组件组成的lsm树,计算两个组件的最大磁盘组件的成本和成本平衡的I/O率。Si/Si-1=r fori=1,2,通过定理3.1,我们的计算器=23andS0=17MBytes(内存成本为1700美元)为完全占用的磁盘臂。较小的磁盘组件的成本仅为较大磁盘组件的1/23。现在从这一点增加内存大小没有很好的成本效果,而减少内存大小将导致相应的因素,平方,增加磁盘的成本。由于磁盘的成本目前比内存的成本高得多,我们不能通过减小内存大小来获得成本效益。因此,在三分量情况下,我们有一个类似的s = t解。允许一个额外的4 mb的内存缓冲,花费400美元,为两个滚动合并操作,因此LSM-tree 3组件的总成本是9200美元,内存,磁盘+ 2100美元或11300美元的总成本,进一步团体——nificant改进成本2-component LSM-tree。(有道翻译)

以下是对三部分解决方案的完整解释。内存组件C0有17mbytes,较小的硬盘组件C1是C1的23倍,为400mbytes, C2是C1的23倍,为9.2 Gbytes。在必须从C0合并到C1的40页/秒的数据中,每一页需要23页读和23页写,即每秒1840页。同样,从C1到C2的合并速度为40页/秒,每一页需要对C2进行23页的读写操作。这两个I/O比率的总和是3680,正好是9.2 G磁盘的多块I/O容量。(有道翻译)

与简单的b树相比,包含两个或三个组件的lsm树需要更多的I/O来进行查找操作。在这两种情况下,最大的组件都非常类似于相应的简单b树,但在lsm树的情况下,我们没有为缓冲索引中仅高于叶级的节点支付6400美元的内存。树中更高的节点相对较少,可以忽略,我们可以假设它们是缓冲的。显然,如果查找条目的查询足够频繁,我们愿意为缓存所有目录节点付出代价。在三分量的情况下,我们也需要考虑C1分量。由于它比最大的组件小23倍,我们可以轻松地缓冲它的所有非叶节点,这个成本应该在分析中添加。在查找C2中的条目时,C1中的未缓冲叶访问需要对find进行额外的读取,并且需要决定是否缓冲C2的目录。因此,对于三组件的情况,在简单b -树中查找所需的两个I/O之外,可能会有一些额外的页面读操作(叶节点的页面写需要一个I/O)。对于双分量的情况,可能会有一个额外的读取。如果我们确实购买了用于缓冲LSM-tree组件叶级以上节点的内存,那么在双组件的情况下,我们可以满足b -树速度,而在三组件的情况下,在某些情况下,我们只需要支付一次额外的读操作。在三组件的情况下,添加缓冲的总成本将是17700美元,仍然远远低于b -树。但是,以其他方式使用这笔钱可能更好:全面分析应该将工作负载的总成本(包括更新和检索)降至最低。(有道翻译)

根据定理3.1的结果,我们已经通过改变大小比率ri使给定S0的合并操作所需的总I/O最小化,然后通过选择S0使总成本最小化以获得最佳的磁盘臂和媒体成本。lsm树中唯一可能的变化是所提供的组件的总数(K+1)。结果表明,随着组件数量的增加,S0的尺寸继续减小,直到达到一个点,即组件尺寸的比值r达到e = 2.71…,或者直到我们到达冷数据状态。但是,由例3.4可以看出,随着组件数量的增加,S0组件数量的不断减少,对总成本的影响越来越小;在由三个组件组成的lsm树中,内存大小S0已经减少到17 mb。此外,还存在与组件数量增加相关的成本:执行附加滚动合并的CPU成本和缓冲这些合并的节点的内存成本(在一般成本机制中,这实际上会抵消C0的内存成本)。此外,需要立即响应的索引查找有时必须从所有组件树中执行检索。这些考虑对适当的组件数量施加了严格的限制,在实践中可能会看到最多的三个组件。(有道翻译)

todo:仔细看一遍,翻译一遍

你可能感兴趣的:(LSM-tree 3.4 LSM-trees: Component Sizes)