达梦数据实时同步软件DMHS介绍和原理

1、产品介绍

        达梦数据实时同步软件(以下简称 DMHS)是支持异构环境的高性能、高可靠、高可扩展数据库实时同步复制系统。该产品采用基于日志的结构化数据复制技术,不依赖主机上源数据库的触发器或者规则,对主机源数据库系统几乎无影响,能以极少的系统开销实现秒级数据实时同步复制。

        DMHS 基于成熟的关系数据模型和标准接口,支持多种软硬件平台,能够灵活的配置出一对一、一对多、多对一、多对多以及级联等多种形式的复制拓扑结构,可以广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发、多业务中心等业务领域。

2、产品特点

  • 高通用性
    • 跨平台软硬件支持:面对日趋复杂的计算机环境具有极好的适应性。
  • 灵活可配置
    • 体系结构高可扩展:开放式的体系结构可以实现多种复制拓扑结构。
    • 数据同步内容可定制:支持数据筛选、过滤、转换、压缩和加密。
    • 轻量级设计实现快捷部署:能够在不中断业务的情况下,将主机数据库中的当前数据平滑地装载到备机数据库中。
  • 性能良好
    • 确保业务系统高可用:复制对主机源数据库系统几乎无影响,备机可实现业务系统快速切换和恢复。
    • 高效的数据实时同步:采用并行处理技术实现大批量数据的实时复制。
    • 可读写的备机系统:可以实现生产型业务与分析型业务相隔离的多业务中心。
  • 传输可靠
    • 高可靠的数据传输:严格按照主机业务系统事务顺序实施数据复制,保障备机数据库与主机数据库的事务级完整性和一致性。

3、支持多种异构数据平台

  1. DMHS 可以支持多种异构数据平台,可以根据用户需求采用非常灵活的方式配置出各种拓扑结构。 目前,源数据库可支持 DM 各系列、Oracle9i、Oracle10g、Oracle11g、Oracle12c、Oracle19c、ORACLE RAC 集群、DB2、PostgreSQL、MySQL 等。目的数据库支持具有 ODBC 标准接口实现的各种主流关系数据库管理系统,目前适配过的数据库有 DM 各系列、DM 集群、Oracle9i、Oracle10g、Oracle11g、Oracle12c、Oracle19c、ORACLE RAC 集群、DB2、Sybase、SQLServer、PostgreSQL、MySQL 等。
  2. DMHS 支持多种计算机操作系统平台,支持 Windows 系列、Linux 系列、IBM AIX、HP-UNIX 系列、Solaris 系列、国产操作系统 Kylin、Rocky 等 32 位和 64 位操作系统。
  3. DMHS 支持多种复制结构,支持不同厂商硬件(主机、存储)之间数据库的数据复制。DMHS 的开放式体系结构使其能够适应各种异构数据平台。DMHS 支持一对一同步 、一对多广播型同步 、多对一聚合型同步 、双向同步、多对多同步、多级中转级联同步等多种数据同步形式,支持组合多种同步形式以搭建复杂的拓扑结构。DMHS 支持主流厂商的硬件(主机、存储)之间数据库的数据复制,例如 IBM、HP、联想、华为、浪潮、曙光等硬件厂商,兼容多种硬件体系,可运行于于 X86、SPARC、POWER 等硬件平台之上,还支持龙芯、鲲鹏、飞腾、海光、兆芯、神威等国产 CPU 硬件平台,产品实现了平台无关性。DMHS 能够在目前流行的各种软硬件平台和数据库环境下传输数据,在同一解决方案架构下,实现企业不同平台上的多个信息系统的统一复制的支持。

4、高可靠的数据复制能力

        为保障数据传输内容的正确性,DMHS 对复制的数据内容做了 CRC 校验,保证收到的数据是可靠无误的,DMHS 对复制数据先后顺序也做了严格的一致性验证,保证数据复制传递过程是有序的。为保障数据传输的无丢失,DMHS 使用检查点机制实现断点续传。断点包括两个部分,即 DMHS 前置的变化数据捕捉模块数据抽取位置检查点和 DMHS 主程序的数据装载模块的已装载位置检查点。DMHS 的前置模块与主程序模块采取完备的消息应答机制来保障数据传输的可靠性和数据完整性。前置模块只有在得到确认消息后才认为数据传输完成,否则将自动重新传输数据。

        DMHS 支持初次数据装载全同步功能,能够在不中断业务的情况下,将源数据库中的当前数据平滑的装载到目标数据库中。DMHS 提供快速装载方式可针对源数据库历史的大量数据做到高效快速的初始化装载到目标数据库中。DMHS 提供丰富的装载选项可满足多种场景下的需求,用户可灵活组合使用。

        DMHS 的数据复制是通过分析源数据库的日志后以源端事务为单位发送给目标数据库的,源数据库日志中记录的事务是严格有序的,目标数据库严格按照源数据库上的事务顺序在目标数据库上实施数据复制同步,目标数据库上所执行的事务一定是源数据库已经提交完成的事务,DMHS 可保障目标数据库与源数据库的事务级完整性和一致性,确保目标数据库数据复制事务的业务逻辑符合源数据库上事务的业务逻辑。

