具体实施方式
为了实现本申请的目的,本申请实施例提供了一种规则处理方法和设备,获取待发布规则,并将所述规则解析成一棵二叉分析树,所述二叉分析树的节点为所述规则中包含的执行条件/所述规则中包含的逻辑运算符;基于所述二叉分析树,确定所述二叉分析树中每一个节点的权重值,以及确定所述二叉分析树中的可交换节点,所述可交换节点是指在满足逻辑运算符交换规则且能够调换在所述二叉分析树中位置的节点;根据所述可交换节点的权重值和构建哈夫曼huffuman树策略,调整所述可交换节点在所述二叉分析树中的位置,得到所述规则对应的huffuman树,并将所述huffuman树加载至内存中。这样,在规则发布阶段,将规则表达式构建成为huffuman树,有助于在规则分析阶段提高规则分析效率,节省系统资源,提升系统的处理性能。
下面结合说明书附图对本申请各个实施例作进一步地详细描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
图1为本申请实施例提供的一种规则处理方法的流程示意图。所述方法可以如下所示。
步骤101:获取待发布规则,并将所述规则解析成一棵二叉分析树。
其中,所述二叉分析树的节点为所述规则中包含的执行条件/所述规则中包含的逻辑运算符。
在步骤101中,由于规则的生命周期主要包含规则发布、规则运行以及规则下线等。在现有技术中,在规则发布阶段,主要是将待发布的规则按照规则表达式中的逻辑表达式构建二叉分析树,将构建的二叉分析树加载至内存中;在规则运行阶段,主要是利用内存中存储的二叉分析树进行规则分析;在规则下线阶段,主要是对于使用率比较低的规则对应的二叉分析书移除内存的过程。
然而,在研究中发现,现有技术中规则发布阶段构建的二叉分析树,随着规则表达式复杂度程度的增加,使得二叉分析树的深度急剧增加,同步在利用该二叉分析树进行规则分析时对系统资源的消耗也在逐渐增加,造成系统性能比较差。因此,在本申请实施例中考虑降低二叉分析树的深度,即构造最佳二叉分析树以提高规则的运行效率。
对于待发布规则,首先,确定该规则对应的规则表达式;其次,对该规则表达式进行语法分析,得到针对该规则表达式生成的二叉分析树。
其中,所述二叉分析树的叶子节点为该规则中包含的执行条件,两个所述叶子节点对应的非叶子节点为该规则中包含的逻辑运算符。
假设待处理的规则的表达式为(A and B)and 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)。
需要说明的是,由于规则的表达式所使用的逻辑运算符是双目运算符,那么针对该规则的二叉分析树为一个完全二叉树,即二叉树中任一个节点对应两个子节点或者无子节点。
例如:一颗包含n个执行条件的二叉分析树共包含2n-1个节点。
步骤102:基于所述二叉分析树,确定所述二叉分析树中每一个节点的权重值,以及确定所述二叉分析树中的可交换节点。
其中,所述可交换节点是指在满足逻辑运算符交换规则且能够调换在所述二叉分析树中位置的节点。
在步骤102中,首先说明逻辑运算符交换规则的内容,即对于不同的逻辑运算符,例如:逻辑运算符and,若存在表达式A and B,则基于逻辑运算符交换规则可以得到A and B=B and A;再例如:逻辑运算符or,若存在表达式A orB,则基于逻辑运算符交换规则可以得到A or B=B or A。也就是说,对于所述二叉分析树中包含的节点,只要在满足逻辑运算符交换规则时可以调换其在二叉分析树中的位置。
例如:图2中所示的表达式(A and B)and C and(E or F),在满足逻辑运算符交换规则的情况之下,可以变换成C and(A and B)and(E or F);也可以变换成C and(B and A)and(F or E);还可以变换成(E or F)and(A andB)and C;等等,这里不再一一列举。
由此可以根据逻辑运算交换规则确定出该二叉分析树中可交换节点。
需要说明的是,可交换节点中既可以包含执行条件对应的节点,又可以包含逻辑运算符对应的节点。
此外,基于该二叉分析树,需要进一步确定二叉分析树中每一个节点的权重值。在该二叉分析树中,有些节点对应规则表达式中的执行条件,有些节点对应规则表达式中的逻辑运算符,那么在确定二叉分析树中不同节点的权重值时所采取的方式不同。
具体地,针对所述二叉分析树中每一个执行条件对应的节点,执行以下操作:
确定每一个执行条件在用于分析业务时的执行优先级;并
根据所述执行优先级,确定每一个执行条件的执行效能,其中,所述执行效能用于表征执行条件的运行收益;
根据每一个执行条件的执行效能,分别确定所述执行条件对应的节点的权重值,其中,执行条件的执行效能越大,所述执行效能对应的节点的权重值越大。
需要说明的是,对于该发布的规则中包含的执行条件,可以通过判断执行条件在用于分析业务时的执行优先级;也可以通过该执行条件的历史运行数据;还可以通过其他方式,确定该执行条件的执行效能,这里不做具体限定。
在得到执行条件的执行效能后,可以根据执行条件的执行效能,确定执行条件对应的节点的权重值。
例如:在得到规则表达式中包含的每一个执行条件的执行效能之后,通过归一化的方式,确定每一个执行条件对应的节点的权重值。
仍以图2中所示的二叉分析树为例进行说明。假设执行效能量化成1~100的数值表示,根据上述方式确定规则表达式中每一个执行条件的执行效能:执行条件A的执行效能为10;执行条件B的执行效能为20;执行条件C的执行效能为10;执行条件E的执行效能为40;执行条件F的执行效能为50。
那么通过归一化的方式,确定每一个执行条件对应的节点的权重值:执行条件A对应的节点的权重值为0.1;执行条件B对应的节点的权重值为0.2;执行条件C对应的节点的权重值为0.1;执行条件E对应的节点的权重值为0.4;执行条件F对应的节点的权重值为0.5。
具体地,针对所述二叉分析树中每一个逻辑运算符对应的节点,执行以下操作:
选择其中一个逻辑运算符对应的节点,确定选择的所述逻辑运算符对应的节点的两个孩子节点,并确定所述两个孩子节点的权重值;
计算确定的所述两个孩子节点的权重值之和,并将得到的和值作为所述两个孩子节点对应的选择的所述逻辑运算符对应的节点的权重值。
由于在本申请实施例中,对于执行条件对应的节点可以通过上述方式确定各个节点的权重值,而在二叉分析树中还包含部分逻辑运算符对应的节点,这一节点一般对应两个孩子节点,而这两个孩子节点又可以通过上述方式确定每一个孩子节点的权重值,那么在得到两个孩子节点的权重值之后,可以通过计算这两个孩子节点的权重值之和得到这两个孩子节点对应的逻辑运算符对应的节点的权重值。
例如:图2中所示的二叉分析树,在得到A节点的权重值和B节点的权重值之后,可以利用A节点的权重值和B节点的权重值计算得到A节点和B节点共同对应父节点and的权重值。
仍以图2中所示的二叉分析树为例进行说明。假设执行条件A对应的节点的权重值为0.1;执行条件B对应的节点的权重值为0.2;执行条件C对应的节点的权重值为0.1;执行条件E对应的节点的权重值为0.4;执行条件F对应的节点的权重值为0.5,那么分别计算节点1对应的权重值,即为执行条件A对应的节点的权重值与执行条件B对应的节点的权重值之和,得到节点1对应的权重值为0.3;计算节点2对应的权重值,即为执行条件E对应的节点的权重值与执行条件F对应的节点的权重值之和,得到节点2对应的权重值为0.9;计算节点3对应的权重值,即为执行条件C对应的节点的权重值与节点2的权重值之和,得到节点3对应的权重值为1。
此时,可以计算得到图2中所示的二叉分析树的带权路径长度:假设根节点的层数为1,那么节点1的路径长度为1,节点1的带权路径长度为节点1的权重值*1=0.3;
节点3的路径长度为1,节点3的带权路径长度为节点3的权重值*1=1;
节点2的路径长度为2,节点2的带权路径长度为节点2的权重值*2=1.8;
执行条件A对应的节点的路径长度为2,执行条件A对应的节点的带权路径长度为执行条件A对应的节点的权重值*2=0.2;
执行条件B对应的节点的路径长度为2,执行条件B对应的节点的带权路径长度为执行条件B对应的节点的权重值*2=0.4;
执行条件C对应的节点的路径长度为2,执行条件C对应的节点的带权路径长度为执行条件C对应的节点的权重值*2=0.2;
执行条件E对应的节点的路径长度为3,执行条件E对应的节点的带权路径长度为执行条件E对应的节点的权重值*3=1.2;
执行条件F对应的节点的路径长度为3,执行条件F对应的节点的带权路径长度为执行条件F对应的节点的权重值*3=1.5;
那么计算得到根节点的带权路径长度为0.3+1+1.8+0.2+0.4+0.2+1.2+1.5=5.6,在实际应用中,二叉分析树的根节点的带权路径长度值越大,二叉分析树所消耗的资源越多,运行效率越低。
步骤103:根据所述可交换节点的权重值和构建哈夫曼huffuman树策略,调整所述可交换节点在所述二叉分析树中的位置,得到所述规则对应的huffuman树,并将所述huffuman树加载至内存中。
在步骤103中,按照逻辑运算符交换规则,将权重值大于设定阈值的所述可交换节点调整至距离所述二叉分析树的根节点的路径值小于设定数值的位置;根据调整后的各节点的位置,构建所述规则对应的huffuman树。
具体地,将权重值大于设定阈值的所述可交换节点调整至距离所述二叉分析树的根节点的路径小于设定数值的位置,包括:
当权重值大于设定阈值的所述可交换节点中包含第一可交换节点和第二可交换节点时,若所述第一可交换节点的权重值大于所述第二可交换节点,则所述第一可交换节点调整后的位置距离所述二叉分析树的根节点的路径值小于等于所述第二可交换节点调整后的位置距离所述二叉分析树的根节点的路径值。
仍以图2中所示的二叉分析树为例。假设设定数值为0.3,那么在叶子节点中权重值大于设定阈值的包含执行条件E对应的节点和执行条件F对应的节点,也就是说执行条件E对应的节点和执行条件F对应的节点可以作为可交换节点,按照逻辑运算符交换规则,将所述二叉分析树转换成为如图3(a)中所示,即将图2中的根节点调整为非根节点,将图2中的节点3调整为根节点,这样计算得到的图3(a)中根节点的带权路径长度为4.6,相比较与图2的二叉分析树,所消耗资源将减少,且能够有效提升系统的处理效率。
在假设图2中所示的二叉分析树中节点2对应的逻辑运算符为and,那么在叶子节点中权重值大于设定阈值的包含执行条件E对应的节点和执行条件F对应的节点,也就是说执行条件E对应的节点和执行条件F对应的节点可以作为可交换节点,按照逻辑运算符交换规则,可以将执行条件C对应的节点与执行节点F对应的节点进行调换,得到的新的二叉分析树如图3(b)所示,这样计算得到的图3(b)中根节点的带权路径长度为5.4,相比较与图2的二叉分析树,所消耗资源也将减少。
优选地,在本申请实施例中,所述方法还包括:
在构建得到所述规则对应的huffuman树时,需要判断该huffuman树中是否存在叶子节点对应逻辑运算符的情形;若存在叶子节点对应逻辑运算符的情形,则需要对huffuman树进行调整,直至调整后的huffuman树的叶子节点未对应逻辑运算符的情形,同时保证权重值较大的节点距离该huffuman树的根节点较近,即保证该huffuman树的带权路径最优。
通过本申请实施例提供的技术方案,获取待发布规则,并将所述规则解析成一棵二叉分析树,所述二叉分析树的节点为所述规则中包含的执行条件/所述规则中包含的逻辑运算符;基于所述二叉分析树,确定所述二叉分析树中每一个节点的权重值,以及确定所述二叉分析树中的可交换节点,所述可交换节点是指在满足逻辑运算符交换规则且能够调换在所述二叉分析树中位置的节点;根据所述可交换节点的权重值和构建哈夫曼huffuman树策略,调整所述可交换节点在所述二叉分析树中的位置,得到所述规则对应的huffuman树,并将所述huffuman树加载至内存中。这样,在规则发布阶段,将规则表达式构建成为huffuman树,有助于在规则分析阶段提高规则分析效率,节省系统资源,提升系统的处理性能。
图4为本申请实施例提供的一种规则处理设备的结构示意图。所述规则处理设备包括:获取单元41、确定单元42和处理单元43,其中:
获取单元41,用于获取待发布规则,并将所述规则解析成一棵二叉分析树,其中,所述二叉分析树的节点为所述规则中包含的执行条件/所述规则中包含的逻辑运算符;
确定单元42,用于基于所述二叉分析树,确定所述二叉分析树中每一个节点的权重值,以及确定所述二叉分析树中的可交换节点,其中,所述可交换节点是指在满足逻辑运算符交换规则且能够调换在所述二叉分析树中位置的节点;
处理单元43,用于根据所述可交换节点的权重值和构建哈夫曼huffuman树策略,调整所述可交换节点在所述二叉分析树中的位置,得到所述规则对应的huffuman树,并将所述huffuman树加载至内存中。
在本申请的另一个实施例中,所述处理单元33根据所述可交换节点的权重值和构建哈夫曼huffuman树策略,调整所述可交换节点在所述二叉分析树中的位置,得到所述规则对应的huffuman树,包括:
按照逻辑运算符交换规则,将权重值大于设定阈值的所述可交换节点调整至距离所述二叉分析树的根节点的路径值小于设定数值的位置;
根据调整后的各节点的位置,构建所述规则对应的huffuman树。
在本申请的另一个实施例中,所述处理单元43将权重值大于设定阈值的所述可交换节点调整至距离所述二叉分析树的根节点的路径小于设定数值的位置,包括:
当权重值大于设定阈值的所述可交换节点中包含第一可交换节点和第二可交换节点时,若所述第一可交换节点的权重值大于所述第二可交换节点,则所述第一可交换节点调整后的位置距离所述二叉分析树的根节点的路径值小于等于所述第二可交换节点调整后的位置距离所述二叉分析树的根节点的路径值。
在本申请的另一个实施例中,所述确定单元43基于所述二叉分析树,确定所述二叉分析树中每一个节点的权重值,包括:
针对所述二叉分析树中每一个执行条件对应的节点,执行以下操作:
确定每一个执行条件在用于分析业务时的执行优先级;并
根据所述执行优先级,确定每一个执行条件的执行效能,其中,所述执行效能用于表征执行条件的运行收益;
根据每一个执行条件的执行效能,分别确定所述执行条件对应的节点的权重值,其中,执行条件的执行效能越大,所述执行效能对应的节点的权重值越大。
在本申请的另一个实施例中,所述确定单元43基于所述二叉分析树,确定所述二叉分析树中每一个节点的权重值,包括:
针对所述二叉分析树中每一个逻辑运算符对应的节点,执行以下操作:
选择其中一个逻辑运算符对应的节点,确定选择的所述逻辑运算符对应的节点的两个孩子节点,并确定所述两个孩子节点的权重值;
计算确定的所述两个孩子节点的权重值之和,并将得到的和值作为所述两个孩子节点对应的选择的所述逻辑运算符对应的节点的权重值。
需要说明的是,本申请实施例中所述的规则处理设备可以通过软件方式实现,也可以通过硬件方式实现,这里不做限定。本申请实施例中所记载的规则处理设备在规则发布阶段,将规则表达式构建成为huffuman树,有助于在规则分析阶段提高规则分析效率,节省系统资源,提升系统的处理性能。
本领域的技术人员应明白,本申请的实施例可提供为方法、装置(设备)、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(设备)和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。