網易有道成人教育數倉建設實踐
導讀:
隨著有道旗下網易雲課堂、中國大學mooc產品的迅速發展,對資料的需求日益增多,在提高資料服務質量和資料使用效率、降低資料使用成本、資料賦能業務的背景下,我們從0到1建設成人教育資料倉儲。
1、整體架構
-
資料來源:資料主要來自Mysql、ES、DDB的業務資料,以及kafka的埋點日誌資料;
-
資料處理層:基於有數大資料平臺的儲存、計算能力之上建設資料倉儲;
-
查詢層:查詢層主要為應用提供即席查詢、olap計算和儲存能力,根據具體的業務需求選擇presto、doris、es;
-
應用服務:目前資料倉儲支撐了有數BI報表、個性化推薦、市場營銷、資料分析、使用者畫像、使用者增長等資料應用。
2、資料倉儲建設過程
2.1 業務調研
業務調研需要從自上而下和自上而下兩個方向去執行:
-
自上而下:根據已有的報表需求和業務需求梳理這些資料的原始資料來源、資料總量和增量、結構、計算邏輯和資料及時性等。
-
自下而上:現有的報表和需求有時候並不能覆蓋所有業務過程,需要從業務過程調研原始資料,線上的業務過程會產生哪些資料。
自上而下和自上而下雙管齊下是為了更全面調研業務系統的資料。避免出現基於少量的業務調研設計的數倉架構和規範不滿足後面業務的擴充套件,影響數倉的穩定性。
2.2 架構設計
平臺架構:
平臺元件技術選型及架構設計,根據業務調研結果選型包括計算引擎、儲存、排程系統等元件。目前有數大資料平臺基本滿足離線數倉的架構需求。
數倉分層架構:
-
ODS層 :資料操作層,儲存源資料最原始資料;
-
DWD層:透過清洗、整合ODS層資料生成的最原子粒度的事實表,主要儲存原子指標資料;
-
DIM層 :儲存描述維度屬性的維度表,維度表多用於與事實表關聯彙總查詢;
-
DWS層:根據需求對原子指標進行週期+修飾詞(維度屬性)聚合彙總的輕度彙總層;
-
ADS層 :面向主題應用的報表及服務結果層。
數倉匯流排矩陣:
劃分資料域,構建業務過程與維度關係矩陣,匯流排矩陣中行表示業務過程,列表示維度,透過匯流排矩陣梳理業務過程和維度關係,是模型設計過程的基本工具,以此來保證維度跨多業務過程的一致性,以及防止在事實表設計時遺漏關聯維度。
2.3 模型設計
整個數倉是按照kimball的維度建模方式建設,設計步驟如下:
(1)選擇業務過程
選擇業務活動行為的過程,如:下單、支付、看影片。
(2)宣告粒度
粒度即事實表中每行資料代表什麼,明細表中應宣告業務過程最細的粒度,如:每個課程的訂單記錄,支付的每一筆錢記錄,每次開啟影片的觀看記錄。
(3)確定維度
維度是用來描述業務過程發生的環境實體,如:誰在什麼時候什麼地方以何種方式下單。
(4)確定事實
確定業務過程中的度量,即原子指標,如:下單金額、支付金額、觀看時間。
(5)冗餘維度
冗餘常用維度資訊至事實表中,提高模型使用效率,冗餘的過程中應儘量使用已經開發好的維表,保證維度屬性的邏輯一致性。
透過上面的步驟我們大概能設計出圍繞一個業務過程的星型模型,當多個星型模型透過事實表或者維度表相互連線時,就形成了數倉中常見的事實星座模型。
2.4 模型開發
2.4.1 開發原則
(1)高內聚低耦合
將業務相近或者相關的資料、粒度相同資料設計為一個邏輯或者物理模型;將高機率同時訪問的資料放在一起,將低機率同時訪問的資料分開儲存。
(2)核心模型與擴充套件模型分離
在設計明細表和維度表的時候,採用垂直切分的方式,將常用欄位保留在核心模型,將一些大欄位、個性化或者少量應用的欄位剝離到擴充套件模型,常用雜項維度的方式,保證核心模型的簡潔
(3)公共處理邏輯下沉以及單一
將業務資料處理邏輯下沉至明細層進行處理,不暴露給應用層,並保證處理邏輯單一存在。
(4)適當冗餘
針對常用維度屬性冗餘在明細層和彙總層,提高開發效率。
(5)資料可回滾
處理邏輯不變,全量處理在不同時間多次執行資料的結果需要確定不變,增量處理根據輸入時間變化可回刷歷史資料。
2.4.2 開發規範
-
原則上層次呼叫關係為ODS>DWD>DWS>ADS,部分需要針對明細層的需求或者不穩定的業務場景可遵循ODS>DWD>ADS。禁止反向依賴。比如DWS依賴ADS,造成任務深度多大,相互依賴等問題;
-
ODS層不能被應用層直接呼叫,如不確定資料處理邏輯的可先在明細層建立檢視,透過檢視訪問;
-
多個計算任務輸出至一個表時,需要建立一個依賴這多個任務的虛擬節點進行管理;
-
DWS層進行粗粒度彙總時,優先呼叫已經產出DWS較細粒度彙總,可避免直接從明細層計算,提高計算效率;
-
一個計算任務只能輸出至一個表;
-
一個計算任務中間使用的臨時表不得被其他任務使用;
-
建表必須對欄位和表描述進行中文描述;
-
指標類的欄位空值用零填充,維度屬性值為空的用-99(未知)填充。
2.4.3 表命名規範
-
ODS 層 :ods_{源庫標識}_{源庫表名}_{週期儲存方式}
-
DIM 層 :dim_{業務/pub}_{維度定義}_{自定義命名}_{週期儲存方式}
-
DWD 層:dwd_{業務/pub}_{資料域}_{業務過程縮寫}_[自定義命名]_{週期儲存方式}
-
DWS 層:dws_{業務/pub}_{資料域}_{自定義命名}_{時間粒度}_{週期儲存方式}
-
ADS 層:ads_{業務/pub}_{需求模組名}_{自定義命名}_{週期儲存方式}
-
重新整理週期縮寫:h:小時、d:天、m:月、y:年、rt實時
-
分割槽儲存:f:全量、i增量
-
指令碼內臨時表命名規範:{project_name}.tmp_{產出表表名}_{n}。
2.4.4 測試與上線
在模型開發完成後測試資料結果的準確性、完整性、一致性和及時性,透過探查指標、資料量、維度屬性分佈,模型之間關聯情況,任務執行效率等方式測試。上線後設定模型基線,配置資料質量監控。
3、未來展望
目前有道成人教育離線資料倉儲已經用於各個資料應用場景,接下來的重點工作則是對數倉長期的資料治理工作,其中重點會放在資料規範方面。由於業務對實時的需求日益增多,目前也有嘗試使用sloth平臺開發實時數倉,未來會往流批一體方向發展。
作者簡介:吳建,網易有道資深大資料開發工程師。7年大資料相關工作經驗,涉及電商、金融、政務、教育等領域。深度參與多個資料中臺專案從0到1的建設。
來自 “ 網易有數 ”, 原文作者:吳建;原文連結:https://mp.weixin.qq.com/s/Nq5jRCeJbF70kp7EsTLslw,如有侵權,請聯絡管理員刪除。
相關文章
- 網易嚴選離線數倉治理實踐
- 農業銀行湖倉一體實時數倉建設探索實踐
- 美團實時數倉架構演進與建設實踐架構
- Apache Doris 在同程數科數倉建設中的實踐Apache
- 網易雲音樂基於Flink實時數倉實踐
- 快手基於 Apache Flink 的實時數倉建設實踐Apache
- 雲音樂實時數倉建設以及任務治理實踐
- 58同城使用者行為數倉建設及實踐
- B站運維數倉建設和資料治理實踐運維
- 美團點評基於 Flink 的實時數倉建設實踐
- 數倉服務平臺在唯品會的建設實踐
- 低程式碼實時數倉構建系統的設計與實踐
- 網易有道 | REDIS 雲原生實戰Redis
- 中小銀行資料倉儲建設 | 最佳實踐
- Flink Table Store 0.3 構建流式數倉最佳實踐
- 滴滴資料倉儲指標體系建設實踐指標
- 應用實踐——新東方實時數倉實踐
- 快手基於 Flink 構建實時數倉場景化實踐
- 實時數倉混沌演練實踐
- 網易雲音樂低程式碼體系建設思考與實踐
- 從離線到實時資料生產,網易湖倉一體設計與實踐
- 數倉實踐:匯流排矩陣架構設計矩陣架構
- 微信ClickHouse實時數倉的最佳實踐
- Doris和Flink在實時數倉實踐
- 實時數倉在滴滴的實踐和落地
- 《Greenplum構建實時資料倉儲實踐》簡介
- 實時數倉構建:Flink+OLAP查詢的一些實踐與思考
- 快手實時數倉保障體系研發實踐
- [平臺建設] HBase平臺建設實踐
- 網易有道財報:2022年Q4網易有道淨利1230萬元 首次實現單季度盈利
- 離線數倉建設之資料匯出
- 網易數帆實時資料湖 Arctic 的探索和實踐
- 複雜查詢響應速度提升10+倍,度言軟體基於 Apache Doris 實時數倉建設實踐Apache
- 基於 Flink 的實時數倉生產實踐
- 上海久耶基於HBase實時數倉探索實踐
- 網易基於 Iceberg 的實時湖倉一體系統構建經驗
- 網易嚴選基於“服務畫像”的長效穩定效能力建設實踐
- 最強最全面的數倉建設規範指南