2013-11-27 47 views
1

我目前有一个订单对象。我们可以假设它有三个称为orderId,状态和价格的字段。如何从流中删除元素

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

在整个订单的生命周期中,状态和填充量会发生变化。每当有一个场变化,我们将其推送到艾斯波运行时经由:

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

现在每个顺序通过的SendEvent其不同的对象比以前的顺序的对象(即,不是参考)加入的时间。这意味着旧的订单对象不应再流入以供查看的语句

我希望像下面这样的语句只对流中Order的最新版本进行操作,即概念上应该只有一个顺序对象为流中的每个物理顺序。

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

有没有办法删除旧的订单对象? 我可以使用参考,因此我只更新旧订单对象,然后再次推送它? 有没有另一种方法?

我目前使用Nesper

回答

1

您可以创建一个拥有独特的事件命名的窗口(旧的副本被逐出)

类似:

"create window OrderWin.std:unique(orderId) as Order" 
"insert into "OrderWin select * from Order" 
"select * from OrderWin where ..." 
0

另一个答案是改变窗口。保持所有事件可能不是你想要的。尝试使用不同的窗口,例如...

假设您只想要每个符号的最后一笔交易。从tradeEvent.std

选择*:你可以做以下独特(符号)

此只保留最后一个事件,每个事件匹配给定的符号。