**:
1.bloom filter
對於原理來說很簡單,位陣列+k個獨立hash函式。將hash函式對應的值的位陣列置1,查詢時如果發現所有hash函式對應位都是1說明存在,很明顯這
個過程並不保證查詢的結果是100%正確的。同時也不支援刪除乙個已經插入的關鍵字,因為該關鍵字對應的位會牽動到其他的關鍵字。所以乙個簡單的改進就是
還有乙個比較重要的問題,如何根據輸入元素個數n,確定位陣列m的大小及hash函式個數。當hash函式個數k=(ln2)*(m/n)時錯誤率最小。在
錯誤率不大於e的情況下,m至少要等於n*lg(1/e)才能表示任意n個元素的集合。但m還應該更大些,因為還要保證bit陣列裡至少一半為0,則m應
bloom
filter將集合中的元素對映到位陣列中,用k(k為雜湊函式個數)個對映位是否全1表示元素在不在這個集合中。counting bloom
filter(cbf)將位陣列中的每一位擴充套件為乙個counter,從而支援了元素的刪除操作。spectral bloom
根據這個問題我們來計算下記憶體的占用,4g=2^32大概是40億*8大概是340億,n=50億,如果按出錯率0.01算需要的大概是650億個bit。
2.hashing
d-left
hashing中的d是多個的意思,我們先簡化這個問題,看一看2-left hashing。2-left
hashing指的是將乙個雜湊表分成長度相等的兩半,分別叫做t1和t2,給t1和t2分別配備乙個雜湊函式,h1和h2。在儲存乙個新的key時,同
時用兩個雜湊函式進行計算,得出兩個位址h1[key]和h2[key]。這時需要檢查t1中的h1[key]位置和t2中的h2[key]位置,哪乙個
位置已經儲存的(有碰撞的)key比較多,然後將新key儲存在負載少的位置。如果兩邊一樣多,比如兩個位置都為空或者都儲存了乙個key,就把新key
3.bit-map
4.堆
基本原理及要點:最大堆求前n小,最小堆求前n大。方法,比如求前n小,我們比較當前元素與最大堆裡的最大元素,如果它小於最大元素,則應該替換那個最大元
5.雙層桶劃分
實際上,如果不是int是int64,我們可以經過3次這樣的劃分即可降低到可以接受的程度。即可以先將int64分成2^24個區域,然後確定區域的第幾
大數,在將該區域分成2^20個子區域,然後確定是子區域的第幾大數,然後子區域裡的數的個數只有2^20,就可以直接利用direct addr
6.資料庫索引
7.倒排索引(inverted index)
正向索引開發出來用來儲存每個文件的單詞的列表。正向索引的查詢往往滿足每個文件有序頻繁的全文查詢和每個單詞在校驗文件中的驗證這樣的查詢。在正向索引
中,文件佔據了中心的位置,每個文件指向了乙個它所包含的索引項的序列。也就是說文件指向了它包含的那些單詞,而反向索引則是單詞指向了包含它的文件,很
8.外排序
9.trie樹
10.分布式處理 mapreduce
海量資料處理方法總結
適用範圍 第k大,中位數,不重複或重複的數字 基本原理及要點 因為元素範圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定範圍,然後最後在乙個可以接受的範圍內進行。可以通過多次縮小,雙層只是乙個例子。擴充套件 問題例項 1 2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個...
海量資料處理分析方法
2008 08 06 08 04 海量資料是發展趨勢,對資料分析和挖掘也越來越重要,從海量資料中提取有用資訊重要而緊迫,這便要求處理要準確,所以,對海量資料的研究很有前途,也很值得進行廣泛深入的研究。在實際工作中,有幸接觸到海量的資料處理問題,對其進行處理是一項艱鉅而複雜的任務。原因有以下幾個方面 ...
海量資料處理方法歸類
解決思路 典型的top k演算法。模板 先用hashmap統計頻率 或去重 維護乙個k大小的堆,統計top k就行了。解決思路 可以估計每個檔案安的大小為5g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。遍歷檔案a,對每個url求取hash...