整天看用戶埋點(diǎn)數(shù)據(jù),知道數(shù)據(jù)是咋來(lái)的嗎?

4 評(píng)論 42157 瀏覽 498 收藏 7 分鐘

我們平時(shí)看到的報(bào)表復(fù)雜而多樣,能夠通過(guò)多種緯度的數(shù)據(jù)評(píng)估用戶的使用習(xí)慣和對(duì)應(yīng)功能的價(jià)值。然而這些報(bào)表是如何產(chǎn)生的呢?今天咱們就看看上報(bào)數(shù)據(jù)一步一步變成報(bào)表的大致流程。

所有上報(bào)的數(shù)據(jù)都是為了記錄一次事件的發(fā)生或者描述一個(gè)狀態(tài),具體的上報(bào)數(shù)據(jù)可以設(shè)計(jì)為KEY-VALUE的形式或者數(shù)據(jù)組合的形式。KEY-VALUE的形式主要用來(lái)統(tǒng)計(jì)簡(jiǎn)單的計(jì)數(shù)類上報(bào),如按鈕點(diǎn)擊的次數(shù),某個(gè)選項(xiàng)的值等,KEY用來(lái)區(qū)分不同的事件,VALUE代表事件發(fā)生的次數(shù)、狀態(tài)值等;數(shù)據(jù)組合的主要用來(lái)描述一個(gè)事件或者狀態(tài)需要多種屬性描述的場(chǎng)景,比如下載成功事件,描述這個(gè)事件的數(shù)據(jù)組合可能包括對(duì)應(yīng)的下載地址、下載渠道來(lái)源、下載耗時(shí)等信息。

當(dāng)上報(bào)數(shù)據(jù)設(shè)計(jì)好后,后續(xù)的工作才能正常開(kāi)展。下面一步一步說(shuō)。

1、埋點(diǎn)

所謂「埋點(diǎn)」,就是在正常的功能邏輯中添加統(tǒng)計(jì)邏輯。拿統(tǒng)計(jì)微信右上角「+」的點(diǎn)擊次數(shù)為例,上報(bào)的數(shù)據(jù)可以采用KEY-VALUE形式,我們定義KEY為「CLICK_ADD_BTN」,VALUE的值為點(diǎn)擊的次數(shù)。當(dāng)用戶點(diǎn)擊「+」時(shí),展示菜單的代碼會(huì)通過(guò)按鈕的「回調(diào)」(詳見(jiàn)《聊聊同步、異步和回調(diào)》)來(lái)觸發(fā)執(zhí)行,程序猿在業(yè)務(wù)代碼執(zhí)行完后,又加上了統(tǒng)計(jì)代碼,把「CLICK_ADD_BTN」對(duì)應(yīng)的VALUE加1,「+」被統(tǒng)計(jì)到了一次使用。

2、上報(bào)

1

并不是每統(tǒng)計(jì)到一次事件或者狀態(tài)就會(huì)發(fā)起數(shù)據(jù)上報(bào),客戶端統(tǒng)計(jì)到的數(shù)據(jù)會(huì)先暫時(shí)存儲(chǔ)在內(nèi)存或者磁盤上,當(dāng)用戶啟動(dòng)、退出應(yīng)用程序的時(shí)候,或者在其他更合適的時(shí)機(jī),將當(dāng)前周期統(tǒng)計(jì)到的事件批量上報(bào)到服務(wù)器,這樣做的目的主要是考慮到與服務(wù)器多次建立連接的性能損耗(詳見(jiàn)《不得不知的TCP和UDP》)和流量問(wèn)題(相同大小的數(shù)據(jù)分多次發(fā)送比一次發(fā)送要消耗更多流量),另外客戶端在上報(bào)具體的統(tǒng)計(jì)事件之外,還會(huì)將標(biāo)識(shí)用戶的ID一并上報(bào),后續(xù)用于計(jì)算用戶相關(guān)的數(shù)據(jù)如日使用用戶和留存率等。

3、后臺(tái)記錄日志

數(shù)據(jù)上報(bào)到服務(wù)器后,服務(wù)器會(huì)將客戶端上報(bào)的原始數(shù)據(jù)存儲(chǔ)到服務(wù)器的磁盤中。一般來(lái)說(shuō),非強(qiáng)實(shí)時(shí)性的數(shù)據(jù)上報(bào)到服務(wù)器后,并不會(huì)立即參與計(jì)算,獲得最終的統(tǒng)計(jì)結(jié)果,比如一個(gè)功能的日使用次數(shù),日用戶數(shù),日留存等數(shù)據(jù),而是等到服務(wù)器負(fù)載較低的時(shí)間段利用預(yù)先配置的計(jì)劃任務(wù)進(jìn)行離線處理。這樣處理的目的是為了節(jié)約服務(wù)器資源(錢),因?yàn)榇蠹铱隙ú幌胍驗(yàn)橛?jì)算統(tǒng)計(jì)數(shù)據(jù)而影響實(shí)時(shí)業(yè)務(wù)的處理效率。

