什么是數據倉庫
數據倉庫(下文以“數倉”稱),顧名思義,存放數據的倉庫,它集合了各個業務系統的數據,以金融業為例,數倉包含了貸款業務、CRM、存款業務等數據。用於企業做數據分析、出報告、做決策;在有些公司也作為各業務系統的數據來源。
從邏輯上理解,數據庫和數倉沒有區別,都是通過數據庫軟件實現存放數據的地方,只不過從數據量來說,數據倉庫要比數據庫更龐大。
他們最主要的區別在於,傳統事務型數據庫如 MySQL 用於做聯機事務處理(OLTP),例如交易事件的發生等;而數據倉庫主要用於聯機分析處理(OLAP),例如出報表等。
有些同學可能想,數據分析、出報表等工作也可以直接通過業務數據庫完成呀,數據倉庫似乎也不是必需品。
如果是簡單的系統,比如初創時期,業務量少,用戶和數據少,幾台服務器和幾個MySQL組成的系統,那確實可以實現。但當業務越做越多,用戶和數據量很龐大,出報表需要跨集群關聯多個系統的數據實現的話,那數倉還是很有必要的。
如果還不能理解,先想幾個問題
-
如果你要的數據分別存放在很多個不同的數據庫,甚至存在於各種日志文件中,你要如何獲取這些數據?
-
如果你從各數據源中取出了你要的數據,但是發現格式不一樣,或者數據類型不一樣,你要怎么規范?
-
如果有一天你需要在業務系統查歷史數據,但發現這些數據被修改過的,你要怎么辦?
-
如果要跨集群關聯各個不同業務系統的數據,要怎么做?怎么優化查詢時間?
-
……
數倉的出現,可以很好的解決上面這些問題。它通過數據抽取和清洗,將各個業務系統的數據整合落地到一個系統(數倉),規范化數據,方便在出報表做決策的時候獲取數據。
數倉的特點
- 集成性
數倉中存儲的數據來源於多個數據源,原始數據在不同數據源中的存儲方式各不相同。要整合成為最終的數據集合,需要從數據源經過一系列抽取、清洗、轉換的過程。
- 穩定性
數倉中保存的數據是歷史記錄,不允許被修改。用戶只能通過分析工具進行查詢和分析。
- 動態性
數倉的數據會隨時間變化而定期更新,這里的定期更新不是指修改數據,一般是將業務系統發生變化的數據定期同步到數倉,和穩定性不沖突。不可更新是針對應用而言,即用戶分析處理時不更新數據。
- 主題性
傳統數據庫對應的業務不同,數倉需要根據需求,將不同數據源的數據進行整合,即數據一般都圍繞某一業務主題進行建模。例如“貸款”主題、“存款”主題等。
數倉分層
數倉一般是分層的,而且各個公司都基於自己的業務場景進行分層,目前的分層可以說是五花八門,沒有標准答案。但是最主流的還是按照這樣進行分層:
可能有些同學又要問了,直接取需要的數據落地到表就行了,為什么要分層?有啥好處?
試想一下,如果不做分層,你按照需求從各個源系統抽取數據落地了一張表,哪一天老板讓你在原來的基礎上加個字段,你怎么做?
或者哪天這張表的數據出問題了,你如何定位是哪個模塊或者環節出了問題?
數倉分層的意義在於
- 減少重復開發,在數據開發的過程中可以產生中間層,將公共邏輯下沉,減少重復計算;
- 清晰數據結構,每個分層分工明確,方便開發人員理解;
- 方便定位問題,通過分層了解數據血緣關系,在出問題的時候通過回溯定位問題;
- 簡單化復雜問題,和分治法思想類似,分而治之,將復雜的問題簡單化,還能解耦
總結
本文簡單介紹了數倉的概念和數倉的作用,以及數倉的分層和分層的優點,也算是簡單的入門。
后續如果有機會,我會繼續產出數倉和大數據相關的文章,如果覺得對你有幫助,可以點個贊再隨手關注,防止迷路。
轉載請注明來源: Author:Maxim
博客園: https://www.cnblogs.com/lyuzt/articles/15155931.html
CDSN: https://blog.csdn.net/weixin_43596734/article/details/119784553