一种用于过滤数据的设备及方法与流程

文档序号:11582682阅读:222来源:国知局
一种用于过滤数据的设备及方法与流程

本申请涉及计算机领域,尤其涉及一种从海量数据中根据设定的过滤规则实时过滤出满足过滤规则的数据的技术。



背景技术:

随着信息技术爆发式增长,数据量与日俱增,众多领域对海量数据的处理的要求不断增加。

针对如何从海量数据中根据设定的过滤规则过滤出满足过滤规则的数据,现有技术中有以下几种方法:

基于内存关系型数据库的sql语句(structuredquerylanguage)来过滤有效数据,然而,该方法需要将海量数据缓存在内存数据库的逻辑数据表中,占用大量内存资源,且sql语句的周期性执行难以达到实时性要求;

基于hbase(一个分布式的、面向列的开源数据库)的海量数据存储方案,使用map-reduce算法(一种编程模型算法,用于大规模数据集的并行运算)来过滤有效数据,然而,map-reduce模型任务是类似于批处理的后计算模式,对已经存储在hbase中的海量数据,只能周期性的执行运算匹配结果,实时性难以得到保障,并且复杂的map-reduce模型任务需要通过扩展编写来实现,难以满足对大量过滤规则的实时可变和多种计算的需求;

基于cep引擎(复杂事件处理,complexeventprocessing),使用模式匹配算法来过滤有效数据更适合做企业应用系统的监测和决策控制,然而成熟的cep引擎大多是商业软件,用户成本高,并且cep引擎都有各自的模式规则描述方法,比如drools使用xml格式,esper使用epl格式,针对不同的系统的需求需要编写大量的适配代码来使用,且对于非标准化的匹配算法需要扩展编写来实现,增加实现难度,此外,cep引擎的实现各不相同,故不易对cep引擎的性能监测和调优。



技术实现要素:

本申请要解决的技术问题是如何能够在不占用大量内存资源下,根据设定的过滤规则,从海量数据中实时地过滤出满足过滤规则,并且能够满足大量过滤规则的实时可变和多种计算的需求。

为实现上述目的,本申请提供了一种用于过滤数据的方法,其中,所述方法包括:

获取初始待过滤数据,并将所述初始待过滤数据转换为结构化待过滤数据,其中,所述结构化待过滤数据包括数据领域标识和键-值对格式的数据体;

加载过滤规则,其中,每一所述过滤规则包括规则领域标识、规则名称及规则运算表达式,并建立以所述过滤规则的领域标识为索引的所述过滤规则的第一规则列表;

获取所述结构化待过滤数据,并根据所述数据领域标识从所述第一规则列表中获取具有与所述数据领域标识相对应的规则领域标识的若干过滤规则;

利用所获取的若干过滤规则对所述结构化待过滤数据进行并行匹配运算。

进一步地,所述获取初始待过滤数据包括:

从分布式消息中间件中获取所述初始待过滤数据。

进一步地,将所述初始待过滤数据转换为结构化待过滤数据还包括:

将所述结构化待过滤数据发送至阻塞队列;

获取所述结构化待过滤数据包括:

从所述阻塞队列中获取所述结构化待过滤数据。

进一步地,利用所获取的若干过滤规则对所述结构化待过滤数据进行并行匹配运算包括:

对所获取的过滤规则进行规则编译,以建立可运行抽象语法树;

将所述结构化待过滤数据的数据体作为输入参数,遍历若干所述可运行抽象语法树,并利用若干所述可运行抽象语法树进行并行匹配计算。

进一步地,对所获取的过滤规则进行规则编译,以建立可运行抽象语法树包括:

对所获取的过滤规则的规则表达式进行分析,以转化为抽象语法树;

对所述抽象语法树进行预计算,以获得所述可运行抽象语法树;

其中,对所述抽象语法树进行一次预计算包括:

根据所述抽象语法树创建运行堆栈,将所述抽象语法树中的元素传入所述运行堆栈中;

当所述元素为操作符时,将所述操作符对应的两个操作数传出所述运行堆栈,计算以获得计算结果;

当所述元素为特殊元素,则将所述特殊元素转换为程序语言数据结构元素后传入运行堆栈中。

进一步地,利用若干所述可运行抽象语法树进行并行匹配计算包括:

将所述可运行抽象语法树的变量替换为所述数据体中的参数;

利用所述运行堆栈对所述可运行抽象语法树进行匹配计算。

进一步地,所述方法还包括:

新增过滤规则、删除过滤规则或对已有的过滤规则进行修改编译。

进一步地,建立以所述过滤规则的领域标识为索引的所述过滤规则的第一规则列表还包括:

建立根据所述过滤规则的规则名称为索引的所述过滤规则的第二规则列表;

所述新增过滤规则、删除过滤规则或对已有的过滤规则进行修改编译包括至少以下任一项:

将新增的过滤规则增加至所述第二规则列表中;

从所述第二规则列表中删除相应的过滤规则;

从所述第二规则列表中查找过滤规则,并对所查找的过滤规则进行修改编译。

