網易雲音樂數倉維度建模實踐:模型設計篇

數倉模型架構搭建、模型設計是整個數倉建設的核心部分。數倉建模的價值體現在:數據質量、健壯水平、資源消耗、服務響應速度。

寫在前面:我們爲什麼要建模

這裏想先說下,這些年我在數倉摸爬滾打的一些經歷:

剛畢業那會兒,我覺得數倉簡單啊,不就是用 sql 開發一張張表嘛,誰不會呀,那段時間覺得好沒挑戰呀,沒事的時候搗鼓下高大上的 spark、scala 啥的。

後來開始接觸模型,我的認知開始發生變化,原來每一個表都是一個個精心設計的模型,我以爲數倉就是一個個模型。

再後來,接觸越來越複雜的業務,我發現,設計模型也不是一個簡單的事情。我以爲我設計地很完美,但,業務不斷髮展後:

淌過這些坑後,如醍醐灌頂,這其實就是一個系統嘛。它不是一張表,也不是一個模型,而是一個有着完整體系架構和規範,需要同時考慮功能性需求和非功能性需求的系統。功能需求很好理解,就是滿足業務需求,產出數據和指標。難點在於非功能性需求,比如:指標質量高不高、數據安不安全、數據產出快不快、模型是否穩定可擴展、數據服務穩不穩定、代碼是否健壯、是否浪費了計算資源和存儲資源......

總之,數據模型就是數據組織和存儲方法,它強調從業務、數據存取和使用角度合理存儲數據。它的價值體現在:數據質量、健壯水平、服務響應速度、資源消耗。轉化成對企業數倉的要求就是:強穩定、高質量、高效率、低成本。

一、搭建模型架構

這一環節,我給它取了個名字,叫 "定調"。這裏主要根據各自部門的業務形態和數據服務特點來確定整體數倉建設的基調。

 首先,明確數倉各層次的要做的事情,下面是雲音樂模型層次的框架圖:

確定橫向模型層的任務後,接下來要確定下縱向數據域下各業務線的建設模式。

根據經驗,數倉的建設難度與業務深度和複雜度是成正比的,dws 層的建設尤爲複雜。dws 層的設計要考慮三個方向:

  1. 數據域的劃分特點 

  2. 業務的複雜度,各業務線、業務過程之間的區別和聯繫,用戶在各業務線的特點和關係,業務數據體量,解耦因素等等。

  3. 指標的特點,指標的構成無非是退化維 + 時間週期 + 原子指標構成,所以分析下指標的退化維一般有哪些、時間週期有哪些、原子指標種類有哪些。

基於以上三點,大致可以給整體數倉定個調,敲定數倉 dws,從而整個數倉架構基本上就可以確定下來了。比如,雲音樂最重要的用戶和內容業務線的設計大致如下架構:

主要思路是:

  1. 各內容業務線各自獨立建設內容和用戶類指標,按照上面架構圖分數據域逐步建設

  2. 輕度彙總表和中度彙總表都是用戶實體 + 內容實體 + 退化維模式。輕度彙總表基本涵蓋大部分需求場景

  3. 重度彙總表要麼是單實體,要麼是用戶 + 內容雙實體組成,且不包含退化維

  4. 重度彙總表分爲增量表和全量表,增量包含近 1/3/7/30 天時間週期的指標,全量表計算歷史累計指標。這麼做的目的是在計算人數類指標和計算資源之間做了平衡。

  5. 每個內容業務線最後都有自己內容大寬表和維表

  6. 用戶指標拆分到具體的內容業務線上,各自獨立建設用戶業務寬表,做到充分解耦,以滿足各自場景需求

  7. 用戶維表採用先分後總模型:先建設不受業務數據干擾的公用基礎維表 + 各業務線用戶維表,強解耦,保持獨立,再建設全域用戶維表

二、建模流程

定下數倉的基調,即模型架構後。接下來就要開始進行具體單個模型的設計了。具體建模流程按照下面流程進行:

 三、模型設計方法論

有了模型體系架構和建模流程,我們要實打實地設計一個個模型。我們知道表的分類主要是事實表和維表。事實表是維度建模的核心,維度是維度建模的基礎和靈魂。設計模型其實就是在設計事實表和維度表。簡單介紹下模型設計的基本原則和設計方法。

1. 模型設計基本原則有:

1.1 高內聚低耦合(最重要,非功能性需求決定架構)

1.2 核心模型與擴展模型分離

1.3 公共處理邏輯下沉及單一

1.4 成本與性能平衡

1.5 數據可回滾

1.6 一致性

1.7 命名清晰、可理解

2. 事實表設計方法

2.1 選擇業務過程及確定事實表類型

事實表類型:

1)單事務事實表:單個業務過程

2)多事務事實表:多個業務過程放在一個事實表中

①原則:

②方式

2.2 聲明粒度(非常重要)

粒度傳遞的是與事實表度量有關的細節層次,精確定義事實表每一行所代表的業務含義

儘量選擇最細級別的原子粒度,以確保事實表的應用具有最大的靈活性。

2.3 確定維度:應該選擇能夠描述清楚業務過程所處的環境的維度信息。

2.4 確定事實:

2.5 冗餘維度:

冗餘下游用戶方便使用的常用維度:常用的用於統計的維度屬性

冗餘原則

不冗餘查詢速度是不是很慢

存儲資源是不是夠

查詢頻率是不是很多

冗餘在哪一模型層的事實表中:明細層、輕度彙總層?

3. 維度設計的基本方法

四、實例介紹

根據前面介紹的方法論,雲音樂社區 mlog 內容線的部分模型架構如下:

五、總結

上述提到的模型分層、建模流程和建模方法論,在團隊內部形成了較爲穩定的規範,並在團隊內部得到大力推廣。好的規範離不開產品功能的加持,網易有數大數據平臺的模型設計中心基於網易內部多個團隊的數倉建設經驗,將數倉建模實踐經驗和方法論進行了產品化,爲雲音樂數倉團隊落地內部規範、完成數倉建模方面提供了極大的幫助。

雲音樂數倉團隊和網易有數產品也會更加緊密合作,把更多實踐經驗和建設指導,輸出給模型設計中心,讓模型設計中心幫助更多數據團隊完成自身數據中臺的搭建。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Cr8xf88j9oikzSEvGBTLMw