維度模型的概念出自於數據倉庫領域,是數據倉庫建設中的一種數據建模方法。維度模型主要由事實表和維度表這兩個基本要素構成。數據庫
維度是度量的環境,用來反映業務的一類屬性 , 這類屬性的集合構成一個維度 , 也能夠稱爲實體對象。 維度屬於一個數據域,如地理維度(其中包括國家、地區、 省以及城市等級別的內容)、時間維度(其中包括年、季、月、周、日等級別的內容)。數據結構
維度是維度建模的基礎和靈魂。在維度建模中,將度量稱爲「事實」 , 將環境描述爲「維度」,維度是用於分析事實所須要的多樣環境。例如, 在分析交易過程時,能夠經過買家、賣家、商品和時間等維度描述交易發生的環境。架構
維度所包含的表示維度的列,稱爲維度屬性。維度屬性是查詢約束條件、分組和報表標籤生成的基原本源,是數據易用性的關鍵。ide
事實表是維度模型的基本表,每一個數據倉庫都包含一個或者多個事實數據表。事實數據表可能包含業務銷售數據,如銷售商品所產生的數據,與軟件中實際表概念同樣。性能
事實表做爲數據倉庫維度建模的核心,牢牢圍繞着業務過程來設計,經過獲取描述業務過程的度量來表達業務過程,包含了引用的維度和與業務過程有關的度量。大數據
事實表中一條記錄所表達的業務細節程度被稱爲粒度。一般粒度能夠經過兩種方式來表述:一種是維度屬性組合所表示的細節程度:一種是所表示的具體業務含義。優化
做爲度量業務過程的事實,通常爲整型或浮點型的十進制數值,有可加性、半可加性和不可加性三種類型。ui
相對維度來講,一般事實表要細長,行的增長速度也比維度錶快的多,維度表正好相反。編碼
事實表有三種類型 :設計
原子指標和度量含義相同,基於某一業務事件行爲下的度量,是業務定義中不可 再拆分的指標,具備明確業務含義的名詞 ,如支付金額。
事實表和維度交叉匯聚的點,度量和維度構成OLAP的主要概念,這裏面對於在事實表或者一個多維立方體裏面存放的數值型的、連續的字段,就是度量。
維度表是事實表不可分割的部分。維度表是進入事實表的入口。豐富的維度屬性給出了豐富的分析切割能力。維度給用戶提供了使用數據倉庫的接口。最好的屬性是文本的和離散的。屬性應該是真正的文字而不該是一些編碼簡寫符號。應該經過用更爲詳細的文本屬性取代編碼,力求最大限度地減小編碼在維度表中的使用。
維度表和事實表兩者的融合也就是「維度模型」,「維度模型」通常採用「星型模式」或者「雪花模式」,「雪花模式」能夠看做是「星型模式」的拓展,表現爲在維度表中,某個維度屬性可能還存在更細粒度的屬性描述,即維度表的層級關係。
維度屬性也能夠存儲到事實表中,這種存儲到事實表中的維度列被稱爲「退化維度」。與其餘存儲在維表中的維度同樣 ,退化維度也能夠用來進行事實表的過濾查詢、實現聚合操做等。
下表顯示的是一個維度(「城市」)和兩個指標(「會話數」和「每次會話瀏覽頁數」)。
維度 | 指標 | 指標 |
---|---|---|
城市 | 會話數 | 每次會話瀏覽頁數 |
舊金山 | 5,000 | 3.74 |
柏林 | 4,000 | 4.55 |
維度中的一些描述屬性以層次方式或一對多的方式相互關聯,能夠被理解爲包含連續主從關係的屬性層次。好比商品類目的最低級別是葉子類目,葉子類目屬於二級類目,二級類目屬於一級類目。在屬性的層次結構中進行鑽取是數據鑽取的方法之一。
當屬性層次被實例化爲一系列維度,而不是單一的維度時,被稱爲雪花模式。
大多數聯機事務處理系統( OLTP)的底層數據結構在設計時採用此種規範化技術,經過規範化處理將重複屬性移至其自身所屬的表中,刪除冗餘數據。
將維度的屬性層次合併到單個維度中的操做稱爲反規範化。分析系 統的主要目的是用於數據分析和統計,如何更方便用戶進行統計分析決 定了分析系統的優劣。採用雪花模式,用戶在統計分析的過程當中須要 大 量的關聯操做,使用複雜度高,同時查詢性能不好;而採用反規範化處 理,則方便、易用且性能好。
數據倉庫總線架構的重要基石之一就是一致性維度。在針對不一樣數 據域進行迭代構建或並行構建時,存在不少需求是對於不一樣數據域的業 務過程或者同 一數據域的不一樣業務過程合併在 一塊兒觀察。好比對於日誌數據域,統計了商品維度的最近一天的 PV 和 UV; 對於交易數據域, 統計了商品維度的最近一天的下單MV。如今將不一樣數據域的商品的 事實合併在一塊兒進行數據探查 ,如計算轉化率等,稱爲交叉探查。
咱們先來看數據倉庫的定義:數據倉庫是一個面向主題的、集成的、 非易失的且隨時間變化的數據集合,用來支持管理人員的決策。
數據由面向應用的操做型環境進人數據倉庫後,須要進行數據 集成。將面向應用的數據轉換爲面向主題的數據倉庫數據,自己就是一種集成。
具體體如今以下幾個方面:
表級別的整合,有兩種表現形式。
垂直整合,即不一樣的來源表包含相同的數據集,只是存儲的信息不一樣。好比商品基礎信息表、 商品擴展信息表、商品庫存信息表,這些表都屬於商品相關信息表,依據維度設計方法,儘可能整合至商品維度模型中,豐富其維度屬性。
水平整合,即不一樣的來源表包含不一樣的數據集,不一樣子集之間無交叉,也能夠存在部分交叉。若是進行整合,首先須要考慮各個體系是否有交叉,若是存在交叉,則須要去重;若是不存在交叉,則須要考慮不一樣子集的天然鍵是否存在衝突,若是不衝突, 則能夠考慮將各子集的天然鍵做爲整合後的表的天然鍵;另外一種方式是設置超天然鍵,未來源表各子集的天然鍵加工成一個字段做爲超天然鍵。
水平拆分
維度一般能夠按照類別或類型進行細分。因爲維度分類的不一樣而存在特殊的維度屬性,能夠經過水平拆分的方式解決此問題。
在設計過程當中須要重點考慮如下三個原則。
根據數據模型設計思想,在對維度進行水平拆分時,主要考慮以下兩個依據。
垂直拆分
在維度設計內容中,咱們提到維度是維度建模的基礎和靈魂,維度 屬性的豐富程度直接決定了數據倉庫的能力。在進行維度設計時,依據 維度設計的原則,儘量豐富維度屬性,同時進行反規範化處理。
某些維度屬性的來源表產出時間較早,而某些維度屬性的來 源 表產出時間較晚;或者某些維度屬性的熱度高、使用頻繁,而某些維度屬性的熱度低、較少使用 ; 或者某些維度屬性常常變化,而某些維度屬性比較穩定。在「水平拆分」中提到的模型設計的三個原則一樣適合解決此問題。
出於擴展性、產出時間、易用性等方面的考慮,設計 主從維度。主 維表存放穩定 、 產出時間早、熱度高的屬性;從維表存放變化較快、產 出時間晚、熱度低的屬性。
數據倉庫中常見的模型有:範式建模,雪花模型,星型建模,事實星座模型.
星型模型
星型模型是數據集市維度建模中推薦的建模方法。星型模型是以事實表爲中心,全部的維度表直接鏈接在事實表上,像星星同樣。星型模型的特色是數據組織直觀,執行效率高。由於在數據集市的建設過程當中,數據通過了預處理,好比按照維度進行了彙總,排序等等,數據量減小,執行的效率就比較高。
雪花模型
雪花模型也是維度建模中的一種選擇。雪花模型的維度表能夠擁有其餘維度表的,雖然這種模型相比星型模型更規範一些,可是因爲這種模型不太容易理解,維護成本比較高,並且性能方面須要關聯多層維表,性能也比星型模型要低。因此通常不是很經常使用。
範式建模
第三範式建模是在數據庫建模中使用的建模方法,特色是體系化,擴展性好,避免冗餘,避免更新異常。因此,在數據倉庫的EDW層建模中,咱們也提倡使用第三範式建模。可是數據倉庫的集成和反映歷史變化的特徵意味着數據量很是之大,表和表之間的關聯效率比較低,因此有些時候徹底規範的範式建模並非最好的選擇,一般咱們會選擇非規範化處理,增長一些冗餘的字段來避免表之間關聯的次數,這樣會節約大量的時間。
雪花模型是介於星型模型和範式建模之間的。我的理解,範式建模和雪花模型的區別在於雪花模型在維度上也是有冗餘的。例如雪花模型例圖的地域維度不符合第三範式,由於地域維度中存在傳遞依賴,城市-省級-國家-地域。
星座模型
星座模型是星型模型延伸而來,星型模型是基於一張事實表的,而星座模型是基於多張事實表的,並且共享維度信息。 經過構建一致性維度,來建設星座模型,也是很好的選擇。好比同一主題的細節表和彙總表共享維度,不一樣主題的事實表,能夠經過在維度上互相補充來生成能夠共享的維度。
參考
《The Data Warehouse Toolkit-The Complete Guide to Dimensional Modeling》
《Google Analytics》
《大數據之路》
做者:高廣超連接:https://www.jianshu.com/p/58da1060f0f5來源:簡書簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。