给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,如何找出A、B共同的URL?
50亿*64*2大约需要640G内存,显示超出了限制。给出以下3中解决方案:
1.放入数据库中查找;
2.URL经过MD5或SHA-1单向哈希后再保存到HashSet或数据库;
3.BitMap方法。
缺点:
1方法,数据量变的非常庞大之后,关系型数据库查询效率会变低,因为每来一个URL,就会查询一次;
2方法,(MD5功能:输入任意长度的信息,经过处理,输出为128位的信息;SHA-1输出为160位),MD5大约需要50亿*2*2内存,超出得到减少,但还是内存不够用;
3方法,最省空间,每条URL只占一位,50亿/8的空间,但是哈希冲突的概率太高。如果想把冲突发生概率降低到1%,则要讲bitmap长度设置为URL个数的100倍,就是需要50亿*100/8的空间。