程序员的量化交易之路(3)--Esper事件Event(2)

Esper 最新帮助文档 最新的Esper(5.0)技术帮助文档 立即下载

第二章 EventPresentation 事件描述

欢迎转载学习,但转载须注明出处:http://blog.youkuaiyun.com/minimicall,尊重劳动成果,版权归我。

这一章用于说明事件描述和建模的方法。

 

Esper 使用event type(事件类型)来描述事件的类型信息。

你的应用可以在Esper启动时或者在运行时通过API或者EPL语法来添加事件类型。具体参见16.4节“条目配置”,关于启动时配置,15.3.8“运行时配置”,关于运行时配置API。

EPL的create schema语法允许在运行时声明一个事件类型,具体参见5.15节“声明一个事件类型:createschema”

在15.6节“事件及事件类型”,我们将会解释事件类型如和对EPL语句可见以及输出由引擎传递的事件。

2.1 事件底层Java对象

事件是一个不变的记录,它记录了过去发生的动作或者状态的改变。事件的属性(Properties)记录了事件的状态信息。

在Esper中,一个事件可以由表2.1中的Java对象表示。

表2.1 事件的底层Java对象

Java类

描述

Java.lang.Object

任何遵循JavaBean约定并带有getter方法的Java POJO(plain-old java object)对象;遗留的Java类即便没有尊徐JavaBean约定也可以当做事件

Java.util.Map

Map事件是由java.util.Map接口实现的,其中每个map条目就是属性值

Object[](对象数组)

对象数组事件是一组对象的数组,数组中每个元素就是属性值

Org.w3c.dom.Node

XML 文档对象模型(DOM)

Org.pache.axiom.om.OMDocument 或OMElement

XML流

Application classes

Plug-in事件由扩展API描述

 

Esper提供了描述事件的多种手段。你并不是非得去新建一个类来描述一个事件。

Esper事件的描述具有以下共性:

1)  所有事件描述支持复合嵌套(nested)、下标(indexed)和映射(mapped)属性,并且嵌套层次不限。

2)  所有事件描述方式都提供了事件类型的元数据,包括嵌套属性的类型元数据。

3)  所有事件描述方式都支持事件置换。所谓事件置换指的是事件或者事件属性可以在将来的语句中进行查询(什么鬼,我是不懂这句话是什么意思,求解)

All eventrepresentations allow transposing the event itself and parts of all of itsproperty graph into new events. The term transposing refers to selecting theevent itself or event properties that are themselves nestable property graphs,and then querying the event's properties or nested property graphs in furtherstatements. The Apache Axiom event representation is an exception and does notcurrently allow transposing event properties but does allow transposing theevent itself

4)  Java对象、映射和数组对象表示方法允许基类存在。

所有事件表现的API行为都一致,有些小的例外我们将会在本章标出。

多种事件描述方式的好处有:

1)  对于那些已经存在一些事件,而这些事件是上述支持的事件的一种或多种,那么就没有必要对事件进行转换。

2)  事件的描述是可交换的,这减少了事件状态的改变,当事件描述方式改变时。

3)  事件描述是可互操作的,允许事件在单条或多条语句间相互操作。

4)  多种事件描述还可以实现对交易的性能感知、易用、演化、导入和导出事件等。

 

2.2 事件属性

事件属性保存了事件的状态信息。事件属性可以很简单,也可以是下标、映射和嵌套事件属性。表2.2说明了不同类型的属性以及他们在事件表达式中的语法,这种语法支持对JavaBean、XML结构化对象、Map事件等的深度查询。

表2.2 事件属性的类型

类型

描述

语法

示例

Simple(简单)

一个简单的属性值

name

sensorId

Indexed(索引/下标)

一个索引属性存储的是一组同类型的顺序对象,通过下标可以单独获取

Name[index]

sensor[0]

Mapped(映射)

映射属性通过关键字来映射存储

Name(‘key’)

sensor(‘light’)

