CN107807982A - 一种异构数据库的一致性校验方法及装置 - Google Patents
一种异构数据库的一致性校验方法及装置 Download PDFInfo
- Publication number
- CN107807982A CN107807982A CN201711023740.7A CN201711023740A CN107807982A CN 107807982 A CN107807982 A CN 107807982A CN 201711023740 A CN201711023740 A CN 201711023740A CN 107807982 A CN107807982 A CN 107807982A
- Authority
- CN
- China
- Prior art keywords
- data
- row
- tables
- database
- calculated
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/273—Asynchronous replication or reconciliation
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (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
技术领域
本发明涉及数据库技术领域,尤其涉及一种异构数据库的一致性校验方法及装置。
背景技术
在数据库换库投产过程中,需要在较短时间内对迁移前后两个数据库中的海量数据进行一致性校验。
目前,对数据库间一致性校验的方法包括:首先分别将两数据库中各个数据表的数据导出为文本文件,然后分别对各文本文件依某种排序规则进行排序,最后依次对各表导出的数据文件进行文本比较。
由上述一致性校验过程可以看出,现有的对数据库间一致性校验的方法需要分别将两库中数据导出为文本并进行排序,因此,CPU及存储空间占用极大,并且耗时较长。
发明内容
有鉴于此,本发明提供了一种异构数据库的一致性校验方法及装置,用以解决现有技术中的一致性校验方法CPU及存储空间占用极大,并且耗时较长的问题,其技术方案如下:
一种异构数据库的一致性校验方法,所述方法包括:
利用哈希计算进程计算第一数据库中各个数据表的哈希值,并利用所述哈希计算进程计算第二数据库中各个数据表的哈希值;
将所述第一数据库中各个数据表的哈希值分别与所述第二数据库中对应的数据表的哈希值进行比较;
当所述第一数据库中各个数据表的哈希值与所述第二数据库中对应的数据表的哈希值均相同时,确定所述第一数据库和第二数据库中的数据是完全一致的。
其中,利用所述哈希计算进程计算数据库中各个数据表的哈希值,包括:
在预先创建的表名清单中获取待计算表名,所述待计算表名为一待计算的数据表的表名;
获取与所述待计算表名对应的数据表中所包含的各列的列名以及各列的列类型;
利用所述各列的列名以及各列的列类型按预设的转换规则对所述待计算表名对应的数据表中各列的数据进行格式转换,并将转换后的各列数据以行为单位进行拼接,使每行的各列数据拼接成一字符串;
利用所述哈希计算进程和拼接后每行的字符串计算与所述待计算表名对应的数据表的哈希值;
判断所述表名清单中是否存在待计算表名,如果是,则转入所述在预先创建的表名清单中获取待计算表名这一步骤。
其中,利用所述哈希计算进程和每行的拼接字符串计算与所述待计算表名对应的数据表的哈希值,包括:
读取第一行字符串作为目标字符串;
利用所述哈希计算进程计算所述目标字符串的哈希值;
判断所述目标字符串所在的行是否为最后一行;
如果是,则将所述目标字符串的哈希值确定为与所述待计算表名对应的数据表的哈希值;
如果否,则将所述目标字符串的哈希值与下一行字符串进行拼接,将拼接后的字符串作为新的目标字符串,然后转入所述利用所述哈希计算进程计算所述目标字符串的哈希值这一步骤。
其中,所述利用所述各列的列名以及各列的列类型按预设的转换规则对所述待计算表名对应的数据表中的待转换列的数据进行格式转换,包括:
基于所述各列的列名以及各列的列类型确定待转换列,所述待转换列为列类型为非字符串型的列;
将所述待转换列的数据转换为字符串型数据,基于所述各列的列名将各列的字符串数据中表示空串的数据转换为空串,并去除转换后的字符串右边的空格。
其中,所述哈希计算进程为多个,预先为每个哈希计算进程分配多个数据表;
则当所述哈希计算进程为多个时,所述利用至少一个哈希计算进程计算第一数据库中各个数据表的哈希值,包括:
基于所述为每个哈希计算进程分配数据表的情况,利用所述多个哈希计算进程同时对所述数据库中的多个数据表进行哈希计算。
一种异构数据库的一致性校验装置,所述装置包括:计算单元、比较单元和确定单元;
所述计算单元,用于利用哈希计算进程计算第一数据库中各个数据表的哈希值,并利用所述哈希计算进程计算第二数据库中各个数据表的哈希值;
所述比较单元,用于将所述第一数据库中各个数据表的哈希值分别与所述第二数据库中对应的数据表的哈希值进行比较;
所述确定单元,用于当所述第一数据库中各个数据表的哈希值与所述第二数据库中对应的数据表的哈希值均相同时,确定所述第一数据库和第二数据库中的数据是完全一致的。
其中,所述计算单元包括:第一获取模块、第二获取模块、转换模块、拼接模块、计算模块和判断模块;
所述第一获取模块,用于在预先创建的表名清单中获取待计算表名,所述待计算表名为一待计算的数据表的表名;
所述第二获取模块,用于获取与所述待计算表名对应的数据表中所包含的各列的列名以及各列的列类型;
所述转换模块,用于利用所述各列的列名以及各列的列类型按预设的转换规则对所述待计算表名对应的数据表中各列的数据进行格式转换;
所述拼接模块,用于将转换后的各列数据进行拼接,使每行的各列数据拼接成一字符串;
所述计算模块,用于利用所述哈希计算进程和拼接后每行的字符串计算与所述待计算表名对应的数据表的哈希值;
所述判断模块,用于判断所述表名清单中是否存在待计算表名,如果是,则触发所述第一获取模块在预先创建的表名清单中获取待计算表名。
其中,计算模块包括:读取子模块、计算子模块、判断子模块、确定子模块、拼接子模块;
所述读取子模块,用于读取第一行字符串作为目标字符串;
所述计算子模块,用于利用所述哈希计算进程计算所述目标字符串的哈希值;
所述判断子模块,用于判断所述目标字符串所在的行是否为最后一行;
所述确定子模块,用于当所述目标字符串所在的行为最后一行时,将所述目标字符串的哈希值确定为与所述待计算表名对应的数据表的哈希值;
所述拼接子模块,用于当所述目标字符串所在的行不为最后一行时,将所述目标字符串的哈希值与下一行字符串进行拼接,将拼接后的字符串作为新的目标字符串,然后触发计算子模块利用所述哈希计算进程计算所述目标字符串的哈希值。
其中,所述转换模块包括:确定子模块和转换子模块;
所述确定子模块,用于基于所述各列的列名以及各列的列类型确定待转换列,所述待转换列为列类型为非字符串型的列;
所述转换子模块,用于将所述待转换列的数据转换为字符串型数据,基于所述各列的列名将各列的字符串数据中表示空串的数据转换为空串,并去除转换后的字符串右边的空格。
其中,所述哈希计算进程为多个,预先为每个哈希计算进程分配多个数据表;
所述计算单元,具体用于基于所述为每个哈希计算进程分配数据表的情况,利用所述多个哈希计算进程同时对所述数据库中的多个数据表进行哈希计算。
上述技术方案具有如下有益效果:
本发明提供的异构数据库的一致性校验方法及装置,利用哈希计算进程计算两个数据库中各个数据表的哈希值,通过比较两个数据库中对应数据表的哈希值来校验两个数据库的一致性,由于数据库的一致性校验采用计算哈希值的方式进行,因此缩短了校验过程的时间开销,同时,由于哈希计算过程在数据库中进行,因此,对本地文件系统的空间开销基本为零,即与现有技术中的校验方法相比,本发明提供的异构数据库的一致性校验方法及装置可大幅减少校验的时间和空间开销。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的异构数据库的一致性校验方法的流程示意图;
图2为本发明实施例提供的异构数据库的一致性校验方法中,利用哈希计算进程计算第一数据库中各个数据表的哈希值的实现方式的流程示意图;
图3为本发明实施例提供的异构数据库的一致性校验方法中,利用哈希计算进程和以行为单位拼接而成的字符串计算与待计算表名对应的数据表的哈希值的实现方式的流程示意图;
图4为本发明实施例提供的异构数据库的一致性校验装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种异构数据库的一致性校验方法,请参阅图1,示出了该方法的流程示意图,该方法可以包括:
步骤S101:利用哈希计算进程计算第一数据库中各个数据表的哈希值,并利用哈希计算进程计算第二数据库中各个数据表的哈希值。
步骤S102:将第一数据库中各个数据表的哈希值分别与第二数据库中对应的数据表的哈希值进行比较。
步骤S103:当第一数据库中各个数据表的哈希值与第二数据库中对应的数据表的哈希值均相同时,确定第一数据库和第二数据库中的数据是一致的。
示例性的,第一数据库和第二数据库为异构数据库,假设第一数据库中包括表1、表2、表3、表4和表5,第二数据库中对应的表分别为表1’、表2’、表3’、表4’和表5’,则分别计算第一数据库中各个表的哈希值以及第二数据库中各个表的哈希值,然后比较表1与表1’的哈希值、表2与表2’的哈希值、表3与表3’的哈希值、表4与表4’的哈希值、表5与表5’的哈希值,如果表1与表1’的哈希值相同,且表2与表2’的哈希值相同,且表3与表3’的哈希值相同,且表4与表4’的哈希值相同,且表5与表5’的哈希值相同,则确定第一数据库和第二数据库中的数据是一致的,否则,确定第一数据库和第二数据库中的数据不一致。
请参阅图2,示出了本发明实施例中,利用哈希计算进程计算数据库中各个数据表的哈希值的实现过程的流程示意图,可以包括:
步骤S201:在预先创建的表名清单中获取待计算表名,待计算表名为一待计算的数据表的表名。
在本实施例中,预先创建第一数据库中各个数据表的表名清单,计算数据库中各个数据表的哈希值的过程,即为计算与表名清单中各个表名对应的数据表的哈希值的过程。
步骤S202:获取与待计算表名对应的数据表中所包含的各列的列名以及各列的列类型。
数据库中通常会存在一张系统表,该系统表中存储了数据库中各个数据表的表名以及与表名对应的数据表所包含的各列的列名以及各列的列类型,因此,在获取到待计算表名之后,可基于待计算表名从系统表中获取到与待计算表名对应的数据表中所包含的各列的列名以及各列的列类型。
步骤S203:利用各列的列名以及各列的列类型按预设的转换规则对待计算表名对应的数据表中各列的数据进行格式转换,并将转换后的各列数据进行拼接,使每行的各列数据拼接成一字符串。
两个数据库中数据表中的数据在进行存储时,可能存在格式差异,为了屏蔽两个数据库间的格式差异,提高数据库间一致性校验结果的准确性,本实施例利用各列的列名以及各列的列类型按预设的转换规则对待计算表名对应的数据表中的待转换列的数据进行格式转换,转换过程包括:基于各列的列名以及各列的列类型确定待转换列,其中,待转换列为列类型为非字符串型的列;将待转换列的数据转换为字符串型数据,基于各列的列名将各列的字符串数据中表示空串的数据转换为空串,并去除转换后的字符串右边的空格。
在一种可能的实现方式中,可创建自动获取各表各列名和各列类型的游标cur_1,并对各列数据进行格式转换。
以sybase数据库为例,游标cur_1通过关联读取系统表中的syscolumns和systypes自动获取列名和列类型,将syscolumns表的id作为待计算表名,并通过usertype字段将syscolumns和systypes进行关联,从而实现对表中各列的列类型和列名的自动获取。游标的输出包括三项,分别为列所属表对象的id,列id,格式转换后的列名。
为了便于哈希计算,需要将非字符串类型的数据转换为字符串类型。示例性的,对于列类型为数值类型的列,可通过convert函数直接将该列的数据转换为varchar类型,列名格式为:convert(varchar(16384),lv_disrate)。
可以理解的是,在字符串类型的列中,可能存在一些空串,空串在两个数据库中的存储形式可能不同,例如在第一数据库中,空串用“NULL”表示,而在第二数据库中,空串所在的位置直接就是空,即空串的位置什么也不写。为了确保两个数据库中数据格式的一致性,需要将两个数据库中空串的表示方式进行统一,例如,可将“NULL”转换为空串,并舍弃字符串右边空格。列名格式为:rtrim(isnull(列名,”))。
在本实施例中,字符串的拼接可通过定义存储过程sp_getcolnames实现,定义变量allcolnames用于存储拼接字符串,将游标cur_1中的列名通过“+”操作进行循环拼接并将结果保存到allcolnames中,从而实现列名拼接并生成拼接字符串。示例性的,数据表包括5列,列名分别为A、B、C、D、E,在利用游标cur_1将列名通过“+”操作进行循环拼接的过程为获取列名“A”,相当于同时获取到了“A”列的数据,获取列名“B”,并将“B”与“A”进行“+”操作,在执行“A+B”时,将“A”列数据与“B”列数据进行拼接,以此类推,继续执行“A+B+C”,将“C”列数据与前两列数据(即“A”列数据和“B”列数据)进行拼接后的数据拼接,重复上述过程直至完成“E”列数据的拼接。
示例性的,格式转换后的数据表为:
表1
A | B | C | D | E |
aav | bbv | ccv | ddv | eev |
aaw | bbw | ccw | ddw | eew |
aax | bbx | ccx | ddx | eex |
aay | bby | ccy | ddy | eey |
aaz | bbz | ccz | ddz | eez |
将各列数据进行拼接后得到5行拼接字符串:
表2
aavbbvccvddveev |
aawbbwccwddweew |
aaxbbxccxddxeex |
aaybbyccyddyeey |
aazbbzcczddzeez |
步骤S204:利用哈希计算进程和拼接后的每行字符串计算与待计算表名对应的数据表的哈希值。
步骤S205:判断表名清单中是否存在待计算表名,如果是,则转入步骤S201。
请参阅图3,示出了利用哈希计算进程和拼接后的每行字符串计算与待计算表名对应的数据表的哈希值的实现方式的流程示意图,可以包括:
步骤S301:读取第一行字符串作为目标字符串。
步骤S302:利用哈希计算进程计算目标字符串的哈希值。
步骤S303:判断目标字符串所在的行是否为最后一行,如果是,则执行步骤S304a,否则,执行步骤S304b。
步骤S304a:将目标字符串的哈希值确定为与待计算表名对应的数据表的哈希值。
步骤S304b:将目标字符串的哈希值与下一行字符串进行拼接,将拼接后的字符串作为新的目标字符串,然后转入步骤S302。
需要说明的是,第一数据库中各个数据表哈希值的计算和第二数据库中各个数据表哈希值的计算均采用上述过程实现。
下面以表2示出的拼接字符串为例,对计算与待计算表名对应的数据表的哈希值的过程进行详细说明:
计算第1行字符串aavbbvccvddveev的哈希值,记为V;
将第一行字符串的哈希值V与第2行字符串aawbbwccwddweew进行拼接,得到拼接后的字符串:Vaawbbwccwddweew;
计算拼接后的字符串Vaawbbwccwddweew的哈希值,记为W;
将计算出的哈希值W与第3行字符串aaxbbxccxddxeex进行拼接,得到拼接后的字符串:Waaxbbxccxddxeex;
计算拼接后的字符串Waaxbbxccxddxeex的哈希值,记为X;
将计算出的哈希值X与第4行字符串aaybbyccyddyeey进行拼接,得到拼接后的字符串:Xaaybbyccyddyeey;
计算拼接后的字符串Xaaybbyccyddyeey的哈希值,记为Y;
将计算出的哈希值Y与第5行字符串aazbbzcczddzeez进行拼接,得到拼接后的字符串:Yaazbbzcczddzeez;
计算拼接后的字符串Yaazbbzcczddzeez哈希值,记为Z;
由于字符串Yaazbbzcczddzeez为最后一行字符串,因此将哈希值Z确定为与待计算表名对应的数据表的哈希值。
在一种可能的具体实现方式中,可定义游标cur_hash用于读取待计算各行数据,其中,${TABLECOLUMNS}即上文获取得到的拼接字符串:Declare cur_hash cursor forselect${TOPRows}${TABLECOLUMNS}from${TABLENAME}for read only
创建存储过程sp_hash_${TABLENAME}(其中${TABLENAME}为表名参数),定义变量rowdata用于存储列名拼接字符串,定义变量lastrowhash用于存储上一行哈希值,该变量初始值为空。通过循环读取游标,将上一行的哈希值lastrowhash与拼接字符串rowdata进行拼接并计算哈希值,将新的哈希值保存到lastrowhash,依次类推直到最后一行,即可获得该表的哈希值。
另外,为了提高对数据表的哈希值的计算,本发明实施例提供的异构数据库的一致性校验方法,利用Spark环境的高并发和高性能特性,预先设置多个哈希计算进程,并预先为每个哈希计算进程分配多个数据表,当计算数据库中各个数据表的哈希值时,用多个哈希计算进程同时对数据库中的多个数据表进行哈希计算。
示例性的,数据库中包括100张数据表,可设置5个哈希计算进程,分别为哈希计算进程1、哈希计算进程2、哈希计算进程3、哈希计算进程4和哈希计算进程5,其中,将100张数据表中的第1-20个数据表分配给哈希计算进程1,将第21-40个数据表分配给哈希计算进程2,将第41-60个数据表分配给哈希计算进程3,将第61-80个数据表分配给哈希计算进程4,将第81-100个数据表分配给哈希计算进程5,在对数据库中的数据表进行哈希计算时,同时调用5个哈希计算进程进行计算,对于每个哈希计算进程而言,其逐个对为其分配的数据表进行哈希计算。
本发明实施例提供的异构数据库的一致性校验方法,利用哈希计算进程计算两个数据库中各个表的哈希值,通过比较两个数据库中对应数据表的哈希值来校验两个数据库的一致性,由于数据库的一致性校验采用计算哈希值的方式进行,因此缩短了校验过程的时间开销,由于哈希计算过程在数据库总进行,因此,对本地文件系统的空间开销基本为零,另外,基于Spark环境的高性能和高并发特性,采用多个哈希计算进程同时计算多个数据表的哈希值,进一步缩短了校验过程的时间开销。即,通过哈希值的比较实现异构数据库间一致性校验,可大幅减少校验的时间和空间开销,例如,对于两个包含1831张业务表和1108张字典表的数据库,数据量大小约2T,现有的文本比较方式需耗时160小时以上,且需占用本地空间20T左右,而采用本发明提供的哈希值校验方式,耗时可缩短至4小时左右,空间消耗可忽略不计,性能提升40倍左右。另外,本发明实施例提供的校验方法实现了对数据库中各数据表逐行逐字段的全面覆盖计算,确保了校验结果的全面性和精确性。
与上述方法相对应,本发明实施例还提供了一种异构数据库的一致性校验装置,请参阅图4,示出了该装置的结构示意图,该装置包括:计算单元401、比较单元402和确定单元403。其中:
计算单元401,用于利用哈希计算进程计算第一数据库中各个数据表的哈希值,并利用哈希计算进程计算第二数据库中各个数据表的哈希值。
比较单元402,用于将第一数据库中各个数据表的哈希值分别与第二数据库中对应的数据表的哈希值进行比较;
确定单元403,用于当第一数据库中各个数据表的哈希值与第二数据库中对应的数据表的哈希值均相同时,确定第一数据库和第二数据库中的数据是完全一致的。
在本实施例中,计算单元401可以包括:第一获取模块、第二获取模块、转换模块、拼接模块、计算模块和判断模块。其中:
第一获取模块,用于在预先创建的表名清单中获取待计算表名,待计算表名为一待计算的数据表的表名。
第二获取模块,用于在系统表中获取与待计算表名对应的数据表中所包含的各列的列名以及各列的列类型。
转换模块,用于利用各列的列名以及各列的列类型按预设的转换规则对待计算表名对应的数据表中各列的数据进行格式转换。
拼接模块,用于转换后的各列数据进行拼接,使每行的各列数据拼接成一字符串。
计算模块,用于利用哈希计算进程和拼接后每行的字符串计算与待计算表名对应的数据表的哈希值。
判断模块,用于判断表名清单中是否存在待计算表名,如果是,则触发第一获取模块在预先创建的表名清单中获取待计算表名。
进一步的,计算模块可以包括:读取子模块、计算子模块、判断子模块、确定子模块和拼接子模块。其中:
读取子模块,用于读取第一行字符串作为目标字符串。
计算子模块,用于利用哈希计算进程计算目标字符串的哈希值。
判断子模块,用于判断目标字符串所在的行是否为最后一行。
确定子模块,用于当目标字符串所在的行为最后一行时,将目标字符串的哈希值确定为与待计算表名对应的数据表的哈希值。
拼接子模块,用于当目标字符串所在的行不为最后一行时,将目标字符串的哈希值与下一行字符串进行拼接,将拼接后的字符串作为新的目标字符串,然后触发计算子模块利用哈希计算进程计算目标字符串的哈希值。
进一步的,转换模块可以包括:确定子模块和转换子模块。
确定子模块,用于基于各列的列名以及各列的列类型确定待转换列的列名,待转换列为列类型为非字符串型的列。
转换子模块,用于将待转换列的数据转换为字符串型数据,基于各列的列名将各列的字符串数据中表示空串的数据转换为空串,并去除转换后的字符串右边的空格。
在上述实施例中,哈希计算进程可以为多个,预先为每个哈希计算进程分配多个数据表。
则计算单元,具体用于基于为每个哈希计算进程分配数据表的情况,利用多个哈希计算进程同时对数据库中的多个数据表进行哈希计算。
本发明实施例提供的异构数据库的一致性校验装置,利用哈希计算进程计算两个数据库中各个表的哈希值,通过比较两个数据库中对应数据表的哈希值来校验两个数据库的一致性,由于数据库的一致性校验采用计算哈希值的方式进行,因此缩短了校验过程的时间开销,由于哈希计算过程在数据库总进行,因此,对本地文件系统的空间开销基本为零,另外,基于Spark环境的高性能和高并发特性,采用多个哈希计算进程同时计算多个数据表的哈希值,进一步缩短了校验过程的时间开销。即,通过哈希值的比较实现异构数据库间一致性校验,可大幅减少校验的时间和空间开销,例如,对于某包含1831张业务表和1108张字典表的数据库,数据量大小约2T,现有的文本比较方式需耗时160小时以上,且需占用本地空间20T左右,而采用本发明实施例提供的装置进行校验,耗时可缩短至4小时左右,空间消耗可忽略不计,性能提升40倍左右。另外,本发明实施例提供的校验装置实现了对数据库中各数据表逐行逐字段的全面覆盖计算,确保了校验结果的全面性和精确性。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和设备,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种异构数据库的一致性校验方法,其特征在于,所述方法包括:
利用哈希计算进程计算第一数据库中各个数据表的哈希值,并利用所述哈希计算进程计算第二数据库中各个数据表的哈希值;
将所述第一数据库中各个数据表的哈希值分别与所述第二数据库中对应的数据表的哈希值进行比较;
当所述第一数据库中各个数据表的哈希值与所述第二数据库中对应的数据表的哈希值均相同时,确定所述第一数据库和第二数据库中的数据是完全一致的。
2.根据权利要求1所述的异构数据库的一致性校验方法,其特征在于,利用所述哈希计算进程计算数据库中各个数据表的哈希值,包括:
在预先创建的表名清单中获取待计算表名,所述待计算表名为一待计算的数据表的表名;
获取与所述待计算表名对应的数据表中所包含的各列的列名以及各列的列类型;
利用所述各列的列名以及各列的列类型按预设的转换规则对所述待计算表名对应的数据表中各列的数据进行格式转换,并将转换后的各列数据进行拼接,使每行的各列数据拼接成一字符串;
利用所述哈希计算进程和拼接后每行的字符串计算与所述待计算表名对应的数据表的哈希值;
判断所述表名清单中是否存在待计算表名,如果是,则转入所述在预先创建的表名清单中获取待计算表名这一步骤。
3.根据权利要求2所述的异构数据库的一致性校验方法,其特征在于,所述利用所述哈希计算进程和拼接后每行的字符串计算与所述待计算表名对应的数据表的哈希值,包括:
读取第一行字符串作为目标字符串;
利用所述哈希计算进程计算所述目标字符串的哈希值;
判断所述目标字符串所在的行是否为最后一行;
如果是,则将所述目标字符串的哈希值确定为与所述待计算表名对应的数据表的哈希值;
如果否,则将所述目标字符串的哈希值与下一行字符串进行拼接,将拼接后的字符串作为新的目标字符串,然后转入所述利用所述哈希计算进程计算所述目标字符串的哈希值这一步骤。
4.根据权利要求2所述的异构数据库的一致性校验方法,其特征在于,所述利用所述各列的列名以及各列的列类型按预设的转换规则对所述待计算表名对应的数据表中的待转换列的数据进行格式转换,包括:
基于所述各列的列名以及各列的列类型确定待转换列,所述待转换列为列类型为非字符串型的列;
将所述待转换列的数据转换为字符串型数据,基于所述各列的列名将各列的字符串数据中表示空串的数据转换为空串,并去除转换后的字符串右边的空格。
5.根据权利要求1-4中任意一项所述的异构数据库的一致性校验方法,其特征在于,所述哈希计算进程为多个,预先为每个哈希计算进程分配多个数据表;
则当所述哈希计算进程为多个时,所述利用至少一个哈希计算进程计算第一数据库中各个数据表的哈希值,包括:
基于所述为每个哈希计算进程分配数据表的情况,利用所述多个哈希计算进程同时对所述数据库中的多个数据表进行哈希计算。
6.一种异构数据库的一致性校验装置,其特征在于,所述装置包括:计算单元、比较单元和确定单元;
所述计算单元,用于利用哈希计算进程计算第一数据库中各个数据表的哈希值,并利用所述哈希计算进程计算第二数据库中各个数据表的哈希值;
所述比较单元,用于将所述第一数据库中各个数据表的哈希值分别与所述第二数据库中对应的数据表的哈希值进行比较;
所述确定单元,用于当所述第一数据库中各个数据表的哈希值与所述第二数据库中对应的数据表的哈希值均相同时,确定所述第一数据库和第二数据库中的数据是完全一致的。
7.根据权利要求6所述的异构数据库的一致性校验装置,其特征在于,所述计算单元包括:第一获取模块、第二获取模块、转换模块、拼接模块、计算模块和判断模块;
所述第一获取模块,用于在预先创建的表名清单中获取待计算表名,所述待计算表名为一待计算的数据表的表名;
所述第二获取模块,用于获取与所述待计算表名对应的数据表中所包含的各列的列名以及各列的列类型;
所述转换模块,用于利用所述各列的列名以及各列的列类型按预设的转换规则对所述待计算表名对应的数据表中各列的数据进行格式转换;
所述拼接模块,用于将转换后的各列数据进行拼接,使每行的各列数据拼接成一字符串;
所述计算模块,用于利用所述哈希计算进程和拼接后每行的字符串计算与所述待计算表名对应的数据表的哈希值;
所述判断模块,用于判断所述表名清单中是否存在待计算表名,如果是,则触发所述第一获取模块在预先创建的表名清单中获取待计算表名。
8.根据权利要求7所述的异构数据库的一致性校验装置,其特征在于,所述计算模块包括:读取子模块、计算子模块、判断子模块、确定子模块、拼接子模块;
所述读取子模块,用于读取第一行字符串作为目标字符串;
所述计算子模块,用于利用所述哈希计算进程计算所述目标字符串的哈希值;
所述判断子模块,用于判断所述目标字符串所在的行是否为最后一行;
所述确定子模块,用于当所述目标字符串所在的行为最后一行时,将所述目标字符串的哈希值确定为与所述待计算表名对应的数据表的哈希值;
所述拼接子模块,用于当所述目标字符串所在的行不为最后一行时,将所述目标字符串的哈希值与下一行字符串进行拼接,将拼接后的字符串作为新的目标字符串,然后触发计算子模块利用所述哈希计算进程计算所述目标字符串的哈希值。
9.根据权利要求10所述的异构数据库的一致性校验装置,其特征在于,所述转换模块包括:确定子模块和转换子模块;
所述确定子模块,用于基于所述各列的列名以及各列的列类型确定待转换列,所述待转换列为列类型为非字符串型的列;
所述转换子模块,用于将所述待转换列的数据转换为字符串型数据,基于所述各列的列名将各列的字符串数据中表示空串的数据转换为空串,并去除转换后的字符串右边的空格。
10.根据权利要求6-9中任意一项所述的异构数据库的一致性校验装置,其特征在于,所述哈希计算进程为多个,预先为每个哈希计算进程分配多个数据表;
所述计算单元,具体用于基于所述为每个哈希计算进程分配数据表的情况,利用所述多个哈希计算进程同时对所述数据库中的多个数据表进行哈希计算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711023740.7A CN107807982B (zh) | 2017-10-27 | 2017-10-27 | 一种异构数据库的一致性校验方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711023740.7A CN107807982B (zh) | 2017-10-27 | 2017-10-27 | 一种异构数据库的一致性校验方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107807982A true CN107807982A (zh) | 2018-03-16 |
CN107807982B CN107807982B (zh) | 2020-09-18 |
Family
ID=61582878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711023740.7A Active CN107807982B (zh) | 2017-10-27 | 2017-10-27 | 一种异构数据库的一致性校验方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107807982B (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109656964A (zh) * | 2018-12-19 | 2019-04-19 | 北京超萌国际文化有限公司 | 数据比对的方法、装置以及存储介质 |
CN110196880A (zh) * | 2018-06-08 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 异构数据库数据同步方法和装置、存储介质及电子装置 |
CN110209521A (zh) * | 2019-02-22 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 数据校验方法、装置、计算机可读存储介质和计算机设备 |
CN111625540A (zh) * | 2020-05-11 | 2020-09-04 | 福建慧政通信息科技有限公司 | 一种关系型数据库数据同步完整性校验方法和装置 |
CN111737260A (zh) * | 2020-06-19 | 2020-10-02 | 中国银行股份有限公司 | 一种数据复制一致性检查的方法及系统 |
CN112182120A (zh) * | 2020-10-14 | 2021-01-05 | 瀚高基础软件股份有限公司 | 一种数据表处理方法、装置及存储介质 |
CN112286910A (zh) * | 2020-11-23 | 2021-01-29 | 中国农业银行股份有限公司 | 一种数据校验方法及装置 |
CN112347130A (zh) * | 2020-12-11 | 2021-02-09 | 南威软件股份有限公司 | 一种表格数据一致性的比对方法 |
CN112751677A (zh) * | 2021-02-03 | 2021-05-04 | 三和智控(北京)系统集成有限公司 | 一种构建公告链及系统的方法和装置 |
CN113111045A (zh) * | 2021-05-11 | 2021-07-13 | 中国工商银行股份有限公司 | 异构数据比对方法及装置 |
CN113312338A (zh) * | 2021-06-29 | 2021-08-27 | 中国农业银行股份有限公司 | 数据一致性的校验方法、装置、设备、介质及程序产品 |
CN113420081A (zh) * | 2020-07-27 | 2021-09-21 | 阿里巴巴集团控股有限公司 | 数据校验方法、装置、电子设备及计算机存储介质 |
CN114564336A (zh) * | 2022-02-28 | 2022-05-31 | 平凯星辰(北京)科技有限公司 | 数据一致性校验方法、装置、设备以及存储介质 |
CN114676126A (zh) * | 2022-05-30 | 2022-06-28 | 深圳钛铂数据有限公司 | 基于数据库的数据校验方法、装置、设备及存储介质 |
CN115017133A (zh) * | 2022-05-31 | 2022-09-06 | 焦点科技股份有限公司 | 一种基于文件的异构数据库数据一致性校验方法 |
CN115221245A (zh) * | 2022-07-14 | 2022-10-21 | 广州纳指数据智能科技有限公司 | 智能数据采集同步方法、系统及设备 |
CN116150175A (zh) * | 2023-04-18 | 2023-05-23 | 云账户技术(天津)有限公司 | 一种面向异构数据源的数据一致性校验方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164523A (zh) * | 2013-03-19 | 2013-06-19 | 华为技术有限公司 | 数据一致性检查方法、装置及系统 |
CN104731792A (zh) * | 2013-12-19 | 2015-06-24 | 中国银联股份有限公司 | 数据库一致性校验方法及系统、定位数据库差异的方法及系统 |
US20160269439A1 (en) * | 2015-03-09 | 2016-09-15 | International Business Machines Corporation | Deploying a security appliance system in a high availability environment without extra network burden |
CN106790250A (zh) * | 2017-01-24 | 2017-05-31 | 郝孟 | 数据处理、加密、完整性校验方法及身份鉴别方法及系统 |
CN107247749A (zh) * | 2017-05-25 | 2017-10-13 | 阿里巴巴集团控股有限公司 | 一种数据库状态确定方法、一致性验证方法及装置 |
-
2017
- 2017-10-27 CN CN201711023740.7A patent/CN107807982B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103164523A (zh) * | 2013-03-19 | 2013-06-19 | 华为技术有限公司 | 数据一致性检查方法、装置及系统 |
CN104731792A (zh) * | 2013-12-19 | 2015-06-24 | 中国银联股份有限公司 | 数据库一致性校验方法及系统、定位数据库差异的方法及系统 |
US20160269439A1 (en) * | 2015-03-09 | 2016-09-15 | International Business Machines Corporation | Deploying a security appliance system in a high availability environment without extra network burden |
CN106790250A (zh) * | 2017-01-24 | 2017-05-31 | 郝孟 | 数据处理、加密、完整性校验方法及身份鉴别方法及系统 |
CN107247749A (zh) * | 2017-05-25 | 2017-10-13 | 阿里巴巴集团控股有限公司 | 一种数据库状态确定方法、一致性验证方法及装置 |
Cited By (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110196880A (zh) * | 2018-06-08 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 异构数据库数据同步方法和装置、存储介质及电子装置 |
CN110196880B (zh) * | 2018-06-08 | 2023-05-12 | 腾讯科技(深圳)有限公司 | 异构数据库数据同步方法和装置、存储介质及电子装置 |
CN109656964A (zh) * | 2018-12-19 | 2019-04-19 | 北京超萌国际文化有限公司 | 数据比对的方法、装置以及存储介质 |
CN110209521A (zh) * | 2019-02-22 | 2019-09-06 | 腾讯科技(深圳)有限公司 | 数据校验方法、装置、计算机可读存储介质和计算机设备 |
CN110209521B (zh) * | 2019-02-22 | 2022-03-18 | 腾讯科技(深圳)有限公司 | 数据校验方法、装置、计算机可读存储介质和计算机设备 |
CN111625540A (zh) * | 2020-05-11 | 2020-09-04 | 福建慧政通信息科技有限公司 | 一种关系型数据库数据同步完整性校验方法和装置 |
CN111737260A (zh) * | 2020-06-19 | 2020-10-02 | 中国银行股份有限公司 | 一种数据复制一致性检查的方法及系统 |
CN113420081A (zh) * | 2020-07-27 | 2021-09-21 | 阿里巴巴集团控股有限公司 | 数据校验方法、装置、电子设备及计算机存储介质 |
CN112182120A (zh) * | 2020-10-14 | 2021-01-05 | 瀚高基础软件股份有限公司 | 一种数据表处理方法、装置及存储介质 |
CN112286910A (zh) * | 2020-11-23 | 2021-01-29 | 中国农业银行股份有限公司 | 一种数据校验方法及装置 |
CN112286910B (zh) * | 2020-11-23 | 2024-04-12 | 中国农业银行股份有限公司 | 一种数据校验方法及装置 |
CN112347130A (zh) * | 2020-12-11 | 2021-02-09 | 南威软件股份有限公司 | 一种表格数据一致性的比对方法 |
CN112751677A (zh) * | 2021-02-03 | 2021-05-04 | 三和智控(北京)系统集成有限公司 | 一种构建公告链及系统的方法和装置 |
CN113111045A (zh) * | 2021-05-11 | 2021-07-13 | 中国工商银行股份有限公司 | 异构数据比对方法及装置 |
CN113312338A (zh) * | 2021-06-29 | 2021-08-27 | 中国农业银行股份有限公司 | 数据一致性的校验方法、装置、设备、介质及程序产品 |
CN114564336A (zh) * | 2022-02-28 | 2022-05-31 | 平凯星辰(北京)科技有限公司 | 数据一致性校验方法、装置、设备以及存储介质 |
CN114676126A (zh) * | 2022-05-30 | 2022-06-28 | 深圳钛铂数据有限公司 | 基于数据库的数据校验方法、装置、设备及存储介质 |
CN115017133A (zh) * | 2022-05-31 | 2022-09-06 | 焦点科技股份有限公司 | 一种基于文件的异构数据库数据一致性校验方法 |
CN115017133B (zh) * | 2022-05-31 | 2024-04-26 | 焦点科技股份有限公司 | 一种基于文件的异构数据库数据一致性校验方法 |
CN115221245A (zh) * | 2022-07-14 | 2022-10-21 | 广州纳指数据智能科技有限公司 | 智能数据采集同步方法、系统及设备 |
CN116150175A (zh) * | 2023-04-18 | 2023-05-23 | 云账户技术(天津)有限公司 | 一种面向异构数据源的数据一致性校验方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107807982B (zh) | 2020-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107807982A (zh) | 一种异构数据库的一致性校验方法及装置 | |
US10705734B2 (en) | Expanding variable sub-column widths as needed to store data in memory | |
CN103514243B (zh) | 时空数据管理系统和时空数据管理方法 | |
CN103902653B (zh) | 一种构建数据仓库表血缘关系图的方法和装置 | |
CN105630803B (zh) | 文档型数据库建立索引的方法和装置 | |
CN112395293B (zh) | 分库分表方法、分库分表装置、分库分表设备及存储介质 | |
CN105550225A (zh) | 索引构建方法、查询方法及装置 | |
CN106598999A (zh) | 一种计算文本主题归属度的方法及装置 | |
CN112074818A (zh) | 用于能够在区块链网络中访问过去的交易的方法及节点 | |
CN102024046A (zh) | 数据重复性校验方法和装置及系统 | |
CN108009296A (zh) | 一种基于Hbase的SQL查询方法、系统及相关装置 | |
CN107070645A (zh) | 比较数据表的数据的方法和系统 | |
CN106547870A (zh) | 数据库的分表方法及装置 | |
Kusiak | Branching algorithms for solving the group technology problem | |
CN102867049A (zh) | 一种基于单词查找树实现的汉语拼音快速分词方法 | |
CN105005543A (zh) | 一种接口生成装置及方法 | |
CN109117475A (zh) | 一种文本改写的方法以及相关设备 | |
CN105574031A (zh) | 用于数据库索引的方法和系统 | |
CN112579710A (zh) | 数据仓库管理方法、装置、电子设备及存储介质 | |
US6904584B2 (en) | Method and system for placing logic nodes based on an estimated wiring congestion | |
CN115130043B (zh) | 基于数据库的数据处理方法、装置、设备及存储介质 | |
CN104750834A (zh) | 一种规则的存储方法、匹配方法及装置 | |
CN104572687A (zh) | 微博传播的关键用户识别方法和装置 | |
CN110019229B (zh) | 数据库配置系统 | |
CN111190869A (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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20221110 Address after: 100005 No. 69, inner main street, Dongcheng District, Beijing, Jianguomen Patentee after: AGRICULTURAL BANK OF CHINA Patentee after: Agricultural Bank of China Financial Technology Co.,Ltd. Address before: 100005 No. 69, inner main street, Dongcheng District, Beijing, Jianguomen Patentee before: AGRICULTURAL BANK OF CHINA |