Drools Salience是否会对性能产生影响?

时间:2015-04-01 15:24:58

标签: performance drools

例如,如果我有100万个事实对象,则通过一组规则,其中规则的执行顺序无关紧要。以下之间会有任何性能差异:

  1. 明确为每个规则指定不同的显着值
  2. 使用默认显着值(0)或所有规则具有相同的显着值?
  3. 只是为了好奇,因为我刚才听说后者的表现更好。


    我自己做了一些基准测试。结果表明,不同的显着性方法确实有一些开销,并且增加了总处理时间(尽管不多),但是事实对象处理所花费的时间似乎相同。

    不确定此观察是否符合底层代码逻辑。

    我应该感谢你们的详细解释。

2 个答案:

答案 0 :(得分:1)

议程,即包含所有规则激活的列表,按显着性排序。很明显,维护按某种标准排序的链表比使用无序标准更昂贵。当然,实现尝试尽可能高效,请参阅代码org.drools.core.util.BinaryHeapQueue。

对每个规则使用不同的突出性将是最坏情况的一个因素。另一个是插入和点击的交错,这可能会导致不同的显着值有害,或者造成坏的或最坏的情况。

答案 1 :(得分:0)

对于Drools 6.给定规则的每个规则匹配(也称为激活或规则实例化)都会添加到双向链接列表中。触发该规则是迭代该列表的问题,依次触发每个规则。

要评估的每个规则都放在BinaryHeapQueue上,然后依次弹出规则,评估,生成链表,然后重复尝试触发。

如果每条规则存在大量规则匹配,则堆队列的成本将不明显。如果每个规则的规则匹配数量较少,但是规则很多,那么您可能会看到10%(这是一个猜测)或相应的开销。