Neted(复合嵌套)

嵌套属性是属性又是另一个对象(事件)

name.nestedname

sensor.value

 

上述几种类型的复合也是可以的,例如person.address(‘home’).street[0]。

此外,索引和映射括号内还支持表达式,下面我们会有例子说到。

 

2.2.1 转义字符(Escape Characters)

如果你的应用又使用java.util.Map,Object[]或者XML来表达事件,这些事件属性名称中就含有点”.”符号。这个时候,你需要使用反斜杠“\”来进行转义。

例如在如下EPL表达式中,属性part1.part2,:

Select part1\.part2 from MyEvent

 

有时候你的EPL表达式包含了空格或者EPL语言的关键字或者其它特殊字符,这个时候你需要使用`(反引号,tab键上面,1键左边那个)去转义。

 

例如下面这个例子,Quote事件存在一个属性名为order,但order是EPL的保留字,所以需要转义:

select `order`, price as `price.for.goods`from Quote

 

当要转义映射或索引属性时,需要保证反引号出现在map key或 index的外面(outside)

 

下面这个例子是事件属性名中含有空格以及含有特殊符号’(例如 children’sbooks):

select `candidate book` , `children'sbooks`[0], `book select`('isbn') from MyEventType

 

 

2.2.2 表达式作为映射关键字或者数组的下标

键或索引表达式必须放置在括号内。当使用一个表达式作为映射属性的关键字时,该表达式必须是一个代表字符串类型的表达式。当使用一个表达式作为索引属性的索引时,该表达式必须代表的是一个整形。

 

假设一个类声明了这些属性(为了简略,getter方法被简略掉了):

 

public class MyEventType {

 String myMapKey;

  intmyIndexValue;

  intmyInnerIndexValue;

 Map<String, InnerType> innerTypesMap; // mapped property

 InnerType[] innerTypesArray; // indexed property

}

 

public class InnerType {

 String name;

 int[] ids;

}

下面是一个展示表达式作为映射key和索引的EPL语句:

 

select innerTypesMap('somekey'),  // returns map value for 'somekey'

 innerTypesMap(myMapKey),        //returns map value for myMapKey value (an expression)

 innerTypesArray[1],             //returns array value at index 1

 innerTypesArray(myIndexValue)   //returns array value at index myIndexValue (an expression)

 from MyEventType

 

可以通过点操作来访问事件属性的属性(数据成员),下面是一个示例:

 

select innerTypesMap('somekey').ids[1],

 innerTypesMap(myMapKey).getIds(myIndexValue),

 innerTypesArray[1].ids[2],

 innerTypesArray(myIndexValue).getIds(myInnerIndexValue)

 from MyEventType

 

2.3 动态事件属性

动态属性(无需检查)是一种在语句编译时无需确定的事件属性,这种属性在运行时解决,他们提供duck typing 功能。

动态属性所面对的是,对于一个潜在的事件,我们并不是总能够事先知道它的所有属性。这个事件可能存在一些在编译时我们不知道的属性,但我们又会在后面查询用到。这种概念在事件描述那些丰富的、面相对象模型的时候非常有用。

动态属性的语法是属性名加疑问号?,索引、映射和嵌套属性都可以是动态属性。

表2.3 事件属性的动态类型

类型

语法

Dynamic Simple

name?

Dynamic Indexed

name[index]?

Dynamic Mapped

name(‘key’)?

Dynamic Nested

name?nestedPropertyName

 

动态类型总是返回java.lang.Object类型。如果事件没有该动态属性,那么就会返回null。

举个例子,假如一个OrderEvent事件,它有一个“item”属性,这个“item”属性是一个对象,可能指向Service,也可能指向Product。

我们假设Service和Product类都有属性“price”。通过动态属性,我们可以获得一个价格属性,而无论它指向的是哪个对象(Service或Product):

 

select item.price? from OrderEvent

 

