[面试题]海量数据内存受限的处理

文章介绍了在内存有限的情况下,如何利用分而治之的策略和哈希映射来处理大量数据。对于百亿条IP数据,通过将IP转换并取模分到多个文件中,然后统计词频并排序获取top1000。对于两个大型URL文件,同样通过哈希映射找到共同的URL。整个过程涉及数据分片、哈希函数、排序和集合操作。
摘要由CSDN通过智能技术生成

参考https://blog.csdn.net/v_july_v/article/details/7382693

一、分而治之/hash映射

1、针对数据太大,内存受限,只能是:把大文件化成(取模映射)的小文件,即16字方针:大而化小,各个击破,缩小规模,逐个解决

2、hash_map词频统计:当大文件转出成了小文件,那么我们便可以采用常规的hash_map(ip,value)来进行词频统计。

3、堆/快速排序:统计完了之后,便进行排序,得到出现次数最多的值

二、有一百亿条数据和8G内存,统计top1000的ip

1、估测一下数据量

一个ip最多是 xxx.xxx.xxx.xxx共15个char(1char=1byte)

1亿*100=1500000000byte*100=1.5G*100=150G,可分成1000个文件,每个文件150M

2、将ip转换成long,然后用100取余,分到100个文件中

3、一个文件一个文件的处理,进行词频统计

读一个文件,将数据存成map(ip,sum)

进行排序,求一个文件的top100,写到文件中

4、处理所有文件,得到top100

三、有a、b两个文件,各放50亿个url,每个url64字节,内存限制是4G,让你找出a,b两个文件共同的url

1、估测一下数据量

50亿*64KB=50 00000000 * 64KB=320G,即每个文件520G,分成1000个小文件的话,每个小文件320M

2、分而治之/hash映射

遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为a0,a1,a2,...,a999)中。这样每个小文件的大小为320M。遍历文件b,采取和a相同的方式将url分别存储到1000小文件中(记为b0,b1,b2,...,b999)。这样处理后,所有可能相同的url都在对应的小文件(a0 vs b0,a1 vs b1,a2 vs b2,...,a999 vs b999)中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的url即可。

3、hash_set统计

求每对个小文件中相同的URL时,可以把其中一个小文件的URL存储到hash_set中,然后遍历另一个小文件的每个URL,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值