數倉模型設計詳解
導讀 | 今天給大家分享下數倉中的模型設計,一個好的數倉專案首先看一下它的架構以及他所用到的模型,它們使用的模型也都是非常巧妙的,好了,我們話不說到直接開始。 |
維度模型是資料倉儲領域大師Ralph Kimall所倡導,他的《資料倉儲工具箱》,是資料倉儲工程領域最流行的數倉建模經典。維度建模以分析決策的需求出發構建模型,構建的資料模型為分析需求服務,因此它重點解決使用者如何更快速完成分析需求,同時還有較好的大規模複雜查詢的響應效能。
維度建模是專門應用於分析型資料庫、資料倉儲、資料集市建模的方法。資料集市可以理解為是一種小型資料倉儲。
發生在現實世界中的操作型事件,其所產生的可度量數值,儲存在事實表中。從最低的粒度級別來看,事實錶行對應一個度量事件,反之亦然。
事實表表示對分析主題的度量。比如一次購買行為我們就可以理解為是一個事實。
圖中的訂單表就是一個事實表,可以理解他就是在現實中發生的一次操作型事件,每完成一個訂單,就會在訂單中增加一條記錄。
事實表的特徵:表裡沒有存放實際的內容,他是一堆主鍵的集合,這些ID分別能對應到維度表中的一條記錄。事實表包含了與各維度表相關聯的外來鍵,可與維度表關聯。事實表的度量通常是數值型別(條/個/次),且記錄數會不斷增加,表資料規模迅速增長。
維度表示要對資料進行分析時所用的一個量,比如你要分析產品銷售情況, 你可以選擇按類別進行分析,或按區域分析。這樣的按..分析就構成一個維度。上圖中的使用者表、商家表、時間表這些都屬於維度表。這些表都有一個唯一的主鍵,然後在表中存放了詳細的資料資訊。
例如:交易金額分析分析
男性使用者的訂單金額、聯想商品的訂單金額、第一季度的訂單金額、手機的訂單金額、家裡下單的訂單金額
例如:學生分析
姓張的同學有多少、男性的同學有多少、江蘇的同學有多少、身高小於170cm的同學有多少、年齡小於23歲的同學有多少。
每個維度表都包含單一的主鍵列。維度表的主鍵可以作為與之關聯的任何事實表的外來鍵,當然,維度錶行的描述環境應與事實錶行完全對應。維度表通常比較寬,是扁平型非規範表,包含大量的低粒度的文字屬性。
總的說來,在資料倉儲中不需要嚴格遵守規範化設計原則。因為資料倉儲的主導功能就是面向分析,以查詢為主,不涉及資料更新操作。
事實表的設計是以能夠正確記錄歷史資訊為準則。
維度表的設計是以能夠以合適的角度來聚合主題內容為準則。
星形模式(Star Schema)是最常用的維度建模方式。星型模式是以事實表為中心,所有的維度表直接連線在事實表上,像星星一樣。
星形模式的維度建模由一個事實表和一組維表成,且具有以下特點:
- 維表只和事實表關聯,維表之間沒有關聯;
- 每個維表主鍵為單列,且該主鍵放置在事實表中,作為兩邊連線的外來鍵;
- 以事實表為核心,維度表圍繞核心呈星形分佈
雪花模式(Snowflake Schema)是對星形模式的擴充套件。雪花模式的維度表可以擁有其他維度表的,雖然這種模型相比星型更規範一些,但是由於這種模型不太容易理解,維護成本比較高,而且效能方面需要關聯多層維表,效能也比星型模型要低。所以一般不是很常用。
星座模式是星型模式延伸而來,星型模式是基於一張事實表的,而星座模式是基於多張事實表的,而且共享維度資訊。
前面介紹的兩種維度建模方法都是多維表對應單事實表,但在很多時候維度空間內的事實表不止一個,而一個維表也可能被多個事實表用到。在業務發展後期,絕大部分維度建模都採用的是星座模式。
好了本篇文章就分享到這裡了,本篇文章主要講解了維度模型三種模式,在設計數倉的時候儘量將表設計為星星模型和雪花模型這樣的話我們在實現功能的時候就比較簡單,原因是星星模型和雪花模型架構基本上是一對多的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2750405/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 詳解數倉物件設計中序列SEQUENCE原理與應用物件
- 2 - 到底哪種數倉設計模型更合適模型
- 併發程式設計——IO模型詳解程式設計模型
- [數倉]資料倉儲設計方案
- 資料倉儲(6)數倉分層設計
- 資料倉儲(7)數倉規範設計
- 詳解數倉的向量化執行引擎
- 詳解MapReduce中的五大程式設計模型程式設計模型
- Java網路程式設計和NIO詳解3:IO模型與Java網路程式設計模型Java程式設計模型
- 從ODS到ADS,詳解數倉分層!
- python函數語言程式設計詳解Python函數程式設計
- Linux Shell程式設計(8)——變數詳解Linux程式設計變數
- XXX資料倉儲分析模型設計文件模型
- mapreduce的程式設計模型,計數器程式設計模型
- 分散式流處理框架 Apache Storm —— 程式設計模型詳解分散式框架ApacheORM程式設計模型
- 設計模式詳解設計模式
- 例項詳解構建數倉中的行列轉換
- Epoll模型詳解模型
- iOS設計模式詳解iOS設計模式
- 冪等設計詳解
- Javascript設計模式詳解JavaScript設計模式
- jQuery 倒數計時效果詳解jQuery
- js 活動倒數計時詳解JS
- Java Stream函數語言程式設計案例圖文詳解Java函數程式設計
- Transformer模型詳解ORM模型
- CSS盒模型詳解CSS模型
- 詳解CSS盒模型CSS模型
- 設計模式 - 代理模式詳解設計模式
- Dubbo架構設計詳解架構
- 詳解模板方法設計模式設計模式
- 四種設計模式詳解設計模式
- PHP Socket 程式設計詳解PHP程式設計
- 設計模式:代理模式詳解設計模式
- 詳解數倉中sequence的應用場景及最佳化
- Java網路程式設計與NIO詳解10:深度解讀Tomcat中的NIO模型Java程式設計Tomcat模型
- 數倉(一)數倉概述
- vuex管理狀態倉庫詳解Vue
- YUM倉庫配置及命令詳解