接下来,我们假设Service类包含一个“serviceName”属性,而Product类并没有该属性。那么下面的查询语句则会根据指向的对象返回不同的结果:

 

select item.serviceName? from OrderEvent

 

当item指向的是Service类的对象实例时,返回一个存在的值,当指向的是Product类的对象实例时,返回null。

 

我们假设OrderEvent是一个基类,它有一个名为timestamp的属性,并且OrderEvent有很多派生类来实现它。那么下面语句可以返回timestamp的值,不管查询对象指向的是OrderEvent的哪个派生类的实例:

 

select timestamp? from OrderEvent

 

假如动态属性是嵌套的,那么这个动态属性内部的所有属性也是动态的。下面示例中查询“direction”属性,它是动态属性“detail”的属性:

 

select detail?.direction from OrderEvent

 

上面语句等价于:

 

select detail?.direction? from OrderEvent

 

下面的函数配合动态属性非常有用:

1)  cast函数将动态属性裁剪为指定类型。

2)  exists函数用于检查事件事件是否存在该动态属性。

3)  instanceof用于检测动态属性是否为给定类型

4)  typeof用于返回动态属性的类型的类型名称。


这一篇就暂时到这里,下一篇继续说明第二章事件的内容。

esper官方文档 esper官方文档,最新5.20.学习cep的开源实现 立即下载

相关推荐

SpringBoot Actuator未授权访问漏洞实战:从发现到利用

本文深入剖析了SpringBoot Actuator未授权访问漏洞的成因、危害与利用手法。文章详细演示了如何发现暴露的端点,并通过实战案例复现了从敏感信息泄露到利用反序列化漏洞实现远程代码执行(RCE)的全过程,为开发与运维人员提供了从漏洞发现到修复加固的完整安全指南。

weixin_29231221的博客 260

程序员的量化交易之路(5)--Esper之Map事件(4)

2.6 java.util.Map事件 2.6.1 概述 实现事件的类可以是一个实现java.util.Map接口的类。映射事件的事件属性是其通过get方法能够获得的值。 和数组对象事件类型一样,映射事件类型考虑了系统中的综合类型,是的不需要使用Java类来描述事件类型,这是的更容易在运行时更改事件,或者从其他类型生成类型信息。 一个给定的Ma...

weixin_33827590的博客 232

天融信防火墙NGFW4000(TG-4628)安装配置笔记

配置一台全新的天融信防火墙NGFW4000,配置完后,内网用户10.10.1.0/24和10.10.2.0/24可以通过防火墙上网,外网用户可以通过访问防火墙的外网接口地址来访问内网的WEB服务器10.10.1.200,并且内网用户也可以通过WEB服务器的外网地址进行访问。 网络说明: 防火墙外网接口地址:218.90.123.121/30 防火墙内网接口地址:19...

weixin_33671935的博客 4455

程序员的量化交易之路(2)----Esper文档学习之技术概览(1)

转载请注明出处:http://blog.youkuaiyun.com/minimicall/ 在接下来的20个工作日中,我将坚持翻译或者略翻译Esper的官方文档。 为什么需要学习Esper,因为我们需要理解复合事件处理 Complex Event Processing (CEP)。在量化交易系统中,CEP是必不可少的。它负责处理海量的实时事件。 关于CEP更多...

weixin_33883178的博客 440

摩尔线程GPU实战:5分钟搞定AI模型部署(含Docker避坑指南)

本文详细介绍了摩尔线程GPU在AI模型部署中的实战应用,包括环境配置、Docker避坑指南及性能优化技巧。通过5分钟快速部署指南,帮助开发者高效利用摩尔线程GPU进行AI模型推理,特别针对常见兼容性问题提供解决方案,显著提升部署效率。

weixin_28736335的博客 454

模拟ic入门——设计一个单极运放(一)单级运算放大器设计基础

主要介绍了单级运放的基本理论和使用场景

qq_64956710的博客 3744

程序员的量化交易之路(6)-Esper之处理模型(5)

