CN117255100A - 一种数据同步方法、装置、电子设备及可读存储介质 - Google Patents

一种数据同步方法、装置、电子设备及可读存储介质 Download PDF

Info

Publication number
CN117255100A
CN117255100A CN202311295741.2A CN202311295741A CN117255100A CN 117255100 A CN117255100 A CN 117255100A CN 202311295741 A CN202311295741 A CN 202311295741A CN 117255100 A CN117255100 A CN 117255100A
Authority
CN
China
Prior art keywords
data
target
task
data task
shared variable
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
Application number
CN202311295741.2A
Other languages
English (en)
Inventor
向少鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN202311295741.2A priority Critical patent/CN117255100A/zh
Publication of CN117255100A publication Critical patent/CN117255100A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9063Intermediate storage in different physical parts of a node or terminal

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开提供了一种数据同步方法、装置、电子设备及可读存储介质,涉及数据迁移、云平台等技术领域。该方法包括:根据待处理的目标数据任务确定目标共享变量;获取目标共享变量的取值,并根据目标共享变量的取值为所述目标数据任务分配目标内存地址;在所述目标数据任务为待同步的第一数据任务的情况下,采用所述目标内存地址,从内存队列中读取第一数据任务,并执行所述第一数据任务进行数据同步;在所述目标数据任务为新增的第二数据任务的情况下,将所述第二数据任务写入内存队列。通过上述技术方案能够提高数据同步的效率。

Description

