【编译】StreamInsight简介

原文链接:http://blogs.msdn.com/b/masimms/archive/2010/07/23/secundus-posting-of-sorts.aspx

原文作者:Mark Simms,微软SQL客户咨询小组高级程序经理。

(由于原文有一些过时的且不相关的话,我做了一些删节和重写,固将标题定为了“编译”,而不是“翻译”,两者的区别可以见这里。)

 


有段时间没有在这里发表新文章了(好吧,坦白说是很长时间没发表了)。自从09年开始,我在微软的角色就有了一些微妙的转变。我将坐镇SQL客户咨询小组(SQL Customer Advisory Team),负责利用StreamInsight技术帮助客户和合作伙伴更好地构建大规模的事件驱动应用。

随着StreamInsight作为SQL Server 2008 R2的子集发布,我终于在结束几个惊人的项目之后,空出了足够的时间来谈一谈我们在这个产品中学到的最佳实践,同时也希望分享一些有价值的信息来帮助大家更好地构建自己的StreamInsight应用。

好吧,让我们一起来看看StreamInsight 吧!

什么是StreamInsight?

熟悉我或者听过我演讲的朋友都知道我爱打比方(虽然有的时候比方的很烂),这里也不例外。注意:我这里举的例子都是人为设定的,文章后面我们会谈到一些真实的场景。

假如我们要回答这么一个问题——“有多少量红色轿车停在你办公室后面的停车场里?”,那么利用物理方式和关系数据库的方式可以这么回答:

物理方式

关系数据库

  • 带着一个本子一支笔走到停车场;
  • 步行穿过停车场,查看每一辆车;
  • 如果该车是客车而且是红色,在纸上作个记号;
  • 统计所有的记号数量,回去办公室。
  • 连接目标数据库;
  • 执行SQL命令,如SELECT COUNT(*) FROM ParkingLot WHERE type = ‘AUTO’ AND color = ‘RED’

非常直接的做法!我们可以继续思考怎么优化这个查询,例如先把所有的车都停在停车场的一边,然后根据颜色来安排停靠(在关系数据库中,我们可以考虑增加一个索引)。可以看出对于此类问题,我们已经有了一个不错的关系数据库平台。然而,还有一类问题关系数据库引擎并没有能够很好的进行处理。

假设现在的问题变为——“在最近的20分钟内,高速公路上有多少量车经过了你的办公室?”。类似地,我们分别采用物理方式和纯粹的关系数据库的方式来进行回答,那么结果会是:

物理方式

关系数据库

  • 把高速公路上的车拖到一个候车区;
  • 将每辆车扣留至少20分钟,并记录谁可以允许通过;
  • 在每次有车进入或者离开时统计车辆数目。
  • 将进入车辆记录放入数据库;
  • 不断执行如下的SQL命令,如SELECT COUNT(*) FROM ParkingLot WHERE type = ‘AUTO’ AND color = ‘RED’
  • 使用一个单独的作业周期性的将车辆(记录)移除数据库。

可以看出,上面的两个做法都不是回答这个问题的最佳办法。StreamInsight正好填补了这个空白——它通过提供流处理平台可以有效的处理大规模流数据。同样的问题用StreamInsight来解决会是这样:

物理方式

StreamInsight 

  • 站在路旁边,统计经过的车的数量。
  • 使用下面的LINQ语句来设置一个持续不断运行的查询;
  • 使用Streaminsight引擎将该查询连接到不断进入的车流事件上。
var x = from e in cars 
        where e.Type == "AUTO" && e.Color == "RED"
        select e; 
var count = from e in x.HoppingWindow(
                TimeSpan.FromMinutes(2),
                TimeSpan.FromSeconds(30),
                HoppingWindowOutputPolicy.ClipToWindowEnd)
            select new 
            { 
                count = e.Count()
            };

上面的LINQ语句是一个StreamInsight查询,它的操作过程如下:

  • 查看包含待观察车辆的流数据(cars流);
  • 过滤掉任何不是AUTO(机动车)或不是RED(红色)车辆的事件;
  • 定义窗口时间查看最近的2分钟事件,并将窗口以30秒的间隔向前移动;
  • 在每一个窗口中,统计事件总数(也就是统计最近2分钟内的红色汽车数量),并报告总计。

