论文部分内容阅读
流数据无处不在,股票交易记录、网络流量、传感器网络中的数据、web日志都是其中典型的例子。此外,航天、音乐、医学等领域也存在着大量的数据流应用。在这些应用中,数据量都非常庞大,而且数据持续产生的速度很惊人。因此,对于这些数据进行查询、分析的难度也越来越大。
在传统的数据库管理系统中,往往依据查询操作的数值特性对数据进行组织,建立索引,其中可能涉及到排序等计算。然而,在数据流环境中,首先,数据实时产生且到达顺序不受应用系统限制,而且一旦流过就不能再被访问。这对于传统的索引技术来说都是极大的挑战。其次,在滑动窗口模型下,数据依次序到达,流经滑动窗口进行处理然后过期。这隐含地要求能依据时间戳对数据进行索引。采用传统的索引技术,可以有两个选择:或者分别对数值特性和时间特性进行索引,或者可以将时间戳作为数据元组的一个属性来进行统一索引。这两种方式都有各自的缺陷。
笔者提出了一种栅栏结构的索引方式,充分利用周期性持续查询的语义,将时间索引和数值索引结合起来,计算中又彼此独立。这种索引结构适用于多种聚集函数,在滑动窗口模型下能很好的处理状态的增量维护问题。值得一提的是,栅栏结构还适用于分布式环境和并行处理。
本文的主要贡献之一就是基于栅栏结构,实现了滑动窗口下的top-k和countdistinct持续监控算法。top-k查询是统计分析的重要类型,在很多在线应用中都发挥着重要的作用。传统的top-k查询算法无法适应数据流的高度动态环境,一些数据流下的算法无法实现状态的增量维护,因而导致计算复杂度很高。我们采用栅栏结构来索引数据,通过对有效元组的精确维护,在返回精确结果的前提下,空间存储最优,时间复杂度为O(logk+M2k+M2lggM+Mk logM/R),R>>k的情况下,时间复杂度近似为O(logk)。通过模拟数据集和实际数据集上的实验结果说明,该算法的时间复杂度和空间复杂度都优于其它算法。
count distinct算法也是数据流研究的一个重要问题。之前的研究都只限于收银机模型。笔者在活跃流计数的场景下,通过对于栅栏结构基本运算的重定义,成功地解决了超时检测和流计数分别实现导致系统开销过大的问题。这个工作在转盘模型下实现,证明了栅栏结构的扩展性和适应性。在线实验的结果证明,本算法完全可以用于高速链路上的超时检测和流计数。
最后本文开发了一个基于流的网络监控分析系统,用于高速链路上网络流的在线分析。系统的核心是本文开发的数据流聚集算法,还将在多聚集查询优化的工作集成到系统中,使得系统具有良好的扩展性,能应付更多用户更复杂的查询处理。