1

現在、注文オブジェクトがあります。orderId、state、price という 3 つのフィールドがあると想定できます。

class Order
{
    public int orderId;
    public String state;
    public int filled;
}

注文の有効期間中、状態と約定数量は変化します。フィールドの変更があるたびに、次の方法でそれを esper ランタイムにプッシュします。

Order o .....;
epService.EPRuntime.SendEvent(o);

SendEvent を介して注文が追加されるたびに、以前の注文オブジェクトとは異なるオブジェクトになります (つまり、参照ではありません)。これは、古い注文オブジェクトがステートメントのストリームに存在しなくなったことを意味します。

以下のようなステートメントは、ストリーム内の注文の最新バージョンでのみ動作するようにします。つまり、概念的には、ストリーム内の各物理注文に対して 1 つの注文オブジェクトのみが存在する必要があります。

 "select filled from OrderStream.win:keepall() where orderId= 1234"

古い Order オブジェクトを削除する方法はありますか? 参照を使用して、古い注文オブジェクトを更新してから再度プッシュすることはできますか? 別の方法はありますか??

私は現在使用していますNesper

4

2 に答える 2

1

一意のイベントを保持する名前付きウィンドウを作成できます (古い重複は削除されます)。

何かのようなもの :

"create window OrderWin.std:unique(orderId) as Order"
"insert into "OrderWin select * from Order"
"select * from OrderWin where ..."
于 2014-03-28T17:26:14.453 に答える
0

別の答えは、ウィンドウを変更することです。すべてのイベントを保持することは、おそらくあなたが望んでいたことではありません。たとえば、別のウィンドウを使用してみてください...

シンボルごとの最後の取引のみが必要だとしましょう。次のことができます。

select * from tradeEvent.std:unique(symbol)

これにより、特定のシンボルに一致する各イベントの最後のイベントのみが保持されます。

于 2014-06-25T00:08:22.393 に答える