5、支持数据库的所有主流类型字段

        DMHS 是目前业内成熟的数据复制和数据实时同步软件,支持目前主流所有数据库的数据类型字段同步,支持数值类型 (NUMBER、NUMERIC、DECIMAL、DEC、INTEGER、INT、SMALLINT、FLOAT、REAL、DOUBLE PRECISION、BINARY_FLOAT、BINARY_DOUBLE)、字符类型 (CHAR、VARCHAR、NCHAR、NVARCHAR2)、二进制数据类型 (BINARY、VARBINARY)、时间日期类型 (DATE、TIME、DATETIME、INTERVAL YEAR TO MONTH INTERVAL DAY TO SECOND)、大对象类型 (CLOB、BLOB、NCLOB、LONG、LONG RAW) 等主流类型字段的同步。

6、实现原理

达梦数据实时同步软件 DMHS,通过秒级数据实时同步可以有效避免传统备份系统导致的无法完全满足企业对于信息系统不中断服务的问题;通过变化日志捕捉可以有效降低传统 ETL 工具因创建触发器、影子表等对业务系统带来的性能影响;通过实时的数据同步,构建“双活”的主备系统,解决传统基于数据库自身的主备系统中备机只读而无法对外提供写服务的问题。
DMHS 的基础实现原理如下图所示。

DMHS的组成原理框图中包含源端数据库、目标端数据库、源端DMHS服务以及目标端DMHS服务,其中源端DMHS服务主要由装载模块(LOAD)、日志捕获分析模块(CPT)以及管理服务模块(MGR)组成;目标端DMHS服务则由执行模块(EXEC)和管理服务模块(MGR)组成。

在源端,DMHS的 CPT 模块采用优化的日志扫描算法实现增量日志数据的快速捕获分析,并将分析完成后的日志数据转换为内部的消息格式,然后通过网络将消息发送至目标端DMHS服务;

在目标端,DMHS服务接收到源端的日志消息后,对消息进行处理,通过多线程并行执行的方式将同步数据应用至目标端数据库,实现数据实时同步。

7、dmhs系统组成

        DMHS 同步服务主要包括四个模块,分别是捕获模块(CPT)、装载模块(LOAD)、传输模块(NET)以及执行模块(EXEC),这些模块统一由管理模块(MGR)进行管理执行。

管理模块(MGR)是 DMHS 同步服务的启动框架,根据配置文件加载并启动相关的功能模块:

1. 捕获模块(CPT)

        对源数据库增量日志进行捕获并完成解析,结合数据字典信息提取其中数据的变化如插入(INSERT)、删除(DELETE)、修改(UPDATE)和对象操作(DDL),然后将这些
操作及数据转换为内部的消息格式投递给网络(NET)模块。

        不同的源数据库管理系统具有不同的日志格式,但是在日志文件中通常都会记录操作的类型、操作的时间戳、事务 ID、操作数据等信息。DMHS 源端针对每一种支持的关系型数据库系统,均提供有相应的日志捕获分析模块,用以识别和解析不同的关系型数据库系统的日志数据。管理服务(MGR)中提供有通用的调用接口,通过配置的数据库类型,调用相应的日志分析模块。

        CPT 日志分析模块通常还需要结合数据字典信息才能正确的解析同步数据,因此在启动日志分析模块时,首先要进行数据字典装载操作,生成同步表的字典目录,保存完字典信息后才能启动日志捕获分析模块。DDL 操作的捕获分析同步有 2 种方式,分别是基于系统事件触发器的捕获分析和基于数据库日志的捕获分析。不同的实现方式其配置要求也不同,详细可参考后续章节。

2. 装载模块(LOAD)

        DMHS 在进行增量数据同步之前,需完成同步表的字典装载和表数据的初始装载。表字典装载将所有同步表的数据字典信息从源库中抽取出来,保存为本地的数据字典文件,用于数据同步过程中提供准确表定义信息。数据初始装载用于将源端数据库的初始数据同步至目标数据库,使得源库和目标库的初始数据保持一致。

        数据初始装载的有两种方式:直接的数据装载方式和备份文件装载方式。直接的数据装载方式基于源数据库数据的直接查询抽取装载;备份文件装载方式则是基于数据库自身的数据备份还原,将源库初始数据备份后在目标库进行还原达到初始数据一致。备份文件装载方式要求源库和目标库为同一类型的数据库系统,目前 DMHS 仅支持 DM 数据库的备份文件装载方式。

        初始装载使用 LOAD/COPY 控制台命令,该命令可以在不中断源数据库服务的情况下把源表初始基础数据装载到目的库上,同时配合日志分析模块完成该表后续的增量数据同步。初始装载模块不能跟日志分析模块同时运行,在执行 COPY 命令时,必须首先使用 STOP CPT 命令停止日志捕获分析模块的运行。