4、計(jì)算&入庫(kù)

2

報(bào)表中展示的數(shù)據(jù),并不是客戶端上報(bào)的原始數(shù)據(jù),比如「+」的使用次數(shù)、使用用戶數(shù)、日留存率這三組數(shù)據(jù),都是通過(guò)對(duì)客戶端上報(bào)的「CLICK_ADD_BTN」對(duì)應(yīng)VALUE值的累加并結(jié)合上報(bào)用戶ID二次計(jì)算得出的。

如果我們的產(chǎn)品達(dá)到微信這種日登陸數(shù)五六億,那么每天上報(bào)的統(tǒng)計(jì)數(shù)據(jù)將是海量的,為了從這種海量的數(shù)據(jù)中計(jì)算出「+」的使用次數(shù)、使用用戶數(shù)等信息,就需要用到「數(shù)據(jù)倉(cāng)庫(kù)工具」,比如當(dāng)下流行的Hive處理工具,它基于Hadoop分布式系統(tǒng)基礎(chǔ)框架,利用計(jì)算機(jī)集群的能力進(jìn)行分布式計(jì)算。當(dāng)「數(shù)據(jù)倉(cāng)庫(kù)工具」計(jì)算出最終的結(jié)果后,計(jì)劃任務(wù)會(huì)將結(jié)果(「+」的日使用次數(shù)、日使用用戶數(shù)等數(shù)據(jù))保存到數(shù)據(jù)庫(kù)中,也就是「入庫(kù)」過(guò)程?!溉霂?kù)」后的數(shù)據(jù)才能與前端對(duì)接,組成報(bào)表展示系統(tǒng)。

一般情況下,原始數(shù)據(jù)經(jīng)過(guò)數(shù)據(jù)倉(cāng)庫(kù)工具處理后,對(duì)應(yīng)的日志文件還會(huì)在服務(wù)器上保留一段時(shí)間(一般3~7天),以便追溯統(tǒng)計(jì)問(wèn)題,所以,如果發(fā)現(xiàn)統(tǒng)計(jì)數(shù)據(jù)有問(wèn)題問(wèn)題,一定要及時(shí)反饋給負(fù)責(zé)的程序猿,否則就會(huì)「死」無(wú)對(duì)證咯。

5、展示

3

當(dāng)數(shù)據(jù)「入庫(kù)」后,報(bào)表的展示就水到渠成了。報(bào)表系統(tǒng)通過(guò)前端頁(yè)面用戶的輸入獲取查詢條件,然后通過(guò)后臺(tái)數(shù)據(jù)庫(kù)查詢獲得結(jié)果,在前端展示出來(lái)。

這里只是簡(jiǎn)述了埋點(diǎn)數(shù)據(jù)上報(bào)、統(tǒng)計(jì)的大致流程,每個(gè)過(guò)程中還有很多細(xì)節(jié)要解決,如后臺(tái)日志亂碼問(wèn)題、客戶端異常導(dǎo)致數(shù)據(jù)丟失等。一旦數(shù)據(jù)出現(xiàn)問(wèn)題,經(jīng)常需要聯(lián)系各方人員定位原因。在此呼吁廣大的產(chǎn)品大蝦一定要關(guān)心、愛(ài)護(hù)為你做統(tǒng)計(jì)需求的程序猿,他們上輩子都是偷了蟠桃的孫悟空。

對(duì)咯,今天別忘了看報(bào)表哦。

#專欄作家#

給產(chǎn)品經(jīng)理講技術(shù),微信公眾號(hào)(pm_teacher),人人都是產(chǎn)品經(jīng)理專欄作家。資深程序猿,專注客戶端開(kāi)發(fā)若干年,對(duì)前端、后臺(tái)技術(shù)略懂,熱衷于對(duì)新的科技領(lǐng)域的探索。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,不得轉(zhuǎn)載。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 同問(wèn),埋點(diǎn)的時(shí)機(jī)如何把握

    來(lái)自廣東 回復(fù)
  2. 初入行的產(chǎn)品怎么知道埋點(diǎn)的時(shí)機(jī)的??? ?

    來(lái)自四川 回復(fù)
  3. 如何做到無(wú)埋點(diǎn)統(tǒng)計(jì)來(lái)路呢?

    來(lái)自陜西 回復(fù)
  4. ?

    來(lái)自浙江 回復(fù)