一种复杂数据匹配方法及介质组成比例

技术编号:24205213 阅读:18 留言:0更新日期:2020-05-20 14:22
本发明专利技术公开了一种复杂数据匹配方法及介质,该方法包括将语法规则解析成语法树;将语法树进行缓存;将待匹配数据传入语法树进行匹配得到匹配结果。本发明专利技术利用多叉树结构解耦复杂数据之间的耦合关系,使得程序不需要一次处理所有业务逻辑,而只需要关注当前访问数据节点逻辑,将复杂的逻辑转变为多个简单逻辑的组合,从而极大的降低了业务复杂度。

A complex data matching method and medium

【技术实现步骤摘要】
一种复杂数据匹配方法及介质
本专利技术属于语法解析技术,具体为一种复杂数据匹配方法及介质。
技术介绍
目前,针对复杂数据进行匹配的方法包括基于业务数据的向定制开发、利用基于Java语言的软件开发工具包的Javascript计算引擎、利用Drools、URule开源的决策引擎、利用EL表达式引擎完成数据匹配,上述方法各具特色,但仍存在一定的问题:1、基于业务数据的向定制开发:在数据结构简单、类型单一、稳定性高的业务场景下比较适合,但是对于当前项目数据结构复杂多变,数据量庞大的场景下,该方案无法满足场景要求的可扩展性、可维护性以及执行效率;2、基于Java语言的软件开发工具包的Javascript计算引擎:Javascript计算引擎是Java软件开发工具包自带的计算引擎,支持Javascript的语法规则,学习、开发门槛低;但经过亿万级别的数据测试,发现其性能只有Java的二分之一到三分之一之间,而且Javascript语法对没有相关技术背景的业务方来说非常不友好;3、Drools、URule开源的决策引擎:Drools和URule是比较优秀开源的业务决策引擎,对复杂的业务场景可以扩展出丰富的策略规则;但是对两种框架做性能测试时发现性能在千万、亿万级数据性能比较低下,并且规则更倾向于业务规则,对业务方同样不友好;4、FEL表达式引擎:FEL表达式引擎是轻量高效的表达式计算引擎,并且在大数据量的测试中也有不错的表现;但是FEL表达式引擎支持表达式有限,并且扩展功能也不太适合当前的业务场景。
技术实现思路
本专利技术的目的在于提出了一种复杂数据匹配方法。实现本专利技术目的的技术解决方案为:一种复杂数据匹配方法,具体步骤为:将语法规则解析成语法树;将语法树进行缓存;将待匹配数据传入语法树进行匹配得到匹配结果。优选地,所述语法规则为数据匹配规则。优选地,将语法规则解析成语法树的具体方法为:将语法规则表达式转换成字符数组;依次递归解析字符数组并生成对应类型节点,直至叶子节点,当解析完成所有的叶子节点,结束语法树的解析过程。优选地,解析字符数组的具体方法为:从左向右解析字符数组,将字符与定义的不同类型字符标签进行匹配,如果匹配上,则分配该语法规则至该类型字符标签对应的自定义语法解析类生成对应语法类型节点。优选地,所述语法类型节点包括分支类型节点、逻辑类型节点、关系类型节点、数学表达式类型节点。优选地,所述语法类型节点预先设定为语法树的叉或节点。优选地,所述叶子节点包括定义的不可在划分的操作符、参数编号、数学表达式节点。优选地,将语法树进行缓存的具体方法为:获取语法树;根据语法编号判断缓存中是否存在语法编号对应的语法规则,如果不存在,则将语法树写入缓存;如果存在,根据语法编号判断操作类型;如果操作类型为在使用,则比较缓存中对应语法编号的语法规则的版本号,如果版本号不同则在缓存中更新该语法规则;如果操作类型为废弃,则将该语法规则从缓存中删除。优选地,将待匹配数据传入语法树进行匹配得到匹配结果的具体方法为:从语法树的根节点开始访问语法树,当访问语法树的节点时,判断当前节点是否为叶子节点;如果当前节点非叶子节点并且当前节点存在下级节点,则先向下递归匹配直至叶子节点;根据匹配的节点类型调用对应的匹配方法,得到匹配结果,保存至当前节点。本专利技术与现有技术相比,其显著优点为:本专利技术利用多叉树结构解耦复杂数据之间的耦合关系,使得程序不需要一次处理所有业务逻辑,而只需要关注当前访问数据节点逻辑,将复杂的逻辑转变为多个简单逻辑的组合,从而极大的降低了业务复杂度;本专利技术提供可扩展语法规则方案,提升后期业务语法规则扩展性,可以通过本专利技术提供的解析和计算接口,自定义扩展语法规则,减少后期业务扩展工作量;本专利技术采用缓存机制,将解析与计算分离,减少大数据量相同语法匹配时间,提升运算效率。下面结合附图对本专利技术做进一步详细的描述。附图说明图1是解析语法树流程图。图2是解析树示意图。图3是缓存机制示意图。图4是树状结构示意图。图5是节点递归示意图。具体实施方式一种复杂数据匹配方法,具体步骤为:将语法规则解析成语法树,所述语法规则即匹配规则;在某些实施例中,将设定的语法规则表达式转换成字符数组;从左向右解析字符数组,将字符与定义的不同类型字符标签进行匹配,如果与其中的某个类型标签匹配,则分配该语法规则至该类型标签对应的自定义语法解析类生成对应语法类型节点,所述语法类型节点预先设定为语法树的叉或节点;按照此方法依次递归解析字符数组并生成对应类型节点,直至叶子节点,当所有的叶子节点解析完成,整个语法树的解析过程结束。如图1所示,在某些实施例中,定义的语法规则表达式为:((1<2)&&(2<3)),本实施例中,将语法规则解析成语法树的具体过程为:将语法规则转换为图1所示字符数组,依次从左向右读取字符,读取到左小括号‘(’时,根据定义的语法规则会找到对应的右小括号‘)’,交给分支语法解析类处理,将其定义为分支类型节点;继续迭代解析“(1<2)&&(2<3)”,同样的找到“(1<2)”分支节点,操作符“&&”和“(2<3)”分支节点,发现“(1<2)&&(2<3)”满足“表达式&&表达式”的结果,交给逻辑解析类处理,定义(1<2)&&(2<3)为逻辑类型节点;分别迭代解析“(1<2)”和“(2<3)”,发现1<2满足“表达式<、<=、>、>=、==表达式”其中的一种,则交给关系解析类处理,将其定义为关系类型节点,“(2<3)”同样流程;继续迭代,到1、2、2、3数字,发现为数字类型即不可再划分的类型,则将其定义为叶子节点类型,并结束迭代;最终将这个语法规则表达式解析成如图1的树状结构;将语法树进行缓存。缓存过程避免语法树重复解析,特别在大数据量的情况下,重复解析尤为浪费性能,所以将解析好的语法树先刷入缓存,进行语法树计算时直接通过语法编号查询得到先前解析的语法树做计算;如图3所示,在某些实施例中,周期地从数据库中获取配置的语法规则,根据语法编号判断缓存中是否存在语法编号对应的语法规则,如果不存在,则将语法规则写入缓存;如果存在,根据语法编号判断操作类型,所述操作类型包含在使用、废弃等操作;如果操作类型为在使用,则比较缓存中对应语法编号的语法规则的版本号,如果版本号不同则在缓存中更新该语法规则;如果操作类型为废弃,则将该语法规则从缓存中删除;本文档来自技高网
...

