bitmap和布隆過濾器簡單總結

一、BitMap

解決的問題:大數據量下的排序、查找、去重。

1、關鍵

通過 bit位 表示一個數值的狀態(是否存在),那麼1MB能大約表示 800萬數值 (1,000,000B * 8 bit )

2、侷限性:

1、內存限制:10位的數值(即99億), 佔用 1.25GB內存
2、一般應用在數值類型。字符串映射到 BitMap 存在Hash碰撞的問題(引入bloom filter)
3、不適合數據稀疏。比如要存入(10,10000,100000000)這三個數據(引入 Roaring BitMap)

3、應用場景
  • 對 不重複的 密集整數 進行排序
  • 查找數據是否存在海量集合中
  • 找出沒有重複的數據(兩個bit位標識一個數值的狀態)

二、Bloom Filter

解決的問題: 判斷一個元素是否屬於這個集合

1、關鍵

內存佔用極少,不侷限於數值類型。

2、侷限性

存在錯誤率。

PS.
哈希函數個數 k、 位數組大小 m、輸入key的數量 n
對於給定的m、n,當 k = ln(2)* m/n 時出錯的概率是最小

3、應用場景

三、基數計算

hyperloglog,落地場景:kylin & spark 對於 count distinct 操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章