wander join

wander join

Wander Join and XDB: Online Aggregation via Random Walks
Abstract

基于连接的在线聚合(online aggregation):降低连接的成本,权衡查询效率和准确性。目前最先进的连接聚合方法是涟漪连接(ripple join),其具有昂贵和不合实际假设(表中的元组按随机顺序存储)的缺点。本文提出游荡连接(wonder join)的方法,通过在底层连接图,还设计了一个优化器,它可以在不需要事先收集任何统计信息的情况下选择执行随机游走的最优方案。通过将wonder join集成到各种系统中还设计实现了XDB(approximate DB)。

  1. Introduction

    当数据规模较大时,针对数据库的多表连接操作效率会很低,违背了交互式数据分析的低延迟要求。

    在线聚集(Online aggregation. 1997):对于某些应用,并不总是需要精确的结果。相反,近似结果可以提供足够好的估计。与精确结果相比,计算近似结果更具成本效益,特别是对于大规模数据集。为了生成近似结果,在线聚合从数据库中不断检索样本。将样本流式传输到查询引擎进行查询处理。近似结果的准确性由统计模型描述。通常情况下,随着样本量的增加,结果会越来越精细。当用户对结果质量满意时,可以随时终止处理。

    均匀随机采样(random sampling):容易实现,没有考虑表之间的连接。

    涟漪连接(ripple join):基本思路是从每个表中重复抽取样本,只对抽取的元组进行连接。然后将结果放大作为对整个联接的估计。其有两个关键弱点:1)它的性能关键取决于随机选择的元组中能够实际加入的部分。2)要求每个表中的元组按随机顺序存储,针对聚类存放的大型数据库不适用。
    请添加图片描述

    游荡连接(Wander Join):基本思路是只从一个表中随机抽取一个元组,之后从该元组开始进行随机游走(random walk)。在随机游走每一步中,值考虑已采样元组的“邻居(neighbor)”,即未被探索的表中能够与之实际连接的元组。

    (Wander Join不是基于Ripple Join的改进,而是源自于Triangle Sampling)

    本文贡献:

    1)引入一种称为wander join的新方法来实现join的在线聚合。

    2)设计了一个选择最优行走方案(walk plan)的优化器,其无需先验地收集数据的任何统计信息。

    3)提出了Wander Join在选择谓词和Group-by方面的性能优化。

    4)通过在PostgreSQL内核中实现Wander Join,开发了XDB(approXimate DB)系统。

    5)通过实验证明Wander Join优于Ripple Join(XDB性能优于TurboDBO)。

  2. Background/Problem Formulation/Ripple Join

    在线聚集(Online Aggregation):效率与精度的权衡

    针对连接(joins)的在线聚集:Ripple Join/Index Ripple Join

    问题描述:

    请添加图片描述

    虽然允许连接条件和选择谓词在查询时刻之前是未知的,但我们确实要求连接条件中涉及的属性必须事先给定。算法输出应满足:

    请添加图片描述

    当查询达到期望的级别时,用户可以终止查询。

  3. 游荡查询(Wander Join)(join query graph)

    (1)Wander Join在简单例子(链式连接)上的应用

    请添加图片描述

    请添加图片描述

    算法是基于随机抽样的蒙特卡罗(Monte Carlo)算法。

    关键思想:将元组之间的连接关系建模为一个图——Join data graph.(概念上)

    请添加图片描述

    首先在R1中均匀随机选取一个顶点,然后向R3 “随机游走”,就可以随机采样一条路径。(当前顶点通过索引针对下一个表寻找邻居)

    存在问题:不同的路径可能有不同的采样概率。

    解决方法:霍维茨汤姆森估计量(Horvitz-Thompson estimator)——用于不等概不放回抽样的总体量估计。在Wander Join中的应用:

    假定路径y以概率p(y)被采样,在y上被聚合的表达式为v(y),则v(y)/p(y)就是对 ∑ y v ( y ) \sum_{y}^{}{v(y)} yv(y)的一个无偏估计量,即旨在要估计的SUM聚合。作者只对以较高概率进行采样的路径进行比例惩罚。其中p(y)很容易计算。

    最后,可以独立地执行多个随机游走并取估计量v(y)/p(y)的平均值。其中估计量的误差随着更多的路径被收集而减小。

    注意问题:当随机游走卡住时,不应该选择拒绝该采样,而是将0作为估计值返回,其将与所有成功的随机游走一起结合取平均。过多的失败随机游走将减缓估计的收敛。

    (2)Wander Join在无环连接查询(Acyclic queries)上的应用

    请添加图片描述

    将连接查询建模为一个连接查询图(join query graph)。表为顶点,连接为边。

    首先,固定一个游走顺序,使得游走顺序中的每个表都必须与顺序中较早的另一个表相邻。不同的游走顺序会导致非常不同的表现,需要解决如何选择最优路线。

    然后,按照给定的顺序进行游走,方法同(1)。但有两个差别:这里的随机游走可能既包含游走(walk)也包含跳跃(jump);在随机选择一个元组的邻居时,即使随机游走γ的每一步都不均匀,只要能计算出它的概率p ( γ ),HT估计量仍然有效。路径γ的采样概率可以计算为:

    请添加图片描述

    Pr[(i) → (i)]表示从(i)游走到(i)的概率,这个概率可以用在标准B树(原方案:在B-树的每个内部节点v处,添加一个额外的字段来跟踪v下面存储的元组总数。)上的向下游走计算。计算过程如下:

    请添加图片描述

    (3)Wander Join在有环连接查询(Cyclic queries)上的应用

    请添加图片描述

    首先,找到它的任意生成树。然后像(2)一样在这颗树上进行随机游走。在生成树上采样一条路径y后,需要放回非生成树的边,并检验y在这些边上是否满足连接条件。如果不满足,则认为y是一条失败游走路径并返回值为0的估计量。

    有环查询上随机游走失败的概率通常要高于无环查询,导致更慢的收敛速率。但即便如此,Wander Join仍然比完全评估有环查询更有效。

    (4)选择谓词和分组(Selection Predicates and Group-By)

    针对选择谓词:在随机游走过程中,每当到达一个有选择谓词的元组t时,检查它是否满足谓词,如果不满足则立即失败随机游走。

    当随机游走的起始表在属性上有一个带有选择谓词的索引,并且该谓词是等式或范围条件:直接使用上述相同的B树游走算法从索引中采样满足条件的元组。在这种情况下,谓词不会使任何随机游走失败,因此最好从带有选择谓词的表开始。

    针对分组查询:如果查询中存在Group By X 条件,需要将该查询视为多个查询,每个查询对属性值X的每个不同值x都有一个选择谓词X=x。之后,总是从包含属性X的表开始随机游走,并以轮询的方式从每个组中执行随机游走。对于每个组都保持一个估计量和置信区间。当每个组都收到若干随机游走后,停止轮询。相反,此时总是选择置信区间最大的一组开始下一次随机游走。(贪心策略)

    (5)估计量和置信区间

    上述内容可以得到关于SUM聚合的无偏估计

    遗留问题:

    1)诸如COUNT和AVG等其他聚集函数如何处理?

    2)在进行了n次随机游走后,最终估计量的精度要如何说明?

    对于Ripple Join,上述问题是高度非平凡的。而Wander Join采取的是独立随机游走,所有单个估计量都是独立的,情况更简单。

    注意到,上述针对Wander Join的两个问题可以归约到使用选择谓词从单个表进行采样的情况。

    a. Sampling from a Single Table 从单表进行采样

    问题重申:给定一个包含N个元组的单表,每个元组t都和一个值v(t)和一个指示变量u(t)相关,其中当元组t满足谓词时,u(t)=1,否则u(t)=0。以平均的方式表示出任意聚合函数:

    请添加图片描述

    例如,令v(t)=N时,其表示COUNT聚合;设置N次v(t)为元组t真正的值表示SUM聚合。以下是Hass推导的各种聚合函数的估计量及其方差估计量:

    请添加图片描述

    上述估计量都可以轻易在每个样本O(1)时间内增量计算。

    b. The Reduction 降级

    目的:将Wander Join降级为单表采样问题。有以下两个观察:

    1)Hass的结果对u和v的任何定义都成立;

    2)即使每个ti都是非均匀采样,只要E[u (ti )v (ti )] = AGG,Hass的结果也成立,但是ti仍然需要独立。

    基于上述观察,可以将游荡连接中估计量的计算简化为从单个表中采样的计算。形式化表达如下:

    定理1:对每一个通过Wander Join采样的路径y,如果聚集函数AGG=COUNT,则定义v(y)=1;如果AGG=Sum,则v(y)表示y上待聚集的表达式的实际值。若y是一条成功游走路径,则定义u(y)=1/p(y),否则u(y)=0。那么Wander Join的估计量计算方法就是上述公式。

    根据上述公式可以计算得到方差,那么置信区间的半宽可以按如下方式计算:

    请添加图片描述

    其中α是置信水平阈值,zα是均值为0,方差为1的正态分布·

    (6)优化技术

    在实践中进一步提高Wander Join的性能

    1)Leaf Scanning 叶子扫描

    第一个优化器考虑的是游走顺序中的最后一个表。

    观察点:如果已经游走了很长的路径来到达最后一个表Rλ(k),仅仅返回一个估计量是非常浪费的。

    因此,不是从Rλ(k)中的能与tη(k)连接的元组中采样一个元组,而是访问所有元组。这些元组无论如何都是连续存储在B树索引中的。当Rλ(k)上存在选择谓词时,仅需要考虑满足该谓词的元组。这样,实质上是以一次游走为代价得到多个估计量。(称之为leaf scanning)

    需要注意的点:

    a.这些路径不是独立选择的,因为它们在除最后一个表外的所有表中共享同样的元组。所以不能直接运用之前提到的估计量计算公式。

    解决方法:将它们视为一个组合路径。因此组合路径的值 v ( y ) = ∑ i = 1 l v ( y i ) v(y) = \sum_{i = 1}^{l}{v(yi)} v(y)=i=1lv(yi)。相对应的,在计算p(y)时需要移除概率Pr[tη(k) → tλ(k)]这一因素。

    进一步的优化策略是,当聚集函数是COUNT或者任意AGG(expression)中的expression不依赖于最后一个表中元组的时,都可以避免实际检索Rλ(k)中的元组。需要的是Rλ(k)中可以与tη(k)相连接的元组个数。

    b. 检索Rλ(k)中所有能与tη(k)连接的元组的相关代价可能是无界的。

    解决方法:在最后一张表中开始B树游走算法,当算法到达B树索引的一个叶子节点,并将被聚合的属性信息存储在该叶子节点时,扫描存储在该叶子中的所有元组。否则,我们恢复到原始算法,只从最后一个表中采样一个元组。

    2)Selective Predicates 选择性谓词

    第二个优化器用于处理高选择性谓词。

    问题描述:假设当游走从元组tη(i)到表Rλ(i)时,如果Rλ(i)带有一个选择性谓词,并且其选择率为ρ(即R中满足谓词条件元组的比例为ρ)。如果这个ρ非常小,那么会导致很多的失败随机游走。

    解决方法:在Rλ(i)上执行B树游走算法并到达一个叶子节点时,扫描存储在该叶子节点中的所有元组以过滤掉所有满足该谓词的元组,并且在这些过滤掉的元组中只随机选择其中一个元组继续行走。相应的,Pr[tη(i)→tλ(i)]的计算也应做相应的修改,即在最后一步中,与tη(i)连接且满足Rλ(i)上的谓词的叶节点中元组的实际数目的概率应为1。

    (7)索引成本

    随机游走算法在很大程度上依赖与索引的可得性。一般而言,一个有效的游走顺序取决于连接属性上哪些索引可用。索引的建立和维护都存在成本。

    1)存储成本

    Wander Join只需要二级B树索引,即在基表中存储一个值和一个指向每个记录的指针。

    对于TPC-H,额外的空间开销大约为原始数据的1.4倍。(作者认为该成本不算严重)

    2)维护成本(主要)

    特别是在并发环境下,多个更新可能同时发生,索引必须被锁定以避免写冲突。因此,Wander Join并不是为这种更新频繁的工作负载所涉及的,其更适合在线分析处理(OLAP)引擎,它只看到离线时间中发生的批量更新。若要用于OLTP,则应该选择fractal tree index作为索引框架而不是B树。

    (8)与Ripple Join比较

    Ripple Join:从连接中采样均匀但不独立;

    Wander Join:从连接中采样独立但不均匀。

    两者相对于理想情形即既均匀又独立的采样都表现出更慢的收敛。前者的影响取决于相关度的大小,而后者取决于非均匀性的程度,两者都取决于实际数据特征和查询情况。

    采样效率比较:

    在假定非独立性和非均匀性对样本转换为最终估计值的影响相同的情况下,经过n个采样步骤后可以返回多少个联接样本。

    其他可以比较的方面:Computational costs/Run to completion/Worst case。

  4. 游走方案优化器

    (1)游走方案生成 Walk Plan Generation

    首先生成所有可能的游走方案。

    1)当至少存在一个有效游走顺序时

    为了生成所有可能的行走顺序,首先向连接查询图中的每条边添加方向。

    请添加图片描述

    游走方案的数量可以是表数量的指数级别,但其影响不大,因为:不可能有太多的表;更重要的是有很大游走方案不会对优化器产生重大影响。

    类似的,可以为循环查询生成所有可能的游走方案,只是一些边不会被游走,需要在随机游走后进行检查,称其为非树边(non-tree edges),因为图中被游走的部分构成了一棵树。

    请添加图片描述

    2)当没有有效游走顺序时

    首先,验证一个查询图至少有有效游走顺序的充要条件是它有一个有向生成树(每条边都指向远离根的树)。当没有足够索引时,可以将查询图分解为多个组件,使得每个组件都有一个有向生成树。在找到有向生成树分解后,为每个组件生成游走顺序。现在的游走方案是游走顺序的任意组合,每个部件一个。

    然后,在组件级别上运行Ripple Join,并在每个组件内部执行Wander Join。即以轮询的方式对组件进行随机游走,并将所有成功的路径保留在内存中。对于每个新采样的路径,它与来自其他表的所有路径进行连接,即检查这些组件之间的边上的连接条件是否满足。

    请添加图片描述

    在没有索引的极端条件下,每个组件中只包含一个表,此时算法本质上退化为Ripple Join。

    3)有向生成树分解

    有向生成树分解时希望尽可能减少组件的数量,因为每增加一个组件就会将一个连接条件从Wander Join推到Ripple Join,从而降低了采样效率。最坏情况就是每个顶点单处一个组件,算法完全退化为Ripple join。

    找最小有向生成树分解NP难,但由于TPC-H中最大也才8个图,因此可以简单使用穷举搜索来寻找最优分解。

    给定一个查询图G = (V,E),算法按一下三个步骤进行:

    a. 对于每个顶点v,找到从v可达的所有顶点的集合,记为T(v)。然后如果T(v)在另一个T(v’)中占优(即完全包含),则删除T(v)。将剩余顶点记为U。

    b. 通过穷举U的所有子集C,找出使 ⋃ v ∈ C T ( v ) \bigcup_{v \in C}^{}{T(v)} vCT(v)覆盖所有顶点的最小子集。这给出了最小覆盖,而不是分解。因为一些顶点可能被不只一个T(v)覆盖。

    c. 将覆盖转化为分解。

    定理2:算法产生了一致性赋值。

    (2)游走方案优化Walk Plan Optimization

    通过为有向生成树分解中的每个组件选择最佳的行走顺序来选择最佳的行走方案。

    游走顺序的性能取决于很多因素:

    a.连接图的结构。

    b.某个属性上有一个选择谓词,并且该属性上有一个索引表,那么最好从该表开始。

    c.对于循环查询图,哪些边作为非树边也会影响查询的成功效率。

    d. 即使随机游走的成功概率相同,不同的游走顺序可能导致不同的非均匀性,进而影响估计量的方差收敛速度。

    1)A Self Reduction

    a.观测到,最终随机游走的表现是由给定时间t后的最终估计量的方差来衡量的。

    令Xi为i次随机游走的估计量,T为一次随机游走的运行时间(不论成功与否)。

    假设在时间t内总共进行了W次随机游走,则最终估计量为 1 W ∑ i = 1 W X i \frac{1}{W}\sum_{i = 1}^{W}{Xi} W1i=1WXi,希望最小化其方差。

    对W进行一个条件化处理,并使用总方差法则(law of total variance):

    请添加图片描述

    请添加图片描述

    因此,对于给定的时间t,最终估计量的方差与Var[X1]E[T]成正比。

    b.观测到,Var[X1]和E[T]也可以由随机游走本身估计得到!特别地,Var[X1]只是估计器的方差,而E[T]只是按照游走计划执行随机游走的平均运行时间。这样,游走方案质量的估计问题就转化为在线聚集问题的另一个实例。

    因此优化器将进行一定数量的“试探”随机游走,并估计每个方案的Var[X1]和E[T]。

    策略:以循环往复的方式跟随每个方案进行随机游走,直到至少有一个计划积累了至少τ次成功游走为止。然后,选择具有最小Var[X1]E[T]且至少有τ/2次成功行走的方案。默认的阈值τ = 100。

    2)Incorporating Trial Random Walks into the Overall Estimator将试探随机游走纳入整体估计器

    观察到,所有的试探随机游走都没有被浪费,因为每个随机游走,不管遵循哪种计划,都会返回一个无偏估计量。所以优化器发出的试探随机游走也可以被纳入到整体估计量中,进一步减小其方差。

    注意在决定是否应该包括哪些试验随机游走时需要谨慎,因为有些计划可能会返回方差非常高的估计量,这样包括它们实际上可能会损害总体质量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值