具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1为本申请实施例提供的两个数据集的结构示意图。定义两个实现数据迁移动作的数据集:原始数据集及目标数据集,本文所称数据集是指若干数据所组成的集合,这些数据可以存储于一个或多个存储单元内。在图1所示的实施例中,为应对大规模数据(比如上亿个数据)的迁移需求,目标数据集通常采用分库分表规则来实现数据分配。原始数据集中存储有若干原始格式的原始数据,目标数据集中预设有若干用于存放数据的数据表。于是数据迁移过程是:逐条取出原始数据集中的各个原始数据,对各个原始数据的数据格式进行解析并转换,以得到目标数据集所需格式的若干目标数据,再按照分库分表规则,将若干目标数据分配到目标数据集中的各个数据表中。
值得一提的是,数据迁移过程中的数据格式并非必须步骤,也可将原始数据集中原始数据直接拷贝到目标数据集中。此外,对于非大批量的数据迁移而言,则不需要在目标数据集中预先设置多个数据表,并采用相应的分库分表规则进行数据分配。本文将以支付宝会员积分系统为例来介绍本申请。
参照图1所示,在支付宝会员积分系统中,将每个用户的各类信息作为一个用户数据(原始数据或目标数据)进行存储,从而组成包含若干用户数据的数据集(原始数据集或目标数据集)。每个用户数据对应于一个识别信息,该识别信息通常由纯数字构成,比如:用户注册号、或用户身份证号等。其中,用户注册号的组成格式可以人为设定,比如:用户类别+注册时间+随机数+自增数+校验位。
本申请实施例所采用的分配规则(分库分表规则)基于识别信息来实现。其中,因每个目标数据的识别信息以纯数字形式进行表示,本分配规则以识别信息中的某些特定数字为基准,将各个目标数据分配到对应编号的数据表中。例如:假设目标数据集中预先存在1000个数据表,并将这1000个数据表从000表到999表进行编号,假设以设别信息中后三位为基准,于是识别信息的后三位数为“000”的目标数据将被分配到000表,识别信息的后三位数为“001”的目标数据将被分配到001表,以此类推。当然,本申请的分配规则并不限于以上实施例。
在完成数据迁移的过程中,可能存在部分数据中的某些信息在迁移前后不相一致的情况,为验证数据迁移前后的一致性,本申请实施例提供一种数据校验方法,以下将详细介绍本校验方法。
图2为本申请实施例提供的数据校验方法的过程,包括如下步骤:
S11:从第一数据集中获取若干第一数据。
该步骤S11是获取校验对象的步骤,第一数据集是指目标数据集,第一数据是指目标数据,本申请实施例中,步骤S11具体包括如下步骤:
逐一获取所述第一数据集(目标数据集)中的各个数据表;
分别获取每一数据表中所存储的第一数据(目标数据)。
本实施例将目标数据集中的所有数据作为校验对象,并以各个数据表为数据获取对象,分别获取各数据表内的数据,相较于抽样方式,校验结果更加可靠;另一方面,以数据表为数据获取对象,可以分别校验各个数据表的数据迁移一致性,并且若以单个数据表内的所有数据进行运算处理,可以缩减后续运算处理的运算量。
S12:从第二数据集中获取与所述若干第一数据相对应的若干第二数据。
同理,该步骤S12是获取校验对象的步骤,在获取到若干第一数据(目标数据)之后,根据分配规则从第二数据集(原始数据集)中筛选到若干第二数据(原始数据),以作为校验对象。例如:假设目标数据集的校验对象是003表中的所有数据,则根据003表中的各个目标数据的识别信息,在原始数据集中将携带相同识别信息的各个原始数据筛选出来,以得到原始数据集中相对应的校验对象。
S13:分别读取各个第一数据及各个第二数据的识别信息。
本申请实施例中,识别信息作为各个用户数据中至关重要的信息之一,故将其设定成数据校验的目标。当然,在本申请其他实施例中,也可根据实际需要验证的目标信息,相应调整所需读取的信息类型,比如:目标信息是会员等级、或会员积分数、或余额数等。
S14:将所述第一数据的识别信息进行运算处理以得到第一数值,将所述第二数据的识别信息进行相同的运算处理以得到第二数值。
识别信息作为纯数字组合,将多个识别信息进行运算处理,可以得到一个唯一数值,也就是说,如果改变所作运算的识别信息中的任何数字,则所得结果也会改变,利用这个特性可实现数据校验。本申请实施例中,以上运算处理的方式包括求和运算、或者异或运算、或者求积运算等。关于运算处理的方式将在下文进行具体描述。
S15:校验所述第一数值与所述第二数值是否一致,若是,则校验通过;若否,则校验失败。
图3为本申请实施例提供的数据校验方法中读取识别信息的步骤的具体过程。本申请实施例中,步骤S13具体包括如下步骤:
S131:分别读取各个第一数据及各个第二数据的属性信息。
本申请实施例中,第一数据或第二数据除分别对应一个识别信息外,还分别对应一个属性信息,识别信息和属性信息作为用户数据较为重要的两个信息,本申请实施例将识别信息及属性信息作为校验目标。此外,在数据迁移的过程中,可能存在识别信息和属性信息的对应关系出错的状况,比如:在数据迁移之前,识别信息一:“93280432189”的属性信息是:2,识别信息二:“93280432188”的属性信息是:1;在数据迁移之后,识别信息一:“93280432189”的属性信息是:1,识别信息二:“93280432188”的属性信息是:2。以上情况无法通过单纯校验各个数据的识别信息来验证。
本申请实施例中,属性信息可为各个会员的用户等级、或者用户性别(如:“1”代表男性,“2”代表女性)等信息。该属性信息还可以是按照每个会员名下的虚拟积分、余额等进行分类的类别信息。例如:若按照虚拟积分进行分级,则将“积分=0”的用户的属性信息划定为一类,将“0<积分<=500”的用户的属性信息划定为二类,将“500<积分<=1500”的用户的属性信息划定为三类,将“1500<积分<=3000”的用户的属性信息划定为四类,将“积分>3000”的用户的属性信息划定为五类;若按照用户的余额进行分级,则将“余额=0”的用户的属性信息划定为一类,将“0<余额<=1000”的用户的属性信息划定为二类,将“1000<余额<=10000”的用户的属性信息划定为三类,将“余额>10000”的用户的属性信息划定为四类。
S132:读取具有相同属性信息的第一数据的识别信息。
S133:读取具有相同属性信息的第二数据的识别信息。
以上步骤S132和步骤S133旨在将所获取的若干第一数据及若干第二数据,分别按照属性信息进行归类,从而实现各个数据中识别信息及属性信息的校验。举例说明,若从目标数据集中获取到n个目标数据A1~An作为校验对象,则相应地从原始数据集中筛选到n个原始数据B1~Bn,假设属性信息包括三个等级,则各个数据中识别信息及属性信息的对应关系如下表所示:
基于以上信息,分别将具有相同属性信息的目标数据及原始数据进行归类,则读取到属性信息是“1”的目标数据的识别信息包括:“93920103492”、“22324354668”;属性信息是“2”的目标数据的识别信息包括:“93920103495”;属性信息是“3”的目标数据的识别信息包括:“93920103494”、“22324354667”;属性信息是“1”的原始数据的识别信息包括:“34546576547”、“34546576544”;属性信息是“2”的原始数据的识别信息包括:“54546326663”、“54546326669”;属性信息是“3”的原始数据的识别信息包括:“34546576546”。
值得一提的是,本申请其他实施例中,所需校验的信息数量不受限制,比如需同时验证各个用户数据中三个信息的一致性时,则分别读取到待校验的若干数据的三个信息,并以其中某个信息为基准进行分类。例如:所需验证的信息包括识别信息、属性信息及积分信息,则分别读取原始数据和目标数据中,具有相同属性信息的数据中的识别信息和积分信息。
图4为本申请实施例提供的数据校验方法中运算处理步骤及校验步骤的具体过程。本实施例中,采取求和运算方式将所读取的识别信息进行运算。运算处理步骤具体包括:
S141:分别将第一数据及第二数据的识别信息进行求和运算。
本申请实施例中,以目标数据集中的单个数据表中的所有目标数据为校验对象,并将待校验的目标数据按照属性信息进行分类,并分别读取识别信息及属性信息。在实际应用中,因单个数据表中存储有数百万个数据,所以求和计算所得数值的位数较多,如此势必影响数据的校验效率。为解决以上问题,本申请实施例分别采取科学计数法及取模计数法对求和计算结果进行处理。
S142:将求和结果以科学计数形式进行表示。
科学计数法将求和结果表示成:a*10b的形式,本实施例中,数值a保留小数点后9位,比如:6.320309423e16,a=6.320309423,b=16。
S143:分别将第一数据及第二数据的识别信息进行取模。
取模方法是将各个第一数据或第二数据的识别信息,先对某个数值进行取余,从而得到一个余数。本申请实施例中,将识别信息对1000000进行取余,得到一个6位数的余数。
S144:分别将识别信息的取模数值进行求和运算。
具体地,将若干待运算的第一数据及第二数据的识别信息,分别取模得到若干个6位数的余数,再将所得到第一数据的多个余数进行求和运算,得到对应于第一数据的第一数值,将所得到第二数据的多个余数进行求和运算,得到对应于第二数据的第二数值。以上步骤S143和步骤S144的过程是将第一数值和第二数值以取模计数形式进行表示的过程。
本申请实施例中,所述取模计数方式所对应的余数位数,根据所需运算处理的第一数据或第二数据的数量级来确定。具体地,若所需运算处理的第一数据或第二数据的数量级越大,则取模计数方式所对应的余数位数越小,比如:若所需运算处理的数量级是百万级,则取模结果的余数位数是6位;若所需运算处理的数量级是千万级,则取模结果的余数位数是5位,以此类推。通过以上机制,可调控取模计数方式所得到第一数值或第二数值的位数,在保证校验结果准确性的前提下,合理控制运算量及校验效率。
本申请另一实施例中,采取异或运算将所读取的识别信息进行运算。异或运算(也叫半加运算)的运算法相当于不带进位的二进制加法。二进制下用“1”表示真,“0”表示假,则异或运算的运算法则如下:
0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为“0”,异为“1”),
异或运算的运算法则不带进位。采取异或运算,则无论将多少个识别信息进行异或运算,其所得运算结果仍然与单个识别信息的位数相同,若采取异或运算,则可避免采用科学计数法或取模计数法对求和结果进行处理,从而提升校验效率。以下举例说明:
Id1=31519756
Id2=86567494
Id3=11867314
Id4=11867315
Id1^id2的异或结果为:80223818
Id1^id2^id3的异或结果为:75303672
Id1^id2^id4的异或结果为:75303673
可见,无论是数据迁移过程中是把id3丢了,抑或是把id3写成了id4,异或的签名都会不同,利用这一特性可以验证数据迁移前后的信息一致性。
继续参照图4所示,基于上述实施例,校验步骤S15具体包括:
S151:校验以科学计数形式表示的第一数值及第二数值是否一致。
S153:校验以取模计数形式表示的第一数值及第二数值是否一致。
若以科学计数形式、取模计数形式表示的第一数值与第二数值均一致,则校验通过,否则,校验失败。
以下表为例来说明校验过程:
如上表所示,在级别一及级别二中,无论是科学计数形式表示的求和结果还是取模计数形式表示的求和结果,在迁移前后均一致,则校验通过;在级别三中,科学计数形式表示的求和结果,在迁移前后并不一致,则校验失败。
图5为本申请实施例提供的数据校验装置的结构示意图,本申请实施例所提供的数据校验装置基于以上数据校验方法,故该装置的具体细节参照以上方法,本文不再予以赘述。该数据校验装置包括:
第一获取模块101,用于从第一数据集中获取若干第一数据;
第二获取模块102,用于从第二数据集中获取与所述若干第一数据相对应的若干第二数据;
读取模块103,用于分别读取各个第一数据及各个第二数据的识别信息;
运算处理模块104,用于将所述第一数据的识别信息进行运算处理以得到第一数值,将所述第二数据的识别信息进行相同的运算处理以得到第二数值;
校验模块105,用于校验所述第一数值与所述第二数值是否一致。
本申请实施例中,所述读取模块103具体用于:
分别读取各个第一数据及各个第二数据的属性信息;
读取具有相同属性信息的第一数据的识别信息;
读取具有相同属性信息的第二数据的识别信息。
本申请实施例中,所述运算处理包括求和运算。
本申请实施例中,所述第一数值为具有相同属性信息的若干第一数据的识别信息的和值,所述第二数值为具有相同属性信息的若干第二数据的识别信息的和值。
本申请实施例中,所述第一数值分别以科学计数形式及取模计数形式进行表示,所述第二数值分别以科学计数形式及取模计数形式进行表示。
本申请实施例中,所述校验模块105包括:
第一校验单元,用于校验以科学计数形式表示的第一数值及第二数值是否一致;
第二校验单元,用于校验以取模计数形式表示的第一数值及第二数值是否一致;
若第一校验单元、第二校验单元的校验结果均一致,则校验通过,否则,校验失败。
本申请实施例中,所述第一数据集中包括若干数据表,所述若干第一数据按照分表规则存储于相应的数据表中。
本申请实施例中,所述第一获取模块101具体用于:
逐一获取所述第一数据集中的各个数据表;
分别获取每一数据表中所存储的第一数据。
本申请实施例中,所述第一数值为存储于同一数据表中的若干第一数据的识别信息的和值,所述第二数值为与同一数据表中的若干第一数据相对应的若干第二数据的识别信息的和值。
本申请实施例中,所述取模计数方式所对应的余数位数,根据所需运算处理的第一数据或第二数据的数量级来确定。
本申请实施例中,所述运算处理包括异或运算。
本申请实施例中,所述第一数值为具有相同属性信息的若干第一数据的识别信息的异或结果,所述第二数值为具有相同属性信息的若干第二数据的识别信息的异或结果。
本申请实施例所提供的数据校验方法及装置,从第一数据集及第二数据集中分别获取到相对应的若干第一数据和第二数据,以作为数据校验的对象,并分别将待校验的若干第一数据及若干第二数据中的识别信息进行运算处理,以得到第一数值及第二数值,最终通过校验第一数值和第二数值是否一致,来验证数据迁移前后的一致性。以上运算及校验过程均为机器操作,避免人工干预,从而提高数据校验的效率及校验结果的可靠性;此外,无论所作迁移的数据量多大,最终仅将运算所得结果进行比对,从而缩减数据校验的运算量,减小机器计算资源的开销。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。