/ / Query di controllo della congestione per le auto su strada che usano il linguaggio Esper Query - java, cep, esper

Query di controllo della congestione per le auto su strada usando Esper Query Language - java, cep, esper

Sto ricevendo i dati da una simulazione inseguente formato: Come si può vedere, per il momento ci sono due auto che vanno da Street 7 a Street 11 (mentre attraversano numerose zone in cui sono posizionati i sensori per monitorare il movimento).

Ora voglio interrompere un segnale quando l'ultima voltala differenza tra l'auto n. 1 e l'auto n. 2 è di soli 3 secondi o meno. Come posso farlo in un linguaggio di query esper. Devo scrivere una query per l'elaborazione di eventi complessi che mi consentirà di generare un evento non appena viene soddisfatta la condizione di cui sopra. Dai dati si può vedere che inizialmente l'ora in cui l'auto # 1 entra in Street # 7 è 42500, mentre quando l'auto # 2 entra in Street # 7 il tempo è 42508, facendo la differenza di tempo di 8 secondi.

    { time: 42500,
location: { Zone: "Z3", Street: "Street#7" },
carID: "car#1" }
---------------------------------------
{ time: 42502,
location: { Zone: "Z5", Street: "Street#7" },
carID: "car#1" }
---------------------------------------
{ time: 42502,
location: { Zone: "Z1", Street: "Street#8" },
carID: "car#1" }
---------------------------------------
{ time: 42504,
location: { Zone: "Z4", Street: "Street#8" },
carID: "car#1" }
---------------------------------------
{ time: 42505,
location: { Zone: "Z5", Street: "Street#8" },
carID: "car#1" }
---------------------------------------
{ time: 42505,
location: { Zone: "Z1", Street: "Street#9" },
carID: "car#1" }
---------------------------------------
{ time: 42507,
location: { Zone: "Z4", Street: "Street#9" },
carID: "car#1" }
---------------------------------------
{ time: 42508,
location: { Zone: "Z3", Street: "Street#7" },
carID: "car#2" }
---------------------------------------
{ time: 42508,
location: { Zone: "Z5", Street: "Street#9" },
carID: "car#1" }
---------------------------------------
{ time: 42508,
location: { Zone: "Z1", Street: "Street#10" },
carID: "car#1" }
---------------------------------------
{ time: 42509,
location: { Zone: "Z4", Street: "Street#10" },
carID: "car#1" }
---------------------------------------
{ time: 42509,
location: { Zone: "Z5", Street: "Street#7" },
carID: "car#2" }
---------------------------------------
{ time: 42509,
location: { Zone: "Z1", Street: "Street#8" },
carID: "car#2" }
---------------------------------------
{ time: 42511,
location: { Zone: "Z5", Street: "Street#10" },
carID: "car#1" }
---------------------------------------
{ time: 42511,
location: { Zone: "Z1", Street: "Street#11" },
carID: "car#1" }
---------------------------------------
{ time: 42511,
location: { Zone: "Z4", Street: "Street#8" },
carID: "car#2" }
---------------------------------------
{ time: 42512,
location: { Zone: "Z4", Street: "Street#11" },
carID: "car#1" }
---------------------------------------
{ time: 42512,
location: { Zone: "Z5", Street: "Street#8" },
carID: "car#2" }
---------------------------------------
{ time: 42512,
location: { Zone: "Z1", Street: "Street#9" },
carID: "car#2" }
---------------------------------------
{ time: 42513,
location: { Zone: "Z5", Street: "Street#11" },
carID: "car#1" }
---------------------------------------
{ time: 42513,
location: { Zone: "Z1", Street: "Street#12" },
carID: "car#1" }
---------------------------------------

risposte:

0 per risposta № 1

Sembra un po 'come unire gli eventi per l'auto 1con eventi di auto 2. La domanda è quindi quale sottoinsieme di eventi a cui partecipare. Il caso d'uso sembra richiedere il mantenimento della storia delle strade visitate da ciascuna vettura. Per questo potremmo usare una finestra di lunghezza o una finestra unica o un'unione di queste finestre. Consente di utilizzare una finestra di lunghezza che considera le ultime 10 strade o eventi. Ad esempio una query come questa:

select * from Event(carID="car#1").win:length(20) as car1, Event(carID="car#2").win:length(20) as car2 where Math.abs(car1.time-car2.time) > 3 and car1.Location.Street = car2.Location.Street