计算机时代2008年第1 1期 ・57・ 一种基于FT P的数据同步技术 贾卫忠,李存华 (淮海工学院计算机工程学院,江苏连云港222005) 摘要:解决高校信息化过程中存在的“信息孤岛”问题,需要实现异构数据库中数据的同步。文章提出一种比较简单的 基于文件传输协议的数据同步技术,给出了总体思路和需要解决的问题,对数据同步的实现进行了详细描述,包括修改业 务系统数据库以创建临时存放同步数据的表和捕获变化数据的触发器、设计数据同步交换文件的格式和四个实现数据同 步软件的流程,简要说明了同步流程和运行情况,最后对该同步技术作了一些扩展。 关键词:高校信息化;数据同步;文件传输协议;数字化校园 0引言 在高校信息化过程中,各部门应用了各种专业信息系统, 提高了工作效率,这些系统在高校信息化中起着非常重要的作 用。但是,它们相对,未顾及数据同步,造成数据不一致、甚 至矛盾,形成一个个“信息孤岛”,给学校管理带来许多问题。因 此,实现数据同步是建设数字化校园需要着重考虑的问题。 如TCPfiP Socket通信嘲、手机短消息。高校需要一种切合实际、 简单方便的数据同步技术。 1数据同步的总体思路 高校专业应用系统一般采用大型关系型数据库产品如 Oracle、SQL Server、Sybase等,这些数据库都支持触发器。通过 与专业系统开发方协商,可以取得应用系统数据库的元数据, 如数据库表结构、数据库用户名及口令等。同时高校校园网一 般由局域网组成,局域网之间设置了防火墙以保证网络安全, 但都开放FFP(2I)端口。如果具备这些基本条件,就可以实现 一各应用系统不仅操作系统不同,使用的数据库产品也不相 同,数据库大多是异构的。要从根本上解决高校信息化过程中 遗留的“信息孤岛”问题,就需要实现异构数据库之间的数据同 步。目前实现数据同步的常用技术有数据复制、邮件、手机短消 息、TCPfiP Socket通信、Web Service、JMS等。这些实现数据同 步的技术,有的无法实现不同数据库数据的同步;有的实时性 不够,如邮件技术;有的需要购买专用的中间件产品,如Web 种适合学校、原理简单且编程工作量不大的数据同步方法: 利用数据库触发器+PTP+少量手工编程实现数据转换。这种方 法利用了文本文件于操作系统的特性。 1.1总体结构 Servicet 和JMs翻;有的需要进行难度高、工作量大的软件开发, 本文所述的数据同步方案的总体结构如图l所示。 一般的位操作是用来控制硬件的,或者做数据变换使用,但是, 耗着大量的资源。在编程时,应尽量优化程序,减少不必要的 灵活的使用位操作可以有效地提高程序运行的效率。我们知道 下我们可以使用移位来实现乘法和除法。 例2—7—1使用除法: int height,len; height=l28/8; 运算。上面介绍的方法主要是为了提高代码的效率,但是事实 些负面的影响,比如增加代码的大小、降低程序可读性等。因 此,在嵌入式程序设汁中应该合理地使用这几种技术以达到优 化效果。 参考文献: [1】王春宁.嵌入式系统编程源代码解析[MI.电子工业出版社.2002. [21周小丽,李俊峰.嵌入式系统编程中的代码优化【J】.山东电子,2004. 2:60-62 乘法和除法在CPU中是不能直接进行的,所以在适当的情况 上,在使用这些技术提高代码运行速度的同时会相应地产生一 len=256%8: 例2—7—2用位操作代替除法: int height,len; height=l 28>>3: 【3】王东征.嵌入式C语言位操作的移植与优化[J】.单片机与嵌入式系 统.2007.2:72~74 len=256-(256>>3<<3): 例2—7—1生成的代码中调用了除法和取余函数,既有函数 【4】覃征,王志敏,王向华等.程序设计方法与优化【M】.西安交通大学出版 调用,又有许多寄存器参与运算;而例2—7—2生成的代码则更 简洁、效率更高。 社.2004. 【5】【美]Andrew N Sloss,【英]Dominic Symes,【美]Chris Wright.沈建华 译.ARM嵌入式系统开发一软件设计与优化【M】北京航空航天大学 出版社.2006 2结束语 在嵌入式实时程序设计代码中可能隐藏很多额外的开 销。一些变量、数组和函数看似简单、却执行着复杂的工作,消 【6】童 ̄% ̄.Linux C编程实践【M】-人民邮电出版 ̄,2008 ・58・ Computer Era No.1 1 2008 业务系统A服务器 FI'P服务器 业务系统B服务器 临时存放同步数据的表(以下称缓存表),在两个系统之间传送 数据的文本型同步文件。 (1)缓存表结构的设计 I l转换进程I lf文同本二步型= 文数件据l l l服F务FP器『 fIl文同本步型文数件据l l l鑫~ {… 『 — I图l数据同步总体结构 业务系统A服务器对应数据变化的发生方和同步发起 方。它把变化的数据转换成文本型数据同步文件,然后把同步 新增的缓存表用于临时存放同步记录,除学生信息外,还 要有控制属性。结构如下: cljhl,cljh2:处理机号,字符型。业务系统A和B在数字化 校园的编号,用于标识数据的来源和去向。 文件发送到FTP服务器。 FTP服务器该服务器临时存放同步文件,开放FFP端口, 运行FFP服务器进程。 业务系统B服务器对应数据同步的接收方和响应方。它 把同步文件从FTP服务器下载到本机,成功后把数据的变化同 步到本地数据库。 1.2待解决的问题 在本方案中,同步文件的传输已经得到解决,即通过设置 一个中间FFP服务器实现。尚需解决的问题是:业务系统A中 变化数据的提取、临时存放同步数据的缓存表结构的设计、同 步文件格式的设计、文本数据和数据库数据的转换。 (1)业务系统A中变化数据的提取 捕获业务系统A的变化数据的方法通常有以下四种: 触发器法对业务系统A数据库中发生变化的表创建触发 器。当对该表修改、插入或删除记录时,触发器把变化的数据提 取出来。 日志法通过分析数据库的日志信息来捕获源数据的变 化。开发这样的数据捕获程序难度极大。 时间戳法给每个源表添加一个时间属性,记录每个表的 修改时间。这种方法需要修改整个应用系统,几乎是不可能的。 API法在应用程序和数据库之间引入一种中间件,由它提 供一系列API。中间件在完成应用程序对数据库修改的同时也 把源表的变化记录下来,从而达到捕获的目的。但不经过API 操作所引起的数据变化是无法捕获的。 这四种方法中,触发器法虽然占用较多的系统资源,但实 现起来较其它方法简单,而且当前硬件的发展,完全能消除触 发器的使用对应用系统产生的影响。 (2)同步数据结构 同步数据不仅要同步内容,还需要设置控制信息,如数据 是由哪个业务系统产生的、传向哪个业务系统、是否有效等。 (3)文本数据和数据库数据的相互转换 实现文本数据和数据库数据之间的定时转换,需要设计和 编写程序,但编程工作量不是很大。 2数据同步的实现 数据同步涉及到两个业务系统和FTP服务器。 P服务器 需要向两个应用系统开放FFP J{j户名和口令。下面以同步学生 信息为例说明实现过程。 2.1设计同步数据缓存表 为实现数据同步,需要增加的数据结构有:业务系统A中 xuhao:序号,长整型。用于唯一标识数据同步的流水序号, 每次加1。 elbz:处理标志,字符型。标志本记录是否已被处理,‘0’:未 处理,缺省值,起始状态;‘1’:已处理。 czlx:操作类型,短整型。0:增加记录;1:删除记录;2:修改 记录。 sjbm:数据表名,变长字符串型。业务系统B响应更新的数 据表名。 xxnr:信息内容,变长字符串型。数据同步具体内容。 业务系统A修改学生信息时,如果业务系统B对应需修 改的属性不含主键,则用Update语句;如果包含主键,需要先 用Insert语句插入含有新主键的学生信息,然后用Delete语句 删除原来的学生信息记录,用两条语句代替一条Update语句。 (2)文本型同步文件格式的设计 同步文件的格式统一设定,例如:源处理机号l目标处理机 号I序号I数据表名I操作类型I同步内容。 同步操作只有插入、删除和修改记录三种,只需要用到三 种标准SQL DML语句。例如0001号业务系统向0002号业 务系统发起数据同步、序号从7120开始,三种操作的同步格 式如下: Insetr:000110002171201XsxxlOI属性1,属性2,…,属性nl属 性l值,屙性2值,…屙性n值 Delete:0001100021712llXsxxllI属性l=值11属性2=值2I …I属性n=值n Update:0001l0()()2I7l22lxsxxl2l属性l=值11属性2=值21 …l属性n=值nlwherel条件属.1生1_值ll条件属性2=值21…I 条件属性m=值m 所有的属性都指业务系统B数据表的属性。 2.2业务系统A上的工作 业务系统A的工作有:建立缓存表、插入捕获变化数据的 触发器、从缓存表导出数据转换为同步文件、发送同步文件到 FTP服务器。 (1)生成缓存表 以具有数据表创建权限的用户登录业务系统A的数据库, 运行创建数据表的语句,生成同步缓存表Buff_Xsxx。下面是创 建缓存表的SQL Server2000的语句: create table BufLlxsx×( cljhl char(4)not null,一业务系统A的处理机号 : 一其他属性的定义 xxnr varchar(1024)。 一数据同步内容 计算机时代2008年第l 1期 ); ・59・ 再按文件名次序依次处理每一个同步文件:逐行读取同步文件 内容,取得该同步记录源业务系统编号、目标业务系统编号、同 (2)建立触发器 假定业务系统A的学生信息表是Xsxxl,业务系统B对应 步序号和数据同步内容;根据源系统编号和同步序号,与本地 理过;如未处理,则根据同步内容,组装SQL语句并运行。文件 内容处理完毕,更新同步序号,关闭同步文件后删除或移到其 他目录。 2.4数据同步流程及运行结果 的数据表是Xsxx2。在源表上建立三个触发器,分别对应该 记录的该应用系统编号、同步序号比较,分析该记录是否已处 Xsxxl表的Insert、Delete和Update三种操作。操作每发生一 次,都要把同步内容记录到缓存表。因为三种操作的DML语句 格式不同,所以缓存表属性xxnr的内容也不同。Inset操作是:r 属性1,属性2,…,属性nl值1,值2,…,值n;Delete操作:属性 1=值ll属性2=值21…l属性n=值n,是删除记录的条件值; Update操作是:属性l=值iI属性2:值21…I属性n:值 业务系统A是数据同步的发起方。业务系统A上学生信 息发生变化时,系统根据操作类型激活学生信息表Xsxxl相应 nlwherel条件1=值11屙陛2=值21…l属性m=值m,修改的属 性和条件之间用where关键词隔开。例如创建Insert操作的触 发器,代码如下: Create Trigger TrlXsxx on Xsxx For Insert As Begin declare@xxnr varchar(1 024) 一声明临时变量 set@xxnr=’coll,col2,col3,…,coin’ 一Xsxx2表的属性 set@xxnr=@xxnr+’I’+value1 ,’ 一对第1个属性赋值 : -一对其他属性赋值 insert into BufI_xSXX(cljhl,cljh2,clbz,sjbm,xxnr) values(‘0001’,’0002’,’0’,’Xsxx2’,@xxnr) End (3)业务系统A上的软件 业务系统A端需设计两个程序:缓存表数据转换到同步 文件的数据转换程序,同步文件发送到FrP服务器的文件发送 程序。 数据转换程序其处理流程为:首先打开业务系统A的数 据库,每隔一段时间,检查缓存表中是否存在未处理的记录。如 存在,在约定目录中建立一个由业务系统B处理机号、日期和 时间等要素构成名字的同步文件,把同步记录按约定格式逐条 输入到同步文件,输入后把记录标志改为已处理。所有记录都 输入后,关闭同步文件。 文件发送程序其处理流程为:每隔一定时IhJ,打开本机存 放同步文件的目录,如果目录内有文件,则登录FFP服务器;登 录成功后,把目录中的文件按文件名的顺序逐个发送到ETP服 务器的约定目录;传送成功后,把文件删除或移到其他目录。 2.3业务系统B的工作 业务系统B服务器端需设计两个程序:从FTP服务器接 收同步文件的文件接收程序,根据文件内容同步本地数据库的 数据转换程序。 文件接收程序处理流程为:每隔一定时间,业务系统B登 录FFP服务器,登录成功后,检查FTP服务器约定目录中是否 有需要本系统接收的同步文件,如有则按文件名次序逐个取到 本机约定目录,成功后在PTP服务器上删除该文件。 数据转换程序处理流程为:每隔一段时间在本机约定目 录中检查是否有同步文件。如有则先打开业务系统B数据库, 触发器,在数据缓存表Buff_Xsxx中增加一条数据同步记录; 业务系统A的数据转换进程定时把Buff_Xsxx表内的同步记 录输入新建的同步文件中,并由文件传输进程定时把同步文件 传输到FFP服务器,这样完成了业务系统A的同步工作。 业务系统B的文件接收进程定时把同步文件取到本地,由 数据转换程序定时把同步文件定义的业务系统A中学生信息 的变化更新到本地数据库,完成学生信息的同步。 本方案测试表明,在业务系统A的学生信息发生变化时, 经过一定时间,业务系统B也发生相应变化,在两个业务系统 上能见到同步文件的内容。同步时间由定时器设定。 2.5系统改进和扩展 FTP服务器可以和业务系统A或B的服务器合并,两服务 器之一担任FTP服务器角色,这样既可减少服务器数量,又减 少了进程数量和网络流量。 本技术实现了多个业务系统向同一个业务系统的数据同 步,还可以实现数字化校园中多对多数据同步:在各业务系统 增加一个全校业务系统信息表和各系统需要同步的数据表属 性对照表;改进触发器和数据转换程序:当一个业务系统的数 据发生变化时,根据业务系统信息表和属性对照表,在同步信 息缓存表中添加所有业务系统需要同步的数据记录,数据转换 程序分别生成需要同步的目标业务系统的同步文件。 3结束语 本文所述的基于FFP的数据同步技术,无需改动学校当前 使用的各种应用系统,只需对服务器数据库作少量改动,增加 几个触发器和资源需求不大的进程,对服务器软、硬件要求低, 实施方便怏捷,可靠性好,同步过程全部自动化处理,效率高于 其他技术,适用于联网的各校区。本技术还只是对小数据量的 基础数据进行同步,基本适合学校基础数据同步的需要;对于 大量数据,需要分割成小块数据来实现同步。 参考文献: 【1】索红光,王雷全智能客户端系统中数据同步采略的研究与实现[J】. 计算机工程与设计,2007.28(2):351~353 【2】张瑛等分布式异构数据库数据同步系统的研究与实现[J】.小型微型 计算机系统.2007 10. 【3】黄显信.利用Socket通信进程实现不同数据库间数据的同步fJ】.计 算机与数字工程,2003 31(5):28-30,57