http://zhuweisky.cnblogs.com/category/62488.html

目前手头上正在负责一个DTS(这里的DTS是Data Transfer System的缩写)系统的开发,我打算写一系列的文章来记录这个开发的全过程,这个记录可以说是实时的--每当遇到一个重要问题或解决一个重要问题,我将记录之。侯捷老师说,“发表是最好的记忆”,这一系列的文章除了权作笔记外,也希望能对后来者有所参考。
    
    在开发任何系统之前,我们都需要弄清楚,这个系统是用来干什么的?主要职责是什么?这些需要通过需求分析得到。DTS是一个工具软件,几乎不涉及业务,所以其功能目标还是比较单纯的。我们都知道,DTS用于在两个数据库之间导入导出数据,参与数据传递的两个表(源表与目标表)的结构可能是完全不同的,但是它们之间的列与列可能存在映射关系(有的列映射可能很复杂,比如会涉及类型转换、列合并、列分裂、转换表达式等),DTS可以基于建立好的映射关系,将数据从源表向目标表传递。我大致总结了一下,DTS系统的主要功能包括:

(1)独立于数据库类型,或者说完全支持异构数据库之间的传递。(如果有新的数据库类型,则只需要添加对应的适配器插件即可)
(2)提供可视化的工具,能建立(或修改)源表结构与目的表结构之间的匹配映射关系(映射关系可以保存、加载)
(3)验证表结构映射关系的完整性、正确性
(4)基于正确完整的结构映射关系,可以实现数据从源表到目的表的导出和增量导出(暂停/继续功能、日志记录功能)
(5)能实现将源表中的某列依据指定的规则分裂成目的表中的多列。
(6)能实现将源表中的多列依据指定的规则合并成目的表中的一列。
(7)能将源列经过一定的变换(如参与某个表达式的计算得到的结果)映射到目标列。
(8)如果将源表替换为临时视图,仍能实现上述功能。(使用临时视图是为了解决多个源表对应一个目的表的问题)
(9)记录导出失败的数据,并能依据这些记录,对失败的数据进行重新导出。
(10)定时运行数据导出任务。

就目前我所了解的,这个系统的难点在于以下几个方面:
(1)独立于数据库类型是一个挑战!不同类型的数据库虽然都支持标准的SQL语句,但是它们之间的差异还是巨大的,比如,每种类型的数据库都有自己的数据类型;每种类型的数据库都有不相同的扩展;对于同一个任务(比如分页),针对不同类型的数据库都有不同的实现方式,等等。
(2)增量导出是另一个难点。如果已经导出过的数据发生的变化(更新、删除),由于我们不能修改数据源添加触发器,所以我们的系统接收不到这些事件,如何同步这些已经导出过的数据需要一种策略。
(3)列合并的合并表达式的验证都不简单。而且还要看你对表达式的支持需要到达什么样的级别,比如加减乘除、指数、对数、笛卡儿运算等等。
(4)对不满足转换规则的源数据项的处理。也许不同的任务对这样的源数据项的处理要求是不一样的,系统必须支持用户对处理方式的选择。

还有很多难点可能还没有遇到,也可能还有很多需求没有整理进来,这些会在构建系统的过程中逐步挖掘或发现,到时我会将它们列举在这里。

下面一篇文章,我将介绍这个DTS系统的主要结构。

转载于:https://www.cnblogs.com/Nina-piaoye/archive/2006/06/29/438409.html

