CN110334152B - 一种数据同步方法、装置及服务器 - Google Patents
一种数据同步方法、装置及服务器 Download PDFInfo
- Publication number
- CN110334152B CN110334152B CN201910576112.4A CN201910576112A CN110334152B CN 110334152 B CN110334152 B CN 110334152B CN 201910576112 A CN201910576112 A CN 201910576112A CN 110334152 B CN110334152 B CN 110334152B
- Authority
- CN
- China
- Prior art keywords
- data
- database
- sub
- full
- library
- 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.)
- Active
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据同步方法、装置及服务器,所述方法包括从单库单表数据库读取全量数据,将所述全量数据写到消息队列中,利用预设数据拆分规则确定所述全量数据的第一分库分表数据源,所述第一分库分表数据源表征分库分表数据库与部分全量数据的映射关系,所述部分全量数据包括所述全量数据中的任意部分数据,基于所述第一分库分表数据源将所述消息队列中全量数据依次写入到目标分库分表中,解决了分库分表场景中全量数据的同步,这种方式的全量数据同步大大减少了网络消耗,提高了数据同步的性能。
Description
技术领域
本申请涉及一种数据同步方法、装置及服务器,更具体的涉及一种基于分库分表数据库的数据同步方法、装置及服务器。
背景技术
随着数据库单表数据量的增大,现有的单库单表的数据库设计已经不能满足高并发要求,数据库的水平拆分即分库分表的应用愈加广泛。在面对互联网海量数据情况时,所有数据存于单库单表,显然会轻易超过数据库表所能承受的数据量阈值,所以需将单库单表数据库中的数据同步至分库分表数据库中。现实中,企业运营人员或者管理人员经常会需要导出数据库报表,分析数据,在这种场景下,分库分表很难发挥它的作用。
目前原始数据拆分到分库分表数据库,一般需要业务开发人员进行开发写成固定的配置,将源表的数据读取后,根据分库分表的规则,写到分库分表数据库中,但这样的方法不够灵活。目前业界针对分库分表数据库还不能实现全量数据的同步,无法解决历史数据的问题。另外就分库分表数据库到单库单表数据库的数据聚合过程,业界只能通过代理的方式进行,网络消耗较大,性能不佳,导致数据聚合过程的效率很低。
发明内容
为了克服现有技术存在的缺点与不足,本申请公开一种数据同步方法、装置及服务器,能够实现单库单表至分库分表的数据同步。
为了达到上述申请的目的,本申请提供了一种数据同步方法,该方法包括:
从单库单表数据库读取全量数据;
将所述全量数据写到消息队列中;
利用预设数据拆分规则确定所述全量数据的第一分库分表数据源,所述第一分库分表数据源表征分库分表数据库与部分全量数据的映射关系,所述部分全量数据包括所述全量数据中的任意部分数据;
基于所述第一分库分表数据源将所述消息队列中全量数据依次写入到目标分库分表数据库中。
在更进一步的实施例中,在所述从单库单表数据库读取全量数据之后,所述方法还包括:
基于单库单表数据库对应的增量日志信息读取增量数据;
将所述增量数据写到消息队列中;
利用预设数据拆分规则确定所述增量数据的第二分库分表数据源,所述第二分库分表数据源表征分库分表数据库与部分增量数据的映射关系,所述部分增量数据包括所述增量数据中的任意部分数据;其中,第二分库分表数据源还可以包括增量数据分流向分库分表数据库时新建的分库分表数据库的物理性端口、分库分表数据库的应用程序接口和账号密码等,以便将增量数据存储到分库分表数据库中。
基于所述第二分库分表数据源将所述消息队列中增量数据依次写入到所述目标分库分表数据库中。
具体的,所述方法还包括:
判断所述目标分库分表数据库中全量数据与所述单库单表数据库中的全量数据是否一致;
当判断的结果为是时,确定全量数据的一致性比对通过。
具体的,在将所述全量数据写到消息队列中之前,所述方法还包括:
基于预设过滤规则对所述全量数据进行数据过滤处理,得到过滤后的数据;
相应的,所述将所述全量数据写到消息队列中包括将所述过滤后的数据写到消息队列中。
具体的,所述将所述全量数据写到消息队列中包括:
利用所述单库单表数据库中单表的表名和所述单表中全量数据的每一行数据的关键信息确定所述每一行数据对应的消息队列的分区标识;
基于所述消息队列的分区标识对消息队列进行数据分区;
将所述单表中全量数据的每一行的数据分别存储到所述消息队列的数据分区中。
具体的,所述利用预设数据拆分规则确定第一分库分表数据源包括:
基于所述目标分库分表数据库的预设分片算法对所述全量数据进行拆分,得到多个部分全量数据;
基于所述目标分库分表数据库的分片键确定所述多个部分全量数据所对应的分库分表位置;
将每一部分全量数据和所述部分全量数据所对应的所述分库分表数据库位置的映射关系作为所述第一分库分表数据源。
本申请提供的数据同步方法,还包括:
利用预设数据聚合规则确定待同步全量数据的第一单库单表数据源,所述第一单库单表数据源表征单库单表数据库与待同步全量数据的多个部分全量数据的映射关系;
获取所述多个部分全量数据所对应的库表标识信息;
按序从所述库表标识信息所对应的分库分表数据库中读取所述多个部分全量数据;
将获取的多个部分全量数据写到消息队列中;
根据所述第一单库单表数据源将所述消息队列中的所述多个部分全量数据写到单库单表数据库中。
本申请另一方面还提供一种数据同步装置,通过该装置能实现单库单表数据库至分库分表数据库的数据同步方法,所述装置包括:
全量读取模块,用于从单库单表数据库读取全量数据;
第一全量写入模块,用于将所述全量数据写到消息队列中;
数据源确定模块,用于利用预设数据拆分规则确定所述全量数据的第一分库分表数据源,所述第一分库分表数据源表征分库分表数据库与部分全量数据的映射关系,所述部分全量数据包括所述全量数据中的任意部分数据;
第二全量写入模块,用于基于所述第一分库分表数据源将所述消息队列中全量数据依次写入到目标分库分表数据库中。
本申请还提供一种数据同步装置,通过该装置能实现分库分表数据库至单库单表数据库的数据同步方法,所述装置包括:
数据源确定模块,用于利用预设数据聚合规则确定待同步全量数据的第一单库单表数据源,所述第一单库单表数据源表征单库单表数据库与所述待同步全量数据的多个部分全量数据的映射关系;
库表标识信息获取模块,用于获取所述多个部分全量数据所对应的库表标识信息;
全量读取模块,用于按序从所述库表标识信息所对应的分库分表数据库中读取所述多个部分全量数据;
第一全量写入模块,用于将获取的多个部分全量数据写到消息队列中;
第二全量写入模块,用于根据所述第一单库单表数据源将所述消息队列中的所述多个部分全量数据写到单库单表数据库中。
另一方面,本申请还提供一种数据同步服务器,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现从单库单表至分库分表的数据同步方法。
本申请另外还提供一种数据同步服务器,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现从分库分表至单库单表的数据同步方法。
实施本申请,具有如下有益效果:
本申请通过将从单库单表数据库读取的全量数据写入消息队列,然后,利用预设数据拆分规则确定全量数据的第一分库分表数据源,进而基于该第一分库分表数据源直接将消息队列中全量数据依次写入到目标分库分表中,实现从单库单表到分库分表的全量数据的同步,避免通过代理的方式将单库单表中全量数据同步到分库分表所带来的网络消耗较大,性能不佳,数据聚合效率低等问题。
附图说明
为了更清楚地说明本申请的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
图1为本申请实施例提供的一种从单库单表至分库分表数据同步的架构示意图;
图2为本申请实施例提供的一种数据同步方法的流程图;
图3为本申请实施例提供的一种数据同步方法流程图;
图4为本申请实施例提供的一种数据同步方法的流程图;
图5为本申请实施例提供的一种数据同步方法的流程图;
图6为本申请实施例提供的一种数据同步方法的流程图;
图7为本申请实施例提供的一种从分库分表至单库单表数据同步的架构示意图;
图8为本申请实施例提供的一种数据同步方法的流程图;
图9为本申请实施例提供的一种数据同步方法的流程图;
图10为本申请实施例提供的一种按序获取全量数据的流程图;
图11为本申请实施例提供的一种全量数据获取示例图;
图12为本申请实施例提供的一种数据同步装置图;
图13为本申请实施例提供的一种数据同步装置图;
图14为本申请实施例提供的一种数据同步装置图;
图15为本申请实施例提供的一种数据同步装置图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了实现申请的技术方案,让更多的工程技术工作者容易了解和应用本申请,将结合具体的实施例,进一步阐述本申请的工作原理。
本申请可以在基于客户端分库分表的诸多领域进行数据同步,其中的诸多领域包括但不限于网购行业、共享产品行业、游戏行业、通讯行业或者政府行业等。
请参阅图1,图1是本申请实施例提供的一种从单库单表数据库至分库分表数据库数据同步的架构示意图,如图1所示,该应用环境可以至少包括第一服务器01、第二服务器02。
具体的,所述第一服务器01可以包括一个独立运行的服务器,服务器01可以包括有网络通信单元、处理器和存储器等等,所述服务器01可以作为单库单表数据库的载体。
具体的,所述第二服务器02可以包括一个独立运行的服务器,或者由多个服务器组成的服务器集群。服务器02可以包括有网络通信单元、处理器和存储器等等,所述服务器02可以作为分库分表数据库的载体。
以下首先介绍本申请一种数据同步方法的实施例。其中,该方法包括:
全量数据从单库单表数据库至分库分表数据库的同步过程,结合图2,具体步骤如下:
S201:从单库单表数据库中读取全量数据。
本说明书实施例中,在读取全量数据时,单库单表数据库中的全量数据可以以数据流的形式传输,从而防止数据库内存爆满,提升了工作性能。
S203:将全量数据写到消息队列中。
本说明书实施例中,消息队列可以包括但不限于采用卡夫卡消息队列,具体的,如图3所示,将全量数据写到消息队列中可以包括:
S2031:利用单库单表数据库中单表的表名和单表中全量数据的每一行数据的关键信息确定所述每一行数据对应的消息队列的分区标识。
具体的,消息队列以分区的形式存储数据,相应的,每一分区设置有分区标识,不同的分区标识区别对应的不同分区。
S2033:基于消息队列的分区标识对消息队列进行数据分区。
S2035:将单表中全量数据的每一行的数据分别存储到所述消息队列的数据分区中。
在一个具体的实施例中,结合卡夫卡消息队列介绍将全量数据写到消息队列的实施例中,将单库单表数据库的表名和单表中全量数据的每一行数据的关键信息作为一整个字符串,用循环冗余校验算法计算这一整个字符串以生成预设数量位(具体的,这里的预设数量位32位,可以增加卡夫卡消息队列的分区数量,支持更多分区中的数据同时在后台程序进行同步,从而提升系统的同步性能)循环冗余检验码多项式,以多项式中的各项依次作为卡夫卡的分区标识,基于卡夫卡的分区标识对卡夫卡进行数据分区,将单表中全量数据的每一行数据分别存储到分区标识对应的卡夫卡的数据分区中,从而既能实现数据的分区,又能保证数据分区后的顺序性。
卡夫卡是一种高吞吐量的分布式发布订阅消息系统。
本说明书实施例中,通过对消息队列的分区,提升系统的同步性能。
S205:利用预设数据拆分规则确定全量数据的第一分库分表数据源。
具体的,第一分库分表数据源可以表征分库分表与部分全量数据的映射关系,部分全量数据包括所述全量数据中的任意部分数据。其中,第一分库分表数据源还可以包括全量数据分流向分库分表数据库时新建的分库分表数据库的物理性端口、分库分表数据库的应用程序接口和账号密码等,以便将全量数据存储到分库分表数据库中。
具体的,可以将分库分表数据源理解为一发散式管道,单库单表中的全量数据经过分库分表数据源这一发散式管道流向分库分表数据库,划分成各部分全量数据。
具体的,利用预设数据拆分规则确定第一分库分表数据源可以包括:
1)基于目标分库分表数据库中分库和分表的分片键确定多个部分全量数据所对应的分库分表数据库的位置。
具体的,分库的分片键可以是分库的单索引或者是混合索引,分表的分片键可以是分表的单索引或者是混合索引。其中单索引是由单个字段组成的索引,混合索引是由多个字段组成的索引。
2)基于目标分库分表数据库预设的分片算法对全量数据进行拆分,得到多个部分全量数据。
其中,预设的分片算法可以包括取模算法或者哈希算法。
3)将每一部分全量数据和其对应的分库分表位置的映射关系作为第一分库分表数据源。
在一个具体的实施例中,结合表1介绍分库分表数据源的实施例中,部分全量数据1与分库1-分表1、部分全量数据2与分库1-分表2、部分全量数据3与分库2-分表1、部分全量数据4与分库2-分表2以及部分全量数据n与分库a-分库b等的映射关系可以作为第一分库分表数据源,其中n可以是大于等于2的任何数值,a、b可以是任何大于等于1的任何数值。具体的,部分全量数据的数量以及分库与分布的数量按照实际应用场景所需设定。
表1
S207:基于所述第一分库分表数据源将所述消息队列中全量数据依次写入到目标分库分表数据库中。
由上述本申请提供的数据同步方法的实施例可见,本申请中先从单库单表数据库中读取全量数据,将全量数据写到消息队列中,接着,利用单库单表数据库中单表的表名和单表中全量数据的每一行数据的关键信息确定每一行数据对应的消息队列的分区标识,并且基于消息队列的分区标识对消息队列进行数据分区,再利用预设数据拆分规则确定全量数据的第一分库分表数据源,并且基于所述第一分库分表数据源将所述消息队列中全量数据依次写入到目标分库分表数据库中,以实现全量数据从单库单表数据库至分库分表数据库的数据同步。
在某些实施例中,为了保证同步数据的一致性,本申请还提供了一种数据同步方法,结合图4,具体步骤还可以包括:
S209:判断目标分库分表中全量数据与单库单表中的全量数据是否一致。
S211:当判断的结果为是时,确定全量数据的一致性比对通过。
S213:当判断的结果为否时,发出错误告警。
全量数据的一致性比对通过,说明全量数据的读取及写入无误,从而保证了全量数据同步的正确性。
在某些实施例中,为了排除一些用户不需要的数据信息,将全量数据同步的过程中需先进行过滤。结合图5,所述方法还可以包括:
S215:基于预设过滤规则对全量数据进行数据过滤处理,得到过滤后的数据。
例如:在某服务行业的数据库全量数据同步过程中,需要同步活跃度较高的用户的数据,相应的,可以预先设置活跃度的阈值,在数据过滤处理时,可以将活跃度低于所设置的阈值的用户的数据过滤掉,保留下的数据即为活跃度高于所设置的阈值的数据,从而删除了不需要的数据。
又例如:在某专车行业的数据库全量数据同步过程中,需要同步年龄较低的用户的数据,相应的,可以预先设置年龄阈值,将司机年龄高于所设置的年龄阈值的数据信息过滤掉,保留下的数据信息即为年龄低于所设年龄阈值的相关数据,从而排除了高龄驾驶员在专车行业存在的隐藏风险。
预设的过滤规则可以根据实际情况提前设定,包括但不限于以上结合活跃度或者年龄的过滤规则。
相应的,步骤S203可以替换为:将过滤后的全量数据写到消息队列中。
本说明书实施例中,通过预设过滤规则进行数据过滤,可以获得实际场景中所需的数据,过滤掉无价值的多余数据,能够提高历史存储数据的可用性,更利于后期的数据分析。
在优选的实施例中,本申请一种数据同步方法,还包括:
从单库单表数据库至分库分表数据库的同步过程还可以包括增量数据的同步,结合图6,一些介绍本申请另一种数据同步方法,具体的:
S301:从单库单表数据库中读取全量数据。
S303:基于单库单表数据库对应的增量日志信息读取增量数据。
S305:将全量数据写到消息队列中。
S307:利用预设数据拆分规则确定第一分库分表数据源。
第一分库分表数据源表征分库分表数据库与部分全量数据的映射关系,部分全量数据包括全量数据中的任意部分数据。
S309:基于第一分库分表数据源将消息队列中全量数据依次写入到目标分库分表中。
S311:将增量数据写到消息队列中。
S313:利用预设数据拆分规则确定第二分库分表数据源。
具体的,第二分库分表数据源表征分库分表数据库与部分增量数据的映射关系,其中的部分增量数据包括增量数据中的任意部分增量数据。其中,第二分库分表数据源还可以包括增量数据分流向分库分表数据库时新建的分库分表数据库的物理性端口、分库分表数据库的应用程序接口和账号密码等,以便将增量数据存储到分库分表数据库中。
S315:基于第二分库分表数据源将消息队列中增量数据依次写入到目标分库分表中。
其中,步骤S315必须在步骤S307之后进行,从而保证数据同步中全量同步与增量同步的顺序完成,避免了数据的丢失。
以上提供的数据同步方法的实施例中,先从单库单表数据库读取全量数据,再基于单库单表数据库对应的增量日志信息读取增量数据,接着先将全量数据写到消息队列中,最后利用预设数据拆分规则确定第一分库分表数据源,并且基于第一分库分表数据源将消息队列中全量数据依次写入到目标分库分表数据库中,再将增量数据写到消息队列中,利用预设数据拆分规则确定第二分库分表数据源并且基于第二分库分表数据源将消息队列中增量数据依次写入到目标分库分表数据库中,可以实现单库单表数据库至分库分表数据库场景下业务与数据库直连的全量同步与增量同步,不再通过代理进行转发,减少了网络消耗,在性能方面比代理类分库分表中间件更优。
请参阅图7,图7是本申请实施例提供的一种从分库分表数据库至单库单表数据库数据同步的架构示意图,如图7所示,该应用环境可以至少包括第一服务器03、第二服务器04。
具体的,所述第一服务器03可以包括一个独立运行的服务器,或者由多个服务器组成的服务器集群。服务器03可以包括有网络通信单元、处理器和存储器等等,所述服务器03可以作为分库分表数据库的载体。
具体的,所述第二服务器04可以包括一个独立运行的服务器,服务器04可以包括有网络通信单元、处理器和存储器等等,所述服务器04可以作为单库单表数据库的载体。
以下介绍本申请一种数据同步方法的另一实施例,其中,该方法包括:
从分库分表数据库至单库单表数据库的数据同步过程,结合图8,具体步骤如下:
S401:利用预设数据聚合规则确定待同步全量数据的第一单库单表数据源。
具体的,第一单库单表数据源表征单库单表数据库与待同步全量数据的多个部分全量数据的映射关系。其中,第一单库单表数据源还可以包括全量数据聚合流向单库单表数据库时新建的单库单表的物理性端口、单库单表数据库的应用程序接口和账号密码等,以便将全量数据存储到单库单表数据库中。
S403:获取多个部分全量数据所对应的库表标识信息。
S405:按序从库表标识信息所对应的分库分表数据库中获取多个部分全量数据。
S407:将获取的多个部分全量数据写到消息队列中。
S409:根据单库单表数据源将消息队列中的多个部分全量数据写到单库单表数据库中。
以上实施例中利用预设数据聚合规则确定待同步全量数据的单库单表数据源,获取多个部分全量数据所对应的库表标识信息并按序从库表标识信息所对应的分库分表数据库中获取多个部分全量数据,将获取到的多个部分全量数据先写到消息队列,再根据单库单表数据源写到单库单表数据库中,实现了全量数据由分库分表数据库至单库单表数据库的数据同步,并且保证了全量数据同步的顺序性。
在其他实施例中,结合图9,该数据同步方法还可以包括:
S501:从分库分表数据库的日志信息中读取待同步增量数据。
S503:将获取的待同步增量数据写到消息队列中。
S505:利用预设数据聚合规则确定待同步全量数据的第一单库单表数据源。
具体的,第一单库单表数据源表征单库单表数据库与所述待同步全量数据的多个部分全量数据的映射关系。其中,第一单库单表数据源还可以包括全量数据聚合流向单库单表数据库时新建的单库单表的物理性端口、单库单表数据库的应用程序接口和账号密码等,以便将全量数据存储到单库单表数据库中。
S507:获取多个部分全量数据所对应的库表标识信息。
S509:按序从库表标识信息所对应的分库分表中获取多个部分全量数据。
具体的,为了实现按序从库表标识信息所对应的分库分表中获取多个部分全量数据,结合图10,可以包括以下步骤:
S5091:设置分布式锁。
该分布式锁用于协调多个全量读取进程间的处理顺序;
S5093:当任一全量读取进程获取到所述分布式锁时,获取该全量读取进程所对应的库表标识信息;
S5095:从库表标识信息所对应的分库分表中获取部分全量数据;
重复上述获取所述全量读取进程对应的库表标识信息和获取部分全量数据的步骤至获取到所述多个部分全量数据。
在某些实施例中,采用分布式协调器以协调多个任务的进行,如图11,全量读取进程甲1与全量读取进程乙2竞争分布式锁3,若全量读取进程甲1获取到分布式锁1,则全量读取进程甲1从分布式协调器4中获取全量读取进程甲所对应的库表标识信息5,再根据获取的库表标识信息到其对应的分库分表数据库6中获取部分全量数据,待此获取任务完成,剩下的全量读取进程再竞争分布式锁3,获取全量读取的任务,直至获取到剩下的全量读取进程数量为0为止。
S511:将获取的多个部分全量数据写到消息队列中。
在一个具体的实施例中,结合卡夫卡消息队列介绍将全量数据写到消息队列的实施例中,将单库单表的表名和单表中全量数据的每一行数据的关键信息作为一整个字符串,用循环冗余校验算法计算这一整个字符串以生成预设数量位(具体的,这里的预设数量位32位,可以增加卡夫卡消息队列的分区数量,支持更多分区中的数据同时在后台程序进行同步,从而提升系统的同步性能)循环冗余检验码多项式,以多项式中的各项依次作为卡夫卡的分区标识,基于卡夫卡的分区标识对卡夫卡进行数据分区,将单表中全量数据的每一行数据分别存储到分区标识对应的卡夫卡的数据分区中,从而既能实现数据的分区,又能保证数据分区后的顺序性。
S513:根据第一单库单表数据源将消息队列中的多个部分全量数据写到单库单表数据库中。
S515:利用预设数据聚合规则确定待同步增量数据的第二单库单表数据源。
第二单库单表数据源表征单库单表数据库与所述待同步增量数据的映射关系。其中,第二单库单表数据源还可以包括增量数据聚合流向单库单表数据库时新建的单库单表的物理性端口、单库单表数据库的应用程序接口和账号密码等,以便将增量数据存储到单库单表数据库中。
S517:根据第二单库单表数据源将消息队列中的待同步增量数据写到单库单表数据库中。
在上述的实施例中,通过从分库分表的日志信息中读取待同步增量数据,将获取的待同步增量数据写到消息队列中,接着利用预设数据聚合规则确定待同步全量数据的第一单库单表数据源,获取多个部分全量数据所对应的库表标识信息,按序从库表标识信息所对应的分库分表数据库中获取多个部分全量数据,最后将获取的多个部分全量数据写到消息队列中,根据第一单库单表数据源将消息队列中的多个部分全量数据写到单库单表数据库中,并且利用预设数据聚合规则确定待同步增量数据的第二单库单表数据源,根据第二单库单表数据源将消息队列中的待同步增量数据写到单库单表数据库中,从而实现分库分表数据库至单库单表数据库的全量数据以及增量数据的数据同步。
本申请实施例还提供一种数据同步装置,具体的,如图12,所述的装置包括:
全量读取模块1201,用于从单库单表数据库读取全量数据;
第一全量写入模块1203,用于将全量数据写到消息队列中;
第一数据源确定模块1205,用于利用预设数据拆分规则确定全量数据的第一分库分表数据源,第一分库分表数据源表征分库分表数据库与部分全量数据的映射关系,部分全量数据包括全量数据中的任意部分数据;
第二全量写入模块1207,用于基于第一分库分表数据源将消息队列中全量数据依次写入到目标分库分表数据库中。
所述的装置实施例中的装置与方法实施例基于同样地发明构思。
在一些实施例中,为单库单表数据库至分库分表数据库增量数据的同步,如图13,所述装置还可以包括:
增量读取模块1301,用于在从单库单表数据库读取全量数据之后,基于单库单表数据库对应的增量日志信息读取增量数据;
第一增量写入模块1303,用于在基于第一分库分表数据源将所述消息队列中全量数据依次写入到目标分库分表数据库中之后,将所述增量数据写到消息队列中;
第二数据源确定模块1305,用于利用预设数据拆分规则确定增量数据的第二分库分表数据源,所述第二分库分表数据源表征分库分表数据库与部分增量数据的映射关系,所述部分增量数据包括所述增量数据中的任意部分数据;
第二增量写入模块1307,用于基于第二分库分表数据源将所述消息队列中增量数据依次写入到所述目标分库分表数据库中。
所述的装置实施例中的装置与方法实施例基于同样地发明构思。
在一些实施例中,为保证全量数据同步前后的一致性,所述装置还可以包括:
判定模块,用于判断目标分库分表数据库中全量数据与所述单库单表数据库中的全量数据是否一致;
当判断的结果为是时,确定全量数据的一致性比对通过。
所述的装置实施例中的装置与方法实施例基于同样地发明构思。
在一些实施例中,为满足实际需求,所述装置还可以包括:
过滤模块,用于基于预设过滤规则对所述全量数据进行数据过滤处理,得到过滤后的数据;
相应的,将全量数据写到消息队列中包括将过滤后的数据写到消息队列中。
所述的装置实施例中的装置与方法实施例基于同样地发明构思。
在一些实施例中,所述装置中的第一全量写入模块可以包括:
分区标识确定单元,用于利用单库单表数据库中单表的表名和单表中全量数据的每一行数据的关键信息确定每一行数据对应的消息队列的分区标识;
数据分区单元,用于基于消息队列的分区标识对消息队列进行数据分区;
存储单元,用于将单库单表数据库中全量数据的每一行的数据分别存储到消息队列的数据分区中。
所述的装置实施例中的装置与方法实施例基于同样地发明构思。
在一些实施例中,所述装置中的第一数据源确定模块可以包括:
数据位置确定单元,用于基于目标分库分表数据库的分片键确定多个部分全量数据所对应的分库分表数据库位置;
数据拆分单元,用于基于目标分库分表数据库的预设分片算法对全量数据进行拆分,得到多个部分全量数据;
映射关系确定单元,用于将每一部分全量数据和部分全量数据所对应的所述分库分表数据库位置的映射关系作为所述第一分库分表数据源。
所述的装置实施例中的装置与方法实施例基于同样地发明构思。
在另外一些实施例中,为实现分库分表数据库至单库单表数据库全量数据的同步,如图14,所述装置可以包括:
第一数据源确定模块1401,用于利用预设数据聚合规则确定待同步全量数据的第一单库单表数据源,第一单库单表数据源表征单库单表数据库与所述待同步全量数据的多个部分全量数据的映射关系;
库表标识获取模块143,用于获取多个部分全量数据所对应的库表标识信息;
全量读取模块1405,用于按序从所述库表标识信息所对应的分库分表数据库中读取所述多个部分全量数据;
第一全量写入模块1407,用于将获取的多个部分全量数据写到消息队列中;
第二全量写入模块1409,用于根据第一单库单表数据源将所述消息队列中的多个部分全量数据写到单库单表数据库中。
在一些实施例中,另外,为实现分库分表数据库至单库单表数据库增量数据的同步,如图15,所述装置还可以包括:
增量读取模块1501,用于在利用预设数据聚合规则确定待同步全量数据的第一单库单表数据源步骤之前,从分库分表数据库的日志信息中读取待同步增量数据;
第一增量写入模块1503,用于将获取的待同步增量数据写到消息队列中;
第二数据源确定模块1505,用于在根据第一单库单表数据源将所述消息队列中的多个部分全量数据写到单库单表数据库中步骤之后,利用预设数据聚合规则确定待同步增量数据的第二单库单表数据源,所述第二单库单表数据源表征单库单表数据库与所述待同步增量数据的映射关系;
第二增量写入模块1507,用于根据第二单库单表数据源将消息队列中的待同步增量数据写到单库单表数据库中。
在一些实施例中,分库分表数据库至单库单表数据库全量数据同步过程中用到的全量读取模块,还可以包括:
分布式锁设置单元,用于设置分布式锁,分布式锁用于协调多个全量读取进程间的处理顺序;
单一库表标识获取单元,用于当任一全量读取进程获取到所述分布式锁时,获取所述全量读取进程所对应的库表标识信息;
全量数据对应获取单元,用于从库表标识信息所对应的分库分表数据库中获取部分全量数据。
在一些分库分表数据库至单库单表数据库全量同步的实施例中,所述第一全量写入模块可以包括:
分区标识确定单元,用于利用分库分表数据库中分表的表名和分表中待同步全量数据的每一行数据的关键信息确定所述每一行数据对应的消息队列的分区标识;
分区单元,用于基于消息队列的分区标识对消息队列进行数据分区;
存储单元,用于将分库分表数据库中每一行的数据分别存储到消息队列的数据分区中。
所述的装置实施例中的装置与方法实施例基于同样地发明构思。
本申请另一方面还提供一种数据同步服务器,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现从单库单表数据库至分库分表数据库的数据同步方法。
所述的服务器实施例中的服务器与方法实施例基于同样地发明构思。
本申请另一方面还提供一种数据同步服务器,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现从分库分表数据库至单库单表数据库的数据同步方法。
所述的服务器实施例中的服务器与方法实施例基于同样地发明构思。
由以上本申请数据同步方法、装置及服务器的实施例提供的技术方案可见,本申请实施例实现了单库单表至分库分表的全量数据同步与增量数据同步,同时也实现了分库分表至单库单表的全量数据同步与增量数据同步,并在实现以上情形的基础上保证了数据同步的时效性与顺序性。
上述说明已经充分揭露了本申请的具体实施方式。需要指出的是,熟悉该领域的技术人员对本申请的具体实施方式所做的任何改动均不脱离本申请的权利要求书的范围。相应地,本申请的权利要求的范围也并不仅仅局限于前述具体实施方式。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、系统和服务器实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (13)
1.一种数据同步方法,其特征在于,该方法包括:
从单库单表数据库读取存储的全量数据;
基于预设过滤规则对所述全量数据进行数据过滤处理,得到过滤后的全量数据;
将所述过滤后的全量数据写到消息队列中;
利用预设数据拆分规则确定所述过滤后的全量数据的第一分库分表数据源,所述第一分库分表数据源表征分库分表数据库与部分全量数据的映射关系,所述部分全量数据包括所述过滤后的全量数据中的任意部分数据;
基于所述第一分库分表数据源将所述消息队列中所述过滤后的全量数据依次写入到目标分库分表数据库中进行存储。
2.根据权利要求1所述的数据同步方法,其特征在于,在所述从单库单表数据库读取全量数据之后,所述方法还包括:
基于单库单表数据库对应的增量日志信息读取增量数据;
在所述基于所述第一分库分表数据源将所述消息队列中全量数据依次写入到目标分库分表数据库中之后,所述方法还包括:
将所述增量数据写到消息队列中;
利用预设数据拆分规则确定所述增量数据的第二分库分表数据源,所述第二分库分表数据源表征分库分表数据库与部分增量数据的映射关系,所述部分增量数据包括所述增量数据中的任意部分数据;
基于所述第二分库分表数据源将所述消息队列中增量数据依次写入到所述目标分库分表数据库中。
3.根据权利要求1所述的数据同步方法,其特征在于,所述方法还包括:
判断所述目标分库分表数据库中全量数据与所述单库单表数据库中的全量数据是否一致;
当判断的结果为是时,确定全量数据的一致性比对通过。
4.根据权利要求1所述的数据同步方法,其特征在于,所述将所述全量数据写到消息队列中包括:
利用所述单库单表数据库中单表的表名和所述单表中全量数据的每一行数据的关键信息确定所述每一行数据对应的消息队列的分区标识;
基于所述消息队列的分区标识对消息队列进行数据分区;
将所述单库单表数据库中全量数据的每一行的数据分别存储到所述消息队列的数据分区中。
5.根据权利要求1所述的数据同步方法,其特征在于,所述利用预设数据拆分规则确定第一分库分表数据源包括:
基于所述目标分库分表数据库的分片键确定所述多个部分全量数据所对应的分库分表数据库位置;
基于所述目标分库分表数据库的预设分片算法对所述全量数据进行拆分,得到多个部分全量数据;
将每一部分全量数据和所述部分全量数据所对应的所述分库分表数据库位置的映射关系作为所述第一分库分表数据源。
6.一种数据同步方法,其特征在于,该方法包括:
利用预设数据聚合规则确定待同步全量数据的第一单库单表数据源,所述第一单库单表数据源表征单库单表数据库与所述待同步全量数据的多个部分全量数据的映射关系;
获取所述多个部分全量数据所对应的库表标识信息;
按序从所述库表标识信息所对应的分库分表数据库中读取所述多个部分全量数据;
将获取的多个部分全量数据写到消息队列中;
根据所述第一单库单表数据源将所述消息队列中的所述多个部分全量数据写到单库单表数据库中。
7.根据权利要求6所述的数据同步方法,其特征在于,在所述利用预设数据聚合规则确定待同步全量数据的第一单库单表数据源步骤之前,所述方法还包括:
从所述分库分表数据库的日志信息中读取待同步增量数据;
将获取的所述待同步增量数据写到消息队列中;
相应的,在所述根据所述第一单库单表数据源将所述消息队列中的所述多个部分全量数据写到单库单表数据库中步骤之后,所述方法还包括:
利用预设数据聚合规则确定待同步增量数据的第二单库单表数据源,所述第二单库单表数据源表征单库单表数据库与所述待同步增量数据的映射关系;
根据所述第二单库单表数据源将所述消息队列中的所述待同步增量数据写到单库单表数据库中。
8.根据权利要求6所述的数据同步方法,其特征在于,所述按序从所述库表标识信息所对应的分库分表数据库中读取所述多个部分全量数据包括:
设置分布式锁,所述分布式锁用于协调多个全量读取进程间的处理顺序;
当任一全量读取进程获取到所述分布式锁时,获取所述全量读取进程所对应的库表标识信息;
从所述库表标识信息所对应的分库分表数据库中获取部分全量数据;
重复上述获取所述全量读取进程对应的库表标识信息和获取部分全量数据的步骤至获取到所述多个部分全量数据。
9.根据权利要求6所述的数据同步方法,其特征在于,所述将获取的多个部分全量数据写到消息队列中包括:
利用所述分库分表数据库中分表的表名和所述分表中待同步全量数据的每一行数据的关键信息确定所述每一行数据对应的消息队列的分区标识;
基于所述消息队列的分区标识对消息队列进行数据分区;
将所述分库分表数据库中每一行的数据分别存储到所述消息队列的数据分区中。
10.一种数据同步装置,其特征在于,所述装置包括:
全量读取模块,用于从单库单表数据库读取全量数据;
过滤处理模块,用于基于预设过滤规则对所述全量数据进行数据过滤处理,得到过滤后的全量数据;
第一全量写入模块,用于将所述过滤后的全量数据写到消息队列中;
第一数据源确定模块,用于利用预设数据拆分规则确定所述过滤后的全量数据的第一分库分表数据源,所述第一分库分表数据源表征分库分表数据库与部分全量数据的映射关系,所述部分全量数据包括所述全量数据中的任意部分数据;
第二全量写入模块,用于基于所述第一分库分表数据源将所述消息队列中所述过滤后的全量数据依次写入到目标分库分表数据库中。
11.一种数据同步装置,其特征在于,所述装置包括:
数据源确定模块,用于利用预设数据聚合规则确定待同步全量数据的第一单库单表数据源,所述第一单库单表数据源表征单库单表数据库与所述待同步全量数据的多个部分全量数据的映射关系;
库表标识信息获取模块,用于获取所述多个部分全量数据所对应的库表标识信息;
全量读取模块,用于按序从所述库表标识信息所对应的分库分表数据库中读取所述多个部分全量数据;
第一全量写入模块,用于将获取的多个部分全量数据写到消息队列中;
第二全量写入模块,用于根据所述第一单库单表数据源将所述消息队列中的所述多个部分全量数据写到单库单表数据库中。
12.一种数据同步服务器,其特征在于,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至5任一所述的数据同步方法。
13.一种数据同步服务器,其特征在于,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求6至9任一所述的数据同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910576112.4A CN110334152B (zh) | 2019-06-28 | 2019-06-28 | 一种数据同步方法、装置及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910576112.4A CN110334152B (zh) | 2019-06-28 | 2019-06-28 | 一种数据同步方法、装置及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110334152A CN110334152A (zh) | 2019-10-15 |
CN110334152B true CN110334152B (zh) | 2022-05-17 |
Family
ID=68144652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910576112.4A Active CN110334152B (zh) | 2019-06-28 | 2019-06-28 | 一种数据同步方法、装置及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110334152B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110674152B (zh) * | 2019-09-24 | 2023-06-23 | 京东科技控股股份有限公司 | 数据同步方法与装置、存储介质、电子设备 |
CN110782351A (zh) * | 2019-10-30 | 2020-02-11 | 河北幸福消费金融股份有限公司 | 适于日终交易的数据处理方法、系统、装置及存储介质 |
CN110990405B (zh) * | 2019-11-28 | 2024-04-12 | 中国银行股份有限公司 | 一种数据装载方法、装置、服务器及存储介质 |
CN111143373A (zh) * | 2019-12-30 | 2020-05-12 | 卓尔智联(武汉)研究院有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN113312330A (zh) * | 2020-02-27 | 2021-08-27 | 华为技术有限公司 | 一种数据处理方法、装置、设备及介质 |
CN111400407B (zh) * | 2020-04-10 | 2023-09-26 | 浙江大华技术股份有限公司 | 数据的同步方法及装置、存储介质及电子装置 |
CN112328615A (zh) * | 2020-11-16 | 2021-02-05 | 广州新居网家居科技有限公司 | 数据更新方法、装置、系统、服务器及存储介质 |
CN112597247B (zh) * | 2020-12-25 | 2022-05-31 | 杭州数梦工场科技有限公司 | 一种数据同步方法及装置 |
CN113468154A (zh) * | 2021-06-25 | 2021-10-01 | 浙江数链科技有限公司 | 基于MySQL的大表减容方法、装置、电子装置和存储介质 |
CN113505173B (zh) * | 2021-07-08 | 2024-03-19 | 上海卓钢链科技有限公司 | 一种数据采集同步系统与同步方法 |
CN113535856B (zh) * | 2021-07-29 | 2022-11-04 | 上海哔哩哔哩科技有限公司 | 数据同步方法及系统 |
CN114185489A (zh) * | 2021-12-02 | 2022-03-15 | 中国电信股份有限公司 | 一种数据同步方法、装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170039260A1 (en) * | 2007-03-16 | 2017-02-09 | Microsoft Technology Licensing, Llc | View Maintenance Rules for an Update Pipeline of an Object-Relational Mapping (ORM) Platform |
CN106909597A (zh) * | 2016-06-30 | 2017-06-30 | 阿里巴巴集团控股有限公司 | 一种数据库迁移方法和装置 |
CN109918442A (zh) * | 2019-01-24 | 2019-06-21 | 中国联合网络通信集团有限公司 | 一种数据的处理方法及装置 |
-
2019
- 2019-06-28 CN CN201910576112.4A patent/CN110334152B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170039260A1 (en) * | 2007-03-16 | 2017-02-09 | Microsoft Technology Licensing, Llc | View Maintenance Rules for an Update Pipeline of an Object-Relational Mapping (ORM) Platform |
CN106909597A (zh) * | 2016-06-30 | 2017-06-30 | 阿里巴巴集团控股有限公司 | 一种数据库迁移方法和装置 |
CN109918442A (zh) * | 2019-01-24 | 2019-06-21 | 中国联合网络通信集团有限公司 | 一种数据的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110334152A (zh) | 2019-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110334152B (zh) | 一种数据同步方法、装置及服务器 | |
CN107958010B (zh) | 用于在线数据迁移的方法及系统 | |
CN111143368B (zh) | 一种关系型数据库数据对比方法及系统 | |
CN107729553A (zh) | 系统数据对账方法及装置、存储介质、电子设备 | |
CN112364049B (zh) | 数据同步脚本生成方法、系统、终端及存储介质 | |
CN110413595A (zh) | 一种应用于分布式数据库的数据迁移方法和相关装置 | |
US20170154123A1 (en) | System and method for processing metadata to determine an object sequence | |
CN106776785B (zh) | 一种数据写入方法及装置和数据处理系统 | |
CN110781197B (zh) | 一种hive离线同步校验方法、装置及电子设备 | |
CN113076304A (zh) | 一种分布式版本管理方法、装置和系统 | |
US20080140693A1 (en) | Apparatus, Method, And Computer Program Product For Synchronizing Data Sources | |
CN111737227A (zh) | 数据修改方法及系统 | |
CN110019444B (zh) | 一种操作请求处理方法、装置、设备及系统 | |
CN114443908A (zh) | 图数据库构建方法、系统、终端及存储介质 | |
CN109858285B (zh) | 区块链数据的处理方法、装置、设备和介质 | |
CN112579591B (zh) | 数据校验方法、装置、电子设备及计算机可读存储介质 | |
CN112486532A (zh) | 配置文件的管理方法、装置、电子设备及存储介质 | |
CN113761052A (zh) | 数据库同步方法和装置 | |
CN116089527A (zh) | 一种数据校验方法、存储介质与设备 | |
CN116303789A (zh) | 多分片多副本数据库并行同步方法、装置及可读介质 | |
CN115878592A (zh) | 一种政务数据治理方法、装置、存储介质及电子设备 | |
CN115270731A (zh) | 混合文档的协同编辑方法及装置 | |
CN115963987A (zh) | 分布式存储方法、装置、设备及计算机可读存储介质 | |
CN112163024B (zh) | 一种基于层级关联结构的配置信息导出和导入方法 | |
CN110297842B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |