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