資料庫 與 數據倉庫的本質區別是什麼?


我看了下目前的答案,大家從理論層面把資料庫和數據倉庫的本質區別解釋的很全面了。

資料庫:傳統的關係型資料庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。

數據倉庫:數據倉庫系統的主要應用主要是OLAP(On-Line Analytical Processing),支持複雜的分析操作,側重決策支持,並且提供直觀易懂的查詢結果。

我嘗試著再補充些具體的事例來說明,這樣更可以幫助大家更好理解一些。

舉個最常見的例子,拿電商行業來說好了。

基本每家電商公司都會經歷,從只需要業務資料庫到要數據倉庫的階段。

  • 電商早期啟動非常容易,入行門檻低。找個外包團隊,做了一個可以下單的網頁前端 + 幾台伺服器 + 一個MySQL,就能開門迎客了。這好比手工作坊時期。

  • 第二階段,流量來了,客戶和訂單都多起來了,普通查詢已經有壓力了,這個時候就需要升級架構變成多台伺服器和多個業務資料庫(量大+分庫分表),這個階段的業務數字和指標還可以勉強從業務資料庫里查詢。初步進入工業化。

  • 第三個階段,一般需要 3-5 年左右的時間,隨著業務指數級的增長,數據量的會陡增,公司角色也開始多了起來,開始有了 CEO、CMO、CIO,大家需要面臨的問題越來越複雜,越來越深入。高管們關心的問題,從最初非常粗放的:「昨天的收入是多少」、「上個月的 PV、UV 是多少」,逐漸演化到非常精細化和具體的用戶的集群分析,特定用戶在某種使用場景中,例如「20~30歲女性用戶在過去五年的第一季度化妝品類商品的購買行為與公司進行的促銷活動方案之間的關係」。

這類非常具體,且能夠對公司決策起到關鍵性作用的問題,基本很難從業務資料庫從調取出來。原因在於:

  1. 業務資料庫中的數據結構是為了完成交易而設計的,不是為了而查詢和分析的便利設計的。
  2. 業務資料庫大多是讀寫優化的,即又要讀(查看商品信息),也要寫(產生訂單,完成支付)。因此對於大量數據的讀(查詢指標,一般是複雜的只讀類型查詢)是支持不足的。

而怎麼解決這個問題,此時我們就需要建立一個數據倉庫了,公司也算開始進入信息化階段了。數據倉庫的作用在於:

  1. 數據結構為了分析和查詢的便利;
  2. 只讀優化的資料庫,即不需要它寫入速度多麼快,只要做大量數據的複雜查詢的速度足夠快就行了。

那麼在這裡前一種業務資料庫(讀寫都優化)的是業務性資料庫,後一種是分析性資料庫,即數據倉庫。

最後總結一下:

資料庫 比較流行的有:MySQL, Oracle, SqlServer等

數據倉庫 比較流行的有:AWS Redshift, Greenplum, Hive等

這樣把數據從業務性的資料庫中提取、加工、導入分析性的資料庫就是傳統的 ETL 工作。現在也有一些新的方法,這展開說又是另一件事情了,有機會再詳細說說。


有兩個層面/角度來回答這個有趣的問題:

1,邏輯層面/概念層面:資料庫和數據倉庫其實是一樣的或者及其相似的,都是通過某個資料庫軟體,基於某種數據模型來組織、管理數據。但是,資料庫通常更關注業務交易處理(OLTP),而數據倉庫更關注數據分析層面(OLAP),由此產生的資料庫模型上也會有很大的差異。

資料庫通常追求交易的速度,交易完整性,數據的一致性,等等,在資料庫模型上主要遵從範式模型(1NF,2NF,3NF,等等),從而儘可能減少數據冗餘,保證引用完整性;而數據倉庫強調數據分析的效率,複雜查詢的速度,數據之間的相關性分析,所以在資料庫模型上,數據倉庫喜歡使用多維模型,從而提高數據分析的效率。

2,產品實現層面:資料庫和數據倉庫軟體是有些不同的,資料庫通常使用行式存儲,如SAP ASE,Oracle, Microsoft SQL Server,而數據倉庫傾向使用列式存儲,如SAP IQ,SAP HANA


資料庫向左, 數據倉庫向右. 【傳統觀念,隨著大數據概念的介入,應該會有所不同】

本來想OLAP啊反範式化啊點陣圖索引啊螺旋式開發啊啥啥的好好回答一下這個問題。