一种数据同步方法、装置、电子设备及可读存储介质
技术领域
本公开涉及计算机技术领域,尤其涉及数据迁移、云平台等技术领域。具体涉及一种数据同步方法、装置、电子设备及可读存储介质。
背景技术
数据同步又称数据迁移广泛应用于各个领域。例如,目前业务系统需要支持大量的用户数据存储,业务服务商可能将用户的数据存储于云端服务器,以支持业务运行。业务系统在进行机房数据迁移、机房数据上云等过程中,需要将一个存储系统中的数据平滑迁移到新的存储系统中。
在数据迁移过程中,如何提高迁移效率十分重要。
发明内容
本公开提供了一种数据同步方法、装置、电子设备及可读存储介质。
根据本公开的一方面,提供了一种数据同步方法,包括:
根据待处理的目标数据任务确定目标共享变量;
获取目标共享变量的取值,并根据目标共享变量的取值为所述目标数据任务分配目标内存地址;
在所述目标数据任务为待同步的第一数据任务的情况下,采用所述目标内存地址,从内存队列中读取第一数据任务,并执行所述第一数据任务进行数据同步;
在所述目标数据任务为新增的第二数据任务的情况下,将所述第二数据任务写入内存队列。
根据本公开的一方面,提供了一种数据同步装置,包括:
目标变量模块,用于根据待处理的目标数据任务确定目标共享变量;
目标地址模块,用于获取目标共享变量的取值,并根据目标共享变量的取值为所述目标数据任务分配目标内存地址;
任务执行模块,用于在所述目标数据任务为待同步的第一数据任务的情况下,采用所述目标内存地址,从内存队列中读取第一数据任务,并执行所述第一数据任务进行数据同步;
任务写入模块,用于在所述目标数据任务为新增的第二数据任务的情况下,将所述第二数据任务写入内存队列。
根据本公开的另一方面,提供了一种电子设备,该电子设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本公开任意实施例所提供的方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使计算机执行本公开任意实施例所提供的方法。
根据本公开的又一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据本公开任意实施例所提供的方法。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1a是根据本公开实施例提供的一种数据同步方法的流程图;
图1b是根据本公开实施例提供的一种数据同步系统的架构示意图;
图1c是根据本公开实施例提供的一种统一分发器的原理示意图;
图2a是根据本公开实施例提供的另一种数据同步方法的流程图;
图2b是根据本公开实施例提供的另一种统一分发器的原理示意图;
图2c是相关技术中各共享变量的加载示意图;
图3a是根据本公开实施例提供的又一种数据同步方法的流程图;
图3b是根据本公开实施例提供的另一种数据同步系统的架构示意图;;
图3c是根据本公开实施例提供的一种双向同步的原理示意图;
图4是根据本公开实施例提供的一种数据同步装置的结构示意图;
图5是用来实现本公开实施例的数据同步方法的电子设备的框图。
具体实施方式
图1a是根据本公开实施例提供的一种数据同步方法的流程图。该方法可以由数据同步装置来执行,该装置可以采用软件和/或硬件的方式实现,并可集成于电子设备中。如图1a所示,本实施例的数据同步方法可以包括:
S101,根据待处理的目标数据任务确定目标共享变量;
S102,获取目标共享变量的取值,并根据目标共享变量的取值为所述目标数据任务分配目标内存地址;
在所述目标数据任务为待同步的第一数据任务的情况下,继续执行S103;在所述目标数据任务为新增的第二数据任务的情况下,跳转执行S104;
S103,采用所述目标内存地址,从内存队列中读取第一数据任务,并执行所述第一数据任务进行数据同步;
S104,将所述第二数据任务写入内存队列。
图1b是根据本公开实施例提供的一种数据同步系统的架构示意图。参考图1b,数据同步系统可包括数据同步组件和执行组件,数据同步组件可包括内存队列,用于提供待同步的第一数据任务、还用于存储新增的第二数据任务,数据同步系统也可称为数据同步服务。数据同步组件还可包括监听线程,用于监听数据库中的日志是否发生变更,在发生变更的情况下,对变更的二进制编码日志进行解析,并根据解析结果新增第二数据任务,且将第二数据任务写入内存队列,也就是说,第二数据任务在数据库中的日志发生变更的情况下生成。需要说明的是,本公开实施例对日志的解析方式不做具体限定,以MySQL数据库为例,可模拟MySQL主备同步(slave)协议进行归档(binlog)日志解析。
内存队列中的元素具有索引,在内存队列采用数组结构的情况下可将内存队列中元素的下标作为索引。共享变量用于表征内存队列中的可用索引。目标共享变量可与目标数据任务对应的处理类型有关,例如在目标数据任务对应第一处理类型的情况下,可将第一共享变量作为目标共享变量;在目标数据任务对应第二处理类型的情况下,可将第二共享变量作为目标共享变量。
结合图1b和图1c,数据同步组件还可包括统一分发器(Sequence),用于为待处理的目标数据任务分配目标内存地址。具体的,内存队列可具有候选共享变量,各候选共享变量对应不同的处理类型。通过统一分发器获取待处理的目标数据任务,并根据目标数据任务对应的处理类型从候选共享变量中选择目标共享变量,获取目标共享变量的取值,且采用目标共享变量的取值确定目标数据任务在内存队列中可用的内存地址作为目标内存地址,也就是说目标内存地址为目标数据任务在内存队列中的可用内存地址。在存在多个目标数据任务的情况下,通过统一分发器可分别为各目标数据任务分配对应的目标内存地址,使得各目标数据任务可使用对应的目标内存地址进行任务处理。
通过在数据同步组件中引入统一分发器的无锁设计,采用统一分发器为不同目标数据任务分配对应的目标内存地址,使得不同目标数据任务可采用对应的目标内存地址并发进行任务处理,相比于为目标内存地址加锁避免其他线程访问引起的阻塞问题,统一分发器所实现的无锁设计可为各目标数据任务分配不同目标内存地址,使各目标数据任务可并发执行,也就是说提高了任务处理的并发程度。
参考图1b,执行组件用于执行数据同步,可包括配置子组件、连接子组件、插件子组件;配置子组件用于记录数据库、数据同步组件的连接信息,还可根据同步需求进行任务配置。例如,在数据库A中表A包括字段name1、age2,数据库B中表B包括字段name2、age2,需要将字段name1同步到字段name2,需要将字段age1同步到字段age2的情况下,可在配置子组件中构建字段name1与字段name2之间的映射关系,以及构建字段age1与字段age2之间的映射关系,由同步任务定时执行。连接子组件用于连接数据库、连接数据同步组件。在数据同步组件和执行组件部署在同一台机器的情况下,连接子组件可基于不同进程间的通信连接数据同步组件;在数据同步组件和执行组件部署在不同台机器的情况下,连接子组件可基于远程调用通信连接数据同步组件。插件子组件用于提供预先构建的候选插件供业务方使用,例如可提供同步插件、一致性验证插件、日志插件等。采用SPI(Service ProviderInterface,服务提供发现机制)可扩展多种不通类型的数据同步任务,例如包括全量同步、增量同步等。
在目标数据任务为待同步的第一数据任务的情况下,采用目标内存地址从内存队列中读取第一数据任务,并通过执行组件执行第一数据任务进行数据同步,例如通过执行组件将数据库A中表A的字段name1同步到数据库B中表B的字段name2,通过执行组件将数据库A中表A的字段age1同步到数据库B中表B的字段age2。在目标数据任务为新增的第二数据任务的情况下,可将第二数据任务存入内存队列供后续执行组件进行同步。
在一种可选实施方式中,内存队列采用环形数组结构,如图1c所示。内存队列采用环形数组(ring buffer)结构,一方面数组结构对CPU的缓存友好,采用预加载机制在加载第一个索引的过程中其他索引都被优先加载。采用环形结构,相比于链表对内存的复用程度更高,能够高效利用缓存,而且环形结构还使得统一分发器的目标内存地址分配过程不会产生突变。
本公开实施例提供的技术方案,通过在数据同步组件中引入统一分发器的无锁设计,采用统一分发器为不同目标数据任务分配对应的目标内存地址,使得不同目标数据任务可采用对应的目标内存地址并发进行任务处理,解决了内存队列的加锁阻塞问题,从而提高了数据同步效率。
图2a是根据本公开实施例提供的另一种数据同步方法的流程图。参见图2a,本实施例的数据同步方法可以包括:
S201,根据待处理的目标数据任务确定目标共享变量;
S202,获取目标共享变量的取值,并将所述目标共享变量的取值作为起始地址;
S203,根据目标数据任务的任务数量和所述起始地址,确定终止地址;
S204,采用所述起始地址和所述终止地址,为所述目标数据任务分配目标内存地址;
在所述目标数据任务为待同步的第一数据任务的情况下,继续执行S205;在所述目标数据任务为新增的第二数据任务的情况下,跳转执行S206;
S205,采用所述目标内存地址,从内存队列中读取第一数据任务,并执行所述第一数据任务进行数据同步;
S206,将所述第二数据任务写入内存队列。
针对每一目标数据任务,通过数据同步组件中的统一分发器确定对应的目标共享变量,并获取目标共享变量的取值。统一分发器将该目标共享变量的取值作为该目标数据任务在内存队列中可用的起始地址,可对该目标数据任务的任务数量和该起始地址求和,并将求和结果作为该目标数据任务在内存队列中可用的终止地址,也就是说将由起始地址到终止地址之间的内存地址均作为目标内存地址分配给该目标数据任务。需要说明的是,各目标数据任务对应的目标共享变量的取值不同。通过根据目标共享变量的取值和目标数据任务的任务数量为目标数据任务分配目标内存地址,能够提高目标内存地址的准确性,从而提高数据同步的稳定性。
在一种可选实施方式中,所述根据待处理的目标数据任务确定目标共享变量,包括:在所述目标数据任务为待同步的第一数据任务的情况下,将读共享变量作为目标共享变量;在所述目标数据任务为新增的第二数据任务的情况下,将写共享变量作为目标共享变量。
其中,内存队列至少包括读共享变量和写共享变量。在目标数据任务为待同步的第一数据任务的情况下,将读共享变量作为目标共享变量;在目标数据任务为新增的第二数据任务的情况下,将写共享变量作为目标共享变量。通过为待同步的第一数据任务维护读共享变量,便于统一分发器采用读共享变量的取值为第一数据任务分配目标内存地址,采用目标内存地址从内存队列中读取第一数据任务,从而执行第一数据任务进行数据同步;通过为新增的第二数据任务维护写共享变量,便于统一分发器采用写共享变量的取值为第二数据任务分配目标内存地址,将第二数据任务写入内存队列。通过上述处理使得第一数据任务的读取与第二数据任务的写入之间相互独立,从而进一步提高数据同步的稳定性。
在一种可选实施方式中,该方法还包括:根据目标数据任务的任务数量,对所述目标共享变量的取值进行更新。
在本公开实施例中,针对每一目标数据任务,可对目标共享变量的取值和该目标数据任务的任务数量求和,将求和结果作为终止地址;可采用终止地址对目标共享变量的取值进行更新,例如可将终止地址的下一地址作为目标共享变量的新取值。
参考图2b,统一分发器可并发为至少两个第一数据任务分配目标内存地址。例如,一个第一数据任务对应的读共享变量的取值为1,该第一数据任务的任务数量为2,统一分发器可将内存地址1和2作为对应的目标内存地址,并将读共享变量的取值更新为3;下一个第一数据任务对应的读共享变量的取值为3,该第一数据任务的任务数量为3,统一分发器可将内存地址3-5作为对应的目标内存地址,并将读共享变量的取值更新为6。统一分发器也可并发为至少两个第二数据任务分配目标内存地址。例如,一个第二数据任务对应的写共享变量的取值为7,该第二数据任务的任务数量为2,统一分发器可将内存地址7和8作为对应的目标内存地址,并将写共享变量的取值更新为9;下一个第二数据任务对应的写共享变量的取值为9,该第二数据任务的任务数量为1,统一分发器可将内存地址9作为对应的目标内存地址,并将写共享变量的取值更新为10。统一分发器具体可通过自旋与CAS(CompareAnd Swap,比较并交换)原子性操作实现内存地址分发。通过采用目标数据任务的任务数量对目标共享变量的取值进行更新,使得各目标数据任务对应的目标共享变量的取值不同,从而通过统一分发器可并发为各目标数据任务分配不同的目标内存地址,提高了数据同步的并发程度,相比于直接对内存队列的尾指针加锁的方式,性能得到较大的提升。
在一种可选实施方式中,所述方法还包括:采用字节填充算法,将各共享变量写入不同的缓存行中。
其中,共享变量可包括读共享变量(getIndex)、写共享变量(putIndex),还可包括缓存尺寸共享变量(bufferSize)。参考图2c,相关技术中各共享变量会被线程加载到一个缓存行中,因此每次修改都会使之前缓存的数据失效,从而削弱共享效果。例如在写一个新的第二数据任务到内存队列时,写共享变量的取值会被修改,从而导致消费者线程中缓存的各共享变量的取值均失效,需要从主存CPU中重新读取各共享变量的取值,也就是会产生无法充分使用缓存行的伪共享问题。
针对伪共享问题,本公开实施例通过采用字节填充算法增大各共享变量之间的间隔使得各共享变量的取值位于不同的缓存行中,以空间换时间,从而进一步提高数据同步效率。
在一种可选实施方式中,所述采用字节填充算法,将各共享变量写入不同的缓存行中,包括:针对每一共享变量,根据该共享变量的尺寸和缓存行的尺寸,确定待填充的目标字节数量;采用所述目标字节数量对该共享变量所处的缓存行进行填充。
针对每一共享变量,将缓存行的尺寸与该共享变量的尺寸之间的差值作为待填充的目标字节数量,在该共享变量之后填充目标字节数量个预设字符,以占满该缓存行。通过在共享变量所在的缓存行中增加预设字符占满缓存行,使得各共享变量位于不同的缓存行。在任一共享变量的取值发生变化的情况下,其他共享变量所在缓存行保持不变即其他共享变量的取值仍然有效,只需从主存中重新读取变化的共享变量的取值即可,其他共享变量的取值无需重新读取。经实验发现,在2G Hz、2核、8G内存的硬件条件,且均采用相同运行环境的情况下,使用了共享机制相比于不使用共享机制,数据同步效率能够提升4倍左右。
本公开实施例提供的技术方案,统一分发器根据目标共享变量的取值和目标数据任务的任务数量为目标数据任务分配目标内存地址,并根据目标数据任务的任务数量对目标共享变量的取值进行更新,从而可并发为各目标数据任务分配不同的目标内存地址,提高了数据同步的并发程度;以及,通过采用字节填充算法,将各共享变量写入不同的缓存行,还能够解决伪共享问题,进一步提高数据同步效率。
图3a是根据本公开实施例提供的另一种数据同步方法的流程图。参见图3a,本实施例的数据同步方法可以包括:
S301,根据待处理的目标数据任务确定目标共享变量;
S302,获取目标共享变量的取值,并根据目标共享变量的取值为所述目标数据任务分配目标内存地址;
在所述目标数据任务为待同步的第一数据任务的情况下,继续执行S303;在所述目标数据任务为新增的第二数据任务的情况下,跳转执行S305;
S303,通过数据同步组件中的消费线程采用目标内存地址从数据同步组件的内存队列中读取第一数据任务;
S304,通过执行组件执行所述第一数据任务进行数据同步;
S305,将所述第二数据任务写入内存队列。
在一种可选实施方式中,所述将所述第二数据任务写入内存队列,包括:通过数据同步组件中的生产线程采用所述目标内存地址将第二数据任务写入内存队列。
结合图3b和图2b,数据同步系统可包括数据同步组件和执行组件,数据同步组件可包括统一分发器(sequence)、内存队列、监听线程、生产线程、消费线程。生产线程、消费线程均可使用统一分发器获得目标内存地址。在目标数据任务为待处理的第一数据任务的情况下,消费线程向统一分发器发送消费请求,统一分发器响应于消费请求将读共享变量作为目标共享变量,获取读共享变量的取值,并根据读共享变量的取值为目标数据任务分配目标内存地址;消费线程获取分配的目标内存地址,消费线程可采用目标内存地址从内存队列中读取第一数据任务;执行组件从数据同步组件中获取第一数据任务,并执行第一数据任务进行数据同步。
在目标数据任务为待处理的第二数据任务的情况下,生产线程向统一分发器发送生产请求,统一分发器响应于生产请求将写共享变量作为目标共享变量,获取写共享变量的取值,并根据写共享变量的取值为目标数据任务分配目标内存地址;生产线程获取分配的目标内存地址,并可采用目标内存地址将第二数据任务写入内存队列。通过统一分发器、消费线程、生产线程之间的相互配合,实现了对内存队列的并发读取、对内存队列的并发写入,进一步提高了数据同步的效率。
在一种可选实施方式中,通过执行组件执行所述第一数据任务进行数据同步之前,还包括:在第一数据任务的数据源与数据接收方为不同数据库的情况下,通过执行组件在第一数据任务的注释头中添加数据源的标识。
其中,数据源为数据发送方。仍以将数据库A中字段name1同步到数据库B中字段name2为例,数据库A为数据源,数据库B为数据接收方。本公开实施例支持双向同步,也就是说数据库A可作为数据源向数据库B同步数据,数据库B也可作为数据源向数据库A同步数据。在双向同步过程中还可能引发循环同步问题,例如在数据库A将字段name1同步到数据库中字段name2后,数据库中字段name2也发生了变更,数据同步组件可根据对应的变更日常产生新的第二数据任务,用于将该变更再同步回数据库A,浪费资源。
通过执行组件确定第一数据任务的数据源与数据接收方是否相同,在二者为不同数据库的情况下,还在第一数据任务的SQL注释头中添加数据源的标识,作为注释标签。参考图3c,数据同步服务可分别对旧应用对应的旧数据库、新应用对应的新数据库进行日志监听、同步数据,在旧数据库中的数据A发生变更的情况下,数据同步服务中数据同步组件生成新的第二数据任务,并将新的第二数据任务提供给执行组件进行同步,执行组件可在该第二数据任务的SQL注释头中添加旧数据库的标识,并执行该任务以将数据A的变更同步到新数据库。数据同步组件也会监听到新数据库中因数据A发生变更对应的日志,生产新的第二数据任务,并将新的第二数据任务提供给执行组件,执行组件解析该新的第二数据任务中SQL语句的注释头得到数据源,在数据源与数据接收方旧数据库一致的情况下,中断同步,避免引发循环同步问题。通过为第一数据任务添加数据源的标识作为注释标签,便于解决数据双向同步引发的循环同步问题。
在一种可选实施方式中,该方法还包括:在根据第一数据任务的注释头确定第一数据任务的数据源与数据接收方为相同数据库的情况下,通过执行组件丢弃所述第一数据任务。
通过执行组件还可从第一数据任务的注释头中提取第一数据任务的数据源,并确定第一数据任务的数据源与数据接收方是否为相同数据库,在为相同数据库的情况下,执行组件丢弃第一数据任务,也就是说,对第一数据任务进行中断处理,不再重复将第一数据任务同步回数据源。需要说明的是,在第一数据任务的数据源与数据接收方为不同数据库的情况下,执行组件将第一数据任务同步到数据接收方。通过执行组件将数据源作为第一数据任务的标注标签,并且在根据第一数据任务的标注标签确定第一数据任务的数据源与数据接收方为相同数据库的情况下,对第一数据任务进行中断处理,能够避免循环同步问题,从而进一步提高双向同步的性能。
本公开实施例提供的技术方案,通过统一分发器、消费线程、生产线程之间的相互配合,实现了对内存队列的并发读取、对内存队列的并发写入,进一步提高了数据同步的效率;以及,通过将数据源作为第一数据任务的注释标签,对第二次循环同步进行检测并中断,解决了数据双向同步引发的循环同步问题,从而进一步提高数据同步的效率。
图4是根据本公开实施例提供的一种数据同步装置的结构示意图。该装置可以采用软件和/或硬件的方式实现。如图4所示,本实施例的数据同步装置400可以包括:
目标变量模块410,用于根据待处理的目标数据任务确定目标共享变量;
目标地址模块420,用于获取目标共享变量的取值,并根据目标共享变量的取值为所述目标数据任务分配目标内存地址;
任务执行模块430,用于在所述目标数据任务为待同步的第一数据任务的情况下,采用所述目标内存地址,从内存队列中读取第一数据任务,并执行所述第一数据任务进行数据同步;
任务写入模块440,用于在所述目标数据任务为新增的第二数据任务的情况下,将所述第二数据任务写入内存队列。
在一种可选实施方式中,所述目标地址模块420包括:
起始地址单元,用于将所述目标共享变量的取值作为起始地址;
终止地址单元,用于根据目标数据任务的任务数量和所述起始地址,确定终止地址;
目标地址单元,用于采用所述起始地址和所述终止地址,为所述目标数据任务分配目标内存地址。
在一种可选实施方式中,所述目标变量模块包括:
读共享单元,用于在所述目标数据任务为待同步的第一数据任务的情况下,将读共享变量作为目标共享变量;
写共享单元,用于在所述目标数据任务为新增的第二数据任务的情况下,将写共享变量作为目标共享变量。
在一种可选实施方式中,上述数据同步装置400还包括:
变量更新模块,用于根据目标数据任务的任务数量,对所述目标共享变量的取值进行更新。
在一种可选实施方式中,所述任务执行模块430包括:
任务读取单元,用于通过数据同步组件中的消费线程采用目标内存地址从数据同步组件的内存队列中读取第一数据任务;
任务执行单元,用于通过执行组件执行所述第一数据任务进行数据同步。
在一种可选实施方式中,上述数据同步装置400还包括:
标识添加模块,用于在第一数据任务的数据源与数据接收方为不同数据库的情况下,通过执行组件在第一数据任务的注释头中添加数据源的标识。
在一种可选实施方式中,上述数据同步装置400还包括:
任务丢弃模块,用于在根据第一数据任务的注释头确定第一数据任务的数据源与数据接收方为相同数据库的情况下,通过执行组件丢弃所述第一数据任务。
在一种可选实施方式中,所述任务写入模块440具体用于:
通过数据同步组件中的生产线程采用所述目标内存地址将第二数据任务写入内存队列。
在一种可选实施方式中,上述数据同步装置400还包括:
字节填充模块,用于采用字节填充算法,将各共享变量写入不同的缓存行中。
在一种可选实施方式中,所述字节填充模块包括:
字节数量单元,用于针对每一共享变量,根据该共享变量的尺寸和缓存行的尺寸,确定待填充的目标字节数量;
字节填充单元,用于采用所述目标字节数量对该共享变量所处的缓存行进行填充。
在一种可选实施方式中,所述内存队列采用环形数组结构。
本公开实施例的技术方案,提供动态生效的配置能力,对使用的业务方体验友好,修改配置实时生效;不同于普通的数据队列而采用环形数组结构的设计方案,引入统一分发器提供了无锁设计;采用字节填充算法以空间换时间极大地提升了数据队列的性能;还能支持多数据源的双向数据同步,解决了数据双向同步引发的循环同步问题,从而提高数据同步整体的吞吐量。
本公开的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图5是用来实现本公开实施例的数据同步方法的电子设备的框图。
图5示出了可以用来实施本公开的实施例的示例电子设备500的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图5所示,电子设备500包括计算单元501,其可以根据存储在只读存储器(ROM)502中的计算机程序或者从存储单元508加载到随机访问存储器(RAM)503中的计算机程序,来执行各种适当的动作和处理。在RAM 503中,还可存储电子设备500操作所需的各种程序和数据。计算单元501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
电子设备500中的多个部件连接至I/O接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储单元508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许电子设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元501可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元501的一些示例包括但不限于中央处理单元(CPU)、图像处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元501执行上文所描述的各个方法和处理,例如数据同步方法。例如,在一些实施例中,数据同步方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元508。在一些实施例中,计算机程序的部分或者全部可以经由ROM 502和/或通信单元509而被载入和/或安装到电子设备500上。当计算机程序加载到RAM 503并由计算单元501执行时,可以执行上文描述的数据同步方法的一个或多个步骤。备选地,在其他实施例中,计算单元501可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行数据同步方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图像用户界面或者网络浏览器的用户计算机,用户可以通过该图像用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,既有硬件层面的技术也有软件层面的技术。人工智能硬件技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理等技术;人工智能软件技术主要包括计算机视觉技术、语音识别技术、自然语言处理技术及机器学习/深度学习技术、大数据处理技术、知识图谱技术等几大方向。
云计算(cloud computing),指的是通过网络接入弹性可扩展的共享物理或虚拟资源池,资源可以包括服务器、操作系统、网络、软件、应用和存储设备等,并可以按需、自服务的方式对资源进行部署和管理的技术体系。通过云计算技术,可以为人工智能、区块链等技术应用、模型训练提供高效强大的数据处理能力。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (20)

