DMHS-达梦实时同步工具

       最近在做某项目时,使用到了国产达梦数据库。因为原来用到的是oracle数据库,现在测试环境用dm进行测试。需要从oracle到dm进行业务数据的实时同步。当时觉得很棘手,不知如何操作,后了解到dm有专门异构实时同步软件,叫DMHS。所以对其进行了一定的了解。该工具好像类似oracle的ogg,但可以支持oracle到dm,很方便。下面我们了解一下该产品的基本原理: 

1、 产品介绍:

达梦数据实时同步软件DMHS是达梦公司推出的新一代支持异构环境的高性能、高可靠和高可扩展的数据库实时同步系统。该产品基于成熟的关系数据模型和标准接口,跨越多种软硬件平台实现秒级数据实时同步。原理图如下:

源端

源端是数据实时同步系统中的数据来源端。

目标端

目标端是数据实时同步系统中的数据接收端。

执行端

执行端是数据实时同步服务系统中数据入库(目标端数据库)的执行端。

捕获器

数据实时同步系统中负责读取、解析源端数据库管理系统的归档日志,并发送解析后的数据。

路由器

数据实时同步系统中负责传输数据在网络中的路由。

转发器

数据实时同步系统中负责传输数据的过滤及转发。

执行器

数据实时同步系统中负责接收数据,并进行数据映射及事务的入库(目标端数据库)执行。

2、 系统架构

DMHS同步服务主要分为三大模块,分别是日志分析(CPT)、数据入库(EXEC)和消息发送(NET),这三个模块统一由管理模块(MGR)进行调度执行。

管理模块(MGR) DMHS 同步服务的启动框架,根据配置文件加载并启动以下三个具体的功能模块:

  1. 日志分析(CPT

负责对源数据库日志进行解析,联合字典信息提取其中数据的变化如插入(INSERT)、删除(DELETE)、修改(UPDATE)和对像操作(DDL),这些操作经过包装后投递给消息发送(NET)模块。

CPT 分析日志时,需要从数据库中查询表的字典信息以及日志文件发生切换时需要访问日志文件信息,也就是说,日志分析过程中 CPT 会和源数据库建立连接进行交互。如果同步需要支持同步 DDL,那么还需要在源数据库上建立事件触发器,用来捕获 DDL 操作,这些配置需要在搭建同步时完成。

  2. 数据传输(NET

1) NET 消息发送子模块

经过 CPT 捕获到的日志操作,在这里进行分发,分发前可以对操作进行过滤,或者对表进行过滤和映射,还可以对消息中的列进行映射(改名、剔除和函数计算)。经过处理的消息通过网络(TCP/IP)发送给下一级,或者保存到本地文件。

  2) NET 消息接收子模块

经上一级NET消息发送子模块通过网络传输的消息,在这里由 NET 消息接收子模块通过网络(TCP/IP)接收并发送给 EXEC 模块。

3. 数据入库(EXEC

EXEC 模块接收到 NET 接受子模块发来的消息,把这些消息按事务分类,如果某个事务上收到了提交消息,则构造相应的SQL,使用 ODBC 驱动接口对这些数据进行入库;如果某个事务在源端回滚,则直接丢弃不执行。同步中如果使用了中文表名或者字段名,要使用支持中文字符集的 unixODBC,否则描述表会出错。

EXEC模块在运行过程中需要不断的刷新检查点,以便推进入库的 LSN为适应不同的应用场景,DMHS提供的功能可以细分为捕获器功能、执行器功能等。

3、各部件功能

1. 捕获器

捕获器将源端数据库日志读取解析后发送出去,它必须与源端数据库在同一台机器上。捕获器由 MGR 模块、CPT 模块、NET 发送子模块组成,XML 配置文件中对应元素为 basecptsendNET 发送子模块不能单独存在,必须由 CPT 模块调用;在XML配置文件中也是一样的,send 元素为 cpt 元素的子元素。

捕获器中包含日志分析模块CPT,由于日志分析需要用到数据库中的表信息,所以捕获器在首次启动时,要进行初始化加载需要同步的表的字典信息,把这些信息存放到本地。即使源数据库中断了服务,也不会影响日志分析。因此需要在捕获器中配置源数据库连接相关的信息,包括连接数据库的用户名和口令。

2. 执行器

执行器将接收到的数据入库执行,它可以与目标端数据库处于不同机器。执行器由MGR模块、EXEC模块、NET 接收子模块组成,XML 配置文件中对应元素为 baseexecrecvNET 接收子模块不能单独存在,必须由 EXEC 模块调用;在 XML 配置文件中也是一样的,recv元素为exec元素的子元素。

执行器中的主要模块EXEC模块,主要用来进行数据入库,为了兼容大多数的数据库,它采用了标准的 ODBC 驱动接口和符合 SQL92 标准的 SQL 语句来访问数据库。此处需要配置的参数有数据库连接信息、事务缓存信息以及事务入库的方式等。数据入库往往是DMHS 数据同步的性能瓶颈所在,所以这块参数配置非常的重要,需要结合实际的运行环境,源端应用事务的特点来针对性的配置,实现入库性能的最大化。


猜你喜欢

转载自blog.51cto.com/15092136/2663587