登录日志java_Java-用java实现检索大量日志文件中的用户登录信息

这个问题的难度是数据量太大,而且还不能使用第三方工具。

如果不考虑时间的话,简单的想了一个思路:

1、首先将12G的日志文件切分成比如:100份,每份120M左右。如果内存太少,可以切分成更多份。

2、由于切分后的每个文件比较小,因此可以针对每个切分后的文件进行统计,得出每个切分后的文件的统计数据。(在统计时注意不需要一次读入所有的数据,可以按行读取,统计完就丢弃)

3、合并统计数据,如果统计数据比较大,可以考虑合并每份文件的统计中登录次数最多的前n个用户(比如:前100个)。合并后可以得出活跃用户了。活跃用户的登录次数也同时可以计算出来了。如果统计出的活跃用户在某个切分后的文件中的前100条中没有,那可以单独再取一下该切分文件针对该用户的统计结果,或者是再多取一些(比如前500条),重新统计。

4、统计某个指定用户的登录记录比较好做,就是逐个遍历每份切分后的文件,只统计该用户的登录记录(可分批写入文件)。

这个方法没有测试,可能会时间比较长一些。如果时间太长,可以考虑统计多份文件时采用多线程同时处理。

另外,统计的结果数据主要是用户名、登录次数,之所以要切分是假设统计的结果数据可能会比较大,内存会不够,比如上百万的用户。如果实际上统计的结果数据并不大的话,不切分应该也行。另外一个就是切分后可以并行处理。

合并统计数据之所以取前n条数据进行合并,也是假设结果数据量很大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值