一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据库迁移校验方法与流程

2022-03-09 05:04:55 来源:中国专利 TAG:


1.本发明属于数据库迁移技术领域,具体涉及一种数据库迁移校验方法。


背景技术:

2.在互联网行业高速发展的当今社会,数据库成为项目和应用支撑的后端,与此同时,数据库迁移无处不在。数据库迁移是将数据和对象从一个数据库迁移到另一个数据库的过程,迁移过程基本包括数据迁移前准备、数据迁移实施和迁移数据后的校验。迁移前后数据的一致性校验是判断数据库迁移是否成功的标志。通常在数据库迁移的一致性校验中需要分别比对迁移前后的两个数据库中各个表中的每个字段的类型、值等是否相等或进行了合理转换,并比对各种数据对象的个数和类型等在迁移前后是否一致或者进行了合理转换。
3.目前的数据迁移校验一般通过人工比对或使用迁移工具,分别比对迁移前后的两个数据库中各个表中的每个字段的类型、值等是否相等或进行了合理转换,这种一一对比的实现方法,需要耗费大量的运行时间,校验效率不高。


技术实现要素:

4.针对现有技术的上述不足,本发明提供一种数据库迁移校验方法,能够解决校验效率不高的问题。
5.本发明提供一种数据库迁移校验方法,包括:
6.确定第一数据库的第一目标哈希值和第二数据库的第二目标哈希值;
7.对比所述第一目标哈希值和第二目标哈希值,在所述第一目标哈希值和第二目标哈希值相等的情况下,判断所述第一数据库和第二数据库一致。
8.进一步的,所述确定第一数据库的第一目标哈希值和第二数据库的第二目标哈希值,包括:
9.确定单列数据的第一哈希值;
10.根据所述第一哈希值确定单个数据表的第二哈希值;
11.根据所述第二哈希值确定所有数据表的第三哈希值;
12.根据所述第三哈希值和数据对象类型确定数据库的目标哈希值。
13.进一步的,所述确定单列数据的第一哈希值,包括:
14.根据第一方法确定列数据的第一字符串,并根据所述第一字符串计算各列数据对应的第一哈希值。
15.进一步的,所述根据所述第一哈希值确定单个数据表的第二哈希值,包括:
16.根据第二方法确定目标数据表的第二字符串,所述第二字符串包括目标数据表中所有列数据的第一哈希值;
17.计算所述第二字符串的第二哈希值。
18.进一步的,所述根据第二哈希值确定所有数据表的第三哈希值,包括:
19.根据第三方法确定数据库的第三字符串,所述第三字符串包括所有数据表的第二哈希值;
20.计算所述第三字符串的第三哈希值。
21.进一步的,所述根据所述第三哈希值和数据对象类型确定数据库的目标哈希值,包括:
22.根据数据库的对象类型及个数,根据第四方法确定对象类型的字符串;
23.将所述第三哈希值和所述对象类型的字符串合并成第四字符串;
24.计算所述第四字符串的目标哈希值。
25.进一步的,所述方法还包括:
26.将第一数据库中的对象类型转换为迁移到第二数据库后的对象类型。
27.进一步的,所述方法还包括:
28.在所述第一目标哈希值和第二目标哈希值不相等的情况下,依次校验第四字符串、第三字符串、第二字符串和第一字符串的不同;
29.确定第一数据库和第二数据库中不一致的对象类型、数据表、列数据、字段。
30.进一步的,所述列数据包括字段名称、字段类型、字段值和索引个数。
31.进一步的,所述方法还包括:将第一数据库中的字段类型转换为迁移到第二数据库后的字段类型。
32.本发明的有益效果在于,
33.本发明提供的数据库迁移校验方法,根据哈希值的计算速度快、防碰撞特性、单向不可逆性等特点,使用哈希算法,为迁移前后的数据库各生成一个哈希值,通过哈希值的比对确定迁移后的数据库是否发生了变化,解决数据库迁移校验中每个数据一一对比的繁琐问题,减少了人力、时间等的损耗,提高了校验的效率。
34.此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
附图说明
35.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
36.图1是本技术一个实施例中计算迁移前数据库哈希值方法的流程图。
37.图2是本技术一个实施例中计算迁移后数据库哈希值方法的流程图。
38.图3是本技术一个实施例的校验方法的流程图。
39.图4是本技术一个实施例中差异点回溯方法的流程图。
具体实施方式
40.为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
41.需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
42.在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
43.在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语在本发明中的具体含义。
44.下面针对本发明出现的关键词进行解释说明。
45.ascii码表(american standard code for information interchange),是基于拉丁字母的一套编码系统。本文所提到的ascii码表顺序针对的是数据表表名或者对象类型的类型名。
46.下面将参考附图并结合实施例来详细说明本发明。
47.本发明实施例提供的一种数据库迁移校验方法,该方法包括如下步骤:
48.确定第一数据库的第一目标哈希值和第二数据库的第二目标哈希值;
49.对比所述第一目标哈希值和第二目标哈希值,在所述第一目标哈希值和第二目标哈希值相等的情况下,判断所述第一数据库和第二数据库一致。
50.本发明实施例提供的一种数据库迁移校验方法,通过对比迁移前后数据库的哈希值,校验迁移前后数据库的一致性,能够解决数据库迁移校验中每个数据一一对比的繁琐的问题,简化数据校验的过程,降低数据校验的复杂度,提高数据校验的效率和准确度。
51.在一种实现方式中,所述确定第一数据库的第一目标哈希值和第二数据库的第二目标哈希值,包括:确定单列数据的第一哈希值;根据所述第一哈希值确定单个数据表的第二哈希值;根据所述第二哈希值确定所有数据表的第三哈希值;根据所述第三哈希值和数据对象类型确定数据库的目标哈希值。
52.在一种实现方式中,所述确定单列数据的第一哈希值,包括:根据第一方法确定列数据的第一字符串,并根据所述第一字符串计算各列数据对应的第一哈希值。
53.在一种实现方式中,所述根据所述第一哈希值确定单个数据表的第二哈希值,包括:根据第二方法确定目标数据表的第二字符串,所述第二字符串包括目标数据表中所有列数据的第一哈希值;计算所述第二字符串的第二哈希值。
54.在一种实现方式中,所述根据第二哈希值确定所有数据表的第三哈希值,包括:根据第三方法确定数据库的第三字符串,所述第三字符串包括所有数据表的第二哈希值;计算所述第三字符串的第三哈希值。
55.在一种实现方式中,所述根据所述第三哈希值和数据对象类型确定数据库的目标哈希值,包括:根据数据库的对象类型及个数,根据第四方法确定对象类型的字符串;将所述第三哈希值和所述对象类型的字符串合并成第四字符串;计算第四字符串的目标哈希值。
56.在一种实现方式中,所述方法还包括:将第一数据库中的对象类型转换为迁移到第二数据库后的对象类型。
57.在一种实现方式中,所述方法还包括:在所述第一目标哈希值和第二目标哈希值不相等的情况下,依次校验第四字符串、第三字符串、第二字符串和第一字符串的不同;确定第一数据库和第二数据库中不一致的对象类型、数据表、列数据、字段。
58.在一种实现方式中,所述列数据包括字段名称、字段类型、字段值和索引个数。
59.在一种实现方式中,所述方法还包括:将第一数据库中的字段类型转换为迁移到第二数据库后的字段类型。
60.为了便于对本发明的理解,下面以本发明数据库迁移校验方法的原理,结合实施例中对数据库哈希值进行计算的过程,对本发明提供的数据库迁移校验方法做进一步的描述。
61.在一种实现方式中,所述方法还包括:获取字段类型发生转换的列数据在第一字符串中的第一顺序,并将所述第一顺序存储在第一数组内;
62.获取字段类型发生转换的数据表在第二字符串的第二顺序,并将所述第二顺序存储在第二数组内;
63.获取发生转换对象类型在第四字符串的第三顺序,并将所述第三顺序存储在第三数组内。
64.在一种实现方式中,所述方法还包括:在确定第一数据库和第二数据库中不一致的对象类型时,优先对比第三数组中对应的对象类型;
65.在确定第一数据库和第二数据库中不一致的数据表时,优先对比第二数组中对应的数据表;
66.在确定第一数据库和第二数据库中不一致的列数据时,优先对比第一数组中对应的列数据。
67.在本实施例中,若发生在数据库迁移中某些字段的字段类型或者数据库的对象类型发生转换,则这些字段或对象有更多的可能性导致迁移后不一致的情况,对这些数据进行标记,在回溯的过程中优先校验这类数据所在的列、表,标记的方法为记录该字段对应的列、表在字符串中的位置,通过标记引起迁移不一致的高危数据,提升了数据库一致性校验的效率。
68.具体的,所述数据库迁移校验方法包括:
69.如图1所示,是本实施例提供的一种第一数据库的哈希值计算方法。具体包括以下步骤。
70.s110:针对迁移前的数据库,例如第一数据库,按照预设顺序获取第一数据库的数据表,所述预设顺序可以是将表名的ascii码表进行排序的顺序。
71.s120:将当前表的每列数据的字段名称a1、字段类型a2、字段值a3和该列的索引个数a4等,使用第一方法f1进行字符串连接,第一方法f1可以包括首尾连接、倒序连接等方式,得到第一字符串a=f1(a1,a2,a3,...,ai,...),其中,i表示当前列的第i个处理对象,每列数据作为一个处理对象,a3由该列所有行的值依次连接组成。
72.例如,数据表可以如表1所示。
73.表1
74.id属性1属性2属性31aaaaaa2bbbbbb3cccccc
75.针对表1的第一列数据,字段名称a1为id;字段类型a2为int;字段值a3为:{1,2,3}。
76.若列数据类型在数据库迁移后发生转换,则该列数据类型在字符串中的内容为转换后的列数据类型,否则,为列数据的类型本身。例如,数据库迁移前列数据类型为int类型,数据库迁移后被转换为number类型,则a2的值为number。
77.s130:将第一字符串a进行哈希转换,在本实施例中利用sha256算法,生成一个针对列的哈希值bj,其中,j表示第j列。并将字段类型发生转换的列下标记录在一个数组b[]中。
[0078]
具体地,针对哈希值bj的sh256a算法的计算过程如下:
[0079]
s131:常量初始化。设置8个哈希初始值和64个哈希常量,其中8个哈希初始值由自然数中前8个质数的平方根的小数部分取前32位而来,64个哈希常量由自然数中前64个质数的立方根的小数部分取前32位而来。在本实施例中,8个哈希初始值为h0,h1,...,h7,64个哈希常量为c1,c2,...,c
64

