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+.vm)−rmin(vm−1)+gm−1+gm−2+...+gk+1
之前博文说明
g
表示对应
summary
覆盖数据量,因此,