白話數據庫與數據倉庫的區別

在論壇看到很多剛參加工作的朋友問這個問題,很是困惑,不要說沒經驗,就算是有經驗的,應該也對這概念很模糊吧,除了一堆專業術語,還有近幾年涌現出來的概念和產品,我想很多人是很困惑的。記錄下自己作爲非專業人士的一點感想和認知。

數據倉庫到底是什麼,總有個實物吧,接觸了一段時間發現這實物就是數據庫啊,所以又困惑了。因爲我本人也是很討厭專業術語,枯燥的理論這種東西,實在很虛,心裏怎麼都沒有踏實感。我以我的經驗,把我所理解的白話一下。

舉個簡單的例子,假設我們有一家小賣部,每天賣多少,營業額是多少,細心的老闆可能還記個賬,心裏有個底,粗心的連帳都不記。那麼這種規模,完全不需要什麼數據庫,數據倉庫,每天大概掙多少,每年掙多少心裏不是都清清楚楚的。隨着生意好了,我們翻新成一家小超市,賣更多的產品,不用任何市場調研,用常識就能判斷貨品範圍,賣幾個月也能總結出進貨量,出貨量,這時候可能要請幾個工人,賬目就要記起來了,一家店的時候,我們用本子,或者電腦EXCEL記一下也是可以的,但擴張了幾個連鎖店後,如果你是老闆,你也不放心每家店都靠這樣記的吧,然後你就要考慮買POS機,每天的銷售記錄仔仔細細都在系統(數據庫)裏面存着,這就是業務處理數據庫,如果這時候所發生的業務就幾十萬的量,放在一張hist表中,也許下一句複雜點的SQL也能做出一些簡單條件的業績報表,但是如果連鎖超市往超級市場SUPERmart方向發展,那業務處理量大了之後,hist表大到不能直接在上面下複雜SQL了,下了之後超市實時的業務處理會受到影響,而且不能我每次需要這樣的SUMMARY數據都用彪悍的方法來QUERY吧,並且,這時候我們對業績分析的要求也提高了,就不僅僅侷限於按照時間(天,周,月,季度,年度)或按照品種來進行統計,我可能要細分,比如老闆要求你統計每個週六週日下午三點以後的刷卡的交易額,並且其中同一張單子中有購買兩種以上類別(日用,食品,體育等)的單子情況,(這裏我只是舉例,這也涉及到商業智能了,這些分析可能可以給大老闆的一些決策提供一些參考。但是不是所有老闆都會有這方面的想法),但作爲日常的分析,我們可能需要寫一些額外的程序進行數據分析,並且把這些數據保存到另外一個業務分析數據庫中。
至此,我想說明的是,數據倉庫這個概念,跟我們一些企業日常在做的工作,整個界限是模糊的,你可以認爲我們做的工作中,已經有部分工作在系統的進行數據處理的就是在做數據倉庫,不一定是要使用什麼級別的數據庫,或者使用什麼工具。
所以,現在我的超市規模大了,但是我也已經有了數據庫,已經做了一部分有條理或沒條理的數據整理工作,這種工作可能是老闆要求,我們被動去做的,或者我們根據工作經驗主動事先做好的。但現在大老闆是一個有商業思想並且認可BI的理念的,即,他有很高的職位和權利,有號召能力,認可數據的重要性,認可數據分析帶來的參考意義,願意花錢去做。願意花錢去做是最關鍵的,因爲有些公司不大不小的尷尬境地導致很難判斷做了不能確定是否可以帶來明顯的商業利益,那做了幹嘛呢?不如不做。
如果真要做的話,以前做好的東西未必是會擯棄的,因爲在做數據倉庫前,最主要的是分析業務模型,需求,然後按照規則整理數據,可能以前有些模塊已經做得很好就不需要更改了。做的內容主要就是把原來的整理好,沒有做的模塊做好,或者做一些更高層次的數據分析,總結一些有指導意義的KPI值,做一些輔助工具等等。
那麼,作爲學院派,選擇了數據倉庫到底要學習什麼呢?
首先打好基礎,11樓提到的模塊中,ETL是很重要一部分,到底有多少層etl,要做多少數據抽取的工作,取決於需求和業務處理邏輯,一般1,2層,很複雜的來個3,5層不爲過。ETL有很多工具,但說到底就是把數據抽取出來並整理好,比如從事務表中把一天的10多萬筆記錄統計成一條記錄,以日期爲主鍵記錄到另一張以天爲單位的SUMMARY表中,那麼這個過程可以用工具來完成,也可以自己寫程序來完成,存儲過程,C,JAVA都可以,主要就是邏輯嘛。自己寫的好處是知道原理。這裏舉個很簡單的例子,有一次我需要用他部門的數據進行二次SUMMARY,定時任務常常跑不出來,記錄是空的,但是我的程序LOG都正常,後來發現我使用的他部門的這張表是他們用工具從別處同步過來的,配置表數據量不大,每次全部更新是沒問題的,在ORACLE 中也就幾句話:
delete from table_name;
insert into table_name
select * from table_name@otherdb;
commit;
即便沒有DBLINK,用其他方法也很簡單,可偏偏他們使用的這個工具有點小問題,就是沒有把delete和insert放在同一個transaction,導致更新時會出現很短暫的表爲空的情況,在程序性能很差的時候放大爲幾秒鐘,就這幾秒鐘的空檔偶爾被我的程序踩中,所以我更新不到數據。搞笑的是對方的人員只會用工具,對這麼簡單的ORACLE常識都不瞭解,還口口聲聲說他們沒問題,導致我不得不寫個腳本監控抓他現行。
這個例子扯遠了,我是在說基礎知識的重要性,你學習java是好的,c也好,都不會荒廢的。各種數據庫,都玩玩,多寫寫。工具,瞭解就好,不要指望工具幫你解決所有問題。
元數據的管理涉及到數據庫備份等問題,也是具體問題具體分析。
數據分析方面和行業都有關聯,畢竟主要是業務邏輯的事兒。
數據展示倒是很重要的一塊,分析了那麼多,總要有展示的地方,就是報表,報表對有些行業很重要,實時性,準確性,穩定性各方面,但往往又受不到重視,因爲地位上肯定遠不及業務系統的可用性來的高,但花樣很多,開發要求也越來越高,各種的bs的,CS的,二次開發的需求都有可能出來,談不上有經驗沒經驗,需求來了就得上,所以還是多學些技術比較靠譜。sap的bo,ibm的cognos,做的一般都巨貴,一般企業還是自己定製的比較多。
數據倉庫更多的是概念,專業術語,去書城翻翻書看看,連買都不要買。有的企業數據分析也得涉及到unix,perl什麼的,或者可能需要你瞭解甚至做部分的分佈式業務系統的開發,就涉及更多了。所以,你的專業知識學了還是有用的,matlab學好了也是有好處的,比如金融分析師,MBA這類的,不是都用MATLAB嘛!技術的基礎打打好,英語學學好,指不定將來進入哪個行業,用到哪些技能呢,學多了總是相通的。

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