收回事实时,Drools表现不佳

时间:2018-01-19 20:44:53

标签: performance jboss drools drools-fusion

我们正在对Drools 7.5进行可扩展性测试,并定义了一条规则:

...
declare RuleEvent
    @role(event)
    @timestamp(timestamp)
    entityId : String
    metrics : Map
    timestamp : long
end

declare window AlarmWindow
    RuleEvent() over window:time( 5m )
    from entry-point "vmStream"
end

rule "rule0"
when
    $rec : RuleEvent( $entityId : entityId) from window AlarmWindow
then
    Alarm alarm = new Alarm();
    alarmOutQueue.put(alarm);
end

KieBase配置为EventProcessingOption.STREAM和SessionPseudoClock。我们有-Xmx12g Java选项集,并且似乎没有任何内存压力。

一次插入100,000个RuleEvent,表示以1分钟为间隔获取的批量值。

对于前5次迭代(代表5分钟的模拟数据),

session.fireAllRules()大约需要35秒,但后续迭代需要8 1/2分钟。据推测,由于滑动窗口的到期,drools会自动收回过期的100,000个事实。我们可以在调用fireAllRules之前使用“session.delete(fact)”显式删除100,000个过期事实来观察到类似的结果。

所以Drools似乎能够很好地处理事实,但是撤回实际上是在陷入困境。有没有人有建议?

0 个答案:

没有答案