维度建模的三种模式
1.星型模式
星型模式是維度模型中最簡(jiǎn)單的形式,也是數(shù)據(jù)倉(cāng)庫(kù)以及數(shù)據(jù)集市開(kāi)發(fā)中使用最廣泛的形式。
? ? ? ?星型模式由事實(shí)表和維度表組成,一個(gè)星型模式中可以有一個(gè)或多個(gè)事實(shí)表,每個(gè)事實(shí)表引用任意數(shù)量的維度表。
? ? ? ?星型模式的物理模型像一顆星星的形狀,中心是一個(gè)事實(shí)表, 圍繞在事實(shí)表周?chē)木S度表表示星星的放射狀分支,這就是星型模式這個(gè)名字的由來(lái)。
? ? ? ?星型模式將業(yè)務(wù)流程分為事實(shí)和維度。事實(shí)包含業(yè)務(wù)的度量,是定量的數(shù)據(jù),如銷(xiāo)售價(jià)格、銷(xiāo)售數(shù)量、距離、速度、重量等是事實(shí)。維度是對(duì)事實(shí)數(shù)據(jù)屬性的描述,如日期、產(chǎn)品、客戶(hù)、地理位置等是維度。一個(gè)含有很多維度表的星型模式有時(shí)被稱(chēng)為蜈蚣模式,顯然這個(gè)名字也是因其形狀而得來(lái)的。蜈蚣模式的維度往往只有很少的幾個(gè)屬性,這樣可以簡(jiǎn)化對(duì)維度表的維護(hù),但查詢(xún)數(shù)據(jù)時(shí)會(huì)有更多的表連接,嚴(yán)重時(shí)會(huì)使模型難于使用,因此在設(shè)計(jì)中應(yīng)該盡量避免蜈蚣模式。
2.雪花模式
雪花模式是一種多維模型中表的邏輯布局,其實(shí)體關(guān)系圖有類(lèi)似于雪花的形狀,因此得名。
? ? ? 與星型模式相同,雪花模式也是由事實(shí)表和維度表所組成。所謂的“雪花化”就是將行星模型中的維度表進(jìn)行規(guī)范化處理。當(dāng)所有的維度表完成規(guī)范化后,就形成了以事實(shí)表為中心的雪花型結(jié)構(gòu),即雪花模式。將維度表進(jìn)行規(guī)范化的具體做法是,把低基數(shù)的屬性從維度表中移除并形成單獨(dú)的表。基數(shù)指的是一個(gè)字段中不同值的個(gè)數(shù),如主鍵列具有唯一值, 所以有最高的基數(shù),而像性別這樣的列基數(shù)就很低。
? ? ? 在雪花模式中,一個(gè)維度被規(guī)范化成多個(gè)關(guān)聯(lián)的表,而在星型模式中,每個(gè)維度由一個(gè)單一的維度表所表示。一個(gè)規(guī)范化的維度對(duì)應(yīng)一組具有層次關(guān)系的維度表,而事實(shí)表作為雪花模式里的字表,存在具有層次關(guān)系的多個(gè)父表。
3.星座模式
? ? ? ?數(shù)據(jù)倉(cāng)庫(kù)由多個(gè)主題構(gòu)成,包含多個(gè)事實(shí)表,而維表是公共的,可以共享,這種模式可以看做星型模式的匯集,因而稱(chēng)作星系模式或者事實(shí)星座模式。
???????4.模型的選擇
在數(shù)據(jù)倉(cāng)庫(kù)建模時(shí),會(huì)涉及到模式的選擇,我們要根據(jù)不同模式的特點(diǎn)選擇適合具體業(yè)務(wù)的模式:
冗余:雪花模型符合業(yè)務(wù)邏輯設(shè)計(jì),采用 3NF 設(shè)計(jì),有效降低數(shù)據(jù)冗余;星型模型的維度表設(shè)計(jì)不符合 3NF(如果是雪花模型改造成了星型模型,那么肯定不符合 3NF,因?yàn)橐欢òl(fā)生了表的整合,即降維,一定有傳遞依賴(lài),但是,并不是所有的星型模型都不符合
3NF,很多星型模型的表是符合 3NF 的),反規(guī)范化,維度表之間不會(huì)直接相關(guān),犧牲部分存儲(chǔ)空間。(雪花模型的維度之間是有關(guān)聯(lián)的)
性能:雪花模型由于存在維度間的關(guān)聯(lián),采用 3NF 降低冗余,通常在使用過(guò)程中,需要連接更多的維度表,導(dǎo)致性能偏低;星型模型反三范式,采用降維的操作將維度整合,以存儲(chǔ)空間為代價(jià)有效降低維度表連接數(shù),性能較雪花模型高。( 星型表的數(shù)據(jù)冗余大,是用存儲(chǔ)空間換取效率 )( BI 的一些工具對(duì)于星型模型的支持更規(guī)范化 )
ETL:雪花模型符合業(yè)務(wù) ER 模型設(shè)計(jì)原則,在 ETL 過(guò)程中相對(duì)簡(jiǎn)單,但是由于附屬模型的限制,ETL 任務(wù)并行化較低(由于雪花模型中有很多的維度依賴(lài),在 ETL 的時(shí)候, 需要在保持 3NF 的前提下對(duì)數(shù)據(jù)進(jìn)行清洗,即對(duì)數(shù)據(jù)一致性/規(guī)范化的處理,例如數(shù)據(jù)來(lái)自于多個(gè)業(yè)務(wù)系統(tǒng),各個(gè)系統(tǒng)對(duì)于用戶(hù)的定義不一致,此時(shí)要對(duì)每個(gè)業(yè)務(wù)定義的用戶(hù)數(shù)據(jù)進(jìn)行規(guī)范化處理,在 3NF 的限制下必然會(huì)降低并行度);星型模型在設(shè)計(jì)維度表時(shí)反范式設(shè)計(jì),所以在 ETL 過(guò)程中整合業(yè)務(wù)數(shù)據(jù)到維度表有一定難度,但由于避免附屬維度,可并行化處理(不用關(guān)注太多的關(guān)聯(lián)關(guān)系,避免了維度表之間的關(guān)聯(lián)關(guān)系,并行度較高,注意,一般場(chǎng)景下星型模型的并行化程度更高,并不是所有場(chǎng)景)。
Hive 的分析通過(guò) MapReduce 實(shí)現(xiàn),每多一個(gè) Join 就會(huì)多出一個(gè) MapReduce 過(guò)程,對(duì)于雪花模型,由于存在著很多維度表之間的關(guān)聯(lián),這就會(huì)導(dǎo)致一次分析對(duì)應(yīng)多個(gè) MapReduce 任務(wù),而星型模型由于不存在維度表的關(guān)聯(lián),因此一個(gè) MapReduce 就可以實(shí)現(xiàn)分析任務(wù)。
MapReduce 本身是一個(gè)支持高吞吐量的任務(wù),它的每個(gè)任務(wù)都要申請(qǐng)資源、分配容器、節(jié)點(diǎn)通信等待,需要 YARN 的調(diào)度,由于相互關(guān)聯(lián)的維度表本身會(huì)很小,join 操作用時(shí)很少,
YARN 調(diào)度的時(shí)長(zhǎng)可能都大于實(shí)際運(yùn)算的時(shí)長(zhǎng),因此我們要盡可能減少任務(wù)個(gè)數(shù),對(duì)于 Hive 來(lái)說(shuō)就是盡可能減少不必要的表的關(guān)聯(lián)。還有一點(diǎn),雪花模型中拆分出的維度表,每個(gè)表對(duì)應(yīng)至少一個(gè)文件,這就涉及到 I/O 方面的性能損耗。
因此,我們要采用適當(dāng)?shù)臄?shù)據(jù)冗余,避免不必要的表之間的關(guān)聯(lián)。
在實(shí)際項(xiàng)目中,不會(huì)刻意地去考慮雪花模型,而是刻意地去考慮星型模型,特別是大數(shù)據(jù)領(lǐng)域的建模,傾斜于使用數(shù)據(jù)冗余來(lái)提高查詢(xún)效率,傾向于星型模型;雪花模型只會(huì)應(yīng)用在一些我們要求模型的靈活性,要求保證模型本身穩(wěn)定性的場(chǎng)景下,但是雪花模型并不是首選。
?
?
總結(jié)
- 上一篇: Visio 画甘特图
- 下一篇: OpenPLC--可编程控制器的发展趋势