【技术保护点】
1.一种复杂数据匹配方法,其特征在于,具体步骤为:/n将语法规则解析成语法树;/n将语法树进行缓存;/n将待匹配数据传入语法树进行匹配得到匹配结果。/n

【技术特征摘要】
1.一种复杂数据匹配方法,其特征在于,具体步骤为:
将语法规则解析成语法树;
将语法树进行缓存;
将待匹配数据传入语法树进行匹配得到匹配结果。


2.根据权利要求1所述的复杂数据匹配方法,其特征在于,所述语法规则为数据匹配规则。


3.根据权利要求1所述的复杂数据匹配方法,其特征在于,将语法规则解析成语法树的具体方法为:
将语法规则表达式转换成字符数组;
依次递归解析字符数组并生成对应类型节点,直至叶子节点,当解析完成所有的叶子节点,结束语法树的解析过程。


4.根据权利要求3所述的复杂数据匹配方法,其特征在于,解析字符数组的具体方法为:
从左向右解析字符数组,将字符与定义的不同类型字符标签进行匹配,如果匹配上,则分配该语法规则至该类型字符标签对应的自定义语法解析类生成对应语法类型节点。


5.根据权利要求3所述的复杂数据匹配方法,其特征在于,所述语法类型节点包括分支类型节点、逻辑类型节点、关系类型节点、数学表达式类型节点。


6.根据权利要求3所述的复杂数据匹配方法,其特征在于,所述语法类型节点预先设定为语法树的叉或节点。


7....

【专利技术属性】
技术研发人员:葛振宇王刚
申请(专利权)人:苏宁云计算有限公司
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1