1.一种数据同步方法,包括:
根据待处理的目标数据任务确定目标共享变量;
获取目标共享变量的取值,并根据目标共享变量的取值为所述目标数据任务分配目标内存地址;
在所述目标数据任务为待同步的第一数据任务的情况下,采用所述目标内存地址,从内存队列中读取第一数据任务,并执行所述第一数据任务进行数据同步;
在所述目标数据任务为新增的第二数据任务的情况下,将所述第二数据任务写入内存队列。
2.根据权利要求1所述的方法,其中,所述根据目标共享变量的取值为所述目标数据任务分配目标内存地址,包括:
将所述目标共享变量的取值作为起始地址;
根据目标数据任务的任务数量和所述起始地址,确定终止地址;
采用所述起始地址和所述终止地址,为所述目标数据任务分配目标内存地址。
3.根据权利要求1所述的方法,其中,所述根据待处理的目标数据任务确定目标共享变量,包括:
在所述目标数据任务为待同步的第一数据任务的情况下,将读共享变量作为目标共享变量;
在所述目标数据任务为新增的第二数据任务的情况下,将写共享变量作为目标共享变量。
4.根据权利要求1所述的方法,还包括:
根据目标数据任务的任务数量,对所述目标共享变量的取值进行更新。
5.根据权利要求1所述的方法,其中,所述采用所述目标内存地址,从内存队列中读取第一数据任务,并执行所述第一数据任务进行数据同步,包括:
通过数据同步组件中的消费线程采用目标内存地址从数据同步组件的内存队列中读取第一数据任务;
通过执行组件执行所述第一数据任务进行数据同步。
6.根据权利要求5所述的方法,所述通过执行组件执行所述第一数据任务进行数据同步之前,还包括:
在第一数据任务的数据源与数据接收方为不同数据库的情况下,通过执行组件在第一数据任务的注释头中添加数据源的标识。
7.根据权利要求6所述的方法,还包括:
在根据第一数据任务的注释头确定第一数据任务的数据源与数据接收方为相同数据库的情况下,通过执行组件丢弃所述第一数据任务。
8.根据权利要求1所述的方法,其中,所述将所述第二数据任务写入内存队列,包括:
通过数据同步组件中的生产线程采用所述目标内存地址将第二数据任务写入内存队列。
9.根据权利要求1-8中任一项所述的方法,还包括:
采用字节填充算法,将各共享变量写入不同的缓存行中。
10.根据权利要求9所述的方法,其中,所述采用字节填充算法,将各共享变量写入不同的缓存行中,包括:
针对每一共享变量,根据该共享变量的尺寸和缓存行的尺寸,确定待填充的目标字节数量;
采用所述目标字节数量对该共享变量所处的缓存行进行填充。
11.根据权利要求1所述的方法,其中,所述内存队列采用环形数组结构。
12.一种数据同步装置,包括:
目标变量模块,用于根据待处理的目标数据任务确定目标共享变量;
目标地址模块,用于获取目标共享变量的取值,并根据目标共享变量的取值为所述目标数据任务分配目标内存地址;
任务执行模块,用于在所述目标数据任务为待同步的第一数据任务的情况下,采用所述目标内存地址,从内存队列中读取第一数据任务,并执行所述第一数据任务进行数据同步;
任务写入模块,用于在所述目标数据任务为新增的第二数据任务的情况下,将所述第二数据任务写入内存队列。
13.根据权利要求12所述的装置,其中,所述目标地址模块包括:
起始地址单元,用于将所述目标共享变量的取值作为起始地址;
终止地址单元,用于根据目标数据任务的任务数量和所述起始地址,确定终止地址;
目标地址单元,用于采用所述起始地址和所述终止地址,为所述目标数据任务分配目标内存地址。
14.根据权利要求12所述的装置,其中,所述任务执行模块包括:
任务读取单元,用于通过数据同步组件中的消费线程采用目标内存地址从数据同步组件的内存队列中读取第一数据任务;
任务执行单元,用于通过执行组件执行所述第一数据任务进行数据同步。
15.根据权利要求14所述的装置,所述装置还包括:
标识添加模块,用于在第一数据任务的数据源与数据接收方为不同数据库的情况下,通过执行组件在第一数据任务的注释头中添加数据源的标识。
16.根据权利要求15所述的装置,所述装置还包括:
任务丢弃模块,用于在根据第一数据任务的注释头确定第一数据任务的数据源与数据接收方为相同数据库的情况下,通过执行组件丢弃所述第一数据任务。
17.根据权利要求12-16中任一项所述的装置,所述装置还包括:
字节填充模块,用于采用字节填充算法,将各共享变量写入不同的缓存行中。
18.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-11中任一项所述的方法。
19.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使计算机执行根据权利要求1-11中任一项所述的方法。
20.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-11中任一项所述的方法。
CN202311295741.2A 2023-10-08 2023-10-08 一种数据同步方法、装置、电子设备及可读存储介质 Pending CN117255100A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311295741.2A CN117255100A (zh) 2023-10-08 2023-10-08 一种数据同步方法、装置、电子设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311295741.2A CN117255100A (zh) 2023-10-08 2023-10-08 一种数据同步方法、装置、电子设备及可读存储介质

