自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)多維指標(biāo)數(shù)據(jù)

數(shù)據(jù)庫(kù)
關(guān)系型數(shù)據(jù)庫(kù)會(huì)有一個(gè)特殊的 約定 :數(shù)據(jù)模式是相對(duì)固定的。業(yè)務(wù)不發(fā)生變化的情況下,數(shù)據(jù)模式不會(huì)輕易發(fā)生變化。

什么是多維指標(biāo)數(shù)據(jù)?

指標(biāo)是一個(gè)統(tǒng)稱概念,可以細(xì)分為 原子指標(biāo)? 和 派生指標(biāo) 。 以 某企業(yè)近一周上海地域的銷售金額 為例,整體是一個(gè)派生指標(biāo),其中的 銷售金額 是原子指標(biāo); 近一周 是時(shí)間, 企業(yè) 和 地域 是維度。

可見(jiàn),指標(biāo)數(shù)據(jù)由三部分組成:

  • 時(shí)間
  • 維度
  • 數(shù)值

其中,維度可以是一個(gè)或多個(gè),也可以是零個(gè),簡(jiǎn)稱為多維。

什么是關(guān)系型數(shù)據(jù)庫(kù)?

典型的關(guān)系型數(shù)據(jù)庫(kù)就是 MySQL 。

使用時(shí),需要先根據(jù)業(yè)務(wù)設(shè)計(jì)好數(shù)據(jù)模式:

  • 數(shù)據(jù)庫(kù)中有哪些數(shù)據(jù)表
  • 數(shù)據(jù)表中有哪些字段

然后,創(chuàng)建相應(yīng)的數(shù)據(jù)庫(kù)和數(shù)據(jù)表;最后,存儲(chǔ)業(yè)務(wù)數(shù)據(jù)。

關(guān)系型數(shù)據(jù)庫(kù)會(huì)有一個(gè)特殊的約定 :數(shù)據(jù)模式是相對(duì)固定的。業(yè)務(wù)不發(fā)生變化的情況下,數(shù)據(jù)模式不會(huì)輕易發(fā)生變化。

使用關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)多維指標(biāo)數(shù)據(jù)會(huì)有什么問(wèn)題?

不同的業(yè)務(wù)會(huì)有不同的指標(biāo),每一個(gè)業(yè)務(wù)可以單獨(dú)創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),這個(gè)比較好理解。

每一個(gè)指標(biāo)都會(huì)有時(shí)間和數(shù)值,但是不同的指標(biāo)之間,它們的維度名稱和維度數(shù)目卻可能是不同的。

最直接的設(shè)計(jì):

  • 每一個(gè)指標(biāo)單獨(dú)創(chuàng)建一個(gè)數(shù)據(jù)表,位于某個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)
  • 數(shù)據(jù)表除時(shí)間和數(shù)值字段外,根據(jù)指標(biāo)的不同,創(chuàng)建若干維度字段

假設(shè)某個(gè)指標(biāo)有三個(gè)維度: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 表示時(shí)間,value 表示數(shù)值,a、b 和 c 表示維度。

問(wèn)題很明顯:

  • 如果某個(gè)業(yè)務(wù)擁有成千上萬(wàn)個(gè)指標(biāo),就需要?jiǎng)?chuàng)建成千上萬(wàn)個(gè)數(shù)據(jù)表。無(wú)論是預(yù)先創(chuàng)建數(shù)據(jù)表,還是隨著指標(biāo)的新增動(dòng)態(tài)創(chuàng)建新的數(shù)據(jù)表,如此數(shù)目龐大的數(shù)據(jù)表是不能接受的。
  • 固化的數(shù)據(jù)表結(jié)構(gòu)不能很好地應(yīng)對(duì)指標(biāo)的維度名稱和維度數(shù)目發(fā)生變化的場(chǎng)景。

受限于業(yè)務(wù)方的部署環(huán)境,僅支持關(guān)系型數(shù)據(jù)庫(kù) MySQL;而且業(yè)務(wù)方不能接收一個(gè)業(yè)務(wù)指標(biāo)一個(gè)數(shù)據(jù)表的粗暴設(shè)計(jì)。

思考

業(yè)務(wù)指標(biāo)的數(shù)目是不可控的,但業(yè)務(wù)指標(biāo)的維度數(shù)目是相對(duì)可控的,我們是否可以按維度數(shù)目創(chuàng)建 指標(biāo)表 ,畢竟絕大多數(shù)數(shù)據(jù)可視化組件最多支持三維。

比如:

  • 維度數(shù)目為 0 的指標(biāo)表
  • 維度數(shù)目為 1 的指標(biāo)表
  • 維度數(shù)目為 2 的指標(biāo)表
  • ...

假設(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)識(shí)指標(biāo);d1 、d2 和 d3 分別表示維度1、維度2 和 維度3。

一張數(shù)據(jù)表中可以存儲(chǔ)多個(gè)相同維度數(shù)目指標(biāo)的數(shù)據(jù),如:m1、m2 和 m3。存儲(chǔ)指標(biāo)數(shù)據(jù)時(shí),只要按指標(biāo)的維度數(shù)目,將指標(biāo)數(shù)據(jù)存儲(chǔ)到相應(yīng)維度數(shù)目的指標(biāo)表中即可。指標(biāo)表可以根據(jù)業(yè)務(wù)可能的最大維度數(shù)目預(yù)先創(chuàng)建,業(yè)務(wù)維度數(shù)目需要擴(kuò)展時(shí),僅需要新增有限的幾張?zhí)囟ňS度數(shù)目的指標(biāo)表即可。

還不夠!

指標(biāo)有維度的情況下,指標(biāo)表僅支持按指標(biāo)維度次序,依次存儲(chǔ)和查詢維度1、維度2、... 的維度數(shù)據(jù),并不知道具體的維度名稱是什么。

