作为SQL Server 2008 R2一个主要的部分,StreamInsight提供了复杂事件处理(Complex Event Processing,CEP)功能。它处理的对象是例如证券交易行情、物联网、医疗监护等数量巨大并且需要实时处理的复杂事件。
从体系结构上看,StreamInsight类似于一个基于内存的数据库系统。它通过输入适配器接收事件并保存在内存里面。然后通过LINQ对输入事件进行处理得到结果,用于进一步的处理。StreamInsight的LINQ扩展提供了丰富的功能,包括过滤、分组、汇总、连接等常见的SQL功能,和窗口切分这样比较特殊的功能。
窗口切分是CEP系统和一般DBMS不太一样的一个地方。它用于把一个无限长的输入流转换成为一个一个有限的集合,从而可以方便的进行处理。StreamInsight提供多种窗口切分支持,以适应不同的应用场景需要。例如下面的LINQ查询代码采用了数量为2的计数窗口进行切分,计算后面一个事件相对于前面一个事件的变化值。
var deltas = from e in inputstream
group e by e.DeviceId into eachGroup
from win in eachGroup.CountByStartTimeWindow(2, CountWindowOutputPolicy.PointAlignToWindowEnd)
select new { ValueDelta = win.Delta(e => e.Value), SourceID = eachGroup.Key };
此外,StreamInsight还提供了事件流程调试器,它对于了解事件引擎的内部处理流程、开发和调试应用都有很大的帮助。
和其他微软产品一样,StreamInsight虽然功能很复杂很强大,但是非常容易使用。你可以按照下面的步骤很快把它提供的例子运行起来,开始你的CEP应用之旅。
更多的知识,请参考Microsoft StreamInsight程序组里面提供的文档或者查阅无联网。
参考资料
如果你想进一步了解SQL Server 2008 R2的一些新功能,请继续关注SQL CRD的博客。
软件工程师 苏宏谋