一種數(shù)據(jù)統(tǒng)計(jì)方法以及裝置的制造方法
【專(zhuān)利摘要】本發(fā)明實(shí)施例公開(kāi)了一種數(shù)據(jù)統(tǒng)計(jì)方法以及裝置,其中方法包括:獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維度索引表的行健中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第一目標(biāo)行健值;在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲取與所述第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健值;將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所述第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,以得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。采用本發(fā)明,可減少需要掃描的數(shù)據(jù)量,以提高對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總的效率。
【專(zhuān)利說(shuō)明】
-種數(shù)據(jù)統(tǒng)計(jì)方法從及裝置
技術(shù)領(lǐng)域
[0001] 本發(fā)明設(shè)及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其設(shè)及一種數(shù)據(jù)統(tǒng)計(jì)方法W及裝置。
【背景技術(shù)】
[0002] 目前所設(shè)計(jì)的存儲(chǔ)結(jié)構(gòu)主要是扁平化的數(shù)據(jù)存儲(chǔ)形式,即一條日志記錄對(duì)應(yīng)一 行,各個(gè)字段值分別存儲(chǔ)在對(duì)應(yīng)列中。對(duì)目前的存儲(chǔ)結(jié)構(gòu)所存儲(chǔ)的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總的過(guò) 程可W為:掃描每一行日志記錄,并對(duì)滿(mǎn)足條件的字段進(jìn)行篩選,再將篩選出的字段所對(duì)應(yīng) 的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總。由于需要掃描所有的日志記錄,所W當(dāng)存儲(chǔ)的日志記錄過(guò)多時(shí),會(huì)大 大增加需要掃描的數(shù)據(jù)量,降低了對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總的效率。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明實(shí)施例提供一種數(shù)據(jù)統(tǒng)計(jì)方法W及裝置,可減少需要掃描的數(shù)據(jù)量,W提 高對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總的效率。
[0004] 為了解決上述技術(shù)問(wèn)題,本發(fā)明第一方面提供了一種數(shù)據(jù)統(tǒng)計(jì)方法,包括:
[0005] 獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜 帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維度索引表的行健中獲取與所述目標(biāo)維度值 對(duì)應(yīng)的第一目標(biāo)行健值;
[0006] 在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲取與所述第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo) 行健值;
[0007] 將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所述第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn) 行合并,W得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。
[0008] 本發(fā)明第二方面提供了一種數(shù)據(jù)統(tǒng)計(jì)裝置,包括:
[0009] 第一獲取模塊,用于獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引表的列族中獲取與所 述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維度索引表的行健中獲 取與所述目標(biāo)維度值對(duì)應(yīng)的第一目標(biāo)行健值;
[0010] 第二獲取模塊,用于在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲取與所述第一目標(biāo)行健 值對(duì)應(yīng)的第二目標(biāo)行健值;
[0011] 合并模塊,用于將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所述第二目標(biāo)行健值對(duì)應(yīng)的目 標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,W得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。
[0012] 本發(fā)明實(shí)施例通過(guò)在維度索引表中獲取與統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì) 應(yīng)的第一目標(biāo)行健值,再在指標(biāo)數(shù)據(jù)存儲(chǔ)表中獲取與第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健 值,可W將指標(biāo)數(shù)據(jù)存儲(chǔ)表中與第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,W得到統(tǒng) 計(jì)數(shù)據(jù)。由于只需通過(guò)掃描維度索引表即可對(duì)指標(biāo)數(shù)據(jù)存儲(chǔ)表中的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行統(tǒng)計(jì) 匯總,即無(wú)需對(duì)所有日志記錄都進(jìn)行掃描,所W可W減少需要掃描的數(shù)據(jù)量,W提高對(duì)數(shù)據(jù) 進(jìn)行統(tǒng)計(jì)匯總的效率。
【附圖說(shuō)明】
[0013] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可W 根據(jù)運(yùn)些附圖獲得其他的附圖。
[0014] 圖1是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)統(tǒng)計(jì)方法的流程示意圖;
[0015] 圖2是本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)統(tǒng)計(jì)方法的流程示意圖;
[0016] 圖3是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)更新方法的流程示意圖;
[0017] 圖4是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)統(tǒng)計(jì)裝置的結(jié)構(gòu)示意圖;
[0018] 圖5是本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)統(tǒng)計(jì)裝置的結(jié)構(gòu)示意圖;
[0019] 圖6是本發(fā)明實(shí)施例提供的一種第一獲取模塊的結(jié)構(gòu)示意圖;
[0020] 圖7是本發(fā)明實(shí)施例提供的一種第二獲取模塊的結(jié)構(gòu)示意圖;
[0021] 圖8是本發(fā)明實(shí)施例提供的一種合并模塊的結(jié)構(gòu)示意圖;
[0022] 圖9是本發(fā)明實(shí)施例提供的又一種數(shù)據(jù)統(tǒng)計(jì)裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0023] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0024] 請(qǐng)參見(jiàn)圖1,是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)統(tǒng)計(jì)方法的流程示意圖,所述方法可 W包括:
[00巧]S101,獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng) 求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維度索引表的行健中獲取與所述目標(biāo) 維度值對(duì)應(yīng)的第一目標(biāo)行健值;
[00%] 具體的,當(dāng)數(shù)據(jù)統(tǒng)計(jì)裝置接收到統(tǒng)計(jì)查詢(xún)請(qǐng)求時(shí),所述數(shù)據(jù)統(tǒng)計(jì)裝置可W在預(yù)設(shè) 的維度索引表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值, 并在所述維度索引表的行健中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第一目標(biāo)行健值。其中,所述 維度索引表是基于皿ase化adoop Dat油ase,化doop數(shù)據(jù)庫(kù))數(shù)據(jù)庫(kù)所創(chuàng)建的,所述維度索 引表的列族包括至少一個(gè)維度列名,所述至少一個(gè)維度列名中各維度列名分別對(duì)應(yīng)至少一 個(gè)維度值,所述維度索引表的行健包括至少一個(gè)第一行健值,所述至少一個(gè)第一行健值是 根據(jù)所述至少一個(gè)維度值計(jì)算得到的。所述維度索引表的具體結(jié)構(gòu)可W參見(jiàn)如下表1 : [0027]
[0028] 表 1
[0029] 其中,表1中的dimensionl、…、dimensionM均為所述維度索引表的列族所包括 的維度列名,每個(gè)維度列名均對(duì)應(yīng)至少一個(gè)維度值,如為dimensionl的維度列名對(duì)應(yīng)的維 度值包括Bytes_l、Bytes_2、…、B}ftes_n ;表1中的各個(gè)維度值均為日志記錄中需要選 擇條件的字段,即在存儲(chǔ)日志記錄時(shí)將日志記錄中需要選擇條件的字段作為維度值W存儲(chǔ) 到所述維度索引表中;表1中的第一行健值包括xxx_hashcode_l、xxx_hashcode_2、…、 xxx_hashcode_n,第一行健值中的hashcode_n為對(duì)維度值組合進(jìn)行拼接后所計(jì)算出的哈 希值;第一行健值中的XXX為hashcode_n的尾Ξ位,由于皿ase中表是W字典序存儲(chǔ),所W 第一行健值中的XXX設(shè)計(jì)可使存儲(chǔ)的數(shù)據(jù)分布更均勻,W提高寫(xiě)入和查詢(xún)的并發(fā)度。其中 hashcode_n的具體計(jì)算方法可W為:
[0030] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . . +dim[M). hashCode0
[0031] 其中,dim山代表dimensionl運(yùn)一列中的第n行的維度值,dim凹代表 dimensions運(yùn)一列中的第η行的維度值,dim[M]代表dimensionM運(yùn)一列中的第η行的維 度值。W xxx_hashcode_l為例,hashcode_l的值是由與xxx_hashcode_l同一行的各個(gè)維 度值進(jìn)行拼接計(jì)算得到的。
[0032] W上述表1為例,若在表1中查找到Bytes_2與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún) 維度值相同,則可W確定Bytes_2為目標(biāo)維度值,再在表1的行健中獲取Bytes_2對(duì)應(yīng)的第 一目標(biāo)行健值,所述第一目標(biāo)行健值為xxx_hashcode_2。
[0033] S102,在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲取與所述第一目標(biāo)行健值對(duì)應(yīng)的第二 目標(biāo)行健值;
[0034] 具體的,在獲取到所述第一目標(biāo)行健值之后,所述數(shù)據(jù)統(tǒng)計(jì)裝置可W在預(yù)設(shè)的指 標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲取與所述第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健值。其中,所述指 標(biāo)數(shù)據(jù)存儲(chǔ)表是基于皿ase數(shù)據(jù)庫(kù)所創(chuàng)建的,所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族包括至少一個(gè)指 標(biāo)列名,所述至少一個(gè)指標(biāo)列名中各指標(biāo)列名分別對(duì)應(yīng)至少一個(gè)指標(biāo)數(shù)據(jù),所述指標(biāo)數(shù)據(jù) 存儲(chǔ)表的行健包括至少一個(gè)第二行健值,所述至少一個(gè)第二行健值是根據(jù)所述至少一個(gè)維 度值和時(shí)間值計(jì)算得到的,所述時(shí)間值是按照預(yù)設(shè)的時(shí)間粒度所劃分的。所述指標(biāo)數(shù)據(jù)存 儲(chǔ)表的具體結(jié)構(gòu)可W參見(jiàn)如下表2 :
[0035]
[0036] 表 2
[0037] 其中,表2中的列族所包括的指標(biāo)列名包括:0000、0001、…、1023,每個(gè)指標(biāo)列名 對(duì)應(yīng)至少一個(gè)指標(biāo)數(shù)據(jù),如為"0000"的指標(biāo)列名所對(duì)應(yīng)的指標(biāo)數(shù)據(jù)包括:SliceIndex_l、 Slicelndex_2、…、Slicelndex_n ;表2中的各個(gè)指標(biāo)數(shù)據(jù)為日志記錄中的用于進(jìn)行統(tǒng)計(jì) 的數(shù)值,即在存儲(chǔ)日志記錄時(shí)將日志記錄中的用于進(jìn)行統(tǒng)計(jì)的數(shù)值作為指標(biāo)數(shù)據(jù)W存儲(chǔ)到 所述指標(biāo)數(shù)據(jù)存儲(chǔ)表,所述指標(biāo)數(shù)據(jù)是W化rift結(jié)構(gòu)序列化存儲(chǔ)的,Thrift是一個(gè)軟件框 架且用來(lái)進(jìn)行可擴(kuò)展且跨語(yǔ)言的服務(wù)的開(kāi)發(fā),所述指標(biāo)數(shù)據(jù)可W包括全局計(jì)數(shù)指標(biāo)、估計(jì) 用戶(hù)數(shù)指標(biāo)數(shù)組、計(jì)數(shù)指標(biāo)、去重指標(biāo)、合計(jì)指標(biāo)、最大值指標(biāo)、最小值指標(biāo)W及平均值指標(biāo) 等等。表 2 中的第二行健值包括 xxx_hashcode_l_time、xxx_hashcode_2_time、…、 hashcode_n_time,其中,xxx_hashcode_n的結(jié)構(gòu)與計(jì)算方式與第一行健值相同,運(yùn)里不再 進(jìn)行寶述。第二行健值中的time為時(shí)間值,所述時(shí)間值是按照預(yù)設(shè)的時(shí)間粒度所劃分的, 若時(shí)間粒度為1個(gè)小時(shí),則time可W劃分為:0000、0100、0200、…、2300 ;若時(shí)間粒度為15 分鐘,則time可W劃分為:0000、0015、0030、…、2345。例如,若W 1個(gè)小時(shí)為時(shí)間粒度,貝U 第二行健值可 W包括 xxx_hashcode_l_0100、xxx_hashcode_2_0200 等等。
[0038] 其中,所述統(tǒng)計(jì)查詢(xún)請(qǐng)求還包括統(tǒng)計(jì)時(shí)間范圍,在獲取到第二目標(biāo)行健值之前,需 要先根據(jù)所述統(tǒng)計(jì)時(shí)間范圍W及預(yù)設(shè)的時(shí)間粒度枚舉時(shí)間值,若所述統(tǒng)計(jì)時(shí)間范圍為全 天且時(shí)間粒度為1個(gè)小時(shí),則枚舉得到的時(shí)間值包括0000、0100、0200、…、2300,再將獲 取到的所述第一目標(biāo)行健值與所枚舉的各個(gè)時(shí)間值拼接;若所述第一目標(biāo)行健值為 hashcode_2,則所述第一目標(biāo)行健值與所枚舉的各個(gè)時(shí)間值拼接后,可W得到待查詢(xún)行健 值:xxx_hashcode_2_0000、xxx_hashcode_2_0100、???、xxx_hashcode_2_2300 ;再在所述指 標(biāo)數(shù)據(jù)存儲(chǔ)表中查找與多個(gè)待查詢(xún)行健值中的任一個(gè)相同的第二行健值,并將查找出的第 二行健值確定為第二目標(biāo)行健值。
[0039] S103,將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所述第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù) 據(jù)進(jìn)行合并,W得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù);
[0040] 具體的,在獲取到所述第二目標(biāo)行健值之后,所述數(shù)據(jù)統(tǒng)計(jì)裝置可W先將所述指 標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所述第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行行合并,在行合并 時(shí)可w從上至下依次進(jìn)行兩兩合并,直至行合并到剩下一行目標(biāo)指標(biāo)數(shù)據(jù),再將行合并后 的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行列合并,在列合并時(shí)也可W依次進(jìn)行兩兩合并,在列合并到剩下一列 時(shí)即可得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。
[0041] 本發(fā)明實(shí)施例通過(guò)在維度索引表中獲取與統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì) 應(yīng)的第一目標(biāo)行健值,再在指標(biāo)數(shù)據(jù)存儲(chǔ)表中獲取與第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健 值,可W將指標(biāo)數(shù)據(jù)存儲(chǔ)表中與第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,W得到統(tǒng) 計(jì)數(shù)據(jù)。由于日志記錄中的維度值和指標(biāo)數(shù)據(jù)分別存儲(chǔ)于維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表 中,且只需通過(guò)掃描維度索引表即可對(duì)指標(biāo)數(shù)據(jù)存儲(chǔ)表中的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總, 即無(wú)需對(duì)所有日志記錄都進(jìn)行掃描,所W可W減少需要掃描的數(shù)據(jù)量,W提高對(duì)數(shù)據(jù)進(jìn)行 統(tǒng)計(jì)匯總的效率。
[0042] 請(qǐng)參見(jiàn)圖2,是本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)統(tǒng)計(jì)方法的流程示意圖,所述方法 可W包括:
[0043] S201,根據(jù)皿ase數(shù)據(jù)庫(kù)預(yù)設(shè)維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表;
[0044] 具體的,數(shù)據(jù)統(tǒng)計(jì)裝置可W根據(jù)皿ase數(shù)據(jù)庫(kù)預(yù)設(shè)維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ) 表。將日志記錄中需要選擇條件的字段定義為維度值,并將日志記錄中用于進(jìn)行統(tǒng)計(jì)的數(shù) 值定義為指標(biāo)數(shù)據(jù)。所述數(shù)據(jù)統(tǒng)計(jì)裝置將維度值存儲(chǔ)于所述維度索引表的列族中,將指標(biāo) 數(shù)據(jù)存儲(chǔ)于所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中。
[0045] 其中,所述維度索引表的列族包括至少一個(gè)維度列名,所述至少一個(gè)維度列名中 各維度列名分別對(duì)應(yīng)至少一個(gè)維度值,所述維度索引表的行健包括至少一個(gè)第一行健值, 所述至少一個(gè)第一行健值是根據(jù)所述至少一個(gè)維度值計(jì)算得到的。所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的 列族包括至少一個(gè)指標(biāo)列名,所述至少一個(gè)指標(biāo)列名中各指標(biāo)列名分別對(duì)應(yīng)至少一個(gè)指標(biāo) 數(shù)據(jù),所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健包括至少一個(gè)第二行健值,所述至少一個(gè)第二行健值是 根據(jù)所述至少一個(gè)維度值和時(shí)間值計(jì)算得到的,所述時(shí)間值是按照預(yù)設(shè)的時(shí)間粒度所劃分 的。
[0046] 所述維度索引表的具體結(jié)構(gòu)可W參見(jiàn)圖1對(duì)應(yīng)實(shí)施例中的表1,表1中的 dimensionl、…、dimensionM均為所述維度索引表的列族所包括的維度列名,每個(gè)維度 列名均對(duì)應(yīng)至少一個(gè)維度值,如為dimensionl的維度列名對(duì)應(yīng)的維度值包括Bytes_l、 Bytes_2、…、Bytes_n;表1中的各個(gè)維度值均為日志記錄中需要選擇條件的字段,即在存 儲(chǔ)日志記錄時(shí)將日志記錄中需要選擇條件的字段作為維度值W存儲(chǔ)到所述維度索引表中; 表 1 中的第一行健值包括 xxx_hashcode_l、xxx_hashcode_2、???、xxx_hashcode_n,第一行 健值中的hashcode_n為對(duì)維度值組合進(jìn)行拼接后所計(jì)算出的哈希值;第一行健值中的XXX 為hashcode_n的尾Ξ化由于皿ase中表是W字典序存儲(chǔ),所W第一行健值中的XXX設(shè)計(jì) 可使存儲(chǔ)的數(shù)據(jù)分布更均勻,W提高寫(xiě)入和查詢(xún)的并發(fā)度。其中hashcode_n的具體計(jì)算方 法可W為:
[0047] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . .+dim[M]). hashCode0 |;0048] 其中,dim山代表dimensionl運(yùn)一列中的第n行的維度值,dim凹代表 dimensions運(yùn)一列中的第η行的維度值,dim[M]代表dimensionM運(yùn)一列中的第η行的維 度值。W xxx_hashcode_l為例,hashcode_l的值是由與xxx_hashcode_l同一行的各個(gè)維 度值進(jìn)行拼接計(jì)算得到的。
[0049] 所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的具體結(jié)構(gòu)可W參見(jiàn)圖1對(duì)應(yīng)實(shí)施例中的表2,表2中的列族 所包括的指標(biāo)列名包括:0000、0001、…、1023,每個(gè)指標(biāo)列名對(duì)應(yīng)至少一個(gè)指標(biāo)數(shù)據(jù),如為 "0000"的指標(biāo)列名所對(duì)應(yīng)的指標(biāo)數(shù)據(jù)包括:S1 iceIndex_l、SliceIndex_2、…、SliceIndex_ n ;表2中的各個(gè)指標(biāo)數(shù)據(jù)為日志記錄中的用于進(jìn)行統(tǒng)計(jì)的數(shù)值,即在存儲(chǔ)日志記錄時(shí)將日 志記錄中的用于進(jìn)行統(tǒng)計(jì)的數(shù)值作為指標(biāo)數(shù)據(jù)W存儲(chǔ)到所述指標(biāo)數(shù)據(jù)存儲(chǔ)表,所述指標(biāo)數(shù) 據(jù)是W化rift結(jié)構(gòu)序列化存儲(chǔ)的,所述指標(biāo)數(shù)據(jù)可W包括用戶(hù)數(shù)、次數(shù)、去重值、計(jì)數(shù)值、 合計(jì)值、最大值、最小值、平均值等等。表2中的第二行健值包括xxx_hashcode_l_time、 xxx_hashcode_2_time、…、xxx_hashcode_n_time,其中,xxx_hashcode_n 的結(jié)構(gòu)與計(jì)算 方式與第一行健值相同,運(yùn)里不再進(jìn)行寶述。第二行健值中的time為時(shí)間值,所述時(shí)間 值是按照預(yù)設(shè)的時(shí)間粒度所劃分的,若時(shí)間粒度為1個(gè)小時(shí),則time可W劃分為:0000、 0100、0200、…、2300 ;若時(shí)間粒度為15分鐘,則time可W劃分為:0000、0015、0030、…、 2345。例如,若W 1個(gè)小時(shí)為時(shí)間粒度,則第二行健值可W包括xxx_hashcode_l_0100、xxx_ hashcode_2_0200 等等。
[0050] S202,獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,所述統(tǒng)計(jì)查詢(xún)請(qǐng)求攜帶有查詢(xún)維度值;
[0051] 具體的,當(dāng)所述數(shù)據(jù)統(tǒng)計(jì)裝置接收到統(tǒng)計(jì)查詢(xún)請(qǐng)求時(shí),可W獲取所述統(tǒng)計(jì)查詢(xún)請(qǐng) 求所攜帶的查詢(xún)維度值。
[0052] S203,在所述維度索引表中的所述至少一個(gè)維度值中獲取與所述查詢(xún)維度值對(duì)應(yīng) 的維度值,并將與所述查詢(xún)維度值對(duì)應(yīng)的維度值確定為目標(biāo)維度值;
[0053] 具體的,所述數(shù)據(jù)統(tǒng)計(jì)裝置獲取到查詢(xún)維度值之后,可W在所述維度索引表中的 所述至少一個(gè)維度值中獲取與所述查詢(xún)維度值對(duì)應(yīng)的維度值,并將與所述查詢(xún)維度值對(duì)應(yīng) 的維度值確定為目標(biāo)維度值。W上述圖1對(duì)應(yīng)實(shí)施例中的表1為例,查詢(xún)維度值包括維度 值A(chǔ)和維度值B,若在表1的列族中查找到與維度值A(chǔ)相同的維度值為Bytes_l,與維度值 B相同的維度值為Bytes_2,則將Bytes_l和Bytes_2確定為目標(biāo)維度值。
[0054] S204,在所述維度索引表中的所述至少一個(gè)第一行健值中獲取與所述目標(biāo)維度值 對(duì)應(yīng)的第一行健值,并將與所述目標(biāo)維度值對(duì)應(yīng)的第一行健值確定為第一目標(biāo)行健值;
[0055] 具體的,所述數(shù)據(jù)統(tǒng)計(jì)裝置確定出目標(biāo)維度值之后,可W在所述維度索引表中的 所述至少一個(gè)第一行健值中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第一行健值,并將與所述目標(biāo) 維度值對(duì)應(yīng)的第一行健值確定為第一目標(biāo)行健值。再W上述表1為例,若確定出的目標(biāo) 維度值為Bytes_l和Bytes_2,則可W在表1的行健中獲取到與的tes_l對(duì)應(yīng)的第一行 健值為 xxx_hashcode_l,W及 Bytes_2 對(duì)應(yīng)的第一行健值為 xxx_hashcode_2,并將 hashcode_l和xxx_hashcode_2確定為第一目標(biāo)行健值。
[0056] S205,根據(jù)所述時(shí)間粒度和所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的統(tǒng)計(jì)時(shí)間范圍,生成在所 述統(tǒng)計(jì)時(shí)間范圍內(nèi)的至少一個(gè)目標(biāo)時(shí)間值;
[0057] 具體的,所述統(tǒng)計(jì)查詢(xún)請(qǐng)求還包括統(tǒng)計(jì)時(shí)間范圍。所述數(shù)據(jù)統(tǒng)計(jì)裝置確定出第一 目標(biāo)行健值之后,可W根據(jù)所述時(shí)間粒度和所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的統(tǒng)計(jì)時(shí)間范圍,生 成在所述統(tǒng)計(jì)時(shí)間范圍內(nèi)的至少一個(gè)目標(biāo)時(shí)間值。例如,若統(tǒng)計(jì)時(shí)間范圍為全天,且預(yù)設(shè)的 時(shí)間粒度為1個(gè)小時(shí),則所生成的目標(biāo)時(shí)間值包括0000、0100、0200、…、2300,即0 :00到 23 :00的時(shí)間值。
[005引 S206,將所述至少一個(gè)目標(biāo)時(shí)間值中各目標(biāo)時(shí)間值分別與所述第一目標(biāo)行健值進(jìn) 行拼接,w得到待查詢(xún)行健值;
[0059] 具體的,所述數(shù)據(jù)統(tǒng)計(jì)裝置生成至少一個(gè)目標(biāo)時(shí)間值之后,可W將所述至少一 個(gè)目標(biāo)時(shí)間值中各目標(biāo)時(shí)間值分別與所述第一目標(biāo)行健值進(jìn)行拼接,W得到待查詢(xún)行健 值。例如,若所述統(tǒng)計(jì)時(shí)間范圍為全天且時(shí)間粒度為1個(gè)小時(shí),且所述第一目標(biāo)行健值為 xxx_hashcode_2,則所述至少一個(gè)目標(biāo)時(shí)間值包括0000、0100、0200、…、2300,再將 hashcode_2分別與所述至少一個(gè)目標(biāo)時(shí)間值中各目標(biāo)時(shí)間值進(jìn)行拼接,可W得到待查詢(xún) 行健值,所述待查詢(xún)行健值包括:xxx_hashcode_2_0000、xxx_hashcode_2_0100、…、 hashcode_2_2300〇
[0060] S207,在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)第二行健值中獲取與所述待查詢(xún) 行健值對(duì)應(yīng)的第二行健值,并將與所述待查詢(xún)行健值對(duì)應(yīng)的第二行健值確定為第二目標(biāo)行 健值;
[0061] 具體的,所述數(shù)據(jù)統(tǒng)計(jì)裝置得到待查詢(xún)行健值之后,可W在所述指標(biāo)數(shù)據(jù)存儲(chǔ) 表中的所述至少一個(gè)第二行健值中獲取與所述待查詢(xún)行健值對(duì)應(yīng)的第二行健值,并將與 所述待查詢(xún)行健值對(duì)應(yīng)的第二行健值確定為第二目標(biāo)行健值。例如,所述待查詢(xún)行健值 包括:xxx_hashcode_2_0000、xxx_hashcode_2_0100、…、xxx_hashcode_2_2300,在所述 指標(biāo)數(shù)據(jù)存儲(chǔ)表中查找是否存在與所述待查詢(xún)行健值相同的第二行健值,若在所述指標(biāo) 數(shù)據(jù)存儲(chǔ)表中查找到與所述待查詢(xún)行健值相同的第二行健值包括xxx_hashcode_2_0000 和xxx_hashcode_2_0100,則將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的xxx_hashcode_2_0000和 hashcode_2_0100確定為第二目標(biāo)行健值。
[0062] S208,在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)指標(biāo)數(shù)據(jù)中獲取與所述第二目標(biāo) 行健值對(duì)應(yīng)的指標(biāo)數(shù)據(jù),并將與所述第二目標(biāo)行健值對(duì)應(yīng)的指標(biāo)數(shù)據(jù)確定為目標(biāo)指標(biāo)數(shù) 據(jù);
[0063] 具體的,所述數(shù)據(jù)統(tǒng)計(jì)裝置確定出第二目標(biāo)行健值之后,可W在所述指標(biāo)數(shù)據(jù)存 儲(chǔ)表中的所述至少一個(gè)指標(biāo)數(shù)據(jù)中獲取與所述第二目標(biāo)行健值對(duì)應(yīng)的指標(biāo)數(shù)據(jù),并將與所 述第二目標(biāo)行健值對(duì)應(yīng)的指標(biāo)數(shù)據(jù)確定為目標(biāo)指標(biāo)數(shù)據(jù)。W上述圖1對(duì)應(yīng)實(shí)施例中的表2 為例,若所述第二目標(biāo)行健值包括:xxx_hashcode_l_time和xxx_hashcode_2_time,則與 xxx_hashcode_l_time同一行的各列指標(biāo)數(shù)據(jù)均為目標(biāo)指標(biāo)數(shù)據(jù),且與xxx_hashcode_2_ time同一行的各列指標(biāo)數(shù)據(jù)也均為目標(biāo)指標(biāo)數(shù)據(jù)。
[0064] S209,將所述目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行行合并,并將行合并后的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行列合 并,W得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù); 陽(yáng)0化]具體的,所述數(shù)據(jù)統(tǒng)計(jì)裝置確定出目標(biāo)指標(biāo)數(shù)據(jù)之后,可W先將所述目標(biāo)指標(biāo) 數(shù)據(jù)進(jìn)行行合并,在行合并時(shí)可W從上至下分別對(duì)每列的目標(biāo)指標(biāo)數(shù)據(jù)依次進(jìn)行兩兩合 并,直至行合并到剩下一行目標(biāo)指標(biāo)數(shù)據(jù)。再請(qǐng)參見(jiàn)上述圖1對(duì)應(yīng)實(shí)施例中的表2, W Slicelndex_l 和 Slicelndex_2 進(jìn)行行合并為例,若 Slicelndex_l 和 Slicelndex_2 均包括 全局計(jì)數(shù)指標(biāo)、估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組、計(jì)數(shù)指標(biāo)、去重指標(biāo)、合計(jì)指標(biāo)、最大值指標(biāo)、最小值 指標(biāo)W及平均值指標(biāo),則對(duì)Slicelndex_l和Slicelndex_2進(jìn)行行合并的具體過(guò)程包括:
[0066] 全局計(jì)數(shù)指標(biāo)的合并:slicelndexl. countTotal+sliceIndex2. countTotal ;
[0067] 估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組的合并:
[0068]
[0069] 計(jì)數(shù)指標(biāo)的合并:sliceindexl. countIndex+sliceIndex2. countindex ;
[0070] 去重指標(biāo)的合并:sliceindexl. distincts. addAll (slicelndex2. distincts) (集合合并);
[0071] 合計(jì)指標(biāo)的合并:sliceindexl. sum+slicelndex2. sum ;
[0072] 最小值指標(biāo)的合并:Min (sliceindexl. min, slicelndex2. min);
[0073] 最小值指標(biāo)的合并:Max (sliceindexl. max, slicelndex2. max);
[0074] 平均值指標(biāo)的合并:
[0075] (sliceindexl. avg*slicelndexl. countIndexl+sliceIndex2. avg*slicelndex2. countIndex2)/(sliceindexl. countIndexl+sliceIndex2. countIndex2)〇
[0076] 其中,對(duì)行合并后的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行列合并的過(guò)程與行合并的過(guò)程類(lèi)似,即在 列合并時(shí)可W對(duì)各列中行合并后的目標(biāo)指標(biāo)數(shù)據(jù)依次進(jìn)行兩兩合并,直至列合并到剩下一 個(gè)總的目標(biāo)指標(biāo)數(shù)據(jù),所述總的目標(biāo)指標(biāo)數(shù)據(jù)即為與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。 其中,列合并和行合并不一樣的地方僅在于對(duì)估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組的合并,在列合并之前 需要先根據(jù)各列中行合并后的估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組運(yùn)個(gè)變量計(jì)算出一個(gè)用戶(hù)數(shù)數(shù)值,再在 列合并時(shí)直接累加各列計(jì)算出的用戶(hù)數(shù)數(shù)值即可統(tǒng)計(jì)出某種維度條件下查詢(xún)的估計(jì)用戶(hù) 數(shù)運(yùn)個(gè)指標(biāo)值的總量,對(duì)于其他指標(biāo)的列合并的過(guò)程與行合并的過(guò)程相同。其中,根據(jù)估計(jì) 用戶(hù)數(shù)指標(biāo)數(shù)組運(yùn)個(gè)變量計(jì)算出一個(gè)用戶(hù)數(shù)數(shù)值的具體過(guò)程可W為:
[0077] reg=0, zero=0, τη-63536 fbr i:::: 0 to 食3
[0078]
陽(yáng)ο巧]其中,userCount為計(jì)算出的用戶(hù)數(shù)數(shù)值。
[0080] 本發(fā)明實(shí)施例通過(guò)在維度索引表中獲取與統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì) 應(yīng)的第一目標(biāo)行健值,再在指標(biāo)數(shù)據(jù)存儲(chǔ)表中獲取與第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健 值,可W將指標(biāo)數(shù)據(jù)存儲(chǔ)表中與第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,W得到統(tǒng) 計(jì)數(shù)據(jù)。由于日志記錄中的維度值和指標(biāo)數(shù)據(jù)分別存儲(chǔ)于維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表 中,且只需通過(guò)掃描維度索引表即可對(duì)指標(biāo)數(shù)據(jù)存儲(chǔ)表中的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總, 即無(wú)需對(duì)所有日志記錄都進(jìn)行掃描,所W可W減少需要掃描的數(shù)據(jù)量,W提高對(duì)數(shù)據(jù)進(jìn)行 統(tǒng)計(jì)匯總的效率。
[0081] 請(qǐng)參見(jiàn)圖3,是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)更新方法的流程示意圖,所述方法可 W包括:
[0082] S301,當(dāng)獲取到日志記錄信息時(shí),提取所述日志記錄信息中的日志指標(biāo)數(shù)據(jù)、日志 維度值、時(shí)間信息W及關(guān)鍵字段;
[0083] 具體的,在S301步驟之前,先預(yù)設(shè)維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表,預(yù)設(shè)維度索引 表和指標(biāo)數(shù)據(jù)存儲(chǔ)表的具體實(shí)現(xiàn)方式可W參見(jiàn)上述圖2對(duì)應(yīng)實(shí)施例中的S201,運(yùn)里不再進(jìn) 行寶述。S301步驟可W在上述圖1對(duì)應(yīng)實(shí)施例中的S101-S103步驟中的任一時(shí)刻執(zhí)行,或 可W在上述圖2對(duì)應(yīng)實(shí)施例中的S202-S209步驟中的任一時(shí)刻執(zhí)行。
[0084] 當(dāng)所述數(shù)據(jù)統(tǒng)計(jì)裝置獲取到日志記錄信息時(shí),可W提取所述日志記錄信息中的日 志指標(biāo)數(shù)據(jù)、日志維度值、時(shí)間信息W及關(guān)鍵字段。其中,所述日志指標(biāo)數(shù)據(jù)可W包括全局 計(jì)數(shù)指標(biāo)、估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組、計(jì)數(shù)指標(biāo)、去重指標(biāo)、合計(jì)指標(biāo)、最大值指標(biāo)、最小值指標(biāo) W及平均值指標(biāo)中的至少一種。所述時(shí)間信息為生成所述日志記錄信息的時(shí)間點(diǎn)。
[00化]S302,根據(jù)所述日志維度值生成第一待更新行健值,并根據(jù)所述日志維度值對(duì)所 述維度索引表中與所述第一待更新行健值對(duì)應(yīng)的各個(gè)維度值進(jìn)行更新;
[0086] 具體的,所述數(shù)據(jù)統(tǒng)計(jì)裝置提取出日志指標(biāo)數(shù)據(jù)、日志維度值、時(shí)間信息W及關(guān) 鍵字段之后,可W將所述日志維度值放入dim數(shù)組,計(jì)算出該dim數(shù)組拼接的hashcode_ n,W得到對(duì)應(yīng)的第一待更新行健值xxx_hashcode_n,XXX為hashcode_n的尾Ξ位,所述 hashcode_n的具體計(jì)算方法可W為:
[0087] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . .+dim[M]). hashCode0 ;
[00蝴 W上述圖1對(duì)應(yīng)實(shí)施例中的表1為例,hashcode_n的計(jì)算公式中的dim[l]代表 dimensionl運(yùn)一列中的第η行的維度值,dim[2]代表dimensions運(yùn)一列中的第η行的維 度值,dim[M]代表dimensionM運(yùn)一列中的第η行的維度值。再W xxx_hashcode_l為例, hashcode_l的值是由與xxx_hashcode_l同一行的各個(gè)維度值進(jìn)行拼接計(jì)算得到的。若所 生成的第一待更新行健值為xxx_hashcode_l,則將各個(gè)日志維度值分別寫(xiě)入表1中與 hashcode_l同一行的各個(gè)維度值中,W完成對(duì)與所述第一待更新行健值對(duì)應(yīng)的各個(gè)維度 值進(jìn)行更新的操作,其中,由于各個(gè)日志維度值與xxx_hashcode_l同一行的各個(gè)維度值相 同,所W寫(xiě)入各個(gè)日志維度值的過(guò)程即為對(duì)與xxx_hashcode_l同一行的各個(gè)維度值進(jìn)行 再次覆蓋,或者,也可W無(wú)需對(duì)與xxx_hashcode_l同一行的各個(gè)維度值進(jìn)行更新操作。
[0089] 可選地,若無(wú)法在所述維度索引表中查找到所述第一待更新行健值,則可W在所 述維度索引表中新增一行,W將所述第一待更新行健值W及各個(gè)日志維度值寫(xiě)入新增的行 中。
[0090] S303,根據(jù)所述日志維度值和所述時(shí)間信息生成第二待更新行健值,并根據(jù)所述 關(guān)鍵字段生成待更新指標(biāo)列名,并根據(jù)所述日志指標(biāo)數(shù)據(jù)對(duì)所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中與所述 第二待更新行健值和所述待更新指標(biāo)列名對(duì)應(yīng)的指標(biāo)數(shù)據(jù)進(jìn)行更新;
[0091] 具體的,S303步驟可W和S302步驟同步進(jìn)行。所述數(shù)據(jù)統(tǒng)計(jì)裝置可W根據(jù)所述 日志維度值生成xxx_hashcode_n,再根據(jù)時(shí)間信息W及預(yù)設(shè)的時(shí)間粒度生成time,將 hashcode_n與time進(jìn)行拼接即可得到第二待更新行健值xxx_hashcode_n_time。再根 據(jù)所述關(guān)鍵字段生成待更新指標(biāo)列名,生成待更新指標(biāo)列名的具體過(guò)程為:計(jì)算所述關(guān)鍵 字段的murmur哈希值(64為整型值),向右移位48位后除W 64即可得到待更新指標(biāo)列 名(0000~1023),即計(jì)算待更新指標(biāo)列名的方法為:(mu;rmu;rhash(key)〉〉48)/64。在生 成第二待更新行健值和待更新指標(biāo)列名之后,可W根據(jù)所述日志指標(biāo)數(shù)據(jù)對(duì)所述指標(biāo)數(shù)據(jù) 存儲(chǔ)表中與所述第二待更新行健值和所述待更新指標(biāo)列名對(duì)應(yīng)的指標(biāo)數(shù)據(jù)進(jìn)行更新。W 上述圖1對(duì)應(yīng)實(shí)施例中的表2為例,若所述第二待更新行健值為xxx_hashcode_l_time, 所述待更新指標(biāo)列名為0000,則可W根據(jù)所述日志指標(biāo)數(shù)據(jù)對(duì)Slicelndex_l進(jìn)行更新; 其中,對(duì)Slicelndex_l進(jìn)行更新的過(guò)程可W包括:對(duì)全局計(jì)數(shù)指標(biāo)countTotal的更新: countTotal+1 ; 陽(yáng)092] 對(duì)估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組buckets的更新:
[0093] P = (murmurhash 化巧)〉〉48) % 64
[0094] zeroNum = (murmurhash(key)?l6)的前導(dǎo)零個(gè)數(shù)
[0095] if (buckets, get(p)<zeroNum)then bucket, set (p, zeroNum); 陽(yáng)096] 若更新的指標(biāo)為計(jì)數(shù)指標(biāo)的第i個(gè):countindex. get(i)+l ;
[0097] 若更新的指標(biāo)為去重指標(biāo)的第i個(gè):distincts. get (i). set (V); 陽(yáng)09引若更新的指標(biāo)為合計(jì)指標(biāo)的第i個(gè):sum. get (i) +v ;
[0099] 若更新的指標(biāo)為最小值指標(biāo)的第i個(gè):Min (min. get (i), V); 陽(yáng)100] 若更新的指標(biāo)為最大值指標(biāo)的第i個(gè):Max (max. get (i),V); 陽(yáng)101] 若更新的指標(biāo)為平均值指標(biāo)的第i個(gè):(avg. get(;〇*(countTotal. get(i) -1) +v) /countTotal. get(i)。
[0102] 可選地,若無(wú)法在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中查找到第二待更新行健值,則可W在所 述指標(biāo)數(shù)據(jù)存儲(chǔ)表中新增一行,W將所述第二待更新行健值寫(xiě)入新增的行中,并在該新增 的行中且與所述待更新指標(biāo)列名對(duì)應(yīng)的位置處寫(xiě)入所述日志指標(biāo)數(shù)據(jù)。
[0103] 本發(fā)明實(shí)施例通過(guò)提取所述日志記錄信息中的日志指標(biāo)數(shù)據(jù)、日志維度值、時(shí)間 信息W及關(guān)鍵字段,可W對(duì)維度索引表中對(duì)應(yīng)的維度值進(jìn)行更新并對(duì)指標(biāo)數(shù)據(jù)存儲(chǔ)表中對(duì) 應(yīng)的指標(biāo)數(shù)據(jù)進(jìn)行更新,由于寫(xiě)入日志記錄信息時(shí)可W只更新相應(yīng)位置的維度值和指標(biāo)數(shù) 據(jù),即可W避免每寫(xiě)入一條日志記錄信息就要增加一條行數(shù),所W有效減少了存儲(chǔ)開(kāi)銷(xiāo);同 時(shí),通過(guò)更新維度值和指標(biāo)數(shù)據(jù)的方式來(lái)寫(xiě)入日志記錄信息,也可W在統(tǒng)計(jì)查詢(xún)時(shí)降低所 需掃描的數(shù)據(jù)量,W進(jìn)一步提高對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總的效率。 陽(yáng)104] 請(qǐng)參見(jiàn)圖4,是本發(fā)明實(shí)施例提供的一種數(shù)據(jù)統(tǒng)計(jì)裝置的結(jié)構(gòu)示意圖,所述數(shù)據(jù)統(tǒng) 計(jì)裝置1可W包括:第一獲取模塊10、第二獲取模塊20、合并模塊30 ;
[01化]所述第一獲取模塊10,用于獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引表的列族中獲 取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維度索引表的行 健中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第一目標(biāo)行健值;
[0106] 具體的,當(dāng)數(shù)據(jù)統(tǒng)計(jì)裝置1接收到統(tǒng)計(jì)查詢(xún)請(qǐng)求時(shí),所述第一獲取模塊10可W在 預(yù)設(shè)的維度索引表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維 度值,并在所述維度索引表的行健中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第一目標(biāo)行健值。其中, 所述維度索引表是基于皿ase數(shù)據(jù)庫(kù)所創(chuàng)建的,所述維度索引表的列族包括至少一個(gè)維度 列名,所述至少一個(gè)維度列名中各維度列名分別對(duì)應(yīng)至少一個(gè)維度值,所述維度索引表的 行健包括至少一個(gè)第一行健值,所述至少一個(gè)第一行健值是根據(jù)所述至少一個(gè)維度值計(jì)算 得到的。再請(qǐng)參見(jiàn)上述圖1對(duì)應(yīng)實(shí)施例中的表1,表1為所述維度索引表的具體結(jié)構(gòu),表1 中的dimensionl、…、dimensionM均為所述維度索引表的列族所包括的維度列名,每個(gè)維 度列名均對(duì)應(yīng)至少一個(gè)維度值,如為dimensionl的維度列名對(duì)應(yīng)的維度值包括Bytes_l、 Bytes_2、…、Bytes_n;表1中的各個(gè)維度值均為日志記錄中需要選擇條件的字段,即在存 儲(chǔ)日志記錄時(shí)將日志記錄中需要選擇條件的字段作為維度值W存儲(chǔ)到所述維度索引表中; 表 1 中的第一行健值包括 xxx_hashcode_l、xxx_hashcode_2、???、xxx_hashcode_n,第一行 健值中的hashcode_n為對(duì)維度值組合進(jìn)行拼接后所計(jì)算出的哈希值;第一行健值中的XXX 為hashcode_n的尾Ξ化由于皿ase中表是W字典序存儲(chǔ),所W第一行健值中的XXX設(shè)計(jì) 可使存儲(chǔ)的數(shù)據(jù)分布更均勻,W提高寫(xiě)入和查詢(xún)的并發(fā)度。其中hashcode_n的具體計(jì)算方 法可W為: 陽(yáng) 107] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . . +dim[M]). hashCode0
[0108] 其中,dim[l]代表dimensionl運(yùn)一列中的第η行的維度值,dim凹代表 dimensions運(yùn)一列中的第η行的維度值,dim[M]代表dimensionM運(yùn)一列中的第η行的維 度值。W xxx_hashcode_l為例,hashcode_l的值是由與xxx_hashcode_l同一行的各個(gè)維 度值進(jìn)行拼接計(jì)算得到的。
[0109] W上述表1為例,若在表1中查找到Bytes_2與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún) 維度值相同,則所述第一獲取模塊10可W確定Bytes_2為目標(biāo)維度值,所述第一獲取模塊 10再在表1的行健中獲取Bytes_2對(duì)應(yīng)的第一目標(biāo)行健值,所述第一目標(biāo)行健值為 hashcode_2〇
[0110] 所述第二獲取模塊20,用于在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲取與所述第一目 標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健值; 陽(yáng)111] 具體的,在所述第一獲取模塊10獲取到所述第一目標(biāo)行健值之后,所述第二獲取 模塊20可W在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲取與所述第一目標(biāo)行健值對(duì)應(yīng)的第二目 標(biāo)行健值。其中,所述指標(biāo)數(shù)據(jù)存儲(chǔ)表是基于皿ase數(shù)據(jù)庫(kù)所創(chuàng)建的,所述指標(biāo)數(shù)據(jù)存儲(chǔ)表 的列族包括至少一個(gè)指標(biāo)列名,所述至少一個(gè)指標(biāo)列名中各指標(biāo)列名分別對(duì)應(yīng)至少一個(gè)指 標(biāo)數(shù)據(jù),所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健包括至少一個(gè)第二行健值,所述至少一個(gè)第二行健值 是根據(jù)所述至少一個(gè)維度值和時(shí)間值計(jì)算得到的,所述時(shí)間值是按照預(yù)設(shè)的時(shí)間粒度所劃 分的。所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的具體結(jié)構(gòu)可W參見(jiàn)上述圖1對(duì)應(yīng)實(shí)施例中的表2,其中,表2 中的列族所包括的指標(biāo)列名包括:〇〇〇〇、〇〇〇1、…、1023,每個(gè)指標(biāo)列名對(duì)應(yīng)至少一個(gè)指標(biāo) 數(shù)據(jù),如為"0000"的指標(biāo)列名所對(duì)應(yīng)的指標(biāo)數(shù)據(jù)包括:SliceIndex_l、Slicelndex_2、…、 Slicelndex_n ;表2中的各個(gè)指標(biāo)數(shù)據(jù)為日志記錄中的用于進(jìn)行統(tǒng)計(jì)的數(shù)值,即在存儲(chǔ)日 志記錄時(shí)將日志記錄中的用于進(jìn)行統(tǒng)計(jì)的數(shù)值作為指標(biāo)數(shù)據(jù)W存儲(chǔ)到所述指標(biāo)數(shù)據(jù)存儲(chǔ) 表,所述指標(biāo)數(shù)據(jù)是W化rift結(jié)構(gòu)序列化存儲(chǔ)的,Thrift是一個(gè)軟件框架且用來(lái)進(jìn)行可擴(kuò) 展且跨語(yǔ)言的服務(wù)的開(kāi)發(fā),所述指標(biāo)數(shù)據(jù)可W包括全局計(jì)數(shù)指標(biāo)、估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組、計(jì) 數(shù)指標(biāo)、去重指標(biāo)、合計(jì)指標(biāo)、最大值指標(biāo)、最小值指標(biāo)W及平均值指標(biāo)等等。表2中的第二 行健值包括 xxx_hashcode_l_time、xxx_hashcode_2_time、…、xxx_hashcode_n_time,其 中,xxx_hashcode_n的結(jié)構(gòu)與計(jì)算方式與第一行健值相同,運(yùn)里不再進(jìn)行寶述。第二行健 值中的time為時(shí)間值,所述時(shí)間值是按照預(yù)設(shè)的時(shí)間粒度所劃分的,若時(shí)間粒度為1個(gè)小 時(shí),則time可W劃分為:0000、0100、0200、…、2300;若時(shí)間粒度為15分鐘,則time可W劃 分為:0000、0015、0030、…、2345。例如,若W 1個(gè)小時(shí)為時(shí)間粒度,則第二行健值可W包括 xxx_hashcode_l_0100、xxx_hashcode_2_0200 等等。
[0112] 其中,所述統(tǒng)計(jì)查詢(xún)請(qǐng)求還包括統(tǒng)計(jì)時(shí)間范圍,所述第二獲取模塊20在獲取到第 二目標(biāo)行健值之前,需要先根據(jù)所述統(tǒng)計(jì)時(shí)間范圍W及預(yù)設(shè)的時(shí)間粒度枚舉時(shí)間值,若所 述統(tǒng)計(jì)時(shí)間范圍為全天且時(shí)間粒度為1個(gè)小時(shí),則所述第二獲取模塊20枚舉得到的時(shí)間值 包括0000、0100、0200、,-、2300,再將獲取到的所述第一目標(biāo)行健值與所枚舉的各個(gè)時(shí)間值 拼接;若所述第一目標(biāo)行健值為xxx_hashcode_2,則所述第二獲取模塊20所述第一目標(biāo)行 健值與所枚舉的各個(gè)時(shí)間值拼接后,可W得到待查詢(xún)行健值:xxx_hashcode_2_0000、 hashcode_2_0100、…、xxx_hashcode_2_2300 ;所述第二獲取模塊20再在所述指標(biāo)數(shù)據(jù)存 儲(chǔ)表中查找與多個(gè)待查詢(xún)行健值中的任一個(gè)相同的第二行健值,并將查找出的第二行健值 確定為第二目標(biāo)行健值。
[0113] 所述合并模塊30,用于將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所述第二目標(biāo)行健值對(duì) 應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,W得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù);
[0114] 具體的,在所述第二獲取模塊20獲取到所述第二目標(biāo)行健值之后,所述合并模塊 30可W先將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所述第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn) 行行合并,在行合并時(shí)可W從上至下依次進(jìn)行兩兩合并,直至行合并到剩下一行目標(biāo)指標(biāo) 數(shù)據(jù),再將行合并后的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行列合并,在列合并時(shí)也可W依次進(jìn)行兩兩合并,在 列合并到剩下一列時(shí)即可得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。
[0115] 本發(fā)明實(shí)施例通過(guò)在維度索引表中獲取與統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì) 應(yīng)的第一目標(biāo)行健值,再在指標(biāo)數(shù)據(jù)存儲(chǔ)表中獲取與第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健 值,可W將指標(biāo)數(shù)據(jù)存儲(chǔ)表中與第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,W得到統(tǒng) 計(jì)數(shù)據(jù)。由于日志記錄中的維度值和指標(biāo)數(shù)據(jù)分別存儲(chǔ)于維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表 中,且只需通過(guò)掃描維度索引表即可對(duì)指標(biāo)數(shù)據(jù)存儲(chǔ)表中的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總, 即無(wú)需對(duì)所有日志記錄都進(jìn)行掃描,所W可W減少需要掃描的數(shù)據(jù)量,W提高對(duì)數(shù)據(jù)進(jìn)行 統(tǒng)計(jì)匯總的效率。
[0116] 再請(qǐng)參見(jiàn)圖5,是本發(fā)明實(shí)施例提供的另一種數(shù)據(jù)統(tǒng)計(jì)裝置的結(jié)構(gòu)示意圖,所述數(shù) 據(jù)統(tǒng)計(jì)裝置1可W包括上述圖4對(duì)應(yīng)實(shí)施例中的第一獲取模塊10、第二獲取模塊20、合并 模塊30,進(jìn)一步的,所述數(shù)據(jù)統(tǒng)計(jì)裝置1還可W包括:預(yù)設(shè)模塊40、信息提取模塊50、第一 更新模塊60、第二更新模塊70 ;
[0117] 所述預(yù)設(shè)模塊40,用于根據(jù)皿ase數(shù)據(jù)庫(kù)預(yù)設(shè)維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表;
[0118] 具體的,所述預(yù)設(shè)模塊40可W根據(jù)皿ase數(shù)據(jù)庫(kù)預(yù)設(shè)維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ) 表。將日志記錄中需要選擇條件的字段定義為維度值,并將日志記錄中用于進(jìn)行統(tǒng)計(jì)的數(shù) 值定義為指標(biāo)數(shù)據(jù)。所述數(shù)據(jù)統(tǒng)計(jì)裝置1將維度值存儲(chǔ)于所述維度索引表的列族中,將指 標(biāo)數(shù)據(jù)存儲(chǔ)于所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中。
[0119] 其中,所述維度索引表的列族包括至少一個(gè)維度列名,所述至少一個(gè)維度列名中 各維度列名分別對(duì)應(yīng)至少一個(gè)維度值,所述維度索引表的行健包括至少一個(gè)第一行健值, 所述至少一個(gè)第一行健值是根據(jù)所述至少一個(gè)維度值計(jì)算得到的。所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的 列族包括至少一個(gè)指標(biāo)列名,所述至少一個(gè)指標(biāo)列名中各指標(biāo)列名分別對(duì)應(yīng)至少一個(gè)指標(biāo) 數(shù)據(jù),所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健包括至少一個(gè)第二行健值,所述至少一個(gè)第二行健值是 根據(jù)所述至少一個(gè)維度值和時(shí)間值計(jì)算得到的,所述時(shí)間值是按照預(yù)設(shè)的時(shí)間粒度所劃分 的。
[0120] 所述維度索引表的具體結(jié)構(gòu)可W參見(jiàn)圖1對(duì)應(yīng)實(shí)施例中的表1,表1中的 dimensionl、…、dimensionM均為所述維度索引表的列族所包括的維度列名,每個(gè)維度 列名均對(duì)應(yīng)至少一個(gè)維度值,如為dimensionl的維度列名對(duì)應(yīng)的維度值包括Bytes_l、 Bytes_2、…、Bytes_n;表1中的各個(gè)維度值均為日志記錄中需要選擇條件的字段,即在存 儲(chǔ)日志記錄時(shí)將日志記錄中需要選擇條件的字段作為維度值W存儲(chǔ)到所述維度索引表中; 表 1 中的第一行健值包括 xxx_hashcode_l、xxx_hashcode_2、???、xxx_hashcode_n,第一行 健值中的hashcode_n為對(duì)維度值組合進(jìn)行拼接后所計(jì)算出的哈希值;第一行健值中的XXX 為hashcode_n的尾Ξ化由于皿ase中表是W字典序存儲(chǔ),所W第一行健值中的XXX設(shè)計(jì) 可使存儲(chǔ)的數(shù)據(jù)分布更均勻,W提高寫(xiě)入和查詢(xún)的并發(fā)度。其中hashcode_n的具體計(jì)算方 法可W為: 陽(yáng) 121] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . .+dim[M]). hashCode0 陽(yáng)12引其中,dim[l]代表dimensionl運(yùn)一列中的第η行的維度值,dim凹代表 dimensions運(yùn)一列中的第η行的維度值,dim[M]代表dimensionM運(yùn)一列中的第η行的維 度值。W xxx_hashcode_l為例,hashcode_l的值是由與xxx_hashcode_l同一行的各個(gè)維 度值進(jìn)行拼接計(jì)算得到的。 陽(yáng)123] 所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的具體結(jié)構(gòu)可W參見(jiàn)圖1對(duì)應(yīng)實(shí)施例中的表2,表2中的列族 所包括的指標(biāo)列名包括:0000、0001、…、1023,每個(gè)指標(biāo)列名對(duì)應(yīng)至少一個(gè)指標(biāo)數(shù)據(jù),如為 "0000"的指標(biāo)列名所對(duì)應(yīng)的指標(biāo)數(shù)據(jù)包括:SliceIndex_l、SliceIndex_2、…、SliceIndex_ η ;表2中的各個(gè)指標(biāo)數(shù)據(jù)為日志記錄中的用于進(jìn)行統(tǒng)計(jì)的數(shù)值,即在存儲(chǔ)日志記錄時(shí)將日 志記錄中的用于進(jìn)行統(tǒng)計(jì)的數(shù)值作為指標(biāo)數(shù)據(jù)W存儲(chǔ)到所述指標(biāo)數(shù)據(jù)存儲(chǔ)表,所述指標(biāo)數(shù) 據(jù)是W化rift結(jié)構(gòu)序列化存儲(chǔ)的,所述指標(biāo)數(shù)據(jù)可W包括用戶(hù)數(shù)、次數(shù)、去重值、計(jì)數(shù)值、 合計(jì)值、最大值、最小值、平均值等等。表2中的第二行健值包括xxx_hashcode_l_time、 xxx_hashcode_2_time、…、xxx_hashcode_n_time,其中,xxx_hashcode_n 的結(jié)構(gòu)與計(jì)算 方式與第一行健值相同,運(yùn)里不再進(jìn)行寶述。第二行健值中的time為時(shí)間值,所述時(shí)間 值是按照預(yù)設(shè)的時(shí)間粒度所劃分的,若時(shí)間粒度為1個(gè)小時(shí),則time可W劃分為:0000、 0100、0200、…、2300 ;若時(shí)間粒度為15分鐘,則time可W劃分為:0000、0015、0030、…、 2345。例如,若W 1個(gè)小時(shí)為時(shí)間粒度,則第二行健值可W包括xxx_hashcode_l_0100、xxx_ hashcode_2_0200 等等。
[0124] 所述信息提取模塊50,用于當(dāng)獲取到日志記錄信息時(shí),提取所述日志記錄信息中 的日志指標(biāo)數(shù)據(jù)、日志維度值、時(shí)間信息W及關(guān)鍵字段;
[01巧]具體的,當(dāng)所述信息提取模塊50獲取到日志記錄信息時(shí),所述信息提取模塊50可 W提取所述日志記錄信息中的日志指標(biāo)數(shù)據(jù)、日志維度值、時(shí)間信息W及關(guān)鍵字段。其中, 所述日志指標(biāo)數(shù)據(jù)可W包括全局計(jì)數(shù)指標(biāo)、估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組、計(jì)數(shù)指標(biāo)、去重指標(biāo)、合 計(jì)指標(biāo)、最大值指標(biāo)、最小值指標(biāo)W及平均值指標(biāo)中的至少一種。所述時(shí)間信息為生成所述 日志記錄信息的時(shí)間點(diǎn)。
[01%] 所述第一更新模塊60,用于根據(jù)所述日志維度值生成第一待更新行健值,并根據(jù) 所述日志維度值對(duì)所述維度索引表中與所述第一待更新行健值對(duì)應(yīng)的各個(gè)維度值進(jìn)行更 新;
[0127] 具體的,所述信息提取模塊50提取出日志指標(biāo)數(shù)據(jù)、日志維度值、時(shí)間信息W 及關(guān)鍵字段之后,所述第一更新模塊60可W將所述日志維度值放入dim數(shù)組,計(jì)算出該 dim數(shù)組拼接的hashcode_n,W得到對(duì)應(yīng)的第一待更新行健值xxx_hashcode_n,xxx為 hashcode_n的尾Ξ位,所述hashcode_n的具體計(jì)算方法可W為:
[0128] hashcode_n = (dim[l]+"\t"+dim[2]+"\t"+. . .+dim[M]). hashCode0 ;
[0129] W上述圖1對(duì)應(yīng)實(shí)施例中的表1為例,hashcode_n的計(jì)算公式中的dim[l]代表 dimensionl運(yùn)一列中的第η行的維度值,dim[2]代表dimensions運(yùn)一列中的第η行的維 度值,dim[M]代表dimensionM運(yùn)一列中的第η行的維度值。若所述第一更新模塊60所生 成的第一待更新行健值為xxx_hashcode_l,則所述第一更新模塊60將各個(gè)日志維度值分 別寫(xiě)入表1中與xxx_hashcode_l同一行的各個(gè)維度值中,W完成對(duì)與所述第一待更新行健 值對(duì)應(yīng)的各個(gè)維度值進(jìn)行更新的操作,其中,由于各個(gè)日志維度值與xxx_hashcode_l同一 行的各個(gè)維度值相同,所W寫(xiě)入各個(gè)日志維度值的過(guò)程即為對(duì)與xxx_hashcode_l同一行 的各個(gè)維度值進(jìn)行再次覆蓋,或者,也可W無(wú)需對(duì)與xxx_hashcode_l同一行的各個(gè)維度值 進(jìn)行更新操作。
[0130] 可選地,若無(wú)法在所述維度索引表中查找到所述第一待更新行健值,則所述第一 更新模塊60可W在所述維度索引表中新增一行,W將所述第一待更新行健值W及各個(gè)日 志維度值寫(xiě)入新增的行中。 陽(yáng)131] 所述第二更新模塊70,用于根據(jù)所述日志維度值和所述時(shí)間信息生成第二待更 新行健值,并根據(jù)所述關(guān)鍵字段生成待更新指標(biāo)列名,并根據(jù)所述日志指標(biāo)數(shù)據(jù)對(duì)所述指 標(biāo)數(shù)據(jù)存儲(chǔ)表中與所述第二待更新行健值和所述待更新指標(biāo)列名對(duì)應(yīng)的指標(biāo)數(shù)據(jù)進(jìn)行更 新; 陽(yáng)132] 具體的,所述第二更新模塊70可W根據(jù)所述日志維度值生成xxx_hashcode_n,再 根據(jù)時(shí)間信息W及預(yù)設(shè)的時(shí)間粒度生成time,將xxx_hashcode_n與time進(jìn)行拼接即可得 到第二待更新行健值xxx_hashcode_n_time。所述第二更新模塊70再根據(jù)所述關(guān)鍵字段 生成待更新指標(biāo)列名,生成待更新指標(biāo)列名的具體過(guò)程為:計(jì)算所述關(guān)鍵字段的murmur哈 希值(64為整型值),向右移位48位后除W 64即可得到待更新指標(biāo)列名(0000~1023), 即計(jì)算待更新指標(biāo)列名的方法為:(mu;rmu;rhash(key)〉〉48)/64。在生成第二待更新行健 值和待更新指標(biāo)列名之后,所述第二更新模塊70可W根據(jù)所述日志指標(biāo)數(shù)據(jù)對(duì)所述指標(biāo) 數(shù)據(jù)存儲(chǔ)表中與所述第二待更新行健值和所述待更新指標(biāo)列名對(duì)應(yīng)的指標(biāo)數(shù)據(jù)進(jìn)行更 新。W上述圖1對(duì)應(yīng)實(shí)施例中的表2為例,若所述第二待更新行健值為xxx_hashcode_l_ time,所述待更新指標(biāo)列名為0000,則所述第二更新模塊70可W根據(jù)所述日志指標(biāo)數(shù)據(jù)對(duì) Slicelndex_l進(jìn)行更新;其中,對(duì)Slicelndex_l進(jìn)行更新的過(guò)程可W包括:
[0133] 對(duì)全局計(jì)數(shù)指標(biāo)countTotal的更新:countTotal+l ;
[0134] 對(duì)估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組buckets的更新:
[0135] P = (murmurhash 化ey)〉〉48) % 64
[0136] zeroNum = (murmurhash (key) <<16)的前導(dǎo)零個(gè)數(shù)
[0137] if (buckets, get (p) <zeroNum) then bucket, set (p, zeroNum);
[0138] 若更新的指標(biāo)為計(jì)數(shù)指標(biāo)的第i個(gè):countindex. get(i)+l ; 陽(yáng)139] 若更新的指標(biāo)為去重指標(biāo)的第i個(gè):distincts. get(i). set(v);
[0140] 若更新的指標(biāo)為合計(jì)指標(biāo)的第i個(gè):sum. get (U+v ; 陽(yáng)141] 若更新的指標(biāo)為最小值指標(biāo)的第i個(gè):Min (min. get (i), V);
[0142] 若更新的指標(biāo)為最大值指標(biāo)的第i個(gè):Max (max. get (i), V); 陽(yáng)143] 若更新的指標(biāo)為平均值指標(biāo)的第i個(gè):(avg. get (i)* (countTotal. get(i) -1) +v) /countTotal. get(i)。
[0144] 可選地,若無(wú)法在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中查找到第二待更新行健值,則所述第二 更新模塊70可W在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中新增一行,W將所述第二待更新行健值寫(xiě)入新 增的行中,并在該新增的行中且與所述待更新指標(biāo)列名對(duì)應(yīng)的位置處寫(xiě)入所述日志指標(biāo)數(shù) 據(jù)。
[0145] 進(jìn)一步的,再請(qǐng)參見(jiàn)圖6,是上述圖4或圖5對(duì)應(yīng)實(shí)施例中的一種第一獲取模塊10 的結(jié)構(gòu)示意圖,所述第一獲取模塊10可W包括:請(qǐng)求獲取單元101、維度獲取單元102、第一 行健獲取單元103 ; 陽(yáng)146] 所述請(qǐng)求獲取單元101,用于獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,所述統(tǒng)計(jì)查詢(xún)請(qǐng)求攜帶有查詢(xún)維 度值; 陽(yáng)147] 具體的,當(dāng)所述請(qǐng)求獲取單元101接收到統(tǒng)計(jì)查詢(xún)請(qǐng)求時(shí),可W獲取所述統(tǒng)計(jì)查 詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值。
[0148] 所述維度獲取單元102,用于在所述維度索引表中的所述至少一個(gè)維度值中獲取 與所述查詢(xún)維度值對(duì)應(yīng)的維度值,并將與所述查詢(xún)維度值對(duì)應(yīng)的維度值確定為目標(biāo)維度 值;
[0149] 具體的,所述請(qǐng)求獲取單元101獲取到查詢(xún)維度值之后,所述維度獲取單元102可 W在所述維度索引表中的所述至少一個(gè)維度值中獲取與所述查詢(xún)維度值對(duì)應(yīng)的維度值,并 將與所述查詢(xún)維度值對(duì)應(yīng)的維度值確定為目標(biāo)維度值。W上述圖1對(duì)應(yīng)實(shí)施例中的表1為 例,查詢(xún)維度值包括維度值A(chǔ)和維度值B,若所述維度獲取單元102在表1的列族中查找到 與維度值A(chǔ)相同的維度值為Bytes_l,與維度值B相同的維度值為Bytes_2,則將Bytes_l 和Bytes_2確定為目標(biāo)維度值。
[0150] 所述第一行健獲取單元103,用于在所述維度索引表中的所述至少一個(gè)第一行健 值中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第一行健值,并將與所述目標(biāo)維度值對(duì)應(yīng)的第一行健值 確定為第一目標(biāo)行健值; 陽(yáng)151] 具體的,所述維度獲取單元102確定出目標(biāo)維度值之后,所述第一行健獲取單元 103可W在所述維度索引表中的所述至少一個(gè)第一行健值中獲取與所述目標(biāo)維度值對(duì)應(yīng)的 第一行健值,并將與所述目標(biāo)維度值對(duì)應(yīng)的第一行健值確定為第一目標(biāo)行健值。再W上述 表1為例,若確定出的目標(biāo)維度值為Bytes_l和Bytes_2,則所述第一行健獲取單元103可 W在表1的行健中獲取到與Bytes_l對(duì)應(yīng)的第一行健值為xxx_hashcode_l,W及Bytes_2 對(duì)應(yīng)的第一行健值為xxx_hashcode_2,并將xxx_hashcode_l和xxx_hashcode_2確定為第 一目標(biāo)行健值。 陽(yáng)152] 進(jìn)一步的,再請(qǐng)參見(jiàn)圖7,是上述圖4或圖5中的一種第二獲取模塊20的結(jié)構(gòu)示意 圖,所述第二獲取模塊20可W包括:時(shí)間值生成單元201、拼接單元202、第二行健獲取單元 203 ; 陽(yáng)153] 所述時(shí)間值生成單元201,用于根據(jù)所述時(shí)間粒度和所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的 統(tǒng)計(jì)時(shí)間范圍,生成在所述統(tǒng)計(jì)時(shí)間范圍內(nèi)的至少一個(gè)目標(biāo)時(shí)間值; 陽(yáng)154] 具體的,所述統(tǒng)計(jì)查詢(xún)請(qǐng)求還包括統(tǒng)計(jì)時(shí)間范圍。所述時(shí)間值生成單元201可W 根據(jù)所述時(shí)間粒度和所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的統(tǒng)計(jì)時(shí)間范圍,生成在所述統(tǒng)計(jì)時(shí)間范圍 內(nèi)的至少一個(gè)目標(biāo)時(shí)間值。例如,若統(tǒng)計(jì)時(shí)間范圍為全天,且預(yù)設(shè)的時(shí)間粒度為1個(gè)小時(shí), 則所述時(shí)間值生成單元201所生成的目標(biāo)時(shí)間值包括0000、0100、0200、…、2300,即0 :00 到23 :00的時(shí)間值。
[0K5] 所述拼接單元202,用于將所述至少一個(gè)目標(biāo)時(shí)間值中各目標(biāo)時(shí)間值分別與所述 第一目標(biāo)行健值進(jìn)行拼接,W得到待查詢(xún)行健值;
[0156] 具體的,所述時(shí)間值生成單元201生成至少一個(gè)目標(biāo)時(shí)間值之后,所述拼接單 元202可W將所述至少一個(gè)目標(biāo)時(shí)間值中各目標(biāo)時(shí)間值分別與所述第一目標(biāo)行健值進(jìn) 行拼接,W得到待查詢(xún)行健值。例如,若所述統(tǒng)計(jì)時(shí)間范圍為全天且時(shí)間粒度為1個(gè)小 時(shí),且所述第一目標(biāo)行健值為xxx_hashcode_2,則所述至少一個(gè)目標(biāo)時(shí)間值包括0000、 0100、0200、…、2300,所述拼接單元202將xxx_hashcode_2分別與所述至少一個(gè)目標(biāo) 時(shí)間值中各目標(biāo)時(shí)間值進(jìn)行拼接,可W得到待查詢(xún)行健值,所述待查詢(xún)行健值包括 hashcode_2_0000> xxx_hashcode_2_0100> ···> xxx_hashcode_2_2300〇
[0157] 所述第二行健獲取單元203,用于在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)第二 行健值中獲取與所述待查詢(xún)行健值對(duì)應(yīng)的第二行健值,并將與所述待查詢(xún)行健值對(duì)應(yīng)的第 二行健值確定為第二目標(biāo)行健值;
[0158] 具體的,所述拼接單元202得到待查詢(xún)行健值之后,所述第二行健獲取單元203 可W在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)第二行健值中獲取與所述待查詢(xún)行健值 對(duì)應(yīng)的第二行健值,并將與所述待查詢(xún)行健值對(duì)應(yīng)的第二行健值確定為第二目標(biāo)行健 值。例如,所述待查詢(xún)行健值包括:xxx_hashcode_2_0000、xxx_hashcode_2_0100、…、 xxx_hashcode_2_2300,所述第二行健獲取單元203在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中查找是否存 在與所述待查詢(xún)行健值相同的第二行健值,若在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中查找到與所述待 查詢(xún)行健值相同的第二行健值包括xxx_hashcode_2_0000和xxx_hashcode_2_0100,則 所述第二行健獲取單元203將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的xxx_hashcode_2_0000和 hashcode_2_0100確定為第二目標(biāo)行健值。
[0159] 進(jìn)一步的,再請(qǐng)參見(jiàn)圖8,是上述圖4或圖5中的一種合并模塊30的結(jié)構(gòu)示意圖, 所述合并模塊30可W包括:指標(biāo)數(shù)據(jù)獲取單元301、指標(biāo)數(shù)據(jù)合并單元302 ;
[0160] 所述指標(biāo)數(shù)據(jù)獲取單元301,用于在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)指標(biāo) 數(shù)據(jù)中獲取與所述第二目標(biāo)行健值對(duì)應(yīng)的指標(biāo)數(shù)據(jù),并將與所述第二目標(biāo)行健值對(duì)應(yīng)的指 標(biāo)數(shù)據(jù)確定為目標(biāo)指標(biāo)數(shù)據(jù); 陽(yáng)161] 具體的,所述指標(biāo)數(shù)據(jù)獲取單元301可W在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一 個(gè)指標(biāo)數(shù)據(jù)中獲取與所述第二目標(biāo)行健值對(duì)應(yīng)的指標(biāo)數(shù)據(jù),并將與所述第二目標(biāo)行健值對(duì) 應(yīng)的指標(biāo)數(shù)據(jù)確定為目標(biāo)指標(biāo)數(shù)據(jù)。W上述圖1對(duì)應(yīng)實(shí)施例中的表2為例,若所述第二目標(biāo) tx健值包括:xxx_hashcode_l_time 和 xxx_h曰shcode_2_time,貝!J與 xxx_h曰shcode_l_time 同一行的各列指標(biāo)數(shù)據(jù)均為目標(biāo)指標(biāo)數(shù)據(jù),且與xxx_hashcode_2_time同一行的各列指標(biāo) 數(shù)據(jù)也均為目標(biāo)指標(biāo)數(shù)據(jù)。 陽(yáng)162] 所述指標(biāo)數(shù)據(jù)合并單元302,用于將所述目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行行合并,并將行合并后 的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行列合并,W得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù);
[0163] 具體的,所述指標(biāo)數(shù)據(jù)獲取單元301確定出目標(biāo)指標(biāo)數(shù)據(jù)之后,所述指標(biāo)數(shù)據(jù) 合并單元302可W先將所述目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行行合并,在行合并時(shí)可W從上至下分別對(duì) 每列的目標(biāo)指標(biāo)數(shù)據(jù)依次進(jìn)行兩兩合并,直至行合并到剩下一行目標(biāo)指標(biāo)數(shù)據(jù)。再請(qǐng)參 見(jiàn)上述圖1對(duì)應(yīng)實(shí)施例中的表2, W Slicelndex_l和Slicelndex_2進(jìn)行行合并為例,若 Slicelndex_l和Slicelndex_2均包括全局計(jì)數(shù)指標(biāo)、估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組、計(jì)數(shù)指標(biāo)、去 重指標(biāo)、合計(jì)指標(biāo)、最大值指標(biāo)、最小值指標(biāo)W及平均值指標(biāo),則所述指標(biāo)數(shù)據(jù)合并單元302 對(duì)Slicelndex_l和Slicelndex_2進(jìn)行行合并的具體過(guò)程包括:
[0164] 全局計(jì)數(shù)指標(biāo)的合并:slicelndexl. countTotal+sliceIndex2. countTotal ; 陽(yáng)1化]估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組的合并: 陽(yáng) 166]
[0167] 計(jì)數(shù)指標(biāo)的合并:sliceindexl. countIndex+sliceIndex2. countindex ;
[0168] 去重指標(biāo)的合并:sliceindexl. distincts. addAll (slicelndex2. distincts) (集合合并);
[0169] 合計(jì)指標(biāo)的合并:sliceindexl. sum+slicelndex2. sum ;
[0170] 最小值指標(biāo)的合并:Min (sliceindexl. min, slicelndex2. min);
[0171] 最小值指標(biāo)的合并:Max (sliceindexl. max, slicelndex2. max); 陽(yáng)172] 平均值指標(biāo)的合并:
[0173] (sliceindexl. avg*slicelndexl. countIndexl+sliceIndex2. avg*slicelndex2. countIndex2)/(sliceindexl. countIndexl+sliceIndex2. countIndex2)〇
[0174] 其中,所述指標(biāo)數(shù)據(jù)合并單元302對(duì)行合并后的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行列合并的過(guò)程 與行合并的過(guò)程類(lèi)似,即在列合并時(shí)可W對(duì)各列中行合并后的目標(biāo)指標(biāo)數(shù)據(jù)依次進(jìn)行兩兩 合并,直至列合并到剩下一個(gè)總的目標(biāo)指標(biāo)數(shù)據(jù),所述總的目標(biāo)指標(biāo)數(shù)據(jù)即為與所述統(tǒng)計(jì) 查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。其中,列合并和行合并不一樣的地方僅在于對(duì)估計(jì)用戶(hù)數(shù)指標(biāo) 數(shù)組的合并,在列合并之前需要先根據(jù)各列中行合并后的估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組運(yùn)個(gè)變量計(jì) 算出一個(gè)用戶(hù)數(shù)數(shù)值,再在列合并時(shí)直接累加各列計(jì)算出的用戶(hù)數(shù)數(shù)值即可統(tǒng)計(jì)出某種維 度條件下查詢(xún)的估計(jì)用戶(hù)數(shù)運(yùn)個(gè)指標(biāo)值的總量,對(duì)于其他指標(biāo)的列合并的過(guò)程與行合并的 過(guò)程相同。其中,根據(jù)估計(jì)用戶(hù)數(shù)指標(biāo)數(shù)組運(yùn)個(gè)變量計(jì)算出一個(gè)用戶(hù)數(shù)數(shù)值的具體過(guò)程可 W為: 陽(yáng)1巧]
[0176] 其中,userCount為計(jì)算出的用戶(hù)數(shù)數(shù)值。
[0177] 本發(fā)明實(shí)施例通過(guò)在維度索引表中獲取與統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì) 應(yīng)的第一目標(biāo)行健值,再在指標(biāo)數(shù)據(jù)存儲(chǔ)表中獲取與第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健 值,可W將指標(biāo)數(shù)據(jù)存儲(chǔ)表中與第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,W得到統(tǒng) 計(jì)數(shù)據(jù)。由于日志記錄中的維度值和指標(biāo)數(shù)據(jù)分別存儲(chǔ)于維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表 中,且只需通過(guò)掃描維度索引表即可對(duì)指標(biāo)數(shù)據(jù)存儲(chǔ)表中的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總, 即無(wú)需對(duì)所有日志記錄都進(jìn)行掃描,所W可W減少需要掃描的數(shù)據(jù)量,W提高對(duì)數(shù)據(jù)進(jìn)行 統(tǒng)計(jì)匯總的效率;而且通過(guò)提取所述日志記錄信息中的日志指標(biāo)數(shù)據(jù)、日志維度值、時(shí)間 信息W及關(guān)鍵字段,可W對(duì)維度索引表中對(duì)應(yīng)的維度值進(jìn)行更新并對(duì)指標(biāo)數(shù)據(jù)存儲(chǔ)表中對(duì) 應(yīng)的指標(biāo)數(shù)據(jù)進(jìn)行更新,由于寫(xiě)入日志記錄信息時(shí)可W只更新相應(yīng)位置的維度值和指標(biāo)數(shù) 據(jù),即可W避免每寫(xiě)入一條日志記錄信息就要增加一條行數(shù),所W有效減少了存儲(chǔ)開(kāi)銷(xiāo);同 時(shí),通過(guò)更新維度值和指標(biāo)數(shù)據(jù)的方式來(lái)寫(xiě)入日志記錄信息,也可W在統(tǒng)計(jì)查詢(xún)時(shí)降低所 需掃描的數(shù)據(jù)量,W進(jìn)一步提高對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總的效率。
[0178] 請(qǐng)參見(jiàn)圖9,是本發(fā)明實(shí)施例提供的又一種數(shù)據(jù)統(tǒng)計(jì)裝置的結(jié)構(gòu)示意圖,所述數(shù)據(jù) 統(tǒng)計(jì)裝置1000可W包括產(chǎn)少一個(gè)處理器1001,例如CPU,至少一個(gè)網(wǎng)絡(luò)接口 1004,用戶(hù)接 口 1003,存儲(chǔ)器1005,至少一個(gè)通信總線1002。其中,通信總線1002用于實(shí)現(xiàn)運(yùn)些組件之 間的連接通信。其中,用戶(hù)接口 1003可W包括顯示屏值isplay)、鍵盤(pán)化巧board),可選用 戶(hù)接口 1003還可W包括標(biāo)準(zhǔn)的有線接口、無(wú)線接口。網(wǎng)絡(luò)接口 1004可選的可W包括標(biāo)準(zhǔn) 的有線接口、無(wú)線接口(如WI-FI接口)。存儲(chǔ)器1005可W是高速RAM存儲(chǔ)器,也可W是非 不穩(wěn)定的存儲(chǔ)器(non-volatile memcxry),例如至少一個(gè)磁盤(pán)存儲(chǔ)器。存儲(chǔ)器1005可選的 還可W是至少一個(gè)位于遠(yuǎn)離前述處理器1001的存儲(chǔ)裝置。如圖9所示,作為一種計(jì)算機(jī)存 儲(chǔ)介質(zhì)的存儲(chǔ)器1005中可W包括操作系統(tǒng)、網(wǎng)絡(luò)通信模塊、用戶(hù)接口模塊W及設(shè)備控制應(yīng) 用程序。 陽(yáng)179] 在圖9所示的數(shù)據(jù)統(tǒng)計(jì)裝置1000中,網(wǎng)絡(luò)接口 1004主要用于連接用戶(hù)終端,與所 述用戶(hù)終端進(jìn)行數(shù)據(jù)通信;而用戶(hù)接口 1003主要用于為用戶(hù)提供輸入的接口,獲取用戶(hù)輸 出的數(shù)據(jù);而處理器1001可W用于調(diào)用存儲(chǔ)器1005中存儲(chǔ)的設(shè)備控制應(yīng)用程序,并具體執(zhí) 行W下步驟:
[0180] 獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜 帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維度索引表的行健中獲取與所述目標(biāo)維度值 對(duì)應(yīng)的第一目標(biāo)行健值; 陽(yáng)181] 在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲取與所述第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo) 行健值;
[0182] 將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所述第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn) 行合并,W得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。
[0183] 在一個(gè)實(shí)施例中,所述處理器1001在執(zhí)行獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引 表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維 度索引表的行健中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第一目標(biāo)行健值之前,還執(zhí)行W下步驟:
[0184] 根據(jù)皿ase數(shù)據(jù)庫(kù)預(yù)設(shè)維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表; 陽(yáng)化5] 其中,所述維度索引表的列族包括至少一個(gè)維度列名,所述至少一個(gè)維度列名中 各維度列名分別對(duì)應(yīng)至少一個(gè)維度值,所述維度索引表的行健包括至少一個(gè)第一行健值, 所述至少一個(gè)第一行健值是根據(jù)所述至少一個(gè)維度值計(jì)算得到的; 陽(yáng)186] 其中,所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族包括至少一個(gè)指標(biāo)列名,所述至少一個(gè)指標(biāo)列 名中各指標(biāo)列名分別對(duì)應(yīng)至少一個(gè)指標(biāo)數(shù)據(jù),所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健包括至少一個(gè)第 二行健值,所述至少一個(gè)第二行健值是根據(jù)所述至少一個(gè)維度值和時(shí)間值計(jì)算得到的,所 述時(shí)間值是按照預(yù)設(shè)的時(shí)間粒度所劃分的。
[0187] 在一個(gè)實(shí)施例中,所述處理器1001在執(zhí)行獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引 表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維 度索引表的行健中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第一目標(biāo)行健值時(shí),具體執(zhí)行W下步驟:
[0188] 獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,所述統(tǒng)計(jì)查詢(xún)請(qǐng)求攜帶有查詢(xún)維度值;
[0189] 在所述維度索引表中的所述至少一個(gè)維度值中獲取與所述查詢(xún)維度值對(duì)應(yīng)的維 度值,并將與所述查詢(xún)維度值對(duì)應(yīng)的維度值確定為目標(biāo)維度值;
[0190] 在所述維度索引表中的所述至少一個(gè)第一行健值中獲取與所述目標(biāo)維度值對(duì)應(yīng) 的第一行健值,并將與所述目標(biāo)維度值對(duì)應(yīng)的第一行健值確定為第一目標(biāo)行健值。 陽(yáng)191] 在一個(gè)實(shí)施例中,所述處理器1001在執(zhí)行在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲 取與所述第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健值時(shí),具體執(zhí)行W下步驟: 陽(yáng)192] 根據(jù)所述時(shí)間粒度和所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的統(tǒng)計(jì)時(shí)間范圍,生成在所述統(tǒng)計(jì) 時(shí)間范圍內(nèi)的至少一個(gè)目標(biāo)時(shí)間值;
[0193] 將所述至少一個(gè)目標(biāo)時(shí)間值中各目標(biāo)時(shí)間值分別與所述第一目標(biāo)行健值進(jìn)行拼 接,W得到待查詢(xún)行健值;
[0194] 在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)第二行健值中獲取與所述待查詢(xún)行健 值對(duì)應(yīng)的第二行健值,并將與所述待查詢(xún)行健值對(duì)應(yīng)的第二行健值確定為第二目標(biāo)行健 值。
[0195] 在一個(gè)實(shí)施例中,所述處理器1001在執(zhí)行將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所 述第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,W得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì) 數(shù)據(jù)時(shí),具體執(zhí)行W下步驟:
[0196] 在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)指標(biāo)數(shù)據(jù)中獲取與所述第二目標(biāo)行健 值對(duì)應(yīng)的指標(biāo)數(shù)據(jù),并將與所述第二目標(biāo)行健值對(duì)應(yīng)的指標(biāo)數(shù)據(jù)確定為目標(biāo)指標(biāo)數(shù)據(jù);
[0197] 將所述目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行行合并,并將行合并后的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行列合并,W 得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。
[0198] 在一個(gè)實(shí)施例中,所述處理器1001還執(zhí)行W下步驟:
[0199] 當(dāng)獲取到日志記錄信息時(shí),提取所述日志記錄信息中的日志指標(biāo)數(shù)據(jù)、日志維度 值、時(shí)間信息W及關(guān)鍵字段; 陽(yáng)200] 根據(jù)所述日志維度值生成第一待更新行健值,并根據(jù)所述日志維度值對(duì)所述維度 索引表中與所述第一待更新行健值對(duì)應(yīng)的各個(gè)維度值進(jìn)行更新; 陽(yáng)201] 根據(jù)所述日志維度值和所述時(shí)間信息生成第二待更新行健值,并根據(jù)所述關(guān)鍵字 段生成待更新指標(biāo)列名,并根據(jù)所述日志指標(biāo)數(shù)據(jù)對(duì)所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中與所述第二待 更新行健值和所述待更新指標(biāo)列名對(duì)應(yīng)的指標(biāo)數(shù)據(jù)進(jìn)行更新。 陽(yáng)202] 本發(fā)明實(shí)施例通過(guò)在維度索引表中獲取與統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì) 應(yīng)的第一目標(biāo)行健值,再在指標(biāo)數(shù)據(jù)存儲(chǔ)表中獲取與第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健 值,可W將指標(biāo)數(shù)據(jù)存儲(chǔ)表中與第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,W得到統(tǒng) 計(jì)數(shù)據(jù)。由于日志記錄中的維度值和指標(biāo)數(shù)據(jù)分別存儲(chǔ)于維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表 中,且只需通過(guò)掃描維度索引表即可對(duì)指標(biāo)數(shù)據(jù)存儲(chǔ)表中的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總, 即無(wú)需對(duì)所有日志記錄都進(jìn)行掃描,所W可W減少需要掃描的數(shù)據(jù)量,W提高對(duì)數(shù)據(jù)進(jìn)行 統(tǒng)計(jì)匯總的效率;而且通過(guò)提取所述日志記錄信息中的日志指標(biāo)數(shù)據(jù)、日志維度值、時(shí)間 信息W及關(guān)鍵字段,可W對(duì)維度索引表中對(duì)應(yīng)的維度值進(jìn)行更新并對(duì)指標(biāo)數(shù)據(jù)存儲(chǔ)表中對(duì) 應(yīng)的指標(biāo)數(shù)據(jù)進(jìn)行更新,由于寫(xiě)入日志記錄信息時(shí)可W只更新相應(yīng)位置的維度值和指標(biāo)數(shù) 據(jù),即可W避免每寫(xiě)入一條日志記錄信息就要增加一條行數(shù),所W有效減少了存儲(chǔ)開(kāi)銷(xiāo);同 時(shí),通過(guò)更新維度值和指標(biāo)數(shù)據(jù)的方式來(lái)寫(xiě)入日志記錄信息,也可W在統(tǒng)計(jì)查詢(xún)時(shí)降低所 需掃描的數(shù)據(jù)量,W進(jìn)一步提高對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)匯總的效率。 陽(yáng)203] 本領(lǐng)域普通技術(shù)人員可W理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可W 通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì) 中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁 碟、光盤(pán)、只讀存儲(chǔ)記憶體巧eacH3nly Memo巧,ROM)或隨機(jī)存儲(chǔ)記憶體(Random Access Memoir, RAM)等。 陽(yáng)204] W上所掲露的僅為本發(fā)明較佳實(shí)施例而已,當(dāng)然不能W此來(lái)限定本發(fā)明之權(quán)利范 圍,因此依本發(fā)明權(quán)利要求所作的等同變化,仍屬本發(fā)明所涵蓋的范圍。
【主權(quán)項(xiàng)】
1. 一種數(shù)據(jù)統(tǒng)計(jì)方法,其特征在于,包括: 獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的 查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維度索引表的行健中獲取與所述目標(biāo)維度值對(duì)應(yīng) 的第一目標(biāo)行健值; 在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲取與所述第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健 值; 將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所述第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合 并,以得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。2. 如權(quán)利要求1所述的方法,其特征在于,在所述獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索 引表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述 維度索引表的行健中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第一目標(biāo)行健值的步驟之前,還包括: 根據(jù)HBase數(shù)據(jù)庫(kù)預(yù)設(shè)維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表; 其中,所述維度索引表的列族包括至少一個(gè)維度列名,所述至少一個(gè)維度列名中各維 度列名分別對(duì)應(yīng)至少一個(gè)維度值,所述維度索引表的行健包括至少一個(gè)第一行健值,所述 至少一個(gè)第一行健值是根據(jù)所述至少一個(gè)維度值計(jì)算得到的; 其中,所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族包括至少一個(gè)指標(biāo)列名,所述至少一個(gè)指標(biāo)列名中 各指標(biāo)列名分別對(duì)應(yīng)至少一個(gè)指標(biāo)數(shù)據(jù),所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健包括至少一個(gè)第二行 健值,所述至少一個(gè)第二行健值是根據(jù)所述至少一個(gè)維度值和時(shí)間值計(jì)算得到的,所述時(shí) 間值是按照預(yù)設(shè)的時(shí)間粒度所劃分的。3. 如權(quán)利要求2所述的方法,其特征在于,所述獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引 表的列族中獲取與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維 度索引表的行健中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第一目標(biāo)行健值,包括: 獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,所述統(tǒng)計(jì)查詢(xún)請(qǐng)求攜帶有查詢(xún)維度值; 在所述維度索引表中的所述至少一個(gè)維度值中獲取與所述查詢(xún)維度值對(duì)應(yīng)的維度值, 并將與所述查詢(xún)維度值對(duì)應(yīng)的維度值確定為目標(biāo)維度值; 在所述維度索引表中的所述至少一個(gè)第一行健值中獲取與所述目標(biāo)維度值對(duì)應(yīng)的第 一行健值,并將與所述目標(biāo)維度值對(duì)應(yīng)的第一行健值確定為第一目標(biāo)行健值。4. 如權(quán)利要求2所述的方法,其特征在于,所述在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲 取與所述第一目標(biāo)行健值對(duì)應(yīng)的第二目標(biāo)行健值,包括: 根據(jù)所述時(shí)間粒度和所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的統(tǒng)計(jì)時(shí)間范圍,生成在所述統(tǒng)計(jì)時(shí)間 范圍內(nèi)的至少一個(gè)目標(biāo)時(shí)間值; 將所述至少一個(gè)目標(biāo)時(shí)間值中各目標(biāo)時(shí)間值分別與所述第一目標(biāo)行健值進(jìn)行拼接,以 得到待查詢(xún)行健值; 在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)第二行健值中獲取與所述待查詢(xún)行健值對(duì) 應(yīng)的第二行健值,并將與所述待查詢(xún)行健值對(duì)應(yīng)的第二行健值確定為第二目標(biāo)行健值。5. 如權(quán)利要求2所述的方法,其特征在于,所述將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所 述第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行合并,以得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì) 數(shù)據(jù),包括: 在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)指標(biāo)數(shù)據(jù)中獲取與所述第二目標(biāo)行健值對(duì) 應(yīng)的指標(biāo)數(shù)據(jù),并將與所述第二目標(biāo)行健值對(duì)應(yīng)的指標(biāo)數(shù)據(jù)確定為目標(biāo)指標(biāo)數(shù)據(jù); 將所述目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行行合并,并將行合并后的目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行列合并,以得到 與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。6. 如權(quán)利要求2所述的方法,其特征在于,還包括: 當(dāng)獲取到日志記錄信息時(shí),提取所述日志記錄信息中的日志指標(biāo)數(shù)據(jù)、日志維度值、時(shí) 間信息以及關(guān)鍵字段; 根據(jù)所述日志維度值生成第一待更新行健值,并根據(jù)所述日志維度值對(duì)所述維度索引 表中與所述第一待更新行健值對(duì)應(yīng)的各個(gè)維度值進(jìn)行更新; 根據(jù)所述日志維度值和所述時(shí)間信息生成第二待更新行健值,并根據(jù)所述關(guān)鍵字段生 成待更新指標(biāo)列名,并根據(jù)所述日志指標(biāo)數(shù)據(jù)對(duì)所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中與所述第二待更新 行健值和所述待更新指標(biāo)列名對(duì)應(yīng)的指標(biāo)數(shù)據(jù)進(jìn)行更新。7. -種數(shù)據(jù)統(tǒng)計(jì)裝置,其特征在于,包括: 第一獲取模塊,用于獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,在預(yù)設(shè)的維度索引表的列族中獲取與所述統(tǒng) 計(jì)查詢(xún)請(qǐng)求所攜帶的查詢(xún)維度值對(duì)應(yīng)的目標(biāo)維度值,并在所述維度索引表的行健中獲取與 所述目標(biāo)維度值對(duì)應(yīng)的第一目標(biāo)行健值; 第二獲取模塊,用于在預(yù)設(shè)的指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健中獲取與所述第一目標(biāo)行健值對(duì) 應(yīng)的第二目標(biāo)行健值; 合并模塊,用于將所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族中與所述第二目標(biāo)行健值對(duì)應(yīng)的目標(biāo)指 標(biāo)數(shù)據(jù)進(jìn)行合并,以得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。8. 如權(quán)利要求7所述的裝置,其特征在于,還包括: 預(yù)設(shè)模塊,用于根據(jù)HBase數(shù)據(jù)庫(kù)預(yù)設(shè)維度索引表和指標(biāo)數(shù)據(jù)存儲(chǔ)表; 其中,所述維度索引表的列族包括至少一個(gè)維度列名,所述至少一個(gè)維度列名中各維 度列名分別對(duì)應(yīng)至少一個(gè)維度值,所述維度索引表的行健包括至少一個(gè)第一行健值,所述 至少一個(gè)第一行健值是根據(jù)所述至少一個(gè)維度值計(jì)算得到的; 其中,所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的列族包括至少一個(gè)指標(biāo)列名,所述至少一個(gè)指標(biāo)列名中 各指標(biāo)列名分別對(duì)應(yīng)至少一個(gè)指標(biāo)數(shù)據(jù),所述指標(biāo)數(shù)據(jù)存儲(chǔ)表的行健包括至少一個(gè)第二行 健值,所述至少一個(gè)第二行健值是根據(jù)所述至少一個(gè)維度值和時(shí)間值計(jì)算得到的,所述時(shí) 間值是按照預(yù)設(shè)的時(shí)間粒度所劃分的。9. 如權(quán)利要求8所述的裝置,其特征在于,所述第一獲取模塊包括: 請(qǐng)求獲取單元,用于獲取統(tǒng)計(jì)查詢(xún)請(qǐng)求,所述統(tǒng)計(jì)查詢(xún)請(qǐng)求攜帶有查詢(xún)維度值; 維度獲取單元,用于在所述維度索引表中的所述至少一個(gè)維度值中獲取與所述查詢(xún)維 度值對(duì)應(yīng)的維度值,并將與所述查詢(xún)維度值對(duì)應(yīng)的維度值確定為目標(biāo)維度值; 第一行健獲取單元,用于在所述維度索引表中的所述至少一個(gè)第一行健值中獲取與所 述目標(biāo)維度值對(duì)應(yīng)的第一行健值,并將與所述目標(biāo)維度值對(duì)應(yīng)的第一行健值確定為第一目 標(biāo)行健值。10. 如權(quán)利要求8所述的裝置,其特征在于,所述第二獲取模塊包括: 時(shí)間值生成單元,用于根據(jù)所述時(shí)間粒度和所述統(tǒng)計(jì)查詢(xún)請(qǐng)求所攜帶的統(tǒng)計(jì)時(shí)間范 圍,生成在所述統(tǒng)計(jì)時(shí)間范圍內(nèi)的至少一個(gè)目標(biāo)時(shí)間值; 拼接單元,用于將所述至少一個(gè)目標(biāo)時(shí)間值中各目標(biāo)時(shí)間值分別與所述第一目標(biāo)行健 值進(jìn)行拼接,以得到待查詢(xún)行健值; 第二行健獲取單元,用于在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)第二行健值中獲取 與所述待查詢(xún)行健值對(duì)應(yīng)的第二行健值,并將與所述待查詢(xún)行健值對(duì)應(yīng)的第二行健值確定 為第二目標(biāo)行健值。11. 如權(quán)利要求8所述的裝置,其特征在于,所述合并模塊包括: 指標(biāo)數(shù)據(jù)獲取單元,用于在所述指標(biāo)數(shù)據(jù)存儲(chǔ)表中的所述至少一個(gè)指標(biāo)數(shù)據(jù)中獲取與 所述第二目標(biāo)行健值對(duì)應(yīng)的指標(biāo)數(shù)據(jù),并將與所述第二目標(biāo)行健值對(duì)應(yīng)的指標(biāo)數(shù)據(jù)確定為 目標(biāo)指標(biāo)數(shù)據(jù); 指標(biāo)數(shù)據(jù)合并單元,用于將所述目標(biāo)指標(biāo)數(shù)據(jù)進(jìn)行行合并,并將行合并后的目標(biāo)指標(biāo) 數(shù)據(jù)進(jìn)行列合并,以得到與所述統(tǒng)計(jì)查詢(xún)請(qǐng)求對(duì)應(yīng)的統(tǒng)計(jì)數(shù)據(jù)。12. 如權(quán)利要求8所述的裝置,其特征在于,還包括: 信息提取模塊,用于當(dāng)獲取到日志記錄信息時(shí),提取所述日志記錄信息中的日志指標(biāo) 數(shù)據(jù)、日志維度值、時(shí)間信息以及關(guān)鍵字段; 第一更新模塊,用于根據(jù)所述日志維度值生成第一待更新行健值,并根據(jù)所述日志維 度值對(duì)所述維度索引表中與所述第一待更新行健值對(duì)應(yīng)的各個(gè)維度值進(jìn)行更新; 第二更新模塊,用于根據(jù)所述日志維度值和所述時(shí)間信息生成第二待更新行健值,并 根據(jù)所述關(guān)鍵字段生成待更新指標(biāo)列名,并根據(jù)所述日志指標(biāo)數(shù)據(jù)對(duì)所述指標(biāo)數(shù)據(jù)存儲(chǔ)表 中與所述第二待更新行健值和所述待更新指標(biāo)列名對(duì)應(yīng)的指標(biāo)數(shù)據(jù)進(jìn)行更新。
【文檔編號(hào)】G06F17/30GK105989076SQ201510070951
【公開(kāi)日】2016年10月5日
【申請(qǐng)日】2015年2月10日
【發(fā)明人】沈健
【申請(qǐng)人】騰訊科技(深圳)有限公司