考慮到業(yè)務(wù)希望指標(biāo)發(fā)生變化時(shí),歷史數(shù)據(jù)可追溯,同一個(gè)指標(biāo)需要有多個(gè)版本。

也就是說(shuō),我們需要知道:

  • 指標(biāo)的版本有哪些
  • 指標(biāo)的某個(gè)版本有哪些維度,維度名稱是什么
  • 指標(biāo)的某個(gè)版本有哪些數(shù)據(jù)

我們可以:

  • 創(chuàng)建一張版本表,存儲(chǔ)指標(biāo)有哪些版本
  • 創(chuàng)建一張維度表,存儲(chǔ)指標(biāo)的某個(gè)版本有哪些維度(名稱)
  • 根據(jù)維度數(shù)目創(chuàng)建若干張指標(biāo)表,存儲(chǔ)指標(biāo)的某個(gè)版本的指標(biāo)數(shù)據(jù)

可行!

存儲(chǔ)方案

版本表

id

version

m1

1

m2

1

m1

3

id 表示指標(biāo) ID,version 表示版本號(hào)。

版本表存儲(chǔ)著指標(biāo)和版本的對(duì)應(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 表示版本號(hào),name 表示維度名稱。

維度表存儲(chǔ)著指標(biāo)/版本和維度名稱的對(duì)應(yīng)關(guān)系,可以按指標(biāo) ID 和指標(biāo)版本查詢維度名稱列表,多個(gè)維度名稱的順序按維度名稱存儲(chǔ)順序依次排列。

指標(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)表存儲(chǔ)著指標(biāo)數(shù)據(jù)。注意,維度1、維度2 和 維度 N 的表現(xiàn)形式。

存儲(chǔ)指標(biāo)數(shù)據(jù)

新增指標(biāo)時(shí),使用 Unix 時(shí)間戳作為版本號(hào),存儲(chǔ)指標(biāo) ID 和 版本至版本表;如果指標(biāo)有維度,存儲(chǔ)指標(biāo)ID、版本號(hào) 和維度名稱至維度表,如果維度有多個(gè),需要按照維度排列順序依次存儲(chǔ)多條記錄。

修改指標(biāo)時(shí),如果修改后的指標(biāo)維度名稱列表和維度表中該指標(biāo)最新版本的維度名稱列表數(shù)目或內(nèi)容不一致,需要和新增指標(biāo)一樣,存儲(chǔ)該指標(biāo)新的版本號(hào)和維度名稱列表。

存儲(chǔ)指標(biāo)數(shù)據(jù)時(shí),獲取維度表中該指標(biāo)最新版本的維度名稱列表,即可知指標(biāo)維度數(shù)目;根據(jù)維度數(shù)目選取指標(biāo)表,將指標(biāo)數(shù)據(jù)存儲(chǔ)至該指標(biāo)表,維度名稱需按順序依次存儲(chǔ)至維度1、維度2、...。

查詢指標(biāo)數(shù)據(jù)

  1. 根據(jù)指標(biāo) ID 查詢版本表,獲取該指標(biāo)的最新版本號(hào),或者直接指定某個(gè)版本號(hào);
  2. 根據(jù)指標(biāo) ID 和版本號(hào),查詢維度表,獲取該指標(biāo)的維度名稱列表和維度數(shù)目;
  3. 根據(jù)指標(biāo)的維度數(shù)目,選取指標(biāo)表;
  4. 根據(jù)指標(biāo) ID 和版本號(hào),查詢指標(biāo)表,獲取該指標(biāo)的數(shù)據(jù);也可以使用時(shí)間或維度過(guò)濾指標(biāo)數(shù)據(jù)。
  5. 使用 2 中獲取指標(biāo)的維度名稱,替換 4 中獲取的指標(biāo)數(shù)據(jù)中的維度1(d1)、維度2(d2) 、...。
責(zé)任編輯:張燕妮 來(lái)源: 博客園
相關(guān)推薦

2022-09-05 09:32:07

數(shù)據(jù)庫(kù)存儲(chǔ)

2017-09-03 15:41:31

數(shù)據(jù)庫(kù)存儲(chǔ)分布式

2018-07-18 09:16:39

關(guān)系型非關(guān)系型數(shù)據(jù)庫(kù)

2010-06-17 11:08:07

SQL Server

2011-02-25 17:47:44

數(shù)據(jù)庫(kù)存儲(chǔ)編寫

2021-09-06 10:24:12

鴻蒙HarmonyOS應(yīng)用

2024-06-03 08:29:20

2023-01-18 08:25:23

數(shù)據(jù)庫(kù)存儲(chǔ)類型

2011-03-01 11:21:11

MySQL數(shù)據(jù)庫(kù)存儲(chǔ)引擎

2010-12-10 10:17:21

關(guān)系型數(shù)據(jù)庫(kù)

2022-06-13 08:30:01

數(shù)據(jù)庫(kù)管理系統(tǒng)

2017-03-17 14:44:04

關(guān)系型數(shù)據(jù)庫(kù)原理

2018-05-14 10:56:36

MySQL數(shù)據(jù)庫(kù)存儲(chǔ)

2011-03-02 12:57:08

MySQL存儲(chǔ)引擎分支現(xiàn)狀

2018-03-26 12:58:52

數(shù)據(jù)庫(kù)OracleMySQL

2010-05-14 17:44:47

MySQL數(shù)據(jù)庫(kù)

2022-12-27 08:38:45

關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)

2016-08-23 14:25:19

MySQL約束數(shù)據(jù)庫(kù)

2021-01-26 13:31:48

數(shù)據(jù)庫(kù)關(guān)系型數(shù)據(jù)庫(kù)冗余

2023-05-20 08:11:55

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)