• 前言
  • 背景
  • 分布式GK Summary算法
    • 1 Merge操作
    • 2 Prune操作
  • 参考文献

0.前言

  本文主要介绍分布式GK Summay算法,考虑分布式流式数据库场景,博客内容来源主要是原始论文与Emory大学的流式数据库的课程内容,本文仅提取出关键内容加入笔者的个人理解,有错误还望谅解与告知。

1.背景

  现在考虑分布式流式数据库,流式数据来源如下图:

  上图中每个Processing Node需要统计对应的数据,然后将统计数据merge生成可查询的Summary。上篇博客我们知道对于数据流如何构建GK Summary来支持 ϵ−approximate ϕ−quantile\epsilon-approximate \ \phi-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内部vv大小排序:

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))}

Q' = \{(x_1, r_{min}(x_1), r_{max}(x_1)) , (x_2, r_{min}(x_2), r_{max}(x_2)), ... , (x_n, r_{min}(x_n), r_{max}(x_n))\} \\ Q'' = \{(y_1, r_{min}(y_1), r_{max}(y_1)) , (y_2, r_{min}(y_2), r_{max}(y_2)), ... , (y_m, r_{min}(y_m), r_{max}(y_m))\}
  注,上述summary基于(v,rmin,rmax)(v,r_{min},r_{max})形式,之前博客已经说明,该形式等价于(v,g,Δ)(v,g,Δ),后者主要方便新增数据的summary更新,但是前者可读性更高,故本文说明基于前者形式。

  如何merge生成最终QQ:

{(z1,rmin(z1),rmax(z1)),(z2,rmin(z2),rmax(z2)),...,(zn,rmin(zn),rmax(zs))}

\{(z_1, r_{min}(z_1), r_{max}(z_1)) , (z_2, r_{min}(z_2), r_{max}(z_2)), ... , (z_n, r_{min}(z_n), r_{max}(z_s))\}

  Merge方案:首先,考虑s=n+ms=n+m,关键是分配每个QQ中summary的ziz_i、rminQ(zn)r_{minQ}(z_n)以及rmaxQ(zn)r_{maxQ}(z_n)。
  不失一般性,假设分配Q′Q'中的xrx_r到QQ中ziz_i,满足:

maxys∈Q″<xrminyt∈Q″>xr

\max\limits_{y_s ∈ Q''} x_r
  此时, 可以分配 rminQ(zn)r_{minQ}(z_n)与 rmaxQ(zn)r_{maxQ}(z_n):

rminQ(zi)={rminQ′(xr)rminQ′(xr)+rminQ″(ys),不存在ys,其他

r_{minQ}(z_i) = \begin{cases} r_{minQ'}(x_r) &, 不存在y_s \\ r_{minQ'}(x_r) + r_{minQ''}(y_s) &, 其他 \end{cases}

rmaxQ(zi)={rmaxQ′(xr)+rmaxQ″(ys)rmaxQ′(xr)+rmaxQ″(yt)−1,不存在yt,其他

r_{maxQ}(z_i) = \begin{cases} r_{maxQ'}(x_r) + r_{maxQ''}(y_s) &, 不存在y_t \\ r_{maxQ'}(x_r) + r_{maxQ''}(y_t) - 1 &, 其他 \end{cases}
  分配完 Q′Q',同样地,对 Q″Q''执行一次,这样 QQ就补充到s=n+ms=n+m,这就是一种Merge方案。

  证明上述方案的可行性,已知Q′Q'、Q″Q''满足误差约束条件:

maxi∈Q′(gi+Δi)≤2ϵN

\max\limits_{i \in Q'} (g_i + Δ_i) \leq 2\epsilon N

maxi∈Q″(gi+Δi)≤2ϵM

\max\limits_{i \in Q''} (g_i + Δ_i) \leq 2\epsilon M
  现在转化为如何证明: maxi∈Q(gi+Δi)≤2ϵ(N+M)\max\limits_{i \in Q} (g_i + Δ_i) \leq 2\epsilon (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)

Q':\max\limits_{i \in Q'} (g_i + Δ_i) \leq 2\epsilon' N \\ Q'':\max\limits_{i \in Q''} (g_i + Δ_i) \leq 2\epsilon'' M \\ \Rightarrow merge(Q',Q''):\max\limits_{i \in Q} (g_i + Δ_i) \leq 2max(\epsilon', \epsilon'') (N+M)
  证明这条性质,间接的也就证明上述merge方案的可行性。下面分2种情况分别证明:

  1) 在QQ中相连ziz_i与zi+1z_{i+1} 来源于同一个Q′Q'或者Q″Q'',不失一般性,假设都来源于Q′Q',分别对应于xrx_r于xr+1x_{r+1}。根据rmin(zn)r_{min}(z_n)分配定义,可得rminQ(zi)≥rminQ′(xr)r_{minQ}(z_i) \geq r_{minQ'}(x_r),同样地,rmaxQ(zi+1)≤rmaxQ′(xr+1)+rmaxQ″(yt)−1r_{maxQ}(z_{i+1}) \leq r_{maxQ'}(x_{r+1}) + r_{maxQ''}(y_t) - 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)

