<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          看數(shù)據(jù)模型界兩大長老的神仙打架

          共 3085字,需瀏覽 7分鐘

           ·

          2020-07-28 16:49

          點擊藍色“有關(guān)SQL”關(guān)注我喲

          加個“星標(biāo)”,天天與10000人一起快樂成長

          如果有人問起,“L,對于編程,你最后悔的一件事情是什么?”我只能回答:“數(shù)據(jù)結(jié)構(gòu)”。

          故事,要從我最初學(xué)編程的動機,開始說起。

          踏入編程這個行當(dāng),我是從Visual FoxPro 開始的。

          上大學(xué)那會,本科學(xué)農(nóng),農(nóng)學(xué)是養(yǎng)花養(yǎng)草的專業(yè),和計算機一點兒關(guān)系沒有。但學(xué)校是有規(guī)定,大一大二要通過計算機二級。被教育了12年,別的本事沒有,要說證書這事,那是相當(dāng)熱衷。所以早早就把 VFP 學(xué)好了,自然考試也輕松通過。

          通過也就通過了,也沒留下特別的情感。轉(zhuǎn)機出現(xiàn)在大二,那年學(xué)統(tǒng)計,其中有各種公式,各種參數(shù),紛繁復(fù)雜,作業(yè)題不難,但很多推演特別麻煩。那天做完統(tǒng)計學(xué)作業(yè),正在圖書館發(fā)呆,過了2,4,6級,發(fā)現(xiàn)人生有些空虛,接下來還有2年半的時間要揮霍,不禁要焦慮,接下來該做什么,才能證明自己?

          人生的苦惱,逃不過三大問題,我是誰,我從哪里來,要到哪里去

          眼瞅著瞅著,就瞄到了作業(yè)題上去。這些可惡的參數(shù),每次都要手寫,一寫就是一個長本,跟寫舞臺劇臺詞一樣。那有沒有好一點的方法來求解最終的答案呢?

          就跟棒球突然擊中村上春樹文藝細胞一般,慵懶的午覺,加上一口激爽的冰咖,瞬間蟄醒了已充分回血的大腦。忽然就想到了VFP中的表單,想到了類里面的變量,這些變量不就是參數(shù)嘛,表單不就是每次作業(yè)題的草稿嘛。至于公式,那就是方法嘛。我把公式,參數(shù),建成類,最終結(jié)果就讓計算機程序去算。為什么我要用筆去推算呢?

          慢慢的思路磨就出來,于是,說干就干,到機房,插上1.44MB的磁盤,一個下午,把指數(shù)平滑公式給寫好了。接下來的作業(yè),只要輸入表單對應(yīng)參數(shù)值,按下計算按鈕,結(jié)果就出來了。

          從此,作業(yè)變成了分析需求,編程成了我真正的作業(yè)。

          你們看,我開始編程時,就在解決一些實際問題,將作業(yè)計算中的定量模型,抽象出K-V的數(shù)據(jù)模型,而計算公式則抽象出函數(shù)。

          現(xiàn)在回首,我依然對廣義的數(shù)據(jù)結(jié)構(gòu)和算法抱著極高的敬畏。同時,我也慶幸,我掌握了解決信息領(lǐng)域的數(shù)據(jù)結(jié)構(gòu)與算法,即關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)模型。

          如果說,廣義的數(shù)據(jù)結(jié)構(gòu),比如鏈表,平衡樹和圖等,是一切編程的基礎(chǔ),那么理解RDBMS的“數(shù)據(jù)結(jié)構(gòu)”,比如范式,星型,雪花型,大寬表等,就是叱咤信息領(lǐng)域的基礎(chǔ)。無論你如何努力,都不會精通,卻可以解決無數(shù)實用的問題,帶來極大的心理成就感和滿足。

          為方便大家直觀地感受數(shù)據(jù)模型,在這兒出道題,比如對比雙11,雙12等前后價格波動,引起的銷量變化。分享下,你會如何涉及表結(jié)構(gòu),來滿足分析的需求。

          要做好這類數(shù)據(jù)分析的建模工作,離不開討論 Kimball 與 Inmon 的數(shù)據(jù)模型。兩種截然不同的模型,帶給項目的便利與挑戰(zhàn),也是大不同。

          當(dāng)然還有諸如 Data Vault 與 Anchor 模型等等

          首先從架構(gòu)說起


          上圖,是 Inmon 的集線器架構(gòu)圖。數(shù)據(jù)倉庫,并不是 Inmon 理論的交付產(chǎn)品,它只是一個集企業(yè)所有關(guān)鍵實體、業(yè)務(wù)流程數(shù)據(jù)于一體的存儲。面對各個部門自己的分析需求,數(shù)據(jù)倉庫最終還會繼續(xù)分流出各個業(yè)務(wù)需要的數(shù)據(jù)集市,所有單獨的業(yè)務(wù)都從分配到的數(shù)據(jù)集市中抽取數(shù)據(jù)。

          從這個架構(gòu)圖,很容易看出,數(shù)據(jù)倉庫只是負(fù)責(zé)收集數(shù)據(jù),類似集線器,最終還是要把數(shù)據(jù)分流出去。

          Kimball 的架構(gòu)就不一樣了。如下圖所示,他也有一個大的數(shù)據(jù)倉庫,但少了數(shù)據(jù)集市的概念。

          ?

          在Kimball的理論模型中,數(shù)據(jù)集市從來不是正規(guī)的交付物,而是ETL過程中自然產(chǎn)生的副產(chǎn)品。即ETL將業(yè)務(wù)數(shù)據(jù)集中抽到 Staging 時,會將數(shù)據(jù)按照實體,業(yè)務(wù)流程打包成一個ODS層(Operational Data Store),任何單個業(yè)務(wù)部門,完全可以從ODS中查詢數(shù)據(jù)。功能上類似于 Inmon 的數(shù)據(jù)集市。

          最終數(shù)據(jù)匯總到數(shù)據(jù)倉庫時,天然就帶有企業(yè)全局屬性。只見樹木不見森林的尷尬,就被化解了。好比,面臨企業(yè)利潤的下滑,我們就能從成本,訂單量,單價上來做多維度分析,而不再是僅僅盯著訂單量一個維度去看。

          所以,Kimball 的理論,更多是數(shù)據(jù)從局部流向整體的策略,最終交付物,數(shù)據(jù)倉庫就像是企業(yè)數(shù)據(jù)流總線,誰要誰取,不必切換多個數(shù)據(jù)庫。

          再對比數(shù)據(jù)模型的落地

          曾經(jīng)有位同事問我,為什么我們的表,設(shè)計了很多冗余字段,而不是嚴(yán)格按照三范式設(shè)計呢?其實答案就是 Kimball 的維度模型使然。在 Kimball 總線架構(gòu)圖中,我特意用星型模型標(biāo)注了數(shù)據(jù)倉庫的 schema.

          很好看懂,中間一顆星,周圍直聯(lián)其他星星,有且只有一級聯(lián)系。這就是 Kimball 數(shù)據(jù)模型的精髓所在。與 Inmon 最大的區(qū)別,也就在這里。Inmon 的數(shù)據(jù)模型都是ER模型,范式用到了極致。

          我們來看 Kimball 的星型模型維度建模:


          很直觀,圍繞著SalesOrder(銷售訂單)業(yè)務(wù),假設(shè)有三個維度(即影響訂單的三個因素,實際上遠不止3個,300個都有,互聯(lián)網(wǎng)甚至還有3000個)Employee, Time, Components,即人,貨,時。

          人的維度,還包括了人所在的部門,地址和職級;時間維度,算簡單的一個,實際應(yīng)用中,會有多個記賬周期,時間略有復(fù)雜;貨的維度,就是商品,有廠家,地址,廠長和商品本身的屬性,大小,顏色等等。

          這就是很多入門的同學(xué)迷糊的地方,為什么在一個表里,會有很多看似冗余的數(shù)據(jù),為什么不按照三范式拆出來呢?這里有個特別重要的原理,那就是空間換時間。

          當(dāng)所有的屬性都拿來做維度分析時,為了節(jié)省Join的時間,通常把這些維度屬性預(yù)先計算好。即時查詢分析,用GroupBy去隨機分組統(tǒng)計數(shù)據(jù),假如沒有合適的索引,會非常慢。為了提高效率,我們只能把這些組合的統(tǒng)計與聚合,預(yù)先計算好,存起來。大部分的 OLAP 引擎,都是基礎(chǔ)這個原理,比如SQL Server Cube, Kylin等。

          Kimball 給這種數(shù)據(jù)模型,起了個名字,“星型模型”。作為最終的交付產(chǎn)品,是數(shù)據(jù)倉庫的靈魂。

          Kimball 理論也沒有放棄數(shù)據(jù)集市,只不過他將數(shù)據(jù)集市放在ETL階段實現(xiàn)了,用的是另外一種模型,叫做“雪花模型”。功能與 Inmon 的數(shù)據(jù)集市類似,實際上,數(shù)據(jù)模型也一致,就是標(biāo)準(zhǔn)的ER模型,即三范式結(jié)構(gòu)。


          人的維度上,只保留人本身的屬性,比如性別,身高,年齡等,其他附屬屬性,比如地址,部門,職級,都分別存在不同的子表里面。其他兩個維度也一樣,自留屬性與附加屬性都分別存儲。這樣一個壞處,就是Join比較多,而且容易造成性能緩慢。

          那么現(xiàn)實中,我們該用哪種理論來設(shè)計數(shù)據(jù)倉庫的架構(gòu)呢,用哪種數(shù)據(jù)模型來建模呢

          現(xiàn)實世界沒有銀彈,一切取決于所在業(yè)務(wù)的復(fù)雜度。Kimball 理論顯然更適合BI套件,但留下冗余數(shù)據(jù)處理的復(fù)雜;Inmon 解決了數(shù)據(jù)一致性問題,但性能又是老大難的問題。

          順便說下,阿里巴巴的大數(shù)據(jù)實踐,在第三階段,也采用了 Kimball 數(shù)據(jù)模型方法論??梢?,即便是在互聯(lián)網(wǎng)應(yīng)用,數(shù)倉的眾多模型也是通用的。具體參考這本書《大數(shù)據(jù)之路-阿里巴巴大數(shù)據(jù)實踐》



          --完--





          往期精彩:


          本號精華合集(二)

          如何寫好 5000 行的 SQL 代碼

          如何提高閱讀 SQL 源代碼的快感

          我在面試數(shù)據(jù)庫工程師候選人時,常問的一些題

          零基礎(chǔ) SQL 數(shù)據(jù)庫小白,從入門到精通的學(xué)習(xí)路線與書單









          瀏覽 63
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧洲秘 AV一区二区三区胖子 | 黄色欧美在线 | 欧美日韩男男 | 国产7区 国产网址 | 国产麻豆影音先锋 |