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
覆蓋數據量,因此,