bandik

 

StreamInsight 编程模型之适配器

阅读本文前,读者最好做过一个简单的StreamInsight程序。对于streamInsight入门,这里推荐:http://blogs.msdn.com/b/sqlcrd/archive/2011/03/18/streaminsight-notes-1.aspx

一、模型简介

StreamInsight是设计用来快速灵活处理数据的,这也是它作为SQL Server的一个组件的一个理由。所以StreamInsigt 的编程模型可以简单概括成三步:

1. 将信息或是源数据包装成事件。这一部分工作是由输入适配器来完成的,StreamInsight 定义各种各样的适配器来将各种各样的数据转换成事件。事件由开始时间(StartTime),结束时间(EndTime),事件消息主体(Payload)三部分组成。

2. 将事件插入到流中。流在StreamInsight中表现为一个队列,事件从队后插入,处理过的事件从队前出列。所以StreamInsight中的工作方式就像一个水库,事件插入到流中就像水流到水库里,query处理引擎分析事件,提取出数据就像水坝电站引水渠,将水放出,用于发电或是养鱼灌溉。

3. 按照定义好的查询计划查询完事件,提取出想要的数据,用输出适配器将其转换为特定的格式以便其它应用程序使用。

这是摘自StreamInsightMSDN上的一张图:

StreamInsight architectural diagram

二、从能看见的东西入手

StreamInsight安装完成之后,将会提供一整套的编程套件用于开发StreamInsight应用程序。下图是streamInsight安装路径bin目录下的文件截图。

image

去掉命名空间前缀,我们可以看出StreamInsight有Adapters, Dispatcher, Compiler, Diagnostics, Engine, Expressions, InstanceConfigManager,

ManagementService, Metadata, Observable, StreamOS 等组件。

这些组件都有各自的作用,但是在这里我们只需要关注Adapters(适配器)和 Engine。

在对象浏览器中打开Adapters 引用,可以看见所有定义的工厂类和适配器类

image

适配器类关系很复杂,可以看下面的继承关系图:

adapters

但是我们不需要完全了解这些错综复杂的关系图,这是StreamInsight 开发组的任务,现在我们只需要知道,写一个adapter  实在是一件很简单的事情,也只要三步:

1. 选定事件模型和事件携带的信息类型。事件模型有三种: 点事件,确定间隔事件,不确定间隔事件。如果只关心事件是否发生,不关注持续时间,那么就是点事件(Point event);如果事件持续时间需要被记录且知道事件的持续时间,那么就用确定间隔事件(Interval event);如果事件开始即需要被处理,且事件持续时间未知,那么就用不确定间隔时间(Edge event)。事件携带的信息类型就是一个只能拥有基础类型和特定支持类型的属性与字段的C#类,如果想定义成一个通用的类型,就选用类型化的adapter ;如果想传递的是一堆属性集,不想事先确定类型,那么就用非类型化的adapter。如果你想使用类型化的点事件输入适配器,那么就新建一个类,继承自TypedPointInputAdapter<T>, T是事先定义好的C#类型;同时你想使用非类型化的点事件输出适配器,那么再新建一个类,继承自PointOutputAdapter就可以了。同时你还要新建两个类分别继承自IInputAdapterFactory<TIntputConfig>和IOutputAdapterFactory<TOutputConfig>来实现工厂模式中的工厂。

2. 实现这两个适配器类和工厂类。这个过程需要花点时间,不过照猫画虎,从StreamInsight的示例中下载范例,照着写就可以了。

3. 用Linq写一个查询,将查询绑定到输入输出适配器中,然后就可以开始查询了。

 

查询很复杂,但是我用一句话带过了,因为不是本文的主题,希望这篇文章能对期望了解StreamInsight编程模型的人有所帮助。

posted on 2011-10-09 18:04  五洋  阅读(483)  评论(0编辑  收藏  举报

导航