亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1767 | 回復(fù): 0
打印 上一主題 下一主題

[其他] 漫談redis在運(yùn)維數(shù)據(jù)分析中的去重統(tǒng)計(jì)方式 [復(fù)制鏈接]

論壇徽章:
1
IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-06-10 06:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2016-06-07 11:05 |只看該作者 |倒序?yàn)g覽
本帖最后由 優(yōu)云敏捷運(yùn)維 于 2016-06-07 11:07 編輯

今天,我和大家分享下redis在運(yùn)維數(shù)據(jù)分析中的去重統(tǒng)計(jì)方式。為了避免混淆,本文中對(duì)于redis的數(shù)據(jù)結(jié)構(gòu)做如下約定:

SET:saddkey member
ZSET:zaddkeyscoremember
HYPERLOGLOG:pfaddkey element
STRING:setbitkey offset value

名詞約定:

維度:比如版本、操作系統(tǒng)類(lèi)型、操作系統(tǒng)版本、運(yùn)營(yíng)商、設(shè)備型號(hào)、網(wǎng)絡(luò)類(lèi)型等
復(fù)合維度:由兩個(gè)或多個(gè)維度交錯(cuò)產(chǎn)生的維度,比如某個(gè)版本下的某個(gè)設(shè)備型號(hào)。

去重統(tǒng)計(jì)在數(shù)據(jù)化運(yùn)維的指標(biāo)計(jì)算環(huán)節(jié),并不是一個(gè)陌生的字眼,甚至可以說(shuō),在大部分的數(shù)據(jù)指標(biāo)的中間計(jì)算過(guò)程中,最終會(huì)分為以下幾種數(shù)據(jù)集:
最大,最小,穩(wěn)定性,疊加,去重統(tǒng)計(jì)。

這5種指標(biāo)前面4種在實(shí)時(shí)處理框架或者大部分nosql中使用相對(duì)較小的開(kāi)銷(xiāo)即可完成計(jì)算,基礎(chǔ)指標(biāo)計(jì)算的大部分計(jì)算瓶頸還是落在io上面,而導(dǎo)致io瓶頸的問(wèn)題源自于數(shù)據(jù)維度的劃分與聚合,特別是對(duì)于去重統(tǒng)計(jì)類(lèi)型的數(shù)據(jù),如果有一種需要實(shí)時(shí)顯示的去重指標(biāo),維度的切分對(duì)于io上的開(kāi)銷(xiāo)簡(jiǎn)直是一種災(zāi)難。

例如,假定我們需要獲取手機(jī)終端中某個(gè)應(yīng)用版本中的某個(gè)設(shè)備型號(hào)或者某個(gè)系統(tǒng)的活躍設(shè)備數(shù)。那么,目前市場(chǎng)中的設(shè)備型號(hào)有幾百種,各種系統(tǒng)版本x系統(tǒng)類(lèi)型也有很多,對(duì)指標(biāo)的去重統(tǒng)計(jì)來(lái)說(shuō)每多一個(gè)維度,需要的內(nèi)存開(kāi)銷(xiāo)就要多上一倍,2個(gè)維度交叉產(chǎn)生的復(fù)合維度可能多達(dá)上百個(gè),3個(gè)維度的交叉產(chǎn)生的復(fù)合維度可能數(shù)以千計(jì)。

因此,對(duì)于實(shí)時(shí)顯示的去重統(tǒng)計(jì)類(lèi)型指標(biāo),最好的處理方式是在設(shè)計(jì)時(shí)盡量規(guī)避這種指標(biāo)。如果實(shí)在無(wú)法規(guī)避,我們需要做的犧牲一部分插入時(shí)的性能或者空間上的性能換來(lái)該部分指標(biāo)在讀取時(shí)不是o(n)的。

下面簡(jiǎn)單介紹幾種在開(kāi)發(fā)中基于redis研究出來(lái)的幾種數(shù)據(jù)去重方式。

1.于set的去重統(tǒng)計(jì)

