常見海量數據處理問題的解決思路

基本思路

  • 哈希分片。計算每一個數據的哈希碼,再進行求模運算,這樣相同的數據將進入相同的分片。
  • 字典樹/哈希表。對每一個分片,統計數據出現的次數。
  • 堆。利用堆求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

相關文章
相關標籤/搜索