一种基于Java的异构数据库同步实现

林城_大少 贡献于2014-11-26

作者 CN=夏正友/O=HIKVISION  创建于2012-08-28 03:35:00   修改者CN=夏正友/O=HIKVISION  修改于2014-11-26 04:40:00字数2316

文档摘要: 1、基本概念异构数据库系统是相关的多个数据库系统的集合,可以实现数据的共享和透明访问,每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自己的DBMS。异构数据库的各个组成部分具有自身的自治性,实现数据共享的同时,每个数据库系统仍保有自己的应用特性、完整性控制和安全性控制。异构数据库可以是同为关系型数据库系统的Oracle、mysql、SQLServer等,也可以是不同数据模型的数据库,如关系、模式、层次、网络、面向对象,函数型数据库共同组成一个异构数据库系统。
关键词:

一种基于Java的异构数据库同步实现 1、基本概念 异构数据库系统是相关的多个数据库系统的集合,可以实现数据的共享和透明访问,每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自己的DBMS。异构数据库的各个组成部分具有自身的自治性,实现数据共享的同时,每个数据库系统仍保有自己的应用特性、完整性控制和安全性控制。 异构数据库可以是同为关系型数据库系统的Oracle、 mysql、SQL Server等,也可以是不同数据模型的数据库,如关系、模式、层次、网络、面向对象,函数型数据库共同组成一个异构数据库系统。 异构数据库系统的目标在于实现不同数据库之间的数据信息资源、硬件设备资源和人力资源的合并和共享。其中关键的一点就是以局部数据库模式为基础,建立全局的数据模式或全局外视图。这种全局模式对于建立高级的决策支持系统尤为重要。 大型机构在许多地点都有分支机构,每个子机构的数据库中都有着自己的信息数据,而决策制订人员一般只关心宏观的、为全局模式所描述的信息。建立在数据仓库技术基础上的异构数据库全局模式的描述是一种好的解决方案。数据仓库可以从异构数据库系统中的多个数据库中收集信息,并建立统一的全局模式,同时收集的数据还支持对历史数据的访问,用户通过数据仓库提供的统一的数据接口进行决策支持的查询。 2、案例场景 在某市天网项目中,市局与各区县之间希望构建一个高可用性和高可用性的视频管理平台,同时也提出了性价比方面的要求。由于市局和各区县处于同一个网络环境中,一套完备视频管理平台理论上能够满足业务需求,然而基于高可靠性和高可靠性的要求,为回避故障、自然灾害等意外因素的影响,有必要构建若干备用平台,在主平台异常的情况下提供视频管理服务。视频管理主平台需要同时对市局及各区县提供视频服务,对数据库组件提出了较高要求,主平台选择商业数据库Oracle。备平台是在主平台故障的情况下接管服务、较主平台规模小的视频管理平台,从性价比的角度出发,选择免费的数据库较为合适,本案例中选择Mysql作为备平台的数据库组件。 然而,异构数据库之间的数据同步及共享是业务平台需要解决的问题。本案例中涉及到将主平台的Oracle数据库的视频资源数据同步到备平台的mysql数据库下,且允许一定时间范围内的延迟。具体策略将在下一小节进行介绍。 3、基于Java实现的Oracle和mysql之间的同步 根据上一节的介绍,本节着重讨论Oracle和mysql之间的数据同步。本案例中,通过数据描述文件作为导出方Oracle和导入方mysql之间的同步载体。导出方将一定时间范围内的数据库变更记录在数据描述文件中,导入方定期获取数据描述文件,并做数据库更新操作,即完成一次同步。选择数据描述文件作为同步载体有两方面的考虑:导出导入双方减少依赖,只需要按照描述文件的结构输出和解析文件即可;另一方面,导出导入双方可以在不同的操作系统下使用不同的编程语言来实现自身逻辑。本案例使用xml文件对数据变更进行描述。 3.1 导出策略 本案例中,导出方主平台定时将一定时间范围内数据库的变更导出到xml文件中。xml文件分两种:update文件和delete文件,update文件描述的是导出方检测到的数据库新增或者修改过的记录的快照信息。一般按表为单位划分文件,如果表中的数据过大,可适当进行拆分,便于传输;delete文件描述的是截至导出时间点,数据表中存在的记录的主键集合,旨在告诉导入方目前哪些数据时有效的,哪些是已经被删除了的。 3.2 导入实现 本案例中,导入方是视频管理备平台。备平台需要周期性检测导出方是否有新的数据变更,需要对导出的xml文件进行解析处理,然后对解析数据进行数据的增删改操作。3.1中的update文件描述了数据表的新增和变更记录,可以通过标志区分是新增还是变更,本案例中采用的时间戳的方式,即对每一条数据表中的资源数据记录,增加Create_time和Update_time字段,导入方检测到Create_time和Update_time字段对应的值相等,则认为这是一条需要新增的记录,做insert操作,否则认为这是一条需要变更的记录,做update操作;delete文件描述的是主平台库中对应表截至导出时存在的记录的主键集,导入方根据主键集筛选出备平台存在但主平台不存在的主键,然后进行delete操作。至此,主平台对数据库做的insert、update和delete都在备平台做了相应的处理。 3.3 关键问题处理 1、特殊字符处理。基于数据描述文件作为同步载体,某种程度上讲是依赖于描述文件的结构的。因此,导出方需要对数据描述文件中的特殊字符进行转义处理的,本案例中,xml规范的’<’、’>’等符号都属于特殊字符的范畴;导入方对数据描述文件中的特殊字符进行处理后,还需要关注sql规范的特殊字符,否则可能会造成sql语句异常中断,语法结构错误。 2、容错处理。异构数据库同步的导出导入方可能由于一些意想不到的因素导致错误,可能会造成主备平台之间数据的错乱和不一致。适时增加全表同步处理能够有效避免数据错乱和不一致的不可恢复。所谓全表同步,指的是导出方将所有数据导出到数据描述文件中,导入方先清空本地数据表再根据数据描述文件做一次insert操作。本案例中,主平台会在一定周期内做一次全表同步。 3.4 基于Java的异构数据库同步实现 如前所述,对本案例中提及的异构数据库同步给出了一种Java实现,主要使用了第三方的Xml文件操作开源工具和Hibernate开源框架,分别对数据描述文件进行处理和数据库操作。源代码见附件dbbacker_src.zip。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档