事件流处理框架NEsper for .NET z
复合事件处理(Complex Event Processing)介绍提到了开源的Esper,NEsper 是一个事件流处理(Event Stream Processing,ESP)和复杂事件处理(Complex Event Processing,CEP)的系统,它可以监测事件流并当特定事件发生时触发某些行动——可看作是把数据库反过来,语句是固定的,而数据流进进出出。事件处理是软件行业的一个发展趋势,已有数家大厂商以及许多初创企业加入到该市场中。其常有的应用例子包括系统自动交易、BAM、RFID、高级监测系统、欺诈检测,甚至直接集成进SOA。
微软有个和SQL Server 集成的StreamInsight,但是他不是开源的,开源的NEsper 是StreamInsight之外的另一个选择。虽然StreamInsight集成在SQL Server,但是它可以不需要SQL Server的,工作起来有点像有点像数据库的倒置,Esper 也是一样的。NEsper 引擎允许应用存储查询并运行数据通过,来代替存储数据并且执行查询存储数据的工作方式。NEsper 提供两种机制来处理事件: 1、NEsper 提供了一个事件模式语言去指定基于表达式的事件模式匹配。这个模式匹配引擎是通过一个状态机来实现的。这个事件处理的方法匹配期望存在的队列或者不存在的事件或者事件的组合。它包括以时间为基础的各个事件之间的关系。 2、 NEsper 还提供事件流查询。这个样可以使事件流分析CEP应用的需求。事件流查询提供窗口、聚合、连接和分析的函数来处理事件流。这些查询是通过EPL 语句来实现的(被定制过的事件处理语言(event processing lauguage -- EPL)能够表达丰富的事件条件,相关性,尽可能的时间窗口跨度,因此在为系统开发时最小化了所需的开发精力)。EPL用于视图。视图表示需要将构造的数据放入到一个事件流中并且去驱动数据的流动。在数据流动的过程中对数据进行处理,来得到我们最后所 需要的结果。
EPL与SQL一样使用select从句和where从句。但是EPL语言使用事件流和views(视图)的概念取代了数据库中的表。与SQL语句中的表相似,EPL中的views被定义成了能为查询和过滤的数据。views有对事件进行排序,能从事件属性中得到分析数据,能够给事件分组,以及单独处理事件属性值得等功能。 下面是一个简单的EPL语句,计算了在最近30秒内股票事件流的平均价格。
select avg(price) from StockTickEvent.win:time(30 sec)
接下来的EPL语句返回了每一个特征类别再100ticks之内的平均价格。
select symbol, avg(price) as averagePrice from StockTickEvent.win:length(100) group by symbol
下面的例子连接了两个事件流。第一个事件流包含了在30分钟之内进行欺骗警告的事件。第二个事件是在最近30秒内进行退款的事件。这个事件流是通过accout number进行连接的。
select fraud.accountNumber as accntNum, fraud.warning as warn, withdraw.amount as amount,MAX(fraud.timestamp, withdraw.timestamp) as timestamp, 'withdrawlFraud' as desc from FraudWarningEvent.win:time(30 min) as fraud, WithdrawalEvent.win:time(30 sec) as withdraw where fraud.accountNumber = withdraw.accountNumber
3.事件模式匹配 模式匹配是通过状态机实现的。(NFA、DFA之类的,我是在学编译原理时候学的)。模式的表示能够包含与模式操作相结合的过滤表达。模式表达可以嵌套。 下面是5种类型的模式操作(pattern operators):
(1)控制模式查找器的创建和终结的操作符:every
(2)逻辑操作符:and、or、not
(3)时态操作符(控制事件顺序):->
(4)where-condition(用于用于事件过滤与模式查找器的终止):比如 timer:at
(5)观察者观察的事件时间:比如 timer:interval,timer:at
下面是一个简单的模式,它给在60秒内价格大于80的IBM股票一个警告:
every StockTickEvent(symbol="IBM", price>80) where timer:within(60 seconds)
每隔5分钟发出一次警告:
every timer:at(5, *, *, *, *)
每事件A发生后,接着事件B或者事件C发生:
A -> ( B or C )
一个模式,接下来事件的一个属性需要与第一个事件的该属性匹配:
every a=EventX -> every b=EventY(objectID=a.objectID)
4.模式匹配与事件流分析的结合 当一串事件流被模式进行匹配时,模式匹配的结果能被接下来的分析和处理所应用。下面的模式描述的是在10秒之内一个事件与其接下来的事件的id不同。而这个语句则进一步统计了所有这种情况下的id分组。
select a.id, count(*) from pattern [ every a=Status -> (timer:interval(10 sec) and not Status(id=a.id)] group by id 5.命名窗口(named windows) 命名窗口是一个全局数据窗口,她能够参与许多查询语句,也能被查询、被插入、被删除。命名窗口类似于数据库系统中的表(table)的概念。 接下来我们创建一个命名窗口: create window AlertNamedWindow as (origin string, priority string, alarmNumber long) 命名窗口还可以在事件达到时触发查询、修改、删除。这里举一个统计数字的例子:
on TriggerEvent select count(*) from AlertNamedWindow
https://bitbucket.org/emertechie/syslognet
http://www.cppblog.com/mysileng/archive/2012/10/11/193182.html
http://blog.csdn.net/luonanqin/article/category/1557469
事件流处理框架NEsper for .NET z的更多相关文章
- Apache流处理框架对比
分布式流处理,类似于MapReduce这样的通用计算模型,但是却要求它能够在毫秒级别或者秒级别完成响应.这些系统可以用DAG表示流处理的拓扑. Points of Interest 在比较不同系统是, ...
- 【原】javascript事件流
摘要:事件流这个东西是比较重要的,为了让自己更加理解js中的事件流,必须整理整理,梳理一下事件流的各种东西啊.本文大部分内容参考<javascript高级程序设计第三版> 先来一段书里的原 ...
- 【追寻javascript高手之路05】理解事件流
前言 新的一天又开始了,我们对今天对未来抱有很大期待,所以开始我们今天的学习吧,在此之前来点题外话,还是爱好问题. 周三的面试虽然失败,但是也是很有启迪的,比如之前我就从来没有想过爱好问题,我发现我的 ...
- Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快. 从技术上讲,这意味着我们的 ...
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
- 浅析JavaScript事件流——冒泡
一.什么是事件冒泡流 我们知道事件流指的是从页面中接受事件的顺序. 为了形象理解事件冒泡,可以想象三军主将诸葛亮,在帐内运筹帷幄,眼观六路耳听八方,这时候前方的战事情况就需要靠传令兵来传达,当第一位传 ...
- js事件流
event:事件对象,当一个事件发生的时候,和当前这个对象发生的这个事件有关的一些详细的信息都会被临时保存在一个指定地方-event对象,供我们在需要调用.event对象必须是在一个事件调用的函数里 ...
- javaScript事件(一)事件流
一.事件 事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都是事件的名字.事件是javaScript和DOM之间的桥梁.你若触发,我便执行——事件发生,调用它的处理函数 ...
- 理解DOM事件流的三个阶段
本文主要解决两个问题: 1.什么是事件流 2.DOM事件流的三个阶段 事件流之事件冒泡与事件捕获 在浏览器发展的过程中,开发团队遇到了一个问题.那就是页面中的哪一部分拥有特定的事件? 可以想象画在一张 ...
随机推荐
- 初涉GitHub
安装 访问https://help.github.com/articles/set-up-git/,选择对应OS平台.有文档参考,我的是OpenSuse. 在console中下载安装http://ww ...
- ContextMenuOpening 事件
ContextMenuOpening事件,不能在将要触发的目标ContextMenu中触发,只能包含 这个ContextMenu的父控件中触发该事件. 在ListView中,希望控制右键弹出菜单时,可 ...
- C#使用oledb方式将excel数据导入到datagridview后数据被截断为 255 个字符
问题描述:在使用oledb方式将excel数据导入到datagridview中,在datagridview单元格中的数据没有显示全,似乎只截取了数据源中的一段 解决方案:1.关于该问题,微软官方答案: ...
- iOS局部刷新
iOS: TableView如何刷新指定的cell 或section //一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithInd ...
- sae-多个file_put_contents('saestor://public/text.txt',$data);只写第一次
多个file_put_contents('saestor://public/text.txt',$data); 只执行第一个文件的写入,永久存储也只需要一次写入 如果需要用户中间缓存文件,用tmpfs ...
- smarty模板的基础搭建
1.下载smarty模板,官方即有 2.解压即可.你会得这样的目录 除了libs文件夹其余都可以删掉(不知道有啥用). 3.在当前目录下分别创建templates.templates_c.cache. ...
- R中逻辑运算
一.是否相等的判断的方法 (1)判断字符串是否相等is.null(x) (2)判断x的每个元素是否在y中出现: x %in% y (3)判断判断每个相对应的元素是否相等: x == y (4)判断近似 ...
- CDH安装Hadoop
一.安装CDH-manager 1.关闭selinux 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled 重启机器即可 2 ...
- Java集合Map接口与Map.Entry学习
Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...
- 【toplink】 位居第一的Java对象关系可持续性体系结构
TopLink,是位居第一的Java对象关系可持续性体系结构,原署WebGain公司的产品,后被Oracle收购,并重新包装为Oracle AS TopLink.TOPLink为在关系数据库表中存储 ...