1. 程式人生 > >布隆過濾器和Hyperloglog基數統計的介紹

布隆過濾器和Hyperloglog基數統計的介紹

本文簡單介紹一下布隆過濾器和Hyperloglog基數統計的應用案例,希望能給讀者帶來一點思考和啟發

布隆過濾器

介紹:
布隆過濾器可以判斷一個元素是否在一個集合中。特點:該布隆過濾器中記錄元素的集合佔用的空間少,集合儲存的不是元素本身,而是能代表這個元素的對映。當然,判斷這個元素是否在集合中存在會有誤判機率,但是這個誤差機率可以控制在指定範圍。

應用案例:
-防止快取穿透
-過濾垃圾郵件
-等等。。。

使用工具的思路:
對於Java,可以使用google的Guava工具類BloomFilter
1)把所有目標元素新增進BloomFilter顧慮器集合
2)指定判斷的誤差概率
3)過濾器判斷某元素是否存在

使用該過濾器防止快取穿透的做法是用過濾器判斷請求的元素是否在快取中存在,如果不存在就程式返回空值,如果存在就繼續從快取中讀取元素。如果誤判-快取中並沒有該元素,才從資料庫讀取元素。

原理:請參看推薦閱讀: 數學之美 二十一 布隆過濾器(Bloom Filter)

Hyperloglog

介紹:
HyperLogLog 可以接受多個元素作為輸入,並給出輸入元素的基數估算值。特點是,即使輸入元素的數量或者體積非常非常大,計算基數所需的空間總是固定的、並且是很小的。

應用案例:
-統計網站訪問人數
-統計獨立IP數
-等等。。。

使用工具的思路:
對於Redis,可以使用PFADD 和 PFCOUNT 命令
1)將任意數量的元素新增到指定的 HyperLogLog 裡面
2)返回給定 HyperLogLog 的基數估算值

啟發

1)布隆過濾器和Hyperloglog都是大資料量場景下利用雜湊函式和概率論的數學知識犧牲準確性換取空間的解決問題思路。
2)雜湊函式太重要了,應用領域非常廣。
3)量變到質變。當資料量不大時候,用常規的方法可以得到問題的精準答案,但當資料量變得非常大的時候,常規方法無法解答或者無法獲得精準答案,這時候可以用概率論的方法嘗試解決問題,這恰好體現了概率論在大資料方面的應用價值。而概率論又恰好需要有大資料量的基礎去體現理論的正確性。

推薦閱讀

如果想知道更多數學知識在計算機領域的重要實際應用,可以擴充套件閱讀下面文章。連結地址:點選

數學之美 一 統計語言模型
數學之美 二 談談中文分詞
數學之美 三 隱含馬爾可夫模型在語言處理中的應用
數學之美 四 怎樣度量資訊?
數學之美 五 簡單之美:布林代數和搜尋引擎的索引
數學之美 六 圖論和網路爬蟲 (Web Crawlers)
數學之美 七 資訊理論在資訊處理中的應用
數學之美 八 賈里尼克的故事和現代語言處理
數學之美 九 如何確定網頁和查詢的相關性
數學之美 十 有限狀態機和地址識別
數學之美 十一 Google 阿卡 47 的製造者阿米特.辛格博士
數學之美 十二 餘弦定理和新聞的分類
數學之美 十三 資訊指紋及其應用
數學之美 十四 談談數學模型的重要性
數學之美 十五 繁與簡 自然語言處理的幾位精英
數學之美 十六 不要把所有的雞蛋放在一個籃子裡 最大熵模型
數學之美 十七 閃光的不一定是金子 談談搜尋引擎作弊問題(Search Engine Anti-SPAM)
數學之美 十八 矩陣運算和文字處理中的分類問題
數學之美 十九 馬爾可夫鏈的擴充套件 貝葉斯網路 (Bayesian Networks)
數學之美 二十 自然語言處理的教父 馬庫斯
數學之美 二十一 布隆過濾器(Bloom Filter)
數學之美 二十二 由電視劇《暗算》所想到的 — 談談密碼學的數學原理
數學之美 二十三 輸入一個漢字需要敲多少個鍵 — 談談夏農第一定律