\begin{align} r_{maxQ}(z_{i+1}) − r_{minQ}(z_i) &\leq [r_{maxQ'}(x_{r+1}) + r_{maxQ''}(y_t) - 1] - r_{minQ'}(x_r) \\ &=[r_{maxQ}'(x_{r+1}) - r_{minQ}'(x_r)] + [r_{maxQ}''(y_t) - 1] \\ &\leq [r_{maxQ}'(x_{r+1}) - r_{minQ}'(x_r)] + [r_{maxQ}''(y_t) - r_{minQ}''(y_{t-1})] \ \ (r_{minQ}''(y_{t-1}) ≥ 1 ) \\ &\leq 2\epsilon' N + 2\epsilon'' M \\ &=2max(\epsilon', \epsilon'') (N + M) \end{align}

  2) 在QQ中相连ziz_i与zi+1z_{i+1} 来源不同,不失一般性,假设ziz_i源于Q′Q',zi+1z_{i+1}源于Q″Q'' ,分别对应于xrx_r、yty_t。根据rmin(zn)r_{min}(z_n)分配定义,可得rminQ(zi)≥rminQ′(xr)r_{minQ}(z_i) \geq r_{minQ'}(x_r),同样地,rmaxQ(zi+1)≤rmaxQ″(yt)+rmaxQ′(xr+1)−1r_{maxQ}(z_{i+1}) \leq r_{maxQ''}(y_t) + r_{maxQ'}(x_{r+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)

\begin{align} r_{maxQ}(z_{i+1}) − r_{minQ}(z_i) &\leq [r_{maxQ''}(y_t) + r_{maxQ'}(x_{r+1}) - 1] - r_{minQ'}(x_r) \\ &=[r_{maxQ}'(x_{r+1}) - r_{minQ}'(x_r)] + [r_{maxQ}''(y_t) - 1] \\ &\leq [r_{maxQ}'(x_{r+1}) - r_{minQ}'(x_r)] + [r_{maxQ}''(y_t) - r_{minQ}''(y_{t-1})] \ \ (r_{minQ}''(y_{t-1}) ≥ 1 ) \\ &\leq 2\epsilon' N + 2\epsilon'' M \\ & \leq 2max(\epsilon', \epsilon'') (N + M) \end{align}
   得证。

  最后,结论扩展:对于quantile summaryquantile \ summary集合:Q1,Q2,...,Qk Q_1, Q_2, ..., Q_k, 满足误差为ϵ1,ϵ2,...,ϵk \epsilon_1, \epsilon_2, ..., \epsilon_k约束,Merge(Q1,Q2,...,Qk)Merge(Q_1, Q_2, ..., Q_k)满足误差为:ϵ=max1..k(ϵi)\epsilon = \max_{1..k}(\epsilon_i)

2.2 Prune操作

   Merge操作是将对应summarysummary合并到一块,生成summarysummary的结果数是增多的,如何减少Merge的结果数呢?即定义Prune操作,但减少并不是没有代价的,需要增大误差边界。下面定义Prune操作:

  假设将SS结果数减少到BB,Prune操作为Prune(S,B)Prune(S, B),其中|S||S|代表QSummary SQSummary \ 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;}