3 处理模型(Processing Model) Esper的处理模型是持续的:更新监听器listener和订阅者subscriber,当事件到来时,根据声明对事件流、视图、过滤和输出等。 监听器的接口是com.espertech.esper.client.UpdateListener,必须实现update方法,这个函数会在结果到来时触发。 3...

weixin_33898876的博客 787

VMware 15 虚拟机安装Ubuntu 18.04

这几年在自动化、计算机之间游来游去,最近又要做机器学习相关的课题,14年做的虚拟机实在不堪重用了,OK,我们重新开始。 VMware的安装就不再赘述了,目前最新版本是15.0.2,官方下载地址: https://my.vmware.com/en/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/15_0...

略懂 2万+

esper(复杂事件处理引擎)简介

Esper是一个复杂事件处理引擎,用于对同一类型的多个对象进行统计分析。 要统计的多个事件(一个事件通常对应着一个对象)会存储在一个队列中,这里叫它EQueue。 EPL EPL,Event Process Language,事件处理语言。类似于SQL,描述了esper要分析的内容。 统计窗口为.win:length_batch(n)时,每攒够n个事件统计一次,统计过后队列EQueue清空

yichudu 7955

芒果YOLO11改进23:主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

包括YOLOv5、YOLOv7、YOLOv8等模型改进 406

SAP-ABAP:SAP HANA性能神器FDA:是极速查询的引擎,也是CPU过载的元凶

在SAP S/4HANA的世界里,有一个被ABAP开发者们既爱又怕的特性——Fast Data Access(FDA),它能将性能提升百倍,也能让CPU瞬间飙升。本文将带您全面解剖这一核心机制。

baidu_35680696的博客 849

Esper事件处理机制

1. sendEvent()和对应lisenter的update()方法是在同一个线程里面。所以update方法的效率会影响sendEvent的执行。   2. 在sendEvent()的时候,会调用matchEvent的方法,这个方法会为每一个调用sendEvent的线程建立一个dispatch的list,如果这个线程发送到event能够和某个statement的类型对应到,就会加到这个线程...

kgdso的专栏 447

【100%通过率】华为od机试C卷【出差 / 员工派遣】C++ 实现

某公司部门需要派遣员工去国外做项目。现在,代号为 x 的国家和代号为 y 的国家分别需要 cntx 名和 cnty 名员工部门每个员工有一个员工号 (1,2,3,......),工号连续,从 1开始。部长派遣员工的规则:

MISAYAONE的博客 2194

程序员的量化交易之路(4)--Esper之事件(3)

欢迎转载学习,但转载须注明出处:http://blog.youkuaiyun.com/minimicall,尊重劳动成果,版权归我。 这一节中我们继续学习Esper的事件部分内容。 对应官方的文档为2.4-2.5 2.4 碎片及碎片类型(Fragment and Fragment Type) 有些情况,一个事件的某个属性本身又是一个事件。Esper对这种称作为...

weixin_34281477的博客 188

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

对esper的理解

Esper是java开发的事件流处理和复杂事件处理引擎。其中复杂事件处理(CEP)是一种实时事件处理并且从大量事件数据流中挖掘复杂模型的技术;而事件流处理(ESP)是一种从大量事件数据流中过滤,分析有意义的事件,并能够实时取得这些有意义的信息的技术。         Esper可以监测事件,并且能够在特定事件发生时触发某些动作,所以适合的场合为商业活动的监控、犯罪预防、实时风险分析、市场趋势分析等

Q 4307

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

esper安装与示例

1. esper的安装: 在 http://esper.codehaus.org/esper/download/download.html 这里下载esper压缩包。解压缩之后获得文件夹 esper-4.x.x,在该文件夹根目录有 esper-4.x.x.jar,这就是我们需要用到的esper库,将其加入到项目中。值得注意的是,使用esper不仅仅需要这个jar文件,还需要esper所依赖的其他

