流数据处理的应用
在我们日常生产环境中有这一样的一类数据密集型应用,数据快速到达,转瞬即逝,需要及时进行处理。如:网络监控、电信数据管理、传感器网络、量化交易等。
流式处理和批处理的区别
流式处理(Stream Processing)是针对批处理(Batch Processing)来讲的,即它们是两种截然不同的数据处理模式,具有不同的应用场合,不同的特点。
- 对于批处理来讲,数据被不断地采集保存到数据库中,然后进行分析处理。
- 批处理适用于大数据进行处理的场合。需要等到整个分析处理任务完成,才能获得最终结果。整个过程耗时比较长,获得最终分析处理结果延迟较大。如传统的关系型数据库系统、Hadoop和Spark等大数据处理平台等。
- 在流式数据处理模式里,数据持续到达,系统及时处理新到达的数据,并不断产生输出。
- 流式数据处理模式强调数据处理的速度,部分原因在于数据产生的速度很快,需要及时处理掉。
- 流式处理系统能对新到达的数据进行及时的处理,所以它能够给决策者提供最新的事物发展变化的趋势,以便对突发事件进行及时的响应,调整应对措施。
流数据模型
为了对快速持续到达的数据流进行有效的处理,支持上层应用程序的要求,需要新的数据模型和查询处理方法。
流数据模型的特点:
- 数据流的数据元素持续到达。
- 数据流处理系统不能控制数据元素到达的顺序。
- 数据流有可能是无限的,或者说数据流的大小是无限大。
- 数据流的一个数据元素被处理后,可以丢弃或者归档,一般不容易再次提取,除非目前该数据元素还在内存中。
流数据处理系统的查询处理
- 内存需要(Memory Requirement) - 大部分数据流是无法预知最终大小的;在这种情况下,如果要在数据流上计算一个准确的结果(如累计数),需要的存储空间将无法预知,有可能超过可用的内存。为了达到高速的处理数据,流数据处理一般优先采用基于内存的数据处理算法,无须存取磁盘。
-
近似查询结果(Approximate Query Answering) - 在内存容量有限的情况下,获得一个准确的结果是不太可能的。好在很多的应用场合我们无须一个准确的答案。在流数据处理领域,我们为数据流上的查询研究了一系列的数据缩减或者摘要构建技术,如:
数据轮廓
,随机采样
,真方图
,小波变换
等。 - 滑动窗口(Sliding Window) - 从数据流上产生近似查询结果的一种技术。滑动窗口上的查询处理指的是在数据的最近数据元素(记录)上执行查询,而不是在数据流的所有历史记录上执行查询。滑动窗口强调最近的数据,即最近的数据权重更高。
-
查询数据流的历史数据(Referencing Past Data) - 在标准的流数据处理模式中,当某个数据元素处理结束后,将无法再访问到。这就意味某些数据被丢弃以后,用户发起即席查询(Ad-Hoc Query,是一种“on-the-fly”的特殊查询。它在每一个查询操作被执行之前,查询的目标对象是不明确的。),将无法获得准确的结果。
对于这个问题,最简单的办法即规定即席查询只能参考它提交以后到达的新数据,之前的历史数据直接忽略掉。
还有一种稍微复杂一些的办法,它允许新提交的即席查询参考历史数据。这里所说的历史数据只是一个摘要,或者聚集汇总。这些数据摘要有助于为未来的即席查询计算一个近似的结果。 - 多查询优化与查询计划的适应性 - 在流数据处理系统中,大多数的查询是长时间运行的持续查询。系统同时运行大量的查询,可以通过多查询优化技术,提高查询处理的性能。
-
堵塞操作(Blocking Operator) - 是指该操作需要看到所有的输入数据以后才能开始产生输出结果。排序、Sum、Count、Min、Max、Avg等聚集操作都是堵塞操作,因为只有看到所有的输入数据,才能开始产生输出。让流数据处理系统有效的处理排序、聚集等操作是一个严峻的挑战。 其中有一种称为标点(Punctuation,标点就是一个断言,它规定在剩下的数据流数据中,什么数据可出现,什么数据不可出现。)的技术,来帮助其操作做出决策。
比如:一个数据流中有一个字段daynum。如果数据流里有一个标点,标点的断言是“daynum >= 10",它表示在数据里,剩下的数据元素的daynum属性都大于10.那么遇到这样的标点以后,针对daynum进行分组聚集的操作就可以把关于daynum小于10的聚集结果输出来。 - 数据流里的时间截(Timestamps in Stream)