具体实施方式
为了实现本申请的目的,本申请实施例提供了一种规则处理方法和设备,获取待处理的规则,并确定所述待处理的规则中包含的每一个执行条件的执行效能,所述执行效能用于表征执行条件的运行收益;将所述待处理的规则解析成一棵二叉分析树,所述二叉分析树的叶子节点为所述规则中包含的执行条件;根据每一个所述执行条件的执行效能和所述二叉分析树的结构,确定所述待处理的规则的规则执行策略;根据所述规则执行策略和短路逻辑运算规则,对所述待处理的规则进行分析,得到分析结果。这样,在规则分析阶段,将规则表达式转换成为二叉分析树,并基于该二叉分析树构建规则执行策略,进而基于该执行策略和短路逻辑运算规则对于规则进行分析,有效缩短了规则分析时间,提高规则分析效率,进而减少规则分析阶段的系统资源消耗,有效提升系统性能。
下面结合说明书附图对本申请各个实施例作进一步地详细描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种规则处理方法的流程示意图。所述方法可以如下所示。
步骤101:获取待处理的规则,并确定所述待处理的规则中包含的每一个执行条件的执行效能。
其中,所述执行效能用于表征执行条件的运行收益。
在步骤101中,本申请实施例研究的对象为由若干个执行条件通过逻辑比较符(例如:and或者or)连接组成的规则,又可以称为规则表达式。例如:待处理的规则的表达式为(A and B)or C and(E or F),其中,A、B、C、D、E和F为该规则的表达式中的执行条件。那么如何快速地完成对该规则的分析是本申请所要解决的问题。
首先,获取一条待处理的规则;其次,对于获取到的待处理的规则,确定所述待处理的规则中包含的每一个执行条件的执行效能。
本申请实施例中所记载的执行条件的执行效能可以是指表征执行条件的运行收益,例如:运行该执行条件所消耗的系统资源、系统执行该执行条件所消耗的时间等等,执行效能属于执行条件的静态属性,可以在执行条件运行时收集得到。运行收益不同的执行条件,所对应的执行效能也不同,一般地,运行收益比较大的执行条件对应的执行效能比较高,例如:执行条件在运行时所消耗的系统资源较多,说明该执行条件的运行收益较小,对应的该执行条件的执行效能较低;反之,执行条件在运行时所消耗的系统资源较少,说明该执行条件的运行收益较大,对应的该执行条件的执行效能较高。
下面以执行条件的执行时间为例说明如何确定所述待处理的规则中包含的每一个执行条件的执行效能。
首先,针对所述待处理的规则中包含的每一个执行条件,分别计算每一个执行条件的平均执行时间;
其次,根据每一个执行条件的平均执行时间,分别确定各个所述执行条件的执行效能。
具体地,针对所述待处理的规则中包含的每一个执行条件,执行以下操作:
选择其中一个执行条件,查找该执行条件的历史执行记录中包含的该执行条件每一次执行的执行时间;
根据查找到的执行时间,计算得到该执行条件的平均执行时间;
根据计算得到的平均执行时间,得到该执行条件的执行效能。
需要说明的是,平均执行时间较短的执行条件对应的执行效能高于平均执行时间较长的执行条件对应的执行效能。
步骤102:将所述待处理的规则解析成一棵二叉分析树。
其中,所述二叉分析树的叶子节点为所述规则中包含的执行条件。
在步骤102中,首先,确定所述待处理的规则对应的规则表达式;其次,对所述规则表达式进行语法分析,得到针对所述规则表达式生成的二叉分析树。
其中,所述二叉分析树的叶子节点为所述规则中包含的执行条件,两个所述叶子节点对应的非叶子节点为所述规则中包含的逻辑运算符。
假设待处理的规则的表达式为(A and B)or C and(E or F),其中,A、B、C、D、E和F为该规则的表达式中的执行条件。按照各个执行条件之间的逻辑运算符,分析得到该待处理的规则对应的二叉分析树,如图2所示,为得到的二叉分析树的示意图。
从图2中可以看出,二叉分析树中的叶子节点为所述规则中包含的执行条件,每两个叶子节点对应的非叶子节点为所述规则中包含的逻辑运算符。
其中,每一个非叶子节点可以包含左子树和右子树,而左子树对应逻辑运算符左侧的表达式,右子树对应逻辑运算符右侧的表达式。
需要说明的是,本申请实施例中所记载的二叉分析树中处于二叉分析树最低层的节点被称为叶子节点,即A、B、C、E和F所对应的节点被称为叶子节点,其他节点被称为非叶子节点,即A和B所对应的节点的父节点and(后续称该节点为节点1)、E和F所对应的节点的父节点or(后续称该节点为节点2)、or对应的节点和C所对应的节点的父节点and(后续称该节点为节点3)属于本申请实施例中所记载的非叶子节点。图2中所示的根节点也可以称之为非叶子节点。
仍以图2中所示的二叉分析树为例,A和B所对应的节点的父节点and的左子树为A,右子树为B;根节点or的左子树为(A and B),右子树为C and(E or F)。
需要说明的是,由于规则的表达式所使用的逻辑运算符是双目运算符,那么针对该规则的二叉分析树为一个完全二叉树,即二叉树中任一个节点对应两个子节点或者无子节点。
步骤103:根据每一个所述执行条件的执行效能和所述二叉分析树的结构,确定所述待处理的规则的规则执行策略。
在步骤103中,针对所述二叉分析树中每一个包含逻辑运算符的非叶子节点,分别执行以下操作:选择其中一个非叶子节点;
从所述非叶子节点开始向下遍历所述非叶子节点对应的叶子节点;并
根据遍历到的所述叶子节点对应的执行条件的执行效能,选择执行效能大于设定阈值的叶子节点,建立选择的叶子节点与所述非叶子节点之间的映射关系;
在得到所述二叉分析树中与每一个所述非叶子节点对应的映射关系时,根据所述映射关系,确定所述待处理的规则的规则执行策略,其中,所述规则执行策略用于表征针对每一个非叶子节点如何选择优先执行的叶子节点的策略。
具体地,将所述二叉分析树中包含的所有非叶子节点依次输入指定队列中,从指定队列的队头读取一个非叶子节点,并确定该非叶子节点对应的所有叶子节点;对于确定的叶子节点,查找每一个叶子节点的执行效能,选择其中执行效能大于设定阈值的叶子节点作为对该非叶子节点执行操作时优先执行的叶子节点。
可选地,建立选择的叶子节点与该非叶子节点之间的映射关系。
例如:选择的非叶子节点为节点3,那么遍历该二叉分析树,分别比较C、E和F的执行效能,选择其中执行效能最大的节点,假设C、E和F的执行效能的大小关系依次是:C大于E,E大于F,那么可以建立节点3与C对应的节点之间的映射关系;假设C、E和F的执行效能的大小关系依次是:C小于E,E大于F,那么可以建立节点3与E对应的节点之间的映射关系。
步骤104:根据所述规则执行策略和短路逻辑运算规则,对所述待处理的规则进行分析,得到分析结果。
在步骤104中,根据所述规则执行策略,分别计算每一个非叶子节点的左子树的逻辑运算结果/右子树的逻辑运算结果;根据短路逻辑运算规则和得到的每一个非叶子节点的左子树的逻辑运算结果/右子树的逻辑运算结果,对所述待处理的规则进行逻辑运算,得到所述待处理的规则的计算结果。
具体地,针对其中一个非叶子节点,首先,根据所述规则执行策略,确定优先执行操作的叶子节点,并计算所述叶子节点所在的子树的逻辑运算结果,进而根据分别计算该非叶子节点的左子树的逻辑运算结果和右子树的逻辑运算结果确定出该非叶子节点的逻辑运算结果;其次,根据短路逻辑运算规则,判断所述非叶子节点的可达的父节点;最后,迭代的方式对待处理的规则进行逻辑计算,得到所述待处理的规则的计算结果。
其中,根据短路逻辑运算规则,判断所述非叶子节点的可达的父节点的方式包括:
当非叶子节点的逻辑运算结果确定时,向上查找给非叶子节点的父节点,并根据查找到的父节点的逻辑运算符和该叶子节点的逻辑运算结果,确定所述父节点是否可以通过短路逻辑运算规则直接得到,若可以直接得到,则确定该父节点是所述非叶子节点的可达的父节点;若不可以直接得到,则确定该父节点不是所述非叶子节点的可达的父节点。
需要说明的是,短路逻辑运算规则是指对于and节点,若该and节点的一个子节点的值为false,那么该and节点的逻辑运算结果即可确定;对于or节点,若该or节点的一个子节点的值为ture,那么该or节点的逻辑运算结果即可确定。
例如:根据步骤103中分析确定建立节点3与E对应的节点之间的映射关系,那么针对节点3这一非叶子节点,优先执行E对应的节点所在的右子树的逻辑运算结果,即EorF的逻辑运算结果,进而计算C and(E or F),得到节点3的逻辑运算结果,此时根据节点3的逻辑运算结果和短路逻辑运算规则,判断节点3的可达的父节点,由于图2中所示的表达式相对简单,假设节点3的逻辑运算结果为false,那么判断节点3的父节点的逻辑运算符是否为and,若为and,那么继续判断节点3的父节点的父节点的逻辑运算符是否为and,若是,继续执行判断操作,直至判断节点3的父节点的父节点的n级父节点的逻辑运算符为or,停止判断,那么此时可以确定节点3的父节点的父节点的n-1级父节点为可达父节点,在这一判断过程中,意味着每一次判断为是的节点的左子树无需进行逻辑运算,直接可以确定该节点的逻辑运算结果为false。
在图2中,假设节点3的逻辑运算结果为false,然而节点3的父节点的逻辑运算符为or,则意味着需要对根节点or的左子树进行逻辑运算运算,在确定左子树的逻辑运算结果之后,可以确定该二叉分析树的逻辑运算结果,即得到待处理规则的逻辑运算结果。
假设节点3的逻辑运算结果为true,由于节点3的父节点的逻辑运算符为or,根据短路逻辑运算规则,此时无需对根节点or的左子树进行逻辑运算运算,即可得到待处理规则的逻辑运算结果为true,通过本申请实施例所记载的方案,可以简化规则表达式的运算量,提升规则表达式的分析效率。
此外,在确定所述非叶子节点的可达的父节点时还可以采用堆栈的方式进行确认,这里不做详细描述。
通过本申请实施例提供的规则处理方案,获取待处理的规则,并确定所述待处理的规则中包含的每一个执行条件的执行效能,所述执行效能用于表征执行条件的运行收益;将所述待处理的规则解析成一棵二叉分析树,所述二叉分析树的叶子节点为所述规则中包含的执行条件;根据每一个所述执行条件的执行效能和所述二叉分析树的结构,确定所述待处理的规则的规则执行策略;根据所述规则执行策略和短路逻辑运算规则,对所述待处理的规则进行分析,得到分析结果。这样,在规则分析阶段,将规则表达式转换成为二叉分析树,并基于该二叉分析树构建规则执行策略,进而基于该执行策略和短路逻辑运算规则对于规则进行分析,有效缩短了规则分析时间,提高规则分析效率,进而减少规则分析阶段的系统资源消耗,有效提升系统性能。
图3为本申请实施例提供的一种规则处理设备的结构示意图。所述规则处理设备包括:获取单元31、解析单元32、确定单元33和处理单元34,其中:
获取单元31,用于获取待处理的规则,并确定所述待处理的规则中包含的每一个执行条件的执行效能,其中,所述执行效能用于表征执行条件的运行收益;
解析单元32,用于将所述待处理的规则解析成一棵二叉分析树,其中,所述二叉分析树的叶子节点为所述规则中包含的执行条件;
确定单元33,用于根据每一个所述执行条件的执行效能和所述二叉分析树的结构,确定所述待处理的规则的规则执行策略;
处理单元34,用于根据所述规则执行策略和短路逻辑运算规则,对所述待处理的规则进行分析,得到分析结果。
在本申请的另一个实施例中,所述解析单元32将所述待处理的规则解析成一棵二叉分析树,包括:
确定所述待处理的规则对应的规则表达式;
对所述规则表达式进行语法分析,得到针对所述规则表达式生成的二叉分析树,其中,所述二叉分析树的叶子节点为所述规则中包含的执行条件,两个所述叶子节点对应的非叶子节点为所述规则中包含的逻辑运算符。
在本申请的另一个实施例中,所述获取单元31确定所述待处理的规则中包含的每一个执行条件的执行效能,包括:
针对所述待处理的规则中包含的每一个执行条件,分别计算每一个执行条件的平均执行时间;
根据每一个执行条件的平均执行时间,分别确定各个所述执行条件的执行效能。
在本申请的另一个实施例中,所述确定单元33根据每一个所述执行条件的执行效能和所述二叉分析树的结构,确定所述待处理的规则的规则执行策略,包括:
针对所述二叉分析树中每一个包含逻辑运算符的非叶子节点,分别执行以下操作:选择其中一个非叶子节点;
从所述非叶子节点开始向下遍历所述非叶子节点对应的叶子节点;并
根据遍历到的所述叶子节点对应的执行条件的执行效能,选择执行效能大于设定阈值的叶子节点,建立选择的叶子节点与所述非叶子节点之间的映射关系;
在得到所述二叉分析树中与每一个所述非叶子节点对应的映射关系时,根据所述映射关系,确定所述待处理的规则的规则执行策略,其中,所述规则执行策略用于表征针对每一个非叶子节点如何选择优先执行的叶子节点的策略。
在本申请的另一个实施例中,所述处理单元34根据所述规则执行策略和短路逻辑运算规则,对所述待处理的规则进行分析,得到分析结果,包括:
根据所述规则执行策略,分别计算每一个非叶子节点的左子树的逻辑运算结果/右子树的逻辑运算结果;
根据短路逻辑运算规则和得到的每一个非叶子节点的左子树的逻辑运算结果/右子树的逻辑运算结果,对所述待处理的规则进行逻辑运算,得到所述待处理的规则的计算结果。
需要说明的是,本申请实施例提供的规则处理设备可以通过硬件方式实现,也可以通过软件方式实现,这里不做具体限定。
本领域的技术人员应明白,本申请的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。