决定执行方式
您可以为规则流的每个规则任务选择执行方式。 缺省情况下,创建规则任务时,将为其分配快速路径执行方式。 要实现最佳性能,您可能需要选择另一种执行方式,以更好地适应特定规则任务中的规则。
以下是一个简短表,其中显示要在哪些情况下选择的执行方式。
| 选择此方式: | 则在此例中: |
|---|---|
| RetePlus |
|
| 顺序 |
|
快速路径 |
|
要确定要在规则任务上使用的执行方式,必须分析规则任务中规则的结构以及它们执行的处理类型。
当规则具有创建,修改或除去在规则条件中匹配的对象的操作时,不能使用快速路径或顺序算法。
要做出最佳选择,请回答以下问题:
规则实现哪种类型的应用程序?
根据规则任务中定义的业务逻辑的用途,选择不同的执行方式。
- 合规性与验证
松散关联的规则,用于检查一组条件以生成 "去/不去" 或类似的约束结果。 合规性业务规则应用程序通常用于承保、欺诈检测、数据验证和表单验证。 此类应用程序中的业务规则通常具有 yes 或 no 结果,并对决策提供一些解释。
对于合规性应用程序,最好使用 Sequential 或 Fastpath 执行方式。
- 计算
用于计算复杂对象模型的度量的强关联规则。 计算业务规则应用程序通常用于评分和评级、合同以及分配。 此类应用程序中的业务规则对负责提供最终值 (或评级) 的对象执行不同的计算。
对于此类应用程序,如果需要推断,最好使用 RetePlus 执行方式,否则可使用 Fastpath 执行方式。
- 相关性
高度相关的规则,用于关联来自一组对象的信息,以计算一些复杂度量。 关联业务规则应用程序通常用于计费。 此类应用程序中的业务规则用于插入信息。
对于关联应用程序,如果需要推断,最好使用 RetePlus 执行方式,否则可使用 Fastpath 执行方式。
- 有状态会话
在有状态引擎会话中关联事件的强相关规则。 有状态应用程序通常用于警报过滤和关联、GUI 定制以及 Web 页面导航。
对于此类应用程序,最好使用不带规则流的 RetePlus 执行方式。
规则使用哪些类型的对象?
根据规则所处理的对象类型,您可以选择不同的执行方式。
同构还是异构规则?
当规则对同一类不起作用时,绑定是异构的。 当绑定是异构的时,规则可能具有不同高度的条件部分。 例如:
| 规则 | 条件 |
|---|---|
| Rule1 | ... when{A();B()} ... |
| Rule2 | ... when{A()} ... |
| Rule3 | ... when{B()} ... |
如果规则定义了异构绑定,请使用 RetePlus 或 Fastpath 执行方式。
当所有规则都在同一类 (对象的相同种类和数量) 上运行时,绑定是同构的,但引入了不同的测试,例如:
| 规则 | 条件 |
|---|---|
| Rule1 | ... when{Person(age == 12);} ... |
| Rule2 | ... when{Person(age > 20);} ... |
如果规则定义了同构绑定,请使用 顺序 执行方式。
规则操作产生怎样的效果?
根据针对执行的规则所产生的效果的类型,选择不同的执行方式。
- 对工作内存的修改
如果规则操作处理工作内存对象并使用 IRL 关键字
insert,retract或update,请使用 RetePlus 执行方式。 由于这些关键字需要修改工作内存,因此规则引擎会重新评估后续规则。 如果使用其他执行方式,那么规则引擎不会在修改后重新评估后续规则。- 规则链接
如果规则操作在工作记忆或参数中导致修改,并且它们对没有关系的对象(例如人员和爱好)进行模式匹配,则规则之间存在链接。 此过程也称为推理。
例如:
银级客户,大于 5000 美元购买 提升至黄金水平 黄金级别客户,大于 5000 美元购买 应用 25% 折扣
您可以看到这两个规则之间存在链接,因为它们在两个不同的对象 (客户和购买) 上执行模式匹配,并且第二个规则会修改客户对象的级别属性。
基本上,如果您知道规则操作会导致其他规则执行,请使用 RetePlus 执行方式。
您在规则条件中找到了哪些类型的测试?
根据规则中使用的条件类型,选择不同的执行方式。
- 需要工作记忆的测试
如果规则条件使用 IRL 关键字
exists或collect(不使用in或from构造) 测试工作内存中是否存在对象或直接收集集合的项,请使用 RetePlus 或 Fastpath 执行方式。- 常规测试模式
如果规则条件中的测试具有相同的模式和顺序,例如从决策表生成的测试,请使用 Fastpath 执行方式。
如果规则条件中的测试顺序不正常,请使用 RetePlus 或 顺序 执行方式。
您在规则上设置了哪些优先级?
根据您在规则上设置的优先级,选择不同的执行方式。
如果设置了静态优先级,那么可以使用任何算法。
如果设置动态优先级,即定义为表达式的优先级,那么必须使用 RetePlus 执行方式。
目录
当您为规则任务选择执行方式时,可以使用下表作为决策参考。 星数表示性能水平。
| 在规则任务中: | RetePlus | 顺序 | 快速路径 |
|---|---|---|---|
| 合规性与验证应用程序 | |||
| 具有推论的计算应用程序 | |||
| 无推论的计算应用程序 | |||
| 具有推论的关联应用程序 | |||
| 无推论的关联应用程序 | |||
| 工作内存对象 | |||
| 规则链接 | |||
| 直接在工作内存中对存在项或集合项进行测试 | |||
| 共享测试模式 | |||
| 异构绑定 | |||
| 动态优先级 | |||
| 在众多规则中选择一些的运行时规则选择 | 决策引擎: |
||
| 大量规则 |