如果我有一个修改语句与多个修改语句如下所示,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文件中的多个列表示。
任何见解都受到高度赞赏。
答案 0 :(得分:2)
有趣的问题。
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
类相关的任何条件的方法。
我认为使用单modify
时会有一些性能上的好处,但我无法向您保证这种好处是否明显。我想这里你唯一的选择就是准备一个基准测试,这样你就可以自己测量性能提升(如果有的话)。
希望它有所帮助,