基于异构系统数据时间同步模型的研究与应用
摘要:针对异构数据库系统数据时间同步所提出的新问题,详细介绍了异构数据库系统数据时间同步的特点、要求。根据异构数据库系统数据时间同步的特点,提出了一种基于新时钟、时间戳与触发器的异构数据库系统数据时间同步模型。
关键词:异构性;数据库系统;时间同步;时间戳;触发器
1异构数据库系统数据时间同步模型与算法的研究
异构数据库系统数据时间同步的精确度主要受到以下因素的影响:异构数据库系统数据时间同步采取的策略;服务器端与客户端时钟系统的精确度;服务器端与客户端运行的操作系统;服务器端与客户端所运行的dbms;服务器端与客户端的网络状况等。
现行的异构系统使用的数据同步策略主要有基于快照差分算法的数据同步策略与基于日志分析的数据同步策略。
基于快照差分算法的策略不但需要消耗同等数量级的存储空间和i/o开销,而且需要大量的时间进行数据的排序、分析和比对,特别是对于大数据量的快照差分,数据同步的效率会急剧下降;基于日志的数据同步策略虽然效率会提高,但是对数据日志的分析一般难以实现。可见,必须找出另外方法,本文在触发器的基础上,将电子商务中的时间戳技术运用到其中,提出了一种基于时间戳和触发器的数据同步策略。
在本策略中有两个难点需要解决,一个是数据源的类型多样,如何方便地自动地无需人工干预建立触发器。第二个难点是如何在分布式环境下最大化地减少数据传输的冗余量,实现数据的快速同步,且减少对数据源的影压力。
针对第一个问题,因为异构数据源的类型不确定,可以采用函数的方法,实现触发器的自动建立。wwW.11665.cOM针对数据库管理系统多样性,数据库触发器的建立方法不同,可事先针对不同的数据库系统分别建立不同的函数。当第一次集成的时候,自动加载相应的函数到数据库管理系统当中去,并执行函数给每个要集成的表建立触发器。
针对第二个问题,在目前常用的数据同步策略中,传输对象都是以一条一条记录为最小单位的,也就是说,当数据源表中某一个字段发生变化时,会把该条记录的内容全部发送给目的端,这种处理方式导致数据的传输冗余量太大,严重的增加了网络的负载,影响了数据同步的效率。在这里,考虑将监视发送对象缩小到字段,在传输的过程当中只把变化字段的内容发送给目标端,平衡网络的负载。同时为了减少对数据源的压力,设计了一个源操作表,它记录了对数据的所有操作,包括增加、修改和删除记录等信息。
源操作表位于源数据端,随时同源表的数据保持一致,在第一次抽取的时候会建立,每个要抽取的表都各自对应一个源操作表,其表名为要抽取的表名加后缀“_snp”源操作表的结构如表1所示。
(1)当修改数据的记录时,触发器被触发,将操作的时间、类型和修改的值以及记录的标示写入源操作表当中;比如,当修改源表的某条记录的一个字段时,查找源操作表是否有关于该字段的修改记录(字段data_primary和name_column的值必须完全匹配),如果有则直接在该记录上修改(type_oper字段值为u),并将修改的值填入data_column字段即可,如果没有则在源操作表插入一条记录即可。
当源表中插入一条记录时,只需要在源操作表中将非空字段的信息写入即可(type_oper字段值为i),那些空值的字段不需要填写其信息,也就是说,虽然源表有n个字段,但在插入一记录时只由m个字段插入了新值,源操作表中只增加了m个记录而不是n个记录。
当在源表中删除一条记录时,查找源操作表是否有关于该记录的信息(只要字段data_primary匹配),如果信息表明该记录是新插入的(即该记录信息中有一个type_oper为i的记录)把找到的所有记录删除即可,如果该记录不是新插入的(即不能找到该记录信息中有一个type_oper为i的记录)则将信息写入源操作表(字段typeoper值为d)。
(2)同步模块将根据源操作表的内容和修改时间字段的值,更新临时数据表中的内容(临时数据表相当于临时中间数据缓冲区),实现了临时表和源数据的同步,并返回从系统新时钟读取的更新的时间new_updatetime(其值也就是字段update_time的值);
(3)将源操作表当中字段update_time的值小于new_updatetime的所有记录删除。
解决了上述关键性问题之后,下面我们提出基于异构系统数据时间同步的模块结构图。如图2所示:
其中数据源为用户所需要的数据来源,也是异构系统同步的数据源,比如:sqlserver、oracle、db2、access等;目标数据库是数据的目的地;中间数据区作为数据的中介,是数据集成的主要环节,用户所要进行的数据转换都是在此进行,其中主要有一个临时数据存储区1和临时数据存储区2,它们分别负责存储转换之前和之后的数据,因此是数据的临时缓存区。
其中用户控制模块负责和用户进行通信,接受用户命令,并将用户的配置和命令传递到其它模块;任务管理模块是数据集成的核心,负责任务的调度和其他模块的管理;预集成模块主要负责集成前的准备,包括建立各种触发器,建立源操作表或mds源操作表等;同步模块依据不同的数据同步策略负责数据的同步;转换模块根据用户的配置和任务管理模块进行数据的转换;时间同步模块主要是用来从时间服务器或者新时钟获取高精度的时钟信息。
系统开始运行后,首先各个数据源与目标数据库均执行时间同步算法,构建统一的时间平台。然后由数据访问模块将数据从异构数据源中抽取出来,再经过预集成、数据同步、数据转换等完成数据的同步与转换,最后由加载模块将同步数据加载到目标数据库中。
2实验结果
实验平台中,我们选择了sqlserver和oracle进行数据同步。在同步过程中,我们发现数据更新的数据量对同步时间有很大的影响。因此,实验过程如下:对一张数据表更新30000条记录,该表具有20个字段,每个字段的大小相同均为20个字符,每次实验变化的是修改字段的数量。修改字段数量所占的比例即为修改的数据量所占总数据量的比例。
如图3所示,横坐标表示修改的字段所占的比例,纵坐标表示同步所用的时间。记录级同步策略采用传统的快照差分算法的同步策略,字段级的同步策略采用的时本文主要介绍的基于新时钟与时间辍和触发器的同步模型。
经过对实验数据的分析,我们发现,在数据库中仅有极少记录需要同步时,本算法和传统算法均有着较好的时间同步精度。随着字段修改比例的增加,传统记录级的数据时间同步策略所需的时间抖动不明显,整个曲线呈平缓上升的趋势。而本文中提出的基于时间辍和触发器的同步策略所需的时间呈上升趋势,整个曲线的上升趋势即斜率要大于传统记录级得曲线。当修改比例在70%以下,基于时间辍和触发器的同步策略较记录级的同步策略是较优的,其原因在于将监视对象缩小为字段,减少了冗余量和网络传输量。但当修改比例超过70%,基于时间戳和触发器的同步策略较记录级的同步策略反而更差。主要原因是当更新的数据比例过多,虽然本算法将监视对象缩小为字段处理,但是这种缩小字段带来的时间和效率上的提升的不到体现,反而会因为在处理的过程中增加了一些处理中间环节导致整体算法效率上的降低;从而导致了按字段处理不如按记录处理的情况发生。
因此可以考虑将传统的数据时间同步算法与本算法结合起来,设置一个监视模块,当发现修改比例超过70%就调用传统算法进行数据的时间同步。
参考文献
[1]汪静,贺鹏.一种分布式数据库系统时间同步技术研究[j].微计算机信息,2007,(18).
[2]周书民,汤彬.rdgsm分布式数据库系统的时间同步策略[j].计算机应用,2004.
[3]david.l.mills.networktimeprotocolspecification.implementationandanalysis[m].darpanetwgroupreportrfc1305,univ.delaware.1992.
[4]彭杰.profinet及其同步实时通信分析[j].微计算机信息,2006,(25).