CN115840753A - 数据校验方法及电子设备 - Google Patents

数据校验方法及电子设备 Download PDF

Info

Publication number
CN115840753A
CN115840753A CN202211166970.XA CN202211166970A CN115840753A CN 115840753 A CN115840753 A CN 115840753A CN 202211166970 A CN202211166970 A CN 202211166970A CN 115840753 A CN115840753 A CN 115840753A
Authority
CN
China
Prior art keywords
version
data table
tree
verification period
merck
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
CN202211166970.XA
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.)
XFusion Digital Technologies Co Ltd
Original Assignee
XFusion Digital Technologies 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 XFusion Digital Technologies Co Ltd filed Critical XFusion Digital Technologies Co Ltd
Priority to CN202211166970.XA priority Critical patent/CN115840753A/zh
Publication of CN115840753A publication Critical patent/CN115840753A/zh
Priority to PCT/CN2023/098127 priority patent/WO2024060677A1/zh
Pending legal-status Critical Current

Links

Images

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/21Design, administration or maintenance of databases
    • 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/23Updating
    • 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

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)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开一种数据校验方法及电子设备,其中,数据校验方法包括:获取目标数据表的第二版本对应的第一默克尔树,所述第一默克尔树是根据版本号小于或者等于所述第二版本的至少一个版本分别指示的更新操作对所述目标数据表进行更新后生成的;获取源数据表的第三版本对应的第二默克尔树,所述第二默克尔树是根据版本号小于或者等于所述第三版本的至少一个版本分别指示的更新操作对所述源数据表进行更新后生成的,所述第三版本的版本号大于或者等于所述第二版本;根据所述第一默克尔树和所述第二默克尔树,对所述目标数据表的更新结果进行校验。采用本申请,能够在增量数据迁移过程中避免中断源数据库端的业务处理和数据迁移过程。

Description