看了一下我2003年寫的東西,如果不是我失憶了,那就是:「儘管很多東西你早就知道了,卻在多年的實踐中才不同程度地有所理解。」 所以我不成熟地希望大家還是多多實踐吧,盡量少花些時間在這些諸如本質啊區別啊啥啥的問題上面。當然,如果你精通ORACLE,我支持你去了解ORACLE, DB2, MS SQL, MYSQL之間有什麼區別【希望大家能正面理解我的這番話】。


1、oltp面對業務,一個是對業務分析

2、oltp是3NF設計,olap是星形模型設計.最近一個新同事問我統計的時候為什麼不能直接走ods,要做一些數據倉庫的模型,我覺得很重要的一點就是生產庫業務複雜,3nf的設計,一般人光理解這個業務都需要花很多時間,更別說使用了。因此需要能抽象出一個簡單易懂的模型

3、oltp,涉及到增刪改查,都是小數據量的操作,olap查詢為主,分析的基數很大

4、使用者也不同,一個是面對業務人員,一個是決策人員

5、oltp強調並發性,olap查詢

6、oltp針對當天的數據進行操作,olap針對當前和歷史數據做處理


簡而言之,資料庫是面向事務的設計,數據倉庫是面向主題設計的。 資料庫一般存儲在線交易數據,數據倉庫存儲的一般是歷史數據。 資料庫設計是盡量避免冗餘,一般採用符合範式的規則來設計,數據倉庫在設計是有意引入冗餘,採用反範式的方式來設計。 資料庫是為捕獲數據而設計,數據倉庫是為分析數據而設計,它的兩個基本的元素是維表和事實表。維是看問題的角度,比如時間,部門,維表放的就是這些東西的定義,事實表裡放著要查詢的數據,同時有維的 ID 。 單從概念上講,有些晦澀。任何技術都是為應用服務的,結合應用可以很容易地理解。以銀行業務為例。資料庫是事務系統的數據平台,客戶在銀行做的每筆交易都會寫入資料庫,被記錄... 簡而言之,資料庫是面向事務的設計,數據倉庫是面向主題設計的。

資料庫一般存儲在線交易數據,數據倉庫存儲的一般是歷史數據。資料庫設計是盡量避免冗餘,一般採用符合範式的規則來設計,數據倉庫在設計是有意引入冗餘,採用反範式的方式來設計。資料庫是為捕獲數據而設計,數據倉庫是為分析數據而設計,它的兩個基本的元素是維表和事實表。維是看問題的角度,比如時間,部門,維表放的就是這些東西的定義,事實表裡放著要查詢的數據,同時有維的ID。單從概念上講,有些晦澀。任何技術都是為應用服務的,結合應用可以很容易地理解。以銀行業務為例。資料庫是事務系統的數據平台,客戶在銀行做的每筆交易都會寫入資料庫,被記錄下來,這裡,可以簡單地理解為用資料庫記帳。數據倉庫是分析系統的數據平台,它從事務系統獲取數據,並做匯總、加工,為決策者提供決策的依據。比如,某銀行某分行一個月發生多少交易,該分行當前存款餘額是多少。如果存款又多,消費交易又多,那麼該地區就有必要設立ATM了。顯然,銀行的交易量是巨大的,通常以百萬甚至千萬次來計算。事務系統是實時的,這就要求時效性,客戶存一筆錢需要幾十秒是無法忍受的,這就要求資料庫只能存儲很短一段時間的數據。而分析系統是事後的,它要提供關注時間段內所有的有效數據。這些數據是海量的,匯總計算起來也要慢一些,但是,只要能夠提供有效的分析數據就達到目的了。

數據倉庫,是在資料庫已經大量存在的情況下,為了進一步挖掘數據資源、為了決策需要而產生的,它決不是所謂的「大型資料庫」。那麼,數據倉庫與傳統資料庫比較,有哪些不同呢?

讓我們先看看關於數據倉庫的定義:面向主題的、集成的、與時間相關且不可修改的數據集合。

歡迎登錄長風網獲取最新物流資訊。


  1. 數據倉庫是一種結構體系,而資料庫是一種具體技術。這就是最根本的區別(也是數據倉庫這個東西提出初期被人瘋狂嘲諷的原因)。

MySQL這個資料庫和Apache Hive這個數據倉庫為例。這裡Hive事實上就是一個很宏大的「體系結構」。它可以把元數據保存在MySQL、Oracle或者Derby這些具體的資料庫「技術」里;它在進行查詢時把SQL轉化成MapReduce job,這裡它又用到了MapReduce計算模型這種「技術」。

再抽象一下,數據倉庫和資料庫的關係就像川菜和辣椒的關係一樣。當我吃川菜的時候,刺激我的主要是川菜的辣。但是世界使用辣椒的門派也很多,韓國料理里也有辣椒,但是這和川菜就是不一樣。川菜不僅僅使用了辣椒,還有其他烹飪技法使它具有鮮明特徵。

而單獨使用MySQL雖然可以查一查簡單東西,但是不能達到數據倉庫「支持決策」這一高度。就像單獨使用辣椒可以爽爽,但是沒有辦法搞出川菜這個能做招牌的地方菜系。從高處看這些概念會好一點:數據倉庫是伴隨著信息與決策支持系統的發展過程產生的,而資料庫並不是

2.資料庫/數據倉庫的用戶群體和工作場景不同

資料庫屬於操作型系統,數據倉庫屬於分析性系統。操作性系統(資料庫)的用戶群體是大量客戶,每次操作修改的數據量非常小,對時間敏感度非常高。分析性系統(數據倉庫)的用戶是決策人員,他們不修改數據但是會分析大量數據,而且他們對得出結果的時間不敏感。

比如說微博每天有上千萬用戶在發微博、修改個人資料,每個人都只修改屬於自己的那幾條數據,同時希望修改後立刻可以用。而為數不多的決策者希望通過微博進行挖掘,他們不可能修改用戶數據,但是他們會訪問大量數據。最後他們對時間不敏感,等到一個結果跑5分鐘到1小時都可以的。

你可以看出這兩種需求根本上是不一樣的。所以操作型處理及數據要和分析型處理及數據分開。


數據倉庫(Data Warehouse)是一個面向主題的(Subject Oriented)、集成的(Integrate)、相對穩定的(Non-Volatile)、反映歷史變化(Time Variant)的數據集合,用於支持管理決策。

所謂的

(1) 面向主題:指數據倉庫中的數據是按照一定的主題域進行組織。

(2)集成:指對原有分散的資料庫數據經過系統加工, 整理得到的消除源數據中的不一致性。

(3)相對穩定:指一旦某個數據進入數據倉庫以後只需要定期的載入、刷新。

(4)反映歷史變化:指通過這些信息,對企業的發展歷程和未來趨勢做出定量分析預測。

數據倉庫建設是一個工程,是一個過程,而不是一種可以購買的產品。企業數據處理方式是以聯機事務處理形式信息,並利用信息進行決策;在信息應用過程中管理信息。

數據倉庫的出現,並不是要取代資料庫。目前,大部分數據倉庫還是用關係資料庫管

理系統來管理的。數據倉庫與資料庫的主要區別在於:

(1)資料庫是面向事務的設計,數據倉庫是面向主題設計的。

(2)資料庫一般存儲在線交易數據,數據倉庫存儲的一般是歷史數據。

(3)資料庫設計是盡量避免冗餘,數據倉庫在設計是有意引入冗餘。

(4)資料庫是為捕獲數據而設計,數據倉庫是為分析數據而設計。

簡而言之,資料庫是面向事務的設計,數據倉庫是面向主題設計的。

資料庫一般存儲在線交易數據,數據倉庫存儲的一般是歷史數據。

資料庫設計是盡量避免冗餘,一般採用符合範式的規則來設計,數據倉庫在設計是有意引入冗餘,採用反範式的方式來設計。

資料庫是為捕獲數據而設計,數據倉庫是為分析數據而設計,它的兩個基本的元素是維表和事實表。維是看問題的角度,比如時間,部門,維表放的就是這些東西的定義,事實表裡放著要查詢的數據,同時有維的ID。

單從概念上講,有些晦澀。任何技術都是為應用服務的,結合應用可以很容易地理解。以銀行業務為例。資料庫是事務系統的數據平台,客戶在銀行做的每筆交易都會寫入資料庫,被記錄下來,這裡,可以簡單地理解為用資料庫記帳。數據倉庫是分析系統的數據平台,它從事務系統獲取數據,並做匯總、加工,為決策者提供決策的依據。比如,某銀行某分行一個月發生多少交易,該分行當前存款餘額是多少。如果存款又多,消費交易又多,那麼該地區就有必要設立ATM了。

顯然,銀行的交易量是巨大的,通常以百萬甚至千萬次來計算。事務系統是實時的,這就要求時效性,客戶存一筆錢需要幾十秒是無法忍受的,這就要求資料庫只能存儲很短一段時間的數據。而分析系統是事後的,它要提供關注時間段內所有的有效數據。這些數據是海量的,匯總計算起來也要慢一些,但是,只要能夠提供有效的分析數據就達到目的了。

