1基本概念
維度模型的概念出自于數(shù)據(jù)倉庫領(lǐng)域,是數(shù)據(jù)倉庫建設(shè)中的一種數(shù)據(jù)建模方法。維度模型主要由事實(shí)表和維度表這兩個基本要素構(gòu)成。
1.1維度
維度是度量的環(huán)境,用來反映業(yè)務(wù)的一類屬性 , 這類屬性的集合構(gòu)成一個維度 , 也可以稱為實(shí)體對象。 維度屬于一個數(shù)據(jù)域,如地理維度(其中包括國家、地區(qū)、 省以及城市等級別的內(nèi)容)、時間維度(其中包括年、季、月、周、日等級別的內(nèi)容)。
維度是維度建模的基礎(chǔ)和靈魂。在維度建模中,將度量稱為“事實(shí)” , 將環(huán)境描述為“維度”,維度是用于分析事實(shí)所需要的多樣環(huán)境。例如, 在分析交易過程時,可以通過買家、賣家、商品和時間等維度描述交易發(fā)生的環(huán)境。
維度所包含的表示維度的列,稱為維度屬性。維度屬性是查詢約束條件、分組和報(bào)表標(biāo)簽生成的基本來源,是數(shù)據(jù)易用性的關(guān)鍵。
1.2事實(shí)表
事實(shí)表是維度模型的基本表,每個數(shù)據(jù)倉庫都包含一個或者多個事實(shí)數(shù)據(jù)表。事實(shí)數(shù)據(jù)表可能包含業(yè)務(wù)銷售數(shù)據(jù),如銷售商品所產(chǎn)生的數(shù)據(jù),與軟件中實(shí)際表概念一樣。
事實(shí)表作為數(shù)據(jù)倉庫維度建模的核心,緊緊圍繞著業(yè)務(wù)過程來設(shè)計(jì),通過獲取描述業(yè)務(wù)過程的度量來表達(dá)業(yè)務(wù)過程,包含了引用的維度和與業(yè)務(wù)過程有關(guān)的度量。
事實(shí)表中一條記錄所表達(dá)的業(yè)務(wù)細(xì)節(jié)程度被稱為粒度。通常粒度可以通過兩種方式來表述:一種是維度屬性組合所表示的細(xì)節(jié)程度:一種是所表示的具體業(yè)務(wù)含義。
作為度量業(yè)務(wù)過程的事實(shí),一般為整型或浮點(diǎn)型的十進(jìn)制數(shù)值,有可加性、半可加性和不可加性三種類型。
相對維度來說,通常事實(shí)表要細(xì)長,行的增加速度也比維度表快的多,維度表正好相反。
事實(shí)表有三種類型 :
事務(wù)事實(shí)表:事務(wù)事實(shí)表用來描述業(yè)務(wù)過程,眼蹤空間或時間上某點(diǎn)的度量事件,保存的是最原子的數(shù)據(jù),也稱為“原子事實(shí)表\周期快照事實(shí)表”。
周期快照事實(shí)表:周期快照事實(shí)表以具有規(guī)律性的、可預(yù)見的時間間隔記錄事實(shí) ,時間間隔如每天、每月、每年等。
累積快照事實(shí)表:累積快照事實(shí)表用來表述過程開始和結(jié)束之間的關(guān)鍵步驟事件,覆蓋過程的整個生命周期,通常具有多個日期字段來記錄關(guān)鍵時間點(diǎn),當(dāng)過程隨著生命周期不斷變化時,記錄也會隨著過程的變化而被修改。
1.3度量 / 原子指標(biāo)
原子指標(biāo)和度量含義相同,基于某一業(yè)務(wù)事件行為下的度量,是業(yè)務(wù)定義中不可 再拆分的指標(biāo),具有明確業(yè)務(wù)含義的名詞 ,如支付金額。
事實(shí)表和維度交叉匯聚的點(diǎn),度量和維度構(gòu)成OLAP的主要概念,這里面對于在事實(shí)表或者一個多維立方體里面存放的數(shù)值型的、連續(xù)的字段,就是度量。
1.4維度表與事實(shí)表
維度表是事實(shí)表不可分割的部分。維度表是進(jìn)入事實(shí)表的入口。豐富的維度屬性給出了豐富的分析切割能力。維度給用戶提供了使用數(shù)據(jù)倉庫的接口。最好的屬性是文本的和離散的。屬性應(yīng)該是真正的文字而不應(yīng)是一些編碼簡寫符號。應(yīng)該通過用更為詳細(xì)的文本屬性取代編碼,力求最大限度地減少編碼在維度表中的使用。
維度表和事實(shí)表二者的融合也就是“維度模型”,“維度模型”一般采用“星型模式”或者“雪花模式”,“雪花模式”可以看作是“星型模式”的拓展,表現(xiàn)為在維度表中,某個維度屬性可能還存在更細(xì)粒度的屬性描述,即維度表的層級關(guān)系。
維度屬性也可以存儲到事實(shí)表中,這種存儲到事實(shí)表中的維度列被稱為“退化維度”。與其他存儲在維表中的維度一樣 ,退化維度也可以用來進(jìn)行事實(shí)表的過濾查詢、實(shí)現(xiàn)聚合操作等。
1.5維度與指標(biāo)例子
下表顯示的是一個維度(“城市”)和兩個指標(biāo)(“會話數(shù)”和“每次會話瀏覽頁數(shù)”)。
維度指標(biāo)指標(biāo)城市會話數(shù)每次會話瀏覽頁數(shù)舊金山5,0003.74柏林4,0004.55
2 維度設(shè)計(jì)
2.1維度基本設(shè)計(jì)方法
2.2維度的特點(diǎn)
2.2.1維度的層次結(jié)構(gòu)
維度中的一些描述屬性以層次方式或一對多的方式相互關(guān)聯(lián),可以被理解為包含連續(xù)主從關(guān)系的屬性層次。比如商品類目的最低級別是葉子類目,葉子類目屬于二級類目,二級類目屬于一級類目。在屬性的層次結(jié)構(gòu)中進(jìn)行鉆取是數(shù)據(jù)鉆取的方法之一。
2.2.2范式與反范式
當(dāng)屬性層次被實(shí)例化為一系列維度,而不是單一的維度時,被稱為雪花模式。
大多數(shù)聯(lián)機(jī)事務(wù)處理系統(tǒng)( OLTP)的底層數(shù)據(jù)結(jié)構(gòu)在設(shè)計(jì)時采用此種規(guī)范化技術(shù),通過規(guī)范化處理將重復(fù)屬性移至其自身所屬的表中,刪除冗余數(shù)據(jù)。
將維度的屬性層次合并到單個維度中的操作稱為反規(guī)范化。分析系 統(tǒng)的主要目的是用于數(shù)據(jù)分析和統(tǒng)計(jì),如何更方便用戶進(jìn)行統(tǒng)計(jì)分析決 定了分析系統(tǒng)的優(yōu)劣。采用雪花模式,用戶在統(tǒng)計(jì)分析的過程中需要 大 量的關(guān)聯(lián)操作,使用復(fù)雜度高,同時查詢性能很差;而采用反規(guī)范化處 理,則方便、易用且性能好。
2.3交叉探查
數(shù)據(jù)倉庫總線架構(gòu)的重要基石之一就是一致性維度。在針對不同數(shù) 據(jù)域進(jìn)行迭代構(gòu)建或并行構(gòu)建時,存在很多需求是對于不同數(shù)據(jù)域的業(yè) 務(wù)過程或者同 一數(shù)據(jù)域的不同業(yè)務(wù)過程合并在 一起觀察。比如對于日志數(shù)據(jù)域,統(tǒng)計(jì)了商品維度的最近一天的 PV 和 UV; 對于交易數(shù)據(jù)域, 統(tǒng)計(jì)了商品維度的最近一天的下單MV?,F(xiàn)在將不同數(shù)據(jù)域的商品的 事實(shí)合并在一起進(jìn)行數(shù)據(jù)探查 ,如計(jì)算轉(zhuǎn)化率等,稱為交叉探查。
2.4維度整合
我們先來看數(shù)據(jù)倉庫的定義:數(shù)據(jù)倉庫是一個面向主題的、集成的、 非易失的且隨時間變化的數(shù)據(jù)集合,用來支持管理人員的決策。
數(shù)據(jù)由面向應(yīng)用的操作型環(huán)境進(jìn)人數(shù)據(jù)倉庫后,需要進(jìn)行數(shù)據(jù) 集成。將面向應(yīng)用的數(shù)據(jù)轉(zhuǎn)換為面向主題的數(shù)據(jù)倉庫數(shù)據(jù),本身就是一種集成。
具體體現(xiàn)在如下幾個方面:
命名規(guī)范的統(tǒng)一。
字段類型的統(tǒng)一。
公共代碼及代碼值的統(tǒng)一。
業(yè)務(wù)含義相同的表的統(tǒng)一 。主要依據(jù)高內(nèi)聚、低稠合的理念,在物理實(shí)現(xiàn)中,將業(yè)務(wù)關(guān)系大、源系統(tǒng)影響差異小的表進(jìn)行整合。
表級別的整合,有兩種表現(xiàn)形式。
垂直整合,即不同的來源表包含相同的數(shù)據(jù)集,只是存儲的信息不同。比如商品基礎(chǔ)信息表、 商品擴(kuò)展信息表、商品庫存信息表,這些表都屬于商品相關(guān)信息表,依據(jù)維度設(shè)計(jì)方法,盡量整合至商品維度模型中,豐富其維度屬性。
水平整合,即不同的來源表包含不同的數(shù)據(jù)集,不同子集之間無交叉,也可以存在部分交叉。如果進(jìn)行整合,首先需要考慮各個體系是否有交叉,如果存在交叉,則需要去重;如果不存在交叉,則需要考慮不同子集的自然鍵是否存在沖突,如果不沖突, 則可以考慮將各子集的自然鍵作為整合后的表的自然鍵;另一種方式是設(shè)置超自然鍵,將來源表各子集的自然鍵加工成一個字段作為超自然鍵。
2.5維度拆分
水平拆分
維度通??梢园凑疹悇e或類型進(jìn)行細(xì)分。由于維度分類的不同而存在特殊的維度屬性,可以通過水平拆分的方式解決此問題。
在設(shè)計(jì)過程中需要重點(diǎn)考慮以下三個原則。
擴(kuò)展性:當(dāng)源系統(tǒng)、業(yè)務(wù)邏輯變化時,能通過較少的成本快速擴(kuò) 展模型,保持核心模型的相對穩(wěn)定性。軟件工程中的高內(nèi)聚、低 稠合的思想是重要的指導(dǎo)方針之 一 。
效能 : 在性能和成本方面取得平衡。通過犧牲一定的存儲成本, 達(dá)到性能和邏輯的優(yōu)化。
易用性:模型可理解性高、訪問復(fù)雜度低。用戶能夠方便地從模 型中找到對應(yīng)的數(shù)據(jù)表,并能夠方便地查詢和分析。
根據(jù)數(shù)據(jù)模型設(shè)計(jì)思想,在對維度進(jìn)行水平拆分時,主要考慮如下兩個依據(jù)。
維度的不同分類的屬性差異情況
業(yè)務(wù)的關(guān)聯(lián)程度
垂直拆分
在維度設(shè)計(jì)內(nèi)容中,我們提到維度是維度建模的基礎(chǔ)和靈魂,維度 屬性的豐富程度直接決定了數(shù)據(jù)倉庫的能力。在進(jìn)行維度設(shè)計(jì)時,依據(jù) 維度設(shè)計(jì)的原則,盡可能豐富維度屬性,同時進(jìn)行反規(guī)范化處理。
某些維度屬性的來源表產(chǎn)出時間較早,而某些維度屬性的來 源 表產(chǎn)出時間較晚;或者某些維度屬性的熱度高、使用頻繁,而某些維度屬性的熱度低、較少使用 ; 或者某些維度屬性經(jīng)常變化,而某些維度屬性比較穩(wěn)定。在“水平拆分”中提到的模型設(shè)計(jì)的三個原則同樣適合解決此問題。
出于擴(kuò)展性、產(chǎn)出時間、易用性等方面的考慮,設(shè)計(jì) 主從維度。主 維表存放穩(wěn)定 、 產(chǎn)出時間早、熱度高的屬性;從維表存放變化較快、產(chǎn) 出時間晚、熱度低的屬性。