\begin{align} & \ QSummary \ Prune(QSummary \ S, int \ B) \\ &\{ \\ &\ \ \ \ \ \ QSummary \ R = \phi; \\ &\ \ \ \ \ \ for \ ( i = 1, (1/B)×|S|, (2/B)×|S|, (3/B)×|S|, ..., |S| ) \\ &\ \ \ \ \ \{ \\ & \ \ \ \ \ \ \ \ \ \ v = Query( S, i ); \ \ \ \ //GK \ Summary查询,前文已经讲过\\ & \ \ \ \ \ \ \ \ \ \ r_{min}( v ) = r_{min}( v ) \ in \ summary Q; \\ & \ \ \ \ \ \ \ \ \ \ r_{max}( v ) = r_{max}( v ) \ in \ summary Q; \\ & \ \ \ \ \ \ \ \ \ \ R = R ∪ { (v, r_{min}( v ), r_{max}( v ) } ; \\ & \ \ \ \ \ \} \\ & \ \ \ \ \ return \ R; \\ & \} \\ \end{align}

   先说结论,Q′Q'为ϵ−approximate quantile summary\epsilon-approximate \ quantile \ summary,则:

Q=Prune(Q,B):(ϵ+1/(2B))−approximate quantile summary

Q=Prune(Q, B): (\epsilon + 1/(2B))-approximate \ quantile \ summary
   证明:假设 qiq_i 和 qi+1q_{i+1}是 Prune(Q′,B)Prune(Q', B)中的两个相连summary,位置分布如下图所示:

  其中 vkv_k为 qiq_i在 Q′Q'的排序, vmv_m为 qi+1q_{i+1}在 Q′Q'的排序,因此, m−k≤(i/B)×|S|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)

\begin{align} r_{max}( q_{i+1} ) - r_{min}( q_{i} ) &= r_{max}( v_m ) - r_{min}( v_{k} ) \\ &= r_{max}( v_m ) + \\ & \ \ \ \ + r_{min}( v_{m-1} ) - r_{min}( v_{m-1} ) \\ & \ \ \ \ + r_{min}( v_{m-2} ) - r_{min}( v_{m-2} ) \\ & \ \ \ \ \ + .... \\ & \ \ \ \ + r_{min}( v_{k+1} ) - r_{min}( v_{k+1} ) \\ & \ \ \ \ - r_{min}( v_{k} ) \end{align}

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)

\begin{align} r_{max}( q_{i+1} ) - r_{min}( q_{i} ) &= r_{max}( v_m ) - r_{min}( v_{m-1} ) \\ & + r_{min}( v_{m-1} ) - r_{min}( v_{m-2} ) \\ & + r_{min}( v_{m-2} ) - r_{min}( v_{m-3} ) \\ & + .... \\ & + r_{min}( v_{k+2} ) - r_{min}( v_{k+1} ) \\ & + r_{min}( v_{k+1} ) - r_{min}( v_{k} ) \\ \end{align}

rmax(qi+1)−rmin(qi)=rmax(vm)−rmin(vm−1)+gm−1+gm−2+...+gk+1

r_{max}( q_{i+1} ) - r_{min}( q_{i} ) = r_{max}( v_m ) - r_{min}( v_{m-1} )+ g_{m-1} + g_{m-2} + ... + g_{k+1}

  之前博文说明gg表示对应summarysummary覆盖数据量,因此,

gm−1+gm−2+...+gk+1≤(1/B)×|S|

g_{m-1} + g_{m-2} + ... + g_{k+1} \leq (1/B)×|S|
  结合 rmax(vm)−rmin(vm−1)≤2ϵ|S|r_{max}( v_m ) - r_{min}( v_{m-1} ) \leq 2\epsilon |S| , 可得:

rmax(qi+1)−rmin(qi)≤2(ϵ+1/(2B))×|S|

r_{max}( q_{i+1} ) - r_{min}( q_{i} ) \leq 2(\epsilon + 1/(2B)) \times |S|

  得证。


参考文献

  1. Emory大学Stream DB System课程关于分布式GK Summary算法材料:
    http://www.mathcs.emory.edu/~cheung/Courses/584-StreamDB/Syllabus/08-Quantile/Greenwald-D.html

分布式GK Summary算法相关推荐

  1. Fast Algorithm for GK Summary算法

    前言 算法思路 1 数据量固定的算法 2 数据量固定的算法复杂度 3 流式数据算法 4 流式算法复杂度分析 参考文献 0.前言   本文主要介绍Zhang and Wang利用GK Summary的M ...

  2. GK Summay算法(ϵ−approximate ϕ−quantile)

    前言 背景 GK Summary算法 1 GK Summary定义 2 GK Summary插入insert 3 GK Summary删除delete与compress 4 GK Summary算法 ...

  3. 分布式一致性hash算法

    写在前面   在学习Redis的集群内容时,看到这么一句话:Redis并没有使用一致性hash算法,而是引入哈希槽的概念.而分布式缓存Memcached则是使用分布式一致性hash算法来实现分布式存储 ...

  4. 分布式ID-雪花算法

    上面的三种方法总的来说是基于自增思想的,而接下来就介绍比较著名的雪花算法-snowflake. 我们可以换个角度来对分布式ID进行思考,只要能让负责生成分布式ID的每台机器在每毫秒内生成不一样的ID就 ...

  5. 理解分布式id生成算法--雪花算法(SnowFlake)

    分布式ID生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. 注: 1B就是1个字节. Byte.KB.B.MB.GB之间的关系是: Bit--比特 : B --字节:KB-- ...

  6. python雪花算法生成id_理解分布式id生成算法SnowFlake

    分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. 概述 SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 1位,不用.二进制中最高位 ...

  7. 带你认识大模型训练关键算法:分布式训练Allreduce算法

    摘要:现在的模型以及其参数愈加复杂,仅仅一两张的卡已经无法满足现如今训练规模的要求,分布式训练应运而生. 本文分享自华为云社区<分布式训练Allreduce算法>,原文作者:我抽签必中. ...

  8. 【人工智能 Open AI】解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明。

    解释一下 Raft 分布式一致性协议算法,并用伪代码实例说明. 文章目录 Raft 简介 Raft Protocol Description Raft 协议讲解 Raft vs. Paxos Raft ...

  9. 首次公开,GitHub点击破百万的分布式高可用算法小册被我扒下来了

    想成为分布式高手?那就先把协议和算法烂熟于心吧!这就不得不提到著名的--<分布式高可用算法>! 目前网上还没有开源版本,今天我就当一次"互联网雷锋" ,免费获取方式我放 ...

最新文章

  1. Discuz!X2论坛 “在线时间”更新问题
  2. 轻松理解之SpringBoot实现原理
  3. 枚举对象注释_如何以及何时使用枚举和注释
  4. 【概念集锦】之 shim和polyfill
  5. Flask学习之基础知识与功能
  6. C语言基础教程之强制类型转换
  7. 8片74151扩展为64选1数据选择器
  8. 深度学习与计算机视觉教程(14) | 图像分割 (FCN,SegNet,U-Net,PSPNet,DeepLab,RefineNet)(CV通关指南·完结)
  9. php临时终止,PHP终止脚本执行的方法介绍
  10. 光纤跳线的类型和区别?
  11. 安卓中Paint与Canvas用法
  12. 华为笔记本转轴坏了修复指南记录
  13. python小练习--GUI基础
  14. 【Unity3D】血条(HP)
  15. Android Studio中启动模拟器时提示HAXM错误的解决方法
  16. 神奇的验证码,我们一起来探究
  17. bootstrap validator ajax提交,bootstrapValidator中用ajax校验
  18. 计算机仿真技术(3)
  19. pandas读取某一列,并转换为列表
  20. django bulk_update_or_create 批量创建更新

热门文章

  1. 003@ uboot第二阶段分析(下)
  2. 我在华为写了13年的代码
  3. [CortexM--CMSIS]详细的说明
  4. JVM中的对象探秘(三)- 对象的实例数据与对齐填充
  5. 心情日志 —— 2015/09/09
  6. 你知不知道,天空没有想象中蓝
  7. 杰理之IIC及其他配置定义
  8. maven安装到私服和从私服下载
  9. [CH5202]自然数拆分Lunatic版
  10. PAT 1100. Mars Numbers (20)