进一步地,每一所述过滤规则还包括:所述过滤规则所绑定的通知器的信息;

所述方法还包括:

将满足相应所述过滤规则的结构化待过滤数据发送至该过滤规则所绑定的通知器,以备传输。

根据本申请另一方面还提供了一种用于过滤数据的设备,其中,所述设备包括:

第一装置,用于获取初始待过滤数据,并将所述初始待过滤数据转换为结构化待过滤数据,其中,所述结构化待过滤数据包括数据领域标识和键-值对格式的数据体;

第二装置,用于加载过滤规则,其中,每一所述过滤规则包括规则领域标识、规则名称及规则运算表达式,并建立以所述过滤规则的领域标识为索引的所述过滤规则的第一规则列表;

第三装置,用于获取所述结构化待过滤数据,并根据所述数据领域标识从所述第一规则列表中获取具有与所述数据领域标识相对应的规则领域标识的若干过滤规则;

第四装置,用于利用所获取的若干过滤规则对所述结构化待过滤数据进行并行匹配运算。

进一步地,所述第一装置包括:

从分布式消息中间件中获取所述初始待过滤数据的单元。

进一步地,所述第一装置包括:

用于将所述结构化待过滤数据发送至阻塞队列的单元;

所述第三装置包括:

从所述阻塞队列中获取所述结构化待过滤数据的单元。

进一步地,所述第四装置包括:

用于对所获取的过滤规则进行规则编译,以建立可运行抽象语法树的单元;

用于将所述结构化待过滤数据的数据体作为输入参数,遍历若干所述可运行抽象语法树,并利用若干所述可运行抽象语法树进行并行匹配计算的单元。

进一步地,所述用于对所获取的过滤规则进行规则编译,以建立可运行抽象语法树的单元包括:

用于对所获取的过滤规则的规则表达式进行分析,以转化为抽象语法树的模块;

用于对所述抽象语法树进行预计算,以获得所述可运行抽象语法树的模块,其中,该模块用于:

根据所述抽象语法树创建运行堆栈,将所述抽象语法树中的元素传入所述运行堆栈中,

当所述元素为操作符时,将操作符对应的两个操作数传出所述运行堆栈,计算以获得计算结果,

用于当所述元素为特殊元素,则将所述特殊元素转换为程序语言数据结构元素后传入所述运行堆栈中。

进一步地,所述用于将所述结构化待过滤数据的数据体作为输入参数,遍历若干所述可运行抽象语法树,并利用若干所述可运行抽象语法树进行并行匹配计算的单元包括:

用于将所述可运行抽象语法树的变量替换为所述数据体中的参数的模块;

用于利用所述运行堆栈对所述可运行抽象语法树进行匹配计算的模块。

进一步地,所述设备还包括:

第五装置,用于新增过滤规则、删除过滤规则或对已有的过滤规则进行修改编译。

进一步地,所述第二装置还包括:

建立根据所述过滤规则的规则名称为索引的所述过滤规则的第二规则列表的单元;

所述第五装置包括:

用于将新增的过滤规则增加至所述第二规则列表中的单元;

用于从所述第二规则列表中删除相应的过滤规则的单元;

用于从所述第二规则列表中查找过滤规则,并对所查找的过滤规则进行修改编译的单元。

进一步地,每一所述过滤规则还包括:所述过滤规则所绑定的通知器 的信息;

所述设备还包括:

第六装置,用于将满足相应所述过滤规则的结构化待过滤数据发送至该过滤规则所绑定的通知器,以备传输。

与现有技术相比,根据本申请一实施例所提供的用于数据过滤的设备及方法采用流式运算方式,不会在内存中缓存也不会固化数据,即每次获取初始待过滤数据后将所述初始待过滤数据转换为结构化待过滤数据,并利用相应的过滤规则实时进行匹配计算,随即得到过滤结果,解决海量流式数据的过滤的实时性问题;

进一步地,根据本申请一实施例所提供的用于数据过滤的设备及方法所述过滤数据的方法和设备支持算术运算,字符串运算,关系运算,逻辑运算,正则表达式运算,集合运算,且预留了扩展接口,并且所述过滤规则为简单的带变量的运算表达式形式,解决了过滤规则描述复杂、扩展不易及管理困难的问题;

此外,本申请根据本申请一实施例所提供的用于数据过滤的设备及方法为自主设计开发,成本相对较低,且在任意代码路径上都可以监控和调优。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出根据本申请一方面提供的一种用于过滤数据的设备的设备示意图;

图2示出根据本申请一优选的实施例提供的一种用于过滤数据的设备的设备示意图;

图3示出根据本申请另一优选的实施例提供的一种用于过滤数据的设备的设备示意图;

图4示出根据本申请一方面提供的一种用于过滤数据的方法流程图;

图5示出根据本申请一优选的实施例提供的一种用于过滤数据的方法 流程图;

图6示出根据本申请另一优选的实施例提供的一种用于过滤数据的方法流程图;

