常见海量数据处理问题的解决思路

基本思路

  • 哈希分片。计算每一个数据的哈希码,再进行求模运算,这样相同的数据将进入相同的分片。
  • 字典树/哈希表。对每一个分片,统计数据出现的次数。
  • 堆。利用堆求topK问题。
  • 归并。因为每一个分片之间不存在重复数据,归并过程就很简单。

常见题目

给定a、b两个文件,各存放50亿个url,每一个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

  分别对a、b两个文件进行哈希分片,方法是hash(s)%1000,这样将获得2000个文件,分别是a0,a1,...a999,b0,b1,...b999。分别对ai和bj进行处理,方法是将ai中的数据放入哈希表中,而后判断bj中的数据是否出如今该哈希表中,若是是,那么它就是公共数据。url

在2.5亿个整数中找出不重复的整数,内存不足以容纳这2.5亿个整数。

  利用2比特的BitMap。00表示不存在,01表示出现一次,11表示出现屡次,依次将2.5亿个数放入BitMap中,须要的内存大约是2^32*2bit=1GB。设计

1000万字符串,其中有些是重复的,须要把重复的所有去掉,保留没有重复的字符串。请怎么设计和实现?

  利用哈希分片,将1000万字符串分为100个小文件,而后对每一个小文件去重,方法是利用字典树。最后将这100个结果合并起来。内存

一个文本文件,找出前10个常常出现的词,但此次文件比较长,说是上亿行或十亿行,总之没法一次读入内存,问最优解。

  首先进行哈希分片,将全部数据分为100个小文件,而后再利用字典树对每一个小文件统计次数,再计算topK,能够使用最小堆,最后归并。字符串

将多个集合合并成没有交集的集合:给定一个字符串的集合,格式如:(aaa,bbb,ccc),(ccc,dddd),(eee),(mmm)。要求将其中交集不为空的集合合并,要求合并完成的集合之间无交集,例如上例应输出(aaa,bbb,ccc,ddd),(eee),(mmm)。

  利用并查集实现。hash

相关文章
相关标签/搜索