1.總述
人類從“IT時代”進入“DT時代”屎债。本書介紹了阿里巴巴的大數(shù)據(jù)系統(tǒng)架構(gòu),為了滿足不斷變化的業(yè)務需求拜英,同時實現(xiàn)系統(tǒng)的高擴展性静汤、靈活性以及數(shù)據(jù)展現(xiàn)的高性能。
數(shù)據(jù)體系主要包括:數(shù)據(jù)采集、數(shù)據(jù)計算虫给、數(shù)據(jù)服務和數(shù)據(jù)應用四大層次藤抡。
1.數(shù)據(jù)采集層包括兩大體系:Aplus.JS是Web端日志采集技術(shù)方案,UserTrack是APP端日志采集技術(shù)方案抹估。
2.數(shù)據(jù)計算層包括兩大體系:數(shù)據(jù)存儲及計算云平臺(離線計算平臺:MaxCompute缠黍;實時計算平臺:StreamCompute);數(shù)據(jù)整合和管理體系(阿里內(nèi)部稱為“OneData”)药蜻。數(shù)倉的加工鏈路包括:ods(操作數(shù)據(jù)層)瓷式、dwd(明細數(shù)據(jù)層)、dws(匯總數(shù)據(jù)層)谷暮、ads(應用數(shù)據(jù)層)蒿往。
3.數(shù)據(jù)服務層通過接口服務化方式對外提供數(shù)據(jù)服務,數(shù)據(jù)服務層架構(gòu)在多種數(shù)據(jù)庫之上(例如:mysql湿弦、Hbase等)瓤漏,數(shù)據(jù)服務層對外提供服務通過統(tǒng)一的數(shù)據(jù)服務平臺(OneService)。
11.事實表設(shè)計
11.1 事實表基礎(chǔ)
事實表包括引用的維度和描述具體業(yè)務的度量颊埃。
事實表中一條記錄描述的業(yè)務的細節(jié)程度稱為粒度蔬充。粒度可以使用兩種方式來表示:(1)維度屬性組合(2)所表示的具體業(yè)務含義。
事實包括可加性班利、半可加性和不可加性三種類型:
半可加性:只可以針對特定維度做聚合饥漫,例如庫存(不能按照日期,可按照倉庫聚合)罗标。
可加性:可以按照任意維度聚合庸队。
不可加性:完全不具備可加性。(例如:比率闯割,事實表可以拆分存儲分子分母)
維度屬性也可以存到事實表中彻消,稱為退化維度。
事實表有三種類型:事務事實表宙拉、周期快照事實表宾尚、累計快照事實表。
事務事實表描述的是業(yè)務過程上的原子事務谢澈,也稱為原子事實表煌贴。
周期快照事實表是按照周期性規(guī)律的時間間隔記錄事實。
累計快照事實表:累計快照事實表用來表示過程開始和結(jié)束過程之間的關(guān)鍵步驟事件锥忿,覆蓋整個生命周期牛郑,通常用多個日期字段記錄關(guān)鍵時間點,記錄會隨著時間變化而修改敬鬓。
事實表設(shè)計原則:
原則1: 盡可能包含所有與業(yè)務過程相關(guān)的事實淹朋。
即時存在冗余灶似,也盡可能存儲。
原則2:只選擇與業(yè)務過程相關(guān)的事實瑞你。
原則3:分解不可加事實為可加的組件。
例如:不存成單率希痴,轉(zhuǎn)而存儲成單數(shù)和提單數(shù)者甲。
原則4:選擇維度和事實前,必須先聲明粒度砌创。
建議粒度設(shè)置的越細越好虏缸,這樣可以最大限度的提高靈活性∧凼担可以通過業(yè)務描述或者維度屬性組合的方式來定義粒度刽辙。
原則5:在同一個事實表中,不應該有不同粒度的事實甲献。
例如:一個事實表中不應該包含某些精確到訂單粒度的度量宰缤,同時又包含只精確到城市的度量。
原則6:事實的單位一致晃洒。
原則7:盡量處理掉事實表中的null值慨灭。
SQL中大于,小于的條件不適用與null值球及,所以盡量用數(shù)值替代null氧骤,例如0.
原則8:使用退化維度增加事實表的易用性。
在Kimball的維度設(shè)計模型中吃引,分拆出單獨的維度表筹陵,為了節(jié)省存儲。但是為了減少使用時的關(guān)聯(lián)次數(shù)镊尺,可以多使用退化維度提供事實表易用性朦佩。
事實表設(shè)計方法:
1.選擇業(yè)務過程及確定事實表類型。2. 聲明粒度鹅心。3.確定維度吕粗。4.確定事實。5.冗余維度(設(shè)計退化維度)旭愧。
11.2 事務事實表
事務事實表,即針對業(yè)務過程構(gòu)建的一類事實表输枯,用來跟蹤定義業(yè)務過程的個體行為,提供豐富的分析能力先口,作為數(shù)據(jù)倉庫原子的明細數(shù)據(jù)型奥。
11.2.1 單事務事實表
單事務事實表,即針對每一個業(yè)務過程設(shè)計一個事實表碉京,這樣可以方便地對每一個業(yè)務過程進行分析研究。
11.2.2 多事務事實表
表示同一個事實表包含不同的業(yè)務過程烫葬。多事務事實表有兩種實現(xiàn)方法:(1)使用兩個不同的事實字段來保存各自業(yè)務過程。(2)使用同一個字段保存凡蜻,但是增加一個業(yè)務過程標簽搭综。
下面舉例說明,淘寶交易事務事實表同時包含下單兑巾、支付和成功完結(jié)三個過程忠荞,三個過程粒度一致,可以放在一個事實表奋姿。下面確定維度和事實素标,該表中的下單度量、支付度量和成功完結(jié)度量信息分別存在不同字段寓免,如果不是當前業(yè)務處理计维,則用0來處理。
當不同業(yè)務過程的度量比較相似蜈首、差異不大時使用第二種事實表(使用一個字段保存)欠母,當不同業(yè)務過程的度量差異大時,使用第一種(多字段保存)踩寇。
11.2.3 比較
對于單事務事實表和多事務事實表的選擇上六水,可以從以下一些方面來區(qū)分:
業(yè)務過程辣卒、粒度和維度(不同業(yè)務過程粒度相同睛榄,并且維度相似時场靴,可以選用單事務事實表)、事實、下游業(yè)務使用叉趣、計算存儲成本疗杉。電商環(huán)境下,有父子訂單的概念梢什,店鋪多商品各生成一個訂單朝聋,在一個店鋪合成一個父訂單。
事務事實表類型 | 單事務事實表 | 多事務事實表 |
---|---|---|
業(yè)務過程 | 一個 | 多個 |
粒度 | 相互不相關(guān) | 相同粒度 |
維度 | 相互不相關(guān) | 一致 |
事實 | 只取當前業(yè)務過程中的事實 | 保留多個事實,非當前業(yè)務度量置0 |
冗余維度 | 多個業(yè)務過程言蛇,冗余多次 | 不同業(yè)務過程只冗余一次 |
理解成本 | 易于理解腊尚,不易混淆 | 難以理解,需要通過標簽限定 |
計算存儲成本 | 較多劝篷,每個業(yè)務過程都需要計算存儲一次 | 較少民宿,增加了存儲量勘高,存在大量零值數(shù)據(jù) |
11.2.4 事實的設(shè)計準則
1.事實完整性:事實表包含與其描述的過程有關(guān)的所有事實坟桅。
2.事實一致性:明確存儲每一個事實以確保度量一致性蕊蝗。例如蓬戚,有下單商品數(shù)和商品價格2個事實,同時保存下單金額(價格*商品數(shù))豫喧。這樣下游使用時幢泼,直接取下單金額缕棵,而不是再次計算,以保證指標的一致性篙程。
3.事實可加性:為確保下游使用時别厘,指標的可聚合性,盡量保存原始數(shù)郭厌,而不是計算后的比率指標雕蔽。
11.3 周期性快照事實表
對于事務度量批狐,事務性事實表可以很好地表征。但是對于一些狀態(tài)度量承冰,例如買賣家累計交易金額食零、商品庫存贰谣、買賣家星級迁霎、溫度(事務事實表無法聚合得到)等考廉,事務事實表的效率較低或者無法處理携御。為了解決狀態(tài)度量問題,引入周期性快照事實表(也稱為快照事實表)涮坐。
11.3.1 快照事實表特性
1.用快照采樣狀態(tài):快照事實表以預定的間隔采樣狀態(tài)度量袱讹。
2.快照粒度:快照事實表通程菲螅總是被多維聲明评肆,即快照需要采樣的周期以及什么將被采樣瓜挽。
3.密度和稠密性:稠密性是快照事實表的重要特征。事務事實表一般都是稀疏的俄占,只要發(fā)生業(yè)務才會有相應記錄淆衷。
4.半可加性:快照事實表的狀態(tài)度量都是半可加的祝拯,例如商品庫存,只針對商品維度可加鹰贵,對日期維度不可加康嘉。
設(shè)計快照事實表亭珍,首先確定快照粒度枝哄,然后確定采樣的狀態(tài)度量膘格。下面介紹幾個快照事實表實例财松。
單維度每天快照事實表、混合維度每天快照事實表菜秦,這兩種快照表都可以從事務事實表匯總得到球昨。另外的一種產(chǎn)出模式是直接使用操作型系統(tǒng)作為數(shù)據(jù)源來加工主慰,例如淘寶賣家的星級評分是在操作型系統(tǒng)中計算得出的,倉庫直接拿來這部分數(shù)據(jù)加入事實表情竹。全量快照事實表雏蛮,是特殊類型的周期快照表阱州,例如設(shè)計無事實的事實表來記錄評論的狀態(tài)度量苔货。
總結(jié):事務事實表和周期快照表一般都是成對設(shè)計蒲赂,特別是在事務事實表基礎(chǔ)上加工周期快照事實表木蹬。一般地,快照事實表會有狀態(tài)比對的需求(和上一個時間周期)尘颓,所以周期快照表一般也會附加存儲上一個時間周期的狀態(tài)度量(防止多次使用周期快照表)。除歷史至今的狀態(tài)度量信峻,還可能需要自然年尤莺、季度颤霎、月份至今的狀態(tài)(例如年初至今的庫存量)。
11.4 累計快照事實表
對于研究事件之間的時間間隔需求時柔纵,累計快照事實表能較好符合需求壮吩。
特點:
1.數(shù)據(jù)不斷更新:例如觉啊,在下單杠人、支付和確認收貨三個業(yè)務過程中辑莫,事務事實表會生成3條記錄,而累計快照表會不斷更新一條記錄(不生成新記錄)揭蜒。
2.多業(yè)務過程日期:
累計快照表適用于具有較明確起止時間的短生命周期的實體徙融,對于每個實體都經(jīng)歷從誕生到消亡等步驟。
3.存儲歷史全量數(shù)據(jù)脚猾。
11.5 三種類型事實表的比較
事實表類型 | 事務事實表 | 周期快照事實表 | 累積快照事實表 |
---|---|---|---|
時間/時期 | 離散事務時間點 | 以有規(guī)律、可預測的時間間隔產(chǎn)生數(shù)據(jù) | 用于時間跨度不確定的不斷變化的工作流 |
日期維度 | 事務日期 | 快照日期 | 相關(guān)業(yè)務過程涉及的多個日期 |
粒度 | 每行代表實體的一個事務 | 每行代表某時間周期的一個實體 | 每行代表一個實體的生命周期 |
事實 | 事務事實 | 累積事實 | 相關(guān)業(yè)務過程事實和時間間隔事實 |
事實表加載 | 插入 | 插入 | 插入與更新 |
事實表更新 | 不更新 | 不更新 | 業(yè)務過程變更時更新 |
11.6 無事實的事實表
1.事件類的仅淑,例如瀏覽日志涯竟。
2.條件范圍資格類的银酬,例如客戶和銷售人員的分配情況揩瞪。
11.7 聚集型事實表
主要是提前聚合,為了增加數(shù)據(jù)訪問的效率(不用再聚合了),減少數(shù)據(jù)不一致的情況诽俯。這類聚集匯總數(shù)據(jù)密任,被稱為“公共匯總層”浪讳。
聚集的基本步驟:1.確定聚集維度。2.確定一致性上鉆。3.確定聚集事實辐真。
12.元數(shù)據(jù)
12.1 元數(shù)據(jù)概述:
元數(shù)據(jù)主要記錄數(shù)據(jù)倉庫中模型的定義侍咱、各層級間映射關(guān)系胯甩、監(jiān)控數(shù)據(jù)倉庫的數(shù)據(jù)狀態(tài)及ETL任務的運行狀態(tài)偎箫。元數(shù)據(jù)分為技術(shù)元數(shù)據(jù)和業(yè)務元數(shù)據(jù)弄诲。
阿里巴巴技術(shù)元數(shù)據(jù)包括:
數(shù)據(jù)表、列等信息;ETL作業(yè)的信息想许;數(shù)據(jù)同步流纹、任務調(diào)度疮蹦、計算任務等信息愕乎。數(shù)據(jù)質(zhì)量和運維相關(guān)元數(shù)據(jù)。
阿里巴巴業(yè)務元數(shù)據(jù)包括:
維度屬性、業(yè)務過程薪前、指標等示括。數(shù)據(jù)應用元數(shù)據(jù)丁稀,例如數(shù)據(jù)報表线衫、數(shù)據(jù)產(chǎn)品等枯跑。
元數(shù)據(jù)價值:
元數(shù)據(jù)在數(shù)據(jù)管理方面為集團數(shù)據(jù)在計算敛助、存儲续扔、成本、質(zhì)量堡赔、安全存璃、模型等治理領(lǐng)域上提供數(shù)據(jù)支持纵东。
14.存儲和成本管理
14.1 數(shù)據(jù)壓縮
阿里MaxCompute提供了archive壓縮方法辑甜,采用了具有更高壓縮比壓縮算法猫牡,將數(shù)據(jù)以RAID file的形式存儲淌友。這樣可以節(jié)省空間,但是恢復起來也更復雜,所以適用于冷備份的數(shù)據(jù)。
14.2 數(shù)據(jù)重分布
MaxCompute基于列存儲逛球,通過修改表的數(shù)據(jù)重分布幸海,避免列熱點,將會節(jié)省一定存儲空間挡篓。
14.3 存儲治理項優(yōu)化
存儲治理項以元數(shù)據(jù)為基礎(chǔ),列出例如“62天內(nèi)未訪問的分區(qū)”、“數(shù)據(jù)無更新的任務列表”等等管理項推動ETL優(yōu)化始花。形成現(xiàn)狀分析、問題診斷、管理優(yōu)化溜族、效果反饋的存儲治理項優(yōu)化的閉環(huán)煌抒。
14.4 生命周期管理
生命周期管理的目的是用最少的存儲成本來滿足最大業(yè)務需求况既,實現(xiàn)數(shù)據(jù)價值最大化棒仍。
1.周期性刪除策略:
2.徹底刪除策略:主要針對無用表莫其,ETL中間過程表乱陡。
3.永久保存策略:
4.極限存儲策略:
5.冷數(shù)據(jù)管理策略:針對重要且訪問頻率低的數(shù)據(jù)。
6.增量表merge全量表策略:
14.5 數(shù)據(jù)成本計量
將一個數(shù)據(jù)表的成本分為存儲成本和計算成本胳徽,除此之外爽彤,上游表對該表的掃描成本也應該計入。相應的計費分別核算為:計算付費适篙、存儲付費和掃描付費匙瘪。數(shù)據(jù)資產(chǎn)的成本管理分為數(shù)據(jù)成本計量和數(shù)據(jù)使用計費。