掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
指標(biāo)是一個統(tǒng)稱概念,可以細分為 原子指標(biāo)? 和 派生指標(biāo) 。 以 某企業(yè)近一周上海地域的銷售金額 為例,整體是一個派生指標(biāo),其中的 銷售金額 是原子指標(biāo); 近一周 是時間, 企業(yè) 和 地域 是維度。

可見,指標(biāo)數(shù)據(jù)由三部分組成:
其中,維度可以是一個或多個,也可以是零個,簡稱為多維。
典型的關(guān)系型數(shù)據(jù)庫就是 MySQL 。
使用時,需要先根據(jù)業(yè)務(wù)設(shè)計好數(shù)據(jù)模式:
然后,創(chuàng)建相應(yīng)的數(shù)據(jù)庫和數(shù)據(jù)表;最后,存儲業(yè)務(wù)數(shù)據(jù)。
關(guān)系型數(shù)據(jù)庫會有一個特殊的約定 :數(shù)據(jù)模式是相對固定的。業(yè)務(wù)不發(fā)生變化的情況下,數(shù)據(jù)模式不會輕易發(fā)生變化。
不同的業(yè)務(wù)會有不同的指標(biāo),每一個業(yè)務(wù)可以單獨創(chuàng)建一個數(shù)據(jù)庫,這個比較好理解。
每一個指標(biāo)都會有時間和數(shù)值,但是不同的指標(biāo)之間,它們的維度名稱和維度數(shù)目卻可能是不同的。
最直接的設(shè)計:
假設(shè)某個指標(biāo)有三個維度:a、b 和 c,表結(jié)構(gòu)如下所示:
|
timestamp |
a |
b |
c |
value |
|
2022-09-15 00:00:00 |
a1 |
b1 |
c1 |
1 |
|
2022-09-15 01:00:00 |
a2 |
b2 |
c2 |
2 |
|
2022-09-15 02:00:00 |
a3 |
b3 |
c3 |
3 |
timestamp 表示時間,value 表示數(shù)值,a、b 和 c 表示維度。
問題很明顯:
受限于業(yè)務(wù)方的部署環(huán)境,僅支持關(guān)系型數(shù)據(jù)庫 MySQL;而且業(yè)務(wù)方不能接收一個業(yè)務(wù)指標(biāo)一個數(shù)據(jù)表的粗暴設(shè)計。
業(yè)務(wù)指標(biāo)的數(shù)目是不可控的,但業(yè)務(wù)指標(biāo)的維度數(shù)目是相對可控的,我們是否可以按維度數(shù)目創(chuàng)建 指標(biāo)表 ,畢竟絕大多數(shù)數(shù)據(jù)可視化組件最多支持三維。
比如:
假設(shè)維度數(shù)目為 3 的指標(biāo)表,表結(jié)構(gòu)如下所示:
|
id |
timestamp |
d1 |
d2 |
d3 |
value |
|
m1 |
2022-09-15 00:00:00 |
a1 |
b1 |
c1 |
1 |
|
m2 |
2022-09-15 01:00:00 |
a2 |
b2 |
c2 |
2 |
|
m3 |
2022-09-15 02:00:00 |
a3 |
b3 |
c3 |
3 |
id 表示指標(biāo) ID,用于唯一標(biāo)識指標(biāo);d1 、d2 和 d3 分別表示維度1、維度2 和 維度3。
一張數(shù)據(jù)表中可以存儲多個相同維度數(shù)目指標(biāo)的數(shù)據(jù),如:m1、m2 和 m3。存儲指標(biāo)數(shù)據(jù)時,只要按指標(biāo)的維度數(shù)目,將指標(biāo)數(shù)據(jù)存儲到相應(yīng)維度數(shù)目的指標(biāo)表中即可。指標(biāo)表可以根據(jù)業(yè)務(wù)可能的最大維度數(shù)目預(yù)先創(chuàng)建,業(yè)務(wù)維度數(shù)目需要擴展時,僅需要新增有限的幾張?zhí)囟ňS度數(shù)目的指標(biāo)表即可。
指標(biāo)有維度的情況下,指標(biāo)表僅支持按指標(biāo)維度次序,依次存儲和查詢維度1、維度2、... 的維度數(shù)據(jù),并不知道具體的維度名稱是什么。
考慮到業(yè)務(wù)希望指標(biāo)發(fā)生變化時,歷史數(shù)據(jù)可追溯,同一個指標(biāo)需要有多個版本。
也就是說,我們需要知道:
我們可以:
|
id |
version |
|
m1 |
1 |
|
m2 |
1 |
|
m1 |
3 |
id 表示指標(biāo) ID,version 表示版本號。
版本表存儲著指標(biāo)和版本的對應(yīng)關(guān)系,可以查詢指標(biāo)的歷史版本記錄,也可以查詢指標(biāo)的最新版本。
|
id |
version |
name |
|
m1 |
3 |
a1 |
|
m1 |
3 |
a2 |
|
m1 |
3 |
a3 |
id 表示指標(biāo) ID,version 表示版本號,name 表示維度名稱。
維度表存儲著指標(biāo)/版本和維度名稱的對應(yīng)關(guān)系,可以按指標(biāo) ID 和指標(biāo)版本查詢維度名稱列表,多個維度名稱的順序按維度名稱存儲順序依次排列。
|
id |
version |
timestamp |
d1 |
d2 |
d3 |
value |
|
m1 |
3 |
2022-09-15 00:00:00 |
a1 |
b1 |
c1 |
1 |
|
m1 |
3 |
2022-09-15 01:00:00 |
a2 |
b2 |
c2 |
2 |
|
m1 |
3 |
2022-09-15 02:00:00 |
a3 |
b3 |
c3 |
3 |
指標(biāo)表存儲著指標(biāo)數(shù)據(jù)。注意,維度1、維度2 和 維度 N 的表現(xiàn)形式。
新增指標(biāo)時,使用 Unix 時間戳作為版本號,存儲指標(biāo) ID 和 版本至版本表;如果指標(biāo)有維度,存儲指標(biāo)ID、版本號 和維度名稱至維度表,如果維度有多個,需要按照維度排列順序依次存儲多條記錄。
修改指標(biāo)時,如果修改后的指標(biāo)維度名稱列表和維度表中該指標(biāo)最新版本的維度名稱列表數(shù)目或內(nèi)容不一致,需要和新增指標(biāo)一樣,存儲該指標(biāo)新的版本號和維度名稱列表。
存儲指標(biāo)數(shù)據(jù)時,獲取維度表中該指標(biāo)最新版本的維度名稱列表,即可知指標(biāo)維度數(shù)目;根據(jù)維度數(shù)目選取指標(biāo)表,將指標(biāo)數(shù)據(jù)存儲至該指標(biāo)表,維度名稱需按順序依次存儲至維度1、維度2、...。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流