數(shù)倉公共層,還有存在的必要嗎?
?自我接觸數(shù)倉以來,數(shù)倉建模就是最為核心的工作,而數(shù)倉建模的主要目的是建立公共層,公共層主要起到兩個(gè)作用,第一個(gè)是屏蔽底層的變動(dòng)對上層應(yīng)用的影響,第二個(gè)作用是通過復(fù)用沉淀的公共層來提升應(yīng)用支撐的效率,但在長期的數(shù)倉公共層運(yùn)營實(shí)踐中中,我發(fā)現(xiàn)公共層的表現(xiàn)不總是沿著我們設(shè)想的軌跡演進(jìn)。
1、無論數(shù)倉公共層開始的時(shí)候設(shè)計(jì)的多么完美,數(shù)倉公共層最后的使用比例2/8現(xiàn)象明顯,大量的公共層模型是沒人使用的,項(xiàng)目投入的80%都被浪費(fèi)了。
2、當(dāng)前的數(shù)倉公共層和5年前的數(shù)倉公共層差別不是很大,意味著新業(yè)務(wù)沒必要用新的公共層去支撐,間接否認(rèn)了公共層存在的必然性。
3、數(shù)據(jù)倉庫公共層經(jīng)常會(huì)由于積重難返而被推道重來,比如5年一次,對于公共層的投資似乎并不是很劃算的生意。
我們當(dāng)然不能否認(rèn)公共層的價(jià)值,但其價(jià)值也許的確被高估了,設(shè)想一種場景,假如不預(yù)先做數(shù)倉公共層的建模,我們對業(yè)務(wù)的支持真的會(huì)變得很糟糕嗎?恰好,我也有實(shí)踐。
1、在遙遠(yuǎn)的報(bào)表時(shí)代,為了實(shí)現(xiàn)報(bào)表會(huì)做大量的臨時(shí)匯總表,那個(gè)時(shí)候沒怎么考慮復(fù)用,但似乎也沒什么大問題。在報(bào)表時(shí)代過度到數(shù)據(jù)倉庫時(shí)代的時(shí)候,其實(shí)并沒有什么強(qiáng)烈的業(yè)務(wù)驅(qū)動(dòng)要做什么公共層,但由于那個(gè)時(shí)候數(shù)倉關(guān)系建模已經(jīng)興起,大家都覺得做公共層成了理所當(dāng)然的事情,畢竟復(fù)用是很先進(jìn)的理念,但其實(shí)大多就是把臨時(shí)匯總表搞成了公共層而已。
2、在大數(shù)據(jù)時(shí)代,我們在hadoop上開出了很多租戶,雖然主租戶做了大量公共層模型,但各個(gè)部門的租戶基本上是隨著應(yīng)用的需要建立起的一堆中間表和寬表,復(fù)用主租戶的公共模型并不是很多,但大多卻活得很好,我們經(jīng)常指責(zé)租戶沒用復(fù)用意識,導(dǎo)致大量的計(jì)算資源浪費(fèi),但要說浪費(fèi),我們80%的公共模型沒人使用何嘗不是更大的浪費(fèi)呢?事實(shí)上,各個(gè)部門租戶的資源是有限的,但各部門還是靠自己的運(yùn)營保證了基本的生產(chǎn)需要。
數(shù)倉公共層的理想很好,但大多數(shù)據(jù)團(tuán)隊(duì)實(shí)際并不具備什么公共層的運(yùn)營能力,為什么呢?
1、大多公司的業(yè)務(wù)團(tuán)隊(duì)比較強(qiáng)勢,數(shù)據(jù)團(tuán)隊(duì)很難堅(jiān)持一些數(shù)據(jù)架構(gòu)的原則
2、業(yè)務(wù)部門提需求沒有什么成本,大量低質(zhì)量的需求把數(shù)據(jù)團(tuán)隊(duì)有限的資源耗光了,數(shù)據(jù)團(tuán)隊(duì)很難有時(shí)間去考慮公共層的優(yōu)化
3、公共層的價(jià)值體現(xiàn)很慢,大家更多的精力還是投在了應(yīng)用建模上
4、公共層對于業(yè)務(wù)、技術(shù)、數(shù)據(jù)的綜合要求很高,數(shù)據(jù)團(tuán)隊(duì)普遍缺乏此類人才
與此同時(shí),數(shù)據(jù)湖、湖倉一體等新技術(shù)的出現(xiàn)都對數(shù)倉公共層的建設(shè)必要性提出挑戰(zhàn),技術(shù)的趨勢似乎都在朝著數(shù)倉公共層的反面進(jìn)行,即強(qiáng)調(diào)原始數(shù)據(jù)分析的所見即所得,強(qiáng)調(diào)對不可知數(shù)據(jù)和不可知業(yè)務(wù)的探索分析。
數(shù)據(jù)倉庫通常預(yù)先定義 schema,外部數(shù)據(jù)需要按照標(biāo)準(zhǔn)寫入(比如清洗轉(zhuǎn)化等)并對外提供數(shù)據(jù)服務(wù)查詢接口,數(shù)倉公共層進(jìn)一步延伸了這種設(shè)計(jì)思想,通過事先的生成和約束來確保良好的數(shù)據(jù)性能,所謂先建模再使用,強(qiáng)調(diào)的是未來的成長性。
數(shù)據(jù)湖則是反過來的,外部數(shù)據(jù)幾乎不受限制的進(jìn)入數(shù)據(jù)湖,只有在需要使用的時(shí)候才明確 schema來建模,數(shù)據(jù)湖也不存在所謂的公共層,應(yīng)用需要就即席建模,強(qiáng)調(diào)的是靈活性。
10年前數(shù)據(jù)倉庫是主流,因?yàn)闃I(yè)務(wù)需求主要就是循規(guī)蹈矩、按部就班的報(bào)表和BI,這種計(jì)劃性很強(qiáng)的應(yīng)用場景非常適合數(shù)據(jù)倉庫的技術(shù)特點(diǎn),數(shù)倉公共層更是讓報(bào)表和BI如虎添翼。
靈活性和成長性,對于處于不同時(shí)期的企業(yè)來說,重要性也是不同的,數(shù)倉公共層對于業(yè)務(wù)成熟的企業(yè)來講比較適用,對于初創(chuàng)企業(yè)或初創(chuàng)數(shù)據(jù)團(tuán)隊(duì)來講必要性就很低了,想想自己也是這么過來的,只不過那個(gè)時(shí)候公司的數(shù)據(jù)量不是很大,數(shù)據(jù)結(jié)構(gòu)簡單,ORACLE就是那個(gè)時(shí)候的數(shù)據(jù)湖。
但現(xiàn)在是數(shù)字化時(shí)代,數(shù)據(jù)的應(yīng)用場景逐漸向復(fù)雜數(shù)據(jù)(比如非結(jié)構(gòu)化數(shù)據(jù))的快速探索、分析、推薦和預(yù)測等方向延伸,這些場景不確定性很強(qiáng),數(shù)據(jù)的維度很多,導(dǎo)致公共層很難提前準(zhǔn)備,數(shù)據(jù)湖顯然更適應(yīng)了這些數(shù)據(jù)和應(yīng)用的特點(diǎn)。
但我們也知道,數(shù)倉公共層必然還是需要的,因?yàn)榉€(wěn)定的報(bào)表不會(huì)消失,問題只在于度的問題,數(shù)倉公共層不要過度設(shè)計(jì),也許30%的公共層比例是合理的,未來也許更低,當(dāng)你家的公共層模型比例超過60%的時(shí)候,就要想想是否出現(xiàn)了問題。
那這個(gè)度在哪里呢?
至少不能簡單的使用公共層模型覆蓋度、復(fù)用度這種技術(shù)指標(biāo)來指導(dǎo)公共層模型的建設(shè),因?yàn)閺?fù)用度高并不意味著全局價(jià)值最大,甚至較大影響業(yè)務(wù)的拓展,這里給出公共層模型建設(shè)的三個(gè)策略:
第一種是技術(shù)驅(qū)動(dòng),就是某些數(shù)據(jù)量特別大的表如果各個(gè)應(yīng)用單獨(dú)匯總會(huì)嚴(yán)重影響整個(gè)系統(tǒng)穩(wěn)定的,這些表需通過匯總等手段構(gòu)成公共層然后統(tǒng)一對外提供。
第二種是管理驅(qū)動(dòng),就是由于數(shù)據(jù)一致性等經(jīng)營管理需要必需確保數(shù)據(jù)的源頭唯一的,這個(gè)時(shí)候公共層的建設(shè)也很有必要。
第三種是業(yè)務(wù)驅(qū)動(dòng),就是那些被存量業(yè)務(wù)馴化出來的高復(fù)用公共模型(比如項(xiàng)目建設(shè)時(shí)期總結(jié)提煉出來的寬表),或者已經(jīng)被業(yè)務(wù)多次投訴并確認(rèn)為可以通過建立或優(yōu)化公共層模型來解決的。
面對新的業(yè)務(wù)場景,當(dāng)沒法確認(rèn)到底是優(yōu)化公共層模型支撐好還是另起爐灶好的時(shí)候,可以先讓子彈飛一會(huì)兒,直到以上三種情況的出現(xiàn)為止。當(dāng)然如果你的團(tuán)隊(duì)有很厲害的架構(gòu)師并且愿意做公共層模型的工作,那的確可以隨心所欲,因?yàn)橛凶銐虻哪芰磉M(jìn)行全局最優(yōu)的判斷,但大多時(shí)候,我們并不具備這種條件。
我還有一種大膽的設(shè)想,就是除了嚴(yán)肅的報(bào)表,所有的應(yīng)用支撐都不要搞什么公共層模型復(fù)用,自己管自己的就可以了,也許也可以活得很好。?