数据校验方法及电子设备
技术领域
本申请涉及数据库技术领域,尤其涉及一种数据校验方法及电子设备。
背景技术
数据迁移是指将源数据库中用户数据表,迁移到目标数据库中。其中,数据在源数据库中数据表与目标数据库中数据表的表示方法和编码格式可以不同,但是需要保证源数据库中用户数据表的表示内容和目标数据库中用户数据表的表示内容一致性。一种检验源数据库中用户数据表的内容与目标数据库中用户数据表的内容是否一致的方法是,在迁移之前计算源数据库中用户数据表的默克尔树,在迁移之后,计算目标数据库中用户数据表的默克尔树,从而比较源数据库中用户数据表的默克尔树与目标数据库中用户数据表的默克尔树,如果根节点一致(根节点一致也意味着各个子节点都一致),则源数据库中用户数据表的表示内容与目标数据库中用户数据表的表示内容一致。但是在增量数据迁移中,源数据库中不断对数据表进行变更,源数据库的变更需要逼近实时的迁移到目标数据库中。如果采用传统的方式检验数据内容的一致性,则需要中断源数据库的迁移,从而等待目标数据库迁移完毕。
发明内容
本发明实施例提供一种数据校验方法及电子设备,能够在增量数据迁移过程中避免中断源数据库端的业务处理和数据迁移过程。
第一方面,本申请实施例提供一种数据校验方法,该方法包括:
获取目标数据表的第二版本对应的第一默克尔树,所述第一默克尔树是根据版本号小于或者等于所述第二版本的至少一个版本分别指示的更新操作对所述目标数据表进行更新后生成的;
获取源数据表的第三版本对应的第二默克尔树,所述第二默克尔树是根据版本号小于或者等于所述第三版本的至少一个版本分别指示的更新操作对所述源数据表进行更新后生成的,所述第三版本的版本号大于或者等于所述第二版本;
根据所述第一默克尔树和所述第二默克尔树,对所述目标数据表的更新结果进行校验。
上述方法,获取目标数据表的第二版本对应的第一默克尔树,以及,获取源数据表的第三版本对应的第二默克尔树,该第三版本的版本号可以是大于或者等于第二版本的版本号。换言之,在进行数据校验时,由于目标数据表的更新操作是滞后于对源数据表的操作的,因此只需要保证所获取的源数据表的第三版本的版本号大于或者等于第二版本的版本号对应的默克尔树即可进行数据校验。而不用强求目标数据表的版本号和源数据表的版本号一定一致,因此采用本申请对于源数据表的业务处理和数据迁移可以不用中断。
在一种可能的实现中,所述获取源数据表的第三版本对应的第二默克尔树,包括:
获取源数据表的多版本默克尔树,所述多版本默克尔树包括所述源数据表的多个版本分别对应的默克尔树,所述多个版本中的最大版本号大于或者等于所述第二版本的版本号;
从所述多版本默克尔树中获取所述第三版本对应的第二默克尔树。
上述方法,对于源数据表端,可以采用多版本默克尔树的方式存储各个版本对应的默克尔树,从而可以节省存储空间。
在一种可能的实现中,从所述多版本默克尔树中获取所述第三版本对应的第二默克尔树,包括:
若所述多个版本中包括版本号与所述第二版本的版本号相同的版本,则获取与所述第二版本的版本号相同的版本对应的默克尔树,作为所述第三版本对应的第二默克尔树;
若所述多个版本中不存在与所述第二版本的版本号相同的版本,则从所述多个版本中获取版本号大于所述第二版本的版本号且与所述第二版本的版本号相差最小的版本,并获取所述版本号大于所述第二版本的版本号且与所述第二版本的版本号相差最小的版本对应的默克尔树,作为所述第三版本对应的第二默克尔树。
上述方法,如果多版本默克尔树中存在与第二版本的版本号相同的版本,优先选择版本号相同的版本进行比较,从而提高数据校验的准确率。如果多版本默克尔树中不存在与第二版本的版本号相同的版本,则选择版本号大于第二版本且距离第二版本最近的版本进行数据校验,版本距离比较近相对来说,更新的内容就比较少,便于后续进行校验,提高校验效率和准确性。
在一种可能的实现中,所述根据所述第一默克尔树和所述第二默克尔树,对所述目标数据表的更新结果进行校验,包括:
若所述第一默克尔树和所述第二默克尔树相同,则确定所述目标数据表的更新结果不存在错误;
若所述第一默克尔树和所述第二默克尔树不同,则根据所述第一默克尔树和所述第二默克尔树确定不一致内容,所述不一致内容用于表示对所述目标数据表执行完所第二版本指示的更新操作后的内容与对所述源数据表执行完所述第三版本指示的更新操作后的内容之间的差异;
获取所述第二版本与所述第三版本之间的实际更新内容;
若所述不一致更新内容构成的集合是所述实际更新内容构成的集合的子集,则确定所述目标数据表的更新结果存疑;
若所述不一致更新内容构成的集合不是所述实际更新内容构成的集合的子集,则确定所述目标数据表的更新结果存在错误。
上述方法,分别阐述了在第一默克尔树和第二默克尔树相同或不同场景下的数据校验方式,从而提供了在默克尔树不同场景下也能进行数据校验的可能性,换言之提供了所获取的目标数据表的第二版本和源数据表的第三版本不同场景下进行数据校验的可能性,从而避免对数据迁移和源数据表业务的中断。
在一种可能的实现中,所述第二版本对应的第一默克尔树为当前校验周期对应的默克尔树,所述第二版本为在所述当前校验周期结束时间之前对所述目标数据表最近执行的更新操作所对应的版本。
上述方法,可以对数据迁移进行周期性的数据校验,并进一步定义了周期性校验中第二版本的第一默克尔树,以及周期性校验中第二版本的定义,通过周期性校验,虽然在某个校验周期所获取的第二版本和第三版本不同,但是经过至少一个周期,在同一校验周期所获取的版本就可能相同,可以及时发现校验错误,并提高校验的准确性,并且不需要中断业务以及数据迁移过程。
在一种可能的实现中,所述获取目标数据表的第二版本对应的第一默克尔树,包括:
获取在所述当前校验周期的上一个校验周期对应的默克尔树;
当所述当前校验周期内存在对所述目标数据表的更新操作时,根据所述当前校验周期内对所述目标数据表的更新操作和所述上一个校验周期对应的默克尔树,获得所述第一默克尔树;
当所述当前校验周期内不存在对所述目标数据表的更新操作时,将所述上一个校验周期对应的默克尔树确定为所述第一默克尔树。
上述方法,在获取目标数据表的第二版本对应的第一默克尔树过程中,可以根据当前校验周期实际对目标数据表的更新操作以及上一个校验周期对应的默克尔树,计算得到第一默克尔树,从而避免反复计算整个默克尔树,提高计算效率。
在一种可能的实现中,所述源数据表的多版本默克尔树为当前校验周期对应的多版本默克尔树,所述多版本默克尔树包括版本号小于或者等于第一版本的多个版本分别对应的默克尔树,所述第一版本为在所述当前校验周期结束时间之前对所述源数据表最近执行的更新操作所对应的版本。
上述方法,进一步对源数据表的多版本默克尔树在周期性校验中进行定义,即可以始终保持源数据表的最新多版本默克尔树,从而节省存储空间。
在一种可能的实现中,所述获取源数据表的多版本默克尔树,包括:
获取在所述当前校验周期的上一个校验周期对应的多版本默克尔树;
当所述当前校验周期内存在对所述源数据表的更新操作时,根据所述当前校验周期内对所述源数据表的更新操作和所述上一个校验周期对应的多版本默克尔树,获得所述当前校验周期对应的多版本默克尔树;
当所述当前校验周期内不存在对所述源数据表的更新操作时,将所述上一个校验周期对应的多版本默克尔树确定为所述当前校验周期对应的多版本默克尔树。
上述方法,源数据表的多版本默克尔树在周期性校验中可以是基于上一校验周期的多版本默克尔树和当前校验周期内的实际更新操作获得,从而避免反复计算整个多版本默克尔树,提高计算效率。
第二方面,本申请实施例还提供一种电子设备,包括:处理器,存储器,所述存储器与所述处理器耦合;所述存储器用于存储计算机指令;所述处理器用于调用所述计算机指令执行:
获取目标数据表的第二版本对应的第一默克尔树,所述第一默克尔树是根据版本号小于或者等于所述第二版本的至少一个版本分别指示的更新操作对所述目标数据表进行更新后生成的;
获取源数据表的第三版本对应的第二默克尔树,所述第二默克尔树是根据版本号小于或者等于所述第三版本的至少一个版本分别指示的更新操作对所述源数据表进行更新后生成的,所述第三版本的版本号大于或者等于所述第二版本;
根据所述第一默克尔树和所述第二默克尔树,对所述目标数据表的更新结果进行校验。
第三方面,本申请实施例还提供一种计算机存储介质,包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如第一方面或第一方面中任一可能的实现描述的方法。
第四方面,本申请实施例还提供一种计算机程序产品,当上述计算机程序产品在电子设备上运行时,使得所述电子设备执行如第一方面或第一方面中任一可能的实现描述的方法。
可以理解地,上述提供的第二方面提供的电子设备、第三方面提供的计算机存储介质和第四方面提供的计算机程序产品均可实现上述第一方面所提供的方法。因此,其所能达到的有益效果可参考第一方面中对应的有益效果,此处不再赘述。
附图说明
图1是本申请实施例提供的一种默克尔树的示例图;
图2是本申请实施例提供的多版本默克尔树的示例图;
图3是本申请实施例提供的一种数据迁移以及数据校验的系统架构示例图;
图4是本申请实施例提供的一种数据校验方法的流程示意图;
图5是本申请实施例提供的一种数据校验的示例;
图6是本申请实施例提供的另一种数据校验的示例;
图7是本申请实施例提供的另一种数据校验方法的流程示意图;
图8是本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
首先对本申请实施例涉及的术语进行说明。
1、数据迁移
数据迁移是指将源数据库中源数据表中的内容,迁移到目标数据库的目标数据表中,并保证源数据表中的数据和目标数据表中的数据实际表示内容上的一致性,源数据表的数据与目标数据表的数据表示同一内容的表示方法、编码格式可以是不一样的。作为特例,在异构数据库(采用不同的设计思想和实现方法研制的不同数据库)之间源数据表和目标数据表在表示方法、编码格式一般是不一样的。
2、增量数据迁移
增量数据迁移是一种数据迁移方式,在增量数据迁移中,由于源数据库上执行的业务不断进行,因此不断对源数据库的源数据表中的数据执行各种操作,包括插入、删除、更新等。迁移过程持续进行,源数据表的这些变更也要求逼近实时的迁移到目标数据库的目标数据表中。
3、数据校验
在数据从源数据表迁移到目标数据表之后,需要检验目标数据表中的数据是否与源数据表中的数据实际表示内容上的一致性。
4、默克尔树Merkle Tree的数据校验
Merkle树计算过程如图1所示,假设在时刻t,数据表包括5行数据,分别为R1、R2、R3、R4、R5。如图1所示,首先分别计算5行数据的Hash值,该5行数据分别为H1、H2、H3、H4以及H5,即分别将该R1、R2、R3、R4、R5的数据输入哈希函数,得到该5行分别对应的Hash值H1、H2、H3、H4以及H5,本申请用H(Rx)表示对第x行的数据进行哈希运算,得到该第x行对应的Hash值,例如,H(R1)表示对行R1进行哈希运算得到对应的Hash值H1。
然后将Hash值H1、H2、H3、H4以及H5两两分组,最后一个H5由于没有其他节点构成一组,因此最后一组仅包括H5。再将各组的Hash值输入哈希函数,计算得到各组的Hash值。如图1所示,将H1和H2输入哈希函数,计算得到H1和H2的Hash值为H6,需要说明的是,图中H(H1*H2),可理解为将H1和H2作为哈希函数的两个输入,从而得到H1和H2的哈希值H6。同理,可计算H3和H4的Hash值H7,H5的Hash值H(8),可理解,在最后一组Hash值中只包括一个Hash值H5,则哈希函数的另一个输入可以置为默认值。依次递归分组计算Hash值,最后得到根节点的Hash值,即HRoot。
Merkle树数据校验方式是一种有效数据校验方式,其可以定位数据不一致的位置所在行。例如,在对源数据表进行某些操作后,计算该源数据表所得的Merkle Tree的根节点HRoot为HRoot{source},将该操作对应的更新内容迁移到目标数据表之后,计算目标数据表所得的Merkle Tree的根节点HRoot为HRoot{target}。
如果HRoot{source}=HRoot{target},则指示源数据表所表示的内容与目标数据表所表示的内容一致。HRoot{source}与HRoot{target}不相等,则可以从根节点开始,自顶向下,依次比较源数据表的Merkle Tree与目标数据表的Merkle Tree中对应节点的Hash值,最终可以定位哪一行或哪些行的数据不一致,即这些行的Hash值不相等。例如,源数据表的Merkle Tree与目标数据表的Merkle Tree中H9不相等,进一步分别获取源数据表的Merkle Tree与目标数据表的Merkle Tree中H6和H7,如果源数据表的Merkle Tree与目标数据表的Merkle Tree中H6相等,但是H7不等,进一步获取源数据表的Merkle Tree与目标数据表的Merkle Tree中H3和H4,源数据表的Merkle Tree与目标数据表的Merkle Tree中H3相等,但是H4不等,则可以锁定源数据表与目标数据表的R4所表示的内容不一致。
由上述数据校验过程可见,为了实现源数据表与目标数据表之间的数据校验,需要源数据表在执行某项操作后,暂停业务处理,等待该操作对应的内容全部更新到目标数据表之后,获取目标数据表以及源数据表的Merkle Tree,进而进行源数据表和目标数据表的内容之间的校验。显然该种方式是不适应增量数据迁移场景的。
为适应增量数据迁移场景,本申请提出一种多版本Merkle Tree,多版本MerkleTree可以理解为在对数据表进行更新过程中,可以不断生成新的版本的Merkle Tree,并存储历史生成的以及当前生成的各个Merkle Tree。比如可以间隔一定的校验周期,生成Merkle Tree,从而存储各个校验周期所生成的Merkle Tree,形成多版本Merkle Tree。
为节省存储空间,该多版本Merkle Tree可以是在已经生成的多版本Merkle Tree上不断增加新的节点,从而形成多版本Merkle Tree。下面结合图2对多版本Merkle Tree进行举例说明。如图2所示,以SCN来表示Merkle树节点的版本。历史版本及当前版本以链表按版本号的顺序保存,链表头为最新版本(SCN最大)。比如,对行R4进行更新,更新后的为R4′,以更新前的版本为SCN0,更新后的版本为SCN1为例,获取与行R4相关的节点H4、H7、H9以及HRoot,并根据更新后的R4′在Merkle Tree中,添加节点H4、H7、H9以及HRoot的新节点H4′、H7′、H9′以及HRoot′,并将生成的新节点的版本定义为SCN1。如图2所示,依次添加H4、H7、H9以及HRoot的新节点。如图2可见,通过图2的多版本的Merkle Tree,可以得到两个版本分别对应的Merkle Tree。可理解,对于SCN1版本对应的Merkle Tree,从版本SCN0到版本SCN1未改变的节点(比如节点H1、H2、H3、H6)则采用上一版本(即版本SCN0)节点的值。换言之,图2的多版本的Merkle Tree包括版本SCN0对应的Merkle Tree和版本SCN1对应的MerkleTree。
关于具体如何通过多版本Merkle Tree实现增量数据迁移过程中的数据校验具体可以参照后续实施例的描述,在此不再赘述。
如图3所示,为本申请实施例提供的一种数据校验的系统架构图。如图3所示,该系统架构包括源数据库、迁移工具、目标数据库以及数据校验模块。本申请将源数据库中对源数据表的更新内容迁移到目标数据库的目标数据表中。迁移工具可实现将源数据表的更新内容迁移到目标数据表中,本申请以版本号来标识源数据库中对源数据表实现的更新操作,例如,以版本SCN0标识对行R1进行更新操作,以版本SCN1标识对行R2进行更新操作等等。具体的,迁移工具从源数据库中不断提取数据,并按照源数据库提交的版本号顺序(SCN0,SCN1,…,SCNm,…,SCNn…),将源数据库的更新内容回放到目标数据库的目标数据表中,回放可理解为对目标数据表进行更新。可理解,对于同一内容的更新,对目标数据表进行更新的时间会滞后于对源数据表的更新。例如,对版本SCN1标识的对行R2进行更新的操作,目标数据库对目标数据表中该行R2的更新操作会滞后于源数据库对该源数据表的该行R2的更新操作。
可选的,源数据库在完成一个版本标识的更新操作后,可获取源数据表的快照,作为源数据表中该版本对应的快照。同理,目标数据库在完成一个版本标识的更新操作后,也可获取目标数据表的快照,作为目标数据表中该版本对应的快照。
数据校验模块用于对源数据表的内容迁移到目标数据表之后是否发生迁移错误进行校验。
下面结合附图4对数据校验模块进行数据校验的过程进行举例说明,如图4所示,为本申请实施例提供的一种数据校验方法的流程示意图,该数据校验方法包括步骤101-107,其中,各个步骤的执行顺序可以不作限定。
请参照步骤101-步骤103,对源数据库中的源数据表的多版本Merkle Tree的更新过程进行说明:
101,从源数据库获取源数据表的快照,构建初始Merkle树;
可理解,该快照可以是源数据表的初始状态的快照,也可以是在对源数据表进行一部分更新操作后得到的快照。
如图4所示的源数据表更新部分,为源数据表的Merkle树的更新示意图,以T作为校验周期,例如,版本SCN0指示对行R1更新;版本SCN1指示对行R2更新;版本SCN2指示对行R3更新;版本SCN3指示对行R4更新;版本SCN4指示对行R5更新;版本SCN5指示对行R6更新;版本SCN6指示对行R7更新。需要说明的是,版本SCN0-SCN6可以理解为时间戳,其是随着时间T依次对各行数据进行更新的标识符,但实际数据行更新时,也不一定是按照行R1到R7的顺序进行更新的,这个地方只是列举的其中一种情况。比如,版本SCN0指示对行R5进行更新,版本SCN1指示对行R1更新,版本SCN2指示对行R6进行更新,换言之,版本只是指示按照时间顺序,指示的各种更新操作。
本申请可以是在对源数据表的行R1进行更新完,即执行完版本SCN0所指示的更新操作后,获取该源数据表的快照,构建初始Merkle树,为便于描述,将该初始Merkle树称为版本SCN0对应的Merkle树。
102,从迁移工具获取校验周期内源数据表修改行ID集合;
103,根据源数据表的修改行ID集合,获取对应部分快照,更新源数据表的初始Merkle树,添加节点副本,得到多版本Merkle树。
对于一个校验周期,为便于描述将其称为待分析校验周期。当到达该待分析校验周期的结束时间时,获取对源数据表最近的一次执行完成的更新操作所对应的版本,作为该待分析校验周期的版本号,为便于描述将其称为第一版本,并获取执行完第一版本所标识的更新操作的快照,即第一版本所对应的快照。如图5所示,在待分析校验周期[t,t+T]中,在该待分析校验周期结束时间t+T,源数据库已经完成对源数据表的行R1、R2、R3的更新,正在更新行R4,即源数据库已经完成对版本SCN2所标识的更新操作,因此将SCN2作为该待分析校验周期的版本号,并获取该版本SCN2对应的快照,即在源数据表中完成对R3更新后的快照。
在一种实现方式中,可以根据第一版本对应的快照,从零基础开始计算源数据表中该第一版本对应的Merkle树。
在另一种实现方式中,为了避免反复计算整个Merkle树,本申请还可以获取待分析校验周期内源数据表修改行ID集合,该修改行ID集合包括在该待分析校验周期内所修改的行标识,进一步从第一版本对应的快照中获取修改的行的数据,从而在上一个校验周期所得到的初始Merkle树中添加相应的节点,得到多版本Merkle树,即在上一个校验周期的初始Merkle树基础上进行添加,避免计算整个Merkle树以提高效率,添加方式可以参照图2的描述,在此不再赘述。可理解,若待分析校验周期是[t+T,t+2T],则可以是在上一个校验周期[t,t+T]的多版本Merkle树基础上添加新的节点,从而得到待分析校验周期是[t+T,t+2T]对应的多版本Merkle树。
下面举例说明获取待分析校验周期内源数据表修改行ID集合以及Merkle树的更新过程,具体可选的,需要获取该待分析校验周期的上一个校验周期的版本号,如果该待分析校验周期是第一个校验周期,如图5中的校验周期[t,t+T],则获取的初始Merkle树对应的版本号即版本SCN0。可理解,如果待分析校验周期为[t+T,t+2T],则上一个校验周期为[t,t+T],该上一个校验周期的版本号为SCN2。
由于迁移工具可以获得每个版本所标识的行更新操作,因此进一步从迁移工具获取待分析校验周期的版本号与该待分析校验周期的上一个校验周期的版本号之间对源数据表修改行ID集合。
如图5所示,待分析校验周期[t,t+T],则可以获取版本SCN0到版本SCN2之间对源数据表修改行ID,从而构成修改行ID集合。由于版本SCN1标识对行R2进行更新,SCN2标识对行R3进行更新,因此行ID集合包括行R2和行R3,即在该校验周期修改了行R2和行R3。
可理解,如果上一个校验周期的版本号与待分析校验周期的版本号相同,则说明没有更新,也不需要对多版本Merkle树进行更新,直接将上一个校验周期的多版本Merkle树作为待分析校验周期的多版本Merkle树。
进一步,以图5继续作为举例,从版本SCN2对应的快照中获取行R2和R3更新后的数据,从而在版本SCN0对应的初始Merkle树中添加对应的节点,添加节点后的多版本Merkle树称为版本SCN2对应的多版本Merkle树,也是该校验周期[t,t+T]的多版本Merkle树,该版本SCN2对应的多版本Merkle树中包括SCN0对应的Merkle树和SCN2对应的Merkle树。同理,对于校验周期[t+T,t+2T],在时间t+2T的多版本Merkle树(即校验周期[t+T,t+2T]对应的多版本Merkle Tree)为版本SCN4对应的多版本Merkle树,即该多版本Merkle Tree是在执行完版本SCN4所标识的对行R5进行更新的操作后更新得到的,该SCN4对应的多版本Merkle树中包括SCN0对应的Merkle树、SCN2对应的Merkle树以及SCN4对应的Merkle树。
本申请实施例中,数据校验模块可以在每个校验周期,对源数据库的多版本Merkle树进行一次更新,可理解,如果相邻两个周期的版本相同,则不需要对多版本Merkle树更新。
可理解,上述例子中以一个待分析校验周期作为举例说明,本申请中可以在每个校验周期内均按照上述执行步骤进行执行,从而得到源数据表的多版本Merkle Tree。
本申请实施例中,对于目标数据库的目标数据表,可以采用多版本Merkle树,也可以不使用多版本Merkle树,即仅仅存储最近一次生成的Merkle树。其中目标数据表的校验周期可以与源数据表的校验周期相同,即两者同用一个校验周期。下面结合图4中的步骤104-106对目标数据表的Merkle树进行更新说明:
104,从目标数据库获取目标数据表的快照,构建初始Merkle树。
可理解,该快照可以是目标数据表的初始状态的快照,也可以是在对目标数据表进行一部分更新操作后得到的快照。
如图5所示的目标数据表更新部分,为目标数据表的Merkle树的更新示意图,以T作为校验周期,例如,版本SCN0指示对行R1更新;版本SCN1指示对行R2更新;版本SCN2指示对行R3更新;版本SCN3指示对行R4更新;版本SCN4指示对行R5更新;版本SCN5指示对行R6更新;版本SCN6指示对行R7更新。
本申请可以是在对目标数据表的行R1进行更新完,即执行完版本SCN0所指示的更新操作后,获取该目标数据表的快照,构建初始Merkle树,为便于描述,将该初始Merkle树称为版本SCN0对应的Merkle树。
105,从迁移工具获取校验周期内目标数据表修改行ID集合。
106,根据对目标数据表修改行ID集合,获取对应部分快照数据,更新目标数据表的Merkle树。
对于一个校验周期,为便于描述将其称为待分析校验周期。当到达该待分析校验周期的结束时间时,获取对目标数据表最近的一次执行完成的更新操作所对应的版本,作为该待分析校验周期的版本号,为便于描述将其称为第二版本,可理解,对于同一待分析校验周期,对于源数据表所确定第一版本与对于目标数据表所确定的第二版本可以相同,也可以不同。下面以图5作为举例,对于图5中校验周期1,对于源数据表,所确定该待分析校验周期的版本为SCN2,对于目标数据表,所确定的该待分析校验周期的版本为SCN1,换言之,在该校验周期1的结束时间,对源数据表已经执行完SCN2所标识的更新操作,但是对目标数据表才执行完SCN1所标识的更新操作。可理解,图5中以在同一检验周期,对目标数据表的更新操作滞后于对源数据表的更新操作为一行(即R3)仅为举例,还可以是其他行数量,本申请不作限定。
进一步获取执行完第二版本所标识的更新操作之后的快照,即第二版本所对应的快照。如图5所示,在待分析校验周期[t,t+T]中,在该待分析校验周期结束时间t+T,已经完成对目标数据表的行R1、R2的更新,正在更新行R3,即目标数据库已经完成对版本SCN1所标识的更新操作,因此将SCN1作为该待分析校验周期的版本号,并获取该版本SCN1对应的快照,即在对目标数据表中完成对R2更新后的快照。
在一种实现方式中,可以根据第二版本对应的快照,从零基础开始计算目标数据表的该校验周期的Merkle树。
在另一种实现方式中,为了避免反复计算整个Merkle树,本申请还可以获取待分析校验周期内对目标数据表修改行ID集合,该修改行ID集合包括在该待分析校验周期内所修改的行标识,进一步从第二版本对应的快照中获取修改的行的数据,从而在上一个校验周期所得到的初始Merkle树中更新相应的节点,从而得到第二版本对应的Merkle树,即在上一个校验周期的初始Merkle树基础上替换相应节点的内容,避免计算整个Merkle树以提高效率。
下面举例说明获取待分析校验周期内目标数据表修改行ID集合以及Merkle树的更新过程,具体可选的,需要获取该待分析校验周期的上一个校验周期的版本号,如果该待分析校验周期是第一个校验周期,如图5中的校验周期[t,t+T],则获取的初始Merkle树对应的版本号即版本SCN0。可理解,如果待分析校验周期为[t+T,t+2T],则上一个校验周期为[t,t+T],该上一个校验周期的版本号为SCN1。
由于迁移工具可以获得每个版本所标识的行操作,因此进一步从迁移工具获取待分析校验周期的版本(即第二版本)与该待分析校验周期的上一个校验周期的版本之间对目标数据表修改行ID集合。
如图5所示,待分析校验周期[t,t+T],则可以获取版本SCN0到版本SCN1之间对目标数据表修改行ID,从而构成修改行ID集合。由于版本SCN1标识对行R2进行更新,因此行ID集合包括行R2,即在该校验周期修改了行R2。
可理解,如果上一个校验周期的版本与待分析校验周期的第二版本相同,则说明没有更新,也不需要对Merkle树进行更新,直接将上一个校验周期的Merkle树作为待分析校验周期的Merkle树。如图5中校验周期2中[t+T,t+2T],由于校验周期1的版本为SCN1,校验周期2的版本也是SCN1,因此将校验周期1的Merkle树作为校验周期2的Merkle树。
进一步,以图5继续作为举例,待分析校验周期为[t,t+T],从版本SCN1对应的快照中获取行R2更新后的数据,从而在版本SCN0对应的初始Merkle树更新对应的节点,形成新的Merkle树,该新的Merkle树也是该校验周期[t,t+T]的Merkle树。对于待分析校验周期为校验周期[t+T,t+2T],由于该校验周期的版本与上一个校验周期[t,t+T]的版本相同,因此,不需要对Merkle树进行更新,将上一个校验周期[t,t+T]的Merkle树作为该校验周期[t+T,t+2T]的Merkle树。对于待分析校验周期为[t+2T,t+3T],由于该校验周期的版本为SCN2,即是距离在该校验周期结束时间最近的一次更新操作是执行完SCN2所标识的操作。进一步获取版本上一个校验周期[t+T,t+2T]的版本与校验周期[t+2T,t+3T]的版本之间更新的行ID集合,从而在上一个校验周期的Merkle树基础上更新相应的节点,得到校验周期[t+2T,t+3T]的Merkle树。
通过不断的循环,不断对已经存在的Merkle树进行更新,从而替换已经存在的Merkle树,得到目标数据表的Merkle树。
以上通过步骤101到步骤103可以得到源数据表的各个校验周期的多版本Merkle树,通过步骤104到步骤106可以得到目标数据表的各个校验周期的Merkle树,可理解,本申请在目标数据表侧也可以采用多版本Merkle树,具体生成方式可以参照源数据表的各个校验周期的多版本Merkle树生成方式,在此不再赘述。下面通过步骤107举例描述数据校验过程。
107,根据目标数据表的Merkle树与源数据表的多版本Merkle树,执行数据校验。
获取目标数据表的Merkle树,该Merkle树可以是执行完第二版本所标识的更新操作后更新得到的。如图5所示,如果在校验周期1结束之后且校验周期2结束时间之前执行数据校验,目标数据表的Merkle树是在执行完SCN1所标识的对行R2的更新操作后更新得到的,第二版本是指SCN1。同理,如果在校验周期3结束之后且校验周期4结束时间之前执行数据校验,目标数据表的Merkle树是在执行完SCN2所标识的对行R3的更新操作后更新得到的,第二版本是指SCN2。
获取源数据表的多版本Merkle树,该多版本Merkle树可以是执行完第一版本所标识的更新操作后更新得到的。如图5所示,如果在校验周期1结束之后且校验周期2结束时间之前执行数据校验,源数据表的Merkle树是在执行完SCN2所标识的对行R3的更新操作后更新得到的,第一版本是指SCN2。同理,如果在校验周期2结束之后且校验周期3结束时间之前执行数据校验,源数据表的Merkle树是在执行完SCN4所标识的对行R5的更新操作后更新得到的,第一版本是指SCN4。
可理解,对于一次数据校验,该数据校验时刻所获取的目标数据表的Merkle树是最近更新得到的Merkle树,所获取的源数据表的多版本Merkle树也是最近更新得到的多版本Merkle树。
该多版本Merkle树可以包含多个版本分别对应的Merkle树。进一步从该多个版本中确定版本号大于或者等于第二版本的版本号的版本,作为第三版本,换言之,该第三版本的版本号大于或者等于第二版本的版本号。从多版本Merkle树中获取该第三版本对应的Merkle树。需要说明的是,如果该多个版本中包括与第二版本相同的版本,则将相同版本作为第三版本,如果该多个版本中不包括与第二版本相同的版本,则获取大于第二版本的版本号,并且与第二版本的版本号相差最小的版本作为第三版本。
下面以图5作为举例,如果是在校验周期1的结束时间之后,且校验周期2结束时间之前进行数据校验,那么目标数据表的Merkle树对应的版本是SCN1,源数据表的多版本Merkle树中包含SCN0所对应的Merkle树和SCN2所对应的Merkle树。从SCN0、SCN2中选择大于或者等于SCN1的版本,作为第三版本,由于不存在与SCN1相同的版本,因此获取大于SCN1的版本SCN2作为第三版本,并从多版本Merkle树中获取SCN2对应的Merkle树。可理解,如果是在校验周期3的结束时间之后执行数据校验,则第二版本是SCN2,而多版本Merkle树包含SCN0、SCN2、SCN4以及SCN6分别对应的Merkle树,从该多版本中选择SCN2作为第三版本,即第三版本与第二版本相同。
将第三版本对应的Merkle树与目标数据表的Merkle树(即第二版本对应的Merkle树)进行比较,如果一致,则说明迁移没有出现错误。如果不一致,则可能是由于第二版本和第三版本的版本差异导致的,因此,进一步根据第三版本对应的Merkle树与目标数据表的Merkle树的比较结果确定不一致的行ID,将该不一致的行ID构成第一集合。
由于可能是第二版本和第三版本的版本差异导致的,因此,获取第二版本到第三版本之间所更新的行ID,构成第二集合。例如,第二版本是SCN1,第三版本是SCN2,则版本SCN1到版本SCN2更新了行R3,因此行R3构成第二集合。
如果第一集合是第二集合的子集,则校验结果存疑,可能是因为版本差异导致Merkle树比较结果的不一致,迁移可能并未出现错误。一种可能的实现方式中,可以间隔一个或多个校验周期后再次进行校验。如图5所示,如果是在校验周期1结束时进行校验,第三版本对应的Merkle树与目标数据表的Merkle树的比较结果不一致,如果间隔两个校验周期,在校验周期3结束时进行校验,则可能比较结果一致。另一种可能的实现方式中,可以暂停对源数据表的更新处理,暂停时长需足够目标数据表完成所有从源数据表迁移到目标数据表的数据,即目标数据表和源数据表达到相同进度。如图5所示,如果在校验周期1结束时进行校验,并且校验结果存疑,暂停源数据表的更新,等待对目标数据表的更新与对源数据表的更新达到相同进度时,更新源数据表的Merkle树和目标数据表的Merkle树,并进行比较,如果一致,则确定迁移未出现错误,如果不一致,则迁移出现错误。Merkle树更新完毕后即可重启对源数据表的更新操作,即重启源数据库端业务处理。在又一种可能的实现方式中,如果在某次数据校验时,校验结果存疑,获取该次校验使用的源数据表的Merkle树的版本为SCNs。在数据迁移工具完成所有SCN<=SCNs的数据迁移后暂停。等待目标数据表回放完毕后,更新源数据表及目标数据表Merkle树执行校验。如果一致则确定迁移未出现错误,如果不一致,则迁移出现错误。
需要说明的是,上述子集可以理解为真子集或全集。换言之,第一集合中的每个行ID均在第二集合中。在图5所示例子中,第一集合是第二集合的全集。在一些实施方式中,第一集合可能是第二集合的真子集,具体可以参照后续对图6的描述,在此暂不赘述。
如果第一集合不是第二集合的子集,换言之第一集合中包括不存在于第二集合中的行ID,则确定数据迁移发生错误。
请参照图6为本申请提供的一种数据校验的示意图,在图6中,以T作为校验周期,例如,版本SCN0指示增加行R0;版本SCN1指示增加行R1;版本SCN2指示增加行R2;版本SCN3指示增加行R3;版本SCN4指示删除行R2。
如图6的源数据表更新部分,每隔校验周期对源数据表的多版本Merkle树进行一次更新,比如,在校验周期1结束时,已经完成对源数据表的添加行R0-R3的操作,以及已经完成删除行R2的操作,即执行完版本SCN0-SCN4所标识的更新操作,因此,SCN4为校验周期1的版本,该校验周期的多版本Merkle树也包括SCN0和SCN4分别对应的Merkle树。
如图6的目标数据表更新部分,每隔校验周期对目标数据表的Merkle树进行一次更新,比如,在校验周期2的结束时间,已经完成对目标数据表的添加行R0和行R1的操作,即执行完版本SCN1所标识的操作,得到的是SCN1对应的Merkle树。
如果校验时间是校验周期2的结束时间,源数据表的多版本Merkle树包括SCN0、SCN4以及SCN8分别对应的Merkle树。则从SCN0、SCN4以及SCN8选择大于或者等于SCN1的版本SCN4。通过比较SCN1对应的Merkle树和SCN4对应的Merkle树,可以锁定存在差异的是行R3,但是实际在从版本SCN1到版本SCN4之间改变了行R2和行R3,只是最后行R2被删掉了。在该种场景下通过比较Merkle树得到的存在差异的行ID集合是实际改变的行ID集合的真子集,即上述提到的第一集合是第二集合的子集。
请参照图7,为本申请实施例提供的一种数据校验方法的流程示意图,在该实施例中将前述实施例中的Merkle树替换为默克尔树,如图所示,该方法可以包括但不限于以下步骤:
201,获取目标数据表的第二版本对应的第一默克尔树,第一默克尔树是根据版本号小于或者等于第二版本的至少一个版本指示的更新内容对目标数据表进行更新后生成的。
目标数据表的默克尔树可以不断更新的,比如,可以设置校验周期,在每个校验周期对目标数据表的默克尔树更新一次,可理解,如果本校验周期与上一个校验周期的版本相同,则可以不用对默克尔树更新。
在一种实现方式中,目标数据表的默克尔树可以是在已经存在的目标数据表的默克尔树基础上进行更新,将更新完的默克尔树替换掉已经存在的目标数据表的默克尔树。换言之,该目标数据表可以仅存在一个最新更新生成的默克尔树。可以参照图5为例进行说明,在校验周期1的结束时间t+T之后进行校验,目标数据表的第二版本对应的第一默克尔树可以是SCN1所对应的默克尔树,该SCN1所对应的默克尔树可以是在SCN0对应的默克尔树基础上更新得到的,并将SCN0对应的默克尔树更新为SCN1所对应的默克尔树。该SCN1所对应的默克尔树可理解为是根据版本号SCN0-SCN1所指示的更新内容对目标数据表进行更新后生成的。该种实施方式中,第二版本可理解为目标数据表的最新更新完成的版本。
在另一种实现方式中,也可以分别存储目标数据表的多版本默克尔树,或者,也可以分别存储目标数据表的各个版本分别对应的默克尔树。该种实施方式中,第二版本可以是目标数据表的多个版本默克尔树中的一个版本。如图5所示,可以分别存储目标数据表的SCN0对应的默克尔树、SCN1对应的默克尔树以及SCN2对应的默克尔树。该第二版本可以是SCN0、SCN1以及SCN2中任一个。
202,获取源数据表的多版本默克尔树,所述多版本默克尔树包括所述源数据表的多个版本分别对应的默克尔树;
源数据表的多版本默克尔树可以用于确定源数据表的多个版本分别对应的默克尔树。可理解,本申请也可以分别存储源数据表的各个版本分别对应的默克尔树,本申请不作限定。关于生成源数据表的多版本默克尔树的具体实施方式可以参照前述实施例的描述,在此不再赘述。
在一些实施方式中,该源数据表的多版本默克尔树可以是最新生成的多版本默克尔树。
203,从所述多版本默克尔树中获取第三版本对应的第二默克尔树,所述第二默克尔树是根据版本号小于或者等于第三版本的至少一个版本指示的更新内容对源数据表进行更新后生成的,第三版本是多版本中版本号大于第二版本的版本号且与第二版本的版本号相差最小的版本,或者,是与第二版本的版本号相等的版本。
从多版本默克尔树中确定是否存在与第二版本的版本号相同的版本,如果存在,将其作为第三版本。如果不存在与第二版本的版本号相同的版本,则进一步确定多版本中版本号大于第二版本的版本号且与第二版本的版本号相差最小的版本,作为第三版本。
从多版本默克尔树中获取第三版本对应的第二默克尔树。
204,比较第一默克尔树与第二默克尔树;如果一致,则执行步骤205,如果不一致,执行步骤206。
比较第一默克尔树和第二默克尔树是否一致,如果一致,则说明第二版本以及第二版本之前的迁移不存在迁移错误。
205,确定迁移不存在错误。
206,根据比较结果确定不一致的行ID,并构成第一集合;以及,获取第二版本和第三版本之间实际改变的行ID,构成第二集合。
207,如果第一集合是第二集合的子集,则确定迁移是否存在错误是存疑的。
208,如果第一集合不是第二集合的子集,则确定迁移存在错误。
如果第一默克尔树和第二默克尔树不一致,可以根据比较结果确定不一致的行ID,具体确定方法可以参照前述实施例的描述,在此不再赘述。不一致的行ID构成第一集合。可以通过迁移工具获取第二版本和第三版本之间实际改变的行ID,实际改变的行ID构成第二集合,具体可以参照前述实施例的描述,在此不再赘述。如果第一集合是第二集合的子集,则确定迁移是否存在错误是存疑的,可以间隔一定校验周期后再进行校验。如果第一集合不是第二集合的子集,则确定迁移存在错误。
可理解,如果在步骤203中的第二版本和第三版本相同,则说明目标数据表和源数据表是对同一个版本更新完成后进行比较的,如果第一默克尔树和第二默克尔树比较不一致,则说明,肯定是出现迁移错误。因此,本申请在确定第一默克尔树和第二默克尔树不一致的情况下,进一步确定第二版本和第三版本是否相同,如果相同,则确定出现迁移错误,如果不相同,可以进一步获取第二版本和第三版本之间实际改变的行ID,实际改变的行ID构成第二集合,判断第一集合是否为第二集合的子集,从而确定是否出现迁移错误。
需要说明的是,本申请的各个技术方案(或者称为各个实施例)可以独立实施或者也可以基于某些内在联系结合实施。本申请不作限定。并且各个实施例之间的各种术语以及定义可以相互引用。本申请的每个实施例中,不同的实现方式之间也可以结合实施或者独立实施。
参见图8,图8是本申请实施例提供的一种电子设备的结构示意图。该电子设备可以是服务器,也可以是基站、路由器等网关设备或网络设备,还可以是笔记本电脑、台式电脑、平板电脑、手机等终端设备。其中,服务器可以是文件服务器(file server)、域控制服务器(domain server)、数据库服务器(database server),邮件服务器(mail Server),Web服务器(web server),多媒体服务器(multimedia server),通讯服务器(communicationserver),终端服务器(terminal server),基础架构服务器(infrastructure server),虚拟化服务器(virtualization server)等。服务器可以是塔式、机架式、刀片式等。电子设备可以但不限于采用X86架构,精简指令集计算机(reduced instruction set computer,RISC)架构,进阶精简指令集机器(advanced RISC machine,ARM)架构等。
如图8所示,该电子设备可以包括但不限于:处理器810、通信接口820以及存储器830,所述处理器810、通信接口820以及存储器830通过内部总线840相互连接。应理解,该电子设备800可以是云计算中的电子设备,或边缘环境中的电子设备。
所述处理器810可以由一个或者多个通用处理器构成,例如中央处理器(centralprocessing unit,CPU),或者CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC)、可编程逻辑器件(programmablelogic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complexprogrammable logic device,CPLD)、现场可编程逻辑门阵列(field-programmable gatearray,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合。
总线840可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。所述总线840可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但不表示仅有一根总线或一种类型的总线。
存储器830可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM);存储器830也可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM)、快闪存储器(flash memory)、硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器830还可以包括上述种类的组合。
需要说明的是,电子设备800的存储器830中存储了图3数据校验系统的各个部件对应的代码或者计算机指令,包括数据校验模块执行数据校验的代码。处理器810执行这些代码实现了本申请的数据校验的功能,即执行了步骤101-107的方法和/或执行了步骤201-208的方法。
本申请还提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储有计算机程序,当该计算机程序被处理器执行时,可以实现上述方法实施例中记载的任意一种的部分或全部步骤。
本发明实施例还提供一种计算机程序,该计算机程序包括指令,当该计算机程序被计算机执行时,使得计算机可以执行任意一种用于服务扩缩容的方法的部分或全部步骤。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可能可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
上述实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本申请的限制。如在本申请的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括复数表达形式,除非其上下文中明确地有相反指示。还应当理解,本申请中使用的术语“和/或”是指并包含一个或多个所列出项目的任何或所有可能组合。
上述实施例中所用,根据上下文,术语“当…时”可以被解释为意思是“如果…”或“在…后”或“响应于确定…”或“响应于检测到…”。类似地,根据上下文,短语“在确定…时”或“如果检测到(所陈述的条件或事件)”可以被解释为意思是“如果确定…”或“响应于确定…”或“在检测到(所陈述的条件或事件)时”或“响应于检测到(所陈述的条件或事件)”。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如DVD)、或者半导体介质(例如固态硬盘)等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。

