小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

系統(tǒng)設(shè)計(jì)與架構(gòu)筆記:ETL工具開發(fā)和設(shè)計(jì)的建議

 dongsibei 2014-06-11

  好久沒寫博客了,不是自己偷懶,的確是沒有時(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,大家看下面這段文字:

復(fù)制代碼
     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是數(shù)據(jù)抽?。‥XTRACT)、轉(zhuǎn)換(TRANSFORM)、清洗(CLEANSING)、裝載(LOAD)的過程。是構(gòu)建 數(shù)據(jù)倉庫的重要一環(huán),用戶從數(shù)據(jù)源抽取出所需的數(shù)據(jù),經(jīng)過數(shù)據(jù)清洗,最終按照預(yù)先定義好的數(shù)據(jù)倉庫模型,將數(shù)據(jù)加載到數(shù)據(jù)倉庫中去。
復(fù)制代碼

  我們所要做的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. 元數(shù)據(jù):元數(shù)據(jù)主要是指源數(shù)據(jù)、目標(biāo)數(shù)據(jù)庫以及可以用于抽取的表、字段等等信息,還有一些相關(guān)函數(shù)的定義等等。
  2. ETL任務(wù)信息:ETL任務(wù)在我們ETL工具里稱作job,job是指一個(gè)將數(shù)據(jù)從源數(shù)據(jù)庫導(dǎo)出,并且按照一定規(guī)則導(dǎo)入到目標(biāo)數(shù)據(jù)庫的過程,ETL任務(wù)信息就是指一個(gè)job的相關(guān)配置信息。

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. 程序運(yùn)行信息。這個(gè)主要是用log4j在代碼里記錄。
  2. ETL任務(wù)(即job)運(yùn)行失敗的日志信息。一切因?yàn)槌绦蛩鶔伋龅漠惓K鸬氖《家涗浽趌og4j的運(yùn)行日志里,如果能精確提煉出的常見異常,最好能記錄在數(shù)據(jù)庫的日志表,便于快速查找錯(cuò)誤信息(這個(gè)在有WEB系統(tǒng)時(shí)候可以做)。
  3. 審計(jì)日志。審計(jì)日志是帶有一定業(yè)務(wù)需求的日志,這個(gè)是否要記錄看實(shí)際的需求。
  4. 錯(cuò)誤告警。一般而言ETL抽取數(shù)據(jù)的操作都是一件漫長的事情,ETL開發(fā)人員不可能長時(shí)間堅(jiān)守在系統(tǒng)旁邊,所以當(dāng)系統(tǒng)運(yùn)行出錯(cuò)能在第一時(shí)間通知到相關(guān)負(fù)責(zé)人是很有必要。Log4j里有郵件通知的功能,用起來也不太難,可以考慮在日志模塊加入告警的功能。

1.1.3.   WEB模塊

當(dāng)我們開發(fā)好了ETL工具后我們需要一個(gè)入口,告訴我們?cè)O(shè)計(jì)的ETL工具你具體做什么樣的任務(wù)。WEB模塊的作用就是給用戶操作的入口,我個(gè)人認(rèn)為WEB模塊包含以下功能:

  1. 元數(shù)據(jù)管理:主要是向配置數(shù)據(jù)庫定義源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫的相關(guān)信息,例如:數(shù)據(jù)庫的url,用戶名,密碼,相關(guān)的表以及表里字段信息等等。這些信息很重要,如果沒有這些信息,整個(gè)ETL作業(yè)就是無源之水,根本無法進(jìn)行。
  2. ETL任務(wù)的配置信息:即job的配置信息,這個(gè)就是定義我們ETL的抽取過程,例如ETL需要抽取的源數(shù)據(jù)庫是那個(gè),抽取那張表那些字段,按照什么規(guī)則轉(zhuǎn)化數(shù)據(jù),清洗數(shù)據(jù),最終導(dǎo)入到那個(gè)目標(biāo)數(shù)據(jù)庫等等。
  3. 查看日志信息:這個(gè)功能可選,查看日志信息主要是提高系統(tǒng)的友好程度,便利系統(tǒng)運(yùn)行信息的查看。
  4. 用戶管理:這個(gè)功能暫時(shí)可選,因?yàn)槲覀兯_發(fā)的ETL工具主要是內(nèi)部使用,沒有太大必要做復(fù)雜的權(quán)限管理,但是簡單的用戶信息管理做做應(yīng)該還是必要的。

