(原文发表于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开发记录(序)
分享到:
相关推荐
npm-dts-webpack-plugin 该WebPack插件为整个NPM软件包生成单个index.d.ts文件。 它允许创建捆绑的NPM库软件包,而无需使用TypeScript源,并且无论这些库被导入到哪里,都仍然保留代码建议。 TypeScript自动获取...
DTS捆绑发电机 从您的ts代码生成dts捆绑包... 当在my.d.ts运行dts-bundle-generator -o my.d.ts entry.ts ,您将获得以下信息: declare class B { } export declare function makeB ( ) : B ; 安装 从npm安装软件包
电影链接 最新的空战电影 推荐给大家
分布式事务服务 ...dts-schedule是二阶事务恢复任务,dts-server是一个独立的系统,提供remote模式下的数据存储、二阶事务恢复等工作,采用组件化开发,引入不同的jar包拥有不同的功能,整个应用通过spring集成
dts-css-modules-loader 替换为 。 该加载器不会对样式的内容进行任何更改,只是在工作期间创建*.d.ts文件。 假定内容将首先由进行预处理。安装npm i -D dts-css-modules-loader# oryarn add -D dts-css-modules-...
dsm DTSFFmpegWithDTS-bromolow-1.0-0005
数字时间戳(DTS,digital time-stamp)是由专门机构提供的电子安全服务项目,用于证明信息的发送时间的。 需要数字时间戳的用户首先将文件用HASH算法加密得到摘要,然后将摘要发送到提供数字时间戳服务的专门机构,...
DTS-1000测试系统软件
阿里云 专有云企业版 V3.6.2 数据传输服务DTS 开发指南 - 20190322.pdf
BBC.The.World.At.War.1973.EP01-EP26.BluRay.720p.DTS.x264-beAst
dts-mall 聚惠星商城 介绍 聚惠星商城 DTS-SHOP,基于 微信小程序 + springboot + vue 技术构建 ,支持单店铺,多店铺入驻的商城平台。项目包含 微信小程序,管理后台。基于java后台语言,已功能闭环,且达到商用...
DTS-HD StreamPlayer播放器
dts-bundle, 导出 app. d. ts文件作为外部模块定义 dts包 导出 app. d. ts文件作为外部 MODULE 定义主要用例是为( commonjs/amd )/Bower 模块生成定义,因此应用程序代码应该遵循外部模块 Pattern ( 使用 import/e
dts-gen:TypeScript定义文件生成器dts-gen是一种可从任何JavaScript对象生成TypeScript定义文件(.d.ts)的工具。 dts-gen工作方式与TypeScript,Flowtype,Tern等不同,因为它只是在运行时检查对象,而不需要创建...
在Linux下用Qt开发新一代DTS图形数据系统的分析与设计.pdf
分解抓取来的多声道WAV文件为多声道DTS文件
汇总-dts-捆绑 用于捆绑d.ts文件的汇总插件 关于 当您要将所有.d.ts文件捆绑到一个捆绑包中时,此插件很有用。 引擎盖下的插件使用进行捆绑,请检查它的选项说明和示例。 安装 # yarn yarn add rollup-plugin-dts-...
总共珍藏的102张DTS-CD原版镜像(HIFI)
针对企业信息化建设过程中需要集成数据孤岛的问题,采用建设共享数据仓库的思想,利用完成 ETL 功能的...给出利用 DTS 组件集成分布式数据库系统的方案及其总体结构,以及在 B/S 模式下调度 DTS 包的部分关键实现代码。
DTS结构及其编译方法.pdf