我们正在对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似乎能够很好地处理事实,但是撤回实际上是在陷入困境。有没有人有建议?