Какова связь между @timestamp и окном: время?

Я использую Drools 6.2.0.Final, и мне нужно обработать набор событий, используя окно: время. Каждое событие имеет поле даты.

public class Event {

    private Long id;

    private Date date;
        ...

И в моем дрл:

declare org.drools.examples.broker.events.Event
    @role( event )
    @timestamp (date)
end 


rule "test"
when 
    $count: Number() from accumulate (
    $e: Event() over window:time(40s) from entry-point "stream" , 
    count($e))
then  
    System.out.println("Count:" + $count);
end 
  • e1 (2015-01-01 00:00:00)
  • e2 (2015-01-01 00:00:20)
  • e3 (2015-01-01 00:00:40)
  • e4 (2015-01-01 00:01:00)

Сценарий 1: одновременное использование режима реального времени и вставка набора событий.

session.getEntryPoint("stream").insert(e1);
session.fireAllRules();

session.getEntryPoint("stream").insert(e2);
session.fireAllRules();

session.getEntryPoint("stream").insert(e3);
session.fireAllRules();

session.getEntryPoint("stream").insert(e4);
session.fireAllRules();

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

session.getEntryPoint("stream").insert(e1);
session.fireAllRules();

clock.advanceTime(20, TimeUnit.SECONDS);
session.getEntryPoint("stream").insert(e2);
session.fireAllRules();

clock.advanceTime(40, TimeUnit.SECONDS);
session.getEntryPoint("stream").insert(e3);
session.fireAllRules();

clock.advanceTime(60, TimeUnit.SECONDS);
session.getEntryPoint("stream").insert(e4);
session.fireAllRules();

Второй сценарий работает нормально. Но у меня есть несколько вопросов:

  • Какова связь между @timestamp и «над окном: время»?
  • Что произойдет, если нужно вставить несортированные события (по отметке времени) в рабочую память?
  • Могу ли я использовать временную метку, обозначаемую моим событием, вместо временной метки, обозначаемой временем вставки?

Спасибо.

ОБНОВЛЕНИЕ 1

@timestamp, @duration и т. д. используются только для того, чтобы связать события вместе (например, A перед B, A встречается с B и т. д.), и они не связывают событие с часами. Но «над окном: время» основано на часах Друлса. Время окна использует момент, когда событие было вставлено в рабочую память, чтобы соответствовать правилу. Вам нужно использовать потоковый режим Drools.


person Ansemo Abadía    schedule 25.03.2015    source источник


Ответы (1)


Какова связь между @timestamp и "over window:time"? Окно длиной d выбирает событие, содержащее метку времени x, если now.d < x <= now.

Что произойдет, если мне нужно вставить неотсортированные события (по отметке времени) в рабочую память? Этого не следует делать, если модуль не находится в "облачном" режиме. Временная метка — это, по сути, не что иное, как длинное значение, и ее все равно можно оценить. Однако следует тщательно подумать, прежде чем делать это, так как это может привести к результатам, отличным от выполнения, при котором вставки выполняются в правильном порядке.

Могу ли я использовать временную метку, обозначаемую моим событием, вместо временной метки, обозначаемой временем вставки? Похоже, вы делаете именно это из-за @timestamp(date) в операторе объявления DRL.

person laune    schedule 25.03.2015