[英]Using NEsper to read LogFiles for reporting purposes
我們正在評估 NEsper。 我們的重點是監控企業環境中的數據質量。 在一個應用程序中,我們將記錄許多字段的每次更改 - 例如在“訂單”中。 所以我們有像這樣的字段
....還有更多的領域。 可以想象,日志文件會變得越來越大。
因為數據是由不同的客戶發送的,並且是在應用程序中導入的,所以我們要分析有多少(以及哪些)字段從“無值”更新為“有值”(僅作為示例)。
我試圖用字段構建一個測試用例
對於我的測試用例,我添加了兩個帶有上下文信息的語句。 第一個應該只計算每個訂單的一般變化:
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-Stream 中。
在 CSV 文件中使用 10 個條目一切正常。 使用 100 萬行需要很長時間。 我試過沒有 EPL-Statement(所以只有 CSV 導入) - 大約需要 5 秒。 對於第一個語句(不是復雜的模式語句),我總是在 20 分鍾后停止 - 所以我不確定需要多長時間。
然后我更改了第一條語句的 EPL:我引入了 group by 而不是 context。
select Ref,count(*) as x from LogEvent group by Ref
現在它真的很快 - 但是在 CSVInputAdapter 返回后,我的 NewEvents Stream 中沒有任何結果......
我的問題:
我想使用 NEsper 的方式是受支持的用例還是這是我失敗的根本原因?
如果這是一個有效的用例:我的錯誤在哪里? 我怎樣才能以高性能的方式獲得我想要的結果?
當使用“group by”而不是“context”時,為什么我的 EPL 語句中沒有 NewEvents?
對 1),是的
2) 這是有效的,您的 EPL 設計可能有點低效。 您可能想通過使用過濾器索引和索引條目來了解模式的工作原理,它們的創建成本更高,但在丟棄不需要的事件方面速度非常快。 閱讀: http : //esper.espertech.com/release-7.1.0/esper-reference/html_single/index.html#processingmodel_indexes_filterindexes以及http://esper.espertech.com/release-7.1.0/esper-reference /html_single/index.html#pattern-walkthrough也許嘗試“上一個”。 分別衡量每個語句的性能。 此外,我認為 CSV 適配器並未針對處理大文件進行優化。 我認為 CSV 可能無法流式傳輸。
3)檢查你的代碼? 不要將 CSV 文件用於大文件。 確保已附加偵聽器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.