龙源期刊网 http://www.qikan.com.cn
一种数据同步技术研究与应用
作者:周 虎
来源:《电脑知识与技术》2010年第01期
摘要:数据同步是分布式开发环境中面临的一个实际问题,通过对数据同步类型和数据复制技术的分析,提出了一种基于同构数据库中差异记录统计的数据同步技术解决方案,并分析和描述了该方案的具体的工作流程及其框架结构,最后通过实例证明了该方案的准确性和可靠性。 关键词:数据同步;数据库;分布式系统;数据复制;SqlBulkCopy
中图分类号:TP311.11文献标识码:A文章编号:1009-3044(2010)01-15-03 Research and Application of Data Synchronization ZHOU Hu
(Department of information and technology, xuzhou vocational technology academy of finance & economics.Xuzhou 221003,china )
Abstract: Data Synchronization is a real problem in distributed development environment, based on the type of data synchronization and data replication technology analysis, a structure-based
database with records of statistical differences solution is proposed, and this paper analyze its structure and work flow, the solution presented here is being investigated through an example.
Key words: Data Synchronization;DataBase;Distributed System;Data Replication;SqlBulkCopy 在分布式应用环境中,通常有大量的基础数据在各个系统中共享使用,为了保证共享数据的一致性,通常将所有需要共享的数据保存在一个数据库中,供其它子系统访问,这种方法便于共享数据的集中式管理和维护,保证了数据的一致性并减少了数据冗余[1]。但是,在特殊应用环境中,当客户端采集数据后无法和服务器进行连接时,此时必须将客户端采集的数据手工和服务器进行数据同步。在以往的数据同步解决方案中,通常需要人工把数据库中的数据导出,将数据发送到目的端,再由人工将数据导入到目的数据库中,整个过程不但繁琐,而且还影响数据的完整性。 本文在分析了数据同步的原理和功能的基础上,提出了一种基于差异记录统计的技术方案,并通过一个实例验证该方案的可行性。 1 数据同步相关技术
随着信息化建设的发展,越来越多的应用中涉及到数据的同步,不同的应用环境下应用数据同步的类型和实现方式也不尽相同。
龙源期刊网 http://www.qikan.com.cn
1.1 数据同步类型
根据应用的环境不同,数据同步主要分为以下几种类型[2]:
1) 双向同步。双向同步是最常见也最具有代表性的一种同步,它总是由客户机首先发起,然后客户端和服务器互换更新信息。
2) 慢同步。慢同步是双向同步的一种。在慢同步中,客户机则把自己所有的数据都发给服务器,服务器逐一比较接收到的数据和自己的数据,以确定客户端哪些数据需要更新,然后把这些更新信息发送给客户端。
3) 客户端单向同步。客户端单向只由客户机向服务器发送上次同步之后自己更新的信息,而服务器不把自己的更新信息发送给客户端。
4) 客户端刷新同步。客户端刷新同步属于客户端单向同步的一种。客户机把自己所有的数据都发给服务器,并刷新服务器上的数据。
5) 服务器单向同步。客户机从服务器那里得到上次同步之后服务器所有的更新信息,但不向服务器发送自己的更新信息。
6) 服务器刷新同步。属于服务器单向同步的一种。服务器把所有的数据都发给客户端,并刷新客户端的数据。
在实际应用过程中,根据具体的需求选择相应的数据同步类型。 1.2 数据复制
数据复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式[3]。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。在.netFramework2.0中,ado.net提供了SqlBulkCopy技术,很容易的实现了两个数据库之间的数据复制。
以上根据应用的环境分析了数据同步的类型,本文针对在居民健康档案信息采集系统中应用数据同步的特殊性,我们采用SqlBulkCopy数据复制技术,实现一种基于差异记录统计的双向数据同步方案。 2 数据同步模型
在客户端单向服务器端发送同步数据中包括客户端新增的数据、更新的数据和删除的数据。
龙源期刊网 http://www.qikan.com.cn
2.1 同步新增加的数据
对于客户端新增的数据和服务器端新增数据,如果客户端在第一次和服务器端进行客户端单向同步,直接将客户端的所有数据发送到服务器端,然后将服务器的数据发送到客户端,但是要去除客户端发送的数据。
如果客户端已经进行过一次数据同步,此时客户端在进行数据同步时,为了尽可能的保证最小数据量的传输,我们只是将增量数据进行同步,但是如何统计出所有的增量数据呢? 为了统计出客户端的增量数据,我们首先在需要同步数据的表中设计一个自动增加列“ID”列和一个标识记录的主键“GUID”列,其中自动增加列的增量是“1”,然后设计一个专门用来记录数据同步后ID列的编号的表“tbl_synchronization”,每次数据同步结束后,客户端表中都要保存表的名称、客户端和服务器端标识和本次同步后表中的最大ID编号。
当客户端进行新增数据同步时,主要分为以下几个步骤:1) 创建远程数据库连接,获取远程服务器端标识,标识不能重复,如果获取失败则返回;2) 从客户端数据库表“tbl_synchronization”中获取当前需要同步的本地表中最大的Local_ID编号、Remote_ID编号以及服务器端使用max()函数获取需要同步的表中的当前最大ID编号Rcid,如果本地表“tbl_synchronization”中最大的Local_ID编号不存在,则将本地表中的所有记录都发送到服务器端,服务器端将所有编号小于Remote_ID编号的记录发送到客户端,否则通过条件限制将本地表中ID大于当前最大的Local_ID编号的所有记录发送到服务器端,服务器端将所有大于Remote_ID编号并小于Rcid编号的记录发送到客户端;3) 客户端和服务器端进行数据同步;4) 分别向各自的同步表中添加同步信息记录。例如,现有以下两个表,表1是客户端中需要同步的数据,表2是服务器端的数据。 表1 客户端表tblTest数据 表2 服务器端表tblTest数据
现将表1的数据同步到表2中,并且为第一次进行数据同步。首先进行远程数据库连接,连接成功返回服务器端标识“server”,然后到本地的数据库表“tbl_synchronization”中执行下面查询语句:
Select max(Local_ID) from tbl_synchronization where server_ID=’server’and
tbl_name=’tblTest’ and sy_type=0。由于两个为第一次同步,所以“tbl_synchronization”表中最大的“Local_ID”不存在,直接将本地tbltest中的所有数据发送到服务器端,但是在发送数据前,必须通过max()函数获取服务器端tblTest表中最大ID编号Rcid。同样,对于服务器端也是将服务器端数据库表tblTest中所有数据发送到客户端,但是由于操作在客户端已经将数据发送到服务器端数据库之后进行的,所以在服务器端通过以下查询语句进行条件限制:Select * from tblTest where ID
表3 客户端tbl_synchronization表 表4 服务器端tbl_synchronization表