Claims (16)

1.一种数据校验方法,其特征在于,包括:
获取目标数据表的第二版本对应的第一默克尔树,所述第一默克尔树是根据版本号小于或者等于所述第二版本的至少一个版本分别指示的更新操作对所述目标数据表进行更新后生成的;
获取源数据表的第三版本对应的第二默克尔树,所述第二默克尔树是根据版本号小于或者等于所述第三版本的至少一个版本分别指示的更新操作对所述源数据表进行更新后生成的,所述第三版本的版本号大于或者等于所述第二版本;
根据所述第一默克尔树和所述第二默克尔树,对所述目标数据表的更新结果进行校验。
2.如权利要求1所述的方法,其特征在于,所述获取源数据表的第三版本对应的第二默克尔树,包括:
获取源数据表的多版本默克尔树,所述多版本默克尔树包括所述源数据表的多个版本分别对应的默克尔树,所述多个版本中的最大版本号大于或者等于所述第二版本的版本号;
从所述多版本默克尔树中获取所述第三版本对应的第二默克尔树。
3.如权利要求2所述的方法,其特征在于,从所述多版本默克尔树中获取所述第三版本对应的第二默克尔树,包括:
若所述多个版本中包括版本号与所述第二版本的版本号相同的版本,则获取与所述第二版本的版本号相同的版本对应的默克尔树,作为所述第三版本对应的第二默克尔树;
若所述多个版本中不存在与所述第二版本的版本号相同的版本,则从所述多个版本中获取版本号大于所述第二版本的版本号且与所述第二版本的版本号相差最小的版本,并获取所述版本号大于所述第二版本的版本号且与所述第二版本的版本号相差最小的版本对应的默克尔树,作为所述第三版本对应的第二默克尔树。
4.如权利要求1-3任一项所述的方法,其特征在于,所述根据所述第一默克尔树和所述第二默克尔树,对所述目标数据表的更新结果进行校验,包括:
若所述第一默克尔树和所述第二默克尔树相同,则确定所述目标数据表的更新结果不存在错误;
若所述第一默克尔树和所述第二默克尔树不同,则根据所述第一默克尔树和所述第二默克尔树确定不一致内容,所述不一致内容用于表示对所述目标数据表执行完所第二版本指示的更新操作后的内容与对所述源数据表执行完所述第三版本指示的更新操作后的内容之间的差异;
获取所述第二版本与所述第三版本之间的实际更新内容;
若所述不一致更新内容构成的集合是所述实际更新内容构成的集合的子集,则确定所述目标数据表的更新结果存疑;
若所述不一致更新内容构成的集合不是所述实际更新内容构成的集合的子集,则确定所述目标数据表的更新结果存在错误。
5.如权利要求1-4任一项所述的方法,其特征在于,所述第二版本对应的第一默克尔树为当前校验周期对应的默克尔树,所述第二版本为在所述当前校验周期结束时间之前对所述目标数据表最近执行的更新操作所对应的版本。
6.如权利要求5所述的方法,其特征在于,所述获取目标数据表的第二版本对应的第一默克尔树,包括:
获取在所述当前校验周期的上一个校验周期对应的默克尔树;
当所述当前校验周期内存在对所述目标数据表的更新操作时,根据所述当前校验周期内对所述目标数据表的更新操作和所述上一个校验周期对应的默克尔树,获得所述第一默克尔树;
当所述当前校验周期内不存在对所述目标数据表的更新操作时,将所述上一个校验周期对应的默克尔树确定为所述第一默克尔树。
7.如权利要求2-4任一项所述的方法,其特征在于,所述源数据表的多版本默克尔树为当前校验周期对应的多版本默克尔树,所述多版本默克尔树包括版本号小于或者等于第一版本的多个版本分别对应的默克尔树,所述第一版本为在所述当前校验周期结束时间之前对所述源数据表最近执行的更新操作所对应的版本。
8.如权利要求7所述的方法,其特征在于,所述获取源数据表的多版本默克尔树,包括:
获取在所述当前校验周期的上一个校验周期对应的多版本默克尔树;
当所述当前校验周期内存在对所述源数据表的更新操作时,根据所述当前校验周期内对所述源数据表的更新操作和所述上一个校验周期对应的多版本默克尔树,获得所述当前校验周期对应的多版本默克尔树;
当所述当前校验周期内不存在对所述源数据表的更新操作时,将所述上一个校验周期对应的多版本默克尔树确定为所述当前校验周期对应的多版本默克尔树。
9.一种电子设备,其特征在于,包括处理器,存储器,所述存储器与所述处理器耦合;所述存储器用于存储计算机指令;所述处理器用于调用所述计算机指令执行:
获取目标数据表的第二版本对应的第一默克尔树,所述第一默克尔树是根据版本号小于或者等于所述第二版本的至少一个版本分别指示的更新操作对所述目标数据表进行更新后生成的;
获取源数据表的第三版本对应的第二默克尔树,所述第二默克尔树是根据版本号小于或者等于所述第三版本的至少一个版本分别指示的更新操作对所述源数据表进行更新后生成的,所述第三版本的版本号大于或者等于所述第二版本;
根据所述第一默克尔树和所述第二默克尔树,对所述目标数据表的更新结果进行校验。
10.如权利要求9所述的电子设备,其特征在于,所述处理器具体用于执行:
获取源数据表的多版本默克尔树,所述多版本默克尔树包括所述源数据表的多个版本分别对应的默克尔树,所述多个版本中的最大版本号大于或者等于所述第二版本的版本号;
从所述多版本默克尔树中获取所述第三版本对应的第二默克尔树。
11.如权利要求10所述的电子设备,其特征在于,所述处理器具体用于执行:
若所述多个版本中包括版本号与所述第二版本的版本号相同的版本,则获取与所述第二版本的版本号相同的版本对应的默克尔树,作为所述第三版本对应的第二默克尔树;
若所述多个版本中不存在与所述第二版本的版本号相同的版本,则从所述多个版本中获取版本号大于所述第二版本的版本号且与所述第二版本的版本号相差最小的版本,并获取所述版本号大于所述第二版本的版本号且与所述第二版本的版本号相差最小的版本对应的默克尔树,作为所述第三版本对应的第二默克尔树。
12.如权利要求9-11任一项所述的电子设备,其特征在于,所述处理器具体用于执行:
若所述第一默克尔树和所述第二默克尔树相同,则确定所述目标数据表的更新结果不存在错误;
若所述第一默克尔树和所述第二默克尔树不同,则根据所述第一默克尔树和所述第二默克尔树确定不一致内容,所述不一致内容用于表示对所述目标数据表执行完所第二版本指示的更新操作后的内容与对所述源数据表执行完所述第三版本指示的更新操作后的内容之间的差异;
获取所述第二版本与所述第三版本之间的实际更新内容;
若所述不一致更新内容构成的集合是所述实际更新内容构成的集合的子集,则确定所述目标数据表的更新结果存疑;
若所述不一致更新内容构成的集合不是所述实际更新内容构成的集合的子集,则确定所述目标数据表的更新结果存在错误。
13.如权利要求9-12任一项所述的电子设备,其特征在于,所述第二版本对应的第一默克尔树为当前校验周期对应的默克尔树,所述第二版本为在所述当前校验周期结束时间之前对所述目标数据表最近执行的更新操作所对应的版本。
14.如权利要求13所述的电子设备,其特征在于,所述处理器具体用于执行:
获取在所述当前校验周期的上一个校验周期对应的默克尔树;
当所述当前校验周期内存在对所述目标数据表的更新操作时,根据所述当前校验周期内对所述目标数据表的更新操作和所述上一个校验周期对应的默克尔树,获得所述第一默克尔树;
当所述当前校验周期内不存在对所述目标数据表的更新操作时,将所述上一个校验周期对应的默克尔树确定为所述第一默克尔树。
15.如权利要求10-12任一项所述的电子设备,其特征在于,所述源数据表的多版本默克尔树为当前校验周期对应的多版本默克尔树,所述多版本默克尔树包括版本号小于或者等于第一版本的多个版本分别对应的默克尔树,所述第一版本为在所述当前校验周期结束时间之前对所述源数据表最近执行的更新操作所对应的版本。
16.如权利要求15所述的电子设备,其特征在于,所述处理器具体用于执行:
获取在所述当前校验周期的上一个校验周期对应的多版本默克尔树;
当所述当前校验周期内存在对所述源数据表的更新操作时,根据所述当前校验周期内对所述源数据表的更新操作和所述上一个校验周期对应的多版本默克尔树,获得所述当前校验周期对应的多版本默克尔树;
当所述当前校验周期内不存在对所述源数据表的更新操作时,将所述上一个校验周期对应的多版本默克尔树确定为所述当前校验周期对应的多版本默克尔树。
CN202211166970.XA 2022-09-23 2022-09-23 数据校验方法及电子设备 Pending CN115840753A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202211166970.XA CN115840753A (zh) 2022-09-23 2022-09-23 数据校验方法及电子设备
PCT/CN2023/098127 WO2024060677A1 (zh) 2022-09-23 2023-06-02 数据校验方法及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211166970.XA CN115840753A (zh) 2022-09-23 2022-09-23 数据校验方法及电子设备

