StreamInsight 浅入浅出(一)—— 基本概念

StreamInsight 是 SQL Server 2008 R2 中的新模块,它提供了复杂事件处理(CEP, Complex Event Processing)的功能。

传统的数据库针对的是数据行操作,所有信息先被实体化存储在硬盘中,然后被取出,再进行一系列的计算。而CEP则针对的是事件流的操作,事件流从入口通过适配器进入,然后经过CEP服务器中的一系列查询逻辑的处理,最终通过输出适配器分发到各个目标上。

你可以认为在处理时所有事件以及事件上承载的数据被暂时保存在内存中了,但它们在被处理时一般是不可见的,你能触碰到的只有输入、输出。也就是说当你把一堆事件流丢给StreamInsight之后,除了在输出端乖乖等待从中流出来的经过处理的事件流外,你不能在中间某个过程就单独拎出来一条事件看看它变成什么样子了。

此外,由于输入适配器、输出适配器以及CEP服务器都在异步运行,你也无法确定某一条事件在某一时刻到底处于上图的哪一个模块中,所以传统的针对程序行的调试方法用在基于StreamInsight的程序上也有些水土不服,好在StreamInsight提供了很好的Debugger工具,可以从事件的角度来审查整个过程。

应用场景

可能看到这里还是不知道 StreamInsight 是干嘛的。下面就举个例子:

网站流量监控。如果我们要统计网站一天的总流量,用传统的数据库就可以了。但如果我们需要实时统计当前在线人数并保持更新,传统数据库就会显得笨拙缓慢了。因为如果我们先把访问信息一条一条存在数据库里,再用时间条件去筛选出当前时间段内的访问人数,一来一回会很没有效率。

而 StreamInsight 则提供了一种时间窗口的机制,把所有流入的事件按照时间窗口切片统计,并随着事件的流入不断推移窗口,始终统计最新窗口下的数据。这样就保证能够最快的得到当前在线人数的信息。

那么归纳起来,StreamInsight 应该应用于有下列特点的场景:

  1. 注重结果的实时性。

  2. 高吞吐的场景,并且不关注中间结果的存储。StreamInsight 据说是设计为适合高吞吐的场景的,而中间结果,如上所述,是无法得到的。

  3. 可以被切片统计的。因为用 StreamInsight 计算得到的一般都是某一刻的数据,就像洪水时你切一刀,计算它的横截面。如果要统计一些总量,比如总流量之类的,用传统的数据库比较好。

你可能感兴趣的:(StreamInsight 浅入浅出(一)—— 基本概念)