1、大頂堆、小頂堆

特别适合topN問題,如求海量日志中最大的100個數。既然是海量資料,那麼記憶體中一下子無法加載所有的資料集,此時可以先讀取海量資料中的100個數,建立資料集為100的小頂堆(小頂堆的對頂比所有元素都小),然後依次往堆結構中讀取數字,調整堆,使其保持小頂堆,最後得到top100的最大數。
2、hash映射進行分治,然後歸并
hash映射按照資料特征把海量資料變的不海量,然後分别處理各段資料,再歸并處理。例如:給定兩個檔案,各存放50億個url,讓你找出兩個檔案中共同的url,則可以根據url的特征,将兩個檔案分别映射到上千個小檔案中,隻要保證兩個檔案用的相同的hash映射方法,那麼相同的url映射後一定在相同的小檔案中,是以逐一比較各個小檔案中的url,然後歸并即可。
3、hash統計
以特征為key值利用hash表進行統計,比如,求一本書中26個字母出現的個數,可以以26個字母分别為key值,進行hash統計即可。
4、bloom filter
可以用于判重,此方法存在一定的誤差,但是比較高效。方法是利用多種不同的hash方法對資料集做hash運算,将對應的結果為key,值為1,然後判斷一個新數在不在這個資料集中,則用相同的n中hash方法進行計算,如果全為1則認為在,任何一個不為1,則認為不在。
5、外排序
外隻的是外存,因為記憶體一下子放不下海量的資料,是以隻好把大資料拆成小資料,在記憶體中進行排序,在外存中進行存儲。基本思想是先對大資料拆分成n個小資料,然後對小資料排序,然後放入檔案中,再用歸并的方法,将已排序的小資料集進行歸并。
6、bitmap
位圖用一個bit位來标記某個元素所對應的value,而key即是該元素本身,位圖可以節約大量的空間。例如判斷一個32位的整數是否在海量的32位整數資料集中出現過,則可使用位圖。
7、多層劃分
和hash映射類似也是分而治之,隻不過是如果資料集恰好有一些可以分層的特點,則可以直接分層化大為小。如,海量32位整數的資料集中找中位數,首先我們将int劃分為2^16個區域,然後讀取資料統計落到各個區域裡的數的個數,之後我們根據統計結果就可以判斷中位數落到那個區域,同時知道這個區域中的第幾大數剛好是中位數。最後再次掃描我們隻統計落在這個區域中的那些數就可以了。
8、tire樹
比較适合字元串類的查找,如把1000萬個單詞中的大量的重複單詞去掉,可以使用tire樹進行查重。
9、mapreduce
有現成的大資料計算架構。