這種結(jié)構(gòu)的數(shù)據(jù)應(yīng)該是最好理解的統(tǒng)計(jì)方式,也是常規(guī)的統(tǒng)計(jì)方式之一,直接把要去重的部分作為member插入一個(gè)set中,需要統(tǒng)計(jì)的時(shí)候直接使用scard統(tǒng)計(jì)該數(shù)據(jù)集的基數(shù),對(duì)于時(shí)間等維度信息,可以放在key中,然后拿取的時(shí)候通過(guò)拼接維度字段的形式拿取。


優(yōu)點(diǎn):使用簡(jiǎn)單,統(tǒng)計(jì)精確。

缺點(diǎn):無(wú)法達(dá)成實(shí)時(shí)統(tǒng)計(jì)的功能,要一分鐘統(tǒng)計(jì)一次的話(huà)需要使用expire命令設(shè)置一個(gè)很短的回收時(shí)間,單一維度時(shí)占用空間過(guò)大,信息聚合成本過(guò)大,有幾個(gè)維度就需要幾倍的內(nèi)存空間,3個(gè)以上復(fù)合維度時(shí)基本不需要考慮此方案。

適用場(chǎng)景:需要統(tǒng)計(jì)的去重內(nèi)容的基數(shù)非常小的情況下可以考慮,在優(yōu)云mobile中,對(duì)于用戶(hù)基數(shù)較小的影響設(shè)備數(shù)的計(jì)算采用了此種方式。

2.基于zset的去重統(tǒng)計(jì)
傳統(tǒng)的基于跳表/B樹(shù)的統(tǒng)計(jì)方式,key為維度信息,score為時(shí)間,member為設(shè)備id等原子信息,通過(guò)zcount可以拿取所有的成員數(shù)量。
優(yōu)點(diǎn):插入和統(tǒng)計(jì)都是o(log(N))的,可以精確統(tǒng)計(jì)從現(xiàn)在開(kāi)始到某個(gè)時(shí)間點(diǎn)的用戶(hù),可以保留原子數(shù)據(jù)。



缺點(diǎn):只能自定義時(shí)間域上的左區(qū)間,對(duì)于右區(qū)間只能定義為現(xiàn)在時(shí)間,否則會(huì)出現(xiàn)統(tǒng)計(jì)值比實(shí)際值偏小的情況(因?yàn)橥粋(gè)設(shè)備如果出現(xiàn)兩次,則會(huì)移除舊的那條),單一維度時(shí)占用空間過(guò)大,有幾個(gè)維度就需要幾倍的內(nèi)存空間,3個(gè)以上復(fù)合維度時(shí)基本不需要考慮此方案。
適用場(chǎng)景:對(duì)于查看從現(xiàn)在開(kāi)始1分鐘 5分鐘 10分鐘等各種時(shí)間跨度的用戶(hù)基數(shù)時(shí)可以考慮,在優(yōu)云mobile中,采用了這種方案來(lái)統(tǒng)計(jì)活躍設(shè)備數(shù),早期開(kāi)發(fā)時(shí)我們將各種時(shí)間維度和各種復(fù)合維度全部放在了redis中,結(jié)果發(fā)現(xiàn)內(nèi)存開(kāi)銷(xiāo)過(guò)大,現(xiàn)在的版本我們只存放了最近2分鐘的一些簡(jiǎn)單維度的數(shù)據(jù)。

3.基于bitset的去重統(tǒng)計(jì)

將終端用戶(hù)id映射為一個(gè)bitset上的一個(gè)bit,利用現(xiàn)代處理器的特性進(jìn)行快速計(jì)算。

優(yōu)點(diǎn):統(tǒng)計(jì)結(jié)果精確,對(duì)于不同維度可以使用and或者or進(jìn)行聚合,數(shù)據(jù)具有原子性,通過(guò)較少的操作即可做到跨維度的計(jì)算。



缺點(diǎn):不適用于分鐘級(jí)別的統(tǒng)計(jì),并且用戶(hù)id的映射較為麻煩。如果使用hash的方式進(jìn)行映射,將會(huì)不可避免的產(chǎn)生hash碰撞,如果使用用戶(hù)id進(jìn)行映射,那么必然需要維護(hù)一份用戶(hù)id映射表,這份映射表放在內(nèi)存中會(huì)占用大量空間,放在磁盤(pán)中則會(huì)導(dǎo)致整個(gè)系統(tǒng)的處理速率降低。