數據倉庫,是在資料庫已經大量存在的情況下,為了進一步挖掘數據資源、為了決策需要而產生的,它決不是所謂的「大型資料庫」。那麼,數據倉庫與傳統資料庫比較,有哪些不同呢?讓我們先看看W.H.Inmon關於數據倉庫的定義:面向主題的、集成的、與時間相關且不可修改的數據集合。

「面向主題的」:傳統資料庫主要是為應用程序進行數據處理,未必按照同一主題存儲數據;數據倉庫側重於數據分析工作,是按照主題存儲的。這一點,類似於傳統農貿市場與超市的區別—市場裡面,白菜、蘿蔔、香菜會在一個攤位上,如果它們是一個小販賣的;而超市裡,白菜、蘿蔔、香菜則各自一塊。也就是說,市場里的菜(數據)是按照小販(應用程序)歸堆(存儲)的,超市裡面則是按照菜的類型(同主題)歸堆的。

「與時間相關」:資料庫保存信息的時候,並不強調一定有時間信息。數據倉庫則不同,出於決策的需要,數據倉庫中的數據都要標明時間屬性。決策中,時間屬性很重要。同樣都是累計購買過九車產品的顧客,一位是最近三個月購買九車,一位是最近一年從未買過,這對於決策者意義是不同的。

「不可修改」:數據倉庫中的數據並不是最新的,而是來源於其它數據源。數據倉庫反映的是歷史信息,並不是很多資料庫處理的那種日常事務數據(有的資料庫例如電信計費資料庫甚至處理實時信息)。因此,數據倉庫中的數據是極少或根本不修改的;當然,向數據倉庫添加數據是允許的。

數據倉庫的出現,並不是要取代資料庫。目前,大部分數據倉庫還是用關係資料庫管理系統來管理的。可以說,資料庫、數據倉庫相輔相成、各有千秋。

補充一下,數據倉庫的方案建設的目的,是為前端查詢和分析作為基礎,由於有較大的冗餘,所以需要的存儲也較大。為了更好地為前端應用服務,數據倉庫必須有如下幾點優點,否則是失敗的數據倉庫方案。

1.效率足夠高。客戶要求的分析數據一般分為日、周、月、季、年等,可以看出,日為周期的數據要求的效率最高,要求24小時甚至12小時內,客戶能看到昨天的數據分析。由於有的企業每日的數據量很大,設計不好的數據倉庫經常會出問題,延遲1-3日才能給出數據,顯然不行的。

2.數據質量。客戶要看各種信息,肯定要準確的數據,但由於數據倉庫流程至少分為3步,2次ETL,複雜的架構會更多層次,那麼由於數據源有臟數據或者代碼不嚴謹,都可以導致數據失真,客戶看到錯誤的信息就可能導致分析出錯誤的決策,造成損失,而不是效益。

3.擴展性。之所以有的大型數據倉庫系統架構設計複雜,是因為考慮到了未來3-5年的擴展性,這樣的話,客戶不用太快花錢去重建數據倉庫系統,就能很穩定運行。主要體現在數據建模的合理性,數據倉庫方案中多出一些中間層,使海量數據流有足夠的緩衝,不至於數據量大很多,就運行不起來了。


其實技術上數據倉庫也是資料庫。準備的說,傳統系統(OLTP)是面向業務存儲,比如ERP,OA等,但由於數據分析的需求,出現"面向分析存儲「(OLAP),被稱作數據倉庫。傳統資料庫的技術面向trans下的數據一致性,數據倉庫面向的是查詢性能的優化。但目前隨著互聯網的發展,No-SQL等技術面向非結構化存儲的出現,基本上來說是資料庫和數據倉庫的中間或衍生狀態,在」一致性「相對不重要的情況下解決海量數據的查詢和存儲問題。


概括而言:資料庫內的資料是是面向業務的,即所謂的OLTP(聯機事務處理) ,數據倉庫里的東東呢是用來支持決策的,也就是OLAP(聯機事物分析)。

往細里說:資料庫里存放的是細節化的信息,而且是二維信息(所謂二維的數據結構,最簡單的一種理解就是數據以表的形式組織),有很多基本資料和交易數據。

數據倉庫是里存儲的是摘要化的信息,並且是多維的信息(至於多維的數據結構理解起來可能比較抽象,可以想像成很多張表以一定順序摞成一堆,這一堆又以另一種順序放成一堆,以此類推),數據倉庫里這些多維的信息是數據挖掘的原材料(注意是數據倉庫里的數據而不是資料庫)。

一句話:數據倉庫是由許多的資料庫組成,也就是數據倉庫相當於一個宮殿,而資料庫是宮殿里的房間嚕^_^


一個用於處理業務數據, 一個基於業務數據進行行業分析


資料庫和數據倉庫的區別可大了。

