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,满足:
maxys∈Q″<xrminyt∈Q″>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″满足误差约束条件:
maxi∈Q′(gi+Δi)≤2ϵN
maxi∈Q″(gi+Δi)≤2ϵM
现在转化为如何证明:
maxi∈Q(gi+Δi)≤2ϵ(N+M)。
证明之前,先说明
merge的一般性质: Q′:maxi∈Q′(gi+Δi)≤2ϵ′NQ″:maxi∈Q″(gi+Δi)≤2ϵ″M⇒merge(Q′,Q″):maxi∈Q(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)=[r′maxQ(xr+1)−r′minQ(xr)]+[r″maxQ(yt)−1]≤[r′maxQ(xr+1)−r′minQ(xr)]+[r″maxQ(yt)−r″minQ(yt−1)] (r″minQ(yt−1)≥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)=[r′maxQ(xr+1)−r′minQ(xr)]+[r″maxQ(yt)−1]≤[r′maxQ(xr+1)−r′minQ(xr)]+[r″maxQ(yt)−r″minQ(yt−1)] (r″minQ(yt−1)≥1)≤2ϵ′N+2ϵ″M≤2max(ϵ′,ϵ″)(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′的排序,因此,
m−k≤(i/B)×|S|。
rmax(qi+1)−rmin(qi)=rmax(vm)−rmin(vk)=rmax(vm)+ +rmin(vm−1)−rmin(vm−1) +rmin(vm−2)−rmin(vm−2) +.... +rmin(vk+1)−rmin(vk+1) −rmin(vk)
rmax(qi+1)−rmin(qi)=rmax(vm)−rmin(vm−1)+rmin(vm−1)−rmin(vm−2)+rmin(vm−2)−rmin(vm−3)+....+rmin(vk+2)−rmin(vk+1)+rmin(vk+1)−rmin(vk)
rmax(qi+1)−rmin(qi)=rmax(vm)−rmin(vm−1)+gm−1+gm−2+...+gk+1
之前博文说明g表示对应summary覆盖数据量,因此,
gm−1+gm−2+...+gk+1≤(1/B)×|S|
结合
rmax(vm)−rmin(vm−1)≤2ϵ|S|, 可得:
rmax(qi+1)−rmin(qi)≤2(ϵ+1/(2B))×|S|
得证。
参考文献
- Emory大学Stream DB System课程关于分布式GK Summary算法材料:
http://www.mathcs.emory.edu/~cheung/Courses/584-StreamDB/Syllabus/08-Quantile/Greenwald-D.html