說到數據倉庫,在一年前,個人答案是很是模糊的,在兩年前,我根本不知道數據倉庫的存在。相信大多數的人都是常常接觸數據庫,上大學的時候學過Oracle,MySQL這兩個關係型數據庫,操做着各類增刪改查,如今人們對這種類型的數據庫都稱做傳統數據庫。在以後從事大數據行業了,數據倉庫這幾個字也就總出如今各類博客中,各類技術方案中。如今正在和同事主導公司數據倉庫的設計和搭建工做,因此準備把我這段工程經驗,拿出來分享一下。前端
這裏咱們所指的數據庫,也就是一系列經典的RDBMS,如Oracle,MySQL,SQL Server等關係型數據庫。其中的一些設計過程如 ER圖的設計,邏輯模型的設計,物理模型設計,還有規範化設計 如 至少要符合第一範式,儘可量的去符合第二範式,第三範式等設計細節,這裏就不贅述了,可是以上所提到的都是關係型數據庫的精華。關係型數據庫的用途,如今也會被分紅兩大類
(1)操做型數據庫,主要用於業務支撐。一個公司每每會使用並維護若干個數據庫,這些數據庫保存着公司的平常操做數據,好比商品購買、酒店預訂、學生成績錄入等;
(2)分析型數據庫,主要用於歷史數據分析。這類數據庫做爲公司的單獨數據存儲,負責利用歷史數據對公司各主題域進行統計分析;數據庫
接下來先給你們看百度百科給出的數據倉庫概念
架構
數據倉庫,英文名稱爲Data Warehouse,可簡寫爲DW或DWH。數據倉庫,是爲企業全部級別的決策制定過程,提供全部類型數據支持的戰略集合。它是單個數據存儲,出於分析性報告和決策支持目的而建立。 爲須要業務智能的企業,提供指導業務流程改進、監視時間、成本、質量以及控制。這是一個代碼區塊。
從上面的定義來看,數據倉庫的主要功能是用於作企業各個業務層面的分析,企業層面的數據總集,曾經看過一個博主對數據倉庫的定義是「面向分析的存儲系統」,這個定義是很接地氣的,若是按照這個思路往下去思考,數據倉庫存儲的數據是很龐大的,不是一個單一的業務數據集,不用精準到每一條數據,例如,淘寶在存儲每一條下單記錄的時候,在關係型數據庫中,這條記錄是不會存儲到其餘業務表裏面,只會存儲在下單記錄表裏面,而且下單記錄表裏面不會存儲兩條相同的訂單數據,這是由於關係型數據庫要嚴格知足完整性/參照性約束以及範式設計要求,可是在數據倉庫中,這條訂單數據可能會存在用戶行爲表中,也可能存在下單數據表中。也就是說,數據倉庫不該讓傳統關係數據庫來實現,由於關係數據庫最少也要求知足第1範式,而數據倉庫裏的關係表能夠不知足第1範式。也就是說,一樣的記錄在一個關係表裏能夠出現N次。但因爲大多數數據倉庫內的表的統計分析仍是用SQL,所以不少人把它和關係數據庫搞混了。大數據
面向主題特性是數據倉庫和操做型數據庫的根本區別。操做型數據庫是爲了支撐各類業務而創建,而分析型數據庫則是爲了對從各類繁雜業務中抽象出來的分析主題(如用戶、成本、商品等)進行分析而創建;
集成性是指數據倉庫會將不一樣源數據庫中的數據彙總到一塊兒;
數據倉庫內的數據是面向公司全局的。好比某個主題域爲成本,則全公司和成本有關的信息都會被聚集進來;
較之操做型數據庫,數據倉庫的時間跨度一般比較長。前者一般保存幾個月,後者可能幾年甚至幾十年;
時變性是指數據倉庫包含來自其時間範圍不一樣時間段的數據快照。有了這些數據快照之後,用戶即可將其彙總,生成各歷史階段的數據分析報告;
數據倉庫的核心組件有四個:各源數據庫,ETL,數據倉庫,前端應用。以下圖所示:spa
數據集市是數據倉庫下面衍生出來的概念,在這裏,我舉一個例子來幫助你們理解,咱們能夠把數據倉庫理解成萬達購物中心,其中每層都賣着不一樣種類的商品,其中,一層賣的服裝,二層買的家電....這樣就能夠分紅一層是一個服裝主題的數據集市,二層是家電主題的數據集市。同時能夠理解爲是一種"小型數據倉庫",它只包含單個主題,且關注範圍也非全局。集市能夠分爲兩種,一種是獨立數據集市(independent data mart),這類數據集市有本身的源數據庫和ETL架構;另外一種是非獨立數據集市(dependent data mart),這種數據集市沒有本身的源系統,它的數據來自數據倉庫。當用戶或者應用程序不須要/沒必要要/不容許用到整個數據倉庫的數據時,非獨立數據集市就能夠簡單爲用戶提供一個數據倉庫的"子集"。設計
你們先看這個流程圖,其中的各個步驟,我都會去介紹,其中着重介紹的會是數據倉庫建模和ETL工程,由於,建模是整個數據倉庫的核心,ETL工程師整個數據倉庫中最耗時耗力的。code
今天呢,先簡單介紹一下,鋪墊一下orm