ESPER を使用してルール エンジンを実装する必要があり
ます。そのためには、ルールのクエリを準備する必要があります (他に最適化された方法があれば、提案してください)。ルールは実行時に宣言可能であると同時に変更可能でなければなりません。
また、ルールを定義するための UI を作成する必要があります。
これを行うためのより良い最適化された方法を提案してください。
例:
実行時にさらにいくつかのルールを定義できます。
質問する
985 次
1 に答える
1
参照するコンテキストはほとんどありませんが、単純な解決策は、各 Order と各 Price の最新の状態を維持し、各ルールをエンジン サブスクリプションとして実装することです。エンジンは、次の EPL ステートメントで初期化できます。
/* Minimal schema-s */
create schema LiveOrder (user string, orderid string, quantity, double, symbol string);
create schema LivePrice (symbol string, price double);
/* create two windows to store the latest order by orderid, and latest price by symbol */
create window LiveOrders.std:unique(orderid) as select * from LiveOrder;
create window LivePrices.std:unique(symbol) as select * from LivePrice;
/* insert data into the windows when data arrives */
insert into LiveOrders select * from LiveOrder;
insert into LivePrices select * from LivePrice;
この時点で、すべての注文と価格が保存されているため、異なるルールで簡単に「結合」できます。数量が 100 を超える注文を行ったときにユーザーがアラートを必要とする場合は、次の EPL ステートメントを作成し、アラートを送信するリスナーをアタッチするだけです。
select * from LiveOrders where user='U1' and quantity > 100;
シンボルの注文額が 10000 を超えた場合にアラートを作成するには、この EPL で同じことを行います。
select LiveOrders.symbol as symbol, LiveOrders.quantity*LivePrices as total from LiveOrders
inner join LivePrices on LiveOrders.symbol=LivePrices.symbol
where LiveOrders.quantity*LivePrices > 10000
アラートが不要になったら、リスナーを削除して EPL ステートメントを破棄するだけです。
于 2014-09-30T02:37:49.087 に答える