阅读本文前,读者最好做过一个简单的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安装完成之后,将会提供一整套的编程套件用于开发StreamInsight应用程序。下图是streamInsight安装路径bin目录下的文件截图。

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

ManagementService, Metadata, Observable, StreamOS 等组件。

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

在对象浏览器中打开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编程模型的人有所帮助。

转载于:https://www.cnblogs.com/bandik/archive/2011/10/09/2204018.html

StreamInsight 编程模型之适配器相关推荐

  1. ibm mq 编程_IBM SOA编程模型简介

    ibm mq 编程 SOA编程模型系列 对于任何一个程序员,尤其是非程序员,要有效地掌握和应用令人震惊的软件技术,实践,工具和平台,变得越来越困难. 但是,如果要成功进行业务流程转型,则大量的非程序员 ...

  2. CUDA刷新器:CUDA编程模型

    CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...

  3. C语言网络编程:TCP编程模型

    编程模型 TCP编程模型如下 TCP服务器的工作过程如下: 服务器创建一个专门的"文件描述符"来监听来自客户端的"三次握手",然后建立链接 链接建立成功后,服务 ...

  4. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll、Epoll模型处理长连接性能比较

    在<朴素.Select.Poll和Epoll网络编程模型实现和分析--模型比较>一文中,我们分析了各种模型在处理短连接时的能力.本文我们将讨论处理长连接时各个模型的性能.(转载请指明出于b ...

  5. 朴素、Select、Poll和Epoll网络编程模型实现和分析——模型比较

    经过之前四篇博文的介绍,可以大致清楚各种模型的编程步骤.现在我们来回顾下各种模型(转载请指明出于breaksoftware的csdn博客) 模型编程步骤对比 <朴素.Select.Poll和Ep ...

  6. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Epoll模型

    在阅读完<朴素.Select.Poll和Epoll网络编程模型实现和分析--Select模型>和<朴素.Select.Poll和Epoll网络编程模型实现和分析--Poll模型> ...

  7. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll模型

    在<朴素.Select.Poll和Epoll网络编程模型实现和分析--Select模型>中,我们分析了它只能支持1024个连接同时处理的原因.但是在有些需要同时处理更多连接的情况下,102 ...

  8. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Select模型

    在<朴素.Select.Poll和Epoll网络编程模型实现和分析--朴素模型>中我们分析了朴素模型的一个缺陷--一次只能处理一个连接.本文介绍的Select模型则可以解决这个问题.(转载 ...

  9. 朴素、Select、Poll和Epoll网络编程模型实现和分析——朴素模型

    做Linux网络开发,一般绕不开标题中几种网络编程模型.网上已有很多写的不错的分析文章,它们的基本论点是差不多的.但是我觉得他们讲的还不够详细,在一些关键论点上缺乏数据支持.所以我决定好好研究这几个模 ...

  10. 异步编程模型--使用 IAsyncResult 对象

    先推荐阅读下面的资料: MSDN:异步编程设计模式 IBM developerworks: 使用异步 I/O 大大提高应用程序的性能 参考博文: 1.正确使用异步操作 2.Lab:体会ASP.NET异 ...

最新文章

  1. 网易有毛病,我的账号被锁了,去解锁时候又几把提示不成功,浪费劳资感情啊
  2. c++输出数据的二进制表示形式
  3. 构造函数实现窗体间传值
  4. 利用task和电平敏感的always快设计经比较后重组信号的组合逻辑
  5. spring学习(36):注入简单类型
  6. 2016年10月计算机网络技术,2016年10月自考计算机网络技术练习题及答案(2)
  7. for循环中let,var 的经典面试题:for循环中 console.log(i)详解
  8. Spring MVC 实践 - Component
  9. java socket 缓冲_关于socket的发送缓冲区网上有诸多的讨论,这里个人小结一下,希望对以后有些帮助。首先,看下面一段代码,...
  10. java长连接心跳包_socket中的短连接与长连接,心跳包示例详解
  11. Apache Flink 中文社区视频号上线!和大咖们线上见面~
  12. 机械硬盘的文件系统突然变成RAW了,如何保住盘上数据?
  13. python科学计算-01程序包和API简介
  14. VC++实现内存映射文件(附源码)
  15. mybatis传入多个参数
  16. 设计模式——Revealing Module(揭示模块)模式
  17. 无法在linux下启用ttysac0串口 终端只打印信息,启动出现mmc0: error -110 whilst initialising SD card该如何解决?...
  18. python输入一个数组、以逗号为间隔_python-使用间隔掩码numpy数组
  19. python怎么搜索文献_python论文参考文献有哪些
  20. HDU - 3194 Median

热门文章

  1. iOS如何优雅的处理“回调地狱Callback hell”(一)——使用PromiseKit
  2. Wowza Media Server 入门系列--Wowza Media Server 安装及演示
  3. CIO:IT优化刻不容缓
  4. html+css基础-4-html标签、Doctype、iframe,table布局
  5. c语言 乱序字符,C语言中两种结构体成员初始化方式:顺序和乱序
  6. android编译log中_安卓编译 Jack server 错误问题解决办法
  7. 光源发散角怎么设置_Three.js 中的光源
  8. mysql 只显示箭头_为什么在DOS窗口中使用MySQL时,输入命令后只出现一个箭头,输入什么内容都是这样?...
  9. 小程序仿微视_争抢流量!腾讯微视也要开始搞短视频带货
  10. 微型计算机工作最小时间单位,2010~2011学年第1学期微机原理2试卷A(答案)