优秀的基数统计算法——HyperLogLog
為什么要使用 HyperLogLog?
在我們實際開發(fā)的過程中,可能會遇到這樣一個問題,當(dāng)我們需要統(tǒng)計一個大型網(wǎng)站的獨立訪問次數(shù)時,該用什么的類型來統(tǒng)計?
如果我們使用 Redis 中的集合來統(tǒng)計,當(dāng)它每天有數(shù)千萬級別的訪問時,將會是一個巨大的問題。因為這些訪問量不能被清空,我們運營人員可能會隨時查看這些信息,那么隨著時間的推移,這些統(tǒng)計數(shù)據(jù)所占用的空間會越來越大,逐漸超出我們能承載最大空間。
例如,我們用 IP 來作為獨立訪問的判斷依據(jù),那么我們就要把每個獨立 IP 進行存儲,以 IP4 來計算,IP4 最多需要 15 個字節(jié)來存儲信息,例如:110.110.110.110。當(dāng)有一千萬個獨立 IP 時,所占用的空間就是 15 bit*10000000 約定于 143MB,但這只是一個頁面的統(tǒng)計信息,假如我們有 1 萬個這樣的頁面,那我們就需要 1T 以上的空間來存儲這些數(shù)據(jù),而且隨著 IP6 的普及,這個存儲數(shù)字會越來越大,那我們就不能用集合的方式來存儲了,這個時候我們需要開發(fā)新的數(shù)據(jù)類型 HyperLogLog 來做這件事了。
HyperLogLog 介紹
HyperLogLog(下文簡稱為 HLL)是 Redis 2.8.9 版本添加的數(shù)據(jù)結(jié)構(gòu),它用于高性能的基數(shù)(去重)統(tǒng)計功能,它的缺點就是存在極低的誤差率。
HLL 具有以下幾個特點:
- 能夠使用極少的內(nèi)存來統(tǒng)計巨量的數(shù)據(jù),它只需要 12K 空間就能統(tǒng)計 2^64 的數(shù)據(jù);
- 統(tǒng)計存在一定的誤差,誤差率整體較低,標(biāo)準誤差為 0.81%;
總結(jié)
以上是生活随笔為你收集整理的优秀的基数统计算法——HyperLogLog的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这8种常见的SQL错误用法,你还在用吗?
- 下一篇: Java 200+ 面试题补充 Thre