好久沒寫博客了,不是自己偷懶,的確是沒有時(shí)間哦。 最近項(xiàng)目組里想做一個(gè)ETL數(shù)據(jù)抽取工具,這是一個(gè)研發(fā)項(xiàng)目,但是感覺公司并不是特別重視,不重視不是代表它不重要,而是可能不會(huì)對(duì)這個(gè)項(xiàng)目要求太高,能滿足我們公司的小需求就行,想從這個(gè)項(xiàng)目里衍生出更多的東西估計(jì)難。昨天領(lǐng)導(dǎo)讓我寫寫自己的見解,今天寫了點(diǎn),不過說見解還真不敢,所以取了個(gè)名字叫建議了,今天把這個(gè)文檔貼到自己博客里和大伙分享分享。 貼文檔之前,我想很多朋友估計(jì)并不熟悉ETL,如果接粗過數(shù)據(jù)挖掘一定對(duì)ETL很熟悉了,ETL是數(shù)據(jù)挖掘里非常重要的一環(huán),具體什么是ETL,大家看下面這段文字: ETL(Extract-Transform-Load的縮寫,即數(shù)據(jù)抽取、轉(zhuǎn)換、裝載的過程)作為BI/DW(Business Intelligence)的核心和靈魂,能夠按照統(tǒng)一的規(guī)則集成并提高數(shù)據(jù)的價(jià)值,是負(fù)責(zé)完成數(shù)據(jù)從數(shù)據(jù)源向目標(biāo)數(shù)據(jù)倉庫轉(zhuǎn)化的過程,是實(shí)施數(shù)據(jù)倉庫的重要步驟。如果說數(shù)據(jù)倉庫的模型設(shè)計(jì)是一座大廈的設(shè)計(jì)藍(lán)圖,數(shù)據(jù)是磚瓦的話,那么ETL就是建設(shè)大廈的過程。在整個(gè)項(xiàng)目中最難部分是用戶需求分析和模型設(shè)計(jì),而ETL規(guī)則設(shè)計(jì)和實(shí)施則是工作量最大的,約占整個(gè)項(xiàng)目的60%~80%,這是國內(nèi)外從眾多實(shí)踐中得到的普遍共識(shí)。 我們所要做的ETL工具不是針對(duì)數(shù)據(jù)倉庫,說白了就是要個(gè)安全穩(wěn)定的數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出導(dǎo)入工具。下面就是我寫的文檔,希望童鞋們看了后請(qǐng)多多指教。 1.1. 概述如圖1-1: ETL工具共分為三大模塊:ETL核心模塊、日志模塊和WEB模塊。 1.1.1. ETL核心模塊ETL核心模塊是整個(gè)ETL工具的核心,它主要的功能是根據(jù)事先定義好的規(guī)則將源數(shù)據(jù)庫的數(shù)據(jù)抽取到目標(biāo)數(shù)據(jù)庫。其主要工作流程是: 數(shù)據(jù)抽取-->數(shù)據(jù)轉(zhuǎn)換-->數(shù)據(jù)清洗-->數(shù)據(jù)加載 ETL工具里的配置數(shù)據(jù)庫必須包含兩個(gè)方面的數(shù)據(jù):
1.1.2. 日志模塊良好的系統(tǒng)最重要的特征之一就是它的差錯(cuò)、容錯(cuò)以及能正確提供系統(tǒng)運(yùn)行信息的特性。所以日志模塊是每個(gè)系統(tǒng)必不可少的部分,它設(shè)計(jì)的優(yōu)劣直接關(guān)系到系統(tǒng)后期維護(hù)的成本。 ETL工具里的日志模塊,我個(gè)人認(rèn)為應(yīng)該包含如下的部分:
1.1.3. WEB模塊當(dāng)我們開發(fā)好了ETL工具后我們需要一個(gè)入口,告訴我們?cè)O(shè)計(jì)的ETL工具你具體做什么樣的任務(wù)。WEB模塊的作用就是給用戶操作的入口,我個(gè)人認(rèn)為WEB模塊包含以下功能:
整個(gè)WEB模塊也是可選的,如果人力和時(shí)間不夠是沒必要做一個(gè)web系統(tǒng),ETL入口我們可以手動(dòng)的配置任務(wù)信息。(假如真的做了WEB模塊,對(duì)ETL后臺(tái)的設(shè)計(jì)和開發(fā)要求也會(huì)更高)。 1.2. 關(guān)于技術(shù)開發(fā)的一點(diǎn)建議我之前看過大家寫的ETL需求文檔,大家考慮的非常全面,這里我暫時(shí)有兩個(gè)技術(shù)建議, 建議如下: 1.2.1. Xml技術(shù)Xml技術(shù)在企業(yè)級(jí)系統(tǒng)開發(fā)和互聯(lián)網(wǎng)開發(fā)中使用十分廣泛,xml使用的場(chǎng)景也是非常的多,其中一個(gè)特點(diǎn)非常適合我們?cè)贓TL工具開發(fā)中使用到,那就是它可以存儲(chǔ)復(fù)雜的富有變化的數(shù)據(jù)結(jié)構(gòu)。而我們定義ETL任務(wù)信息(job配置信息)就是一個(gè)復(fù)雜的富有變化的數(shù)據(jù)。大家看下面的例子: <?xml version="1.0" encoding="UTF-8"?> 這是一個(gè)job配置信息demo,如果我們把這些數(shù)據(jù)用數(shù)據(jù)庫來存儲(chǔ)解析起來一定是非常復(fù)雜,數(shù)據(jù)庫的表結(jié)構(gòu)不適合表現(xiàn)出程序里復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。 在這里我們不應(yīng)該把XML當(dāng)做配置文件看待,而是當(dāng)做一種數(shù)據(jù)存儲(chǔ)的介質(zhì),其作用主要是便于我們讀寫數(shù)據(jù)。 既然對(duì)xml有讀寫操作,因此使用digester解析xml的技術(shù)遠(yuǎn)遠(yuǎn)不夠,這里我建議使用xmlbeans,xmlbeans對(duì)于讀寫xml更加的簡便,關(guān)于xmlbeans的學(xué)習(xí)參考如下: Xmlbeans的使用: http://blog.163.com/pqg_iloveyou/blog/static/33351875200761811255619/ xsd的學(xué)習(xí)資料: http://www.w3school.com.cn/schema/schema_example.asp xmlbeans官網(wǎng): xsd在eclipse開發(fā)起來十分的簡便。 使用xmlbeans維護(hù)xml的成本也會(huì)比較低。 1.2.2. Spring Batch技術(shù)對(duì)于spring batch技術(shù)我現(xiàn)在還不是特別熟悉,到底能不能被我們使用還需要考察和研究,但現(xiàn)在我知道的它的幾個(gè)特點(diǎn)很符合我們ETL工具開發(fā)的場(chǎng)景:
1.3. 總結(jié)因?yàn)楸救艘郧白鲞^和ETL工具類似的項(xiàng)目,因此這里大膽的提出一點(diǎn)自己的建議,僅供參考。 不過我在概述里畫的系統(tǒng)結(jié)構(gòu)圖希望大家可以好好看看,也許還有很多不合理的地方,這需要大家集體智慧進(jìn)行改進(jìn),我個(gè)人覺得系統(tǒng)的整體架構(gòu)設(shè)計(jì)十分重要,我在看需求分析時(shí)候雖然感覺大家寫的很全面,但是很難對(duì)系統(tǒng)整體結(jié)構(gòu)有一個(gè)清晰認(rèn)識(shí),究其原因是需求里缺乏對(duì)系統(tǒng)的整體架構(gòu)設(shè)計(jì)的部分,我個(gè)人覺得系統(tǒng)整體設(shè)計(jì)很重要很有必要,整體架構(gòu)設(shè)計(jì)會(huì)給我們帶來很多好處:
|
|