分布式GK Summary算法

来源:互联网 发布:淘宝网怎么打造爆款 编辑:程序博客网 时间:2024/04/28 07:48

  • 前言
  • 背景
  • 分布式GK Summary算法
    • 1 Merge操作
    • 2 Prune操作
  • 参考文献


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的zirminQ(zn)以及rmaxQ(zn)
  不失一般性,假设分配Q中的xrQzi,满足:

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方案。

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

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中相连zizi+1 来源于同一个Q或者Q,不失一般性,假设都来源于Q,分别对应于xrxr+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中相连zizi+1 来源不同,不失一般性,假设zi源于Q,zi+1源于Q ,分别对应于xryt。根据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

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


这里写图片描述

  其中vkqiQ的排序,vmqi+1Q的排序,因此,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+...+gk+1

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

gm1+gm2+...+gk+1(1/B)×|S|

  结合rmax(vm)rmin(vm1)2ϵ|S|, 可得:

rmax(qi+1)rmin(qi)2(ϵ+1/(2B))×|S|

  得证。


参考文献

  1. Emory大学Stream DB System课程关于分布式GK Summary算法材料:
    http://www.mathcs.emory.edu/~cheung/Courses/584-StreamDB/Syllabus/08-Quantile/Greenwald-D.html
原创粉丝点击