3. 传输模块(NET)

(1) NET 消息发送子模块

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

(2) NET 消息接收子模块

        经上一级 NET 消息发送子模块通过网络传输的消息,在这里由 NET 消息接收子模块通过网络(TCP/IP)接收并发送给 EXEC 模块。而上一级 NET 消息发送子模块保存消息的本地文件目录,既可以是一般的本地文件目录,也可以是提供 FTP 服务的 FTP 文件目录。当上一级 NET 消息发送子模块将消息保存在一般本地文件目录时,NET 消息接收子模块读取本地文件并发送给 EXEC 模块;当上一级 NET 消息发送子模块将消息保存在 FTP 文件目录时,NET 消息接收子模块可通过 FTP 服务器下载数据,并发送给 EXEC 模块。

        除了作为 CPT 模块和 EXEC 模块的传输媒介外,NET 模块还能够单独实现转发和路由功能,这两个功能需要在配置文件中独立配置,通过转发和路由功能实现多对多、一对多、文件中转和 FTP 中转的高级功能,具体配置方式和功能介绍请参阅相关章节。

4. 执行模块(EXEC)

        DMHS 目标端通过 NET 模块接收源端发送过来的日志消息,然后把这些消息按事务分类,如果某个事务上收到了提交消息,则通过 SQL 逆向生成的技术构造还原相应的事务 SQL语句,使用 ODBC 驱动接口对这些数据进行入库执行,完成数据同步;如果某个事务在源端回滚,则直接丢弃不执行。
        EXEC 模块使用多线程并行执行的方式,对多个提交事务同时进行入库执行,以提高入库执行的效率。由于事务之间的关联关系以及事务提交策略的影响,多个执行线程之间可能存在一定的等待关系,以满足事务的逻辑要求。EXEC 模块还可以通过事务合并、事务分裂等事务重组技术,以及 rowid 映射、批量绑定执行等技术加快同步执行的效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/615796.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统安装gflags

记录:这是在使用cmake项目构建时缺少gflag导致咋执行项目的时候报错 由于gflags官方网址访问不了,所以换了个地址,使用git来克隆项目 地址:git clone https://gitcode.com/gflags/gflags.git 下载下来之后在电脑终端执行下面的…

Python 单例模式解析复杂数组返回不同的值

单例模式是一种创建型设计模式,它的目的是保证一个类只有一个实例,并提供一个全局访问点。 单例模式的实现原理包括以下几个关键步骤: 将类的构造函数私有化,这样其他地方就无法直接通过 new 操作符来创建该类的实例。 在类的内…

Redis相关报错信息:Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接。

报错信息: Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接。 报错原因: 访问不到Redis服务 解决方案: 将Redis服务打开! 使用cmd命令行打开本机服务管理: services…

数组深入详解

1、背景 上传图片,需要对图片格式进行校验,这是就可以使用数组 2.1、什么是数组? Java 语言中提供的数组是用来存储固定大小的同类型元素。 如:可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量…

【前端转安卓】-Java基础知识笔记

