数据处理方法及系统
技术领域
本发明涉及计算机领域,尤其涉及一种数据处理方法及系统。
背景技术
随着电子商务业务的发展,会遇到如下两个问题:(1)业务的规则和分支越来越复杂,不同类型的规则有不同的执行顺序,多个分支如何选择等问题,靠代码中的if else指令来维护是一个非常棘手的问题,因为分支越来越多,如何让分支按指定顺序执行,多个分支如何决策,会使指令if else逻辑非常复杂,对于在嵌套的业务上容易执行出错;(2)业务发展速度快,业务分支逻辑处理硬编码,稳定的日常需求迭代无法快速响应业务变更,会影响业务正常运行和发展,频繁变更系统并上线运行成本高,而且影响系统的稳定性,系统迭代变更无法满足业务需求灵活发展,业务人员对相关的分支逻辑处理是黑盒,不易于业务维护。
现有技术中,是采用规则引擎Drools,是解决应用程序业务逻辑的开发和维护的框架,对复杂的业务分支逻辑和后续处理一种声明式配置,将java代码直接嵌入到规则文件中,来满足业务的发展。规则引擎将业务决策也从程序代码中抽离出来,实现规则变化和配置,每次发布规则都要根据模板重新编译一个规则引擎文件,并加载到内存中。
但是随着业务发展,业务中规则越来越多,分支规则逐渐增多,无法根据业务场景进行分组管理,每次分析数据时,所有的规则都得运行,系统运行效率越来越低,耗时。因此传统的drools无法满足不断增长的业务需求,业务发展出现瓶颈,耗费系统资源,成本高。
发明内容
本发明的目的是提供一种数据处理方法及系统,以解决现有技术中存在的无法满足不断增长的业务需求、耗费资源、效率低和成本高等问题。
为实现上述目的,一方面,本发明提供了一种数据处理方法,所述方法包括:接收客户端发送的事件,所述事件包括数据;将所述数据输入至规则树中进行分析,所述规则树包括多个节点,所述节点包含有规则集合;将所述规则树的节点输入至队列;判断所述队列是否存在节点;当所述队列存在节点时,获取队列中的第一节点为当前节点,并将所述当前节点的规则集合输入至待筛选集合;判断所述当前节点是否包括子节点;当所述当前节点包括子节点时,获取满足条件的子节点;将所述满足条件的子节点输入至所述队列。
另一方面,本发明提供了一种数据处理系统,所述系统包括:接收单元,用于接收客户端发送的事件,所述事件包括数据;分析单元,用于将所述数据输入至规则树中进行分析,所述规则树包括多个节点,所述节点包含有规则集合;输入单元,用于将所述规则树的节点输入至队列;第一判断单元,用于判断所述队列是否存在节点;处理单元,用于当所述队列存在节点时,获取队列中的第一节点为当前节点,并将所述当前节点的规则集合输入至待筛选集合;第二判断单元,用于判断所述当前节点是否包括子节点;获取单元,用于当所述当前节点包括子节点时,获取满足条件的子节点;所述输入单元还用于将所述满足条件的子节点输入至所述队列。
本发明实施例提供的数据处理方法,将数据输入至规则树中进行分析,将规则树的节点输入至队列,以筛选出满足场景的规则的数据,提高了系统的稳定性和扩展性,避免受到业务增长带来的影响,有利于业务的发展;当队列存在节点时,将当前节点的规则集合输入至待筛选集合,当当前节点包括子节点时,获取满足条件的子节点,将满足条件的子节点输入至队列,缩小了数据规则集合,避免浪费资源,节省成本,提高了系统的运行效率。
附图说明
图1为本发明实施例一提供的数据处理方法流程图;
图2为本发明实施例一提供的规则树示意图;
图3为本发明实施例二提供的数据处理方法具体流程图;
图4为本发明实施例三提供的数据处理系统示意图。
具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
本发明实施例中提供的数据处理方法,首先获取客户端发送的事件,然后通过规则树筛选出要运行的待筛选规则集合,再运行规则引擎时调用待筛选规则集合。该方法是规则引擎运行前置,在规则引擎运行前,加入规则预筛选优化,缩小规则运行集合,对业务发展中的规则逐渐增加对系统带来的稳定性影响大大降低,系统运行性能有较大提升。解决了传统drools支持大规模规则运行能力有限的问题。通过规则树对规则集合进行建模,并通过广度优先遍历筛选待运行规则集合,对业务规则管理和规则引擎运行优化,使业务人员对规则管理更便捷,规则引擎运行更稳定。调用规则引擎指定规则运行,规则引擎可快速找到规则进行运行,得到规则条件的值,相比drools加载规则文件逐个遍历的运行流程,性能有较高程度提升。
本发明实施例提供的数据处理方法,通过公共的JAVA规则引擎平台,以JAVA脚本实现规则逻辑运算,及灵活的配置管理页面,使业务可以灵活配置规则,同时在规则引擎中引入规则路由来预先筛选规则,以过滤不需要运行的规则以提高规则引擎运行效率,另外使业务上对整个规则有清晰的概览,方便对整个规则集合的运营把控。通过采用规则树结构对规则进行分层分类建模,同时对规则树结构进行改进,在规则树的父节点和子节点连接边上增加条件,以此条件作为广度优先遍历判断节点是否满足边条件,如果满足,则将节点中的规则集合放入待筛选规则集合,从而对规则树进行广度优先遍历,得到筛选后的规则集合。
实施例一
下面以图1为例详细说明本发明实施例一提供的数据处理方法,图1为本发明实施例一提供的数据处理方法流程图,在本发明实施例中实施主体可以为服务器,也可以为客户端,或执行本发明方法所描述的步骤中的插件或者组件。如图1所示,该方法包括如下步骤:
步骤101、接收客户端发送的事件,所述事件包括数据。
这里的客户端可以是支付宝客户端、淘宝客户端或电子邮件客户端等。
这里的事件可以是交易事件或登录事件,或者是进行规则监控的操作事件。
执行主体除了可以为服务器,还可以为客户端,或者是执行本发明方法所描述的步骤中的插件或者组件,具体地可以是规则引擎中的组件。组件接收客户端发送的事件,所述事件包括业务数据。
例如:用户在支付宝客户端登录支付宝,产生一个登录事件,规则引擎中的组件接收客户端发送的登录事件,该登录事件可以包括登录的账号、时间和地点等等数据。
步骤102、将所述数据输入至规则树中进行分析。
所述规则树包括多个节点,所述节点包含有规则集合。规则树中的节点与节点之间由边来连接,每个节点之间的边都定义了规则路由的业务边条件,具体参见图2所示的规则树。
规则树是针对业务场景组织的监控树的框架,可以根据不同场景粒度对场景进行分层管理,便于整个规则集合的维护,方便管理业务的规则集合,对业务规则的监控有整体的控制。树的结构中各个节点可以按业务场景命名,然后针对整个规则集合N进行划分,将规则放在场景节点,规则可以放在多个分组中,分组后的各个子集NX组成了规则的全集N,N={N1,N2,N3,N4,…},Nx是规则树的各个节点包含的规则集合,节点如A,B,C,D,…。
可选地,节点还包括号码ID,用以查找节点的子节点。
每个场景节点中除了有其规则集合,还需要节点ID,父节点到该节点的边条件,ID用于查找节点的子节点,用于在广度优先遍历规则树时,运行条件判断节点到子节点是否可达。
下面描述的是规则树的结构,以及规则树中节点的结构:
(1)规则树结构:
MonitorTree:
riskThemeId:场景ID
rootNode:MonitorTreeNode类型的根节点
childrenNodeMap:Map<String,Map<String,MonitorTreeNode>>类型的nodeId对应的叶子节点ID。
(2)节点结构:
MonitorTreeNode:
ruleUuid:父节点到该节点的边条件ID
nodeId:节点ID
参见图2的规则树,节点A是节点B的父节点,节点D、节点E和节点F是节点B的子节点。假设节点A的规则集合为{A1,A2,A3},B的规则集合为{B1,B2},C的规则集合为{C1,C2},D的规则集合为{D1,D2,D3,D4},E的规则集合为{E1,E2,E3},F的规则集合为{F1,F2,F3},J的规则集合为{J1,J2},K的规则集合为{K1,K2},A-B的边规则条件为ruleAB,A-C的边规则条件为ruleAC,B-D的边规则条件为ruleBD,B-E的边规则条件为ruleBE,B-E的边规则条件为ruleBE,D-J的边规则条件为ruleDJ,D-K的边规则条件为ruleDK。
步骤103、将所述规则树的节点输入至队列;
可选地,所述队列为先入先出队列。
具体地,先输入到队列中的节点先输出。
例如,将规则树的节点A放入FIFO(First In First Out)队列Queue中,此时Queue={A}。
步骤104、判断所述队列是否存在节点;
例如,当Queue={A}时,判断该队列存在节点;当时,判断该队列不存在节点。
步骤105、当所述队列存在节点时,获取队列中的第一节点为当前节点,并将所述当前节点的规则集合输入至待筛选集合;
当队列存在节点时,例如此时Queue={A},根据FIFO队列的特点,此时输出的节点为节点A,获取队列中的第一节点A为当前节点,并将所述第一节点A的规则集合{A1,A2,A3}输入至待筛选集合Waiting Rule Set,假设待筛选集合初始为空集,则此时Waiting RuleSet={A1,A2,A3}。
可选地,当所述队列不存在节点时,输出待筛选集合。
当所述队列不存在节点时,此时的直接输出待筛选集合。
步骤106、判断所述当前节点是否包括子节点;
例如:节点A包括子节点B和子节点C,节点D包括子节点J和子节点K;而节点J没有子节点。所以当前节点为节点A时,判断当前节点包括子节点,当前节点为J时,判断当前节点不包括子节点。
步骤107、当所述当前节点包括子节点时,获取满足条件的子节点;
例如,当前节点为节点A时,又节点A包括子节点B和子节点C,运行ruleAB和ruleAC,获取满足条件的子节点B。
进一步地,当所述当前节点包括子节点时,获取满足条件的子节点具体包括:
步骤1071、获取所述当前节点包括的所述子节点,及从所述当前节点到达所述子节点的条件集合;
例如,获取所述当前节点A包括的子节点B和子节点C,及从所述当前节点A到达所述子节点B和子节点C的条件集合R,R={ruleAB,ruleAC}。
步骤1072、运行所述条件集合,得到运行成功的所有条件集合;
例如,运行条件集合R={ruleAB,ruleAC},得到运行成功的所有条件集合{ruleAB}。
步骤1073、获取所述条件集合对应的满足条件的子节点。
获取第一条件集合{ruleAB}对应的满足条件的子节点B。
可选地,当所述当前节点不包括子节点时,判断所述队列是否存在节点。即循环执行步骤104。
步骤108、将所述满足条件的子节点输入至所述队列。循环执行步骤104。
将满足条件的子节点B输入至队列,此时Queue={B}。循环执行步骤104,判断所述队列是否存在节点。
此时队列存在节点B,获取队列中的第一节点B为当前节点,并将所述第一节点B的规则集合{B1,B2},输入至待筛选集合。此时Waiting Rule Set={A1,A2,A3,B1,B2}。
判断所述当前节点B是否包括子节点,当前节点B包括子节点D,E,F。
当所述当前节点B包括子节点时,获取满足条件的子节点。
具体地,获取节点B的子节点D,E,F,运行节点B到子节点D,E,F的条件集合R,R={ruleBD,ruleBE,ruleBF},获取运行成功的ruleBD对应的满足条件的子节点D,将所述满足条件的子节点D输入至所述队列。此时Queue={D}。再循环执行步骤104,判断所述队列是否存在节点。
此时队列存在节点D,获取队列中的第一节点D为当前节点,并将所述第一节点D的规则集合{D1,D2,D3,D4},输入至待筛选集合。此时Waiting Rule Set={A1,A2,A3,B1,B2,D1,D2,D3,D4}。
判断所述当前节点D是否包括子节点,当前节点D包括子节点J,K。
当所述当前节点D包括子节点时,获取满足条件的子节点。
获取运行成功的ruleDJ对应的满足条件的子节点J,将所述满足条件的子节点J输入至所述队列。此时Queue={J}。循环执行步骤104,判断所述队列是否存在节点。
获取队列中的第一节点J为当前节点,并将所述第一节点J的规则集合{J1,J2},输入至待筛选集合。此时Waiting Rule Set={A1,A2,A3,B1,B2,D1,D2,D3,D4,J1,J2}。
判断当前节点J不包括子节点,且判断队列不存在节点,则直接输出待筛选集合Waiting Rule Set={A1,A2,A3,B1,B2,D1,D2,D3,D4,J1,J2}。
本发明实施例提供的数据处理方法,将数据输入至规则树中进行分析,将规则树的节点输入至队列,以筛选出满足场景的规则的数据,提高了系统的稳定性和扩展性,避免受到业务增长带来的影响,有利于业务的发展;当队列存在节点时,将当前节点的规则集合输入至待筛选集合,当当前节点包括子节点时,获取满足条件的子节点,将满足条件的子节点输入至队列,缩小了数据规则集合,避免浪费资源,节省成本,提高了系统的运行效率。
实施例二
下面以图3为例详细说明本发明实施例二提供的数据处理方法,图3为本发明实施例二提供的数据处理方法具体流程图,在本发明实施例中实施主体可以为服务器,或执行本发明方法所描述的步骤中的插件或者组件。如图3所示,该方法具体包括如下步骤:
步骤301、接收客户端发送的事件。
事件包括数据。
步骤302、将数据输入至规则树中进行分析。
规则树包括多个节点,节点包含有规则集合。
步骤303、将规则树的节点输入至队列。
步骤304、判断队列是否存在节点。当队列不存在节点时,执行步骤305;当队列存在节点时,执行步骤306。
步骤305、输出待筛选集合。
步骤306、获取队列中的第一节点为当前节点,并将当前节点的规则集合输入至待筛选集合。
步骤307、判断当前节点是否包括子节点。当所述当前节点不包括子节点时,转步骤304;当所述当前节点包括子节点时,执行步骤308。
步骤308、获取当前节点包括的子节点,及从当前节点到达子节点的条件集合;
步骤309、运行条件集合,得到运行成功的所有条件集合。
步骤310、获取条件集合对应的满足条件的子节点。
步骤311、将满足条件的子节点输入至队列。转步骤304。
本发明实施例提供的数据处理方法,将数据输入至规则树中进行分析,将规则树的节点输入至队列,以筛选出满足场景的规则的数据,提高了系统的稳定性和扩展性,避免受到业务增长带来的影响,有利于业务的发展;当队列存在节点时,将当前节点的规则集合输入至待筛选集合,当当前节点包括子节点时,获取满足条件的子节点,将满足条件的子节点输入至队列,缩小了数据规则集合,避免浪费资源,节省成本,提高了系统的运行效率。
实施例三
与本申请实施例一提供的数据处理方法相对应,本申请实施例三还提供了一种数据处理系统,该系统可以是服务器也可以是客户端,参见图4,该系统具体可以包括:接收单元401、分析单元402、输入单元403、第一判断单元404、处理单元405、第二判断单元406、获取单元407。
接收单元401,用于接收客户端发送的事件,所述事件包括数据;
分析单元402,用于将所述数据输入至规则树中进行分析,所述规则树包括多个节点,所述节点包含有规则集合;
输入单元403,用于将所述规则树的节点输入至队列;
第一判断单元404,用于判断所述队列是否存在节点;
处理单元405,用于当所述队列存在节点时,获取队列中的第一节点为当前节点,并将所述当前节点的规则集合输入至待筛选集合;
第二判断单元406,用于判断所述当前节点是否包括子节点;
获取单元407,用于当所述当前节点包括子节点时,获取满足条件的子节点;
所述输入单元403还用于将所述满足条件的子节点输入至所述队列。
所述系统还可以包括:
输出单元,用于当所述队列不存在节点时,输出待筛选集合。
所述获取单元407具体用于:
获取所述当前节点包括的所述子节点,及从所述当前节点到达所述子节点的条件集合;
运行所述条件集合,得到运行成功的所有条件集合;
获取所述条件集合对应的满足条件的子节点。
所述第二判断单元406,还用于当所述当前节点不包括子节点时,判断所述队列是否存在节点。
本发明实施例提供的数据处理系统,将数据输入至规则树中进行分析,将规则树的节点输入至队列,以筛选出满足场景的规则的数据,提高了系统的稳定性和扩展性,避免受到业务增长带来的影响,有利于业务的发展;当队列存在节点时,将当前节点的规则集合输入至待筛选集合,当当前节点包括子节点时,获取满足条件的子节点,将满足条件的子节点输入至队列,缩小了数据规则集合,避免浪费资源,节省成本,提高了系统的运行效率。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。