數據庫是操做型數據庫,數據倉庫是分析型數據庫:數據庫
1. 操做型數據庫
主要用於業務支撐。一個公司每每會使用並維護若干個數據庫,這些數據庫保存着公司的平常操做數據,好比商品購買、酒店預訂、學生成績錄入等;
2. 分析型數據庫
主要用於歷史數據分析。這類數據庫做爲公司的單獨數據存儲,負責利用歷史數據對公司各主題域進行統計分析;oop
1. 數據組成差異 - 數據時間範圍差異
通常來說,操做型數據庫只會存放90天之內的數據,而分析型數據庫存放的則是數年內的數據。這點也是將操做型數據和分析型數據進行物理分離的主要緣由。
2. 數據組成差異 - 數據細節層次差異
操做型數據庫存放的主要是細節數據,而分析型數據庫中雖然既有細節數據,又有彙總數據,但對於用戶來講,重點關注的是彙總數據部分。
操做型數據庫中天然也有彙總需求,但彙總數據自己不存儲而只存儲其生成公式。這是由於操做型數據是動態變化的,所以彙總數據會在每次查詢時動態生成。
而對於分析型數據庫來講,由於彙總數據比較穩定不會發生改變,並且其計算量也比較大(由於時間跨度大),所以它的彙總數據可考慮事先計算好,以免重複計算。
3. 數據組成差異 - 數據時間表示差異
操做型數據一般反映的是現實世界的當前狀態;而分析型數據庫既有當前狀態,還有過去各時刻的快照,分析型數據庫的使用者能夠綜合全部快照對各個歷史階段進行統計分析。
4. 技術差異 - 查詢數據總量和查詢頻度差異
操做型查詢的數據量少而頻率多,分析型查詢則反過來,數據量大而頻率少。要想同時實現這兩種狀況的配置優化是不可能的,這也是將兩類數據庫物理分隔的緣由之一。
5. 技術差異 - 數據更新差異
操做型數據庫容許用戶進行增,刪,改,查;分析型數據庫用戶則只能進行查詢。
6. 技術差異 - 數據冗餘差異
數據的意義是什麼?就是減小數據冗餘,避免更新異常。而如5所述,分析型數據庫中沒有更新操做。所以,減小數據冗餘也就沒那麼重要了。
如今回到開篇是提到的第二個問題"某大公司Hadoop Hive裏的關係表不徹底知足完整/參照性約束,也不徹底知足範式要求,甚至第一範式都不知足。這種狀況正常嗎?",答曰是正常的。由於Hive是一種數據倉庫,而數據倉庫和分析型數據庫的關係很是緊密(後文會講到)。它只提供查詢接口,不提供更新接口,這就使得消除冗餘的諸多措施不須要被特別嚴格地執行了。
7. 功能差異 - 數據讀者差異
操做型數據庫的使用者是業務環境內的各個角色,如用戶,商家,進貨商等;分析型數據庫則只被少許用戶用來作綜合性決策。
8. 功能差異 - 數據定位差異
這裏說的定位,主要是指以何種目的組織起來。操做型數據庫是爲了支撐具體業務的,所以也被稱爲"面向應用型數據庫";分析型數據庫則是針對各特定業務主題域的分析任務建立的,所以也被稱爲"面向主題型數據庫"。優化