[0080]
s132:信息预处理。进行附加填充比特,即对第一字符串a的末尾进行填充,使其总长度在对512取模以后的余数是448,得到值z1;进行附加长度值设置,即将原始第一字符串a的长度信息补充到已经进行了填充操作的值z1后面,原始第一字符串a的长度用一个64位的数据来表示,由此得到一个512位的数值z2。
[0081]
s133:逻辑运算。对数值z2进行逻辑的位运算,得到值z3。
[0082]
s134:计算消息摘要。将z3分解成512位大小的块,构造64个字并进行64次循环加密,本步骤使用步骤s131中设置的8个哈希初始值和64个哈希常量,最终生成256位的数值bj。
[0083]
s140:根据数据表中列的排列顺序,判断当前处理的列是否为最后一列:若是,执行步骤s150;若否,执行步骤s120。
[0084]
s150:将当前表的所有列的哈希值bj,使用第二方法f2组成第二字符串b=f2(b1,b2,b3,...,bj,...),第二方法f2可以包括首尾连接、倒序连接等方式,并进行哈希转换,参考前述s220的sha256算法,生成一个针对表的hash值tk,其中,k表示按照预设顺序排列的第k张表。将字段类型发生转换的列对应的表的下标记录在数组t[]中。
[0085]
s160:根据预设顺序,判断当前处理的表是否为最后一张表:若是,执行步骤s170;若否,按照步骤s110中的顺序获取下一张表。
[0086]
s170:将所有表的哈希值tk使用第三方法f3组成第三字符串t=f3(t1,t2,t3,...,tk,...)并进行哈希转换,第三方法f3可以包括首尾连接、倒序连接等方式,参考前述s220的sha256算法,生成针对所有数据表的哈希值h。
[0087]
s180:获取第一数据库的数据对象类型,例如存储过程、函数等,根据目标迁移数据库的转换规则对数据对象类型进行合理转换,获取各数据对象类型的个数m
l
,其中,l为按照ascii码表顺序排列的第l个对象类型。例如,第一数据库为mysql数据库,第二数据库为瀚高数据库,原mysql数据库中的“存储过程”在瀚高数据库中以“函数”的方式存在,则“存储过程”个数不计算,迁移后“函数”个数为迁移前“存储过程”个数与迁移前“函数”个数之和。
[0088]
s190:使用第四方法f4将哈希值h和各数据库对象类型个数组成第四字符串m=f4(h,m1,m2,m3,...,m
l
,...),并进行哈希转换,并将发生转换的对象类型的下标依次记录在一个数组m[]中,第四方法f4可以包括首位放置哈希值h,后面连接对象类型的个数m
l
,且m
l
按照首尾连接、倒序连接等方式,例如,md5算法等,得到针对数据库的哈希值r。
[0089]
如图2所示,是本实施例提供的一种第二数据库的哈希值计算方法。具体包括以下步骤。
[0090]
s210:针对迁移后的数据库,例如第二数据库,同样按照s110的预设顺序,获取数据表。
[0091]
s220:将当前表的每列数据的字段名称a'1、字段类型a'2、字段值a'3和该列的索引个数a'4等,使用第一方法f1进行字符串连接,第一方法f1可以包括首尾连接、倒序连接等方式,得到第一字符串a'=f1(a'1,a'2,a'3,...,a'i,...),其中,i表示当前列的第i个处理对象。
[0092]
s230:将第一字符串a'进行哈希转换,在本实施例中利用sha256算法,生成一个针对列的哈希值b'j,其中,j表示第j列。
[0093]
s240:根据数据表中列的排列顺序,判断当前处理的列是否为最后一列:若是,执行步骤s250;若否,执行步骤s220。
[0094]
s250:将当前表的所有列的哈希值b'j,使用第二方法f2组成第二字符串b'=f2(b'1,b'2,b'3,...,b'j,...),第二方法f2可以包括首尾连接、倒序连接等方式,并进行哈希转换,参考前述的sha256算法,生成一个针对表的hash值t'k,其中,k表示按照预设顺序排列的第k张表。
[0095]
s260:根据预设顺序,判断当前处理的表是否为最后一张表:若是,执行步骤s270;若否,按照步骤s210中的顺序获取下一张表。
[0096]
s270:将所有表的哈希值t'k使用第三方法f3组成第三字符串
[0097]
t'=f3(t'1,t'2,t'3,...,t'k,...)并进行哈希转换,第三方法f3可以包括首尾连接、倒序连接等方式,参考前述的sha256算法,生成针对所有数据表的哈希值h'。
[0098]
s280:获取第一数据库的数据对象类型,例如存储过程、函数等,获取各数据对象类型的个数m'
l
,其中,l为按照ascii码表顺序排列的第l个对象类型。
[0099]
s290:使用第四方法f4将哈希值h和各数据库对象类型个数组成一个新的字符串m'=f4(h',m'1,m'2,m'3,...,m'
l
,...),第四方法f4可以包括首位放置哈希值h',后面连接对象类型的个数m'
l
,且m'
l
按照首尾连接、倒序连接等方式,并进行哈希转换,例如,md5算法等,得到针对数据库的哈希值r'。
[0100]
如图3所示,是本实施例提供的一种结果校验的方法。具体包括以下步骤。
[0101]
s310:若r的每个字符和r'的对应位置上的字符相等,则数据库迁移成功,否则,数据库迁移失败,执行步骤s400。
[0102]
如图4所示,是本实施例提供的一种差异点回溯的方法。具体包括以下步骤。
[0103]
s410:查找m和m'中不同的字符,判断不同的字符所属的对象类型。
[0104]
s420:判断h和h'是否不同,若是,则执行步骤s430,若否,第四方法的顺序对比h和
h'中各对应数据对象,或者根据第三数组m[]中的值,优先对比该第三数组中的值对应的数据对象,得出导致数据库迁移失败的数据对象。
[0105]
s430:查找迁移前后t和t'中不同的字符,可以按照第三方法的顺序查找或者根据第二数组t[]中的值,优先对比该第二数组中的值对应的表,根据k值,判断不同的字符所属的数据表。
[0106]
s440:查找第k张表中对应的迁移前后的b和b'中不同的字符,可以按照第一二法的顺序或者根据第一数组b[]中的值,优先对比该数组中的对应的列,根据j值,不同的字符所属的列。
[0107]
s450:查找该列对应的迁移前后的a和a'中不同的字符,根据i值,判断不同的字符所属的字段。
[0108]
s460:继续对比h和h'中各对应数据对象是否存在不同,若是,则得出导致数据库迁移失败的数据对象,若否,则结束。
[0109]
本实施例支持回溯找到导致迁移失败的具体的对象类型、数据表、列、字段,能够有效定位数据迁移失败的问题点。
[0110]
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献