一种数据库表内容快速比对系统的制作方法

文档序号:29124982发布日期:2022-03-04 23:40阅读:216来源:国知局
一种数据库表内容快速比对系统的制作方法

1.本发明涉及java web应用开发及sql数据库表领域,尤其涉及一种数据库表内容快速比对系统。


背景技术:

2.在数据库中,两个表内容的比对在当前的数据库迁移和数据库表内容比较差异中具有非常重要的作用,特别针对于百万,千万甚至上亿的数据量的表。当前许多市面上的数据库比对工具,比较数据库中的两张相同表结构的表内容的方法,大致通过sql语法组合拼接sql语句进行全量对比,这种方式虽然可以保证比对的高正确率,但是受制于表结构的统一,不能够对于两张不同表结构的内容进行比较,其次不能自由选择比对表各自所需要的字段,使用起来十分不便,往往不能满足用户比对的需求。其次,对于呈千万级别或者上亿级别的两个表的数据对比,效率十分低下,造成用户体验不佳。


技术实现要素:

3.为了解决以上技术问题,本发明提供了一种数据库表内容快速比对系统,旨在保证两个表内容全量对比的基础之上,解决两表结构不统一和比对速度低下的问题,实现一种保持高正确率而快速进行表内容比对的目标。
4.本发明的技术方案是:
5.本发明提供了一种数据库表内容快速比对系统,目的是在保证两个表内容全量对比的基础之上,应用java web开发,比对用户所选择的数据内容,提高用户体验,解决两表结构不统一和大量数据下比对速度低下的难题。
6.在交互过程中包含三个方面:html页面,默认数据库,应用服务器层。
7.其中,
8.html页面即网页前端页面,主要用途是系统和用户的交互。
9.默认数据库是服务器层后端所默认链接的数据库,主要用途是建立目标表crc32存储表和源表crc32存储表(crc32存储表的数据结构设计为:库表地址名,表名,批次号,创建时间,任务名称,主键最小值,主键最大值,crc32值),并用来存储源表和目标表的计算结果及相关。
10.应用服务层的主要工作模块是数据库的链接,表名字段名的获取,controller层的异步并行计算crc32值,数据库的创建插入和具体内容差异逻辑上的比较。
11.进一步的,
12.html页面输入源数据库和目标数据库的地址,端口,用户名和密码,将这些信息发送到应用服务器。应用服务器使用jdbc分别连接源数据库和目标数据库,通过本发明拼接的sql分别获取两个数据库每个表名称,并回传到html页面。接下来,html页面上所选择要对比的两个表格会请求应用服务器层,应用服务器层通过拼接好的sql获得源库和数据库的字段名,类型,长度;其中非常重要的一点是获得两个表的主键,通过确保两个主键类型
和长度一致来确保两个表的主键可以唯一确定;将字段名(不包含主键名)回传到html页面,并在主页显示;分别通过html的文本框,先选择源数据库表的字段,然后选择目标数据库表的字段,点击映射按钮,将源表字段名-目标表字段名这种格式添加到第三个html文本框(起名映射关系);将所需要映射的字段逐一添加到映射表文本框;通过数据对比按钮将映射关系发送到应用服务层,应用服务器将映射关系拆解为源表字段和目标表字段。
13.在应用服务层会分别获取两个表唯一的主键,在默认数据库分别创建目标表的crc32存储表和源表的crc32存储表,主要包含主键id,表名称,批量字号,最小主键,最大主键,crc32值这些字段。将用户所选择的目标表和源表所映射的字段对应的数据先通过主键id的字典顺序进行数据的升序排序,然后使用sql限制数据条数(数量由用户自己限定),分批取出(实际使用中其取出速度受限于sql所部署的机器性能和sql数据库的版本,本系统的get_checksum函数通过sql语句进行数据限制取出测试,循环运行10000次,依次记录取出对应次数的数据量所使用的时间,并存list表,最后会相互比较获得速度最快的次数即数据条数。这里给予一个参考值:2000条,追求性能者可应用本系统get_checksum函数进行计算,并自己限定),计算本批的crc32的值,并且记录下这一批2000条数据计算组的最大编号作为最大主键。由于计算目标表和源表的crc32的值和插入数据是异步执行且同时进行的,所以相对应的crc32值,主键最小值,记录的最大主键和批量字号等会同时插入到所对应的crc32存储表。计算插入完成后,由于在计算crc32值前已经根据主键id进行了升序排序,所以在保证顺序的情况下可以分别取目标表和源表的crc32值进行比对,如若目标表和源表的crc32值比对完成全部相同,则返回此次比对结果(即此次比对,两个表的数据完全相同),若值不同,记录不同值的这条数据相关信息(即源表和目标表数据此条crc32值不同的完整一条)。
14.当得到crc32值不同的完整序列后,开始比对挖掘出某条具体数据不同。需要首先获得目标表和源表两者较大的主键,并且获取目标表和源表的所有字段名,通过上面比对得到的crc32值不同的数据得到所记录的表名,开始值,最后值。分别再次逐条计算开始值和最后值这个范围内每一行数据的crc32的值(这个过程和上面第一次异步并行计算的过程相同)。最后通过每一条数据的crc32值是否相等判断出具体目标表和源表不同的数据。
15.本发明的有益效果是
16.本发明与现有技术相比,能够自由选择字段进行匹配,将数据以2000条一组,多线程异步同时批量计算crc32值,解决了两表结构不统一和大数据下比对速度低下的难题。通过使用可以发现,全量对比使得比对准确率达到100%。而从数据来看,1w条数据的对比用时在9s左右,10w条数据的对比用时约在16s左右,50w条数据的对比用时在49s左右,100w条数据的对比用时在110s左右,其比对速度大幅度提高。
附图说明
17.图1是本发明的工作流程示意图。
具体实施方式
18.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是
本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
19.本发明提供了一种数据库表内容快速比对系统,由html页面,默认数据库,应用服务器层相结合,批量计算crc32值,异步执行存储,全量比较来达到大量数据的快速比对出具体差异内容。
20.由html页面进行连接原数据库和目标数据库,选择目标表和源表,映射对应字段,提高了用户体验,满足对比表的结构不同。
21.以2000为一组进行crc32值的批量计算,得到crc32值,主键最小值及最大值,提高批量计算的效率。
22.由默认数据库创建目标表的crc32存储表和源表的crc32存储表,然后异步执行,同时存储到相应表,大幅度提高计算存储的速度。
23.把crc32值进行主键最小值与最大值差的同范围比较,逐条对比查出具体差异。
24.如图1所示,以比较出具体某条数据不同为例说明技术原理,具体说明如下:
25.1、用户在html页面连接目标表和源表,并选择字段映射,发送应用服务器层相应信息。
26.2、应用服务器层分批次计算源表和目标表crc32值,同时将数据存储到默认数据库。
27.3、在默认数据库端取出相对应的crc32值进行比较
28.4、返回比较结果,若结果正确直接返回数据相同给html页面,若不正确进行第五步
29.5、将不正确的结果拿出来,计算最小值和最大值范围内的crc32值,同时将数据存储到默认数据库。
30.6、在默认数据库端逐条取出相对应的crc32值进行比较
31.7、返回具体两表不一样的数据给应用服务器层
32.8、应用服务器层返回具体比对结果给html页面显示。
33.以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1