分佈式GK Summary算法


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 ,滿足:

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

  證明上述方案的可行性,已知 Q Q 滿足誤差約束條件:

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 中相連 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)=[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 中相連 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)=[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

   證明:假設 qi qi+1 Prune(Q,B) 中的兩個相連summary,位置分佈如下圖所示:


這裏寫圖片描述

  其中 vk qi Q 的排序, vm qi+1 Q 的排序,因此, 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+.vm)rmin(vm1)+gm1+gm2+...+gk+1

  之前博文說明 g 表示對應 summary 覆蓋數據量,因此,

相關文章
相關標籤/搜索