在設計數據倉庫模型的時候,最常見的兩種是星型模型與雪花模型。選擇哪一種需要根據業務需求以及性能的多重考量來定。
星型模型
在星型模型當中,一張事實表被若干張維度表所包圍。每一個維度代表了一張表,有主鍵關聯事實表當中的外鍵。
- 所有的事實都必須保持同一個粒度
- 不同的維度之間沒有任何關聯
-

雪花模型
雪花模型是在基於星型模型之上拓展來的,每一個維度可以再擴散出更多的維度,根據維度的層級拆分成顆粒度不同的多張表。
- 優點是減少維度表的數據量,在進行join查詢時有效提升查詢速度
- 缺點是需要額外維護維度表的數量

優劣對比
小結
星型模型的設計方式主要帶來的好處是能夠提升查詢效率,因為生成的事實表已經經過預處理,主要的數據都在事實表里面,所以只要掃描實時表就能夠進行大量的查詢,而不必進行大量的join,其次維表數據一般比較少,在join可直接放入內存進行join以提升效率,除此之外,星型模型的事實表可讀性比較好,不用關聯多個表就能獲取大部分核心信息,設計維護相對比較簡答。
雪花模型的設計方式是比較符合數據庫范式的理念,設計方式比較正規,數據冗余少,但在查詢的時候可能需要join多張表從而導致查詢效率下降,此外規范化操作在后期維護比較復雜。
數據倉庫大多數時候是比較適合使用星型模型構建底層數據Hive表,通過大量的冗余來提升查詢效率,星型模型對OLAP的分析引擎支持比較友好,這一點在Kylin中比較能體現。而雪花模型在關系型數據庫中如MySQL,Oracle中非常常見,尤其像電商的數據庫表。在數據倉庫中雪花模型的應用場景比較少,但也不是沒有,所以在具體設計的時候,可以考慮是不是能結合兩者的優點參與設計,以此達到設計的最優化目的。

