我正在评估 ATM 卡交易欺诈检测的不同可能解决方案,输入负载约为每秒 50000 次,响应时间为几秒。
WSO2 CEP 看起来更适合整体解决方案,但由于我是 WSO2 CEP 的新手,所以遇到了内存和性能问题,所以请建议在 CEP WSO2/CEP 中是否有更好的方法。
为了检测欺诈,我们必须在 1 天的时间段内捕获数据聚合,这会导致内存溢出或性能下降。
1)由于CEP试图将所有记录保存在内存中一整天,导致内存不足
from instream#window.time(1 day)
select sum(amount) as totalAmt;
2) 下面导致性能下降,因为它尝试从表中加载所有记录以进行某些操作。
define table instream_table (....) from ( datasource,table,cache policy) ;
from instream#window.length(1) join instream_table
on instream.card_id==intable.card_id
select sum(instream_table.amount) as totalAmt;
最糟糕的事情是我注意到 CEP 触发了,select * from instream_table
而不是为 card_id 添加了 where 子句,我希望 CEP 足够智能以触发select sum(amount) from instream_table where card_id=xxxxx
我查看了 WSO2 CEP 中窗口的文档,但找不到任何优化方法,因为看起来 WSO2 CEP 尝试处理内存中的所有内容。
让我知道是否有任何解决方法或更好的解决方案来实现这一目标。我看过其他 CEP 引擎,比如 esper,但似乎每个人都在以同样的方式这样做。