我正在我的系统中执行一些评估实验,检查插入不同(规则数量)规则库和内存中事实数量所花费的时间。注意:我没有使用持久性。 Drools版本:6.3.0.Final。
表 - 规则库(RB),插入时间(TTI),时间(以毫秒为单位)。
基于上面提到的表格,我想知道为什么在规则库大小增加时,将事实包含在内存中的时间会增加?
我不是Drools的专家。
答案 0 :(得分:2)
事实插入,撤回和更新导致对条件的即时评估,尽可能在给定的网络状态下进行。它不仅仅是规则的数量;它是事实类型的引用数量。
你观察到的增加小于O(N),N是规则的数量,这很符合理论。
12,000条规则的数量非常特别(除非您发明了规则以测试可伸缩性)。如果它们是真实的,并且如果您担心性能,则应该修改规则结构。
由于OP的评论,编辑。
"事实类型的引用数量"是模式中某个类(=类型)出现的次数。在你的例子中
rule x when
$spec1 : Specification ( )
$spec2 : Specification ( $spec1.id ==2, id == 3, value > $spec1.value )
rule "x+1" when
$spec1 : Specification ( )
$spec2 : Specification ( $spec1.id ==3, id == 4, value > $spec1.value )
您有2个规则,但有4个Specification
引用。这必将在Engine中创建更复杂的网络。此外, 模式($spec1.id ==X
)中的数据依赖于 的约束,但在第二模式中发生的约束几乎肯定是反模式。
使用像这样的不良构造,对于减慢RBS的速度几乎没有限制,而不仅仅是Drools。显然你确实只是在测试可扩展性。坚持精心编写的规则可能会给你更多结论。