根据规则库大小

时间:2016-02-26 10:28:18

标签: java drools rules rule-engine

我正在我的系统中执行一些评估实验,检查插入不同(规则数量)规则库和内存中事实数量所花费的时间。注意:我没有使用持久性。 Drools版本:6.3.0.Final。

表 - 规则库(RB),插入时间(TTI),时间(以毫秒为单位)。 Rule base (RB) reading time, rule base size, and time to insert (TTI) facts in the working memory.

基于上面提到的表格,我想知道为什么在规则库大小增加时,将事实包含在内存中的时间会增加?

我不是Drools的专家。

1 个答案:

答案 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。显然你确实只是在测试可扩展性。坚持精心编写的规则可能会给你更多结论。