公开/公告号CN114860718A
专利类型发明专利
公开/公告日2022-08-05
原文格式PDF
申请/专利权人 沈阳航空航天大学;
申请/专利号CN202210382427.7
申请日2022-04-12
分类号G06F16/22(2019.01);G06F16/2455(2019.01);G06F16/27(2019.01);G06N5/02(2006.01);
代理机构沈阳维特专利商标事务所(普通合伙) 21229;
代理人陈晖
地址 110136 辽宁省沈阳市道义经济开发区道义南大街37号
入库时间 2023-06-19 16:16:00
法律状态公告日
法律状态信息
法律状态
2022-08-23
实质审查的生效 IPC(主分类):G06F16/22 专利申请号:2022103824277 申请日:20220412
实质审查的生效
2022-08-05
公开
发明专利申请公布
技术领域
本发明公开涉及信息处理技术领域,尤其涉及一种面向实时事件流的复杂事件处理方法。
背景技术
复杂事件处理是一种动态环境下对事件流进行分析的技术,随着信息社会的进一步发展,越来越多的行业采用复杂事件处理(Complex Event Processing,CEP)技术来对海量的事件流进行实时的分析。复杂事件处理通过分析事件中的关系,通过关联、聚合、过滤等技术,根据事件间的时序关系和聚合关系制定查询规则,持续地从事件流中获取符合要求的事件序列。该技术在金融交易分析、传感器网络、物联网等领域都有着广泛的应用。
目前,基于有限状态自动机(Nondeterministic Finite Automata,NFA)的处理模型是最流行的复杂事件处理技术实现方式。通过NFA的方式来实现的复杂事件处理技术,在事件流上进行匹配的过程中都会产生临时匹配,用以保证该临时匹配结果能够被后续的事件使用形成新的临时匹配以及最终匹配结果。所以匹配过程中会在事件流上产生大量且重叠的部分匹配,有限状态自动机需维护大量的重复匹配状态,导致基于该技术的方法都会出现冗余计算的问题。尤其当复杂时间查询的时间窗口跨度大时,冗余计算将会给处理器和存储器等硬件资源带来巨大的额外开销。
发明内容
鉴于此,本发明公开提供了一种面向实时事件流的复杂事件处理方法,以解决有限状态自动机匹配过程中导致的冗余计算问题,从而提高复杂事件匹配的效率。
本发明提供的技术方案,具体为,一种面向实时事件流的复杂事件处理方法,包括如下步骤:
1)将查询解析为一个有限状态自动机,读取事件流,基于“事件实例覆盖”和“复杂事件实例覆盖”定义,建立查询与事件流的临时匹配之间的关联关系;
2)构建临时匹配的链式分区存储结构,将所述结构作为复杂事件实例覆盖的载体,在所述结构上,查询在事件流上进行复杂事件实例覆盖匹配,得到匹配结果复杂事件实例覆盖集,其中匹配时,采用复杂事件匹配算法CoverMatch;
3)采用CombineMatch算法将所得到的匹配结果进行一个反向的匹配结果联结,最终获取全部匹配结果。
优选地,所述事件流S(s1,s2,…,sn)由一系列的基本事件实例构成,其中si为事件实例,它包含了事件的类型、事件的属性和事件发生时的时间;
所述查询为复杂事件查询Q,是由一组定义在基本事件上的约束条件构成,用以定义和表示更高层次的复杂事件的属性特征;
所述“事件实例覆盖”定义为:当事件实例s
所述“复杂事件实例覆盖”定义为:对两个匹配结果M
优选地,上述方法具体包括如下步骤:
S1:假设有一个查询Q以及一个事件流S,将查询Q编译成NFA,其中在Q被编译成NFA之后,存在主要状态及多个分区;
S2:查找事件流中的事件e;如果事件e不为空则进行步骤S3,否则进行步骤S6;
S3:检查事件e的属性;如果符合要求则进行步骤S4,否则进行步骤S2;
S4:使用事件e在上一个分区中遍历暴露的匹配节点,将能够进行更新的节点拷贝,进行更新生成新的节点;
S5:检查此节点的时间窗口是否大于事件流S的时间范围,如果是,则进行步骤S2,否则进行步骤S6;
S6:查找事件e所在的分区region,进入到当前分区进行复杂事件实例覆盖的检查,查找当前事件e所在分区region中的每一个临时匹配链的链尾节点,如果事件e不是本分区所有链尾节点的复杂事件实例覆盖,就单独成链,否则成为某个链的链尾节点;
S7:查找本事件流的最后一个分区,找到本分区的每一个临时匹配链,并且使用prev直接定位到链尾节点,将这些链尾节点存储到复杂事件实例覆盖集R中,从而得到最终复杂事件实例覆盖集R;
S8:由于匹配过程中采用的是双向环形链式结构,则从最底端的复杂事件实例覆盖集R出发,反向遍历所在的链表;收集每个分区的该链表节点的最后一个事件实例,最后通过递归实现各个分区事件实例的联结,最终得到所有匹配结果。
本发明提出了一种面向实时事件流的复杂事件处理方法,对NFA进行了增强,为其设计了一个临时匹配的链式分区存储结构,用以替代现有技术中的集中式的临时匹配存储方式。本发明采用临时匹配链式分区存储结构则借助事件实例覆盖和复杂事件实例覆盖的概念来设计,规避了集中式临时匹配存储的缺点。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明的公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一种面向实时事件流的复杂事件处理方法中所述临时匹配链式分区存储结构示意图;
图2是本发明公开实施例中在ABC数据集上处理5组查询的性能对比示意图;
图3是本发明公开实施例中在交通数据集上处理5组查询的性能对比示意图;
图4是本发明公开实施例中在ABC数据集上时间窗口约束的大小对性能影响的实验对比;
图5是本发明在交通数据集上时间窗口约束的大小对性能影响的实验对比示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的系统的例子。
针对基于NFA的复杂事件处理中产生的大量临时匹配和拷贝而导致的冗余计算等问题,本实施方案提供了一种面向实时事件流的复杂事件处理方法,提出了复杂事件实例覆盖的概念,通过复杂事件实例覆盖,可以建立临时匹配之间的关联关系,基于此关系来减少临时匹配的冗余产生和冗余复制。设计了一个临时匹配链式分区存储结构,通过该结构避免了临时匹配的集中式存储及使用,同时该结构也作为复杂事件实例覆盖的载体,构建了临时匹配之间的关联。提出了基于临时匹配链式分区存储结构的复杂事件匹配算法CoverMatch和CombineMatch。通过这两个算法,能够在减少临时匹配数量和复制的情况下保证复杂事件处理匹配结果的正确性和完整性。
一种面向实时事件流的复杂事件处理方法,包括:1)将查询解析为一个有限状态自动机,读取事件流,基于“事件实例覆盖”和“复杂事件实例覆盖”定义,建立查询与事件流的临时匹配之间的关联关系;
2)构建临时匹配的链式分区存储结构,将上述结构作为复杂事件实例覆盖的载体,在所述结构上,查询在事件流上进行复杂事件实例覆盖匹配,得到匹配结果,其中匹配时,采用复杂事件匹配算法CoverMatch;
3)采用CombineMatch算法将所得到的匹配结果进行一个反向的匹配结果联结,最终获取全部匹配结果。
上述事件流S(s1,s2,…,sn)由一系列的基本事件实例构成,其中si为事件实例,它包含了事件的类型、事件的属性和事件发生时的时间;
上述查询为复杂事件查询Q,是由一组定义在基本事件上的约束条件构成,用以定义和表示更高层次的复杂事件的属性特征;
上述“事件实例覆盖”定义为:当事件实例s
上述“复杂事件实例覆盖”定义为:对两个匹配结果M
上述方法中对现有的NFA进行了增强,为其设计了一个临时匹配的链式分区存储结构,用以替代原来的集中式的临时匹配存储方式。集中式的临时匹配存储方式在每次新的事件到来时都需要对所有的临时匹配进行遍历验证,严重消耗计算资源。而本实施方案中的临时匹配链式分区存储结构则借助事件实例覆盖和复杂事件实例覆盖的概念来设计,规避了集中式临时匹配存储的缺点。
一种面向实时事件流的复杂事件处理方法中,假设当前存在查询Q
在Q
其中基于链式分区存储结构的匹配算法CoverMatch具体为:
输入:事件流S
输出:复杂事件实例覆盖集R
在上述算法中,第g行的buildTempMatch方法表示了使用事件e在上一个分区中遍历暴露的匹配节点,将能够进行更新的节点拷贝,进行更新,然后再进入到当前分区进行复杂事件实例覆盖的检查,如果不是某个节点的复杂事件实例覆盖,就单独成链(第o行),否则成为某个链的链尾节点(第m行)。最后返回的最终的复杂事件实例覆盖,由于采用的是双向环形链式结构,所以第q行使用prev可以直接定位到链尾节点从而得到最终复杂事件实例覆盖。
通过临时匹配链式分区存储结构以及上述匹配算法,查询Q
进一步地,如果用户要的是距离当前时间最近的一个复杂事件实例,只需要指定系统保存 本发明进一步地完善了匹配结果的生成。当用户指定需要获取全部匹配结果时,则需要使用CoverMatch算法对所得到的结果去进行一个反向的匹配结果联结,继续使用查询Q 由于采用的是双向环形链式结构,可以从最底端的复杂事件实例覆盖出发,反向遍历所在的链表。只需要收集每个分区的该链表节点的最后一个事件实例,最后通过递归实现各个分区事件实例的联结,该过程如下CombineMatch所示。对于Q 匹配结果联结算法CombineMatch 输入:复杂事件实例覆盖R。 输出:所有匹配结果M。
在上述算法第g行的方法getPrevBlockNode中,通过传入链表顶点R,能够获取上一个分区中R的父节点。第i行使用了递归的形式来获取最终的联结结果,其中采用doCombine方法进行了联结操作。
机译: 事件流处理系统,事件流处理方法,事件流处理程序
机译: 事件流处理系统,事件流处理方法,事件流处理程序
机译: 事件流处理系统,事件必须点处理方法和事件流处理程序