整個(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ù)。大家看下面的例子:

復(fù)制代碼
<?xml version="1.0" encoding="UTF-8"?>
<Job>
<Id>流水號(hào)</Id>
<Extract>
<JDBCSource>
<Url></Url>
<Username></UserName>
<Password></Password>
</JDBCSource>
<JDNISource></JNDISource>
<Table></Table>
<Columns>
<Column></Column>
<Column></Column>

</Columns>
<Where></Where>
<Commit></Commit>
<OrderBy></OrderBy>
<FilePath></FilePath>
</Extract>
<Transform>
<Columns>
<Column>
<SrcColumn> <!-- 抽取的原字段-->
</SrcColumn>
<Methods>
<Method id="1"> <!-- 第一次轉(zhuǎn)換-->
<Function>...</Function>
</Method>
<Method id="2"> <!-- 第二次轉(zhuǎn)換-->
<Function>...</Function>
</Method>
</Methods>
<DesColumn> <!-- 加載的目標(biāo)字段-->
</DesColumn>
</Column>
<Column>...</Column>
</Columns>
<SouceFilePath>...</SourceFilePath>
<TargetFilePath>...</TargetFilePath>
<Commit>...</Commit> <!--每一批次的處理?xiàng)l數(shù) -->
</Transform>
<Load>
<JDBCSource>
<Url></Url>
<Username></UserName>
<Password></Password>
</JDBCSource>
<JDNISource></JNDISource>
<Table></Table>
<Columns>
<Column></Column>
<Column></Column>

</Columns>
<Commit></Commit>
<LoadFilePath></LoadFilePath>
</Load>
</Job>
復(fù)制代碼

  這是一個(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):

http://xmlbeans./

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. spring batch批量處理框架,我們的抽取數(shù)據(jù)的過程就是一個(gè)批量的過程,因此spring batch是適合我們現(xiàn)在應(yīng)用的場(chǎng)景。
  2. 我們抽取的數(shù)據(jù)先是存儲(chǔ)在臨時(shí)文件,現(xiàn)在規(guī)定的臨時(shí)文件的格式是csv,而spring batch正好有批量操作csv文件的功能,這個(gè)也很符合我們應(yīng)用的場(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ì)給我們帶來很多好處:

  1. 整體架構(gòu)設(shè)計(jì)會(huì)給我們需要做哪些功能有一個(gè)清晰的認(rèn)識(shí),這個(gè)認(rèn)識(shí)會(huì)避免開發(fā)的時(shí)候遺漏了功能。
  2. 整體架構(gòu)能清晰表現(xiàn)出各個(gè)功能模塊的關(guān)系,做過開發(fā)的人應(yīng)該都會(huì)有這樣的體會(huì),模塊之間的交互的地方很容易產(chǎn)生問題,而且交互產(chǎn)生的問題也是很難查找定位的,整體架構(gòu)設(shè)計(jì)會(huì)讓我們清晰認(rèn)識(shí)到模塊交互關(guān)系,利于我們做模塊之間交互的開發(fā)。
  3. 整體架構(gòu)能清晰體現(xiàn)出模塊之間的邊界在哪里,這個(gè)很重要,不清晰模塊之間的邊界,很容易在把A模塊的功能寫到了B模塊中,最終導(dǎo)致系統(tǒng)的不穩(wěn)定。
  4. 整體架構(gòu)的設(shè)計(jì)能給項(xiàng)目開發(fā)的分工做參考,更合理的安排工作,提高生產(chǎn)效率。




        



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多