有没有办法记录/监控Drools规则集中规则所用的时间?
有没有办法确保一条规则不会执行多次(在我的情况下似乎正在发生)
有关改善Drools表现的一般指导原则是什么?
目前我正在使用一个包含100多条规则的单个DRL文件。
将提供您需要的任何附加信息。
答案 0 :(得分:4)
如果你的目标是记录/监控规则执行,你可以使用事件监听器,如AgendaEventListener(http://docs.jboss.org/drools/release/5.3.0.CR1/drools-expert-docs /html_single/index.html#d0e2003)或激活Drools MBeans以使用您选择的任何JMX控制台监视Drools应用程序。 MBean将根据规则统计数据和汇总统计数据为您提供。
如何提高性能是一个非常广泛的问题,答案将比我在这里回答的要长得多,但简短的版本是:像Drools这样的规则引擎是类似于关系数据库的关系引擎,但具有不同的目标和优化。然而,许多相同的原则适用,您可以通过首先编写具有更严格约束的规则,在多个规则之间共享约束并正确使用推理/链接来提高性能。
仅供参考,如果您在旧金山地区,我们将在下周的规则节期间(http://rulesfest.org/html/home.html)免费提供Drools训练营(但您仍需注册) )我们将介绍许多相关主题。
答案 1 :(得分:0)
我在使用流口水时发现的唯一陷阱是关于块创作。不要在when块中使用计算。 这就是流口水甚至说的 getters!:
Person( age == 50 )
// this is the same as:
Person( getAge() == 50 )
注意
我们建议使用属性访问(age)而不是显式使用getter(getAge()),因为通过字段索引可以提高性能。 (source)
Droolsassert测试库可以帮助您检测被多次触发的规则,并记录每个规则花费的日志/监视时间。