复杂事件处理引擎—Esper参考(事件部分)
声明:Esper官方未提供中文文档,以后更新的大部分内容,均来自官方文档。本人英语小白一枚,翻译内容仅供参考。有些翻译确实不忍直视,君可略过。
(有人可能会说,翻译的不好不如不翻,可能会误人子弟;不过我认为,在学习的过程中,尤其是初期可以用“大概”来形容掌握的知识程度,在以后的实践中详加琢磨,可深入理解,并纠正过去的错误认知。简翻或者误翻,如果少量,我感觉在初期的学习中可以接受。个人理解,轻拍!!)
第一章以及第二章的部分内容,网络上已经有人进行了翻译,不再赘述。链接如下:
http://blog.sina.com.cn/s/blog_4a5b4b930100xxn1.html (任我飞的新浪微博)
关于第二章,补充如下内容
对象数组事件
事件在通过对象数组表示时,其事件属性就是该数组的元素值。属性可以使一个基本类型(数组)、java对象、map或者是另一个对象数组。
和Map事件类似,对象数组事件也可以消除java对象事件的使用,从而更容易地在运行时对事件类型等进行变更。比如,添加一个属性对于Map或者对象数组来说可以很方便的完成,但是对于java对象来说,需要对POJO进行重新编写,在属性扩展上,Map和对象数组有很大的优势。
在运行期间,通过运行配置API ConfigurationOperations对对象数组事件类型进行属性添加。注意,不能对事件类型的进行属性的更新和删除,只能做属性新增操作。另外,运行时配置API也允许清除对象数组事件类型,并且添加新的事件类型信息。
发送对象数组事件:通过运行API EPRuntime , 调用sendEvent(Object[] array, String eventTypeName),完成对象数组的发送。
发送数据时,Esper 不会对数据的长度、值类型进行校验。程序中必须确保发送事件的数组长度、属性值类型以及属性的顺序 与声明的对象数组事件类型一致。
对象数组属性
对象数组属性可以任意的类型。比如 java对象、Map、对象数组等。
为了使用对象数组事件,其类型名称、属性名称和属性类型可以通过Configuration 或者 create schema语法进行定义。
下面的代码定义了对象数组事件类型,创建了一个对象数组事件,并且发送该事件到Esper引擎。如下:
// Define CarLocUpdateEvent event type (example for runtime-configuration interface)
String[] propertyNames = {"carId", "direction"}; // order is important
Object[] propertyTypes = {String.class, int.class}; // type order matches name order
epService.getEPAdministrator().getConfiguration().
addEventType("CarLocUpdateEvent", propertyNames, propertyTypes);
Statement中对事件的处理:
select carId from CarLocUpdateEvent.win:time(1 min) where direction = 1
发送事件时:
// Send an event
Object[] event = {carId, direction};
epRuntime.sendEvent(event, "CarLocUpdateEvent");
Esper引擎也可以查询Object[]中的java对象。Account是定义的java应用对象。
epRuntime.sendEvent(new Object[] {txn, account}, "TxnEvent"); //EPL
select account.id, account.rate * txn.amount
from TxnEvent.win:time(60 sec)
group by account.id
高级对象数组类型属性应用
属性的嵌套:
String[] propertyNamesUpdField = {"name", "addressLine1", "history"};
Object[] propertyTypesUpdField = {String.class, String.class,
UpdateHistory.class};
epService.getEPAdministrator().getConfiguration().
addEventType("UpdatedFieldType", propertyNamesUpdField,
propertyTypesUpdField);
String[] propertyNamesAccountUpdate = {"accountId", "fields"};
Object[] propertyTypesAccountUpdate = {long.class, "UpdatedFieldType"};
epService.getEPAdministrator().getConfiguration().
addEventType("AccountUpdate", propertyNamesAccountUpdate,
propertyTypesAccountUpdate);
发送事件:
Object[] updatedField = {"Joe Doe", "40 Popular Street", new UpdateHistory()};
Object[] accountUpdate = {10009901, updatedField};
epService.getEPRuntime().sendEvent(accountUpdate, "AccountUpdate");
EPL:
select accountId, fields.name, fields.addressLine1, fields.history.lastUpdate
from AccountUpdate
一对多的关系
下面的例子中salesPersons属性均对应一个数组:
String[] propertyNames = {"userids", "salesPersons", "items"};
Object[] propertyTypes = {int[].class, SalesPerson[].class, "OrderItem[]");
epService.getEPAdministrator().getConfiguration().
addEventType("SaleEvent", propertyNames, propertyTypes);
select userids[0], salesPersons[1].name,
items[1], items[1].price.amount from SaleEvent
另,各种事件类型的比较如下:
Java Object (POJO/Bean or other) |
Map |
XML Document |
|
Performance |
Good |
Good |
Not comparable and depending on use of XPath |
Memory Use |
Good |
Good |
Depends on DOM and XPath implementation used |
Call Method on Event |
Yes |
Yes, if contains Object(s) |
No |
Nested, Indexed, Mapped and Dynamic Properties |
Yes |
Yes |
Yes |
Course-grained event syntax |
Yes |
Yes |
Yes |
Insert-into that Representation |
Yes |
Yes |
No |
Runtime Type Change |
Reload class, yes |
Yes |
Yes |
Create-schema Syntax |
Yes |
Yes |
No, runtime and static configuration |
从上面看出,用java对象作为事件类型表示方式,在性能、内存使用等都有不错的表现,而且支持的功能特性也较为全面。在一般的开发中,建议使用 java对象作为事件类型。
复杂事件处理引擎—Esper参考(事件部分)的更多相关文章
- 复杂事件处理引擎—Esper工作原理
前面对Esper进行了概述,包括事件类型.事件流.事件窗口以及EPL相关内容.当然,上面的知识,对于简单的Esper开发,应该已经足够,能够根据自己业务需求,做出一个满足需要的Esper应用.但是,真 ...
- 复杂事件处理引擎—Esper入门(第二弹)
说明: 以下内容,可以参考Esper官方网站<Qucik start & Tutorial >(顺序做了部分调整). PS:因为英语水平有限(大学期间刚过CET4的英语小盲童一枚) ...
- 复杂事件处理引擎—Esper入门
说明: 以下内容,可以参考Esper官方网站<Qucik start & Tutorial >(顺序做了部分调整). PS:因为英语水平有限(大学期间刚过CET4的英语小盲童一枚) ...
- 复杂事件处理引擎—Esper 处理模型
1.esper的处理模型是持续性的——根据statement中事件流(event stream).视图(views).过滤器(filters)等的选择,esper引擎一旦处理事件数据,就会变更stat ...
- ASP.NET Razor 视图引擎编程参考
ASP.NET Razor 视图引擎编程参考 转载请注明出处:http://surfsky.cnblogs.com Rasor 视图引擎 http://msdn.microsoft.com/ ...
- [C#参考]事件机制
还是那个项目,为了降低程序的耦合性,我决定小小的重构一下自己原来的代码,把Socket通信和帧的分析这两部分分别封装成一个类,当然线程没有变,只是封装了一下,为的就是模块测试完容易拼接.这也是我打算降 ...
- java工作流引擎Jflow流程事件和流程节点事件设置
流程实例的引入和设置 关键词: 开源工作流引擎 Java工作流开发 .net开源工作流引擎 流程事件 工作流节点事件 应用场景: 在一些复杂的业务逻辑流程中需要在某个节点或者是流程结束后做一些 ...
- esper 事件引擎,各种事件类型示例代码
原创文章 转载请注明出处 package com.hp.iot.engine.esper; import java.util.ArrayList; import java.util.HashMap; ...
- Slickflow.NET 开源工作流引擎高级开发(五) -- 引擎和外部事件的交互
前言:引擎组件的基本职责是负责流程流转,但是在流转过程中,除了对内部控制逻辑进行实现外,也不可避免的要去调用或者响应外部事件.本文主要描述外部事件的类型,以及调用方法过程. 1. 外部事件的类型 外部 ...
随机推荐
- 《Ruby语言入门教程v1.0》学习笔记-03
10.09 第七章 7.1 模块 Ruby标准包里的 Math 模块提供了许多方法,比如:求平方根 sqrt ,使用的时候要这么写:模块名.方法名(参数).如:Math.sqrt( a*5+b ) M ...
- Object-C 函数定义 -- 笔记
-(int) f:(int)x; 1.这里 - 表示对象方法, +表示类的方法 2.参数分割使用 : 号来分开 多参数情况: 1.函数不带参数 (函数名: f) -(int) f 2.带一个参数(函数 ...
- SecureCRT连接vm中的ubuntu
如何使用SecureCRT连接ubuntu 用secureCRT连接Ubuntu是出现远程系统拒绝访问..经过一翻研究才知道Ubuntu上没有ssh.. 一下为连接过程. 1. 首先要明白什么是ssh ...
- Project Euler problem 61
题意很明了. 然后我大概的做法就是暴搜了 先把每个几边形数中四位数的处理出来. 然后我就DFS回溯着找就行了. 比较简单吧. #include <cstdio> #include < ...
- hdu 3631 Shortest Path(Floyd)
题目链接:pid=3631" style="font-size:18px">http://acm.hdu.edu.cn/showproblem.php?pid=36 ...
- android动画效果编程基础--Android Animation
动画效果编程基础--Android Animation 动画类型 Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 tran ...
- Java基础知识强化之IO流笔记01:异常的概述和分类
IO流操作的时候会出现很多问题,java中叫作异常,所以我们先介绍一下异常: 1. 程序的异常:Throwable(Throwable类是java中所有异常或错误的超类) (1)严重问题:Error ...
- nginx 站点80跳443配置
server { listen 80; server_name www.furhacker.cn; location /{# return 301; rewrite ^(.*)$ https://$h ...
- 使用rpm安装mysql的默认目录
--使用rpm安装mysql的默认目录:1.数据库目录/var/lib/mysql/2.配置文件/usr/share/mysql(mysql.server命令及配置文件)3.相关命令/usr/bin( ...
- poj 1988 Cube Stacking && codevs 1540 银河英雄传说(加权并茶几)
#include<iostream> #include<cstdio> #include<cstring> #define maxn 30010 using nam ...