我在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等聚合数据结构。但他们没有帮助。
即使是更多搜索的关键字也会受到赞赏。 感谢。