诡影苍穹的专栏 7969

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Esper事件处理引擎_9_EPL 语法_2_Context 上下文_3_过滤条件

官方地址:http://www.espertech.com Esper 事件引擎栏目:http://blog.youkuaiyun.com/xiaohulunb/article/category/2436609 EPL 语法代码见-GitHub代码地址:点击打开链接 涉及 Javabean,Listener,main 以 GitHub 包下为最新更新

2.wa 1565

Esper入门简介:三、 对Esper底层数据结构特点分析,数据的入、出

package com.doctor.esper.reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.doctor.esper.common.EsperUtil; import com.doctor.esper.tutorial.OrderEvent; import com.esperte

nobody 3710

Esper入门及示例(CEP引擎)

一,概述 关系型数据用来查询相对静态的数据,如果执行一些复杂的查询,要降低查询的频度。传统关系型数据库普遍将数据存储在硬盘(也有内存数据库),它的检索性能受限于硬盘访问性能。受制于关系型数据库的设计,如果频繁查询数据来实现实时统计则需要在较短时间内构建多次查询语句(SQL),每次检索都耗时较长,关系型数据库会成为系统瓶颈。总而言之,传统关系型数据库并不适合每秒成百上千次的查询统计。 Esper

antibodies的专栏 4674

深度学习之图像分类(十六)-- EfficientNetV2 渐进式学习策略与训练优化

本文深入探讨了EfficientNetV2在图像分类任务中的渐进式学习策略与训练优化方法。通过动态调整输入尺寸和正则化强度,EfficientNetV2显著提升了训练效率和模型准确率,最高可实现11倍加速和0.7%的准确率提升。文章详细解析了渐进式学习的核心设计、实现细节及实际应用建议,为深度学习从业者提供了宝贵的优化经验。

weixin_30876945的博客 701

Esper学习之二:事件类型

上周我们介绍了Esper,它是一个适合实时分析数据的内存计算引擎。若有不了解的同学可以看一下Esper学习之一:Esper介绍。如果各位自己运行过之前的程序,应该对Esper的处理机制和EPL比较感兴趣。不过这篇文章就先来介绍一下Esper能处理的数据结构,即“事件”。 Esper对事件有特殊的数据结构约定。能处理的事件结构有:POJO,java.util.Map,Object Arra

luonanqin的专栏 2万+

Esper之事件——篇2(esper Reference)

Esper事件表示方式 Esper支持在系统启动初始时配置预定义的事件类型,也支持在系统运行的时候通过API或是EPL语法动态的添加事件类型。这些配置会在后面的文章中详述,本文的重点是数据结构定义。 2.1    隐藏于java对象之下的事件 事件是已发生的一个动作或状态变化的不可变记录。事件的属性记录了事件的状态信息。 Java Class

journey_fan的专栏 1965

Esper epl语句详解

EPL,Event Process Language,事件处理语言。类似于SQL,描述了esper要分析的内容。 统计窗口 以下为常用窗口。 win:length(size)//攒够size条数据后触发UpdateListener()函数。滑动窗口,攒满之后新来一个移除一个,并触发。 win:length_batch(size) //攒够size条数据...

weixin_34336292的博客 392

Esper企业版介绍(一)Esper HA

提供弹性CEP引擎 综述 短生命和扩展状态 查询语言为EPL持续查询 非模式化和查询驱动 对象模型 内存操作提高性能和减小延迟 增量和全备份保证性能和灵活性 自动检查点或自定义检查点 选择Extract和Load的状态接口 转换操作状态 替换EPL表述和执行时间(有限制的) QoS配置(不是非此即彼的) 不需要更改code 多个存储选择(文件系统/关系型数据库) 详细

王义凯 的博客 1803
上一篇: 程序员的量化交易之路(2)----Esper文档学习之技术概览(1)
下一篇: 程序员的量化交易之路(4)--Esper之事件(3)
minimicall
博客等级 码龄18年 407粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值