1. 資料庫(關係型資料庫)用於事務性數據處理,如交易訂單之類。存儲結構是表和欄位。以及表間的關係。適用於業務型,交易型數據記錄和查詢。不適用與數據的多維分析。

2. 數據倉庫適用於業務數據的多維分析。實現方式是建立多維模型,維度大綱。數據的存儲結構是多維數據立方體Cube,存儲形式是各維度成員交叉產生的單元格。

判斷一個數據倉庫軟體是否具有最基本的功能基於以下條件:

1. 多維數據倉庫產品是否支持維度建模和維度大綱管理;

2.多維數據倉庫是否具有計算引擎。是否支持聚集計算、成員公示計算和業務規則計算。計算腳本是否支持MDX語法標準。


資料庫是處理數據的工具。

數據倉庫是用來分析並用戶決策支持的存儲數據的容器。


本質有區別。

1:資料庫是個軟體,是技術層面的。知名的有,Oracle,MySQL,MS SQL,DB2等等。

2:數據倉庫是業務層面的,是給分析和展示,提供數據支撐,的一個數據平台。

3:數據倉庫一般是由資料庫來實現的。按照「粒度」和業務邏輯,把數據梳理成對應的模塊,存放在數據倉庫中。分析需求來了的時候,直接去數據倉庫里拿數據,進行分析就行了。


簡單的問題簡單回答 -

數據倉庫本身就是一個 OLAP 資料庫。

在 A (分析)上著重使用更多資源以便支持企業決策,使用更多資源,量級不同,用了「倉庫」這麼一個比「集市」和「庫」再大一些的量級名稱。

為什麼需要大,因為分析需求所以它裝載的是來自不同數據源(各系統 OLAP 資料庫,人工數據,少數 OLTP,等等...)的交叉數據集合。

需要更多類比幫助理解的話可以看下我的博客:

如何靠建數據倉庫發家


資料庫:面向業務,保存事務型數據

數據倉庫:面向主題(數據分析的需求目的),保存分析型數據


A Data warehouse is a repository of information collected form multiple source, stored under a unified schema, and that usually resides at a single site.


當我們面對大數據的多樣性,在儲存和處理這大數據時,當數據為結構化數據,來自傳統的數據源,則採用數據倉庫技術,接下為大家詳細介紹數據倉庫。

結構化數據,包括企業的ERP、CRM、SCM和人力資源管理等應用系統,以及支持日常業務應用的核心系統等。這些系統產出的結構化數據保留在關係資料庫內,按照事先設定的格或結構所組成的,但是,一個企業可能同時擁有好幾個資料庫,若這些資料庫間各自獨立,數據就等同於被拆散在不同的數據中,因此將會很難拼湊出營運的全貌,此時,數據倉庫就變成了重要的角色。

數據倉庫是指具有主題導向、整合性、長期性與穩定性的數據群組,是經過處理整合的,且容量特別大的關係資料庫,用以儲存決策支持系統所需的數據,供決策支持和數據分析使用。

資料庫是按照數據結構來組織、存儲和管理數據的建立在計算機存儲設備上的倉庫,通俗來說,可以視電子化的文件櫃——存儲電子文件的處所,用戶可以對文件中數據進行新增、截取、更新、刪除等操作。

資料庫與倉庫之間的主要區別:

1.資料庫主要是面向事務的設計,面是數據倉庫主要是面向主題的設計。

2.資料庫在設計之中,是盡量避免冗餘的,主要採用範式的規則來設計,數據倉庫在設計是有意引入冗餘,採用反範式的設計。

3.資料庫一般存儲的是在線的交易數據,數據倉庫存儲的一般是歷史數據。

資料庫主要是用來存儲數據,對數據進行增刪改查的管理,數據倉庫針對的主要是服務於大數據,側重於數據分析與決策支持,數據分析中經常會犯哪些錯誤,我們應該這樣來解決! - 大數據 多智時代


個人理解

資料庫是個工具,就是軟體。

數據倉庫是資料庫的其中一種設計模式,目的是方便查詢。就是為了寫sql更方便,查的速度更快。

歡迎指正。


數據倉庫是過程,資料庫是結果


資料庫和數據倉庫本質上個人覺得沒什麼區別,同樣都是存儲數據。數據倉儲主要是在資料庫上規範相關數據,以方便後續對數據的一些操作。


技術層面或者說代碼構成上沒什麼區別,主要還是使用途徑上,一個是OLTP一個是OLAP


推薦閱讀:

TAG:資料庫 | 數據挖掘 | 數據分析 | 資料庫管理員DBA | 數據倉庫 |