(原文發表于2006-06-28 ,修正于2006-07-03)
在
DTS開發記錄(序)
一文中,我們已經明白了當前這個Data Transfer System的主要目標和存在的難點與挑戰。在接下來的一系列的文章中,我將記錄我們開發中是如何解決這些難點、如何應付這些挑戰的,有的技巧或方案可能還并不成熟,所以如果你有任何想法,請留言告訴我。
本文就先從系統結構講起。
通過我們的分析歸納,確定了該DTS系統中存在三個核心的概念,這三個核心概念建立在如下基本概念之上:
(1)源列:參與數據傳遞的源數據表中的列。
(2)目標列:參與數據傳遞的目標數據表中的列。
(3)映射列:參與了數據映射的源列或目標列。注意,并不是所有的列都會參與映射,這是常見的情況。
(4)數據管道:用于屏蔽數據源和數據目標的類型(比如不同類型的數據庫、數據文件等),在數據介質與DataTable之間進行數據傳遞的組件。
(5)數據大綱:通俗點,實際就是某個數據庫表的表結構,稱之為Data Schema。但是數據大綱是獨立于數據庫類型的。
(6)映射項:MappingItem,一個映射項與一個目標列是1:1對應的。如果一個目標列參與了映射,那么它就能并只能攜帶一個MappingItem。MappingItem包含了一個或多個源列如何映射到目標列。如果MappingItem中只包含一個源列,則稱之為“簡單映射”;如果MappingItem中包含了多個源列,則稱之為“合并映射”。
(7)連接:IConnection,一個連接表示對一個數據源或數據目標的尋址。到目前為止,有兩種類型的連接,數據庫連接和文件連接。
在上述基本概念的基礎上,我們引出三個核心概念:
(1)數據映射:DataMapping,數據映射由一組映射項(MappingItem)組成,它包含了源數據大綱到目標數據大綱的完整映射關系。注意,數據映射與數據大綱綁定,但是并不與任何特定的數據庫表綁定。這樣,DataMapping可以運用在不同的數據庫表上,只要數據庫表結構兼容DataMapping要求的數據大綱即可。
(2)連接對:ConnectionPair,一個連接對包含了一個數據源和一個數據目標的連接信息。將連接對獨立出來的好處是,當配置好一個連接對后,可以在不同的地方復用它,比如在編輯映射的時候、在數據驗證的時候、在數據傳送的時候等。
(3)數據傳送引擎:DataTransferEngine,這是整個DTS系統的引擎部分,它基于一個連接對和一個數據映射,將數據從源表經過變換后傳遞到目標表。
經過以上分析,我們可以將系統分為如下幾個小工具:
(1)連接管理工具:用于配置、管理所有的連接對。所有的連接對可以序列化保存于系統的配置文件中。
(2)映射編輯工具:用于在源數據大綱和目標數據大綱之間建立、修改映射關系。映射編輯工具的產物是一個數據映射DataMapping,我們可以將之序列化后存儲在.mapping文件中,日后可以重新加載、打開。
(3)執行工具:用于啟動執行引擎,監控數據傳遞過程,并記錄日志。
(4)數據驗證工具:基于DataMapping,驗證數據源表中的數據是否滿足要求的轉換規則,將不滿足轉換規則的源數據記錄下來。
(5)日志查看工具:用于查看某次數據傳遞任務的執行情況,比如哪些數據傳遞失敗了、失敗的原因等等。
這幾個工具中,最重要的工具當屬映射編輯工具和執行工具,就像DataMapping和DataTransferEngine是整個系統的核心一樣。映射編輯工具的示意圖如下:
圖中的數據適配器用于屏蔽數據庫類型和文件類型的差異;大綱提取器從指定的數據庫表或文件中提取數據大綱;編輯工具在源大綱與目標大綱之間建立簡單或復雜的映射關系,將結果(即DataMapping)保存在.Mapping文件中。
執行工具的示意圖如下:
執行工具首先通過數據適配器將數據從數據源中提取出來,得到與數據庫類型無關的數據集,.NET中的DataSet和DataTable就可以作為這種數據庫類型無關的介質。圖中的Data在實現中即存放于DataTable。DataTransferEngine依據數據映射指定的轉換規則將數據從源DataTable經過運算、變換然后存放到目標表。然后,在通過數據適配器將目標表提交到目的數據庫。
關于這個Data Transfer System結構中最主要的部分在這里粗略的說了一下,很多細微的地方都忽略了,細節會在后面的文章中補充進來。
轉到:
DTS開發記錄(序)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
