分布式GK Summary算法


0.前言

  本文主要介绍分布式GK Summay算法,考虑分布式流式数据库场景,博客内容来源主要是原始论文与Emory大学的流式数据库的课程内容,本文仅提取出关键内容加入笔者的个人理解,有错误还望谅解与告知。

1.背景

  现在考虑分布式流式数据库,流式数据来源如下图:


这里写图片描述

  上图中每个Processing Node需要统计对应的数据,然后将统计数据merge生成可查询的Summary。上篇博客我们知道对于数据流如何构建GK Summary来支持 ϵapproximate ϕquantile 分位点查询,但是由于数据流来源分布不同,而查询应该基于全局数据,因此需要将所有GK Summary合并merge生成最终全局的Summary查询结构。本文就来探讨分布式GK summary的merge操作以及Prune操作。后续会介绍到Prune操作,不同于上篇GK Summary的delete与compress操作,该操作直接对Summary进行删减,会牺牲误差边界,merge与prune操作是后续A fast algorithm的基础操作。

2.分布式GK Summary算法

2.1 Merge操作

  考虑2个summary merge情况,已经按照summary tuple内部 v 大小排序:

Q={(x1,rmin(x1),rmax(x1)),(x2,rmin(x2),rmax(x2)),...,(xn,rmin(xn),rmax(xn))}Q={(y1,rmin(y1),rmax(y1)),(y2,rmin(y2),rmax(y2)),...,(ym,rmin(ym),rmax(ym))}

  注,上述summary基于 (v,rmin,rmax) 形式,之前博客已经说明,该形式等价于 (v,g,Δ) ,后者主要方便新增数据的summary更新,但是前者可读性更高,故本文说明基于前者形式。

  如何merge生成最终 Q

{(z1,rmin(z1),rmax(z1)),(z2,rmin(z2),rmax(z2)),...,(zn,rmin(zn),rmax(zs))}

  Merge方案:首先,考虑 s=n+m ,关键是分配每个 Q 中summary的 zi rminQ(zn) 以及 rmaxQ(zn)
  不失一般性,假设分配 Q 中的 xr Q zi ,满足:

maxysQ<xrminytQ>xr

  此时, 可以分配 rminQ(zn) rmaxQ(zn)

rminQ(zi)={rminQ(xr)rminQ(xr)+rminQ(ys),ys,

rmaxQ(zi)={rmaxQ(xr)+rmaxQ(ys)rmaxQ(xr)+rmaxQ(yt)1,yt,

  分配完 Q ,同样地,对 Q 执行一次,这样 Q 就补充到 s=n+m ,这就是一种Merge方案。

  证明上述方案的可行性,已知 Q Q 满足误差约束条件:

maxiQ(gi+Δi)2ϵN

maxiQ(gi+Δi)2ϵM

  现在转化为如何证明: maxiQ(gi+Δi)2ϵ(N+M)
  证明之前,先说明 merge的一般性质:
Q:maxiQ(gi+Δi)2ϵNQ:maxiQ(gi+Δi)2ϵMmerge(Q,Q):maxiQ(gi+Δi)2max(ϵ,ϵ)(N+M)

  证明这条性质,间接的也就证明上述merge方案的可行性。下面分2种情况分别证明:

  1) 在 Q 中相连 zi zi+1 来源于同一个 Q 或者 Q ,不失一般性,假设都来源于 Q ,分别对应于 xr xr+1 。根据 rmin(zn) 分配定义,可得 rminQ(zi)rminQ(xr) ,同样地, rmaxQ(zi+1)rmaxQ(xr+1)+rmaxQ(yt)1 ,位置关系如下图所示:


这里写图片描述

  所以:

rmaxQ(zi+1)rminQ(zi)[rmaxQ(xr+1)+rmaxQ(yt)1]rminQ(xr)=[rmaxQ(xr+1)rminQ(xr)]+[rmaxQ(yt)1][rmaxQ(xr+1)rminQ(xr)]+[rmaxQ(yt)rminQ(yt1)]  (rminQ(yt1)1)2ϵN+2ϵM=2max(ϵ,ϵ)(N+M)

  2) 在 Q 中相连 zi zi+1 来源不同,不失一般性,假设 zi 源于 Q , zi+1 源于 Q ,分别对应于 xr yt 。根据 rmin(zn) 分配定义,可得 rminQ(zi)rminQ(xr) ,同样地, rmaxQ(zi+1)rmaxQ(yt)+rmaxQ(xr+1)1 ,位置关系如下图所示:


这里写图片描述

  所以:

rmaxQ(zi+1)rminQ(zi)[rmaxQ(yt)+rmaxQ(xr+1)1]rminQ(xr)=[rmaxQ(xr+1)rminQ(xr)]+[rmaxQ(yt)1][rmaxQ(xr+1)rminQ(xr)]+[rmaxQ(yt)rminQ(yt1)]  (rminQ(yt1)1)2ϵN+2ϵM2max(ϵ,ϵ)(N+M)

   得证。

  最后,结论扩展:对于 quantile summary 集合: Q1,Q2,...,Qk , 满足误差为 ϵ1,ϵ2,...,ϵk 约束, Merge(Q1,Q2,...,Qk) 满足误差为: ϵ=max1..k(ϵi)

2.2 Prune操作

   Merge操作是将对应 summary 合并到一块,生成 summary 的结果数是增多的,如何减少Merge的结果数呢?即定义Prune操作,但减少并不是没有代价的,需要增大误差边界。下面定义Prune操作:

  假设将 S 结果数减少到 B ,Prune操作为 Prune(S,B) ,其中 |S| 代表 QSummary S 对应的数据集大大小。

 QSummary Prune(QSummary S,int B){      QSummary R=ϕ;      for (i=1,(1/B)×|S|,(2/B)×|S|,(3/B)×|S|,...,|S|)     {          v=Query(S,i);    //GK Summary          rmin(v)=rmin(v) in summaryQ;          rmax(v)=rmax(v) in summaryQ;          R=R(v,rmin(v),rmax(v);     }     return R;}

   先说结论, Q ϵapproximate quantile summary ,则:

Q=Prune(Q,B):(ϵ+1/(2B))approximate quantile summary

   证明:假设 qi qi+1 Prune(Q,B) 中的两个相连summary,位置分布如下图所示:


这里写图片描述

  其中 vk qi Q 的排序, vm qi+1 Q 的排序,因此, mk(i/B)×|S|

rmax(qi+1)rmin(qi)=rmax(vm)rmin(vk)=rmax(vm)+    +rmin(vm1)rmin(vm1)    +rmin(vm2)rmin(vm2)     +....    +rmin(vk+1)rmin(vk+1)    rmin(vk)

rmax(qi+1)rmin(qi)=rmax(vm)rmin(vm1)+rmin(vm1)rmin(vm2)+rmin(vm2)rmin(vm3)+....+rmin(vk+2)rmin(vk+1)+rmin(vk+1)rmin(vk)

rmax(qi+1)rmin(qi)=rmax(vm)rmin(vm1)+gm1+gm2+.vm)rmin(vm1)+gm1+gm2+...+gk+1

  之前博文说明 g 表示对应 summary 覆盖数据量,因此,

相关文章
相关标签/搜索