声明: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参考(事件部分)的更多相关文章

  1. 复杂事件处理引擎—Esper工作原理

    前面对Esper进行了概述,包括事件类型.事件流.事件窗口以及EPL相关内容.当然,上面的知识,对于简单的Esper开发,应该已经足够,能够根据自己业务需求,做出一个满足需要的Esper应用.但是,真 ...

  2. 复杂事件处理引擎—Esper入门(第二弹)

    说明: 以下内容,可以参考Esper官方网站<Qucik start & Tutorial >(顺序做了部分调整). PS:因为英语水平有限(大学期间刚过CET4的英语小盲童一枚) ...

  3. 复杂事件处理引擎—Esper入门

    说明: 以下内容,可以参考Esper官方网站<Qucik start & Tutorial >(顺序做了部分调整). PS:因为英语水平有限(大学期间刚过CET4的英语小盲童一枚) ...

  4. 复杂事件处理引擎—Esper 处理模型

    1.esper的处理模型是持续性的——根据statement中事件流(event stream).视图(views).过滤器(filters)等的选择,esper引擎一旦处理事件数据,就会变更stat ...

  5. ASP.NET Razor 视图引擎编程参考

    ASP.NET Razor 视图引擎编程参考   转载请注明出处:http://surfsky.cnblogs.com Rasor 视图引擎    http://msdn.microsoft.com/ ...

  6. [C#参考]事件机制

    还是那个项目,为了降低程序的耦合性,我决定小小的重构一下自己原来的代码,把Socket通信和帧的分析这两部分分别封装成一个类,当然线程没有变,只是封装了一下,为的就是模块测试完容易拼接.这也是我打算降 ...

  7. java工作流引擎Jflow流程事件和流程节点事件设置

    流程实例的引入和设置 关键词: 开源工作流引擎  Java工作流开发  .net开源工作流引擎   流程事件 工作流节点事件 应用场景: 在一些复杂的业务逻辑流程中需要在某个节点或者是流程结束后做一些 ...

  8. esper 事件引擎,各种事件类型示例代码

    原创文章 转载请注明出处 package com.hp.iot.engine.esper; import java.util.ArrayList; import java.util.HashMap; ...

  9. Slickflow.NET 开源工作流引擎高级开发(五) -- 引擎和外部事件的交互

    前言:引擎组件的基本职责是负责流程流转,但是在流转过程中,除了对内部控制逻辑进行实现外,也不可避免的要去调用或者响应外部事件.本文主要描述外部事件的类型,以及调用方法过程. 1. 外部事件的类型 外部 ...

随机推荐

  1. mongodbOperator

    mongodb创建数据库表语句 db.createCollection("CollectionName or tableName"); db.createCollection(&q ...

  2. windows 编程 —— 菜单以及其他资源

    目录: 1.资源的种类 2.资源的定义方法(IDE:VC++) 3.资源的获取 4.资源的使用与消息处理函数   1.资源的种类 windows 的常用的资源包括:图示 .游标. 字符串. 自订资源. ...

  3. STL 常用的一些容器总结

    数据结构 描述 实现头文件 向量(vector) 连续存储的元素 <vector> 列表(list) 由节点组成的双向链表 <list> 双队列(deque) 连续存储的指向不 ...

  4. Computer Vision and Machine Learning Competitions

    一.ImageNet Object Detection, Object Classification+Localization 二.COCO Image Captioning 三.LFW Face R ...

  5. [Angular 2] Handling Clicks and Intervals Together with Merge

    Observable.merge allows you take two different source streams and use either one of them to make cha ...

  6. 基于 Java 2 运行时安全模型的线程协作--转

    在 Java 2 之前的版本,运行时的安全模型使用非常严格受限的沙箱模型(Sandbox).读者应该熟悉,Java 不受信的 Applet 代码就是基于这个严格受限的沙箱模型来提供运行时的安全检查.沙 ...

  7. Injecting and Binding Objects to Spring MVC Controllers--转

    I have written two previous posts on how to inject custom, non Spring specific objects into the requ ...

  8. Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

  9. ls Common Command-Line Options

    ls  Common Command-Line Options Command  Use: ls -l    Shows a long listing, which includes informat ...

  10. php 时间转换

    在数据库读出的数据,都是字符类型的,所以需要转换: 时间的转换:用date ()函数来实现时间格式; date() 函数默认时间是1970/01/01/ 00:00:00; 要想得到想要的时间就还得用 ...