CN114428820A - 分布式数据实时同步的方法、***和数据同步设备 - Google Patents
分布式数据实时同步的方法、***和数据同步设备 Download PDFInfo
- Publication number
- CN114428820A CN114428820A CN202210096601.1A CN202210096601A CN114428820A CN 114428820 A CN114428820 A CN 114428820A CN 202210096601 A CN202210096601 A CN 202210096601A CN 114428820 A CN114428820 A CN 114428820A
- Authority
- CN
- China
- Prior art keywords
- database
- change
- statement
- data
- message queue
- 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
-
- 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)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及数据同步技术领域,尤其涉及一种分布式数据实时同步的方法、***和数据同步设备。该方法包括:获取数据库操作请求,所述数据库操作请求用于指示对第一数据库中的数据记录进行操作;当所述数据库操作请求包括更改语句时,获取待与所述第一数据库同步的第二数据库的更改操作类型;按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列;基于所述消息队列,将所述更改语句同步写入至所述第二数据库。采用该方法进行分布式数据同步时不受数据库类型以及所在位置的影响,可有效实现分布式数据实时同步,并保障同步的数据一致。
Description
技术领域
本申请涉及数据同步技术领域,尤其涉及一种分布式数据实时同步的方法、***和数据同步设备。
背景技术
目前,分布式集群***应用广泛,一个完整的分布式集群***是由很多处在不同位置的集群通过网络连接在一起形成的,海量的数据分布在整个***的不同集群中。其中,不同集群的数据库之间需要进行数据同步。在相关技术中,各类数据库基本都有各自的数据同步机制,但一般都依赖数据库本身的核心技术。然而,随着数据库类型的不同,数据库处理方式也不同,如何保证分布式集群数据库中数据实时同步一致,是当前需要思考的问题。
发明内容
有鉴于此,本申请实施例提供了一种分布式数据实时同步的方法、***和数据同步设备,可在不受数据库类型的影响下,实时同步分布式数据,保障同步的数据的一致。
本申请实施例的第一方面提供了一种分布式数据实时同步的方法,包括:
获取数据库操作请求,所述数据库操作请求用于指示对第一数据库中的数据记录进行操作;
当所述数据库操作请求包括更改语句时,获取待与所述第一数据库同步的第二数据库的更改操作类型;
按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列;
基于所述消息队列,将所述更改语句同步写入至所述第二数据库。
在第一方面的一种可能的实现方式中,所述按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列,包括:
当所述第二数据库的更改操作类型为幂等时,将所述更改语句以日志形式发送至所述消息队列。
在第一方面的一种可能的实现方式中,所述更改语句包括用于标识待操作的数据记录的指定字段,所述按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列,包括:
当所述第二数据库的更改操作类型为非幂等时,根据所述指定字段,确定所述更改语句在所述消息队列中对应的分区信息;
将所述更改语句发送至所述分区信息标识的分区。
在第一方面的一种可能的实现方式中,所述分区信息包括分区键,所述根据所述指定字段,确定所述更改语句在所述消息队列中对应的分区信息,包括:
获取所述消息队列的分区数目;
根据所述指定字段与所述分区数目,确定所述更改语句对应的分区键。
在第一方面的一种可能的实现方式中,所述更改语句包括用于标识待操作的数据记录的指定字段,所述基于所述消息队列,将所述更改语句同步写入至所述第二数据库,包括:
获取当前的并发线程数;
根据所述指定字段与所述并发线程数,确定所述更改语句对应的目标线程;
基于所述目标线程,将所述更改语句写入所述第二数据库。
在第一方面的一种可能的实现方式中,所述将所述更改语句同步写入至所述第二数据库,包括:
获取所述第一数据库及所述第二数据库的数据库类型;
根据所述数据库类型,确定所述第一数据库与所述第二数据库是否为异构数据库;
若为异构数据库,则将更改语句处理为适配所述第二数据库的语句形式后,写入所述第二数据库。
在第一方面的一种可能的实现方式中,所述获取数据库操作请求,包括:
从数据接入层通过面向切面编程技术获取所述数据库操作请求。
本申请实施例的第二方面提供了一种分布式数据实时同步的***,所述***包括:
操作请求获取单元,用于获取数据库操作请求,所述数据库操作请求用于指示对第一数据库中的数据记录进行操作;
操作类型确定单元,用于当所述数据库操作请求包括更改语句时,获取待与所述第一数据库同步的第二数据库的更改操作类型;
语句发送单元,用于按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列;
数据同步单元,用于基于所述消息队列,将所述更改语句同步写入至所述第二数据库。
本申请实施例的第三方面提供了一种数据同步设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本申请实施例的第一方面提供的分布式数据实时同步的方法的步骤。
本申请实施例的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如本申请实施例的第一方面提供的分布式数据实时同步的方法的步骤。
本申请实施例的第五方面提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行本申请实施例的第一方面所述的分布式数据实时同步的方法的步骤。
本申请实施例中,通过获取数据库操作请求,当所述数据库操作请求包括更改语句时,获取待与所述第一数据库同步的第二数据库的更改操作类型,然后按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列,基于所述消息队列,将所述更改语句同步写入至所述第二数据库,第二数据库对待同步的数据记录进行相同更改操作。本方案进行分布式数据同步时不受数据库类型以及所在位置的影响,可有效实现分布式数据实时同步,并保障同步的数据一致。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的分布式数据实时同步的方法的实现流程图;
图1.1是本申请实施例提供的分布式数据实时同步的方法中从数据接入层获取数据操作请求的一种场景示意图;
图2是本申请实施例提供的分布式数据实时同步的方法中将所述更改语句发送至消息队列的一种具体实现流程图;
图3是本申请实施例提供的分布式数据实时同步的方法中确定更改语句对应的分区信息的一种具体实现流程图;
图4是本申请实施例提供的分布式数据实时同步的方法中将所述更改语句同步写入至所述第二数据库的一种具体实现流程图;
图5是本申请实施例提供的分布式数据实时同步的方法中将所述更改语句同步写入至所述第二数据库的另一种具体实现流程图;
图6是本申请实施例提供的分布式数据实时同步的***的结构框图;
图7是本申请实施例提供的一种数据同步设备的示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定***结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的***、***、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
应当理解,本申请各个方法实施例提供了一种分布式数据实时同步的方法适用于需要执行数据同步的各种类型数据同步设备,具体可以为与多个服务器集群通信连接的中间设备、云服务器等。
下面结合具体实施例对本申请提供的分布式数据实时同步的方法进行示例性的说明。
图1示出了本申请实施例提供的分布式数据实时同步的方法的实现流程,本申请实施例的执行端可为数据同步设备。该方法流程可以包括如下步骤S101至S104。
S101:获取数据库操作请求,所述数据库操作请求用于指示对第一数据库中的数据记录进行操作。
数据库操作包括查询和更改,本实施例中,上述数据库操作请求是指针对第一数据库中的数据记录进行查询或者更改的请求。上述第一数据库应用于分布式集群中的任意一服务集群。
一般地,所有的业务请求,从上层接入后,到数据库写入之前,都将汇聚到数据库写入的客户端那一层,由数据库客户端,将接收到的数据,写入到数据库中。本实施例中,就是根据所有数据从数据库客户端写入这一特点进行拦截获取。如图1.1所示,当接收到一个正常的业务请求后,该业务请求经过请求接入层、业务处理层的处理解析,再到数据接入层就变成了数据库操作请求,其中,数据接入层可能独立服务实现,也可能嵌入至业务层中。第一数据库直接根据数据库操作请求对数据记录进行操作,同时,在数据接入层获取数据库操作请求,经处理后送入消息队列,再同步写入第二数据库。
本申请实施例中,可利用面向切面编程(Aspect Oriented Programming,AOP)技术获取数据库操作请求。具体地,从数据接入层通过面向切面编程技术获取所述数据库操作请求。其中,AOP技术是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能。利用AOP技术可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
本申请实施例中,通过在数据接入层获取数据库操作请求,基本上不用感知业务,业务新增/修改接口,不会影响数据的同步模型,在数据接入层获取获取更改语句用于数据同步,可实现与业务脱敏,从而减少后续的人力维护成本。
S102:当所述数据库操作请求包括更改语句时,获取待与所述第一数据库同步的第二数据库的更改操作类型。
上述第二数据库为需要与第一数据库同步的数据库,上述第二数据库可应用于分布式集群中、不同于上述第一数据库的另一服务集群。
数据库操作请求包括查询语句和/或更改语句,更改包括新增、删除以及更新。在本申请实施例中,步骤S101在数据接入层先直接对数据库操作请求进行获取,再对数据库操作请求中的语句进行过滤,确定该数据操作请求中是否包括更改语句,将非更改语句过滤掉。当所述数据库操作请求包括更改语句时,才获取待与第一数据库同步的第二数据库的更改操作类型。
例如,在数据接入层,通过AOP技术获取数据库操作请求,然后根据语句类型,对该数据库操作请求中的语句进行过滤,如果是查询语句,则直接对第一数据库中该查询语句对应的数据记录进行读取。如果是更改语句,则获取第二数据库的更改操作类型。
对于不同数据库类型的数据库,对同一条数据记录的更改定义有所差别,例如,对于redis数据库,同一个key值对应的记录为一条数据记录,其更改语句就是对这个key值进行set、del、expire等操作。对于MySQL数据库,同一个唯一性索引的有效字段对应的记录为一条数据记录,其更改语句为对这条数据记录的新增、删除、修改等操作,例如,常用的主键自增id,是唯一性索引,但是非有效字段,其记录不能对应为一条有效的数据记录。
数据库的更改操作类型包括幂等和非幂等。一种实施方式中,每一数据库包括操作类型标识,所述操作类型标识用于标识数据库的更改操作类型为幂等还是非幂等。本实施例中,可通过获取第二数据库的操作类型标识,确定该第二数据库的更改操作类型。
所谓更改操作类型为幂等的数据库,就是对于同一个数据记录的多条新增语句、删除语句、更新语句等更改语句执行,不改变语句的内容,任意调整执行的语句顺序,最终数据库的结果一致。典型的是Cassandra数据库,该类数据库所有的新增、删除以及更新,都是以执行时语句中使用的时间戳为准,时间戳最大的表示为最新记录,跟数据库的执行顺序没有关系。
而对于更改操作类型为非幂等的数据库,对于同一个数据记录的多条新增语句、删除语句、更新语句等更改语句,其操作顺序会影响数据库的最终结果,最终结果与更改作语句执行的次数、顺序有关,每次执行操作后的结果都不相同。大部分数据库的更新操作类型还是非幂等的,常用的非幂等的数据库包括mysql、redis。
S103:按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列。
上述消息队列用来批量汇总数据库的更改语句,并提高长时延跨区传输的安全性以及稳定性,保证更改语句能够完整发送到第二数据库中。在实际应用中,可以根据队列使用情况以及第一数据库更改语句的吞吐量进行选择合适类型的消息队列。
上述消息队列可以为Kafka队列。Kafka是一种高吞吐量的分布式发布订阅消息***,Kafka队列主要针对跨区时延高的场景,同时支持离线数据处理和实时数据处理,利用Kafka队列可保证跨区数据传输的稳定性以及安全性。需说明的是,本申请实施例中,上述消息队列还可以是RabbitMQ队列或者Rocketmq队列等其他队列。
本申请实施例中,根据第二数据库的更改操作类型为幂等还是非幂等,选择不同的处理方式。
在一种可能的实施方式中,当所述第二数据库的更改操作类型为幂等时,将所述更改语句以日志形式发送至所述消息队列。具体地,可借用log4j/logback的日志打印框架,将更改语句提交到Kafka队列。
本实施例中,对于幂等的数据库,不需要使用特殊的方式来保证同一条记录的多条更改语句在消息队列中的顺序性,因此,可以直接借用日志打印框架将幂等的数据库的所有语句的更改,提交到消息队列,不仅可省了发送装置,同时可节约维护成本。
在一种可能的实施方式中,当所述第二数据库的更改操作类型为非幂等时,将所述更改语句有序发送至所述消息队列。即,需保证消息队列中更改语句有序。本实施例中,更改语句有序是指针对同一数据记录的多个更改语句与发送至第一数据库的更改语句顺序相同。
非幂等的数据库在操作时,需要保证待同步的第二数据库的写入顺序与数据接入层的写入顺序一致,这就必须要保证同一条记录的多条更改语句在Kafka中有序,从而保证第二数据库中的数据记录与第一数据库中的数据记录的一致性,实现准确有效的同步。
作为本申请一种可能的实施方式,所述更改语句包括用于标识待操作的数据记录的指定字段,图2示出了本申请实施例提供的方法中,按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列的一种具体实现流程,详述如下:
A1:当所述第二数据库的更改操作类型为非幂等时,根据所述指定字段,确定所述更改语句在所述消息队列中对应的分区信息。
上述指定字段为可以索引数据记录的字段,可以为key值或者主键值,具体可根据数据库类型确定。例如,对于redis数据库,上述指定字段为key值,对于MySQL数据库,上述指定字段为可以唯一索引数据记录的有效字段,如主键值。
A2:将所述更改语句发送至所述分区信息标识的分区。
本实施例中,消息队列预先进行分区,在根据上述字段确定分区信息后,将更改语句发送至分区信息标识的分区。
若不存在所述指定字段对应的分区信息,即表示首次对该更改语句对应的数据记录进行操作,此时,可将更改语句按一定方式发送至该消息队列中的任意一分区。例如,利用随机算法确定分区信息,将该更改语句随机发送至消息队列中的分区。
多个分区的处理,能够提高消息队列中更改语句的吞吐量。如果同一条数据记录的更改语句在布式消息队列的不同分区里面,则无法保证更改语句的先后顺序。示例性地,对于redis数据库中一个token:{xiaoming}的key,对其存储的值进行了两次修改,第一次设置这个key的value值为account,第二次设置这个key的value为accountId,数据库1中的最终记录为accountId。两次更改时间间隔很小,就几个毫秒。第一次更改语句发送到了Kafka的分区1里面,第二个更改语句发送到Kafka的分区2里面。但是在消费时,由于一些原因,导致分区1的消费比Kafka的分区2的消费慢了10ms。也就是说,第二次的set语句先写入数据库2,第一次set语句后写入数据库2,那么数据库2中token:{xiaoming}的最终记录就是第一次更改的account,这样就导致数据2跟数据库1出现了数据不一致的问题。保证同一条记录在Kafka的固定分区上,就是避免单个分区的性能问题影响同一条数据记录的更改语句写入数据库2的顺序,进而影响待同步的两个数据库的数据一致性。
本申请实施例中,将同一条记录的所有更改语句发送到消息队列的固定分区上,就能保证更改语句在消息队列中的顺序性,进而保障同步数据的一致性。
作为本申请一种可能的实施方式,所述分区信息包括分区键,所述分区键标识消息队列中的分区,记录数据记录的所述指定字段与分区键的映射关系,根据所述指定字段确定分区键,将更改语句发送至分区键标识的分区。
作为本申请一种可能的实施方式,图3示出了本申请实施例提供的方法实施例中,根据所述指定字段,确定所述更改语句在所述消息队列中对应的分区信息的具体实现流程,详述如下:
B1:获取所述消息队列的分区数目。
B2:根据所述指定字段与所述分区数目,确定所述更改语句对应的分区键。
在本申请实施例中,具体可采用哈希hash确定分区,以保证获取的第一数据库中同一条数据记录的多次更改语句在消息队列中的顺序性。
在一个应用场景中,以redis数据库为例,redis数据库是key-value类型,可以直接对redis中的标识待操作的数据记录的指定字段key进行hash,如下式(1),确定所述更改语句对应的分区键:
hash(key)=CRC16(key)%partitionNum (1)
其中,partitionNum为Kafka的分区数目,CRC16是redis使用的计算hash值得一种算法。CRC16对redis的key进行计算后,对Kafka中的分区数目partitionNum进行取余,能够使得不同的key均匀分布在Kafka的partitionNum个分区上,这样可达到负载均衡的目的。Kafka的topic可以有多个分区用于存储,通过将这个key对应的更改语句发到topic的第hash(key)个分区中,即可以保证同一key的更改语句总是会存在Kafka队列的同一固定分区中,从而就保证了更改语句在Kafka中的先后顺序。
作为本申请一种可能的实施方式,根据更改语句中不同的更改操作,可采用不同的哈希方式。例如,对于MySQL数据库,对具体更改操作的不同,可以用不同的hash方式。对于insert语句,可以过滤出主键(或者唯一性的key)进行hash;对于update以及delete语句,需要从where子句中过滤出主键(唯一性的key)进行hash,具体的哈希方式可参照上述式(1),此处不赘述。少部分场景可能会存在使用索引进行更改的情况,这种情况就需要将索引更改的语句变成主键(或者唯一性的key)更改的语句。然后过滤出主键(或者唯一性的key)进行hash(一般实际业务中,也不会出现通过索引进行大批量更改的情况,这种情况下,通过索引查询获取主键的时延也不高);当然如果数据库中各个表的请求压力差别不大,也可以对表名进行hash,但是这种情况会导致各个分区(或者各个写入第二数据库的线程)的压力分布不太均匀,需要根据实际更改的吞吐量情况使用。
在大型分布式云服务的场景下,写入压力大,单线程发送更改语句到消息队列以及单线程从消息队列拉取消息写入待同步的数据库肯定是无法满足实时同步所需的。但是,多线程操作,又会存在并发问题,影响第一数据库的更改语句写入第二数据库的顺序,最终影响第二数据库与第一数据库中数据的一致性。
S104:基于所述消息队列,将所述更改语句同步写入至所述第二数据库。
在本申请实施例中,从所述消息队列中拉取更改语句,将拉取的更改语句写入至第二数据库,第二数据库实时根据该更改语句对相应的数据记录进行操作,从而实现与第一数据库的实时同步,保障与第一数据库中数据的一致性。
一个队列,多个消费者,会存在并发问题,进而影响更改语句写入第二数据库的顺序性。作为本申请一种可能的实施方式,所述更改语句包括用于标识待操作的数据记录的指定字段,如图4所示,所述基于所述消息队列,将所述更改语句同步写入至所述第二数据库,还包括:
C1:获取当前的并发线程数。所述并发线程具体为并发写入第二数据库的线程数。
C2:根据所述指定字段与所述并发线程数,确定所述更改语句对应的目标线程。所述目标线程是指固定处理所述指定字段标识的数据记录的更改语句的线程。
C3:基于所述目标线程,将所述更改语句写入所述第二数据库。
在本申请实施例中,从消息队列中批量拉取消息,然后多线程处理写入非幂等的第二数据库中时,同一条数据记录的更改在同一固定线程里面操作,以保证其更改语句写入非幂等的第二数据库中有序。
在一种可能的实施方式中,在从消息队列拉取更改语句后,多线程写入第二数据库中时,对更改语句中的唯一标识待操作的数据记录的指定字段进行hash,然后根据hash值将更改语句分配给固定线程处理,也就保证了同一条记录的所有更改语句,始终都被同一个线程处理。
在一个应用场景中,hash计算方式以redis为例,对redis的key进行hash:
hash(key)=CRC16(key)%threadNum
其中,threadNum为写入第二数据库的并发线程数。CRC16是redis使用的计算hash值得一种算法。
本实施例中,使用hash确定线程数思想,保证同一条数据记录的多次更改,在同一个线程中处理,避免同一个数据记录的多次更改通过多个线程写入第二数据库中可能会出现的并发问题。
对于非幂等的数据库,本申请实施例可保证更改语句写入第二数据库的顺序与写入第一数据库的顺序一致,从而保证了第二数据库与第一数据库数据的最终一致性。
一般地,对于数据的拉取、解析、存储和消费等步骤,执行具有顺序性,每一个步骤都需在前一个步骤完成之后才执行,且每个步骤都是基于单线程运行的,导致整体运行效率较低、数据同步时间较长,多线程多并发处理,又会影响同一条数据记录的多条更改语句写入第二数据库的顺序性。本申请实例中,在保证了同一条数据记录的所有更改语句在消息队列中的顺序性后,同时也保证了所有的更改语句,从消息队列拉取到写入第二数据库的过程是有序的。
Kafka的特性是一个分区同时只能有一个消费者,也就是同一个分区的数据,只会被同一个处理装置服务拉取,这保证了同一条数据记录的所有更改语句,都在同一个处理装置中被处理,避免同一条数据记录的所有更改语句,被多个消费者同时消费的并发问题,从而影响同一条数据记录的所有更改语句的顺序性。同样,在后面多线程处理从Kafka批量拉取下来的多条消息写入第二数据库时,需要保证其同一条记录的所有更改语句,在同一个线程中被处理,以保证其顺序的写入第二数据库中。
作为本申请一种可能的实施方式,图5示出了本申请实施例提供的方法实施例中,将所述更改语句同步写入至所述第二数据库的一种具体实现流程,详述如下:
D1:获取所述第一数据库及所述第二数据库的数据库类型。数据库类型包括Cassandra、MySQL、redis等等。
D2:根据所述数据库类型,确定所述第一数据库与所述第二数据库是否为异构数据库。即,确定所述第一数据库与所述第二数据库的类型是否相同。
D3:若为异构数据库,则将更改语句处理为适配所述第二数据库的语句形式后,写入所述第二数据库。
在本申请实施例中,在将更改语句写入至第二数据库之前,通过将更改语句处理为适配与第二数据库的语句形式,可保障第二数据库同步的稳定进行,避免执行数据同步时出现延迟甚至同步异常,进一步保障分布式数据同步的稳定性和准确性。
本申请提出的分布式数据实时同步,可广泛应用于大型云服务的跨区数据同步、数据迁移。对更改操作幂等的数据库与更改操作非幂等的数据库都提出了通用的处理方案,本同步方案具有通用性,不针对特定类型的数据库,数据库类型的不同并不影响分布式数据的同步,并且能够做到实时同步,跨区同步安全性有保证。实践中,不仅MySQL,对于redis以及Cassandra两种典型的数据库的同步也都表现良好。利用本申请方案进行数据同步、数据迁移时,增量数据的同步、迁移基本上可以做到零停顿,避免数据迁移过程中对数据库的影响。而且,本方案中进行数据同步的思想主要是在数据接入层实现,基本上不用感知业务,业务新增/修改接口,不会影响数据的同步模型,也减少后续的人力维护成本。
应理解,上述各个实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
对应于上文实施例所述的分布式数据实时同步的方法,图6示出了本申请实施例提供的分布式数据实时同步的***的结构框图,为了便于说明,仅示出了与本申请实施例相关的部分。
参照图6,该***应用于数据同步设备,该***包括:操作请求获取单元61,操作类型确定单元62,语句发送单元63,数据同步单元64,其中:
操作请求获取单元61,用于获取数据库操作请求,所述数据库操作请求用于指示对第一数据库中的数据记录进行操作;
操作类型确定单元62,用于当所述数据库操作请求包括更改语句时,获取待与所述第一数据库同步的第二数据库的更改操作类型;
语句发送单元63,用于按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列;
数据同步单元64,用于基于所述消息队列,将所述更改语句同步写入至所述第二数据库。
作为本申请一种可能的实施方式,所述语句发送单元63包括:
第一发送模块,用于当所述第二数据库的更改操作类型为幂等时,将所述更改语句以日志形式发送至所述消息队列。
作为本申请一种可能的实施方式,所述更改语句包括用于标识待操作的数据记录的指定字段,所述语句发送单元63包括:
分区信息确定模块,用于当所述第二数据库的更改操作类型为非幂等时,根据所述指定字段,确定所述更改语句在所述消息队列中对应的分区信息;
语句发送模块,用于将所述更改语句发送至所述分区信息标识的分区。
作为本申请一种可能的实施方式,所述分区信息包括分区键,所述分区信息确定模块包括:
分区数目获取子模块,用于获取所述消息队列的分区数目;
分区键确定子模块,用于根据所述指定字段与所述分区数目,确定所述更改语句对应的分区键。
作为本申请一种可能的实施方式,所述更改语句包括用于标识待操作的数据记录的指定字段,所述数据同步单元64包括:
线程数获取模块,用于获取当前的并发线程数;
目标线程确定模块,用于根据所述指定字段与所述并发线程数,确定所述更改语句对应的目标线程;
第一数据写入模块,用于基于所述目标线程,将所述更改语句写入所述第二数据库。
作为本申请一种可能的实施方式,所述数据同步单元64还包括:
数据库类型获取模块,用于获取所述第一数据库及所述第二数据库的数据库类型;
异构确定模块,用于根据所述数据库类型,确定所述第一数据库与所述第二数据库是否为异构数据库;
第二数据写入模块,用于若为异构数据库,则将更改语句处理为适配所述第二数据库的语句形式后,写入所述第二数据库。
作为本申请一种可能的实施方式,所述操作请求获取单元61包括:
请求获取模块,用于从数据接入层通过面向切面编程技术获取所述数据库操作请求。
本申请实施例中,通过获取数据库操作请求,当所述数据库操作请求包括更改语句时,获取待与所述第一数据库同步的第二数据库的更改操作类型,然后按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列,基于所述消息队列,将所述更改语句同步写入至所述第二数据库,第二数据库对待同步的数据记录进行相同更改操作。本方案进行分布式数据同步时不受数据库类型以及所在位置的影响,可有效实现分布式数据实时同步,并保障同步的数据一致。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如图1至图5表示的任意一种分布式数据实时同步的方法的步骤。
本申请实施例还提供一种计算机程序产品,当该计算机程序产品在终端设备上运行时,使得终端设备执行实现如图1至图5表示的任意一种分布式数据实时同步的方法的步骤。
图7是本申请一实施例提供的数据同步设备的示意图。如图7所示,该实施例的数据同步设备7包括:处理器70、存储器71以及存储在所述存储器71中并可在所述处理器70上运行的计算机程序72。所述处理器70执行所述计算机程序72时实现上述各个分布式数据实时同步的方法的实施例中的步骤,例如图1所示的步骤S101至S104。或者,所述处理器70执行所述计算机程序72时实现上述各***实施例中各模块/单元的功能,例如图6所示单元61至64的功能。
所述计算机程序72可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器71中,并由所述处理器70执行,以完成本申请。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序72在所述数据同步设备7中的执行过程。
所称处理器70可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器71可以是所述数据同步设备7的内部存储单元,例如数据同步设备7的硬盘或内存。所述存储器71也可以是所述数据同步设备7的外部存储设备,例如所述数据同步设备7上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器71还可以既包括所述数据同步设备7的内部存储单元也包括外部存储设备。所述存储器71用于存储所述计算机程序以及所述数据同步设备所需的其他程序和数据。所述存储器71还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述***的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述***中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***,***和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的***和方法,可以通过其它的方式实现。例如,以上所描述的***实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,***或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或***、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括是电载波信号和电信信号。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种分布式数据实时同步的方法,其特征在于,所述方法包括:
获取数据库操作请求,所述数据库操作请求用于指示对第一数据库中的数据记录进行操作;
当所述数据库操作请求包括更改语句时,获取待与所述第一数据库同步的第二数据库的更改操作类型;
按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列;
基于所述消息队列,将所述更改语句同步写入至所述第二数据库。
2.如权利要求1所述的方法,其特征在于,所述按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列,包括:
当所述第二数据库的更改操作类型为幂等时,将所述更改语句以日志形式发送至所述消息队列。
3.如权利要求1所述的方法,其特征在于,所述更改语句包括用于标识待操作的数据记录的指定字段,所述按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列,包括:
当所述第二数据库的更改操作类型为非幂等时,根据所述指定字段,确定所述更改语句在所述消息队列中对应的分区信息;
将所述更改语句发送至所述分区信息标识的分区。
4.如权利要求3所述的方法,其特征在于,所述分区信息包括分区键,所述根据所述指定字段,确定所述更改语句在所述消息队列中对应的分区信息,包括:
获取所述消息队列的分区数目;
根据所述指定字段与所述分区数目,确定所述更改语句对应的分区键。
5.如权利要求1所述的方法,其特征在于,所述更改语句包括用于标识待操作的数据记录的指定字段,所述基于所述消息队列,将所述更改语句同步写入至所述第二数据库,包括:
获取当前的并发线程数;
根据所述指定字段与所述并发线程数,确定所述更改语句对应的目标线程;
基于所述目标线程,将所述更改语句写入所述第二数据库。
6.如权利要求1至5任一项所述的方法,其特征在于,所述将所述更改语句同步写入至所述第二数据库,包括:
获取所述第一数据库及所述第二数据库的数据库类型;
根据所述数据库类型,确定所述第一数据库与所述第二数据库是否为异构数据库;
若为异构数据库,则将更改语句处理为适配所述第二数据库的语句形式后,写入所述第二数据库。
7.如权利要求1至5任一项所述的方法,其特征在于,所述获取数据库操作请求,包括:
从数据接入层通过面向切面编程技术获取所述数据库操作请求。
8.一种分布式数据实时同步的***,其特征在于,所述***包括:
操作请求获取单元,用于获取数据库操作请求,所述数据库操作请求用于指示对第一数据库中的数据记录进行操作;
操作类型确定单元,用于当所述数据库操作请求包括更改语句时,获取待与所述第一数据库同步的第二数据库的更改操作类型;
语句发送单元,用于按所述第二数据库的更改操作类型对应的预设处理方式,将所述更改语句发送至消息队列;
数据同步单元,用于基于所述消息队列,将所述更改语句同步写入至所述第二数据库。
9.一种数据同步设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7中任一项所述的分布式数据实时同步的方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的分布式数据实时同步的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210096601.1A CN114428820A (zh) | 2022-01-26 | 2022-01-26 | 分布式数据实时同步的方法、***和数据同步设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210096601.1A CN114428820A (zh) | 2022-01-26 | 2022-01-26 | 分布式数据实时同步的方法、***和数据同步设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114428820A true CN114428820A (zh) | 2022-05-03 |
Family
ID=81312862
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210096601.1A Pending CN114428820A (zh) | 2022-01-26 | 2022-01-26 | 分布式数据实时同步的方法、***和数据同步设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114428820A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117573730A (zh) * | 2024-01-16 | 2024-02-20 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备、可读存储介质及程序产品 |
WO2024114524A1 (zh) * | 2022-11-30 | 2024-06-06 | 华为技术有限公司 | 访问数据库的方法、装置及存储介质 |
-
2022
- 2022-01-26 CN CN202210096601.1A patent/CN114428820A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024114524A1 (zh) * | 2022-11-30 | 2024-06-06 | 华为技术有限公司 | 访问数据库的方法、装置及存储介质 |
CN117573730A (zh) * | 2024-01-16 | 2024-02-20 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备、可读存储介质及程序产品 |
CN117573730B (zh) * | 2024-01-16 | 2024-04-05 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备、可读存储介质及程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108536761A (zh) | 报表数据查询方法及服务器 | |
CN114428820A (zh) | 分布式数据实时同步的方法、***和数据同步设备 | |
CN104462269A (zh) | 一种异构数据库数据交换方法及*** | |
US8412721B2 (en) | Efficient data extraction by a remote application | |
US20080133733A1 (en) | Realtime process history server | |
CN111651519B (zh) | 数据同步方法、数据同步装置、电子设备及存储介质 | |
US9026493B1 (en) | Multi-master RDBMS improvements for distributed computing environment | |
US20230418811A1 (en) | Transaction processing method and apparatus, computing device, and storage medium | |
CN110851474A (zh) | 数据查询方法、数据库中间件、数据查询设备及存储介质 | |
US11243942B2 (en) | Parallel stream processing of change data capture | |
CN110704442A (zh) | 一种大数据的实时获取方法及装置 | |
CN113704267A (zh) | 基于ElasticSearch的数据查询方法、***、设备及存储介质 | |
CN112052295A (zh) | 一种数据同步方法、装置、电子设备和可读存储介质 | |
CN111984723A (zh) | 数据同步方法、装置及终端设备 | |
CN112905676A (zh) | 一种数据文件的导入方法及装置 | |
CN107656992B (zh) | 面向多***源的快照版本管理方法 | |
CN115587147A (zh) | 一种数据处理方法及*** | |
CN115964436A (zh) | 一种数据库集群管理的方法和装置 | |
CN115080666A (zh) | 数据同步方法、***、电子设备及存储介质 | |
CN113760950A (zh) | 指标数据查询方法、装置、电子设备以及存储介质 | |
CN115269207B (zh) | 一种用于vCPE网元分配资源的方法和*** | |
CN108509450B (zh) | 用于处理数据库高并发更新的方法和装置 | |
CN117390121A (zh) | 数据处理的方法、装置、电子设备和存储介质 | |
CN116860742A (zh) | 数据写入方法、电子设备及存储介质 | |
CN117472928A (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 |