图7示出根据本申请一优选的实施例提供的一种包括所述用于过滤数据设备的系统的设备示意图;

图8至图10示出根据本申请一具体场景中利用所获取的若干过滤规则对所述结构化待过滤数据进行并行匹配运算的示意图。

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

图1示出根据本申请一方面提供的一种用于过滤数据的设备的设备示意图,其中,所述设备1包括:第一装置11、第二装置12、第三装置13和第四装置14。

具体地,所述第一装置11用于获取初始待过滤数据,并将所述初始待过滤数据转换为结构化待过滤数据,其中,所述结构化待过滤数据包括数据领域标识和键-值对格式的数据体;所述第二装置12用于加载过滤规则,其中,每一所述过滤规则包括规则领域标识、规则名称、规则运算表达式,并建立以所述过滤规则的领域标识为索引的所述过滤规则的第一规则列表;所述第三装置13用于获取所述结构化待过滤数据,并根据所述数据领域标识从所述第一规则列表中获取具有与所述数据领域标识相对应的规则领域标识的若干过滤规则;所述第四装置14用于利用所获取的若干过滤规则对所述结构化待过滤数据进行并行匹配运算。

进一步地,所述第一装置11用于获取初始待过滤数据,并将所述初始待过滤数据转换为结构化待过滤数据,其中,所述结构化待过滤数据包括数据领域标识和键-值对格式的数据体在此,所述结构化待过滤数据包括数据领域标识和键-值对格式的数据体。

其中,所述数据领域标识用于表明所述结构化待过滤数据的类别,其中,所述类别例如且不限于:主机的cpu占用率、某网站的访问延迟时 间等,所述数据领域标识可以采用数据或文字等进行标识,此外,任何能够被计算机识别的标识的方式都可以作为所述数据领域标识的实施方式,并以引用的方式包含于此。其中,所述键-值对格式的数据体记录所述结构化待过滤数据的键-值对格式(key-value格式)的详细信息,所述数据体例如(仅为举例,并不限于此):instanceid=ay123456,clusterid=hangzhou,value=92,biztime=1427041923825,unit=percent,其中,每一等号左侧表示键(key),每一等号右侧表示值(value),等号左右两侧的信息组成键-值对格式的数据体,在此,所述数据体所包括的键-对可包括一个或多个,其键-对的数量并不受限制。

优选的,所述初始待过滤数据从海量数据中获取,所述第一装置11还包括:从分布式消息中间件中获取所述初始待过滤数据的单元。所述第一装置11通过分布式消息中间件,优选的,所述分布式消息中间件为metaq(一种分布式消息中间件),metaq是一款分布式、队列模型的消息中间件,metaq具有以下特点:能够保证严格的消息顺序;提供丰富的消息拉取模式,高效的订阅者水平扩展能力,实时的消息订阅机制,亿级消息堆积能力,利用了metaq的集群数据sharding(分片)的特性,可以使多个设备1形成多个功能完全相同的对等节点进行集群,并使使集群具备了负载均衡能力,满足在海量数据背景下的可扩展性,高可用性和性能要求。

优选的,所述第一装置11还可以包括:用于将所述结构化待过滤数据发送至阻塞队列的单元;相应地,所述第三装置13包括从所述阻塞队列中获取所述结构化待过滤数据的单元。

在此,所述阻塞队列能够在队列满的时候阻塞进一步的入队操作直至所述阻塞队列的队列不满。具体地,所述第一装置11将所述结构化待过滤数据发送至阻塞队列,则所述结构化待过滤数据进入阻塞队列等待,所述第三装置13根据所述结构化待过滤数据的等待次序,依此从所述阻塞队列中获取所述结构化待过滤数据,当所述结构化待过滤数据被获取后即从所述阻塞队列删除。在此,所述阻塞队列中等待的结构化待过滤数据占满所述阻塞队列时,所述阻塞队列阻塞所述第一装置11发送过滤数据进 入阻塞队列的操作,从而能够避免处理能力不足时,内存占用过大,从而在海量数据过滤过程中起到削峰填谷的作用,避免处理故障。

进一步地,所述第二装置12用于加载过滤规则,其中,每一所述过滤规则包括:规则领域标识、规则名称及规则运算表达式,并建立以所述过滤规则的领域标识为索引的所述过滤规则的第一规则列表。

在此,所述规则领域标识用于表明所述过滤规则的类别,其中,所述的类别例如且不限于:主机的cpu占用率、某网站的访问延迟时间等,所述规则领域标识可以采用数据或文字等进行标识,此外,任何能够被计算机识别的标识的方式都可以作为所述数据领域标识的实施方式,并以引用的方式包含于此。优选地,所述规则领域标识的内容与所述数据领域标识的内容相同或基本相同,以便所述第三装置13根据所述数据领域标识从所述第一规则列表中获取具有与所述数据领域标识相对应的规则领域标识的若干过滤规则。其中,所述规则名称可以是全局唯一识别的规则名称,以便于过滤规则的管理维护。其中,规则运算表达式可以是数字、字符串形式组成的规则表达式,例如(仅为举例,并不限于此):instanceid='ay123456'||clusterid=hangzhou)&&value>80,规则运算表达式还可以包括非数字、字符串等原生类型组成的数据集合类型,例如(仅为举例,并不限于此):数组、哈希集合等。

进一步地,所述第二装置12建立以所述过滤规则的领域标识为索引的所述过滤规则的第一规则列表,所述第一规则列表用于为第三装置13获取过滤规则提供支持。

进一步地,所述第三装置13获取所述结构化待过滤数据,并根据所述数据领域标识从所述第一规则列表中获取具有与所述数据领域标识相对应的规则领域标识的若干过滤规则。具体地,所述第三装置13根据所述数据领域标识从所述第一规则列表中获取具有与数据领域标识相对应的规则领域标识的若干过滤规则。

进一步地,所述第四装置14利用所获取的若干过滤规则对所述结构化待过滤数据进行并行匹配运算。

优选的,对于每一所述结构化待过滤数据,所述第三装置13根据其 数据领域标识获取若干具有相应相同的规则领域标识的若干过滤规则,则第四装置14利用每一所获取的过滤规则对所述结构化待过滤数据进行一次匹配运算,所述第四装置14对若干所获取的过滤规则进行并行匹配计算,以充分利用多核中央处理器的性能,提高过滤效率。

具体地,所述第四装置14包括:用于对所获取的过滤规则进行规则编译,以建立可运行抽象语法树的单元;和用于将所述结构化待过滤数据的数据体作为输入参数,遍历若干所述可运行抽象语法树,并利用若干所述可运行抽象语法树进行并行匹配计算的单元。

所述第四装置14实现了抽象语法树的功能,能够支持算术运算,字符串运算,关系运算,逻辑运算,正则表达式运算和集合运算等,并预留了扩展接口,可支持用户自定义的运算等。

进一步地,所述第四装置14对所获取的过滤规则进行规则编译,以建立可运行抽象语法树(ast,abstractsyntaxtree),在此,所述抽象语法树是是规则表达式的抽象语法结构的树状表现形式。

具体地,所述用于对所获取的过滤规则进行规则编译、以建立可运行抽象语法树的单元包括:用于对所获取的过滤规则的规则表达式进行分析,以转化为抽象语法树的模块;和用于对所述抽象语法树进行预计算,以获得所述可运行抽象语法树的模块。

具体地,对所获取的过滤规则的规则表达式进行分析,以转化为抽象语法树,可以采用antlr(anothertoolforlanguagerecognition)来实现,能够将用户自定义的过滤规则表达式转化为抽象语法树;通过对规则表达式进行词法分析得到ast的token流,token流(令牌)包括分析识别出的字符串规则各种运算操作符,运算操作符包括但不限于例如:操作符、数字、字符串、变量、正则表达式等。

其中,运算操作符例如包括以下示例代码:

在具体的应用场景中,例如过滤规则的规则表达式为以下字符串形式的内容:

cpu>90/100andclusteridin[‘hz’,’qd’]andinstanceidlike‘ak47\w+’

图8至图10示出根据本申请一具体场景中利用所获取的若干过滤规则对所述结构化待过滤数据进行并行匹配运算的示意图。通过编写antlr词法分析规则,得到如图9所示的asttoken流,并在系统中的保存形式采用运算表达式后缀表示法来解决优先级问题,如图8所示,保存形式为:op:操作符,num:数字,var:变量,regex:正则表达式,strarray:字符串数组。

接着,对所述抽象语法树进行预计算,以获得所述可运行抽象语法树。其中,所述预计算用于将asttoken流中的常量表达式进行预先计算,以判断子表达式是否可计算,并通过预计算检查所述抽象语法树中每个元素是否为特殊类型,将其中的特殊类型的元素转换为程序语言数据结构元素,例如但不限于,将like操作参数元素解释转化为正则表达式,将in操作参数元素解释转化为集合。通过预计算能够将ast中的常量表达式进行预先预算,从而加快运行时处理速度,并特殊类型的元素转化为程序语言数据结构元素,其中,所述特殊类型的元素是非数字、字符串组成的原生类型的元素,例如但不限于数据集合类型,例如但不限于数组、哈希map、哈希集合等。

接上例,在具体的场景中,所述第四装置14对图9所示的所述抽象语法树进行一次预计算,计算结果为可运行抽象语法树(ast),其中,ast的token流如图10所示,其中,“0.9”、“java.util.hashset[‘hz’,‘qd’]”及“java.util.regex.pattern‘ak47\w+’”为经过预计算的计算结果。

在一可选的实施例中,进行预计算的示例代码如下:

当然本领域技术人员应当能够理解,上述示例代码仅为举例,今后可能出现的进行预计算的方法、代码等其他形式,如适用本申请,均能够以引用的方式包含于本申请的保护范围之内。

