CN113553373B - 数据同步方法及装置、存储介质及电子设备 - Google Patents

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

Info

Publication number
CN113553373B
CN113553373B CN202110658465.6A CN202110658465A CN113553373B CN 113553373 B CN113553373 B CN 113553373B CN 202110658465 A CN202110658465 A CN 202110658465A CN 113553373 B CN113553373 B CN 113553373B
Authority
CN
China
Prior art keywords
data
synchronization
row
target system
source system
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
Application number
CN202110658465.6A
Other languages
English (en)
Other versions
CN113553373A (zh
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 Kuangshi Technology Co Ltd
Original Assignee
Beijing Kuangshi 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 Kuangshi Technology Co Ltd filed Critical Beijing Kuangshi Technology Co Ltd
Priority to CN202110658465.6A priority Critical patent/CN113553373B/zh
Publication of CN113553373A publication Critical patent/CN113553373A/zh
Application granted granted Critical
Publication of CN113553373B publication Critical patent/CN113553373B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请涉及数据处理技术领域,提供一种数据同步方法及装置、存储介质及电子设备。其中,数据同步方法包括:分别获取源系统的同步计算表以及目标系统的同步计算表;从源系统的同步计算表中查找第一同步位置;若查找第一同步位置成功,则向目标系统的数据表中同步源系统的数据表在第一同步位置以及第一同步位置之后的数据。该方法显著减少全量同步所需的数据量,从而有利于节约传输资源,并降低数据在传输过程中出错的可能性。

Description

数据同步方法及装置、存储介质及电子设备
技术领域
本发明涉及数据处理技术领域,具体而言,涉及一种数据同步方法及装置、存储介质及电子设备。
背景技术
现代软件项目中往往包含多家公司的多个业务系统,系统之间有些数据需要共享,又因系统安全等因素不能共用(共用就是同一份数据被多个不同的系统同时使用),而只能在各个系统上分别存储一份,并设法保证各个系统上存储的数据是一致的。
目前,确保数据一致的方法是数据同步,即将数据从源系统无差别地复制到目标系统上,按数据的同步方式,数据同步又可以分为全量同步、增量同步等。所谓全量同步,现有技术中的做法一般是将源系统中的数据全部传输给目标系统,覆盖目标系统中的原有数据。现有方法的逻辑虽然简单,但由于同步过程可能涉及大量数据传输,因此严重占用传输资源(例如,网络带宽),并且在数据传输过程中也容易发生错误,导致数据同步失败。
发明内容
本申请实施例的目的在于提供一种数据同步方法及装置、存储介质及电子设备,以改善上述技术问题。
为实现上述目的,本申请提供如下技术方案:
第一方面,本申请实施例提供一种数据同步方法,包括:分别获取源系统的同步计算表以及目标系统的同步计算表;其中,业务系统的同步计算表中的每一行记录依次对应该系统的数据表中的每一行数据,所述同步计算表中的每一行记录均对应一个第一哈希值,所述第一哈希值由该行记录对应的第一关联数据经第一哈希算法处理后得到,所述第一关联数据包括与该行记录对应的所述数据表中的数据以及所述同步计算表中该行记录的上一行记录中的第一哈希值;从所述源系统的同步计算表中查找第一同步位置;其中,查找条件包括:所述源系统的同步计算表与所述目标系统的同步计算表在所述第一同步位置处的记录中的第一哈希值不同,并且,所述第一同步位置是所述源系统的同步计算表中满足第一哈希值不同的位置中最靠前的位置;若查找所述第一同步位置成功,则向所述目标系统的数据表中同步所述源系统的数据表在所述第一同步位置以及所述第一同步位置之后的数据。
在上述方法中,业务系统(指源系统和目标系统)的同步计算表是基于业务系统的数据表构建的,同步计算表中的每一行记录依次对应该系统的数据表中的每一行数据,并且同步计算表中的每一行记录均对应一个第一哈希值,第一哈希值由该行记录在数据表中对应的一行数据、以及同步计算表中该行记录的上一行记录中的第一哈希值经哈希运算得到。
根据同步计算表的构建方式以及哈希值的特点可知,两个业务系统的数据表在某一行的数据不同,则两个业务系统的同步计算表在该行以及之后的所有行的第一哈希值均不同;反过来,两个业务系统的同步计算表在某一行的第一哈希值相同,则两个业务系统的数据表在该行以及之前的所有行的第一哈希值均相同。
根据以上性质,在上述方法所查找到的第一同步位置之前,两个业务系统的数据表中的数据是相同的,无需同步;在上述方法所查找到的第一同步位置处,两个业务系统的数据表中的数据是不同的,需要同步;在上述方法所查找到的第一同步位置之后,两个业务系统的数据表中的数据可能相同可能不同,可以直接进行同步,或者执行与数据同步相关的操作进一步判断。
该方法所达到的效果是全量同步,即同步后两个业务系统的数据表中的数据完全一致,并且该方法至少不需要同步两个业务系统的数据表在第一同步位置之前的数据,从而显著减少了全量同步所需的数据量,有利于节约传输资源,并降低数据在传输过程中出错的可能性。
在第一方面的一种实现方式中,在所述分别获取源系统的同步计算表以及目标系统的同步计算表之前,所述方法还包括:从所述目标系统的数据表中删除在所述源系统的数据表中已经被删除、但在所述目标系统数据表中未同步删除的数据,以及,向所述目标系统的数据表中插入在所述源系统的数据表中已经被插入、但在所述目标系统数据表中未同步插入的数据。
数据表的删除和插入操作会改变表的长度,而更新操作则不会改变表的长度,在上述实现方式中,通过对源系统中删除和插入操作的同步,使得源系统和目标系统的数据表变为等长,又由于同步计算表的长度和数据表的长度总是相同,所以此时构建出的源系统和目标系统的同步计算表的长度也相同。对于两个长度相同的同步计算表,在应用特定算法(例如,二分法)查找第一同步位置时会比较容易,不必考虑一些复杂的边界条件。
在第一方面的一种实现方式中,所述业务系统的数据表中的每行数据均包括数据标识,所述从所述目标系统的数据表中删除在所述源系统的数据表中已经被删除、但在所述目标系统数据表中未同步删除的数据,以及,向所述目标系统的数据表中插入在所述源系统的数据表中已经被插入、但在所述目标系统数据表中未同步插入的数据,包括:通过对比所述源系统的数据表以及所述目标系统的数据表中的数据标识,确定由存在于所述目标系统的数据表中、但不存在于所述源系统的数据表中的数据标识构成的第一标识集,以及,确定由存在于所述源系统的数据表中、但不存在于所述目标系统的数据表中的数据标识构成的第二标识集;从所述目标系统的数据表中删除所述第一标识集中的数据标识对应的数据,以及,向所述目标系统的数据表中插入所述第二标识集中的数据标识在所述源系统的数据表中对应的数据。
在上述实现方式中,通过设置数据标识区分不同行的数据,从而可以快速地确定出源系统的数据报表中被删除的数据以及被插入的数据,从而可以高效地实现对源系统中删除和插入操作的同步。
在第一方面的一种实现方式中,所述向所述目标系统的数据表中同步所述源系统的数据表在所述第一同步位置以及所述第一同步位置之后的数据,包括:将所述源系统的数据表在所述第一同步位置处的数据同步至所述目标系统的数据表中;跳转至所述分别获取源系统的同步计算表以及目标系统的同步计算表的步骤重复执行,直至查找所述第一同步位置失败。
在上述实现方式中,在源系统的同步计算表中迭代地查找第一同步位置,并只对第一同步位置处的一行数据进行同步(每次数据同步后目标系统的同步计算表要重新构建)。一般而言,源系统的数据表和目标系统的数据表中不一致的只是个别数据,大量数据都不一致的情况还是很少见的,从而,第一同步位置的数量是很少的,从而可以大幅降低全量同步所需的数据量,节约传输资源,并降低数据在传输过程中出错的可能性。
在第一方面的一种实现方式中,所述将所述源系统的数据表在所述第一同步位置处的数据同步至所述目标系统的数据表中,包括:利用所述源系统的数据表在所述第一同步位置处的数据更新所述目标系统的数据表在所述第一同步位置处的数据。
在上述实现方式中,由于删除和插入操作都已经预先同步,所以只需要同步源系统中的更新操作即可,其同步逻辑非常简单。
在第一方面的一种实现方式中,所述方法还包括:若查找所述第一同步位置失败且所述目标系统的数据表的长度大于所述源系统的数据表的长度,则将所述目标系统的数据表中位于所述源系统的数据表的长度之后的各行数据删除;或者,若查找所述第一同步位置失败且所述目标系统的数据表的长度小于所述源系统的数据表的长度,则将所述源系统的数据表中位于所述目标系统的数据表的长度之后的各行数据插入至所述目标系统的数据表中。
在上述实现方式中,若查找第一同步位置失败,根据第一同步位置的定义,这表明在两个业务系统的数据表中,等长部分的数据是完全一致的,而不等长的部分(其中一个数据表比另一个数据表多出的部分)要么是目标系统未能正确同步删除操作导致的(目标系统的数据表的长度大于源系统的数据表的长度),要么是目标系统未能正确同步插入操作导致的(目标系统的数据表的长度小于源系统的数据表的长度),从而在目标系统的数据表中补充执行删除或插入操作就可以完成数据的全量同步。
在第一方面的一种实现方式中,所述从所述源系统的同步计算表中查找第一同步位置,包括:利用二分法从所述源系统的同步计算表中查找第一同步位置。
利用二分法查找第一同步位置具有较高的效率,并且根据同步计算表中第一哈希值的计算方式,各行记录中的第一哈希值具有链式关系,即,是有序的,从而满足应用二分查找法的条件。
第二方面,本申请实施例提供一种数据同步方法,包括:获取目标系统的操作日志表中最后一行日志的第二哈希值,并从源系统的操作日志表中查找包含的第二哈希值与该第二哈希值匹配的日志所在的第二同步位置;其中,业务系统的操作日志表中的每一行日志对应该系统的数据表中的一行数据,所述操作日志表中的每一行日志均对应一个第二哈希值,所述第二哈希值由该行日志对应的第二关联数据经第二哈希算法处理后得到,所述第二关联数据包括与该行日志对应的所述数据表中的数据以及所述操作日志表中该行日志的上一行日志中的第二哈希值;根据所述第二同步位置从所述源系统的操作日志表中获取变更日志,并向所述目标系统发送所述变更日志;其中,所述变更日志包括所述源系统的操作日志表中位于所述第二同步位置之后的至少一行日志;校验所述目标系统接收到的所述变更日志中每一行日志的第二哈希值,若校验成功,则针对所述目标系统的数据表执行该行日志对应的操作,并将该行日志保存至所述目标系统的操作日志表中。
上述实现方式为数据的增量同步过程,增量同步比全量同步更加高效,数据同步可以直接通过增量同步进行,也可以在全量同步的基础上进行增量同步,还可以在增量同步不成功的情况下再进行全量同步。
增量同步中使用的操作日志表是基于业务系统的数据表构建的,操作日志表中的每一行日志依次对应该系统的数据表中的每一行数据,并且操作日志表中的每一行日志均对应一个第二哈希值,第二哈希值由该行日志在数据表中对应的一行数据、以及操作日志表中该行日志的上一行日志中的第二哈希值经哈希运算得到。
根据操作日志表的构建方式可知,在同步变更日志时,任何一行日志的丢失,都会导致操作日志表中在该行之后的所有行的第二哈希值发生变化;或者,任何一行日志在数据表中对应的数据发生变更(相较于日志被记录时),都会导致操作日志表中该行日志的第二哈希值、以及在该行之后的所有行的第二哈希值发生变化。
根据以上性质,可以校验目标系统接收到的变更日志中每一行日志的第二哈希值,以确保目标系统接收到的变更日志是完整的,且变更日志对应的变更数据和源系统在执行变更日志中的操作时所处理的数据是一致的,即保证增量同步的结果正确无误。
在第二方面的一种实现方式中,所述方法还包括:若所述变更日志中任一行日志的第二哈希值校验失败,则执行本申请实施例提出的全量同步方法。
在上述实现方式中,若增量同步失败,可以进行全量同步,以确保数据的一致性。
在第二方面的一种实现方式中,所述校验所述变更日志中每一行日志的第二哈希值,包括:从所述源系统的数据表或所述目标系统的数据表中,获取执行所述变更日志中每一行日志所需的变更数据;利用所述变更数据校验所述变更日志中每一行日志的第二哈希值。
在第二方面的一种实现方式中,若所述变更日志中的一行日志对应的操作为删除,则从所述目标系统的数据表中获取该行日志对应的变更数据,若所述变更日志中的一行日志对应的操作为插入或更新,则从所述源系统的数据表中获取该行日志对应的变更数据。
在以上两种实现方式中,变更数据可能来源于源系统的数据表(如变更为插入或更新的情况),也有可能来源于目标系统的数据表(如变更为删除的情况),可以灵活处理。进一步的,如果变更数据来源于源系统的数据表,变更数据也可以在源系统向目标系统发送变更日志时一同发送,避免目标系统在每次校验时都向源系统请求变更数据,从而简化处理逻辑。
第三方面,本申请实施例提供一种数据同步装置,包括:同步计算表获取模块,用于分别获取源系统的同步计算表以及目标系统的同步计算表;其中,业务系统的同步计算表中的每一行记录依次对应该系统的数据表中的每一行数据,所述同步计算表中的每一行记录均对应一个第一哈希值,所述第一哈希值由该行记录对应的第一关联数据经第一哈希算法处理后得到,所述第一关联数据包括与该行记录对应的所述数据表中的数据以及所述同步计算表中该行记录的上一行记录中的第一哈希值;第一同步位置确定模块,用于从所述源系统的同步计算表中查找第一同步位置;其中,查找条件包括:所述源系统的同步计算表与所述目标系统的同步计算表在所述第一同步位置处的记录中的第一哈希值不同,并且,所述第一同步位置是所述源系统的同步计算表中满足第一哈希值不同的位置中最靠前的位置;数据同步模块,用于在查找所述第一同步位置成功时,向所述目标系统的数据表中同步所述源系统的数据表在所述第一同步位置以及所述第一同步位置之后的数据。
第四方面,本申请实施例提供一种数据同步装置,其特征在于,包括:第二同步位置确定模块,用于获取目标系统的操作日志表中最后一行日志的第二哈希值,并从源系统的操作日志表中查找包含的第二哈希值与该第二哈希值匹配的日志所在的第二同步位置;其中,业务系统的操作日志表中的每一行日志对应该系统的数据表中的一行数据,所述操作日志表中的每一行日志均对应一个第二哈希值,所述第二哈希值由该行日志对应的第二关联数据经第二哈希算法处理后得到,所述第二关联数据包括与该行日志对应的所述数据表中的数据以及所述操作日志表中该行日志的上一行日志中的第二哈希值;变更日志发送模块,用于根据所述第二同步位置从所述源系统的操作日志表中获取变更日志,并向所述目标系统发送所述变更日志;其中,所述变更日志包括所述源系统的操作日志表中位于所述第二同步位置之后的至少一行日志;操作执行模块,用于校验所述目标系统接收到的所述变更日志中每一行日志的第二哈希值,在校验成功时,针对所述目标系统的数据表执行该行日志对应的操作,并将该行日志保存至所述目标系统的操作日志表中。
第五方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被处理器读取并运行时,执行第一方面、第二方面或这两方面的任意一种可能的实现方式提供的方法。
第六方面,本申请实施例提供一种电子设备,包括:存储器以及处理器,所述存储器中存储有计算机程序指令,所述计算机程序指令被所述处理器读取并运行时,执行第一方面、第二方面或这两方面的任意一种可能的实现方式提供的方法。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例提供的数据同步方法中可能涉及的表;
图2示出了本申请实施例提供的数据同步方法中的全量同步流程;
图3示出了全量同步流程的一种具体实现;
图4示出了本申请实施例提供的数据同步方法中的增量同步流程;
图5示出了增量同步流程的一种具体实现;
图6示出了本申请实施例提供的数据同步装置的一种可能的结构;
图7示出了本申请实施例提供的数据同步装置的一种可能的结构;
图8示出了本申请实施例提供的电子设备的一种可能的结构。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
术语“第一”、“第二”等仅用于将一个实体或者操作与另一个实体或操作区分开来,而不能理解为指示或暗示相对重要性,也不能理解为要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
在本申请实施例提供的介绍数据同步方法之前,首先介绍该方法中涉及的一些概念,便于理解本申请的方案。
(1)源系统、目标系统:源系统和目标系统是数据同步行为所涉及的两端,“系统”在这里仅仅是泛指一个软件(或硬件)实体,其可以是一个由众多软件(或硬件)模块组成的软件(或硬件)系统,也可以只是一个软件(或硬件)模块。后文中有时为简单起见,也将源系统和目标系统都统称为业务系统。
源系统上存储的数据为基准数据,目标系统上存储的数据是基准数据的一个副本,在理想情况下,如果初始时将源系统中的数据无差别地复制到目标系统中,并且在系统的运行过程中,总是对源系统和目标系统中的数据同时执行相同的操作,则目标系统上存储的数据和源系统上存储的数据总是一致的。但在实际系统中,特别是数据量较大时,由于各种异常因素的影响,目标系统上存储的数据和源系统上存储的数据很可能会存在差异,这导致在目标系统和源系统上对数据执行相同的操作可能会产生不一致的结果,因此需要将源系统中的数据同步到目标系统中,维持两个系统在数据上的一致性。
(2)中间系统:中间系统是除源系统和目标系统之外的第三方系统。本申请实施例提供的数据同步方法在部署上十分灵活,可能由源系统、目标系统、中间系统中的任意一个或几个系统执行。当然,为确保方法的正常执行,各系统之间应当提供必要的数据访问许可。例如,若在中间系统上查找第一同步位置(详见步骤S120),中间系统应当能够访问源系统的同步计算表。中间系统不是必需的,一些实现方式中可以不使用中间系统。
(3)全量同步:一种使得目标系统上存储的数据和源系统上存储的数据完全一致的同步方式。
需要指出,全量同步是从数据同步的效果上定义的,全量同步并不代表着数据的全量传输。虽然在现有技术中,一般是通过将源系统中的数据全量传输给目标系统、覆盖目标系统中的原有数据来实现全量同步,但本申请的方案舍弃了这一做法。
(4)增量同步:本申请的方案所涉及的主要是基于操作日志的增量同步。导致源系统和目标系统上数据不一致的根本原因是数据的变更,而导数数据变更的行为可称为针对数据的操作(例如,数据的插入、删除、更新)。
在源系统上执行数据操作时,可以利用日志记录操作信息,在数据同步时,源系统只需将两次增量同步的间隔期间记录的日志传输给目标系统,目标系统收到后执行一遍日志中的操作。假设在本次增量同步之前,源系统和目标系统上存储的数据是一致的,并且日志的同步过程也没有出错,那么在本次增量同步之后,由于源系统和目标系统对相同的数据执行了相同的操作,所以源系统和目标系统上存储的数据还是一致的。
上述日志对应源系统中数据的变更,即数据的“增量”,因此此种同步方式相当于只是将源系统中的数据“增量”同步给目标系统,其他数据则维持不变,故可称为增量同步。增量同步的效率往往高于全量同步,且不说现有技术中低效的全量同步方式,即使是本申请的方案所提出的全量同步方式,构建同步计算表(稍后介绍)仍然是一项比较耗时的行为,而对于绝大多数场景,在两次增量同步的间隔期间,数据的变更十分有限,不会产生太多的日志,因此在操作日志表(稍后介绍)中记录这些日志并不会消耗太多的时间。
然而,增量同步亦有其局限性,上述假设(在本次增量同步之前,源系统和目标系统上存储的数据一致),并不是由增量同步来进行校验,增量同步只是负责同步日志并执行日志中的操作,从而增量同步也并不保证执行完日志操作后源系统和目标系统上存储的数据完全一致。增量同步可以和全量同步结合使用,例如先通过全量同步使得上述假设成立,再执行增量同步,这样在增量同步完成后可以保证源系统和目标系统上存储的数据完全一致。
(5)数据表:用于存储业务系统的数据的一种数据结构,数据表可以但并不一定是指数据库中的表。源系统和目标系统各对应一个数据表,为简单起见,不妨以源系统和目标系统的数据表结构完全相同的情况为例。
数据表可以包括多行,每一行是一条数据,同时数据表也可以包括多列,每一列是一个字段,数据表的字段在表创建好以后通常是固定的,而表中的数据则可能会增加或者减少。
参照图1,图1最上方的矩形示出一个名为TABLE_DATA的数据表。《column》表示数据表的字段声明,这里声明了4个字段:字段id,数据类型为BIGNINT;字段field1,数据类型为VARCHAR(50);字段field2,数据类型为VARCHAR(50);字段field3,数据类型为VARCHAR(50)。其中,字段id的值可以是一个数据标识,不同行的数据id不同,从而可以进行区分。
(6)同步计算表:用于支持数据全量同步的一种数据结构,同步计算表可以但并不一定是指数据库中的表。源系统和目标系统各对应一个同步计算表。为简单起见,不妨以源系统和目标系统的同步计算表结构完全相同的情况为例。
同步计算表可以包括多行,每一行是一条记录,同时同步计算表也可以包括多列,每一列是一个字段。某个业务系统的同步计算表中的每一行记录依次对应该系统的数据表中的每一行数据,并且,同步计算表中的每一行记录均包括一个第一哈希值。第一哈希值由该行记录对应的第一关联数据经第一哈希算法计算后得到,第一关联数据包括:与该行记录对应的数据表中的数据,以及,同步计算表中该行记录的上一行记录中的第一哈希值。特别地,对于同步计算表中的第一行记录,由于其没有上一行记录,所以上一行记录中的第一哈希值可以取固定值,例如一个空字串。在一些替代方案中,第一哈希值也可以单独存储,不保存在同步计算表中,同时保存第一哈希值和记录的对应关系即可,在后文中主要以第一哈希值保存在同步计算表中的情况为例。
通过以上定义可知,同一业务系统的同步计算表和数据表长度总是相同的。
在本申请的方案中,第一哈希算法可以选择碰撞率较低的哈希算法,所谓碰撞率较低,简单来说,就是使得两条不同的数据(这里泛指参与哈希运算的数据,不仅仅是数据表中的数据)经哈希运算后得到的哈希值基本不同(相同的概率小到可以忽略),从而哈希值和数据基本上具有一一对应关系,或者说具有唯一性。例如,第一哈希算法可以采用MD5、SHA-1等算法,后文主要以MD5为例。
不难看出,在同步计算表中,各行记录通过第一哈希值形成了一个链条。数据表中任何一行数据的变更,不仅会导致同步计算表中对应行记录的第一哈希值发生变化,还会导致同步计算表中在该行之后的所有行的第一哈希值都发生变化。
继续参照图1,图1中间的矩形示出一个名为TABLE_SYNC_CHAIN的同步计算表。《column》表示同步计算表的字段声明,这里声明了3个字段:字段id,数据类型为BIGNINT;字段id_data,数据类型为BIGINT;字段hash1,数据类型为VARCHAR(50)。
其中,字段id的值可以是一个数据标识,不同行的记录id不同,可以进行区分。字段id_data的值满足约束条件:
TABLE_SYNC_CHAIN.id_data=TABLE_DATA.id
即通过id_data体现了TABLE_SYNC_CHAIN的行和TABLE_DATA的行之间的一一对应关系。如果TABLE_SYNC_CHAIN是数据库表,则该项约束可以在创建TABLE_SYNC_CHAIN时一并创建。字段hash1即第一哈希值字段,其计算方式可以表示如下:
TABLE_SYNC_CHAIN.hash1=
md5(TABLE_DATA.id+TABLE_DATA.field1+TABLE_DATA.field2+TABLE_DATA.field3+last_row.hash1)
其中,last_row.hash1表示同步计算表中本行记录的上一行记录的第一哈希值。
(7)操作日志表:用于支持数据增量同步的一种数据结构,操作日志表可以但并不一定是指数据库中的表。操作日志表最初由源系统构建,用于记录源系统中的操作日志,但可在增量同步的过程中被同步至目标系统,从而目标系统上也会存储一个操作日志表。为简单起见,不妨以源系统和目标系统的操作日志表结构完全相同的情况为例。
操作日志表可以包括多行,每一行是一条日志,同时操作日志表也可以包括多列,每一列是一个字段。某个业务系统的操作日志表中的每一行日志对应该系统的数据表中的一行数据,并且,操作日志表中的每一行日志均包括一个第二哈希值,第二哈希值由该行日志对应的第二关联数据经第二哈希算法计算后得到,第二关联数据包括:与该行日志对应的数据表中的数据,以及,操作日志表中该行日志的上一行日志中的第二哈希值。特别地,对于操作日志表中的第一行日志,由于其没有上一行日志,所以上一行记录中的第二哈希值可以取固定值,例如一个空字串。在一些替代方案中,第二哈希值也可以单独存储,不保存在操作日志表中,同时保存第二哈希值和日志的对应关系即可,在后文中主要以第二哈希值保存在操作日志表中的情况为例。另外需要指出,若第二哈希值单独保存,在同步变更日志(详见后文阐述)时,第二哈希值也要进行同步。
通过以上定义可知,业务系统的操作日志表的长度和数据表中所执行过的操作数量相同,但与数据表的长度没有必然关系。
在本申请的方案中,第二哈希算法可以选择碰撞率较低的哈希算法,例如,第二哈希算法可以采用MD5、SHA-1等算法,后文主要以MD5为例。需要指出,第一哈希算法和第二哈希算法没有必然关系,可以采用相同的算法,也可以采用不同的算法。
不难看出,在操作日志表中,各行日志通过第二哈希值形成了一个链条。任何一行日志的丢失,都会导致操作日志表中在该行之后的所有行的第二哈希值都发生变化;或者,任何一行日志在数据表中对应的数据发生变更(相较于日志被记录时),都会导致操作日志表中该行日志的第二哈希值、以及在该行之后的所有行的第二哈希值发生变化。
继续参照图1,图1最下方的矩形示出一个名为TABLE_CHANGE_LOG的操作日志表。《column》表示操作日志表的字段声明,这里声明了4个字段:字段id,数据类型为BIGNINT;字段id_data,数据类型为BIGINT;字段change_type,数据类型为VARCHAR(50);字段hash2,数据类型为VARCHAR(50)。
其中,字段id的值可以是一个数据标识,不同行的记录id不同,可以进行区分。字段id_data的值满足约束条件:
TABLE_CHANGE_LOG.id_data=TABLE_DATA.id
即通过id_data体现了TABLE_CHANGE_LOG的行和TABLE_DATA的行之间的对应关系。如果TABLE_CHANGE_LOG是数据库表,则该项约束可以在创建TABLE_CHANGE_LOG时一并创建。字段change_type表示日志的操作类型,例如,可以为插入、删除或更新等,具体的约束关系为:
TABLE_CHANGE_LOG.change_type=I|D|U
其中,I表示插入、D表示删除、U表示更新。字段hash2即第二哈希值字段,其计算方式可以表示如下:
TABLE_CHANGE_LOG.hash2=
md5(TABLE_DATA.id+TABLE_DATA.field1+TABLE_DATA.field2+TABLE_DATA.field3+last_row.hash2)
其中,last_row.hash2表示操作日志表中本行记录的上一行记录的第二哈希值。
是否要使用操作日志表是可选的,如果源系统和目标系统之间只进行全量同步,不进行增量同步,则可以不实现操作日志表。
针对数据表、同步计算表以及操作日志表,本申请的方案并不限定这些表何时创建,原则上只要在使用这些表之前进行创建即可。在本申请的方案中,表的“创建”和“构建”表达不同的含义,创建是根据表的定义生成一个表的对象,而“构建”是指填充表中的数据,“构建”可能包含“创建”过程也可能不包括。例如,同步计算表在业务系统启动时就已经创建好了,但在进行全量同步时才根据业务系统的数据表进行构建。
图2示出了本申请实施例提供的数据同步方法中的全量同步流程。从设备层面上讲,该全量同步流程可以但不限于由图8示出的电子设备执行;从系统层面上讲,该全量同步流程可以由源系统、目标系统、中间系统中的任意一个系统执行,或者由其中的几个系统配合执行。参照图2,该流程包括:
步骤S110:分别获取源系统的同步计算表以及目标系统的同步计算表。
步骤S110可以认为是开始执行全量同步的标志。全量同步存在不同的执行时机,例如,定期执行、增量同步失败时执行,等等。需要指出,对于目标系统首次同步源系统的数据(此时目标系统的数据表为空甚至根本没有创建),可以采用现有技术中的全量同步方法,即全量传输数据,在这之后进行的全量同步则可以采用本申请新提出的方法,因为首次同步数据本来就应当进行全量传输,本申请新提出的方法优势不大。
根据实现方式的不同,步骤S110中的“获取”存在不同的解释,例如:
解释1:源系统和目标系统分别构建各自的同步计算表,目标系统将自己的同步计算表发送给源系统,从而源系统获取到了两个同步计算表,由源系统执行步骤S120中第一同步位置的查找。
解释2:源系统和目标系统分别构建各自的同步计算表,源系统将自己的同步计算表发送给目标系统,从而目标系统获取到了两个同步计算表,由目标系统执行步骤S120中第一同步位置的查找。
解释3:源系统和目标系统分别构建各自的同步计算表,源系统和目标系统分别将自己的同步计算表发送给中间系统,从而中间系统获取到了两个同步计算表,由中间系统执行步骤S120中第一同步位置的查找。
关于同步计算表的结构,前文已经介绍,在已知其结构的情况下,基于业务系统的数据表构建相应的同步计算表是容易的。关于构建同步计算表的时机也存在不同的可能:例如,开始执行全量同步时才临时进行构建(非实时构建);又例如,每当业务系统的数据表中的数据发生变化就进行构建(实时构建),等等。考虑到同步计算表中记录的行数和数据表中数据的行数相同,并且同步计算表的构建涉及大量的哈希运算,采用非实时构建更有利于节约计算资源。
此外不难看出,随着步骤执行主体(源系统、目标系统、中间系统等)的不同,步骤S110在实现上也存在一定的区别,对于数据同步方法的其他步骤,也存在类似的情况,为简化阐述,在介绍图2和图4中的流程时,一般不强调各步骤的执行主体,也不再详细说明在采用不同执行主体时各步骤在实现上的细微差别。在介绍图3和图5中的流程时,则会赋予每个步骤一个执行主体,从而也可以将图3中的流程视为图2中的流程在执行主体具体化后得到的一个实施例,以及,将图5中的流程视为图4中的流程在执行主体具体化后得到的一个实施例。
步骤S120:从源系统的同步计算表中查找第一同步位置。
步骤S130:若查找第一同步位置成功,则向目标系统的数据表中同步源系统的数据表在第一同步位置以及第一同步位置之后的数据。
以上两个步骤合在一起进行阐述。第一同步位置是指源系统的同步计算表中的某一行所在的位置,当然第一同步位置也可以对应到目标系统的同步计算表、源系统的数据表以及目标系统的数据表中。
步骤S120中的查找条件包括:源系统的同步计算表与目标系统的同步计算表在第一同步位置处的记录中的第一哈希值不同,并且,第一同步位置是源系统的同步计算表中满足第一哈希值不同的位置中最靠前的位置。显然,通过对比源系统和目标系统的同步计算表可以实现步骤S120中的查找。
根据第一哈希值的计算方式及其具有的唯一性可知,两个业务系统的数据表在某一行的数据不同,则两个业务系统的同步计算表在该行以及之后的所有行的第一哈希值均不同;反过来,两个业务系统的同步计算表在某一行的第一哈希值相同,则两个业务系统的数据表在该行以及之前的所有行的第一哈希值均相同。
根据以上性质,若步骤S120中能查找到第一同步位置,则在第一同步位置之前,两个业务系统的数据表中的数据是相同的,无需同步;在第一同步位置处,两个业务系统的数据表中的数据是不同的,需要同步;在第一同步位置之后,两个业务系统的数据表中的数据可能相同可能不同,也需要进行同步。特别地,如两个业务系统的数据表长度相同,且第一同步位置恰好是数据表的最后一行所在的位置,则无需再执行第一同步位置之后的同步。
应当理解,在第一同步位置之后执行的“同步”和在第一同步位置处执行的“同步”在含义上有所不同:在第一同步位置之后执行的“同步”是指执行数据同步的相关操作,但并不一定会真的同步数据,可能会同步数据,也可能不会,视实现方式和相关操作的结果而定,比如,通过执行某种操作确认了两个业务系统的数据表在第一同步位置之后的数据已经是一致的,就无需再同步数据;而在第一同步位置处执行的“同步”则必然会同步数据,在步骤S130中,未详细描述这两种情况的区别。
其中,在第一同步位置处执行的同步可以但不限于采用下面的做法之一:
方式(a):直接将源系统的数据表在第一同步位置处的数据传输给目标系统,覆盖目标系统的数据表在第一同步位置处的数据。
方式(a)一定能保证同步后,两个业务系统的数据表在第一同步位置处的数据具有一致性,但未必能改善后续数据不一致性。比如,源系统的数据表在第一同步位置处删除了一行数据,但目标系统的数据表在第一同步位置处未删除该行数据的情况,导致两个数据表从第一同步位置开始的数据“错位”了,方式(a)并不能消除这种“错位”。
方式(b):将源系统的数据表在第一同步位置处执行过的操作传输给目标系统,使得目标系统针对目标系统的数据表也执行该操作。
其中,源系统的数据表在第一同步位置处执行过的操作可以查询源系统的操作日志得到(例如,从操作日志表中查询)。仍然针对方式(a)中的例子,将删除操作同步给目标系统后,目标系统也删除数据表中位于第一同步位置处的一行数据,消除了两个数据表之间的“错位”现象。
在第一同步位置之后执行的同步可以但不限于采用下面的做法之一:
方式(A):直接将源系统的数据表在第一同步位置之后的数据都传输给目标系统,覆盖目标系统的数据表在第一同步位置之后的数据。
方式(A)虽然可能涉及较多的数据传输,但至少不需要传输两个业务系统的数据表在第一同步位置之前的数据,因此相较于现有技术中的全量同步仍有改进。此外,方式(A)还可以和上面的方式(a)合并在一起执行。
方式(B):跳转至步骤S110重复执行,直至查找第一同步位置失败。
注意,在重复执行步骤S110时,由于目标系统已经同步了源系统在第一同步位置处的数据,即目标系统的数据表发生了变更,因此目标系统的同步计算表需要重新构建。重新构建的方式既可以是全表重新构建,也可以从第一同步位置处开始构建,因为目标系统的同步计算表在第一同步位置之前部分的第一哈希值和源系统的同步计算表相同,因此可以不重新构建,以节约运算量。
在方式(B)中,在源系统的同步计算表中迭代地查找第一同步位置,并只对每次查找到的第一同步位置处的一行数据进行同步,直至无法找到第一同步位置而终止迭代。一般而言,源系统的数据表和目标系统的数据表中不一致的只是个别数据,大量数据都不一致的情况还是很少见的,从而,迭代过程中找到的第一同步位置的数量是很少的,因此可以大幅降低全量同步所需的数据量。
显然,方式(A)是真的同步了数据,而方式(B)则可能会同步数据也可能不会,但不论在第一同步位置之后执行的同步操作是否真的同步了数据,步骤S130在执行后都使得两个业务系统的数据表在第一同步位置及其之后的数据是完全一致的。
从而,本申请实施例提供的全量同步流程可以使同步后两个业务系统的数据表中的数据完全一致,并且此种全量同步方式至少不需要同步两个业务系统的数据表在第一同步位置之前的数据,从而显著减少了全量同步所需的数据量,有利于节约传输资源,并降低数据在传输过程中出错的可能性。
上面只讨论了查找第一同步位置成功的情况,若查找第一同步位置失败(可以是首次查找即失败或者是在迭代查找的过程中失败),则可以采取以下做法:
若目标系统的数据表的长度大于源系统的数据表的长度,则将目标系统的数据表中位于源系统的数据表的长度之后的各行数据删除;或者,若目标系统的数据表的长度小于源系统的数据表的长度,则将源系统的数据表中位于目标系统的数据表的长度之后的各行数据插入至目标系统的数据表中。当然,若两个数据表的长度相同,此时全量同步的流程就可以结束了。
上述做法的原理是:数据的操作可以分为三种,即插入、删除以及更新。若查找第一同步位置失败,根据第一同步位置的定义,这表明在两个业务系统的数据表中,等长部分的数据是完全一致的,而不等长的部分(其中一个数据表比另一个数据表多出的部分)要么是目标系统未能正确同步删除操作导致的(由于未能正确删除数据,使得目标系统的数据表的长度大于源系统的数据表的长度),要么是目标系统未能正确同步插入操作导致的(由于未能正确插入数据,使得目标系统的数据表的长度小于源系统的数据表的长度),从而在目标系统的数据表中补充执行删除或插入操作就可以完成数据的全量同步。
进一步的,在一些实现方式中,步骤S120中的查找第一同步位置可以采用二分法,利用二分法查找第一同步位置具有较高的效率,并且根据同步计算表中第一哈希值的计算方式,各行记录中的第一哈希值具有链式关系,即,是有序的,从而满足应用二分查找法的条件。
下面以两个业务系统的数据表长度相等(数据表长度相等,则同步计算表的长度也相等)的情况为例,给出二分法的伪代码实现:
初始化:
pointer=L(S(TABLE_SYNC_CHAIN))-1
pointer_to=pointer;
pointer_from=0;
步骤1:如果满足MD5(S(TABLE_SYNC_CHAIN))(pointer)==MD5(T(TABLE_SYNC_CHAIN))(pointer)则进行步骤2,否则若满足pointer!=L(S(TABLE_SYNC_CHAIN))-1,则执行步骤3,否则查找结束。
步骤2:
pointer_from=pointer;
pointer=ceil((pointer_from+pointer_to)/2);
如果满足pointer==pointer_to则pointer就指向第一同步位置,查找结束,否则执行步骤1。
步骤3:
pointer_to=pointer;
pointer=floor((pointer_from+pointer_to)/2);
如果pointer==pointer_from则pointer就指向第一同步位置,查找结束,否则执行步骤1。
其中,S表示源系统,S(TABLE_SYNC_CHAIN)表示源系统的同步计算表,T表示目标系统,T(TABLE_SYNC_CHAIN)表示目标系统的同步计算表,L(·)表示求表长的函数,MD5(·)表表示求MD5值(第一哈希值)的函数,pointer、pointer_from、pointer_to都是二分法中使用的指针,可指向TABLE_SYNC_CHAIN中的记录,ceil和floor分别是上取整函数和下取整函数。
若两个业务系统的数据表长度不相等,也可以应用二分查找法,但会面临一些比较复杂的边界情况。为解决这一问题,可以先将两个业务系统的数据表处理为等长,再进行二分查找,不妨称这一过程为预同步。
若对数据的操作包括插入、删除以及更新,则在一些实现方式中,预同步可以采取这样的做法:从目标系统的数据表中删除在源系统的数据表中已经被删除、但在目标系统数据表中未同步删除的数据,以及,向目标系统的数据表中插入在源系统的数据表中已经被插入、但在目标系统数据表中未同步插入的数据。
例如,对于每一行数据均包含有数据标识的情况(数据标识是指可以唯一区分一行数据的信息,比如图2中TABLE_DATA中的id字段),可以首先对比源系统的数据表以及目标系统的数据表中的数据标识,确定由存在于目标系统的数据表中、但不存在于源系统的数据表中的数据标识构成的第一标识集,以及,确定由存在于源系统的数据表中、但不存在于目标系统的数据表中的数据标识构成的第二标识集,然后从目标系统的数据表中删除第一标识集中的数据标识对应的数据,以及,向目标系统的数据表中插入第二标识集中的数据标识在源系统的数据表中对应的数据。
其中,数据表中的数据标识可以设置成有序的,比如递增的,这样利用第二标识集对目标系统的数据表进行数据插入时,就很容易找到数据的插入位置。
预同步的原理在于:数据表的删除和插入操作会改变表的长度,而更新操作则不会改变表的长度,因此通过对源系统中删除和插入操作的同步,可以使得源系统和目标系统的数据表变为等长,又由于同步计算表的长度和数据表的长度总是相同,所以此时构建出的源系统和目标系统的同步计算表的长度也相同,因此可以应用上面给出的二分查找法,不必考虑过多的边界条件。
进一步的,若预先同步了删除和插入操作,则只剩下更新操作需要同步,从而在找到第一同步位置后,只需利用源系统的数据表在第一同步位置处的数据更新目标系统的数据表在第一同步位置处的数据即可,其同步逻辑简单,不用考虑更复杂的情况(例如,前面方式(a)和(b)中提到的数据删除的例子)。这里所说的“更新”,可以采用整行覆盖的方式,也可以采用先字段对比,仅覆盖存在差异的字段的方式,等等。
图3示出了全量同步流程的一种具体实现。参照图3,该流程包括:
步骤S201:目标系统向源系统发送全量同步请求,其中携带有目标系统的数据表中的数据标识。
步骤S202:源系统通过对比源系统的数据表和目标系统的数据表中的数据标识,确定第一标识集和第二标识集。
步骤S203:源系统向目标系统发送第一标识集、第二标识集以及第二标识集在源系统的数据表中对应的数据。
步骤S204:目标系统从目标系统的数据表中删除第一标识集对应的数据。
步骤S205:目标系统向目标系统的数据表中插入第二标识集在源系统的数据表中对应的数据。
步骤S206:源系统构建源系统的同步计算表。
步骤S207:目标系统构建目标系统的同步计算表。
步骤S208:目标系统向源系统发送目标系统的同步计算表。
步骤S209:源系统从源系统的同步计算表中查找第一同步位置。
步骤S210:源系统向目标系统发送源系统的数据表在第一同步位置的数据。
步骤S211:目标系统利用源系统的数据表在第一同步位置的数据更新目标系统的数据表在第一同步位置的数据。
在步骤S201中,应目标系统的请求,源系统开始进行全量同步。步骤S202至步骤S205对应前文的预同步过程,步骤S206至S211对应前文的步骤S110至S130,其具体实现方式及有益效果可以参考前文内容,这里只对一些细节作简单解释。步骤S206和S207步骤的执行顺序不限,可以先后执行,也可以并行执行。在图3的方法中,是由源系统查找第一同步位置,所以在步骤S208中,目标系统会将自身的同步计算表发送给源系统。对于步骤S209,若查找第一同步位置成功,则执行步骤S210,否则可以参照前文的处理方式。对于步骤S211,由于经过了预同步,所以只需考虑数据更新的情况,删除和插入不用再考虑。步骤S209至步骤S211是一个迭代过程,该过程直至在查找第一同步位置失败时才会结束。
图4示出了本申请实施例提供的数据同步方法中的增量同步流程。从设备层面上讲,该增量同步流程可以但不限于由图8示出的电子设备执行;从系统层面上讲,该增量同步流程可以由源系统、目标系统、中间系统中的任意一个系统执行,或者由其中的几个系统配合执行。
增量同步可以和全量同步结合使用以兼顾同步效率和同步质量,例如先执行一次全量同步,再执行若干次增量同步,再执行一次全量同步(定期或者满足某些触发条件时执行),如此往复。当然,也不排除数据同步直接通过增量同步进行。
参照图4,增量同步流程包括:
步骤S310:获取目标系统的操作日志表中最后一行日志的第二哈希值,并从源系统的操作日志表中查找包含的第二哈希值与该第二哈希值匹配的日志所在的第二同步位置。
关于操作日志表的结构,前文已经介绍,在已知其结构的情况下,基于源系统的数据表以及具体的操作构建相应的操作日志表是容易的,至于目标系统上的操作日志表是从源系统上同步过去的,目标系统并不会主动构建操作日志表。源系统可以实时地构建操作日志表,即每当有针对一行数据的操作时,就产生一行对应的日志,并将该行日志插入到操作日志表中。多数情况下,对数据表中数据的操作不会过于频繁,操作涉及的数据也不会太多,所以对于操作日志表而言,实时构建是可以接受的。
根据第二哈希值的计算方式可知,第二哈希值和日志之间基本是唯一对应的关系,从而目标系统的操作日志表中最后一行日志的第二哈希值就代表了目标系统的操作日志表中最后一行日志,即在目标系统中,目前对数据的操作执行到了哪个阶段。显然,正常情况下源系统中对数据执行的操作只会比目标系统更多,不会比目标系统更少,因此从源系统的操作日志表中查找到该第二哈希值所在的位置,即第二同步位置,也就是确定了本次增量同步的起点,在第二同步位置及其之前的操作,源系统和目标系统都已经同步执行,在第二同步位置之后的操作,仅在源系统上执行,在目标系统上尚未执行。
从源系统的操作日志表中查找第二同步位置可以采用顺序查找、二分查找等方式,其中,二分查找的原理可以参考前文。
若无法查找到第二同步位置,则可能是源系统或目标系统的操作日志表中出现了异常状况,此时无法进行增量同步,可以进行全量同步,方法如前所述。此外,若首次进行增量同步,由于此时目标系统的操作日志表为空甚至尚未创建,所以也不存在最后一行日志的第二哈希值,可以用特殊的字串代替第二哈希值,或者采取其他的例外处理方式。
步骤S320:根据第二同步位置从源系统的操作日志表中获取变更日志,并向目标系统发送变更日志。
其中,变更日志包括源系统的操作日志表中位于第二同步位置之后的至少一行日志。至于变更日志要包括几行日志,取决于增量同步的需求:例如,可以是源操作日志表中位于第二同步位置之后的所有日志;又例如,可以是源操作日志表中位于第二同步位置之后的固定行数的日志(如果不足固定行数,有多少行取多少行),等等。变更日志需要由源系统发送给目标系统,因为若变更日志验证成功,会被追加到目标系统的操作日志表中。
步骤S330:校验目标系统接收到的变更日志中每一行日志的第二哈希值,若校验成功,则针对目标系统的数据表执行该行日志对应的操作,并将该行日志保存至目标系统的操作日志表中。
以变更日志中任意一行(不妨称为当前行)日志的第二哈希值校验为例,校验过程具体可以包括以下步骤:
步骤1:获取当前行日志对应的变更数据。所谓变更数据,就是指当前行日志所操作的数据,例如所删除的数据、所插入的数据、所更新的数据(指更新后的)。变更数据可能从源系统的数据表中获取,也可能从目标系统的数据表中获取:例如,对于插入和更新操作,所插入的数据和所更新的数据都保存在源系统的数据表中,从而可以从源系统的数据表中获取变更数据;又例如,对于删除操作,由于所删除的数据已经不存在于源系统的数据表中,因此可以从目标系统的数据表中获取变更数据,因为此时该行数据尚未在目标系统的数据表中删除。特别地,在源系统中,若对数据表中的同一行数据执行了多次操作,则每次操作之后该行数据的副本都要保存,以支持第二哈希值的校验。在每一行日志中可以设置字段,例如图1的change_type字段,用于标明其对应的操作。
进一步的,假设由目标系统或中间系统执行第二哈希值的校验,并且变更数据需要从源系统的数据表中获取,则可以在校验当前行日志时向源系统请求对应的变更数据,但这样在校验整个变更日志的过程中目标系统或中间系统可能会向源系统发送多个数据请求。从而,在一种替代方法中,变更数据也可以在源系统向目标系统发送变更日志时一同发送,避免目标系统在每次校验时都向源系统请求变更数据,从而简化处理逻辑。
步骤2:获取目标系统的操作日志表中的最后一行日志(这行日志可能是本次增量同步之前就保存在目标系统的操作日志表中的,也可能是变更日志中当前行的上一行日志在校验成功后被保存到了目标系统的操作日志表中)的第二哈希值。
步骤3:根据步骤1中获取到的变更数据以及步骤2中获取到的第二哈希值构成第二关联数据,并基于第二关联数据,利用第二哈希算法计算出一个临时哈希值。
步骤4:判断步骤3中获得的临时哈希值与当前行日志中的第二哈希值是否相同,相同则当前行日志校验成功,否则不成功。
若校验成功,则针对目标系统的数据表执行该行日志对应的操作,并将该行日志保存至目标系统的操作日志表中(表的尾部)。如果该行日志对应的是插入或更新操作,则由于在进行校验时相应的变更数据已经从源系统的数据表中获取,无需再重复获取。
若校验成功,且变更日志还有剩余,则继续按照以上步骤校验下一行日志,若变更日志没有剩余,则本次增量同步结束。若变更日志中的任意一行校验失败,则可以进行全量同步,方法如前所述,当然也可以进行增量同步的重试等。其中,全量同步不依赖于操作日志表,从而可以避免因操作日志表中存在的错误所导致的问题。
根据操作日志表的构建方式可知,在同步变更日志时,任何一行日志的丢失,都会导致操作日志表中在该行之后的所有行的第二哈希值发生变化;或者,任何一行日志在数据表中对应的数据发生变更(相较于日志被记录时),都会导致操作日志表中该行日志的第二哈希值、以及在该行之后的所有行的第二哈希值发生变化。上述变化均可以通过第二哈希值的校验被发现,并及时终止增量同步过程,从而可以确保目标系统接收到的变更日志是完整的,且变更日志对应的变更数据和源系统在执行变更日志中的操作时所处理的数据是一致的,这样目标系统在执行变更日志的操作后,其数据表才能和源系统中的数据表保持一致。
图5示出了增量同步流程的一种具体实现。参照图5,该流程包括:
步骤S401:目标系统向源系统发送增量同步请求,其中携带有目标系统的操作日志表中最后一行日志的第二哈希值。
步骤S402:源系统根据目标系统的操作日志表中最后一行日志的第二哈希值,在源系统的操作日志表中查找第二同步位置。
步骤S403:源系统根据第二同步位置从源系统的操作日志表中获取变更日志。
步骤S404:源系统向目标系统发送变更日志。
步骤S405:目标系统校验变更日志中一行日志的第二哈希值。
步骤S406:目标系统针对目标系统的数据表执行该行变更日志对应的操作。
步骤S407:目标系统将该行日志保存至目标系统的操作日志表中。
在步骤S401中,应目标系统的请求,源系统开始进行增量同步。步骤S402至S407对应前文的步骤S310至S330,其具体实现方式及有益效果可以参考前文内容,这里只对一些细节作简单解释。对于步骤S402,若查找第二同步位置成功,则执行步骤S403,否则可以参照前文的处理方式。对于步骤S405,若校验第二哈希值成功,则执行步骤S406,否则可以参照前文的处理方式。步骤S405至步骤S407是一个迭代过程,该过程直至在某行日志的第二哈希值校验失败或者变更日志已经校验完毕时才会结束。
图6示出了本申请实施例提供的数据同步装置500的功能模块图。数据同步装置500可以配置在源系统、目标系统、中间系统中的至少一个系统上。参照图6,数据同步装置500包括:
同步计算表获取模块510,用于分别获取源系统的同步计算表以及目标系统的同步计算表;其中,业务系统的同步计算表中的每一行记录依次对应该系统的数据表中的每一行数据,所述同步计算表中的每一行记录均对应一个第一哈希值,所述第一哈希值由该行记录对应的第一关联数据经第一哈希算法处理后得到,所述第一关联数据包括与该行记录对应的所述数据表中的数据以及所述同步计算表中该行记录的上一行记录中的第一哈希值;
第一同步位置确定模块520,用于从所述源系统的同步计算表中查找第一同步位置;其中,查找条件包括:所述源系统的同步计算表与所述目标系统的同步计算表在所述第一同步位置处的记录中的第一哈希值不同,并且,所述第一同步位置是所述源系统的同步计算表中满足第一哈希值不同的位置中最靠前的位置;
数据同步模块530,用于在查找所述第一同步位置成功时,向所述目标系统的数据表中同步所述源系统的数据表在所述第一同步位置以及所述第一同步位置之后的数据。
在数据同步装置500的一种实现方式中,数据同步模块530还用于:在同步计算表获取模块510分别获取源系统的同步计算表以及目标系统的同步计算表之前,从所述目标系统的数据表中删除在所述源系统的数据表中已经被删除、但在所述目标系统数据表中未同步删除的数据,以及,向所述目标系统的数据表中插入在所述源系统的数据表中已经被插入、但在所述目标系统数据表中未同步插入的数据。
在数据同步装置500的一种实现方式中,所述业务系统的数据表中的每行数据均包括数据标识,数据同步模块530从所述目标系统的数据表中删除在所述源系统的数据表中已经被删除、但在所述目标系统数据表中未同步删除的数据,以及,向所述目标系统的数据表中插入在所述源系统的数据表中已经被插入、但在所述目标系统数据表中未同步插入的数据,包括:通过对比所述源系统的数据表以及所述目标系统的数据表中的数据标识,确定由存在于所述目标系统的数据表中、但不存在于所述源系统的数据表中的数据标识构成的第一标识集,以及,确定由存在于所述源系统的数据表中、但不存在于所述目标系统的数据表中的数据标识构成的第二标识集;从所述目标系统的数据表中删除所述第一标识集中的数据标识对应的数据,以及,向所述目标系统的数据表中插入所述第二标识集中的数据标识在所述源系统的数据表中对应的数据。
在数据同步装置500的一种实现方式中,数据同步模块530向所述目标系统的数据表中同步所述源系统的数据表在所述第一同步位置以及所述第一同步位置之后的数据,包括:将所述源系统的数据表在所述第一同步位置处的数据同步至所述目标系统的数据表中;利用同步计算表获取模块510分别重新获取源系统的同步计算表以及目标系统的同步计算表,以继续进行数据同步,直至第一同步位置确定模块520查找所述第一同步位置失败。
在数据同步装置500的一种实现方式中,数据同步模块530将所述源系统的数据表在所述第一同步位置处的数据同步至所述目标系统的数据表中,包括:利用所述源系统的数据表在所述第一同步位置处的数据更新所述目标系统的数据表在所述第一同步位置处的数据。
在数据同步装置500的一种实现方式中,数据同步模块530还用于:在查找所述第一同步位置失败且所述目标系统的数据表的长度大于所述源系统的数据表的长度时,将所述目标系统的数据表中位于所述源系统的数据表的长度之后的各行数据删除;或者,在查找所述第一同步位置失败且所述目标系统的数据表的长度小于所述源系统的数据表的长度时,将所述源系统的数据表中位于所述目标系统的数据表的长度之后的各行数据插入至所述目标系统的数据表中。
在数据同步装置500的一种实现方式中,第一同步位置确定模块520从所述源系统的同步计算表中查找第一同步位置,包括:利用二分法从所述源系统的同步计算表中查找第一同步位置。
本申请实施例提供的数据同步装置500,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,装置实施例部分未提及之处,可参考方法实施例中相应内容。
图7示出了本申请实施例提供的数据同步装置600的功能模块图。数据同步装置600可以配置在源系统、目标系统、中间系统中的至少一个系统上。参照图7,数据同步装置600包括:
第二同步位置确定模块610,用于获取所述目标系统的操作日志表中最后一行日志的第二哈希值,并从所述源系统的操作日志表中查找包含的第二哈希值与该第二哈希值匹配的日志所在的第二同步位置;其中,业务系统的操作日志表中的每一行日志对应该系统的数据表中的一行数据,所述操作日志表中的每一行日志均对应一个第二哈希值,所述第二哈希值由该行日志对应的第二关联数据经第二哈希算法处理后得到,所述第二关联数据包括与该行日志对应的所述数据表中的数据以及所述操作日志表中该行日志的上一行日志中的第二哈希值;
变更日志发送模块620,用于根据所述第二同步位置从所述源系统的操作日志表中获取变更日志,并向所述目标系统发送所述变更日志;其中,所述变更日志包括所述源系统的操作日志表中位于所述第二同步位置之后的至少一行日志;
操作执行模块630,用于校验所述目标系统接收到的所述变更日志中每一行日志的第二哈希值,在校验成功时,针对所述目标系统的数据表执行该行日志对应的操作,并将该行日志保存至所述目标系统的操作日志表中。
在数据同步装置600的一种实现方式中,操作执行模块630校验所述变更日志中每一行日志的第二哈希值,包括:从所述源系统的数据表或所述目标系统的数据表中,获取执行所述变更日志中每一行日志所需的变更数据;利用所述变更数据校验所述变更日志中每一行日志的第二哈希值。
在数据同步装置600的一种实现方式中,若所述变更日志中的一行日志对应的操作为删除,则从所述目标系统的数据表中获取该行日志对应的变更数据,若所述变更日志中的一行日志对应的操作为插入或更新,则从所述源系统的数据表中获取该行日志对应的变更数据。
在数据同步装置600的一种实现方式中,操作执行模块630还用于:在所述变更日志中任一行日志的第二哈希值校验失败时,执行本申请实施例提出的全量同步方法。
本申请实施例提供的数据同步装置600,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,装置实施例部分未提及之处,可参考方法实施例中相应内容。
图8示出了本申请实施例提供的电子设备700的一种可能的结构。参照图8,电子设备700包括:处理器710、存储器720以及通信接口730,这些组件通过通信总线740和/或其他形式的连接机构(未示出)互连并相互通讯。
其中,处理器710包括一个或多个(图中仅示出一个),其可以是一种集成电路芯片,具有信号的处理能力。上述的处理器710可以是通用处理器,包括中央处理器(CentralProcessing Unit,简称CPU)、微控制单元(Micro Controller Unit,简称MCU)、网络处理器(Network Processor,简称NP)或者其他常规处理器;还可以是专用处理器,包括图形处理器(Graphics Processing Unit,GPU)、神经网络处理器(Neural-network ProcessingUnit,简称NPU)、数字信号处理器(Digital Signal Processor,简称DSP)、专用集成电路(Application Specific Integrated Circuits,简称ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。并且,在处理器710为多个时,其中的一部分可以是通用处理器,另一部分可以是专用处理器。
存储器720包括一个或多个(图中仅示出一个),其可以是,但不限于,随机存取存储器(Random Access Memory,简称RAM),只读存储器(Read Only Memory,简称ROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),电可擦除可编程只读存储器(Electric Erasable Programmable Read-Only Memory,简称EEPROM)等。
处理器710以及其他可能的组件可对存储器720进行访问,读和/或写其中的数据。特别地,在存储器720中可以存储一个或多个计算机程序指令,处理器710可以读取并运行这些计算机程序指令,以实现本申请实施例提供的数据同步方法。
通信接口730包括一个或多个(图中仅示出一个),可以用于和其他设备进行直接或间接地通信,以便进行数据的交互。通信接口730可以包括进行有线和/或无线通信的接口。
可以理解,图8所示的结构仅为示意,电子设备700还可以包括比图8中所示更多或者更少的组件,或者具有与图8所示不同的配置。图8中所示的各组件可以采用硬件、软件或其组合实现。电子设备700可能是实体设备,例如服务器、PC机、笔记本电脑、平板电脑、手机、嵌入式设备等,也可能是虚拟设备,例如虚拟服务器机、虚拟机、虚拟化容器等。并且,电子设备700也不限于单台设备,也可以是多台设备的组合或者大量设备构成的集群。
在本申请实施例提供的数据同步方法中,源系统、目标系统以及中间系统都可以部署在上述电子设备700上。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被计算机的处理器读取并运行时,执行本申请实施例提供的数据同步方法。例如,计算机可读存储介质可以实现为图8中电子设备700中的存储器720。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (13)

1.一种数据同步方法,其特征在于,包括:
分别获取源系统的同步计算表以及目标系统的同步计算表;其中,业务系统的同步计算表中的每一行记录依次对应该系统的数据表中的每一行数据,所述同步计算表中的每一行记录均对应一个第一哈希值,所述第一哈希值由该行记录对应的第一关联数据经第一哈希算法处理后得到,所述第一关联数据包括与该行记录对应的所述数据表中的数据以及所述同步计算表中该行记录的上一行记录中的第一哈希值;
从所述源系统的同步计算表中查找第一同步位置;其中,查找条件包括:所述源系统的同步计算表与所述目标系统的同步计算表在所述第一同步位置处的记录中的第一哈希值不同,并且,所述第一同步位置是所述源系统的同步计算表中满足第一哈希值不同的位置中最靠前的位置;
若查找所述第一同步位置成功,则向所述目标系统的数据表中同步所述源系统的数据表在所述第一同步位置以及所述第一同步位置之后的数据。
2.根据权利要求1所述的数据同步方法,其特征在于,在所述分别获取源系统的同步计算表以及目标系统的同步计算表之前,所述方法还包括:
从所述目标系统的数据表中删除在所述源系统的数据表中已经被删除、但在所述目标系统数据表中未同步删除的数据,以及,向所述目标系统的数据表中插入在所述源系统的数据表中已经被插入、但在所述目标系统数据表中未同步插入的数据。
3.根据权利要求2所述的数据同步方法,其特征在于,所述业务系统的数据表中的每行数据均包括数据标识,所述从所述目标系统的数据表中删除在所述源系统的数据表中已经被删除、但在所述目标系统数据表中未同步删除的数据,以及,向所述目标系统的数据表中插入在所述源系统的数据表中已经被插入、但在所述目标系统数据表中未同步插入的数据,包括:
通过对比所述源系统的数据表以及所述目标系统的数据表中的数据标识,确定由存在于所述目标系统的数据表中、但不存在于所述源系统的数据表中的数据标识构成的第一标识集,以及,确定由存在于所述源系统的数据表中、但不存在于所述目标系统的数据表中的数据标识构成的第二标识集;
从所述目标系统的数据表中删除所述第一标识集中的数据标识对应的数据,以及,向所述目标系统的数据表中插入所述第二标识集中的数据标识在所述源系统的数据表中对应的数据。
4.根据权利要求2或3所述的数据同步方法,其特征在于,所述向所述目标系统的数据表中同步所述源系统的数据表在所述第一同步位置以及所述第一同步位置之后的数据,包括:
将所述源系统的数据表在所述第一同步位置处的数据同步至所述目标系统的数据表中;
跳转至所述分别获取源系统的同步计算表以及目标系统的同步计算表的步骤重复执行,直至查找所述第一同步位置失败。
5.根据权利要求4所述的数据同步方法,其特征在于,所述将所述源系统的数据表在所述第一同步位置处的数据同步至所述目标系统的数据表中,包括:
利用所述源系统的数据表在所述第一同步位置处的数据更新所述目标系统的数据表在所述第一同步位置处的数据。
6.根据权利要求1-5中任一项所述的数据同步方法,其特征在于,所述方法还包括:
若查找所述第一同步位置失败且所述目标系统的数据表的长度大于所述源系统的数据表的长度,则将所述目标系统的数据表中位于所述源系统的数据表的长度之后的各行数据删除;
或者,若查找所述第一同步位置失败且所述目标系统的数据表的长度小于所述源系统的数据表的长度,则将所述源系统的数据表中位于所述目标系统的数据表的长度之后的各行数据插入至所述目标系统的数据表中。
7.根据权利要求1-6中任一项所述的数据同步方法,其特征在于,所述从所述源系统的同步计算表中查找第一同步位置,包括:
利用二分法从所述源系统的同步计算表中查找第一同步位置。
8.一种数据同步方法,其特征在于,包括:
获取目标系统的操作日志表中最后一行日志的第二哈希值,并从源系统的操作日志表中查找包含的第二哈希值与该第二哈希值匹配的日志所在的第二同步位置;其中,业务系统的操作日志表中的每一行日志对应该系统的数据表中的一行数据,所述操作日志表中的每一行日志均对应一个第二哈希值,所述第二哈希值由该行日志对应的第二关联数据经第二哈希算法处理后得到,所述第二关联数据包括与该行日志对应的所述数据表中的数据以及所述操作日志表中该行日志的上一行日志中的第二哈希值;
根据所述第二同步位置从所述源系统的操作日志表中获取变更日志,并向所述目标系统发送所述变更日志;其中,所述变更日志包括所述源系统的操作日志表中位于所述第二同步位置之后的至少一行日志;
校验所述目标系统接收到的所述变更日志中每一行日志的第二哈希值,若校验成功,则针对所述目标系统的数据表执行该行日志对应的操作,并将该行日志保存至所述目标系统的操作日志表中。
9.根据权利要求8所述的数据同步方法,其特征在于,所述方法还包括:
若所述变更日志中任一行日志的第二哈希值校验失败,则执行权利要求1-7中任一项所述的方法。
10.一种数据同步装置,其特征在于,包括:
同步计算表获取模块,用于分别获取源系统的同步计算表以及目标系统的同步计算表;其中,业务系统的同步计算表中的每一行记录依次对应该系统的数据表中的每一行数据,所述同步计算表中的每一行记录均对应一个第一哈希值,所述第一哈希值由该行记录对应的第一关联数据经第一哈希算法处理后得到,所述第一关联数据包括与该行记录对应的所述数据表中的数据以及所述同步计算表中该行记录的上一行记录中的第一哈希值;
第一同步位置确定模块,用于从所述源系统的同步计算表中查找第一同步位置;其中,查找条件包括:所述源系统的同步计算表与所述目标系统的同步计算表在所述第一同步位置处的记录中的第一哈希值不同,并且,所述第一同步位置是所述源系统的同步计算表中满足第一哈希值不同的位置中最靠前的位置;
数据同步模块,用于在查找所述第一同步位置成功时,向所述目标系统的数据表中同步所述源系统的数据表在所述第一同步位置以及所述第一同步位置之后的数据。
11.一种数据同步装置,其特征在于,包括:
第二同步位置确定模块,用于获取目标系统的操作日志表中最后一行日志的第二哈希值,并从源系统的操作日志表中查找包含的第二哈希值与该第二哈希值匹配的日志所在的第二同步位置;其中,业务系统的操作日志表中的每一行日志对应该系统的数据表中的一行数据,所述操作日志表中的每一行日志均对应一个第二哈希值,所述第二哈希值由该行日志对应的第二关联数据经第二哈希算法处理后得到,所述第二关联数据包括与该行日志对应的所述数据表中的数据以及所述操作日志表中该行日志的上一行日志中的第二哈希值;
变更日志发送模块,用于根据所述第二同步位置从所述源系统的操作日志表中获取变更日志,并向所述目标系统发送所述变更日志;其中,所述变更日志包括所述源系统的操作日志表中位于所述第二同步位置之后的至少一行日志;
操作执行模块,用于校验所述目标系统接收到的所述变更日志中每一行日志的第二哈希值,在校验成功时,针对所述目标系统的数据表执行该行日志对应的操作,并将该行日志保存至所述目标系统的操作日志表中。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被处理器读取并运行时,执行如权利要求1-9中任一项所述的方法。
13.一种电子设备,其特征在于,包括存储器以及处理器,所述存储器中存储有计算机程序指令,所述计算机程序指令被所述处理器读取并运行时,执行权利要求1-9中任一项所述的方法。
CN202110658465.6A 2021-06-11 2021-06-11 数据同步方法及装置、存储介质及电子设备 Active CN113553373B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110658465.6A CN113553373B (zh) 2021-06-11 2021-06-11 数据同步方法及装置、存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110658465.6A CN113553373B (zh) 2021-06-11 2021-06-11 数据同步方法及装置、存储介质及电子设备

Publications (2)

Publication Number Publication Date
CN113553373A CN113553373A (zh) 2021-10-26
CN113553373B true CN113553373B (zh) 2023-11-21

Family

ID=78130521

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110658465.6A Active CN113553373B (zh) 2021-06-11 2021-06-11 数据同步方法及装置、存储介质及电子设备

Country Status (1)

Country Link
CN (1) CN113553373B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114745393A (zh) * 2022-03-31 2022-07-12 阿里云计算有限公司 会话同步系统及其方法、云计算中心和云计算设备
CN114647651A (zh) * 2022-05-19 2022-06-21 同日云联信息技术(苏州)有限公司 异构数据库同步方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102005052519A1 (de) * 2004-11-03 2008-01-17 Roman Koller Verfahren mit Anordnung zur Wiedergabe von Mediendaten
WO2011067214A2 (en) * 2009-12-04 2011-06-09 International Business Machines Corporation High throughput, reliable replication of transformed data in information systems
CN110851413A (zh) * 2019-11-08 2020-02-28 深圳市元征科技股份有限公司 一种数据同步方法、装置及电子设备和存储介质
CN111522875A (zh) * 2020-03-24 2020-08-11 福建省农村信用社联合社 一种全量数据同步的分布式系统数据副本一致性监测方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102005052519A1 (de) * 2004-11-03 2008-01-17 Roman Koller Verfahren mit Anordnung zur Wiedergabe von Mediendaten
WO2011067214A2 (en) * 2009-12-04 2011-06-09 International Business Machines Corporation High throughput, reliable replication of transformed data in information systems
CN110851413A (zh) * 2019-11-08 2020-02-28 深圳市元征科技股份有限公司 一种数据同步方法、装置及电子设备和存储介质
CN111522875A (zh) * 2020-03-24 2020-08-11 福建省农村信用社联合社 一种全量数据同步的分布式系统数据副本一致性监测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于MapReduce的档案数据快速查询设计与应用;陈斯洁;;计算机应用与软件(03);全文 *

Also Published As

Publication number Publication date
CN113553373A (zh) 2021-10-26

Similar Documents

Publication Publication Date Title
CN113553373B (zh) 数据同步方法及装置、存储介质及电子设备
CN106570086B (zh) 数据迁移系统及数据迁移方法
CN108121782B (zh) 查询请求的分配方法、数据库中间件系统以及电子设备
US20170031948A1 (en) File synchronization method, server, and terminal
CN111737230B (zh) 数据校验方法、装置、电子设备以及可读存储介质
CN106874281B (zh) 实现数据库读写分离的方法和装置
CN108108431B (zh) 数据同步方法和系统
CN103428242A (zh) 一种增量同步的方法、装置及系统
CN113626416A (zh) 数据校验的方法、装置、计算设备和存储介质
CN105069152B (zh) 数据处理方法及装置
CN109145060B (zh) 数据处理方法及装置
CN113094430B (zh) 一种数据处理方法、装置、设备以及存储介质
CN106817387B (zh) 一种数据同步方法、装置和系统
CN109462661B (zh) 数据同步方法、装置、计算机设备和存储介质
CN110912979B (zh) 一种解决多服务器资源同步冲突方法
CN112000850B (zh) 进行数据处理的方法、装置、系统及设备
CN115422165A (zh) 数据库数据迁移方法和数据库
CN111209597B (zh) 数据校验方法及应用系统
US11409700B2 (en) Method, electronic device and computer program product for snapshot replication
CN116107801A (zh) 交易处理方法及相关产品
CN114416689A (zh) 数据迁移方法、装置、计算机设备、存储介质
CN113420036A (zh) 一种电网监控系统内存库关系库一致性校验方法
CN111427864A (zh) 数据的分批归档方法、装置、设备及存储介质
CN114442947B (zh) 跨域桶删除方法、系统、终端及存储介质
CN112948406B (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