【转载】StreamInsight系列-What it is

原文链接:http://blog.joycode.com/svs/archives/2009/12/24/115826.joy


SQL Server是一套RDBMS,这个产品的功能就不多说了,现实世界中很多情况都会使用数据库作为数据的存储和分析平台,但是有些应用场景并不适合使用数据库进行分析和处理,尤其是对于处理量高、延时低的场景。目前的SQL Server中的数据是通过内存+磁盘的方式进行持久化,换句话来说,在SQL中的数据肯定会被持久,但是在制造、监控、电力、金融等领域中更多的数据可能不需要实时的进行持久化,而是需要通过这些数据进行实时监控,这是数据库的功能就会有很多限制。

Microsoft StreamInsight provides a powerful platform for developing and deploying complex event processing (CEP) applications. CEP is a technology for high-throughput, low-latency processing of event streams. Typical event stream sources include data from manufacturing applications, financial trading applications, Web analytics, or operational analytics. The StreamInsight stream processing architecture and the familiar .NET-based development platform enable developers to quickly implement robust and highly efficient event processing applications.

StreamInsight是一个框架

很多实时监控的事件处理无法使用数据库实现这些功能,因为数据的特性并不是交易行,而是事件,这时我们需要的是基于事件驱动的处理程序。StreamInsight就是这样一个框架,通过这个框架我们可以构建健壮的、高性能的事件处理程序,可以用于制造、金融、电力、互联网等对于实时数据分析要求很高的分析系统。

举个例子大家就能很好的理解了。一家汽车制造商会几条流水线对零部件组装,为了提高效率会使用很多机器人实现焊接及装配,为了提高产品合格率,每个机器人的机械臂都会有若干传感器监视焊点位置信息。传感器将感知机械臂每次运动的轨迹及焊点位置,并将信息传送给监控系统,为了提高产品质量,肯定需要监控程序观察传感器发出的信息并将信息与预先设计的指标进行匹配,这种信息处理的延时要求很高,而且吞吐量很大,10000 events/second,延时接近于0。如果事件信息与预先设计的指标发现偏差并且偏差值高于预先设置的范围,系统应该报警。这种系统的设计如果使用关系型数据库实现,性能将无法满足。StreamInsight就可以解决这种问题,事件数据通过队列的方式发送到StreamInsight组件中并存储在内存中直到满足业务规则后从输出中取出。

StreamInsight是用于处理事件的

在StreamInsight中有2类事件

  • Insert

Insert事件用于将event和payload添加到事件流中

Header
Payload

Event kind ::= INSERT

StartTime ::= datetime

EndTime ::= datetime

Field 1 … Field n as CLR types

  • CTI

CTI事件是一种特殊的事件用于指出事件的完成

Header

Event kind ::= CTI

StartTime ::= datetime

也就是说事件Insert到队列后需要添加一个CTI指出这个事件结束。

在StreamInsight中事件有3模型:

  • Point
    这种事件的特性是基于时间点的payload,例如2009-12-24 3:00:00 温度 24
  • Interval
    这种事件的特性是描述一段时间内的payload,例如 2009-12-24 3:00:00  2009-12-24 3:00:10 车流量 100
  • Edge
    这种事件的特性是在记录中没有指定结束时间,也就是说记录中事件的类型,有Start和End

我们可以通过StreamInsight输入和输出这3中类型的事件。

StreamInsight 核心是基于Event的payload的查询

在StreamInsight中的核心功能就是根据规则对事件进行处理,主要是根据payload中的字段进行汇总、计算、过滤及投影,这些功能是基于对内存中的事件队列进行LINQ的查询,当然这些查询并不一定是hard code,可以通过编码做成动态调整的。

StreamInsight不是内存数据库

有人认为StreamInsight是内存数据库,我认为这个观点不是正确的。因为StreamInsight中只是用于处理事件的而且这种事件一定是基于事件的,虽然在payload中我们不用存储事件字段,但是系统会帮我们添加时间字段辅助系统处理。内存数据库需要实现更多的功能,例如启动数据的装载,持久等,并实现CRUD功能,而StreamInsight没有。但是在一些业务场景上可以使用StreamInsight实现内存数据库的功能。

 


评论:原文作者sun.wei功力深厚,这篇StreamInsight系列博文开篇在介绍StreamInsight的同时融入了自己的理解,我想通过这篇博文一定对学习StreamInsight的读者相信会有很大的启发。
posted @ 2011-07-16 22:35  StreamInsight  阅读(391)  评论(2编辑  收藏  举报