从1亿个ip中找出访问次数最多的IP

本文通过实例介绍了如何处理海量数据问题,以从1亿个IP中找出访问次数最多IP为例,阐述了利用分而治之策略进行数据拆分和统计的方法。首先生成数据,然后通过Hash取模将数据拆分为小文件,接着逐个读取文件统计IP访问次数,最终确定最高访问次数的IP。这种方法适用于内存有限的情况,提供了一种高效处理大数据的思路。
摘要由CSDN通过智能技术生成

看了教你如何迅速秒杀掉:99%的海量数据处理面试题一文,的确是挺有收获的,特别是对这种海量数据的处理,的确是有了一个挺清晰的思路,特别感谢原文博主July。

处理海量数据问题存在的原因就在于1)数据量太大,无法在短时间内解决;2)内存不够,没办法装下那么多的数据。

而对应的办法其实也就是分成1)针对时间,合适的算法+合适的数据结构来提高处理效率;2)针对空间,就是分而治之,将大数据量拆分成多个比较小的数据片,然后对其各个数据片进行处理,最后再处理各个数据片的结果。

原文中也给出一个问题,“从1亿个ip中访问次数最多的IP”,就试着来解决一下吧。

1)首先,生成1亿条数据,为了产生更多的重复ip,前面两节就不变了,只随机生成后面的2节。

	private static String generateIp() {
		return "192.168." + (int) (Math.random() * 255) + "."
				+ (int) (Math.random() * 255) + "\n";
	}
	private static void generateIpsFile() {
		File file = new File(FILE_NAME);
		try {
			FileWriter fileWriter = new FileWriter(file);
			for (int i = 0; i < MAX_NUM; i++) {
				fileWriter.write(generateIp());
			}
			fileWriter.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}	
1个char是一个Byte,每个ip大概是15Btye,所以生成的ip文件,大概是1,500,000,000Byte = 1,500,000 KB,如下:

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值