何為建模?
數(shù)據(jù)幾乎總是用于兩種目的:操作型記錄的保存和分析型決策的制定。簡單來說,操作型系統(tǒng)保存數(shù)據(jù),分型型系統(tǒng)使用數(shù)據(jù)。前者一般僅反映數(shù)據(jù)的最新狀態(tài),按單條記錄事務(wù)性來處理;其優(yōu)化的核心是更快地處理事務(wù)。后者往往是反映數(shù)據(jù)一段時間的狀態(tài)變化,按大批量方式處理數(shù)據(jù);其核心是高性能、多維度處理數(shù)據(jù)。通常我們將操作型系統(tǒng)簡稱為OLTP(On-Line Transaction Processing)— 聯(lián)機(jī)事務(wù)處理,將分析型系統(tǒng)簡稱為OLAP(On-Line Analytical Processing)— 聯(lián)機(jī)分析處理。
針對這兩種不同的數(shù)據(jù)用途,如何組織數(shù)據(jù),更好地滿足數(shù)據(jù)使用需求。這里就涉及到數(shù)據(jù)建模問題。即設(shè)計一種數(shù)據(jù)組織方式(模型),來滿足不同場景。在OLTP場景中,常用的是使用實(shí)體關(guān)系模型(ER)來存儲,從而在事務(wù)處理中解決數(shù)據(jù)的冗余和一致性問題。在OLAP場景中,有多種建模方式有:ER模型、星型模型和多維模型。下面分別說明下:
-
ER模型OLAP中的ER模型,與OLTP中的有所區(qū)別。其本質(zhì)差異是站在企業(yè)角度面向主題的抽象,而不是針對某個具體業(yè)務(wù)流程的實(shí)體對象關(guān)系的抽象。
-
星型模型星型模型,是維度模型在關(guān)系型數(shù)據(jù)庫上的一種實(shí)現(xiàn)。該模型表示每個業(yè)務(wù)過程包含事實(shí)表,事實(shí)表存儲事件的數(shù)值化度量,圍繞事實(shí)表的多個維度表,維度表包含事件發(fā)生時實(shí)際存在的文本環(huán)境。這種類似于星狀的結(jié)構(gòu)通常稱為"星型連接"。其重點(diǎn)關(guān)注用戶如何更快速地完成需求分析,同時具有較好的大規(guī)模復(fù)雜查詢的響應(yīng)性能。在星型模型基礎(chǔ)上,在復(fù)雜場景下還可以進(jìn)一步衍生出雪花模型。
-
多維模型多維模型,是維度模型的另一種實(shí)現(xiàn)。當(dāng)數(shù)據(jù)被加載到OLAP多維數(shù)據(jù)庫時,對這些數(shù)據(jù)的存儲的索引,采用了為維度數(shù)據(jù)涉及的格式和技術(shù)。性能聚集或預(yù)計算匯總表通常由多維數(shù)據(jù)庫引擎建立并管理。由于采用預(yù)計算、索引策略和其他優(yōu)化方法,多維數(shù)據(jù)庫可實(shí)現(xiàn)高性能查詢。
在這三種方式中,星型模型使用較多,下面也著重對這種方式進(jìn)行說明。
二
維度建模
2.1
基本概念
在建模過程中,涉及到很多概念。下面通過一個場景來,來說明它們。例如:常見的電商下單環(huán)節(jié),每個用戶提交一筆訂單(僅限一個物品),就對應(yīng)于一條訂單記錄。
【業(yè)務(wù)過程】:下訂單
【粒度】:每筆訂單(拆分為單個物品)
【維度】:地域、年齡、渠道等(可供分析的角度)
【事實(shí)/度量】:訂單金額等(可用于分析的數(shù)據(jù))
2.2
建模步驟
-
收集業(yè)務(wù)需求與數(shù)據(jù)實(shí)現(xiàn)
在開始維度建模工作之前,需要理解業(yè)務(wù)需求,以及作為底層源數(shù)據(jù)的實(shí)際情況。通過與業(yè)務(wù)方溝通交流、查看現(xiàn)有報表等來發(fā)現(xiàn)需求,用于理解他們的基于關(guān)鍵性能指標(biāo)、競爭性商業(yè)問題、決策制定過程、支持分析需求的目標(biāo)。同時,數(shù)據(jù)實(shí)際情況可通過與數(shù)據(jù)庫系統(tǒng)專家交流,了解訪問數(shù)據(jù)可行性等。
-
選擇業(yè)務(wù)過程
業(yè)務(wù)過程是組織完成的操作型活動。業(yè)務(wù)過程時間建立或獲取性能度量,并轉(zhuǎn)換為事實(shí)表中的事實(shí)。多數(shù)事實(shí)表關(guān)注某一業(yè)務(wù)過程的結(jié)果。過程的選擇非常重要的,因?yàn)檫^程定義了特定的設(shè)計目標(biāo)以及對粒度、維度、事實(shí)的定義。
-
聲明粒度
聲明粒度是維度設(shè)計的重要步驟。粒度用于確定某一事實(shí)表中的行表示什么。在選擇維度或事實(shí)前必須聲明粒度,因?yàn)槊總€候選維度或事實(shí)必須與定義的粒度保持一致。在從給定的業(yè)務(wù)過程獲取數(shù)據(jù)時,原子粒度是最低級別的粒度。強(qiáng)烈建議從關(guān)注原子級別粒度數(shù)據(jù)開始設(shè)計,因?yàn)樵恿6葦?shù)據(jù)能夠承受無法預(yù)期的用戶查詢。
-
確認(rèn)維度(描述環(huán)境)
維度提供圍繞某一業(yè)務(wù)過程事件所涉及的"誰、什么、何處、何時、為什么、如何"等背景。維度表包含分析應(yīng)用所需要的用于過濾及分類事實(shí)的描述性屬性。牢牢掌握事實(shí)表的粒度,就能夠?qū)⑺锌赡艽嬖诘木S度區(qū)分開來。
-
確認(rèn)事實(shí)(用于度量)
事實(shí),涉及來自業(yè)務(wù)過程事件的度量,基本上都是以數(shù)據(jù)值表示。一個事實(shí)表行與按照事實(shí)表粒度描述的度量事件之間存在一對一關(guān)系,因此事實(shí)表對應(yīng)一個物理可觀察的事件。在事實(shí)表內(nèi),所有事實(shí)只允許與聲明的粒度保持一致。
-
部署方式 - 星型模型或多維模型
選擇一種維度模型的落地方式。既可以選擇星型模型,部署在關(guān)系數(shù)據(jù)庫上,通過事實(shí)表及通過主外鍵關(guān)聯(lián)的維度表;也可以選擇多維模型,落地于多維數(shù)據(jù)庫中。
2.3
建模規(guī)范
以維度建模為理論基礎(chǔ),定義一系列術(shù)語來描述建模對象。下圖摘自于《阿里巴巴大數(shù)據(jù)實(shí)踐之路》。