DTS开发记录(序)相关推荐

  1. DTS开发记录(5)-- 挑战增量导出

    增量导出恐怕是DTS系统中最艰难的部分了,我们曾考虑过很多方案,最后都因为需要表大纲做一定的假设而不具备通用性而放弃.有很多效率较高的方案,由于为了追求通用性而无法实现,因为现实的情况比我们理想的要复 ...

  2. 山东大学RISC-V公共开放平台开发记录5

    山东大学RISC-V公共开放平台开发记录 4移植Linux操作系统 4.1移植前相应知识 4.1.1特权等级与操作系统的关系 现代操作系统(如Linux.Windows等)为了权限的区分都区分为用户态 ...

  3. Anytime项目开发记录0

    Anytime,中文名:我很忙. 开发者:孤独的猫咪神. 这个项目会持续更新,直到我决定不再维护这个APP. 2014年3月10日:近日有事,暂时断更.希望可以会尽快完事. 2014年3月27日:很抱 ...

  4. CozyRSS开发记录3-标题栏再加强

    CozyRSS开发记录3-标题栏再加强 1.更精炼的标题栏 接下来,我们把窗口的边框和默认的标题栏给去掉,让Cozy看起来更像一个平板应用. 在主窗口的属性里,修改下列两个属性: 效果一目了然: 2. ...

  5. CozyRSS开发记录19-窗口标题栏交互

    CozyRSS开发记录19-窗口标题栏交互 1.谈谈对mvvm解耦的看法 在使用mvvm时,如何操作窗口,这是一个问题.这个问题的关键点是:mvvm是把view和viewmodel解耦了的,很多写法一 ...

  6. TMS320F28335项目开发记录9_28335之中断系统

    TMS320F28335项目开发记录9_28335之中断系统 2014年11月08日 12:00:12 阅读数:3104 28335中断系统 1.中断系统 在这里我们要十分清楚DSP的中断系统.C28 ...

  7. 转:修改Content Server管理员密码 - [Documentum 实施开发记录]

    修改Content Server管理员密码 - [Documentum 实施开发记录] 2010-02-25 Tag: 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http:// ...

  8. CozyRSS开发记录8-解析一份RSS

    CozyRSS开发记录8-解析一份RSS 1.使用Rss20FeedFormatter解析RSS 使用Rss20FeedFormatter配合XmlReader来解析RSS非常的简单,几行搞定: 来试 ...

  9. 前端radio单选框默认选中_开发记录篇前端内容1

    有段时间没有更新文章了,因为是用的公司电脑,没有虚拟机,所以就没法演示hadoop相关的东西了,而且大数据篇的东西需要花费一些时间和精力去收集整理内容,那大数据篇就先暂停一下.最近这段时间的话我可能会 ...

最新文章

  1. linux 自动提权perl脚本
  2. TreeSet的定制排序
  3. [Android组件化]分发模块依赖倒置
  4. 如何快速理解读懂他人代码(下)——技巧学习篇
  5. c 语言for 循环大到小,C语言中for循环问题(一个小坑需注意)
  6. 牛客网多校第9场 E Music Game 【思维+数学期望】
  7. 几道比较难的SQL题
  8. Nhibernate工具Profiler配置
  9. linux SVN web 同步
  10. stm32f103c8t6串口数据包收发
  11. Excel 将两列合并变成第三列,中间加一个连字符
  12. java项目如何做成可以在没有jdk环境的电脑上面运行的exe程序
  13. 帝国cms缩略图:网站不同地方生成不同的缩略图
  14. ping命令使用介绍及怎样使用Ping命令来测试网络连通性
  15. Windows常用Dos命令详解_被迫流浪者的博客
  16. 互联网快讯:中国联通推出5G视频热线;极米Z6X Pro、极米H3S持续热销;丰速运与云快充达成合作
  17. 【产品开发】北邮国际学院大二下期末复习
  18. jupyter notebook 基本操作
  19. PowerBuilder篇(2)——如何连接Oracle数据库
  20. HIT-CSAPP大作业程序人生

热门文章

  1. 算法竞赛入门经典 第二章总结
  2. java违反唯一约束异常_Caused by: java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (DSPACE.SYS_C007868)...
  3. 用python做频数分析_使用Python进行描述性统计
  4. vue delete删除json数组_vue面试题总结(二)
  5. mysql 解压缩安装_[mysql] MySQL解压缩安装步骤
  6. android 播放器 反交错,反交错- 视频横纹处理
  7. html css 魔方,css3实现立体魔方效果
  8. element 搜索匹配_分享一个element-ui级联选择器的搜索问题,顺便问下有没有解决方案。...
  9. rtrim php,php rtrim() 格式化中文问题
  10. android主板读取vga线数据_智锐通掘金新基建上新系列之3.5quot; 与ATX工业主板图鉴...