基于三千万行数据统计的效率比较

这篇博客记录了处理三千万行日志数据的三种方法,包括使用JAVA BufferedReader、存入Redis以及多线程方案。第一种方法导致内存溢出,第二种方法耗时约6小时,第三种方法效果有限。最终,通过Linux命令行在15分钟内完成了统计。提供了JAVA实现代码及Linux shell命令示例。
摘要由CSDN通过智能技术生成

   先说一下场景,日志文件中有大约三千万行数据,大小为1.2G,格式为IP,TIME,现在要针对IP字段进行数量统计重复的次数,以便制定规则来控制用户的恶意注册。

关于如何读取,并统计这三千万的数据,有三个思路:

第一个:使用JAVA的BufferedReader,分批读取数据,然后再利用map统计结果。

第二个:使用JAVA的BufferedReader,分批读取数据,然后把结果直接存入到redis的sorted set中。

第三个:多线程环境下,结合第二个思路。

第一个思路,执行不到三分钟,内存已经溢出。

第二个思路,一秒钟大约能存入到redis中1667条数据,速度还不错,一小时能统计600万左右,但要统计完成,大约需要5个小时,考虑到数据越多,读写Redis的速度就越慢,估计要6个小时左右。

第三个思路,由于redis是单线程工作,此次又全部是写入的工作,所以多线程对性能提高的能力有限,如果是有读有写,可利用Redis的主从模式,写主库,读从库&#x

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值