惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
博客园 - 聂微东
雷峰网
雷峰网
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
博客园 - 司徒正美
爱范儿
爱范儿
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
博客园 - 【当耐特】
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
人人都是产品经理
人人都是产品经理
V
V2EX

博客园 - 拖鞋不脱

【原】Silverlight内存泄漏原因、检测及解决(Memory Leak of Silverlight:Reason、Detection and Solving) 【随】不好用的Ria Services 【原】检测是否包含特定字符串的几种方法以及性能比较 【原】StreamInsight 浅入浅出(六)—— Debugger 【原】StreamInsight 浅入浅出(五)—— LINQ 语法 【原】StreamInsight 浅入浅出(四)—— 例子 【原】StreamInsight 浅入浅出(三)—— 适配器 【原】StreamInsight 浅入浅出(二)—— 流与事件 【原】Silverlight 自定义控件模板管理 【原】小软件开发心得(二)——推广、测试 【原】小软件开发心得(一)——需求、开发 【原】豆瓣电台桌面版插件开发——搜索插件 【原】豆瓣电台桌面版——Win7任务栏支持+托盘+快捷键+历史记录 【原】Sql Server性能优化——Slide Window 【原】Sql Server性能优化——Partition(管理分区) 【随】Silverlight请求服务的缓存文件问题 【原】Sql Server性能优化——Partition(创建分区) 【原】Sql Server性能优化——Compression 【译】VS2010中C#的增强
【原】StreamInsight 浅入浅出(一)—— 基本概念
拖鞋不脱 · 2010-08-23 · via 博客园 - 拖鞋不脱

2010-08-23 20:01  拖鞋不脱  阅读(4028)  评论()    收藏  举报

最近才小小研究了下 StreamInsight 这一新鲜玩意儿,发现其中很多理念和之前接触的针对数据行的数据库操作有很大不同,鉴于相关资料实在不多,中文的更少(MSDN上的根本惨不忍读),摸索了半天也只能算是刚刚入门,写此系列文章和大家探讨。

简介

StreamInsight 是 SQL Server 2008 R2 中的新模块,它提供了复杂事件处理(CEP, Complex Event Processing)的功能。

传统的数据库针对的是数据行操作,所有信息先被实体化存储在硬盘中,然后被取出,再进行一系列的计算。而CEP则针对的是事件流的操作,事件流从入口通过适配器进入,然后经过CEP服务器中的一系列查询逻辑的处理,最终通过输出适配器分发到各个目标上。

你可以认为在处理时所有事件以及事件上承载的数据被暂时保存在内存中了,但它们在被处理时一般是不可见的,你能触碰到的只有输入、输出。也就是说当你把一堆事件流丢给StreamInsight之后,除了在输出端乖乖等待从中流出来的经过处理的事件流外,你不能在中间某个过程就单独拎出来一条事件看看它变成什么样子了。

此外,由于输入适配器、输出适配器以及CEP服务器都在异步运行,你也无法确定某一条事件在某一时刻到底处于上图的哪一个模块中,所以传统的针对程序行的调试方法用在基于StreamInsight的程序上也有些水土不服,好在StreamInsight提供了很好的Debugger工具,可以从事件的角度来审查整个过程。

应用场景

可能看到这里还是不知道 StreamInsight 是干嘛的。下面就举个例子:

网站流量监控。如果我们要统计网站一天的总流量,用传统的数据库就可以了。但如果我们需要实时统计当前在线人数并保持更新,传统数据库就会显得笨拙缓慢了。因为如果我们先把访问信息一条一条存在数据库里,再用时间条件去筛选出当前时间段内的访问人数,一来一回会很没有效率。

而 StreamInsight 则提供了一种时间窗口的机制,把所有流入的事件按照时间窗口切片统计,并随着事件的流入不断推移窗口,始终统计最新窗口下的数据。这样就保证能够最快的得到当前在线人数的信息。

那么归纳起来,StreamInsight 应该应用于有下列特点的场景:

  1. 注重结果的实时性。
  2. 高吞吐的场景,并且不关注中间结果的存储。StreamInsight 据说是设计为适合高吞吐的场景的,而中间结果,如上所述,是无法得到的。
  3. 可以被切片统计的。因为用 StreamInsight 计算得到的一般都是某一刻的数据,就像洪水时你切一刀,计算它的横截面。如果要统计一些总量,比如总流量之类的,用传统的数据库比较好。

安装与文档

StreamInsight 虽然是2008 R2上的新模块,但却是可以脱离SQL Server 2008 R2安装的,只要你有Key,不安装SQL Server 也可以安装 StreamInsight 的 Server 和 Client 端。

具体的安装介绍可以参照MSDN上的 http://msdn.microsoft.com/zh-cn/library/ee378749.aspx,很详细,比SQL Server 的安装简单很多。唯一需要注意的是在第七步,最好勾选“将当前用户添加到 StreamInsight 用户组”,否则无法利用 Connect 方法连接 StreamInsight 服务器端点。如果之后再添加的话,需要注销后再登录,麻烦一点。

而所有关于StreamInsight 的官方文档都在 http://msdn.microsoft.com/zh-cn/library/bb418434%28SQL.10%29.aspx,中文版比较糟烂,没有接触过的人乍一看会比较晕。

一个上手的好办法是下载 http://go.microsoft.com/fwlink/?LinkId=180356 上的示例,先有了感性认识,也许能比较快理解其中的原理。推荐其中的TrafficJoinQuery项目,比较简单,架构也比较清晰。

以上是本系列开篇,干货不多,但已经写的我满头大汗了,希望接下来的不会这么痛苦。各位看官,只要有一句“我看懂了”,对我就是莫大的安慰了。