一、從定義來看
-
數據庫,用來存儲結構化的數據,數據庫由多張表組成,每張表都有行列,是二維的。數據都是一行一行的插入到表中。
-
數據倉庫,其實也是存儲數據的,相對於數據庫來說存儲的數據量要更龐大。而且數據倉庫多是用於決策分析的。
舉個例子:
當我們註冊一個賬號的時候,後臺數據庫肯定有一張用戶表,這張表假設有一個用戶名字段和密碼字段。當我們註冊的時候,就會把信息一行一行的插入到表中。而當我們在前端登錄的時候,就需要填寫賬號密碼,這些數據就返回後臺跟用戶表進行比對,如果沒錯,就能登錄,這就是數據庫。數據庫都是跟業務掛鉤的,不同的業務會有不同的數據庫。
由於數據庫是跟業務掛鉤的,那麼每個業務功能就會對應有一個數據庫表,比如登錄功能就會對應有一個用戶表。
但是當我們想統計用戶登錄數量最多在哪個時間段?單單一個用戶表就無法得出結果。所以就需要重新設計數據庫的表結構,增加不同的指標進行分析,這就需要使用數據倉庫。數據倉庫的表是依照業務需求進行設計的。
- 從導入數據的操作來看
1) 數據庫:一定會對要插入的數據進行嚴格的檢查,不滿足要求不能插入。
2) 數據倉庫:對插入的數據不會檢查。Hive數據倉庫會存儲非常大量的數據,一次導入可能就是幾百G,幾十T,hive不檢查是不想讓導入的數據效率過於低下。
二、從整個流程架構來看
借用一張圖來看看:
數據倉庫是面向主題的,什麼是主題?對應上面這張圖就是分析OLAP階段。其實就是爲人做決策分析的。
數據倉庫一般只做查詢,不做修改。數據倉庫的數據是由數據庫中的數據抽取出來的。
因爲數據倉庫的每一個主題,不一定都只對應一個數據庫,每個主題所需要的源數據可能分佈在不同的數據庫中,因此需要對數據庫進行提取轉換再存入到數據倉庫。
對應上圖來說:
源數據OLTP(數據庫)收集存儲各種數據,是底層的原始數據,通過ETL對數據進行抽取、轉換、裝載,放入到ODS層。
ODS層的功能:清洗垃圾數據,更改不能入庫的格式爲數倉支持的格式或優化後的格式。
通過sql、python等手段將數據進行整合、重定義,剔除數據冗餘等,存放到EDW層。
根據業務需求,構建所需的指標,組建分析主題,存放到DM層。
構建面向一個一個不同主題進行分析OLAP,最後進行可視化。
三、實際就是OLTP和OLAP的區別
1、 OLTP(On-Line Transaction Processing),聯機事務處理。針對具體業務在數據庫聯機的日常操作。
2、 OLAP(On-Line Analytical Processing),聯機分析處理。針對主題歷史數據進行決策分析。
數據庫OLTP | 數據倉庫OLAP |
---|---|
操作型 | 分析型 |
實體-關係(E-R)模型 | 星型模型或雪花模型 |
不停存儲新數據 | 存儲歷史數據,不包含最近的數據 |
可更新數據 | 只讀,只追加數據 |
面向事務 | 面向分析 |
數據量相對較小 | 數據量相對較大 |
舉例:用戶登錄驗證 | 舉例:用戶登錄時間分析 |
.