CN115422286A - 一种分布式数据库的数据同步方法及设备 - Google Patents
一种分布式数据库的数据同步方法及设备 Download PDFInfo
- Publication number
- CN115422286A CN115422286A CN202211003580.0A CN202211003580A CN115422286A CN 115422286 A CN115422286 A CN 115422286A CN 202211003580 A CN202211003580 A CN 202211003580A CN 115422286 A CN115422286 A CN 115422286A
- Authority
- CN
- China
- Prior art keywords
- ddl
- log
- data
- data synchronization
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种分布式数据库的数据同步方法及设备。其方法部分主要包括:在源端数据库部署源端数据同步系统,在目标端部署目标端数据同步系统;在元数据管理节点运行模式下,所述源端数据同步系统从源端数据库读取、解析、缓存日志;在数据节点运行模式下,所述源端数据同步系统从源端数据库读取、解析日志并将日志打包发送到目标端数据同步系统;所述目标端数据同步系统在接收到所述源端数据同步系统发送过来的消息包后进行解包,并将这些解包操作应用到目标端数据库。本发明通过将分布式数据库的每个节点独立部署同步软件,实现数据并行同步,从而大幅提升数据同步性能。
Description
技术领域
本发明涉及数据库数据处理技术领域,特别是涉及一种分布式数据库的数据同步方法及设备。
背景技术
数据操纵语言(DML)使用"选择"、"插入"、"更新"和"删除"关键字来操作数据。数据定义语言(DDL)用于创建和操作表结构。
分布式数据库集群系统中,由于分布式事务的特性,事务日志分散在不同的节点上,同时,DDL操作可能又是在另外的元数据管理节点上处理。也就是说,表数据的操作日志分散在分布式集群的各个节点,DDL操作又分布在另外的专用节点。在这种情况下,如果需要支持数据同步和DDL同步,那么就需要考虑DDL操作和DML操作的时序问题,即先后顺序。例如,建表操作在分布式节点EP0上,而表插入操作在分布式节点EP1上,在同步时,如果先同步插入操作,再同步建表操作,那么存在时序错误,插入操作执行报错。因此,如何正确同步表DML和DDL操作成为亟待解决的问题。
针对该问题,现有通常的方案是合并所有节点的日志,然后对日志进行排序,最后确定DDL和DML的操作时序,从而正常同步DML和DDL。该方案的缺点是捕获所有节点的日志,同时排序合并日志,在海量数据的情况下,这种代价很高,且性能很低。
鉴于此,如何克服现有技术所存在的缺陷,如何解决上述技术问题,就成为业界亟待解决的重要技术难题。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供一种分布式数据库的数据同步方法及设备,基于分布式数据库的DML和DDL操作日志分布在不同的节点,本发明采用多节点并发同步的架构,每个节点涉及到的DDL操作从元数据管理节点获取,这样就能保证每个节点的表数据操作的时序性和一致性。在目标端DDL入库时,使用锁表机制保证每个DDL不会重复入库。在本发明同步架构中,每个节点的同步是独立的,同步的事务是分散的,同步的数据整体上是完整的、一致的,这样并发处理,从而提升同步的整体性能。
本发明实施例采用如下技术方案:
第一方面,本发明提供了一种分布式数据库的数据同步方法,包括:
在源端数据库部署源端数据同步系统,在目标端部署目标端数据同步系统;其中,源端数据同步系统包括元数据管理节点运行模式以及数据节点运行模式;
在元数据管理节点运行模式下,所述源端数据同步系统初始化日志读取线程、日志解析线程、日志缓存线程,用于从源端数据库读取、解析、缓存日志;
在数据节点运行模式下,所述源端数据同步系统初始化日志读取线程、日志解析线程、日志发送线程,用于从源端数据库读取、解析日志并将日志打包发送到目标端数据同步系统;
所述目标端数据同步系统在接收到所述源端数据同步系统发送过来的消息包后进行解包,并将这些解包操作应用到目标端数据库,对于解包的操作,如果是DDL操作,那么目标端同步系统使用DDL协同入库策略执行DDL入库;如果是非DDL操作,则直接入库。
进一步的,所述目标端同步系统的DDL协同入库策略包括:
目标端数据同步系统在目标端数据库上初始化一个DDL协同入库辅助表DDL_SYNC;该DDL_SYNC表的STATE字段表示状态信息,具体值包括:“over”表示对应DDL已入库完成;“ready”表示对应DDL同步已准备好;设置数据节点总数为M,设置变量i=0;
从DDL_SYNC表中查询获得STATE值为“over”的数据行数n1;
若n1不大于0,则进行DDL操作类型的判断并根据操作类型的不同使用不同过程对DDL_SYNC表上X锁;
获取DDL_SYNC表STATE值为“over”的数据行数n3;
若n3不大于0,则执行DDL入库操作并释放DDL_SYNC表的X锁。
进一步的,所述若n1不大于0,则进行DDL操作类型的判断并根据操作类型的不同使用不同过程对DDL_SYNC表上X锁具体包括:
若n1不大于0,判断DDL操作是否是ALTER或TRUNCATE操作;
若不是ALTER或TRUNCATE操作,则直接对DDL_SYNC表上X锁;
若是ALTER或TRUNCATE操作,则从DDL_SYNC表查询获得STATE值为“ready”的数据行数n2,判断n2+1是否等于M;若n2+1等于M,则对DDL_SYNC表上X锁,若n2+1不等于M,则判断i是否等于0;若i等于0,则向DDL_SYNC表插入STATE值为“ready”的当前DDL信息,设置i=i+1,等待1秒后重新进入n1获取步骤,若i不等于0,则直接等待1秒后重新进入n1获取步骤。
进一步的,所述从DDL_SYNC表中查询获得STATE值为“over”的数据行数n1时,若n1大于0,则跳过该DDL操作,即不执行该DDL入库操作,直接结束本次DDL同步。
进一步的,所述若n3不大于0,则执行DDL入库操作并释放DDL_SYNC表的X锁具体包括:
若n3不大于0,向DDL_SYNC表插入STATE值为“over”的当前DDL信息;
执行当前DDL的入库操作,释放DDL_SYNC表的X锁;
结束本次DDL同步。
进一步的,所述获取DDL_SYNC表STATE值为“over”的数据行数n3时,若n3大于0,则直接释放DDL_SYNC表的X锁,然后跳过该DDL操作,即不执行该DDL入库操作,直接结束本次DDL同步。
进一步的,所述源端数据库包括分布式数据库集群;所述目标端包括其他数据源、单节点数据库、多节点的集群系统中的一种或多种。
进一步的,所述在元数据管理节点运行模式下,源端数据同步系统初始化日志读取线程、日志解析线程、日志缓存线程,用于从源端数据库读取、解析、缓存日志具体包括:
元数据管理节点对应的源端数据同步系统初始化一个日志读取线程、日志解析线程、日志缓存线程;
日志读取线程用于读取数据库日志,将读到的日志加入到待解析队列;
日志解析线程用于从待解析队列中获取日志并解析成待处理事务信息,并将其加入到日志待缓存队列;
日志缓存线程用于从待缓存队列中获取日志信息,并按照事务ID归类进行缓存。
进一步的,所述在数据节点运行模式下,所述源端数据同步系统初始化日志读取线程、日志解析线程、日志发送线程,用于从源端数据库读取、解析日志并将日志打包发送到目标端数据同步系统具体包括:
数据节点对应的源端数据同步系统初始化一个日志读取线程、日志解析线程、日志发送线程,其中,日志解析线程包含一个DDL日志请求模块,用于根据事务ID从元数据管理节点获取相关的DDL操作日志;
日志读取线程用于从对应数据节点读取日志,并将读取的日志加入到日志待解析队列中;
日志解析线程用于解析待解析队列中的日志,若遇到DDL请求日志,那么通过DDL日志请求模块从元数据管理节点对应的源端数据同步系统中获取DDL相关日志,并将其加入到日志待解析队列中;日志解析线程还用于将解析完成的日志打包成同步系统的内部消息格式,并将其加入到消息待发送队列;
日志发送线程用于将待发送队列中的消息发送到目标端数据同步系统。
另一方面,本发明提供了一种分布式数据库的数据同步设备,具体为:包括至少一个处理器和存储器,至少一个处理器和存储器之间通过数据总线连接,存储器存储能被至少一个处理器执行的指令,指令在被处理器执行后,用于完成第一方面中的分布式数据库的数据同步方法。
与现有技术相比,本发明的有益效果在于:本发明提供一种分布式数据库的数据同步方法及设备,基于分布式数据库的DML和DDL操作日志分布在不同的节点,本发明采用多节点并发同步的架构,每个节点涉及到的DDL操作从元数据管理节点获取,这样就能保证每个节点的表数据操作的时序性和一致性。在目标端DDL入库时,使用锁表机制保证每个DDL不会重复入库。在本发明同步架构中,每个节点的同步是独立的,同步的事务是分散的,同步的数据整体上是完整的、一致的,这样并发处理,从而提升同步的整体性能。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍。显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1提供的一种分布式数据库的数据同步方法流程图;
图2为本发明实施例1提供的步骤200具体流程图;
图3为本发明实施例1提供的步骤300具体流程图;
图4为本发明实施例1提供的DDL协同入库策略的流程图;
图5为本发明实施例1提供的步骤430具体流程图;
图6为本发明实施例1提供的步骤450具体流程图;
图7为本发明实施例2提供的DDL日志请求模块的处理流程图;
图8为本发明实施例3提供的基于日志解析的分布式数据库数据同步架构图;
图9为本发明实施例3提供的目标端数据同步系统DDL协同入库流程图;
图10为本发明实施例4提供的一种分布式数据库的数据同步设备结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,并且这里所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。另外,本发明提供的各个实施例或单个实施例中的技术特征可以相互任意结合,以形成可行的技术方案,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时,应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明是一种特定功能系统的体系结构,因此在具体实施例中主要说明各结构模组的功能逻辑关系,并不对具体软件和硬件实施方式做限定。
需要先说明的是,分布式数据库在记录DML和DDL日志时具有如下特点:
存在唯一的一个元数据管理主节点,所有元数据(DDL)操作都详细记录在本节点的日志中。
数据节点存在多个,也可以存在多副本。数据节点上DML操作的数据仅记录在本节点日志中。
一个事务跨多个节点时,每个节点上记录的事务ID都相同;该事务结束(提交或回滚)时,相关的节点都将该事务的结束信息记录到日志中。
DDL事务会在每个数据节点中记录一个DDL标识日志,该日志包含信息:事务ID、LSN、元数据节点号、本节点号、涉及到的其他数据节点号等。
本发明是用于根据分布式数据库集群的特性,解决海量数据情况下同步性能低下的问题,将分布式数据库的每个节点独立部署同步软件,实现数据并行同步,从而大幅提升数据同步性能。
基于上述现实情况,本发明实施例提供了一种分布式数据库数据同步的方法和设备,下面就参考附图和实施例结合来详细说明本发明。
实施例1:
如图1所示,本发明实施例提供一种分布式数据库的数据同步方法,具体步骤如下。
步骤100:在源端数据库部署源端数据同步系统,在目标端部署目标端数据同步系统;其中,源端数据同步系统包括元数据管理节点运行模式以及数据节点运行模式。
步骤200:在元数据管理节点运行模式下,所述源端数据同步系统初始化日志读取线程、日志解析线程、日志缓存线程,用于从源端数据库读取、解析、缓存日志。
步骤300:在数据节点运行模式下,所述源端数据同步系统初始化日志读取线程、日志解析线程、日志发送线程,用于从源端数据库读取、解析日志并将日志打包发送到目标端数据同步系统。
步骤400:所述目标端数据同步系统在接收到所述源端数据同步系统发送过来的消息包后进行解包,并将这些解包操作应用到目标端数据库,对于解包的操作,如果是DDL操作,那么目标端同步系统使用DDL协同入库策略执行DDL入库;如果是非DDL操作,则直接入库。
以上为本优选实施例的基本步骤,通过将分布式数据库的每个节点独立部署同步软件,实现数据并行同步,从而大幅提升数据同步性能。下面通过对各个步骤进行详细说明,来对本优选实施例的方案进行深入说明。
对于本优选实施例的步骤100(在源端数据库部署源端数据同步系统,在目标端部署目标端数据同步系统),其中的所述源端数据库包括分布式数据库集群;所述目标端包括其他数据源、单节点数据库、多节点的集群系统中的一种或多种,也即是说,目标端既可以为其他数据源,也可以是一般的单节点数据库,也可以是多节点的集群系统。另外,在源端数据库及目标端数据源部署同步系统时,在源端的分布式数据库的每个节点上分别部署一套源端数据同步系统,源端数据同步系统根据对应节点的模式分为两种运行模式:数据节点(如DML操作的节点)运行模式和元数据管理节点(如DDL操作的节点)运行模式。
对于本优选实施例的步骤200(在元数据管理节点运行模式下,源端数据同步系统初始化日志读取线程、日志解析线程、日志缓存线程,用于从源端数据库读取、解析、缓存日志),参考图2,具体可扩展为包括如下步骤。
步骤201:元数据管理节点对应的源端数据同步系统初始化一个日志读取线程、日志解析线程、日志缓存线程。
步骤202:元数据管理节点对应的日志读取线程用于读取数据库日志,将读到的日志加入到待解析队列。
步骤203:元数据管理节点对应的日志解析线程用于从待解析队列中获取日志并解析成待处理事务信息,并将其加入到日志待缓存队列。
步骤204:元数据管理节点对应的日志缓存线程用于从待缓存队列中获取日志信息,并按照事务ID归类进行缓存。
对于本优选实施例的步骤300(在数据节点运行模式下,所述源端数据同步系统初始化日志读取线程、日志解析线程、日志发送线程,用于从源端数据库读取、解析日志并将日志打包发送到目标端数据同步系统),参考图3,具体可扩展为包括如下步骤。
步骤301:数据节点对应的源端数据同步系统初始化一个日志读取线程、日志解析线程、日志发送线程。其中,数据节点对应的日志解析线程包含一个DDL日志请求模块,用于根据事务ID从元数据管理节点获取相关的DDL操作日志。
步骤302:数据节点对应的日志读取线程用于从对应数据节点读取日志,并将读取的日志加入到日志待解析队列中。
步骤303:数据节点对应的日志解析线程用于解析待解析队列中的日志,若遇到DDL请求日志,那么通过DDL日志请求模块从元数据管理节点对应的源端数据同步系统中获取DDL相关日志,并将其加入到日志待解析队列中;数据节点对应的日志解析线程还用于将解析完成的日志打包成同步系统的内部消息格式,并将其加入到消息待发送队列。
步骤304:数据节点对应的日志发送线程用于将待发送队列中的消息发送到目标端数据同步系统。
对于本优选实施例的步骤400,目标端数据同步系统首先会初始化一张DDL同步辅助表,该表记录DDL操作的详细信息,包括:事务号、LSN、操作类型、对象名称、状态、数据节点数、当前节点号、涉及的其他节点信息等;目标端数据同步系统负责把源端发过来的同步消息解包,并将这些解包操作应到目标端数据库。如果是DDL操作,那么目标端同步系统使用DDL协同入库策略执行DDL入库;如果是非DDL操作,则直接入库。
本优选实施例通过上述方案运行时,源端数据同步系统根据分布式集群的节点特性运行在对应的模式下,数据节点从元数据节点获取DDL信息,补充完整的DDL信息。每个数据节点各自独立运行,并行同步,互不干扰。目标端同步系统负责DDL和DML入库。
在本优选实施例中,参考图4,步骤400中所述的目标端同步系统的DDL协同入库策略具体包括如下步骤。
步骤410:目标端数据同步系统在目标端数据库上初始化一个DDL协同入库辅助表DDL_SYNC(也即前面说的DDL同步辅助表)。该DDL_SYNC表的STATE字段表示状态信息,具体值包括:“over”表示对应DDL已入库完成;“ready”表示对应DDL同步已准备好;然后还需要设置数据节点总数为M,设置变量i=0。
步骤420:从DDL_SYNC表中查询获得STATE值为“over”的数据行数n1。
步骤430:若n1不大于0,则进行DDL操作类型的判断并根据操作类型的不同使用不同过程对DDL_SYNC表上X锁(也即排他锁)。
步骤440:获取DDL_SYNC表STATE值为“over”的数据行数n3。需说明的是,该步骤获取的n3与前面获取的n1是有区别的,因为在并发过程中,这个表会被插入新的数据,所以需要重新查询。
步骤450:若n3不大于0,则执行DDL入库操作并释放DDL_SYNC表的X锁。
在本优选实施例中,参考图5,步骤430中所述若n1不大于0,则进行DDL操作类型的判断并根据操作类型的不同使用不同过程对DDL_SYNC表上X锁具体包括如下步骤。
步骤431:若n1不大于0,判断DDL操作是否是ALTER或TRUNCATE操作。
步骤432:若不是ALTER或TRUNCATE操作,则直接对DDL_SYNC表上X锁。
步骤433:若是ALTER或TRUNCATE操作,则从DDL_SYNC表查询获得STATE值为“ready”的数据行数n2,判断n2+1是否等于M。
步骤434:若n2+1等于M,则对DDL_SYNC表上X锁,若n2+1不等于M,则判断i是否等于0。
步骤435:若i等于0,则向DDL_SYNC表插入STATE值为“ready”的当前DDL信息,设置i=i+1,等待1秒后重新进入n1获取步骤,这里重新进入n1获取步骤是为了获取最新的数据;若i不等于0,则直接等待1秒后重新进入n1获取步骤,这里是一个等待过程,因为会存在多个数据库连接来操作这张DDL_SYNC表,那么n1每次获取的值可能不一样,通过n1判断是否等待其他连接操作数据。
基于上述步骤,所述从DDL_SYNC表中查询获得STATE值为“over”的数据行数n1时,若n1大于0,则跳过该DDL操作,即不执行该DDL入库操作,直接结束本次DDL同步。
在本优选实施例中,参考图6,步骤450中所述若n3不大于0,则执行DDL入库操作并释放DDL_SYNC表的X锁具体包括如下步骤。
步骤451:若n3不大于0,向DDL_SYNC表插入STATE值为“over”的当前DDL信息。
步骤452:执行当前DDL的入库操作,释放DDL_SYNC表的X锁。
步骤453:结束本次DDL同步。
基于上述步骤,所述获取DDL_SYNC表STATE值为“over”的数据行数n3时,若n3大于0,则直接释放DDL_SYNC表的X锁,然后跳过该DDL操作,即不执行该DDL入库操作,直接结束本次DDL同步。
综上所述,本优选实施例提供一种分布式数据库的数据同步方法,基于分布式数据库的DML和DDL操作日志分布在不同的节点,本优选实施例采用多节点并发同步的架构,每个节点涉及到的DDL操作从元数据管理节点获取,这样就能保证每个节点的表数据操作的时序性和一致性。在目标端DDL入库时,使用锁表机制保证每个DDL不会重复入库。在本优选实施例同步架构中,每个节点的同步是独立的,同步的事务是分散的,同步的数据整体上是完整的、一致的,这样并发处理,从而提升同步的整体性能。
实施例2:
基于实施例1提供的分布式数据库的数据同步方法,本实施例2对源端数据同步系统的日志解析线程中的DDL日志请求模块的处理流程进行详细说明。如图7所示,包括如下步骤。
步骤1、解析日志,日志解析线程中解析日志后,DDL日志请求模块获取日志的类型、时间戳、事务信息等,进入步骤2。
步骤2、是DDL请求?根据日志类型判断是否是DDL请求日志,如果是,进入步骤3;否则,进入步骤11。
步骤3、创建与元数据同步系统的连接META_CONN,进入步骤4。图中,(源端)元数据同步系统也即实施例1中的源端数据同步系统。
步骤4、构造请求消息MSG_DDL,包含消息类型、数据节点号、时间戳、事务信息等,进入步骤5。
步骤5、获取DDL日志,设置总的日志为M,当前的日志序号CUR_SEQ=i,进入步骤6。
步骤6、判断i是否等于M,如果是,进入步骤11;否则,进入步骤7。
步骤7、获取下一个日志,设置CUR_SEQ=i+1,进入步骤8。
步骤8、是否通讯故障,如果是,进入步骤9;否则,进入步骤10。
步骤9、设置CUR_SEQ=i,重新获取,进入步骤5。
步骤10、缓存当前日志,设置i=i+1,进入步骤6。
步骤11、本次请求结束。
本实施例的DDL日志请求模块在每个数据节点同步系统中都包含,也就是说,一个DDL操作会在多个数据节点同步系统中重复出现,那么,如何协同这些DDL同步将在下一个实施例中具体涉及到。
实施例3:
基于实施例1提供的分布式数据库的数据同步方法,本实施例3提供一种基于日志解析的分布式数据库数据同步架构图,来对本发明进行更详细的说明。
如图8所示,为本实施例提供的基于日志解析的分布式数据库数据同步架构图。其中,源端数据库为分布式数据库集群,包括一个根服务器(图中Root Server)以及多个数据节点(图中EP0、EP1……EPn),数据节点中,EP0为元数据节点(或称元数据管理节点),该节点有DDL操作,而其他EP1……Epn则是普通的数据节点,有DML操作。源端的每个节点都对应一个源端同步系统(也即源端数据同步系统),其中,元数据节点EP0对应的源端同步系统HS0中,包括日志读取、日志解析、日志缓存三个线程,HS0中日志读取线程负责读取数据库日志,将读到的日志加入到待解析队列,HS0中解析线程从待解析队列中获取日志并解析成待处理事务信息,并将其加入到日志待缓存队列,HS0中日志缓存线程从待缓存队列中获取日志信息,并按照事务ID归类进行缓存。而其他数据节点EP1……Epn对应的源端同步系统HS1……HSn中,包括日志读取、日志解析(DDL请求)、日志发送三个线程,HS1……HSn中的日志读取线程负责从对应数据节点读取日志,并将读取的日志加入到日志待解析队列中;HS1……HSn中的日志解析线程负责解析待解析队列中的日志,如果遇到DDL请求日志,那么从元数据管理节点EP0对应的源端同步系统HS0中获取DDL相关日志,并将其加入到日志待解析队列中,HS1……HSn中的日志解析线程还负责将解析完成的日志打包成同步系统的内部消息格式,并将其加入到消息待发送队列;HS1……HSn中的日志发送线程负责将待发送队列中的消息发送到目标端数据同步系统。对于目标端数据库,其与数据节点EP1……Epn、源端同步系统HS1……HSn相对应的设置有目标端同步系统(也即目标端数据同步系统)EXEC1……EXECn,用于把源端发过来的同步消息解包,并将这些解包操作应到目标端数据库。如果是DDL操作,那么目标端同步系统EXEC1……EXECn使用DDL协同入库策略执行DDL入库;如果是非DDL操作,则直接入库。
如图9所示,为本实施例中目标端数据同步系统DDL协同入库流程图。其具体过程如下。
101:目标端数据同步系统在目标数据库上初始化一个DDL协同入库辅助表DDL_SYNC,该表的STATE字段表示状态信息,具体值为:“over”表示该DDL已入库完成;“ready”表示该DDL同步已准备好。设置数据节点总数为M,设置变量i=0,进入步骤102。
102:从DDL_SYNC表查询获得STATE值为“over”的数据行数n1,进入步骤103。
103:如果n1大于0,进入步骤104;否则,进入步骤105。
104:跳过该DDL操作,即不执行该DDL入库操作,进入步骤117。
105:该DDL是否是ALTER或TRUNCATE操作,如果是,进入步骤106;否则,进入步骤107。
106:从DDL_SYNC表查询获得STATE值为“ready”的数据行数n2,进入步骤108。
107:对DDL_SYNC表上X锁(排他锁),进入步骤112。
108:判断n2+1是否等于M,如果是,则进入步骤107;否则,进入步骤109。
109:判断i是否等于0,如果是,则进入步骤110;否则,进入步骤111。
110:向DDL_SYNC表插入STATE值为“ready”的当前DDL信息,设置i=i+1;进入步骤111。
111:等待1秒,进入步骤102。
112:从DDL_SYNC表查询获得STATE值为“over”的数据行数n3,进入步骤113。
113:判断n3是否大于0,如果是,则进入步骤114;否则,进入步骤115。
114:释放DDL_SYNC表的X锁,进入步骤104。
115:向DDL_SYNC表插入STATE值为“over”的当前DDL信息,进入步骤116。
116:执行当前DDL的入库操作,释放DDL_SYNC表X锁,进入步骤117。
117:结束本次DDL同步。
综上所述,本实施例基于分布式数据库的DML和DDL操作日志分布在不同的节点,采用多节点并发同步的架构,每个节点涉及到的DDL操作从元数据管理节点获取,这样就能保证每个节点的表数据操作的时序性和一致性。在目标端DDL入库时,使用锁表机制保证每个DDL不会重复入库。在本实施例同步架构中,每个节点的同步是独立的,同步的事务是分散的,同步的数据整体上是完整的、一致的,这样并发处理,从而提升同步的整体性能。
实施例4:
在上述实施例1提供的分布式数据库的数据同步方法的基础上,本发明还提供了一种可用于实现上述方法的分布式数据库的数据同步设备,如图10所示,是本发明实施例的设备架构示意图。本实施例的分布式数据库的数据同步设备包括一个或多个处理器21以及存储器22。其中,图10中以一个处理器21为例。
处理器21和存储器22可以通过总线或者其他方式连接,图10中以通过总线连接为例。
存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的分布式数据库的数据同步方法。处理器21通过运行存储在存储器22中的非易失性软件程序、指令以及模块,从而执行分布式数据库的数据同步设备的各种功能应用以及数据处理,即实现实施例1的分布式数据库的数据同步方法。
存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
程序指令/模块存储在存储器22中,当被一个或者多个处理器21执行时,执行上述实施例1中的分布式数据库的数据同步方法,例如,执行以上描述的图1-图6所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ReadOnlyMemory,简写为:ROM)、随机存取存储器(RandomAccessMemory,简写为:RAM)、磁盘或光盘等。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种分布式数据库的数据同步方法,其特征在于,包括:
在源端数据库部署源端数据同步系统,在目标端部署目标端数据同步系统;其中,源端数据同步系统包括元数据管理节点运行模式以及数据节点运行模式;
在元数据管理节点运行模式下,所述源端数据同步系统初始化日志读取线程、日志解析线程、日志缓存线程,用于从源端数据库读取、解析、缓存日志;
在数据节点运行模式下,所述源端数据同步系统初始化日志读取线程、日志解析线程、日志发送线程,用于从源端数据库读取、解析日志并将日志打包发送到目标端数据同步系统;
所述目标端数据同步系统在接收到所述源端数据同步系统发送过来的消息包后进行解包,并将这些解包操作应用到目标端数据库,对于解包的操作,如果是DDL操作,那么目标端同步系统使用DDL协同入库策略执行DDL入库;如果是非DDL操作,则直接入库。
2.根据权利要求1所述的分布式数据库的数据同步方法,其特征在于,所述目标端同步系统的DDL协同入库策略包括:
目标端数据同步系统在目标端数据库上初始化一个DDL协同入库辅助表DDL_SYNC;该DDL_SYNC表的STATE字段表示状态信息,具体值包括:“over”表示对应DDL已入库完成;“ready”表示对应DDL同步已准备好;设置数据节点总数为M,设置变量i=0;
从DDL_SYNC表中查询获得STATE值为“over”的数据行数n1;
若n1不大于0,则进行DDL操作类型的判断并根据操作类型的不同使用不同过程对DDL_SYNC表上X锁;
获取DDL_SYNC表STATE值为“over”的数据行数n3;
若n3不大于0,则执行DDL入库操作并释放DDL_SYNC表的X锁。
3.根据权利要求2所述的分布式数据库的数据同步方法,其特征在于,所述若n1不大于0,则进行DDL操作类型的判断并根据操作类型的不同使用不同过程对DDL_SYNC表上X锁具体包括:
若n1不大于0,判断DDL操作是否是ALTER或TRUNCATE操作;
若不是ALTER或TRUNCATE操作,则直接对DDL_SYNC表上X锁;
若是ALTER或TRUNCATE操作,则从DDL_SYNC表查询获得STATE值为“ready”的数据行数n2,判断n2+1是否等于M;若n2+1等于M,则对DDL_SYNC表上X锁,若n2+1不等于M,则判断i是否等于0;若i等于0,则向DDL_SYNC表插入STATE值为“ready”的当前DDL信息,设置i=i+1,等待1秒后重新进入n1获取步骤,若i不等于0,则直接等待1秒后重新进入n1获取步骤。
4.根据权利要求3所述的分布式数据库的数据同步方法,其特征在于,所述从DDL_SYNC表中查询获得STATE值为“over”的数据行数n1时,若n1大于0,则跳过该DDL操作,即不执行该DDL入库操作,直接结束本次DDL同步。
5.根据权利要求3所述的分布式数据库的数据同步方法,其特征在于,所述若n3不大于0,则执行DDL入库操作并释放DDL_SYNC表的X锁具体包括:
若n3不大于0,向DDL_SYNC表插入STATE值为“over”的当前DDL信息;
执行当前DDL的入库操作,释放DDL_SYNC表的X锁;
结束本次DDL同步。
6.根据权利要求5所述的分布式数据库的数据同步方法,其特征在于,所述获取DDL_SYNC表STATE值为“over”的数据行数n3时,若n3大于0,则直接释放DDL_SYNC表的X锁,然后跳过该DDL操作,即不执行该DDL入库操作,直接结束本次DDL同步。
7.根据权利要求1-6任一所述的分布式数据库的数据同步方法,其特征在于,所述源端数据库包括分布式数据库集群;所述目标端包括其他数据源、单节点数据库、多节点的集群系统中的一种或多种。
8.根据权利要求1-6任一所述的分布式数据库的数据同步方法,其特征在于,所述在元数据管理节点运行模式下,源端数据同步系统初始化日志读取线程、日志解析线程、日志缓存线程,用于从源端数据库读取、解析、缓存日志具体包括:
元数据管理节点对应的源端数据同步系统初始化一个日志读取线程、日志解析线程、日志缓存线程;
元数据管理节点对应的日志读取线程用于读取数据库日志,将读到的日志加入到待解析队列;
元数据管理节点对应的日志解析线程用于从待解析队列中获取日志并解析成待处理事务信息,并将其加入到日志待缓存队列;
元数据管理节点对应的日志缓存线程用于从待缓存队列中获取日志信息,并按照事务ID归类进行缓存。
9.根据权利要求1-6任一所述的分布式数据库的数据同步方法,其特征在于,所述在数据节点运行模式下,所述源端数据同步系统初始化日志读取线程、日志解析线程、日志发送线程,用于从源端数据库读取、解析日志并将日志打包发送到目标端数据同步系统具体包括:
数据节点对应的源端数据同步系统初始化一个日志读取线程、日志解析线程、日志发送线程,其中,数据节点对应的日志解析线程包含一个DDL日志请求模块,用于根据事务ID从元数据管理节点获取相关的DDL操作日志;
数据节点对应的日志读取线程用于从对应数据节点读取日志,并将读取的日志加入到日志待解析队列中;
数据节点对应的日志解析线程用于解析待解析队列中的日志,若遇到DDL请求日志,那么通过DDL日志请求模块从元数据管理节点对应的源端数据同步系统中获取DDL相关日志,并将其加入到日志待解析队列中;数据节点对应的日志解析线程还用于将解析完成的日志打包成同步系统的内部消息格式,并将其加入到消息待发送队列;
数据节点对应的日志发送线程用于将待发送队列中的消息发送到目标端数据同步系统。
10.一种分布式数据库的数据同步设备,其特征在于:
包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储能被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成权利要求1-9中任一项所述的分布式数据库的数据同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211003580.0A CN115422286A (zh) | 2022-08-19 | 2022-08-19 | 一种分布式数据库的数据同步方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211003580.0A CN115422286A (zh) | 2022-08-19 | 2022-08-19 | 一种分布式数据库的数据同步方法及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115422286A true CN115422286A (zh) | 2022-12-02 |
Family
ID=84198697
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211003580.0A Pending CN115422286A (zh) | 2022-08-19 | 2022-08-19 | 一种分布式数据库的数据同步方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115422286A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117992257A (zh) * | 2024-04-07 | 2024-05-07 | 天津南大通用数据技术股份有限公司 | 一种分布式数据库并行数据采集处理方法 |
-
2022
- 2022-08-19 CN CN202211003580.0A patent/CN115422286A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117992257A (zh) * | 2024-04-07 | 2024-05-07 | 天津南大通用数据技术股份有限公司 | 一种分布式数据库并行数据采集处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109460349B (zh) | 一种基于日志的测试用例生成方法和装置 | |
CN111177277B (zh) | 数据存储方法、交易存储方法及装置 | |
CN108829584B (zh) | 业务逻辑接口mock测试方法及系统 | |
CN112286941B (zh) | 一种基于Binlog+HBase+Hive的大数据同步方法和装置 | |
CN111858501B (zh) | 一种基于日志解析同步的日志读取方法和数据同步系统 | |
CN111221907B (zh) | 一种基于日志解析的数据库添加列同步方法和装置 | |
CN112559626B (zh) | 一种基于日志解析的ddl操作的同步方法和同步系统 | |
CN111241094B (zh) | 一种基于日志解析的数据库删除列同步方法和装置 | |
CN111416875A (zh) | 一种面向云边协同的服务目录同步方法及系统 | |
CN115422286A (zh) | 一种分布式数据库的数据同步方法及设备 | |
CN113973053A (zh) | 一种网络靶场的探针管理系统与方法 | |
US11681606B2 (en) | Automatic configuration of logging infrastructure for software deployments using source code | |
CN111694799B (zh) | 基于日志解析同步的并行日志解析方法和数据同步系统 | |
CN112559473A (zh) | 一种基于优先级的双路同步方法和同步系统 | |
CN111694893A (zh) | 一种基于日志解析的部分回滚解析方法和数据同步系统 | |
CN111159020A (zh) | 一种应用于同步软件测试的方法和装置 | |
CN115827777A (zh) | 一种多数据源的自适应同步与差异识别方法、装置及设备 | |
CN115168434A (zh) | 一种共享存储集群数据库的数据同步方法及设备 | |
CN111241193B (zh) | 一种基于日志解析的数据库添加列同步方法和装置 | |
CN112596953A (zh) | 数据库日志重演方法、装置、设备及存储介质 | |
CN112307118B (zh) | 基于日志解析同步的保障数据一致性的方法和同步系统 | |
CN113282643B (zh) | 一种oracle数据库同步环境下的表对比方法及系统 | |
CN117763052B (zh) | 面向计费多中心内存数据库的数据同步方法及系统 | |
CN111930693B (zh) | 一种基于日志解析同步的事务合并执行方法及装置 | |
CN117762888A (zh) | 一种基于定时调度的数据同步方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |