海量数据面试题(二)提取两大文件的公共url

55 阅读1分钟

两个海量文件,各存放50亿url,每个url各占64字节,内存的限制是4G,让你找出a,b中共同的url。

1G=80亿but,每个文件5G*64=320G,远超过4G的限制,那怎么办呢?

还是利用分而治之,主要步骤是:

  1. 将两文件都用hash(url)%1000,分成1000个小文件,这样两个文件中所有可能相同的url都会被分到相同下标的两个小文件中。
  2. 320G/1000,那么每个文件大约300M。这样可以同时载入内存,利用map的特性,先构造一个文件的map,然后再遍历另一个文件,遇到相同的就得到了共同的url。
  3. 将遍历过程中的共同的url直接写入文件,防止map的空间也会超过内存。