常量定义:final public class HelloWorld {// 静态常量public static final double PI 3.14;// 声明成员常量final int y 10;public static void main(String[] args) {// 声明局部常量final double x 3.3;} }变量声明、赋值 String username,address,phone,te…

关于《电能质量管理办法(暂行)》实施的意义及解决方案——安科瑞赵嘉敏

中华人民共和国国家发展和改革委员会令 第8号 《电能质量管理办法(暂行)》已经2023年12月26日第7次委务会议审议通过,现予公布,自2024 年4月1日起施行。 主任 郑栅洁 2023年12月27日 1 办法解读 新型电力系统中新能源所占比例越来越高,光伏、风力等分布式电源、…

高德打车引入“红绿灯倒计时”能力,算力技术升级打车体验

打到的车还有多久能到?接驾车辆原地不动是什么原因?乘客在打车时,常常因为无法了解实时接驾路况,容易出现“等车焦虑”。 如今,高德打车已全面应用“红绿灯倒计时”能力,让乘客在等车时就能掌握接驾路况&am…

算法通关村第十二关-字符串基础题目

反转字符串 思路&#xff1a;遍历字符串&#xff0c;将第i个字符和第N-i-1个字符串交换即可&#xff1b; 代码实现&#xff1a; #include <iostream> #include <string> using namespace std;// 反转字符串 string reserveString(string str) {if (str.size() 0…

2024 年1月12日最热NLP大模型论文:Transformers are Multi-State RNNs

揭秘Transformer的无限可能&#xff0c;Meta研究发现Transformer其实是多状态RNN 引言&#xff1a;重新定义Transformer的视角 在自然语言处理&#xff08;NLP&#xff09;的领域&#xff0c;Transformer架构自2017年提出以来&#xff0c;已经成为了一种主流的模型&#xff0…

【mysql】有关mysql查询隐式类型转换的问题

在MySQL中&#xff0c;如果id字段是int类型且作为主键&#xff0c;那么执行以下两个查询&#xff1a; WHERE id IN (1,2,3)和 WHERE id IN ("1","2","3")理论上&#xff0c;在处理时MySQL会将字符串类型的值 "1", "2", &q…

OpenSSL升级版本

1 查看openssl版本 $ openssl version OpenSSL 1.0.2k-fips 26 Jan 2017 目前是1.0版本系列. 2 下载最新稳定版本的OpenSSL源码包 $ wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz 3 编译源码安装 tar -xzvf openssl-1.1.1q.tar.gz cd openssl-1.1.1q .…

【安装】Linux安装ffmpeg

ffmpeg 下载地址 Index of /releases (ffmpeg.org) 下载 wget https://ffmpeg.org//releases/ffmpeg-6.1.1.tar.gz tar -zxvf ffmpeg-6.1.1.tar.gz 进入解压后目录,输入如下命令/usr/local/ffmpeg为自己指定的安装目录 cd ffmpeg-6.1.1 ./configure --prefix/usr/local/ffm…

第十四章JSON

第十四章JSON 1.什么是JSON2.JSON的定义和访问3.JSON在JavaScript中两种常用的转换方式4.JavaBean和JSON的相互转换5.List集合和JSON的相互转换6.map集合和JSON的相互转换 1.什么是JSON 2.JSON的定义和访问 JSON的定义 JSON的类型是一个Object类型 JSON的访问 我们要…

K8S动态PV

pv和pvc存储卷 存储卷&#xff1a; emptyDir容器内部&#xff0c;随着pod销毁&#xff0c;emptyDir也会消失&#xff0c;不能做数据持久化 hostPath&#xff1a;持久化存储数据&#xff0c;可以和节点上目录做挂载。pod被销毁了数据还在 NFS&#xff1a;一台机器&#xff0…

芋道框架----(业务表单工作流)短信通知流程分析

芋道中给的请假流程示例&#xff0c;在发起流程的时候&#xff0c;可以看到它是由短信通知的&#xff0c;找了好久&#xff0c;想看看是什么时候触发的&#xff0c;之前一直以为是监听器&#xff0c;结果导致思维先入为主&#xff0c;陷入了怪圈&#xff0c;现做如下总结。 首先…

C //练习 5-15 增加选项-f,使得排序过程不考虑字母大小写之间的区别。例如,比较a和A时认为它们相等。

C程序设计语言 &#xff08;第二版&#xff09; 练习 5-15 练习 5-15 增加选项-f&#xff0c;使得排序过程不考虑字母大小写之间的区别。例如&#xff0c;比较a和A时认为它们相等。 注意&#xff1a;代码在win32控制台运行&#xff0c;在不同的IDE环境下&#xff0c;有部分可…

轻松批量重命名,一键随机并控制长度:让你的文件夹名充满无限可能

在数字时代&#xff0c;我们拥有海量的数据和文件&#xff0c;其中很多都存储在各种文件夹中。然而&#xff0c;随着时间的推移&#xff0c;文件夹名称可能变得不再相关或难以记忆。如何给这些文件夹一个全新的、充满创意的名字&#xff1f;今天&#xff0c;我们为你带来了这款…

20/100 删除链表的倒数第 N 个结点 21/100 有效的括号 22/100 合并两个有序列表

20/100 删除链表的倒数第 N 个结点 题目&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 题解&#xff1a; 方法1&#xff1a;第一次完整遍历一遍得到长度&#xff0c;第二次遍历到倒数第n个数据前一个&#xff0c;进…

vue3中组合式api的常用方法

vue3中组合式api的常用方法 记录一下vue3中常用的组合式api&#xff0c;包括计算属性computed、监听器watch及watchEffective 一、computed 作用&#xff1a;根据已有数据计算出新数据&#xff08;和Vue2中的computed作用一致&#xff09;。 <template><div class&…

Bom 和 Dom 区别 ----- 真是DOM 和 虚拟Dom区别

DOM和BOM的区别 我们都指代&#xff0c;javascript由三个部分组成&#xff1a; ECMAScript&#xff1a;描述了JS的语法和基本对象 BOM(浏览器对象)&#xff1a;与浏览器交互的方法和对象 DOM(文档对象模型)&#xff1a;处理网页内容的方法和接 ps&#xff1a;根据宿主&#x…