使用odps 和 hive 後對數據庫與數據倉庫概念的理解

暑假實習使用了兩個月的odps ,回學校看了下hadoop 的hive ,讓我對數據庫與數據倉庫增進了一些理解,記錄下來。

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

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

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

數據庫是爲捕獲數據而設計,數據倉庫是爲分析數據而設計,它的兩個基本的元素是維表和事實表。維是看問題的角度,比如時間,部門,維表放的就是這些東西的定義,事實表

裏放着要查詢的數據,同時有維的ID。

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

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

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

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

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

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

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

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

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

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

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

有兩個層面/角度來回答這個有趣的問題:
1
,邏輯層面/概念層面:數據庫和數據倉庫其實是一樣的或者及其相似的,都是通過某個數據庫軟件,基於某種數據模型來組織、管理數據。但是,數據庫通常更關注業務交易處理(OLTP),而數據倉庫更關注數據分析層面(OLAP),由此產生的數據庫模型上也會有很大的差異。
數據庫通常追求交易的速度,交易完整性,數據的一致性,等等,在數據庫模型上主要遵從範式模型(1NF2NF3NF,等等),從而儘可能減少數據冗餘,保證引用完整性;而數據倉庫強調數據分析的效率,複雜查詢的速度,數據之間的相關性分析,所以在數據庫模型上,數據倉庫喜歡使用多維模型,從而提高數據分析的效率。
2
,產品實現層面:數據庫和數據倉庫軟件是有些不同的,數據庫通常使用行式存儲,如SAP ASEOracle, Microsoft SQL Server,而數據倉庫傾向使用列式存儲,如SAP IQSAP HANA。

odps 是阿里把hadoop hive進行修改 的一個數據倉庫,每天比如淘寶的每一筆交易明細實時存在 ocean base數據庫(阿里改的一個數據庫,現在所有淘寶數據都在上面),一般是每天凌晨三點把每天交易數據同步到odps 相對應的交易離線數據表中特定時間分區中,數據技術產品部就是做這些表的分析處理和數據挖掘工作,odps是一個數據分析平臺凡是涉及到對數據處理都必須用到。真正當你在實際工作中要用到你才能對一些概念真正有理解體會。

參考網址:點擊打開鏈接  點擊打開鏈接



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章