选择合适的运行模式
你可以为规则流中的每一个规则任务选择运行模式,默认情况下,规则任务采用 Reteplus 运行模式。为了达到最佳性能,您可能需要选择其他的运行模式,以更好的适应特定规则任务中的规则。
通常要确定规则任务应该使用哪种运行模式,你需要分析规则任务中各个规则的结构,以及它们执行何种类型的业务处理。
为了更好的作出决策,您需要回答一下这些问题:
您的业务规则针对何种类型的应用?
你的业务规则使用什么类型的对象?
规则执行的影响是什么?
规则条件中使用什么类型的测试?
您的业务规则使用了什么样的优先设置?
您的业务规则针对何种类型的应用?
根据规则任务中业务逻辑的目的不同,所选择的运行模式也各异。
一致性检查、校验
松散关联的规则检查一系列条件以产生 GO /NOGO 或类似限制的结果。一致性业务规则的应用通常用于承保,欺诈检测,数据验证和表单验证。这种类型的应用中的业务规则通常会有一个是或不是的结果并提供一些关于这个决定的解释。
对于这种类型的应用,推荐使用顺序或者 Fastpath 运行模式。
计算
紧密关联的规则,用来计算一个复杂对象模型的度量。计算型业务规则应用程序通常用于评分、定级,合同和分配。这种应用中的业务规则将针对特定对象进行不同运算并据此提供一个最终结果(或品级)。
对于这种类型的应用,推荐使用 RetePlus 运行模式。
相关性
紧密相关的规则,从一组对象中抽取信息,从而计算一些复杂的数据。相关性业务规则的应用程序通常用于计费。这种类型中的业务规则通常需要插入信息。
对于这种类型的应用,推荐使用 RetePlus 或 Fastpath 运行模式。
有状态会话
强烈的关联引擎的状态会期活动,相互关联的规则。有状态应用通常用于报警过滤和相关性,图形用户界面定制,以及网页导航。
对于这种类型的应用,推荐使用 RetePlus 运行模式。
你的业务规则使用什么类型的对象?
根据您的规则中所使用的对象的不同,所选择的运行模式也各异。
Working memory 对象或规则集参数
如果您的规则中使用的对象是通过规则集传入的,那么建议您选择顺序或 Fastpath 运行模式。如果这些对象是您插入到 working memory 中的,那么建议您选择 RetePlus 或 Fastpath 运行模式。
当规则操作的不是相同的对象时,我们称之为异构绑定,当遇到异构绑定时,这些规则的条件部分可能会有不同,例如:
表 1. 异构绑定
Rule1 when{A();B()} ...
Rule2 ... when{A()} ...
Rule3 ... when{B()} ...
如果您的规则采用了异构绑定,那么建议您使用 RetePlus 或 Fastpath 运行模式。
当规则操作的对象相同(相同类型相同数量)仅仅是测试条件不同时,我们称之为同构绑定,例如:
表 2. 同构绑定
Rule1 ... when{Person(age == 12);} ...
Rule2 ... when{Person(age > 20);} ...
如果您的规则采用了同构绑定,那么建议您选择顺序运行模式。
规则执行的影响是什么?
根据您的规则执行所产生的影响的类型,所选择的运行模式也各异。
对 Working memory 进行修改
如果规则的执行部分通过使用 IRL insert、retract 或者 update 关键字操作 working memory 对象,那么你必须要使用 RetePlus 运行模式。因为这些关键字需要修改 working memory,并期望规则引擎重新评估后续的规则。如果您选择其他运行模式,规则引擎将不会在工作区修改之后重新评估后续规则。
规则链
所谓规则链即规则的执行部分将触发工作区或者参数的更改而且这些规则所匹配的对象本身没有关联。
例如有这样的规则:
金卡客户订单超过 5000 元,升级为钻石客户
钻石客户订单超过 5000 元,享受 75 折优惠
可以看到这两个规则之间存在规则链,因为它们的模式匹配基于两个不同的对象——客户和订单,并且订单的多少将导致客户对象级别的变化。
一般来说,如果您知道您的规则的执行部分将引发其他规则的执行,那么您应该使用 RetePlus 运行模式。
规则条件中使用什么类型的测试?
根据您的规则中使用什么类型的条件,所选择的运行模式也各异。
测试需要查询工作区
如果您的规则的条件使用 IRL exist 关键字验证 working memory 中否存在一个对象或使用 collect 关键字从工作区中收集一些对象而不提供 from 或 in 在条件的构造中,那么我们建议您使用 RetePlus 或者 Fastpath 运行模式。
测试条件具有特定规律
如果您的规则的测试条件具有一致的模式或顺序,就像决策表所使用的测试,那么我们建议您使用 Fastpath 运行模式。
如果测试条件的顺序没有规则,则使用 RetePlus 或者顺序运行模式。
您的业务规则使用了什么样的优先设置?
如果您的规则设置了静态优先级,可以使用任何运行模式。然而如果您设置的是动态的优先级即优先级被定义成一个表达式,则您只能选择 RetePlus 运行模式。
小结
您可以参考下表来决定为您的任务选择运行模式:
表 3. 选择运行模式
规则任务类型 RetePlus Sequential Fastpath
一致性检查、校验 × √ √
计算型应用 √ × ×
相关性应用 √ × √
有状态型应用 √ × ×
使用 Working Memory 对象 √ √ √
规则链 √ × ×
对 Working Memory 中的对象进行存在性和集合性测试 √ √ √
测试条件具有一致性 × × √
异构绑定 √ × √
动态优先级 √ × ×
动态规则选择 √ √ ×
大量规则聚合 × √ √[@more@]
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16896827/viewspace-1036450/
,如需转载,请注明出处,否则将追究法律责任。