在滑动时间窗口中计算日志文件中的事件数

时间:2015-01-12 10:19:56

标签: java logging data-structures

我在Linux OS上有一个Apache Web Server的日志文件。目前,我有兴趣获取100个频繁的IP地址,其频率在最近5分钟内连接到我的服务器。对于这些IP地址中的每一个,我需要维护他们访问过的URL列表以及访问每个URL的频率。我这样做的方式如下:

1-我创建了一个队列,将每个行的时间戳添加到其末尾 2-在每个时代,例如1秒钟,我检查日志并添加带有时间戳的新日志,以及检查队列前面的项目,如果他们的时间戳不在5分钟内,我将把它们从队列中删除。
3-我创建了一个字典,java哈希映射,其中IP为键,值为整数count,另一个哈希映射包含带计数的URL(URL为键,计为值)。请注意,IP哈希映射的值是散列映射(URL散列映射)和计数 4-每个插入队列包括添加/更新IP哈希映射的值,然后是相应的URL哈希映射 5-每个队列删除都包括更新/删除IP哈希映射的值和相应的URL哈希映射。

这有效,但我有两个问题:

1-这个操作虽然对我来说是可行的,但可能不适合1秒的时代,
2-它耗费了大量的内存!

我也搜索了太多,并检查了追溯数据结构,像Fenwick等聚合数据结构。但他们没有帮助。

即使是更多搜索的关键字也会受到赞赏。 感谢。

0 个答案:

没有答案