1. 数据流的查询有哪些类型?有哪些处理策略?
2. 对大数据流进行抽样,带来哪些问题?
3. 如何有效地过滤某些数据?
4. 对独立(不同)元素的个数如何统计?
5. 矩估计(对问题4的扩展)
6. 对窗口内二进制1的个数如何统计?
1. 数据流的查询有哪些类型?有哪些处理策略?
1)固定查询:对前来的数据一直在执行查询和计算
2)即时查询ad hoc:仅当一个查询操作提交时,才对数据进行计算查询
内存大小的限制,是数据流处理考虑的主要因素。因此,数据流处理算法的两个策略:
1)计算问题的近似解,比精确解高效的多
2)hash技术,对求解近似解非常有帮助
2. 对大数据流进行抽样,带来哪些问题?
数据流巨大时,只需随机抽样一部分数据,进行存储,并供ad hoc分析使用。
抽样统计带来的问题:
统计用户的重复查询问题:
抽样时,涉及概率的乘法定理要谨慎处理,因为抽样后的概率运行可能与全集下的概率运算结果完全不同。
解决方法:
对用户进行抽样,而不是对每个用户的数据进行抽样。
一般性的抽样问题:
将某些字段看成关键字组合,并利用hash的a/b策略,即b个桶,a作为阈值,保留小于a的采样值。
新问题: 新用户出现,每个用户的样本规模不断变大,以至于抽样的数据都超出了分配的空间,如何处理?
那么就设定新的阈值a-1,即降低阈值,并将hash值等于a的数据删除,这样可以提高效率,节省空间。
3. 如何有效地过滤某些数据?
过滤指定规则的数据。主要是指Bloom过滤器。
Bloom过滤器: 组成部分:
n位的数组,k个hash函数,m个待过滤的元素
则bloom过滤器的假阳的概率是:
(1 - e^(-km/n) )^k
推导: 元素不能落入指定的位置的概率是 (n - 1) / n.
那么m个元素,hash了k次,仍未落入指定位置的概率是( 1 - 1/n)^(km),即 当n较大时,指定位置为0的概率近似于e^(-km/n),为1的概率为1- e^(-km/n)。而假阳的概率,是k个hash函数产生的k个指定位置, 都为1的概率: (1 - e^(-km/n) )^k
4. 对独立(不同)元素的个数如何统计?
统计某时段内,出现的不同元素的数目。
一种方案是内存中保存当前所有元素列表,可以用hash或搜索树来保存和检索数据。问题:元素数目可能大到无法全部放入内存。
解决方案:
1)使用多台机器,并行处理
2)FM(Flajolet-Martin)算法,统计某元素hash后尾部0的个数,若其hash值尾部0的个数至少为r的概率是2^(-r),而任何元素hash值尾部都不满足至少有r个0的概率为(1 - 2^(-r))^m。 然后估计出所有元素的个数m:2^R, 最大尾长为R
优化策略: 多个hash函数,分组:组内平均值 + 组件中值滤波(取中位数)
5. 矩估计(对问题4的扩展)
一个元素出现的次数mi, 矩的概念就是 求和 mi ^ k
k=0,即不同元素的数目
k=1,所有元素的数目,mi就是每种元素出现的频率
k=2,就是度量元素分布的非均匀性,也称为奇异数
问题:当数据流过大,内存中无法存下时,如何估计这些数字特征那?
如何估计二阶矩?AMS算法 即Alon-Matias-Szegedy algorithm
只需统计一部分元素出现的频率X.Value,并估计n*(2 * X.Value - 1), 并这部分元素的估计求均值。
推导过程?或者说为什么是 n * (2 * X.Value - 1) ?
AMS算法的结果是二阶矩的无偏估计。 V^2 - (V-1)^2 = 2*V - 1
更高阶的那?
k = 3,选取
V^3 - (V-1)^3
6. 对窗口内二进制1的个数如何统计?
如果对N位的二进制数据,统计1的个数,那么精确统计1的个数就需要只是O(N)的开销。
当N大于内存的容量时,那么快速的求解这个问题,可以采用求近似解的策略。
DGIM算法:
1)维护一个数据结构:将二进制分组,每组中1的个数是2的次幂,从右至左组的都是非递减的,只须记录每组的两端的位置即可。类似于 等比数列
2)这样组的个数有O(log(2, N)),记录组的一端位置,所需空间log(2, N)位。则统计整个窗口所占内存为O( (log(2, N)) ^ 2 )
3)求解:估计1的个数:比较每组两端的位置与k的大小,找到k值所在的组b,累加之前组的大小及组b的一半大小。
相关问题:
1)组的数目的影响? 组的数目,决定了DGIM算法所占的内存
2)统计的错误率是多少?分为两种情况:估计值大于实际值;实际值大于估计值。
3)如何维护这个DGIM数据结构?当新的位来时,首先查看窗口的大小N,当当前位置索引减去N大于最旧组的位置索引,将最旧的桶去掉;若来的位是0,不需然后改变;若是1,那么就需执行合并的策略。
4)具有相同大小的组的个数是r-1,或r时,其与错误率的关系:错误率的上限是1/(r-1),如何r选择足够大,错误率就会减少。
采用等比的分组方式与等分的分组方式的差别?
等比分组,能比较容易地确定错误率的上界。