DTS开发记录(序)
?目前手頭上正在負(fù)責(zé)一個(gè)DTS(這里的DTS是Data Transfer System的縮寫(xiě))系統(tǒng)的開(kāi)發(fā),我打算寫(xiě)一系列的文章來(lái)記錄這個(gè)開(kāi)發(fā)的全過(guò)程,這個(gè)記錄可以說(shuō)是實(shí)時(shí)的--每當(dāng)遇到一個(gè)重要問(wèn)題或解決一個(gè)重要問(wèn)題,我將記錄之。侯捷老師說(shuō),“發(fā)表是最好的記憶”,這一系列的文章除了權(quán)作筆記外,也希望能對(duì)后來(lái)者有所參考。
????
??? 在開(kāi)發(fā)任何系統(tǒng)之前,我們都需要弄清楚,這個(gè)系統(tǒng)是用來(lái)干什么的?主要職責(zé)是什么?這些需要通過(guò)需求分析得到。DTS是一個(gè)工具軟件,幾乎不涉及業(yè)務(wù),所以其功能目標(biāo)還是比較單純的。我們都知道,DTS用于在兩個(gè)數(shù)據(jù)庫(kù)之間導(dǎo)入導(dǎo)出數(shù)據(jù),參與數(shù)據(jù)傳遞的兩個(gè)表(源表與目標(biāo)表)的結(jié)構(gòu)可能是完全不同的,但是它們之間的列與列可能存在映射關(guān)系(有的列映射可能很復(fù)雜,比如會(huì)涉及類(lèi)型轉(zhuǎn)換、列合并、列分裂、轉(zhuǎn)換表達(dá)式等),DTS可以基于建立好的映射關(guān)系,將數(shù)據(jù)從源表向目標(biāo)表傳遞。我大致總結(jié)了一下,DTS系統(tǒng)的主要功能包括:
(1)獨(dú)立于數(shù)據(jù)庫(kù)類(lèi)型,或者說(shuō)完全支持異構(gòu)數(shù)據(jù)庫(kù)之間的傳遞。(如果有新的數(shù)據(jù)庫(kù)類(lèi)型,則只需要添加對(duì)應(yīng)的適配器插件即可)
(2)提供可視化的工具,能建立(或修改)源表結(jié)構(gòu)與目的表結(jié)構(gòu)之間的匹配映射關(guān)系(映射關(guān)系可以保存、加載)
(3)驗(yàn)證表結(jié)構(gòu)映射關(guān)系的完整性、正確性
(4)基于正確完整的結(jié)構(gòu)映射關(guān)系,可以實(shí)現(xiàn)數(shù)據(jù)從源表到目的表的導(dǎo)出和增量導(dǎo)出(暫停/繼續(xù)功能、日志記錄功能)
(5)能實(shí)現(xiàn)將源表中的某列依據(jù)指定的規(guī)則分裂成目的表中的多列。
(6)能實(shí)現(xiàn)將源表中的多列依據(jù)指定的規(guī)則合并成目的表中的一列。
(7)能將源列經(jīng)過(guò)一定的變換(如參與某個(gè)表達(dá)式的計(jì)算得到的結(jié)果)映射到目標(biāo)列。
(8)如果將源表替換為臨時(shí)視圖,仍能實(shí)現(xiàn)上述功能。(使用臨時(shí)視圖是為了解決多個(gè)源表對(duì)應(yīng)一個(gè)目的表的問(wèn)題)
(9)記錄導(dǎo)出失敗的數(shù)據(jù),并能依據(jù)這些記錄,對(duì)失敗的數(shù)據(jù)進(jìn)行重新導(dǎo)出。
(10)定時(shí)運(yùn)行數(shù)據(jù)導(dǎo)出任務(wù)。
????就目前我所了解的,這個(gè)系統(tǒng)的難點(diǎn)在于以下幾個(gè)方面:
(1)獨(dú)立于數(shù)據(jù)庫(kù)類(lèi)型是一個(gè)挑戰(zhàn)!不同類(lèi)型的數(shù)據(jù)庫(kù)雖然都支持標(biāo)準(zhǔn)的SQL語(yǔ)句,但是它們之間的差異還是巨大的,比如,每種類(lèi)型的數(shù)據(jù)庫(kù)都有自己的數(shù)據(jù)類(lèi)型;每種類(lèi)型的數(shù)據(jù)庫(kù)都有不相同的擴(kuò)展;對(duì)于同一個(gè)任務(wù)(比如分頁(yè)),針對(duì)不同類(lèi)型的數(shù)據(jù)庫(kù)都有不同的實(shí)現(xiàn)方式,等等。
(2)增量導(dǎo)出是另一個(gè)難點(diǎn)。如果已經(jīng)導(dǎo)出過(guò)的數(shù)據(jù)發(fā)生的變化(更新、刪除),由于我們不能修改數(shù)據(jù)源添加觸發(fā)器,所以我們的系統(tǒng)接收不到這些事件,如何同步這些已經(jīng)導(dǎo)出過(guò)的數(shù)據(jù)需要一種策略。
(3)列合并的合并表達(dá)式的驗(yàn)證都不簡(jiǎn)單。而且還要看你對(duì)表達(dá)式的支持需要到達(dá)什么樣的級(jí)別,比如加減乘除、指數(shù)、對(duì)數(shù)、笛卡兒運(yùn)算等等。
(4)對(duì)不滿足轉(zhuǎn)換規(guī)則的源數(shù)據(jù)項(xiàng)的處理。也許不同的任務(wù)對(duì)這樣的源數(shù)據(jù)項(xiàng)的處理要求是不一樣的,系統(tǒng)必須支持用戶對(duì)處理方式的選擇。
??? 還有很多難點(diǎn)可能還沒(méi)有遇到,也可能還有很多需求沒(méi)有整理進(jìn)來(lái),這些會(huì)在構(gòu)建系統(tǒng)的過(guò)程中逐步挖掘或發(fā)現(xiàn),到時(shí)我會(huì)將它們列舉在這里。
??? 下面一篇文章,我將介紹這個(gè)DTS系統(tǒng)的主要結(jié)構(gòu)。
轉(zhuǎn)載于:https://www.cnblogs.com/Nina-piaoye/archive/2006/06/29/438409.html
總結(jié)
以上是生活随笔為你收集整理的DTS开发记录(序)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [原]当你用%查不到记录的时候怎么办?
- 下一篇: linux shell中的eval命令