4.千萬日活的系統(tǒng)如何統(tǒng)計(jì)UV?

HyperLogLog

假設(shè)有個(gè)千萬日活的統(tǒng)計(jì)系統(tǒng),需要統(tǒng)計(jì)系統(tǒng)每天的UV。如果是你的話你該怎么設(shè)計(jì)?

如果統(tǒng)計(jì) PV 那非常好辦,使用string的incr就搞定了。

但是 UV 不一樣,它要去重,同一個(gè)用戶一天之內(nèi)的多次訪問請(qǐng)求只能計(jì)數(shù)一次。這就要求每一個(gè)網(wǎng)頁請(qǐng)求都需要帶上用戶的 ID,無論是登陸用戶還是未登陸用戶都需要一個(gè)唯一 ID 來標(biāo)識(shí)。

我們第一反應(yīng)就是為每一個(gè)頁面搞一個(gè)獨(dú)立的 set 集合來存儲(chǔ)所有當(dāng)天訪問過此頁面的用戶 ID。當(dāng)一個(gè)請(qǐng)求過來時(shí),我們使用 sadd 將用戶 ID 塞進(jìn)去就可以了。通過 scard 可以取出這個(gè)集合的大小,這個(gè)數(shù)字就是這個(gè)頁面的 UV 數(shù)據(jù)。沒錯(cuò),這是一個(gè)非常簡(jiǎn)單的方案。

存在問題:

①占用內(nèi)存,set集合里有1000萬條數(shù)據(jù),如果一個(gè)用戶ID占32個(gè)字節(jié),一天就320M,這是非??植赖?/p>

②性能差,當(dāng)數(shù)據(jù)量大時(shí),sadd性能會(huì)下降

其實(shí)對(duì)于千萬日活系統(tǒng),老板需要的數(shù)據(jù)不需要太精確,1001萬和1002萬對(duì)于老板決策沒有太大影響。

Redis 提供了 HyperLogLog 數(shù)據(jù)結(jié)構(gòu)就是用來解決這種統(tǒng)計(jì)問題的。HyperLogLog 提供不精確的去重計(jì)數(shù)方案,雖然不精確但是也不是非常不精確,標(biāo)準(zhǔn)誤差是 0.81%,這樣的精確度已經(jīng)可以滿足上面的 UV 統(tǒng)計(jì)需求了。

常用命令

127.0.0.1:6379> pfadd uv user1 ## 將元素參數(shù)添加到 HyperLogLog 數(shù)據(jù)結(jié)構(gòu)中
(integer) 1
127.0.0.1:6379> pfadd uv user2
(integer) 1
127.0.0.1:6379> pfadd uv user1
(integer) 0
127.0.0.1:6379> pfcount uv
(integer) 2
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Redis基礎(chǔ)入門篇可參考 Redis基礎(chǔ)入門篇[http://www.itdecent.cn/p/58ece9...
    AC編程閱讀 773評(píng)論 0 2
  • 如果你負(fù)責(zé)開發(fā)維護(hù)一個(gè)大型的網(wǎng)站,有一天老板找產(chǎn)品經(jīng)理要網(wǎng)站每個(gè)網(wǎng)頁每天的 UV 數(shù)據(jù),然后讓你來開發(fā)這個(gè)統(tǒng)計(jì)模塊...
    天的安排閱讀 304評(píng)論 0 0
  • 如果你負(fù)責(zé)開發(fā)維護(hù)一個(gè)大型的網(wǎng)站,有一天老板找產(chǎn)品經(jīng)理要網(wǎng)站每個(gè)網(wǎng)頁每天的 UV 數(shù)據(jù),然后讓你來開發(fā)這個(gè)統(tǒng)計(jì)模塊...
    要不再等等閱讀 364評(píng)論 0 1
  • redis面試[https://baijiahao.baidu.com/s?id=1594341157941741...
    緣尤會(huì)閱讀 283評(píng)論 0 0
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn),也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 7,763評(píng)論 0 4

友情鏈接更多精彩內(nèi)容