Publications (1)

Publication Number Publication Date
CN117255100A true CN117255100A (zh) 2023-12-19

Family

ID=89129119

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311295741.2A Pending CN117255100A (zh) 2023-10-08 2023-10-08 一种数据同步方法、装置、电子设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN117255100A (zh)

Similar Documents

Publication Publication Date Title
CN111694857B (zh) 存储资源数据的方法、装置、电子设备及计算机可读介质
US20220357990A1 (en) Method for allocating data processing tasks, electronic device, and storage medium
CN109933585B (zh) 数据查询方法和数据查询系统
CN111125057B (zh) 一种业务请求的处理方法、装置及计算机系统
US20220374742A1 (en) Method, device and storage medium for running inference service platform
WO2023221416A1 (zh) 信息生成方法、装置、设备以及存储介质
CN113050940A (zh) 小程序的预览方法、相关装置及计算机程序产品
CN112015468A (zh) 一种接口文档处理方法、装置、电子设备以及存储介质
US20220413906A1 (en) Method, device, and program product for managing multiple computing tasks based on batch
US20220244990A1 (en) Method for performing modification task, electronic device and readable storage medium
CN112948018B (zh) 用于小程序的动态库加载方法、装置、设备及介质
CN116932147A (zh) 流式作业处理方法、装置、电子设备及介质
CN111767433A (zh) 数据处理方法、装置、存储介质以及终端
US11689630B2 (en) Request processing method and apparatus, electronic device, and computer storage medium
CN117255100A (zh) 一种数据同步方法、装置、电子设备及可读存储介质
CN113076343B (zh) 数据查询方法、装置、设备及存储介质
CN116069497A (zh) 执行分布式任务的方法、装置、设备以及存储介质
CN115168358A (zh) 数据库访问方法、装置、电子设备及存储介质
CN112860235B (zh) 处理文本的方法、装置、设备和存储介质
CN113191136A (zh) 数据处理方法及装置
CN113204382A (zh) 数据处理方法、装置、电子设备以及存储介质
CN114327271B (zh) 生命周期的管理方法、装置、设备以及存储介质
CN114416249B (zh) 程序处理方法、装置、设备及存储介质
WO2023024035A1 (zh) 请求处理方法、装置、电子设备以及存储介质
US11106500B2 (en) Managing memories of computing resources based on data access speeds

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