DMHS(Heterogeneous database Synchronization for DM)是达梦异构数据库同步软件,一款支持异构环境的高性能、高可靠、高可扩展的数据库实时同步系统。
| 主要模块 | |
|---|---|
| 源端 | 装载模块(LOAD)、日志捕获分析模块(CPT)、传输模块(NET)以及管理服务模块(MGR) |
| 目标端 | 执行模块(EXEC)、传输模块(NET)和管理服务模块(MGR) |
在源端,DMHS 的 CPT 模块采用优化的日志扫描算法实现增量日志数据的快速捕获分析,并将分析完成后的日志数据转换为内部的消息格式,然后通过网络将消息发送至目标端DMHS 服务;
在目标端, DMHS 服务接收到源端的日志消息后,对消息进行处理,通过多线程并行执行的方式将同步数据应用至目标端数据库,实现数据实时同步。
管理模块(MGR)是 DMHS 同步服务的启动框架,根据配置文件加载并启动相关的功能模块:
对源数据库增量日志进行捕获并完成解析,结合数据字典信息提取其中数据的变化如插入(INSERT)、删除(DELETE)、修改(UPDATE)和对象操作(DDL),然后将这些操作及数据转换为内部的消息格式投递给网络(NET)模块。
不同的源数据库管理系统具有不同的日志格式,但是在日志文件中通常都会记录操作的类型、操作的时间戳、事务 ID、操作数据等信息。DMHS 源端针对每一种支持的关系型数据库系统,均提供有相应的日志捕获分析模块,用以识别和解析不同的关系型数据库系统的日志数据。管理服务(MGR)中提供有通用的调用接口,通过配置的数据库类型,调用相应的日志分析模块。
CPT 日志分析模块通常还需要结合数据字典信息才能正确的解析同步数据,因此在启动日志分析模块时,首先要进行数据字典装载操作,生成同步表的字典目录,保存完字典信息后才能启动日志捕获分析模块。DDL 操作的捕获分析同步有 2 种方式,分别是基于系统事件触发器的捕获分析和基于数据库日志的捕获分析。不同的实现方式其配置要求也不同。
DMHS 在进行增量数据同步之前,需完成同步表的字典装载和表数据的初始装载。表字典装载将所有同步表的数据字典信息从源库中抽取出来,保存为本地的数据字典文件,用于数据同步过程中提供准确表定义信息。数据初始装载用于将源端数据库的初始数据同步至目标数据库,使得源库和目标库的初始数据保持一致。
数据初始装载的有两种方式:直接的数据装载方式和备份文件装载方式。直接的数据装载方式基于源数据库数据的直接查询抽取装载;备份文件装载方式则是基于数据库自身的数据备份还原,将源库初始数据备份后在目标库进行还原达到初始数据一致。备份文件装载方式要求源库和目标库为同一类型的数据库系统,目前 DMHS 仅支持 DM 数据库的备份文件装载方式。
初始装载使用 LOAD/COPY 控制台命令,该命令可以在不中断源数据库服务的情况下把源表初始基础数据装载到目的库上,同时配合日志分析模块完成该表后续的增量数据同步。初始装载模块不能跟日志分析模块同时运行,在执行 COPY 命令时,必须首先使用STOPCPT 命令停止日志捕获分析模块的运行。
经过 CPT 捕获到的日志操作,在这里进行分发,分发前可以对操作进行过滤,或者对表进行过滤和映射,还可以对消息中的列进行映射(改名、剔除和函数计算)。经过处理的消息通过网络(TCP/IP)发送给下一级,或者保存到本地文件。
经上一级 NET 消息发送子模块通过网络传输的消息,在这里由 NET 消息接收子模块通过网络(TCP/IP)接收并发送给 EXEC 模块。而上一级 NET 消息发送子模块保存消息的本地文件目录,既可以是一般的本地文件目录,也可以是提供 FTP 服务的 FTP 文件目录。当上一级 NET 消息发送子模块将消息保存在一般本地文件目录时,NET 消息接收子模块读取本地文件并发送给 EXEC 模块;当上一级 NET 消息发送子模块将消息保存在 FTP 文件目录时,NET 消息接收子模块可通过 FTP 服务器下载数据,并发送给 EXEC 模块。
除了作为 CPT 模块和 EXEC 模块的传输媒介外,NET 模块还能够单独实现转发和路由功能,这两个功能需要在配置文件中独立配置,通过转发和路由功能实现多对多、一对多、文件中转和 FTP 中转的高级功能。
DMHS 目标端通过 NET 模块接收源端发送过来的日志消息,然后把这些消息按事务分类,如果某个事务上收到了提交消息,则通过 SQL 逆向生成的技术构造还原相应的事务 SQL语句,使用 ODBC 驱动接口对这些数据进行入库执行,完成数据同步;如果某个事务在源端回滚,则直接丢弃不执行。
EXEC 模块使用多线程并行执行的方式,对多个提交事务同时进行入库执行,以提高入库执行的效率。由于事务之间的关联关系以及事务提交策略的影响,多个执行线程之间可能存在一定的等待关系,以满足事务的逻辑要求。EXEC 模块还可以通过事务合并、事务分裂等事务重组技术,以及 rowid 映射、批量绑定执行等技术加快同步执行的效率。
文章
阅读量
获赞