具体地,用于对所述抽象语法树进行预计算,以获得所述可运行抽象语法树的模块,其中,该模块用于:根据所述抽象语法树创建运行堆栈,将所述抽象语法树中的元素传入所述运行堆栈中,当所述元素为操作符时,将操作符对应的两个操作数传出所述运行堆栈,计算以获得计算结果,用于当所述元素为特殊元素,则将所述特殊元素转换为程序语言数据结构元素后传入所述运行堆栈中。

进一步地,所述第四装置14还包括将所述结构化待过滤数据的数据体作为输入参数,遍历若干所述可运行抽象语法树,并利用若干所述可运行抽象语法树进行并行匹配计算的单元。

利用若干所述可运行抽象语法树进行并行匹配计算运算的过程与一趟预计算相同,在正常情况下运行时ast中的所有表达式均为可计算表达式,所以最终的计算结果是一个确定的值,该值为布尔值false或者true,如果计算结果的布尔值为true,则该结构化数据则判断为满足该过滤规则。

在此,通过利用所述可运行抽象语法树对所述数据进行匹配计算,当本申请所述设备1被分配到了1000个过滤规则,则对于每一所述结构化待过滤数据,在所述设备1的线程池中对这1000个过滤规则并发执行匹配运算,以充分利用多核cpu的性能来并发计算过滤规则。

具体地,所述用于将所述结构化待过滤数据的数据体作为输入参数,遍历若干所述可运行抽象语法树,并利用若干所述可运行抽象语法树进行并行匹配计算的单元包括:用于将所述可运行抽象语法树的变量替换为所述数据体中的参数的模块;用于利用所述运行堆栈对所述可运行抽象语法树进行匹配计算的模块。

其中,将所述可运行抽象语法树的变量替换为所述数据体中的参数的示例代码如下:

利用所述运行堆栈对所述可运行抽象语法树进行匹配计算,其中,对ast每个节点进行处理,并放入运行时栈的示例代码如下:

其中,对ast中的操作符节点进行相应的运算的示例代码如下:

其中,进行匹配计算的示例代码如下:

当然本领域技术人员应当能够理解,上述示例代码仅为举例,今后可能出现的方法、代码等其他形式,如适用本申请,均能够以引用的方式包含于本申请的保护范围之内。

此后,所述设备1可以对该结构化待过滤数据进行进一步处理,例如报警等。

图2示出根据本申请一优选实施例提供的一种用于过滤数据的设备的设备示意图,所述设备1包括:第一装置11’、第二装置12’、第三装置13’、第四装置14’和第五装置15’。

所述第一装置11’、第三装置13’和第四装置14’的内容与图1所示的设备1的第一装置11、第三装置13和第四装置14的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

优选的,所述第二装置12’在引用图1所示的第二装置12的内容的基础上,所述第二装置12’还包括:建立根据所述过滤规则的规则名称为索引的所述过滤规则的第二规则列表的单元;所述第二装置12’按照所述过滤规则的规则领域标识和所述过滤规则的规则名称为两个维度的索引建立第一规则列表和第二规则列表,其中,以所述过滤规则的规则领域标识为索引的第一规则列表供过滤数据时查找,以所述过滤规则的规则名称为索引的第二规则列表供过滤规则的管理和维护时查找。获得所述结构化待过滤数据时,根据数据领域标识匹配查找第一规则列表中的过滤规则,找到对应的过滤规则的列表,并遍历该过滤规则的列表,将格式化待过滤数据的数据体作为输入参数,对列表中的每一规则做并发匹配计算。所述第二规则列表便于对过滤规则进行管理。

所述第五装置15’用于新增过滤规则、删除过滤规则或对已有的过滤规则进行修改编译。

具体地,所述第五装置15’包括用于将新增的过滤规则增加至所述第二规则列表中的单元;用于从所述第二规则列表中删除相应的过滤规则的单元;用于从所述第二规则列表中查找过滤规则,并对所查找的过滤规则进行修改编译的单元。所述第五装置15’能够对过滤规则进行修改和增删操作,提高过滤规则的灵活性。

图3示出根据本申请另一优选实施例提供的一种用于过滤数据的设备的设备示意图,其中,所述设备1包括第一装置11”、第二装置12”、第三装置13”、第四装置14”、第五装置15”和第六装置16”。

其中,所述第一装置11”、第二装置12”、第三装置13”、第四装置14”和第五装置15”与图2所示的设备1的第一装置11’、第二装置12’、第三装置13’、第四装置14’和第五装置15”的内容相同或基本相同,为简明起见,不再赘述,并以引用的方式包含于此。

在此,每一所述过滤规则还包括:所述过滤规则所绑定的通知器的信息;所述第六装置16’用于将满足相应所述过滤规则的结构化待过滤数据发送至该过滤规则所绑定的通知器,以备传输。其中,在此,所述通知器是对预留通知接口的一组实现,可实现自定义的通知方式,比如使用不同的传输协议,不同的压缩算法,不同的序列化算法传输至下游系统集群中不同的系统中。其中,所述通知器可以在过滤规则创建时,即进行自由地组合装配绑定至任意过滤规则。

图4示出根据本申请一方面提供的一种用于过滤数据的方法流程图,其中,所述方法包括:步骤s11、步骤s12、步骤s13和步骤s14。