额,等等,想知道LINQ是怎么神奇的解决了传输中的数据问题的吗?哈哈,这就是STreamInsight的神奇之处。它提供的平台包括了:

  • 内存中的流处理引擎;
  • 连接流数据源(适配器)进行持续不断的查询;
  • 询问临时数据和关联数据(某个时间内的窗口,某个时间内的关联关系),包括动态的链接和组合查询;
  • 针对查询(queries),操作符(operators),聚合(aggregates)和数据联通性(data connectivity)的扩展。

StreamInsight有什么用?

StreamInsight是设计用来帮助用户开发强有力的大规模事件处理应用。这也决定了它可以适用于许多不同的工业领域,例如:

制造业

  • 车间楼层传感器的过程分析;
  • 针对异常、趋向等发生时的设备控制器响应;

金融服务

  • 股票和新闻定制;
  • 算法交易;

操作分析

  • 流量数据、行为分析;
  • 用户体验质量分析;

公用事业

  • 针对成千上万电表的智能电网分析;
  • 识别趋向、使用模式和潜在出错状态;

基本上来说,StreamInsight适用于那些具有大量流数据且需要较低滞后时间得到处理结果的应用。

听起来不错,怎么着手?

想要着手StreamInsight,你需要熟悉C#和LINQ,并且要有Visual Studio(2008或2010)。一旦把这些准备好,你就可以开始了:

  1. Microsoft 下载中心下载安装StreamInsight 当前最新版本1.2;
    1. 64位安装文件  和  64位客户端安装文件
    2. 32位安装文件 和  32位客户端安装文件
    注:客户端文件(Microsoft® StreamInsight Client package)仅仅安装Microsoft® StreamInsight的一个子集,它仅允许用户编写客户端相关的功能:连接已有的StreamInsight服务器、管理查询和使用调试工具。它不支持允许内置服务器或创建StreamInsight服务。此外,安装Microsoft® StreamInsight Client不需要产品密钥。
  2. 从codeplex下载参考样例到本机硬盘;
    1. 由于codeplex下载下来的文件(网上下载的文件大多如此)默认情况下是不可信的,你需要首先“解除锁定”,然后再解压文件夹;
    2. 右击StreamInsightProductTeamSamples压缩包,点击“属性”,你会看到:
    3. 点击“解除锁定”。
  3. 从Visual Studio中打开Applications\TrafficJoinQuery\TrafficJoinQuery.sln解决方案;
  4. TrafficJoinQuery应用使用模拟的交通数据(就是解决方案包含的那两个.csv文件),执行CreateQueryTemplate函数(在Program.cs文件中)中列出的查询;
  5. 按下F5键调试,应用程序会在两个模拟数据流上执行查询,运行结果类似如下:

    Creating CEP Server
    Creating CEP Application
    Registering LINQ query template
    Registering Adapter Factories
    Registering bound query
    Start query
    INSERT    6/25/2009 12:00:00 AM +00:00    1    1001    18   
    INSERT    6/25/2009 12:00:00 AM +00:00    1    1003    19   

    -- snip --

    NSERT    6/25/2009 12:18:20 AM +00:00    2    1004    21   
    INSERT    6/25/2009 12:18:20 AM +00:00    2    1005    19   
    INSERT    6/25/2009 12:18:20 AM +00:00    2    1006    21   
    INSERT    6/25/2009 12:18:20 AM +00:00    3    1007    22   
    CTI    12/31/9999 11:59:59 PM +00:00

    Diagnostic View for 'cep:/Server/EventManager':
    AllEventsCount: 18
    AllEventsMemory: 417792
    Diagnostic View for 'cep:/Server/PlanManager':

    -- snip --

    QueryTotalIncomingEventCount: 497
    QueryTotalConsumedEventCount: 497
    QueryTotalProducedEventCount: 192
    QueryTotalOutgoingEventCount: 192

    -- snip --

    以上显示了StreamInsight引擎启动、激活查询、输出结果和最后的导出诊断信息的全部过程。

还有什么学习资料?

接下去我会发表一系列的博文来讨论如何构建StreamInsight应用的方方面面,包括适配器开发,查询编写,托管StreamInsight,连接到其他技术平台(如AppFabric Cache)等等。现在我先给出一些非常不错的参考链接供您参考学习:

posted @ 2011-07-21 14:56  StreamInsight  阅读(1876)  评论(2编辑  收藏  举报