Skip to content

可合并摘要

mergeable summary · mergeable sketch

让分片流的有限状态在不读取原始数据时组合,并保持与集中处理相容的统计保证。

条目类型
定义

形式陈述

接口性质

对流片段 A,摘要算法产生有限状态 S(A)。若存在只读取两个状态的操作 merge,使

merge(S(A),S(B))S(AB),

就称摘要可合并。符号 不是装饰:它必须说明状态完全相同、输出分布相同,还是两边都满足同一 (ε,δ) 误差保证。

接口至少要固定 summarize、merge 与 query。merge 不得重新扫描 A,B 的原始项;否则它只是集中重算。若分布式归约树会任意改变括号次序,合并还应在语义上结合;无序分片要进一步说明是否交换。

严格与近似可合并

严格可合并要求兼容状态满足

merge(S(A),S(B))=S(AB)

或至少具有与集中运行完全相同的分布。计数器是最简单的例子:状态为整数,merge 是加法,形成一个幺半群

近似可合并允许状态不同,但 query 的误差仍在声明范围内。此时要证明两件事:状态运算没有引入未计入的偏差,归约树的层数也不会让误差或失败概率无限累加。一个在每次 merge 都重新做有损压缩的摘要,可能需要按树深调整精度。

线性 sketch在共享线性映射 L 时天然满足

L(fA+fB)=L(fA)+L(fB).

这给出严格的状态合并式,但 query 从 sketch 恢复统计量仍可能是随机近似;“线性”解决组合,不自动消除估计误差。

直觉

摘要能被序列化并不表示它能被统计上正确地拼接。可合并性要求状态运算与“先合并原始数据再摘要”相容,并把随机种子、顺序、重复和误差合成都纳入契约;归约树上的任意括号变化才不会悄悄改变答案分布。

可合并摘要的逐坐标合并
例子与边界

HyperLogLog 的寄存器合并

HyperLogLog 用共享哈希函数把元素分配到寄存器,并在寄存器中记录观察到的最大前导零等级。两个分片状态逐寄存器取最大值:

RjAB=max(RjA,RjB).

这与在并集流上逐元素更新完全相同,因为 max 既结合、交换又幂等。

例如四个寄存器的分片状态为

RA=(3,1,0,2),RB=(1,4,2,2).

合并得到 (3,4,2,2)。同一用户若同时出现在两片,只会重复提交相同的寄存器与等级,max 不会把它数两次;最后再由统一的基数估计公式读取寄存器。

该例成立的前提是寄存器数、哈希种子、位切分方式和估计器版本一致。若两个分片用独立哈希种子,寄存器下标不再表示同一随机试验,逐位 max 没有上述并集语义。

随机性是状态契约的一部分

摘要的 schema 不只包含字节布局,还包含随机性约定。共享随机投影、哈希族和采样优先级通常要由作业级 seed 派生,使任意节点能验证兼容性。merge 遇到不兼容 seed 应拒绝,而不是静默组合。

有些算法允许独立随机副本并通过平均降低方差,但那是“合并估计值”的另一项定理。它不能代替对原摘要状态的合并证明。失败概率若对每个分片分别为 δ,直接用 union bound 可能得到 pδ;共享 sketch 往往能让最终状态对应一次全局试验。

Reservoir sample 的反例

分片 A 含 1000 项,分片 B 含 10 项,各自保留一个均匀 reservoir 样本。若把两个样本放在一起再等概率选一个,最终来自 B 的概率为 1/2;全局均匀样本应来自 B 的概率却是

101010.

内存表示很容易拼接,不代表统计分布正确。

对样本量 1,可按分片长度加权,分别以 1000/101010/1010 选择。对一般 k,可给每个原始元素使用全局可比较的随机优先级并保留最优 k 项,或采用经证明的加权合并算法;简单并集后随意截断不够。

重复、顺序与误差合成

频率向量摘要通常把重复事件视为计数增加;集合摘要则需让同一键的重复不改变集合语义。若分片不是互斥时间段,而是有重放或副本,sum 型 sketch 会重复计数,max 型集合 sketch 可能仍正确。数据所有权条件应成为接口前置条件。

顺序统计量还可能不交换。若摘要表示字符串哈希或有限自动机状态,ABBA 不同;merge 可以结合,却必须保留分片顺序。把可结合误写成可任意乱序,是分布式实现中的实际错误。

推论与应用

与序列化和批处理的区别

能序列化状态只说明它可以传输,不能说明两个状态能正确组合。能把两个数组连接也只说明表示闭合,不能证明 query 无偏。可合并性是一项带统计保证的代数接口性质。

完整报告应列出状态大小、update 与 merge 时间、兼容性字段、误差类型、失败概率如何随归约树变化,以及重复数据假设。缺少任一项,调用者都无法判断它是否适合并行流处理。

参考资料
  • Pankaj K. Agarwal, Graham Cormode, Zengfeng Huang, Jeff M. Phillips, Zhewei Wei and Ke Yi, Mergeable Summaries, ACM Transactions on Database Systems, 2013.
  • Philippe Flajolet, Éric Fusy, Olivier Gandouet and Frédéric Meunier, HyperLogLog: The Analysis of a Near-Optimal Cardinality Estimation Algorithm, AOFA, 2007.
  • Graham Cormode and S. Muthukrishnan, An Improved Data Stream Summary: The Count-Min Sketch and Its Applications, Journal of Algorithms, 2005.
关系图谱7 个相邻概念 · 1 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组