Publications (1)

Publication Number Publication Date
CN115840753A true CN115840753A (zh) 2023-03-24

Family

ID=85575012

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211166970.XA Pending CN115840753A (zh) 2022-09-23 2022-09-23 数据校验方法及电子设备

Country Status (2)

Country Link
CN (1) CN115840753A (zh)
WO (1) WO2024060677A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024060677A1 (zh) * 2022-09-23 2024-03-28 超聚变数字技术有限公司 数据校验方法及电子设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IT201600106953A1 (it) * 2016-10-24 2018-04-24 Aliasnet S R L Metodo di registrazione di una transazione, in particolare di firma di un documento elettronico
CN110989994B (zh) * 2019-11-18 2024-04-26 腾讯科技(深圳)有限公司 基于区块链的代码版本管理方法、装置、终端及存储介质
CN113626416A (zh) * 2020-05-07 2021-11-09 华为技术有限公司 数据校验的方法、装置、计算设备和存储介质
CN114281793A (zh) * 2020-09-28 2022-04-05 华为技术有限公司 数据校验方法、装置和系统
CN115840753A (zh) * 2022-09-23 2023-03-24 超聚变数字技术有限公司 数据校验方法及电子设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024060677A1 (zh) * 2022-09-23 2024-03-28 超聚变数字技术有限公司 数据校验方法及电子设备

