我们正在评估NEsper。我们的重点是监视企业环境中的数据质量。在应用程序中,我们将记录许多字段上的每个更改--例如,按“顺序”记录。所以我们有这样的字段
....and有更多的字段。正如您可以想象的那样,日志文件将变得越来越大。
由于数据是由不同的客户发送并在应用程序中导入的,所以我们希望分析有多少字段(以及哪些字段)从“无值”更新到“值”(例如)。
我试图用字段构建一个测试用例。
对于我的测试用例,我添加了两个带有上下文信息的语句。第一个应该只计算每个顺序的一般变化:
epService.EPAdministrator.CreateEPL("create context RefContext partition by Ref from LogEvent");
var userChanges = epService.EPAdministrator.CreateEPL("context RefContext select count(*) as x, context.key1 as Ref from LogEvent");第二条语句应计数从“无值”到“值”的更新:
epService.EPAdministrator.CreateEPL("create context FieldAndRefContext partition by Ref,Fieldname from LogEvent");
var countOfDataInput = epService.EPAdministrator.CreateEPL("context FieldAndRefContext SELECT context.key1 as Ref, context.key2 as Fieldname,count(*) as x from pattern[every (a=LogEvent(Value = '') -> b=LogEvent(Value != ''))]");要读取测试日志文件,我使用csvInputAdapter:
CSVInputAdapterSpec csvSpec = new CSVInputAdapterSpec(ais, "LogEvent");
csvInputAdapter = new CSVInputAdapter(epService.Container, epService, csvSpec);
csvInputAdapter.Start();我不想使用更新侦听器,因为我只对所有事件的结果感兴趣(可能这是不可能的,这是我的失败)。
因此,在读取csv (csvInputAdapter.Start()返回)之后,我读取了所有事件,这些事件存储在NewEvents语句中。
使用CSV中的10个条目--可以正常工作。使用100万条线路,它需要从长到长。我尝试了没有EPL-语句(所以只是CSV导入)-它花了大约5秒。对于第一个语句(不是复杂的模式语句),我总是在20分钟后停止--所以我不知道需要多长时间。
然后,我更改了第一条语句的EPL :我通过上下文而不是上下文来介绍一个组。
select Ref,count(*) as x from LogEvent group by Ref现在它真的很快-但我没有任何结果在我的NewEvents流后,CSVInputAdapter回来.
我的问题:
发布于 2018-08-16 11:51:58
1),是的
这是有效的,您的EPL设计可能有点低效。您可能希望通过使用过滤器索引和索引条目来了解模式是如何工作的,它们的创建成本更高,但在丢弃不需要的事件时却非常快。阅读:filterindexes和single/index.html#pattern-walkthrough可能尝试“前面的”。分别衡量每个语句的性能。另外,我不认为CSV适配器是为处理大型文件而优化的。我认为CSV可能不会流动。
检查你的代码?不要将CSV文件用于大型文件。确保连接了侦听器。
https://stackoverflow.com/questions/51873832
复制相似问题