如果我有一个修改语句与多个修改语句(如下所示),Drools 重新考虑要触发的新一批规则的方式有什么区别
rule "Multiple Modify Statements"
dialect "mvel"
when
$m : Message( status == Message.HELLO )
then
modify ( $m ) { message = "Hope" };
modify ( $m ) { status = Message.GOODBYE };
end
rule "Single Modify Statements"
dialect "mvel"
when
$m : Message( status == Message.HELLO )
then
modify ( $m ) { message = "Never Give Up",
status = Message.GOODBYE };
end
并且,是否有任何性能影响。
实际上,我们正在尝试创建一个 Excel 决策表,每列都有操作,因此多个修改语句更可取,因为这些语句可以由 Excel 文件中的多个列表示。
高度赞赏任何见解。
最佳答案
有趣的问题。
Drools 中规则的 RHS 被编译成 Java 类。如果您查看示例中生成的类,您将看到以下内容:
当使用 2 个修改语句时,会生成以下代码:
$m.setMessage("Hope");
update($m);
$m.setStatus(Message.GOODBYE);
update($m);
现在,当使用单个修改语句时,生成的代码如下所示:
$m.setMessage("Hope");
$m.setStatus(Message.GOODBYE);
update($m);
区别在于调用方法update
的次数。此方法会触发与 Message
类相关的任何条件的评估。
我假设使用单个修改
时会带来某种性能优势,但我无法向您保证这种优势是否明显。我想您唯一的选择是准备基准测试,以便您可以自己测量性能增益(如果有)。
希望对你有帮助
关于Drools 多个修改语句与单个修改语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38159269/