有没有办法检测和报告流中的重复项?
例如: 包含具有用户名和IP地址的元组的用户登录数据流。 目标是在最后10秒内检测来自不同IP的同一用户的登录。
我看过siddhi(wso2)和esper查询语言,但我无法想象如何实现这一点。
答案 0 :(得分:4)
在WSO2 CEP(Siddhi)中,您可以使用“模式”
来实现此目的示例查询:
from every a1 = authStream
-> b1 = authStream[username == a1.username and ipAddress != a1.ipAddress]
within 10000 insert into alertStream a1.username as detectedUserName
在上面的查询中,a1和b1引用了来自authStream的2个事件,我们将寻找其用户名相等且ip地址不同的模式。使用'within'关键字,我们可以限制此模式应在其中发生的时间段(以毫秒为单位)。然后我们将找到的匹配项插入alertStream。
有关模式的更多信息,请查看WSO2 CEP documentation on patterns。 This page on advanced queries也可以提供帮助。
答案 1 :(得分:2)
Esper,例如使用匹配识别的SQL模式建议标准:
select * from AuthStream.win:time(10 sec)
match_recognize (
partition by username
measures A.username as a_name
pattern (A B)
define
B as B.ipaddress != A.ipaddress
)