-
數(shù)據(jù)域
指面向業(yè)務(wù)分析,將業(yè)務(wù)過程或者維度進(jìn)行抽象的集合。在劃分?jǐn)?shù)據(jù)域時,既能涵蓋當(dāng)前所有的業(yè)務(wù)需求,又能在新業(yè)務(wù)進(jìn)入時無影響地被包含進(jìn)已有的數(shù)據(jù)域中和擴(kuò)展新的數(shù)據(jù)域。
-
業(yè)務(wù)過程
指企業(yè)的業(yè)務(wù)活動事件,如下單、支付、退款都是業(yè)務(wù)過程。請注意,業(yè)務(wù)過程是一個不可拆分的行為事件,通俗地講,業(yè)務(wù)過程就是企業(yè)活動中的事件。
-
時間周期
用來明確數(shù)據(jù)統(tǒng)計的時間范圍或者時間點(diǎn),如最近30天、自然周、截至當(dāng)日等。
-
修飾類型
是對修飾詞的一種抽象劃分,是從屬于某個業(yè)務(wù)域的。
-
修飾詞
指除了統(tǒng)計維度以外指標(biāo)的業(yè)務(wù)場景限定抽象。修飾詞隸屬于一種修飾類型。
-
度量/原子指標(biāo)
原子指標(biāo)和度量含義相同,基于某一業(yè)務(wù)事件行為下的度量,是業(yè)務(wù)定義中不可再拆分的指標(biāo),具有明確業(yè)務(wù)含義的名詞,如支付金額。
-
維度
維度是度量的環(huán)境,用來反映業(yè)務(wù)的一類屬性,這類屬性的集合構(gòu)成一個維度,也可以稱為實(shí)體對象。維度屬于一個數(shù)據(jù)域,如地理維度(其中包擠國家、地區(qū)、省以及城市等級別的內(nèi)容)、時間維度(其中包括年、季、月、周、日等級別的內(nèi)容)。
-
維度屬性
維度屬性隸屬于一個維度,如地理維度里面的國家名稱、國家ID、省份名稱等都屬于維度屬性。
-
派生指標(biāo)
派生指標(biāo)=一個原子指標(biāo)+多個修飾詞(可選)+時間周期。可以理解為對原子指標(biāo)業(yè)務(wù)統(tǒng)計范圍的圈定。
三
設(shè)計要點(diǎn)
3.1
維度表設(shè)計
維度是維度建模的基礎(chǔ)和靈魂。在維度建模中,將度量稱為"事實(shí)",將環(huán)境描述為"維度",維度是用于分析事實(shí)所需要的多樣環(huán)境。維度所包含的表示維度的列,稱為維度屬性。維度屬性是查詢約束條件、分組和報表標(biāo)簽生成的基本來源,是數(shù)據(jù)易用性的關(guān)鍵。維度的作用一般是查詢約束、分類匯總以及排序等。維度的設(shè)計過程就是確定維度屬性的過程,如何生成維度屬性,以及所生成的維度屬性的優(yōu)劣,決定了維度使用的方便性,成為數(shù)據(jù)倉庫易用性的關(guān)鍵。正如Kimball所說的,數(shù)據(jù)倉庫的能力直接與維度屬性的質(zhì)量和深度成正比。
在整個設(shè)計過程中,應(yīng)當(dāng)遵循下面一些原則:
-
維度屬性盡量豐富,為數(shù)據(jù)使用打下基礎(chǔ)。
-
給出詳實(shí)的、富有意義的文字描述。
-
沉淀通用維度屬性,為建立一致性維度做好鋪墊。
-
嚴(yán)格區(qū)分事實(shí)與維度,通過使用場景進(jìn)行區(qū)分。
3.2
事實(shí)表設(shè)計
事實(shí)表作為數(shù)據(jù)倉庫維度建模的核心,緊緊圍繞著業(yè)務(wù)過程來設(shè)計,通過獲取描述業(yè)務(wù)過程的度量來表達(dá)業(yè)務(wù)過程,包含了引用的維度和與業(yè)務(wù)過程有關(guān)的度量。在設(shè)計過程中,可以選擇不同類型的事實(shí)表,它們有各自的適用場景。

在整個設(shè)計過程中,應(yīng)當(dāng)遵循下面一些原則:
-
選擇一種適合的事實(shí)表類型。
-
事實(shí)盡可能完整,包含整個業(yè)務(wù)過程的全部事實(shí)。
-
確保每一個事實(shí)度量都是一致性,反復(fù)計算都會得到相同的結(jié)果。盡量記錄一些“原子”事實(shí),而不是加工后的結(jié)果。
-
可適當(dāng)做些”維度退化屬性”,提高事實(shí)表的查詢性能。
-
為提高聚合性能,可適度做些上卷匯聚事實(shí)表。