具体地,所述步骤s11包括:获取初始待过滤数据,并将所述初始待过滤数据转换为结构化待过滤数据,其中,所述结构化待过滤数据包括数据领域标识和键-值对格式的数据体;所述步骤s12包括:加载过滤规则,其中,每一所述过滤规则包括规则领域标识、规则名称、规则运算表达式,并建立以所述过滤规则的领域标识为索引的所述过滤规则的第一规则列表;所述步骤s13包括:获取所述结构化待过滤数据,并根据所述数据领 域标识从所述第一规则列表中获取具有与所述数据领域标识相对应的规则领域标识的若干过滤规则;所述步骤s14包括:利用所获取的若干过滤规则对所述结构化待过滤数据进行并行匹配运算。

进一步地,在所述步骤s11中:获取初始待过滤数据,并将所述初始待过滤数据转换为结构化待过滤数据,其中,所述结构化待过滤数据包括数据领域标识和键-值对格式的数据体在此,所述结构化待过滤数据包括数据领域标识和键-值对格式的数据体。

其中,所述数据领域标识用于表明所述结构化待过滤数据的类别,其中,所述类别例如且不限于:主机的cpu占用率、某网站的访问延迟时间等,所述数据领域标识可以采用数据或文字等进行标识,此外,任何能够被计算机识别的标识的方式都可以作为所述数据领域标识的实施方式,并以引用的方式包含于此。其中,所述键-值对格式的数据体记录所述结构化待过滤数据的键-值对格式(key-value格式)的详细信息,所述数据体例如(仅为举例,并不限于此):instanceid=ay123456,clusterid=hangzhou,value=92,biztime=1427041923825,unit=percent,其中,每一等号左侧表示键(key),每一等号右侧表示值(value),等号左右两侧的信息组成键-值对格式的数据体,在此,所述数据体所包括的键-对可包括一个或多个,其键-对的数量并不受限制。

优选的,所述初始待过滤数据从海量数据中获取,所述步骤s11还包括:从分布式消息中间件中获取所述初始待过滤数据,通过分布式消息中间件,优选的,metaq(一种分布式消息中间件)是一款分布式、队列模型的消息中间件,具有以下特点:能够保证严格的消息顺序;提供丰富的消息拉取模式,高效的订阅者水平扩展能力,实时的消息订阅机制,亿级消息堆积能力,利用了metaq的集群数据sharding(分片)的特性,图7示出根据本申请一优选的实施例提供的一种应用所述用于过滤数据设备的系统的设备示意图,多个设备1形成多个功能完全相同的对等节点进行集群,并使使集群具备了负载均衡能力,满足在海量数据背景下的可扩展性,高可用性和性能要求。

优选的,所述步骤s11还包括:将所述结构化待过滤数据发送至阻塞 队列;相应地,所述步骤s13包括:从所述阻塞队列中获取所述结构化待过滤数据。

在此,所述阻塞队列能够在队列满的时候阻塞进一步的入队操作直至所述阻塞队列的队列不满。具体地,所述步骤s11将所述结构化待过滤数据发送至阻塞队列,则所述结构化待过滤数据进入阻塞队列等待,所述步骤s13根据所述结构化待过滤数据的等待次序,依此从所述阻塞队列中获取所述结构化待过滤数据,当所述结构化待过滤数据被获取后即从所述阻塞队列删除。在此,所述阻塞队列中等待的结构化待过滤数据占满所述阻塞队列时,所述阻塞队列阻塞所述步骤s11发送过滤数据进入阻塞队列的操作,从而能够避免处理能力不足时,内存占用过大,从而在海量数据过滤过程中起到削峰填谷的作用,避免处理故障。

进一步地,在所述步骤s12中,加载过滤规则,其中,每一所述过滤规则包括:规则领域标识、规则名称及规则运算表达式,并建立以所述过滤规则的领域标识为索引的所述过滤规则的第一规则列表。

在此,所述规则领域标识用于表明所述过滤规则的类别,其中,所述的类别例如且不限于:主机的cpu占用率、某网站的访问延迟时间等,所述规则领域标识可以采用数据或文字等进行标识,此外,任何能够被计算机识别的标识的方式都可以作为所述数据领域标识的实施方式,并以引用的方式包含于此。优选地,所述规则领域标识的内容与所述数据领域标识的内容相同或基本相同,以便所述步骤s13根据所述数据领域标识从所述第一规则列表中获取具有与所述数据领域标识相对应的规则领域标识的若干过滤规则。其中,所述规则名称可以是全局唯一识别的规则名称,以便于过滤规则的管理维护。其中,规则运算表达式可以是数字、字符串形式组成的规则表达式,例如(仅为举例,并不限于此):instanceid='ay123456'||clusterid=hangzhou)&&value>80,规则运算表达式还可以包括非数字、字符串等原生类型组成的数据集合类型,例如(仅为举例,并不限于此):数组、哈希集合等。