備注:java中的bitset在一個(gè)byte字節(jié)上是由低位到高位進(jìn)行存儲(chǔ),redis中則是由高位到低位進(jìn)行存儲(chǔ)。
適用場(chǎng)景:適用于需要儲(chǔ)存原子數(shù)據(jù)并進(jìn)行較大時(shí)間跨度或者自由拼接時(shí)間跨度聚合的場(chǎng)景。

4.基于hyperloglog的去重統(tǒng)計(jì)

hyperloglog是一種基于概率的統(tǒng)計(jì)方式,在redis的2.8.9版本后出現(xiàn)的新數(shù)據(jù)結(jié)構(gòu)

優(yōu)點(diǎn):每個(gè)hyperloglog只需要12K的空間,并且誤算率只有0.81%,不同的紀(jì)錄之間可以進(jìn)行聚合,也就是可以通過(guò)聚合統(tǒng)計(jì)出任意時(shí)間范圍的去重結(jié)果,統(tǒng)計(jì)單個(gè)hyperloglog時(shí)時(shí)間復(fù)雜度為o(1)。

缺點(diǎn):對(duì)于統(tǒng)計(jì)結(jié)果要求較為精確的場(chǎng)合并不是非常適用

適用場(chǎng)景:在對(duì)誤算率要求不高的情況下,同bitset。

5.基于布隆過(guò)濾器的去重統(tǒng)計(jì)

布隆過(guò)濾器是一種改良的bit映射方案,通過(guò)使用多種不同的hash種子,可以做到在較低誤判率以及較高的空間利用率的情況下進(jìn)行統(tǒng)計(jì),redis中并沒(méi)有布隆過(guò)濾器這個(gè)數(shù)據(jù)結(jié)構(gòu),不過(guò)可以通過(guò)lua腳本的方式實(shí)現(xiàn)一個(gè)布隆過(guò)濾器,詳細(xì)源碼可見(jiàn)



優(yōu)點(diǎn):對(duì)于200萬(wàn)用戶(hù)不超過(guò)萬(wàn)分之一誤算率的統(tǒng)計(jì),只需要8M左右redis內(nèi)存即可完成統(tǒng)計(jì),萬(wàn)分之一的誤算率是在插入的不同設(shè)備數(shù)達(dá)200萬(wàn)次時(shí)才擁有的誤算率,在這之前的誤算率是從0開(kāi)始線(xiàn)性增長(zhǎng)的,在大多數(shù)情況下這個(gè)誤算率應(yīng)該是可以容忍的。

缺點(diǎn):布隆過(guò)濾器的統(tǒng)計(jì)結(jié)果無(wú)法聚合

適用場(chǎng)景:對(duì)于一些需要實(shí)時(shí)顯示的內(nèi)容并且維度較少的內(nèi)容,可以采用此數(shù)據(jù)結(jié)構(gòu),在優(yōu)云mobile中,總覽頁(yè)面的活躍設(shè)備數(shù)采用了此方案來(lái)實(shí)時(shí)顯示今日活躍設(shè)備數(shù)。

作者簡(jiǎn)介:胡翀,廣通軟件旗下--優(yōu)云軟件打雜初級(jí)java開(kāi)發(fā)工程師一枚,現(xiàn)任優(yōu)云大數(shù)據(jù)平臺(tái)開(kāi)發(fā)工程師,負(fù)責(zé)統(tǒng)計(jì)平臺(tái)的數(shù)據(jù)的分析和存儲(chǔ)。

秉承devops的理念,從監(jiān)控、到應(yīng)用體驗(yàn),到自動(dòng)化持續(xù)交付,優(yōu)云軟件一切為了您做的更好!
將IT運(yùn)維化繁為簡(jiǎn)請(qǐng)?jiān)L問(wèn)優(yōu)云官網(wǎng):

您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP