Drools多个修改语句与单个修改语句

时间:2016-07-02 10:48:30

标签: drools

如果我有一个修改语句与多个修改语句如下所示,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文件中的多个列表示。

任何见解都受到高度赞赏。

1 个答案:

答案 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时会有一些性能上的好处,但我无法向您保证这种好处是否明显。我想这里你唯一的选择就是准备一个基准测试,这样你就可以自己测量性能提升(如果有的话)。

希望它有所帮助,