如何提高drools规则的性能

时间:2016-08-24 08:12:49

标签: drools drools-guvnor drools-planner drools-fusion

我有大约50个从xsl文件生成的规则文件。   在每个drl文件中,我每个都有大约500个规则。每个规则都喜欢找到包含,开始或结束某个给定字符串的字符串。 目前我们只有一个知识库,其中已加载所有规则。 目前运行规则对我们来说是一个性能影响,它占用了我们大部分的执行时间。将有数以千计的请求将每秒点击一次服务,少量的性能改进将使我们受益。 有没有办法提高性能。 我想的一种方法是为每组规则创建不同的知识库并调用它们。这是一种正确的做法,还是我们有其他最好的方法来优化规则。

规则示例:

rule "StampingRules_26"
salience 200000
when
    $map : Map(UTILITY.supportsDirectoryType($map,'PCM'),
               UTILITY.supportsDirectory($map,'CMMSCPE'),
               ! UTILITY.exitAllRules($map),
               ! executed,
               UTILITY.applicable($map,'resellerName'),
               UTILITY.setRuleLevel($map,'resellerCountry'),
               UTILITY.checkRuleLevel($map,'US'),
               UTILITY.startsWith ($map, 'Advent System~~AdventSystem'))
then
    ((Map)$map.get('PARAMETERS')).put('replaceParameter','csd_id'); 
     String replaceParameter='csd_id';
    ((Map)$map.get('PARAMETERS')).put(replaceParameter, '001d000001Fsm72AAB');
    ((RulesUtility)$map.get('UTILITY')).setExitAllRules($map,'yes');
end

提前致谢

1 个答案:

答案 0 :(得分:0)

  1. 请勿在when块more中使用方法调用。
  2. 并行执行,然后在适用的情况下阻止执行。