/ / Consulta de control de congestión para automóviles en la carretera usando Esper Query Language - java, cep, esper

Consulta de control de congestión para automóviles en carretera con Esper Query Language - java, cep, esper

Estoy recibiendo los datos de una simulación en elsiguiente formato: Como se puede ver, por el momento hay dos autos que van de la calle 7 a la calle 11 (ya que cruzan numerosas zonas donde se colocan sensores para monitorear el movimiento).

Ahora quiero detener una señal cuando la última vezLa diferencia entre el auto n. ° 1 y el auto n. ° 2 es de solo 3 segundos o menos. ¿Cómo puedo hacer eso en el lenguaje de consulta esper? Tengo que escribir una consulta para el procesamiento de eventos complejos que me permitirá generar un evento tan pronto como se cumpla la condición anterior. A partir de los datos, se puede ver que inicialmente el tiempo cuando el auto # 1 ingresa a la calle # 7 es 42500, mientras que cuando el auto # 2 ingresa a la calle # 7 el tiempo es 42508, haciendo la diferencia de tiempo de 8 segundos.

    { 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" }
---------------------------------------

Respuestas

0 para la respuesta № 1

Esto suena un poco como una combinación de eventos para automóvil 1con eventos del auto 2. La pregunta es entonces a qué subconjunto de eventos unirse. El caso de uso parece requerir retener algo de historia de las calles que fueron visitadas por cada automóvil. Para esto podríamos usar una ventana de longitud o una ventana única o una unión de estas ventanas. Usemos una ventana de longitud que considere las últimas 10 calles o eventos. Por ejemplo, una consulta como esta:

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