进一步地,所述步骤s12包括:建立以所述过滤规则的领域标识为索引的所述过滤规则的第一规则列表,其中,所述第一规则列表用于为步骤 s13获取过滤规则提供支持。

进一步地,在所述步骤s13中,获取所述结构化待过滤数据,并根据所述数据领域标识从所述第一规则列表中获取具有与所述数据领域标识相对应的规则领域标识的若干过滤规则。具体地,所述步骤s13根据所述数据领域标识从所述第一规则列表中获取具有与数据领域标识相对应的规则领域标识的若干过滤规则。

进一步地,在所述步骤s14中,利用所获取的若干过滤规则对所述结构化待过滤数据进行并行匹配运算。

优选的,对于每一所述结构化待过滤数据,所述步骤s13根据其数据领域标识获取若干具有相应相同的规则领域标识的若干过滤规则,则步骤s14利用每一所获取的过滤规则对所述结构化待过滤数据进行一次匹配运算,所述步骤s14对若干所获取的过滤规则进行并行匹配计算,以充分利用多核中央处理器的性能,提高过滤效率。

具体地,所述步骤s14包括:对所获取的过滤规则进行规则编译,以建立可运行抽象语法树;将所述结构化待过滤数据的数据体作为输入参数,遍历若干所述可运行抽象语法树,并利用若干所述可运行抽象语法树进行并行匹配计算。

所述步骤s14实现了抽象语法树的功能,能够支持算术运算,字符串运算,关系运算,逻辑运算,正则表达式运算和集合运算等,并预留了扩展接口,可支持用户自定义的运算等。

进一步地,对所获取的过滤规则进行规则编译,以建立可运行抽象语法树(ast,abstractsyntaxtree),在此,所述抽象语法树是是规则表达式的抽象语法结构的树状表现形式。

其中,对所获取的过滤规则进行规则编译,以建立可运行抽象语法树包括:用于对所获取的过滤规则的规则表达式进行分析,以转化为抽象语法树,具体地,可以采用antlr(anothertoolforlanguagerecognition)来实现,能够将用户自定义的过滤规则表达式转化为抽象语法树;通过对规则表达式进行词法分析得到ast的token流,token流(令牌)包括分析识别出的字符串规则各种运算操作符,运算操作符包括但不限于例如: 操作符、数字、字符串、变量、正则表达式等。

其中,运算操作符的示例代码与图1所示设备1的第四装置14转化的抽象语法树的运算操作符的示例代码的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

在具体的应用场景中,例如过滤规则的规则表达式为以下字符串形式的内容:

cpu>90/100andclusteridin[‘hz’,’qd’]andinstanceidlike‘ak47\w+’

通过编写antlr词法分析规则,得到如图9所示的asttoken流,并在系统中的保存形式采用运算表达式后缀表示法来解决优先级问题,如图8所示,保存形式为:op:操作符,num:数字,var:变量,regex:正则表达式,strarray:字符串数组。

接着,对所述抽象语法树进行预计算,以获得所述可运行抽象语法树。其中,所述预计算用于将asttoken流中的常量表达式进行预先计算,以判断子表达式是否可计算,并通过预计算检查所述抽象语法树中每个元素是否为特殊类型,将其中的特殊类型的元素转换为程序语言数据结构元素,例如但不限于,将like操作参数元素解释转化为正则表达式,将in操作参数元素解释转化为集合。通过预计算能够将ast中的常量表达式进行预先预算,从而加快运行时处理速度,并特殊类型的元素转化为程序语言数据结构元素,其中,所述特殊类型的元素是非数字、字符串组成的原生类型的元素,例如但不限于数据集合类型,例如但不限于数组、哈希map、哈希集合等。

接上例,在具体的场景中,对图9所示的所述抽象语法树进行一次预计算,计算结果为可运行抽象语法树(ast),其中,ast的token流如图10所示,其中,“0.9”、“java.util.hashset[‘hz’,‘qd’]”及“java.util.regex.pattern‘ak47\w+’”为经过预计算的计算结果。

进行预计算的示例代码可以与图1所示第四装置14进行预计算的示例代码的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

具体地,对所述抽象语法树进行预计算包括:

根据所述抽象语法树创建运行堆栈,将所述抽象语法树中的元素传入所述运行堆栈中;当所述元素为操作符时,将操作符对应的两个操作数传出运行堆栈,计算以获得计算结果;当所述元素为特殊元素,则将所述特殊元素转换为程序语言数据结构元素后传入运行堆栈中。

进一步地,将所述结构化待过滤数据的数据体作为输入参数,遍历若干所述可运行抽象语法树,并利用若干所述可运行抽象语法树进行并行匹配计算的过程,利用若干所述可运行抽象语法树进行并行匹配计算运算的过程与一趟预计算相同,在正常情况下运行时ast中的所有表达式均为可计算表达式,所以最终的计算结果是一个确定的值,该值为布尔值false或者true,如果计算结果的布尔值为true,则该结构化数据则判断为满足该过滤规则。

