一、大頂堆、小頂堆框架
特別適合topN問題,如求海量日誌中最大的100個數。既然是海量數據,那麼內存中一會兒沒法加載全部的數據集,此時能夠先讀取海量數據中的100個數,創建數據集爲100的小頂堆(小頂堆的對頂比全部元素都小),而後依次往堆結構中讀取數字,調整堆,使其保持小頂堆,最後獲得top100的最大數。大數據
二、hash映射進行分治,而後歸併url
hash映射按照數據特徵把海量數據變的不海量,而後分別處理各段數據,再歸併處理。例如:給定兩個文件,各存放50億個url,讓你找出兩個文件中共同的url,則能夠根據url的特徵,將兩個文件分別映射到上千個小文件中,只要保證兩個文件用的相同的hash映射方法,那麼相同的url映射後必定在相同的小文件中,因此逐一比較各個小文件中的url,而後歸併便可。日誌
三、hash統計blog
以特徵爲key值利用hash表進行統計,好比,求一本書中26個字母出現的個數,能夠以26個字母分別爲key值,進行hash統計便可。排序
四、bloom filter內存
能夠用於判重,此方法存在必定的偏差,可是比較高效。方法是利用多種不一樣的hash方法對數據集作hash運算,將對應的結果爲key,值爲1,而後判斷一個新數在不在這個數據集中,則用相同的n中hash方法進行計算,若是全爲1則認爲在,任何一個不爲1,則認爲不在。字符串
五、外排序hash
外只的是外存,由於內存一會兒放不下海量的數據,因此只好把大數據拆成小數據,在內存中進行排序,在外存中進行存儲。基本思想是先對大數據拆分紅n個小數據,而後對小數據排序,而後放入文件中,再用歸併的方法,將已排序的小數據集進行歸併。it
六、bitmap
位圖用一個bit位來標記某個元素所對應的value,而key便是該元素自己,位圖能夠節約大量的空間。例如判斷一個32位的整數是否在海量的32位整數數據集中出現過,則可以使用位圖。
七、多層劃分
和hash映射相似也是分而治之,只不過是若是數據集剛好有一些能夠分層的特色,則能夠直接分層化大爲小。如,海量32位整數的數據集中找中位數,首先咱們將int劃分爲2^16個區域,而後讀取數據統計落到各個區域裏的數的個數,以後咱們根據統計結果就能夠判斷中位數落到那個區域,同時知道這個區域中的第幾大數恰好是中位數。最後再次掃描咱們只統計落在這個區域中的那些數就能夠了。
八、tire樹
比較適合字符串類的查找,如把1000萬個單詞中的大量的重複單詞去掉,可使用tire樹進行查重。
九、mapreduce
有現成的大數據計算框架。