小记一下阅读这篇来自于VLDB的论文,自己的阅读记录
基本概念
流数据是一组顺序、大量、快速、连续到达的数据序列,一般情况下,流数据可被视为一个随时间延续而无限增长的动态数据集合。
流数据在许多领域不断增加,包括点击流 、购物篮交易 、传感器数据和网络流量,流处理已成为当今数据分析中不可或缺的范式
在流处理中,每个项目通常被表述为一个键值元组进行计算(key, value)
每键聚合(per-key aggregations): 属于每个键的项目的值进行累积
覆盖率:相对误差达到目标水平(如0.1%)的key在所有key中所占的比例(如95%)
论文摘要
本文实现了在有限的资源使用情况下每键信息的高覆盖率,如果结果覆盖率高,管理员可以专注于处理对误报或未检测事件的关注有限的报告。高覆盖率还可以推断出每个键聚合的准确分布。它有利于基于分布的任务,例如 DDoS 检测,每个任务都专注于单个项目的键。
准确的每键信息在异常检测、攻击预防和在线诊断等应用中发挥着重要作用
通常流处理中使用两阶段架构:
- 更新阶段(维护一个轻量级的数据结构,以有限的内存和计算资源实时处理项目,并将数据结构发送到带宽使用有限的恢复阶段)[关键点:如何在有限的资源里以较高的处理精度来处理实时的数据流]
- 恢复阶段(从接收到的具有足够资源的数据结构中检索统计信息)
现有方法无法在有限的资源下实现高覆盖率
图2以实现95%的覆盖率为目标,各个方法最低需要的内存至少为46MB,甚至达到100MB
图3中使用复杂的键跟踪机制,多个方法需要超过50%的内存,或者处理时间要超过40%
在基于草图的技术路线中,现有的方法对大多数键都存在高错误率,根本原因在于:
- 在更新阶段通过复杂的机制跟踪键(一方面导致内存和计算资源不足;另一方面更新阶段有限的内存只能存储有限数量的键)
- 而在恢复阶段简单地通过计算器来计算每键聚合(不能容忍哈希冲突,导致严重的相对误差)
而本文提出了一种新的草图设计PR-Sketch,主要优化了两个阶段的过程:
- 在更新阶段计数器和每个键的聚合之间建立线性方程来提高准确性
- 在恢复阶段记录键以减少更新阶段的资源使用
具体来说,PR-Sketch 在计数器值和每键聚合之间建立了一个线性方程系统,并找到了最佳解决方案。它容忍哈希冲突,因此提高了覆盖率。此外PR-Sketch 将键记录部分从更新阶段转移到恢复阶段。特别是,更新阶段通过轻量级数据结构识别新键。然后,它以很少的带宽成本将密钥发送到恢复阶段并记录下来以供进一步分析。在更新阶段为聚合记录节省内存,减少哈希冲突,在恢复阶段可以记录任意数量的资源丰富的键,避免关键信息丢失。
符号说明
( a 1 , a 2 , a 3 , . . . , a S ) (a_1, a_2, a_3, ..., a_S) (a1,a2,a3,...,aS)是每个epoch时间内固定输入的一系列项目,每个项目 a i a_i ai定为一个键值元组 ( x , u x ) (x, u_x) (x,ux),目标就是为了计算流上的每键聚合:即统计同属于一个键名x的所有值 u x u_x ux的和
在这里每键聚合的一些信息用法:在给定用户提供的阈值情况下,将聚合大于阈值的热键称为heavy hitters(频繁项);连续两个epoch中聚合变化大于阈值的称为heavy changers(重变化者)
-
在更新阶段,维护一些数据结构来记录每个 epoch 中的每个键的聚合。由于底层实体通常具有有限的资源,因此数据结构必须是轻量级的。在 epoch 结束时,将数据结构从更新阶段发送到恢复阶段。
-
恢复阶段在逻辑上是集中的,它分析接收到的数据结构以检索最终结果。
关键算法
- 更新阶段
- 键识别(维护了一个数据结构识别键并将其转移到恢复阶段)
- 聚合记录(记录聚合)
- 恢复阶段
- 键记录(存储被传输过来的键,这里减少了更新阶段键跟踪机制的资源使用)
- 基于等式的恢复(根据键记录和聚合记录发送过来的草图数据恢复每键聚合)
-
更新阶段算法
如何在更新阶段更新 PR-Sketch
- 过滤器部分(用于键识别)
- 一个一维数组 A f A_f Af,每个位置用一个比特(0或1)来表示x是否为一个新键
- 与一个独立的哈希函数 k f k_f kf相关联,用 h f i h_{fi} hfi表示
- 对传输过来的项来说,每次要检查通过 k f k_f kf映射后的 A f A_f Af中的位状态,识别出x是新键就将其发送到恢复阶段
- 记数部分(聚合记录)
- 一个一维数组 A c A_c Ac,每个位置用一个32位大小的计数器记录聚合
- 与一个独立的哈希函数 k c k_c kc相关联,用 h c i h_{ci} hci表示
- 对传输过来的项来说,对通过 k c k_c kc映射的位置加 v x v_x vx,每个epoch后将 A c A_c Ac发送到恢复阶段
- 转发器(连接过滤器部分和记数部分)
过滤器部分确保最多为每个键的第一个项发送一次,节省开销,但是记数部分依旧会加 v x v_x vx
-
恢复阶段算法
如何通过基于方程的恢复来恢复每个键的聚合
给定健集合 χ \chi χ和记数部分的数组 A c A_c Ac,利用哈希函数构建系数矩阵 M M M,图中在 M M M的第一列,只有 h c 1 ( x ) 和 h c 2 ( x ) h_{c1}(x)和h_{c2}(x) hc1(x)和hc2(x)有哈希值,所以值为1。最后调用过程 LeastSqareEqationSolver 来恢复每个键的聚合 V V V
LeastSqareEqationSolver是通过迭代方法解决最小二乘问题的共轭梯度求解器
- Fast PR-Sketch
这是在PR-Sketch的基础上不影响覆盖比例的情况下减少了哈希运算的改进算法,通过减少不必要的哈希操作来提高处理速度
与PR-Sketch的区别在于多增加了一个pruner,在更新记数部分之前,转发器查询 A c A_c Ac中映射位置的最小计数器值并将其转发给剪枝器,如果最小计数器值不大于预定义的阈值,则修剪器利用确定性策略将项目标记为 𝑥 的第一个。
实验结果
在相同的内存条件下,PR-Sketch在准确率、召回率、F1分数、覆盖率上都接近100%