Hi.

im trying to demo drools-fusion for a system that processes backup events.
i have the following 2 CEP rules:

rule "Backup Not Succeeded For At Least 3 Days"
@ruleId(1)
when
    Node($id : id)
    not ( Backup(clientId == $id, $state: state == BackupStateEnum.FINISHED) over window:time( 3d ) from entry-point "Backup Stream" )
then
    //nothing for now
end

rule "Prune Previous Successful Backups"
@ruleId(2)
when
    $prevBackup  : Backup($id : clientId,  state == BackupStateEnum.FINISHED) from entry-point "Backup Stream"
    $newerBackup : Backup(clientId == $id, state == BackupStateEnum.FINISHED, this after $prevBackup) from entry-point "Backup Stream"
then
    drools.retract($prevBackup);
end

rule #2 is my attempt to cut down on memory usage. the problem is that rule #2 slows down the processing very very considerably (2 orders of magnitude slower when simulating batches of 40K events/day).

what would be my next step in trying to find the reason for it? my intuition tells me that with 2 events in the system at any given time instead of 120K (single node, 40K events/day 3 day window) i should have seen either a speedup or reduced memory consumption (if not both) and yet the results im seeing are the exact opposite.
is there anything im missing ? i could try adding some sort of LastSuccessfulBackup "marker" object into main memory and updating it using events from the backup stream, but then how would i express rule #1 ?

any help/clues/suggestions would be greatly appreciated,

   radai.