在此,所述利用若干所述可运行抽象语法树进行并行匹配计算通过利用所述可运行抽象语法树对所述数据进行匹配计算,例如,当本申请所述设备1被分配到了1000个过滤规则,则对于每一所述结构化待过滤数据,在所述设备1的线程池中对这1000个过滤规则并发执行匹配运算,以充分利用多核cpu的性能来并发计算过滤规则。

具体地,利用若干所述可运行抽象语法树进行并行匹配计算包括:将所述可运行抽象语法树的变量替换为所述数据体中的参数;利用所述运行堆栈对所述可运行抽象语法树进行匹配计算。

将所述可运行抽象语法树的变量替换为所述数据体中的参数的示例代码与所述图1中的设备1的第四装置14替换示例代码的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

对ast中的操作符节点进行相应的运算的示例代码与所述图1中的设备1的第四装置14进行相应的运算的示例代码的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

同样地,进行匹配计算与所述图1中的设备1的第四装置14进行匹配计算的示例代码的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

此后,所述方法还可以对该结构化待过滤数据进行进一步处理,例如 报警等。

图5示出根据本申请一优选实施例提供的一种用于过滤数据的方法流程示意图,所述方法包括:步骤s11’、步骤s12’、步骤s13’、步骤s14’和步骤s15’。

所述步骤s11’、步骤s13’和步骤s14’的内容与图4所示的步骤s11、步骤s12和步骤s14的内容相同或基本相同,为简明起见,不再赘述,仅以引用的方式包含于此。

优选的,所述步骤s12’在引用图4所示的步骤s12的内容的基础上,所述步骤s12’还包括:建立根据所述过滤规则的规则名称为索引的所述过滤规则的第二规则列表;所述步骤s12’按照所述过滤规则的规则领域标识和所述过滤规则的规则名称为两个维度的索引建立第一规则列表和第二规则列表,其中,以所述过滤规则的规则领域标识为索引的第一规则列表供过滤数据时查找,以所述过滤规则的规则名称为索引的第二规则列表供过滤规则的管理和维护时查找。获得所述结构化待过滤数据时,根据数据领域标识匹配查找第一规则列表中的过滤规则,找到对应的过滤规则的列表,并遍历该过滤规则的列表,将格式化待过滤数据的数据体作为输入参数,对列表中的每一规则做并发匹配计算。所述第二规则列表便于对过滤规则进行管理。

在所述步骤s15’中,新增过滤规则、删除过滤规则或对已有的过滤规则进行修改编译。

具体地,所述步骤s15’包括以下至少任一项:将新增的过滤规则增加至所述第二规则列表中;从所述第二规则列表中删除相应的过滤规则;从所述第二规则列表中查找过滤规则,并对所查找的过滤规则进行修改编译,所述步骤s15’能够对过滤规则进行修改和增删操作,提高过滤规则的灵活性。

图6示出根据本申请另一优选实施例提供的一种用于过滤数据的方法流程图,其中,所述方法包括步骤s11”、步骤s12”、步骤s13”、步骤s14”、步骤s15”和步骤s16”。

其中,所述步骤s11”、步骤s12”、步骤s13”、步骤s14”和步 骤s15”与图5所示的步骤s11’、步骤s12’、步骤s13’、步骤s14’和步骤s15”的内容相同或基本相同,为简明起见,不再赘述,并以引用的方式包含于此。

在此,每一所述过滤规则还包括:所述过滤规则所绑定的通知器的信息;在所述步骤s16’中,将满足相应所述过滤规则的结构化待过滤数据发送至该过滤规则所绑定的通知器,以备传输。在此,所述通知器是对预留通知接口的一组实现,可实现自定义的通知方式,比如使用不同的传输协议,不同的压缩算法,不同的序列化算法传输至下游系统集群中不同的系统中。其中,所述通知器可以在过滤规则创建时,即进行自由地组合装配绑定至任意过滤规则。

与现有技术相比,根据本申请一实施例所提供的用于数据过滤的设备及方法采用流式运算方式,不会在内存中缓存也不会固化数据,即每次获取初始待过滤数据后将所述初始待过滤数据转换为结构化待过滤数据,并利用相应的过滤规则实时进行匹配计算,随即得到过滤结果,解决海量流式数据的过滤的实时性问题;

进一步地,根据本申请一实施例所提供的用于数据过滤的设备及方法所述过滤数据的方法和设备支持算术运算,字符串运算,关系运算,逻辑运算,正则表达式运算,集合运算,且预留了扩展接口,并且所述过滤规则为简单的带变量的运算表达式形式,解决了过滤规则描述复杂、扩展不易及管理困难的问题;

此外,本申请根据本申请一实施例所提供的用于数据过滤的设备及方法为自主设计开发,成本相对较低,且在任意代码路径上都可以监控和调优。

经多次性能测试,得到的性能指标大致为在单台4核8g配置的虚拟机可以支撑50万过滤规则,处理流式数据tps达到20000,过滤出有效数据tps达到2000,系统平均负载稳定在load1-4左右,cpu资源得到了有效利用。

在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。内存可能 包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1