2014-07-14 1 views
0

У меня есть правило, которое ищет два последовательных события для одного и того же объекта. Чтобы подчеркнуть это, я вставил 10 000 последовательных событий. Я вызываю fireAllRules() после каждого события. Я распечатываю временные метки после каждых 100 событий. Я замечаю, что вставки/оценки становятся все более медленными по мере добавления событий. Вот правило:Вставки/оценки постепенно замедляются при использовании временного правила

rule "Consecutive events" 
when 
    $latest : Event($id : id) // newest event 
    not Event(id == $id, this after $latest) // no events after the newest 
    $previous : Event(id == $id, this before $latest) // event before the newest 
    not Event(id == $id, this before $latest, this after $previous) // no events between $latest and $previous 
then 
    //System.out.println($latest.toString()); 
end 

Это мое понимание того, что вышеупомянутое правило должно соответствовать только последние 2 события и автоматическое управление памятью должны удалить старые события. Если да, то почему вставки постепенно замедляются? Интересно, что ksession.getObjects() возвращает все вставленные события, а не только последние 2 события. Неправильно ли мое понимание правила? Правило каким-то образом заставляет все события оставаться в памяти? Я использую v6.0.1.Final.

ответ

0

Ваше правило не определяет срок для автоматического возврата, поскольку before и after не ограничены.

Существует несколько способов уменьшить количество событий, что является причиной постепенного замедления вставки. Вот простой метод:

declare Pair 
one : Event 
two : Event 
id : String 
end 

rule "create Pair" 
when 
    $e: Event($id: id) 
    not Pair(id == id) 
then 
    insert(new Pair(null, $e, $id)); 
end 

rule "another Pair" 
when 
    $e2: Event($id: id) 
    $p: Pair($e0: one, $e1: two != $e2, id == $id) 
then 
    modify($p){ 
    setOne($e1), 
    setTwo($e2) } 
    retract($e0); // optional 
    // process pair $e1, $e2 
end 
+0

Спасибо! ваша техника работала как прелесть после некоторых небольших модификаций - главным образом, используя no-loop в правиле «еще одна пара». – sumantp

 Смежные вопросы

  • Нет связанных вопросов^_^