数据属性
数据本身的特征:
时间序列(time series model) 数据按照其属性(实际上就是时间)的顺序前来。在这种情况下,i = t,即一个t时刻的更新为(t, ct)。此时对α的更新操作为αt(t)= ct, 且对于i. =.t,αi. (t)= αi. (t . 1)。这种模型适用于
时序数据,如某特定IP的传出的数据,或股票的定期更新数据等。
收款机模型(cash register model) 同一属性的数据相加,数据为正。在这种模型中,ct >=0。这意味着对于所有的i和t来说,αi(t)总是不小于零,而且是递增的。实际上,这种模型被认为是最常用的,例如可以用于对收款机(收款机模型由此得名),各个IP的
网络传输量,手机用户的通话时长的监控等等。
十字转门模型(turnstile model) 同一属性的数据相加,数据为正或负。在这种模型中,ct可以大于0也可以小于0。这是最通用的模型。S. Muthukrishnan[89]称其为十字转门模型起因于这种模型的功能就象地铁站的十字转门,可以用来计算有多少人到达和离开,从而得出地铁中的人数。
计算类型
对数据流数据的计算可以分为两类:基本计算和复杂计算。基本计算主要包括对点查询、范围查询和内积查询这三种查询的计算。复杂计算包括对分位数的计算、频繁项的计算以及数据挖掘等。
点查询(Point query) 返回αi(t)的值。
范围查询(Range query) 对于范围查询Q(f, t),返回
t
. αi(t)
i=f
内积(Inner product) 对于向量β,α与β的内积
α . β =Σni=1αi(t)βi
分位数(Quantile) 给定一个序号r,返回值v,并确保v在α中的真实排序r.符合以下要求:
r . εN ≤ r. ≤ r + εN
其中,ε是精度,N =Σni=1αi(t)。
G. S. Manku等[94]提供了对分位数进行一遍扫描进行近似估计的框架结构,将数据集合看成树的节点,这些节点拥有不同的权重(如节点中包含的数据个数)。认为所有的分位数的估计算法都可以被认为由三个对
节点的操作组成产生新节点(NEW) 、合并(COLLAPSE)和输出(OUTPUT)。不同的策略构成了不同类型的树。这个框架结构成为后来很多分位数估计算法的基础。
频繁项(Frequent items)有时也称Heavy hitters,即找出在数据流中频繁出现的项。在这种计算中,实际上令ct =1。这样,αi(t)中保存了截至t时刻,维值等于i的数据到达的频率。对这些数据的查询又可分为两种:
找出头k个最频繁出现的项
找出所有出现频率大于1/k的项
对频率项的研究主要集中在后一种计算[95]。
挖掘对数据流数据进行挖掘涉及更复杂的计算。对这方面的研究包括:多维分析[96],分类分析[97, 98],
聚类分析[99–102],以及其他one-pass算法[103]。
相关思路
简介
数据流处理过程中的主要难点在于如何将存储数据所花费的空间控制在一定范围之内。查询响应时间问题虽然也很重要,但相对容易解决。作为研究领域的一个热点,数据流处理问题得到了广泛的研究,出现了很多算法。
解决数据流庞大的数据量与有限的
存储空间之间的矛盾的一个思路是使用采样,另一个思路是,构造一个小的、能提供近似结果的
数据结构存放压缩的数据流数据,这个结构能存放在
存储器中。略图(Sketch)、直方图(histogram)和小波(wavelet)实际上就都是这样的
数据结构中最重要的三种。
以上方法实际上大都已用于
传统数据库领域,问题在于如何将它们应用于数据流的特殊环境。
随机采样
随机采样(Random sampling)可以通过抽取少量样本来捕捉数据集合的基本特性。一个很常见的简单方法就是一致性采样(uniform sample)。作为一个备选的采样方法分层采样(strati.ed sampling)可以减少数据的不均匀分布所带来的误差。不过,对于复杂的分析,普通的采样算法还是需要太大的空间。
对于数据流的一些特殊计算,已经出现了一些有趣的采样算法。粘采样(Sticky sampling)[95]用于频繁项(frequent items)的计算。粘采样使用的方法是,在内存中存放二元组(i,f)所构成的集合S,对于每到来的一个数据,如果其键i已经存在于S,则对应的f加1;否则,以1 r 的概率进行采样,如果该项被选中,在S中增加一组(i,1);每过一段时间,对S中的组进行一遍扫描,对其中的值进行更新。然后增加r的值;结束(或用户要求结果)时,输出所有f.(s-e)N的组。
P. Gibbons提出的distinct sampling[104]用于distinct counting ,即找出数据流中不同值的个数。它使用哈希(hash )函数对每一个到来的不同值以2.(i+1)的概率映射到级别i上;如果i ≥内存级别L(L的初始值为0),将其加入内存,否则抛弃;内存满时,将内存中级别为L的值删除,并将L加1;最终对distinct count的估计为内存中不同的值乘以2L。distinct counting是数据库处理中的一个老问题,这种算法的优点是,通过设置合适的参数,可应用于带谓词的查询(即对数据流的一个子集进行distinct counting)。
采样算法的缺点是:它们对异常数据不够敏感。而且,即使它们可以很好的应用于普通的数据流模型,但如果要用于滑动窗口模型(sliding window model)[91] 或n-of-N模型[93],还需要进行较大的修改。
构造略图
构造略图(sketching)是指使用随机映射(Random projections)将数据流投射在一个小的
存储空间内作为整个数据流的概要,这个小空间存储的概要数据称为略图,可用于近似回答特定的查询。不同的略图可用于对数据流的不同Lp范数的估算,进而这些Lp范数可用于回答其它类型的查询。如L0范数可用于估算数据流的不同值(distinct count);L1范数可用于计算分位数(quantile)和频繁项(frequent items);L2范数可用于估算自连接的长度等等。
略图的概念最早由N. Alon在[105]中提出,从此不断涌现出各种略图及其构造算法。
N. Alon 在[105]中提出的随机略图构造(randomized steching)可以用于对不同Lp范数的估算,最多需要O(n 1. lg n)的空间。该文更重要的贡献在于,它还可以以O(log n + log t)的空间需求估算L2。它的主要思路是,使用哈希函数,将数据属性的域D中的每一个元素一致地随机映射到zi ∈ {.1+ 1}上,令随机变量X = .i αizi,X2就可作为对L2范数的估计。
p1
S. Guha 等[88]提出的分位数略图(quantile sketch) 保持一组形如(vi,gi, Δi)的
数据结构,rmax(vi) 和rmin(vi)分别是vi可能的排位的最大和最小值。对于i>j 满足:
vi >vj
gi = rmin(vi) . rmin(vi . 1)
Δi = rmax(vi) . rmin(vi)
随着数据的到来,对此略图进行相应的更新操作,使估算保持在一定的精度之内。X. Lin等[93]对于这个问题做出了更形式化的描述。
若令AS为一个从[1..n]中提取的随机集合,每一个元素被提取的概率为1/2。A. Gilbert 等[106]构造若干个AS,将每个集合中元素值的和称为随机和(random sum)。多个随机和构成一个略图。对αi的估算为
2E(||AS|| |αi ∈ AS) . ||A||, 其中||A||为数据流中所有数的和。因此,这种略图可用于估算点查询的结果。使用多个这样的略图,可用于估算范围查询、分位数查询等。略图技术实际上是空间和精度相权衡的结果。为保证点查询结果的误差小于εN, 上述略图需要的空间通常是以ε.2作为系数的。与此相比较,G. Cormode 等提出的计数-最小略图(Count-Min Sketch )[19]只需要ε.1系数的空间。其思路也比较简单,使用若干个哈希函数将分别数据流投射到多个小的略图上,回答点查询时,每个略图分别作答,并选择值最小的作为答案。以点查询为基础,计数-最小略图可以用于其它各种查询和复杂计算。计数-最小略图并不计算Lp范数,而是直接计算出点查询的结果,这是它的时空效率比其它略图高的原因之一。
直方图
直方图(histogram)有两个含义:一个是普通意义上的直方图,是一种用于显示近似统计的视觉手段;另外,它还是一种捕捉数据的近似分布的
数据结构/方法。作为后者出现时时,直方图是这样构造的:将数据按其属性分到多个不相交的子集(称为桶)并用某种统一的方式近似表示桶中的值[107]。
直方图方法主要用于信号处理、统计、图像处理、计算机视觉和数据库。在数据库领域,直方图原先主要用于选择性估计(selectivity estimation),用于选择查询优化和近似查询处理。直方图是一种最简单、最灵活的近似处理方法,同时也是最有效的一种。只要解决好
数据更新问题,就可以将原有的直方图运用到数据流处理中。这类根据新的数据自动调节的直方图被称为动态(或自适应/自调节)直方图。
L. Fu等[108]提出的直方图主要用于中值函数(Median )和其他分位数函数的计算,可用于近似计算,也可用于精确查询。它通过确定性分桶(Deterministic Bucketing )和随机分桶(Randomized Bucketing )技术,构造多个不同精度的桶(buckets),然后将输入数据逐级分到这些桶中,从而完成了动态直方图的构造。
由于将静态直方图直接应用到数据流处理比较困难。S. Guha等[88]虽然可以动态地构造近最优的V-optimal 直方图,但只能应用于
时间序列模型(time series model) 下的数据流。
一个常采用的方法是将整个算法分为两步:首先构造一个数据流数据的略图;然后从这个略图中构造合适的直方图。这种方法可以利用略图数据易于更新的特点,又能实现直方图的动态化。N. Thaper等[109]首先是构造一个近似反映数据流数据的略图,利用略图的优良的更新性能来实现数据的更新,然后从这个略图中导出一个直方图来实现对数据流数据的近似。由于从略图中导出最佳的直方图是一个
NP-hard问题,作者提供了一个启发式算法(贪婪算法)来搜索一个较佳的直方图。
A. Gilbert等[110]构造了一个概要的
数据结构,该结构使用一组与文献[106]中类似的随机和结构来保存不同粒度级别的dyadic interval的值。随后,将不同粒度级别的dyadic interval([111])从大到小地加入所要构造的直方图中,这样就将近似误差降到最低(求精)。
A. Gilbert等在文献[112]中主要考虑的是如何降低对数据流中每个输入数据的处理复杂度。他们先将输入数据转化为小波系数(利用小波系数是信号与基向量的内积),然后采用了与文献[110]类似的dyadic interval处理方法。略图与直方图有很密切的联系,从某种方面来说,可以认为直方图是略图的一种特殊情况。
小波变换
小波变换(wavelet transformation)常用于生成数据的概要信息。这是因为通常小波系数只有很少一部分是重要的,大部分系数或者值很小,或者本身不重要。所以,如果忽略数据经过小波变换后生成的不重要系数,就可以使用很少的空间完成对原数据的近似。
Y. Matias等首先针对数据流数据构造一个直方图,使用小波对其进行模拟。随后保留若干最重要的小波系数实现对直方图的模拟。当新的数据出现时,通过对这些小波系数进行更新以实现直方图的更新。
文献提出的实际上是一种直方图方法,只不过使用了小波变换。A. Gilbert等指出小波变换可以认为是信号与一组正交的长度为N的向量集合所作的内积,因此构造一组数据流数据的略图,由于略图可以相当容易和准确地计算信号与一组向量的内积,则可以从略图计算出小波系数,从而用于点查询和范围查询的估计。
新动向
研究人员对数据流处理的研究不断深入,我们认为出现了以下新的动向:
未来略图
引入更多的统计
技术来构造略图
G. Cormode等主要处理对频繁项的计算。它以前人的主项(majority item ) 算法([116, 117])为基础,使用了error-correcting codes来处理问题。如数据的每一位设立一个计数器,再根据这些计数器的计数结果来推断频繁项集合。
Y. Tao等[118]实质上是对Probabilistic counting (已经广泛地用于数据库领域的distinct counting)在数据流处理的一种应用。
扩展略图
对略图进行扩展,以处理更复杂的查询需求
Lin等在文献[93]中构造了一个复杂的略图体系,可用于滑动窗口模型(sliding window model )和n-of-N模型的分位数估计,这是简单略图难以做到的。
在滑动窗口模型下,文献[93]将数据按时间顺序分为多个桶,在每个桶中建立略图(精度比要求的高),然后查询时再将这些略图合并(merge),其中对最后一个桶可能需要进行提升(lift )操作。维护时只删除过期的桶,增加新的桶。
在n-of-N model中,文献[93]将数据按EH Partitioning技术分为多个大小不同的桶,在每个桶中建立略图(精度比要求的高),然后查询时再将其中一部分略图合并,可以保证要求的精度,其中对最后一个同可能需要进行提升。
结合时空数据
J. Sun等在文献[120]中虽然主要针对
时空数据的历史查询和预测处理。然而,文章却强调
时空数据是以数据流的形式出现的,处理中也更着重于时空数据的更新性能。
Y. Tao等[118]使用数据流的方法处理
时空数据,通过对动态的时空数据构造略图,用于分辨物体是否在多个区域间运动或静止的状态,并估算其数量。而这种问题在原先的时空处理中是很难解决的。
小说流派
网络小说数据流是新兴流派,意思是小说主角实力数据化,和网游属性栏一样的数据显示。