/ /エスパークエリ言語を使用した道路上の車の輻輳制御クエリ-java、cep、esper

Esper Query Languageを使用した道路上の自動車の渋滞制御クエリ - java、cep、esper

のシミュレーションからデータを受信して​​います次の形式: 現時点では、ストリート7からストリート11に行く2台の車があります(動きを監視するためにセンサーが配置されている多数のゾーンを通過するため)。

今、私は最も遅い時間に信号を止めたいcar#1とcar#2の違いはわずか3秒以下です。 どうすればそれをエスパークエリ言語で行うことができます。 上記の条件が満たされるとすぐにイベントを生成できる複雑なイベント処理のクエリを作成する必要があります。 データからわかるように、最初はcar#1がStreet#7に入る時刻は42500ですが、car#2がStreet#7に入るときの時刻は42508であり、8秒の時間差があります。

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

回答:

回答№1は0

これは、車のイベントの参加のように聞こえます1車2のイベントで。質問は、参加するイベントのサブセットです。ユースケースでは、各自動車が訪れた道路の履歴を保持する必要があるようです。これには、長さのウィンドウ、一意のウィンドウ、またはこれらのウィンドウの結合を使用できます。最後の10通りまたはイベントを考慮した長さのウィンドウを使用してみましょう。たとえば、次のようなクエリ:

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