韓慶安 珠海世紀(jì)鼎利科技股份有限公司
關(guān)鍵字:大數(shù)據(jù) ODS
ODS(Operational Data Store),可操作的數(shù)據(jù)存儲。是數(shù)據(jù)倉庫體系結(jié)構(gòu)中的不可缺少的一個(gè)部分,是存儲整個(gè)數(shù)據(jù)倉庫的數(shù)據(jù)的地方,是元數(shù)據(jù)經(jīng)過ETL 抽取,再到OLAP 分析庫的中轉(zhuǎn)樞紐??梢赃@樣通俗的理解:ODS 就是把一線的生產(chǎn)數(shù)據(jù)經(jīng)過抽取、整理、清洗等一系列操作,歸納成一個(gè)相對完整、相對封閉的數(shù)據(jù)存儲倉庫。ODS 的構(gòu)成并不是一個(gè)數(shù)據(jù)庫或者一個(gè)文件服務(wù)器,應(yīng)該是一系列數(shù)據(jù)庫以及文件服務(wù)器的總稱。
對于系統(tǒng)架構(gòu)設(shè)計(jì)師來說,任何一個(gè)系統(tǒng)的設(shè)計(jì)工作,都要建立在對業(yè)務(wù)需求的親身調(diào)查的基礎(chǔ)上,傳統(tǒng)的應(yīng)用軟件如此,大型的數(shù)據(jù)倉庫項(xiàng)目也應(yīng)如此。俗話說:沒有調(diào)查,就沒有發(fā)言權(quán)。這種調(diào)查應(yīng)該是方方面面的,甚至在一些問題上要精確到具體的業(yè)務(wù)場景的,比如元數(shù)據(jù)的特點(diǎn)、數(shù)據(jù)抽取的頻率,上層OLAP 系統(tǒng)對ODS 層數(shù)據(jù)結(jié)構(gòu)的要求等等。
結(jié)合實(shí)際調(diào)查具體項(xiàng)目特點(diǎn)的基礎(chǔ)上,ODS 層的設(shè)計(jì),可以總結(jié)為以下幾個(gè)方面:
ODS 層的數(shù)據(jù)來源可以定義為上層的生產(chǎn)數(shù)據(jù),也就是整個(gè)系統(tǒng)的元數(shù)據(jù)。生產(chǎn)數(shù)據(jù)比較原始,數(shù)據(jù)的結(jié)構(gòu)、數(shù)據(jù)的類型以及數(shù)據(jù)的產(chǎn)生頻率都是由現(xiàn)場生產(chǎn)的特點(diǎn)決定的。比如電力系統(tǒng)的發(fā)電數(shù)據(jù),主汽溫度、汽輪機(jī)轉(zhuǎn)速、二次風(fēng)出口溫度等,這樣的數(shù)據(jù)在第一手生產(chǎn)數(shù)據(jù)系統(tǒng)里,通常是有實(shí)時(shí)數(shù)據(jù)庫或者內(nèi)存數(shù)據(jù)庫完成采集,數(shù)據(jù)的組織比較雜亂,必須經(jīng)過ETL 工具經(jīng)過抽取、清洗等操作,才能進(jìn)入數(shù)據(jù)倉庫,也就是ODS 層。那么根據(jù)不同行業(yè)不同領(lǐng)域的元數(shù)據(jù)的特點(diǎn),應(yīng)該切合實(shí)際情況選取ODS 層的數(shù)據(jù)庫模型。其中包括:關(guān)系型數(shù)據(jù)庫的選擇、表的結(jié)構(gòu)的設(shè)計(jì)、存儲空間的分配等。上述電力系統(tǒng)的ODS 層,結(jié)合實(shí)際情況,應(yīng)選擇oracle RAC 作為核心存儲。一方面,oracle RAC 的性能比較好,在眾多的關(guān)系型數(shù)據(jù)庫產(chǎn)品中,性能是經(jīng)過考驗(yàn)的;oracle RAC 提供了一系列主從復(fù)制、雙機(jī)熱備、DG 等措施保證數(shù)據(jù)的安全和完整,同時(shí),也可以利用上述特點(diǎn)隨時(shí)為ODS 層存儲的數(shù)據(jù)抽象出一套業(yè)務(wù)數(shù)據(jù)庫,方便一些周邊業(yè)務(wù)功能的數(shù)據(jù)查詢工作,而不應(yīng)該整個(gè)數(shù)據(jù)倉庫的性能。最主要的是,像這樣的生產(chǎn)制造型企業(yè),元數(shù)據(jù)以結(jié)構(gòu)化數(shù)據(jù)為主,并不會出現(xiàn)圖片、聲音等非結(jié)構(gòu)化數(shù)據(jù),所以,像這樣的生產(chǎn)制造型企業(yè),選用oracle RAC 作為存儲,是比較恰當(dāng)?shù)摹?/p>
幾年來,hadoop 比較流行,hadoop 的特點(diǎn)是以HDFS 為基礎(chǔ),建立在hbase 數(shù)據(jù)庫上的。hadoop 的特點(diǎn)是可以很好地處理非結(jié)構(gòu)化數(shù)據(jù),并且采用了分布式的架構(gòu),可以進(jìn)行MapReduce 計(jì)算。針對這樣的特點(diǎn),交通運(yùn)輸類項(xiàng)目的ods層選擇可以使用hadoop作為存儲,比如某市地鐵項(xiàng)目。地鐵項(xiàng)目包含站務(wù)系統(tǒng)、票務(wù)系統(tǒng)和乘務(wù)系統(tǒng)等,這樣的系統(tǒng)產(chǎn)生的元數(shù)據(jù),一定會包含大量的非結(jié)構(gòu)化的數(shù)據(jù),針對此種情形,hadoop 可以非常完美地解決這個(gè)問題,并且,hadoop 采用了分布式文件系統(tǒng)存儲數(shù)據(jù),可以一式多份,對數(shù)據(jù)的備份也提供了方便。
就上文中提到的電力系統(tǒng)發(fā)電部的模型,數(shù)據(jù)庫選擇了oracle RAC,接下來就是一系列參數(shù)的設(shè)置。
ODS 層的關(guān)系型數(shù)據(jù)庫,和傳統(tǒng)的OLTP 型數(shù)據(jù)庫,在設(shè)計(jì)思路上有本質(zhì)上的區(qū)別,關(guān)心的“點(diǎn)”,也截然不同。就Oracle 數(shù)據(jù)庫為例,對于OLTP 數(shù)據(jù)庫,由于事務(wù)型數(shù)據(jù)庫的DML 行為非常頻繁,所以關(guān)心的點(diǎn)是內(nèi)存使用率、各種指標(biāo)的命中率、綁定變量和并發(fā)操作。對于一個(gè)OLTP 系統(tǒng)來說,數(shù)據(jù)庫內(nèi)存設(shè)計(jì)顯得很重要,如果數(shù)據(jù)都可以在內(nèi)存中處理,那么數(shù)據(jù)庫的性能無疑會提高很多。
內(nèi)存的設(shè)計(jì)通常是通過調(diào)整Oracle 和內(nèi)存相關(guān)的初始化參數(shù)來實(shí)現(xiàn)的,比較重要的幾個(gè)是內(nèi)存相關(guān)的參數(shù),包括SGA 的大小(Data Buffer,Shared Pool),PGA 大?。ㄅ判騾^(qū),Hash 區(qū)等)等,這些參數(shù)在一個(gè)OLTP 系統(tǒng)里顯得至關(guān)重要,OLTP 系統(tǒng)是一個(gè)數(shù)據(jù)塊變化非常頻繁,SQL 語句提交非常頻繁的一個(gè)系統(tǒng)。對于數(shù)據(jù)塊來說,應(yīng)盡可能讓數(shù)據(jù)塊保存在內(nèi)存當(dāng)中,對于SQL 來說,盡可能使用變量綁定技術(shù)來達(dá)到SQL 的重用,減少物理I/O 和重復(fù)的SQL 解析,能極大的改善數(shù)據(jù)庫的性能。
如果說OLTP 型數(shù)據(jù)庫的評測指標(biāo)是相應(yīng)時(shí)間,那么OLAP 型數(shù)據(jù)庫的指標(biāo)應(yīng)該是吞吐量。聯(lián)機(jī)分析系統(tǒng)的DML 操作非常少,而且時(shí)間比較集中,即使是數(shù)據(jù)導(dǎo)入,也很少使用直接insert 的方式,要么是SqlLoad 加載進(jìn)來的,要么是通過Kettle 等工具加載進(jìn)來的。對于用戶來說:它更像一個(gè)只讀的數(shù)據(jù)庫。這樣的數(shù)據(jù)庫,設(shè)計(jì)的時(shí)候內(nèi)存的因素考慮的很少,應(yīng)該考慮的是以下幾個(gè)方面:
分區(qū):由于數(shù)據(jù)量太過龐大,你必須設(shè)計(jì)的時(shí)候就考慮好分區(qū)處理。
索引:并不是說ODS 中的數(shù)據(jù)庫就不重視相應(yīng)時(shí)間,那么建立索引是提高查詢效率最好的途徑,但是由于每張業(yè)務(wù)表的數(shù)據(jù)量都非常龐大,你必須考慮到每次加載數(shù)據(jù)的時(shí)候刪除索引,加載完畢之后再重建索引的問題,否則索引反而會給數(shù)據(jù)導(dǎo)入帶來麻煩。
物理參數(shù):鑒于數(shù)據(jù)在盤陣上的存儲比較穩(wěn)定,不會發(fā)生頻繁的DML 操作。修改一些物理參數(shù)以改善數(shù)據(jù)庫性能??梢钥紤]建立一些Bigfile Tablespace,并且將這些大文件表空間設(shè)置成Automatic Storage Management,自動存儲管理。使用大文件表空間可以更好地發(fā)揮Oracle 在64 位操作系統(tǒng)下的存儲能力。另外,將ASM 的塊大小調(diào)整為16M(默認(rèn)為1M)。這也是提高Oracle 存儲能力的一種手段。
這里的文件組指的也是對結(jié)構(gòu)化數(shù)據(jù)的存儲,并非非結(jié)構(gòu)化數(shù)據(jù)。
文件組的規(guī)劃在ODS 層也是相當(dāng)重要的一個(gè)環(huán)節(jié),在某項(xiàng)目中,涉及到23 個(gè)省級系統(tǒng)的、各分成9 種業(yè)務(wù)類型的、分成不同的時(shí)間區(qū)段的文件組數(shù)據(jù)。這樣,需要對磁盤組進(jìn)行詳細(xì)再詳細(xì)的規(guī)劃,并且對“周期”問題的考慮一定要細(xì)致、慎重,因?yàn)镋TL 加載的時(shí)候,“本周期”沒有加載完,“下一周期”的數(shù)據(jù)又來了。
任何一個(gè)技術(shù)管理者,都明白數(shù)據(jù)備份的重要性,數(shù)據(jù)丟了,應(yīng)用程序?qū)懙脑倩ㄇ味脊μ澮缓垺?/p>
目前比較流行6+1、 4+7 的備份策略。什么是6+1 和4+7 呢?就是星期日做一個(gè)全量備份,之后每天做一個(gè)增量備份,每七天為一個(gè)周期,每個(gè)月有四個(gè)周期。保留歷史備份記錄的話,一般保留最近一個(gè)月的,也就是最近四次的全量備份。如果配合歸檔數(shù)據(jù),這樣可以保證數(shù)據(jù)庫在任何時(shí)間點(diǎn)宕機(jī),都不丟數(shù)據(jù)。ODS 層作為數(shù)據(jù)倉庫系統(tǒng)的一個(gè)重要組成部分,存儲了整個(gè)倉庫幾乎全部的數(shù)據(jù),項(xiàng)目開始時(shí)對你的數(shù)據(jù)做一份詳細(xì)的備份計(jì)劃,可以讓你在數(shù)據(jù)安全的問題上,高枕無憂。