Also Published As

Publication number Publication date
WO2024060677A1 (zh) 2024-03-28

Similar Documents

Publication Publication Date Title
US20210342313A1 (en) Autobuild log anomaly detection methods and systems
CN106570086B (zh) 数据迁移系统及数据迁移方法
US10387236B2 (en) Processing data errors for a data processing system
TW201737126A (zh) 執行資料恢復操作的方法及裝置
US11449371B1 (en) Indexing data at a data intake and query system based on a node capacity threshold
WO2018095299A1 (zh) 一种时序数据管理方法、设备和装置
US10713035B2 (en) Systems and methods for peer-to-peer build sharing
US20200110905A1 (en) Security hardened software footprint in a computing environment
CN110647531A (zh) 数据同步方法、装置、设备及计算机可读存储介质
CN111026568A (zh) 数据和任务关系构建方法、装置、计算机设备及存储介质
CN107832446B (zh) 一种配置项信息的搜索方法及计算设备
CN111737230A (zh) 数据校验方法、装置、电子设备以及可读存储介质
CN107368513B (zh) 客户端数据库更新的方法及装置
JP2018060570A (ja) 単一テーブルから複数テーブルへの参照データセグメント化
US20210125007A1 (en) System for automated database replication and testing
WO2024060677A1 (zh) 数据校验方法及电子设备
CN116204575A (zh) 将数据导入数据库的方法、装置、设备及计算机存储介质
US11599396B2 (en) Resegmenting chunks of data based on source type to facilitate load balancing
CN114969046A (zh) 一种哈希连接的处理方法、存储介质与设备
CN116401229A (zh) 数据库的数据校验方法、装置及设备
CN111400243B (zh) 基于流水线服务的研发管理系统以及文件存储方法、装置
CN114064674A (zh) 数据同步方法、装置、计算机设备、存储介质和产品
US11829415B1 (en) Mapping buckets and search peers to a bucket map identifier for searching
CN109947451B (zh) 一种集群应用文件更新方法、系统、介质及设备
CN114157662A (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