一种基于数据库B树快速对比数据的方法和装置与流程

文档序号:26050460发布日期:2021-07-27 15:25阅读:72来源:国知局
本发明属于数据处理
技术领域
:,更具体地,涉及一种基于数据库b树快速对比数据的方法和装置。
背景技术
::随着数据库技术的发展,越来越多的数据库被应用在各行各业,应用会同时使用多个数据库,这些数据库可能是同构的,也可能是异构的,很多情况下应用需要对这些不同数据库上的表数据进行对比,需要一种高效快速的数据库数据对比解决方案。现在传统的对比工具在对比第一表结构和第二表结构带主键的数据时,需要分别对第一表结构和第二表结构数据先排序再查询,对查询出的每条数据做处理,先对主键列进行md5值计算,然后对剩余非主键列进行md5值计算,计算完成后,按照主键列md5值为key,非主键列md5值为value的形式存储在内存中缓冲区中,第一表结构和第二表结构计算后的数据分开存放,对比时先把缓冲区数据按照key值大小排序,排序完毕后从不同的缓冲区中遍历取数据进行一对一的对比。这种方式在获取第一表结构和第二表结构对比数据时,需要排序查询,按主键的顺序来搜取两个表的数据进行逐一的对比,如果两边数据抽取的速度不一致,还需要考虑速度同步或是数据缓存的机制,整个过程会非常和复杂和低效,可靠性不高。对数据库的性能影响比较大,对比数据量越大查询效率越低,内存中key_value形式的缓冲数据也越多,内存消耗就越大,性能越低。而且内存中不同来源的key_value形式的数据在对比时需要遍历各自数据对比,是一对一对比,不能并发对比,对比速率不高。若采用内存结构来组织map映射的对比方式,在构造map时会有先后的顺序,需要先提取一边的数据来先构造map,完成以后再提取另一边的数据映射对比,这种机制效率低,整个还需要消耗大量的内存,无法适应表中存在大量数据的对比需求。鉴于此,克服该现有技术所存在的缺陷是本
技术领域
:亟待解决的问题。技术实现要素:针对现有技术的以上缺陷或改进需求,本发明提供了一种基于数据库b树快速对比数据的方法和装置,其目的在于通过在对比工具中内置关系数据库,使用数据库底层中的b树解决数据对比问题,从而提高数据库的查询效率,降低内存消耗,由此解决传统对比工具的查询效率低,内存消耗大的技术问题。为实现目的,按照本发明的一个方面,提供了一种基于数据库b树对比数据库数据的方法,所述方法包括:启动对比数据库,在所述对比数据库中配置对比数据各来源表之间的对比关系,按照数据来源,将对比表分为第一表结构和第二表结构,在对比数据库中创建一张带有聚集主键的表t,所述表t结构根据第一表结构和第二表结构中是否带有主键区分成第一表t和第二表t;对比数据库抽取和遍历第一表结构和第二表结构中每一条数据,在遍历数据时计算每一条数据的数值,计算完成后将数据结果封装成消息发送至对比数据库;对比数据库解析所述封装消息并还原数据结果,将最先完成的第一条数据结果直接插入表t中,后期每条计算完成的数据结果通过预设的对比方法与表t中的数据进行对比后,对比数据库操作表t底层b树上对应的叶子节点,依照对比规则对表t进行数据插入、数据删除或数据更新操作;查询对比数据库中的表t,得到数据来源数据库中第一表结构和第二表结构数据对比的结果。优选地,所述启动对比数据库,在所述对比数据库中配置对比数据各来源表之间的对比关系,按照数据来源,将对比表分为第一表结构和第二表结构,在对比数据库中创建一张带有聚集主键的第一表t,若第一表结构和第二表结构均带有主键,所述第一表t的结构为:tablet(pk_md5_valuechar,l_nonpk_md5_valuechar,r_nonpk_md5_valuechar,l_rowidchar,r_rowidchar,clusterprimarykey(pk_md5_value));其中:pk_md5_value是用来存放第一表结构或者第二表结构主键列md5值;l_nonpk_md5_value是用来存放第一表结构非主键列md5值;r_nonpk_md5_value是用来存放第二表结构非主键列md5值;l_rowid是用来存放第一表结构数据的rowid;r_rowid是用来存放第二表结构数据的rowid;rowid是标识对比数据库中记录数据结果物理位置的一个id。优选地,所述对比数据库抽取和遍历第一表结构和第二表结构中每一条数据,在遍历数据时计算每一条数据的数值,计算完成后将数据结果封装成消息发送至对比数据库,其中,具体计算数据包括:第一表结构和第二表结构每一条数据的主键列md5值;第一表结构和第二表结构每一条数据的非主键列md5值;第一表结构和第二表结构每一条数据对应的rowid值。优选地,所述对比数据库解析所述封装消息并还原数据结果,将最先完成的第一条数据结果直接插入第一表t中,后期每条计算完成的数据结果通过预设的对比方法与第一表t中的数据进行对比后,对比数据库操作第一表t底层b树上对应的叶子节点,依照对比规则对第一表t进行数据插入、数据删除或数据更新操作,其中,具体对比方法包括:若当前数据结果中的主键列md5值与第一表t中已存在的主键列md5值不相同,对比数据库把当前数据结果插入至第一表t底层b树中;若当前数据结果中的主键列md5值与第一表t中已存在的主键列md5值相同,查询第一表t中已存在的主键列md5值对应的非主键列md5值,判断当前数据结果中非主键列md5值和第一表t中已存在的主键列md5值对应的非主键列md5值是否相同,依据预设的判断方法,对比数据库把当前数据结果更新至第一表t底层b树中或从第一表t底层b树中删除当前数据结果。优选地,所述判断当前数据结果中非主键列md5值和第一表t中已存在的主键列md5值对应的非主键列md5值是否相同,依据预设的判断方法,对比数据库把当前数据结果更新至第一表t底层b树中或从第一表t底层b树中删除当前数据结果,其中,具体判断方法包括:若当前数据结果中非主键列md5值和第一表t中已存在的主键列md5值对应的非主键列md5值相同,对比数据库从第一表t底层b树中删除当前数据结果;若当前数据结果中非主键列md5值和第一表t中已存在的主键列md5值对应的非主键列md5值不相同,对比数据库把当前数据结果更新至第一表t底层b树中,同时,在第一表t底层b树中已存在的主键列md5值对应的叶子节点中插入当前数据结果中非主键列md5值和rowid值。优选地,所述启动对比数据库,在所述对比数据库中配置对比数据各来源表之间的对比关系,按照数据来源,将对比表分为第一表结构和第二表结构,在对比数据库中创建一张带有聚集主键的第二表t,若第一表结构和第二表结构均不带有主键,所述第二表t的结构为:tablet(md5_valuechar,l_rowidchar,r_rowidchar,clusterprimarykey(md5_value,l_rowid,r_rowid));其中:md5_value是用来存放第一表结构或者第二表结构全部列md5值;l_rowid是用来存放第一表结构数据的rowid;r_rowid是用来存放第二表结构数据的rowid;rowid是标识对比数据库中记录数据结果物理位置的一个id。优选地,所述对比数据库抽取和遍历第一表结构和第二表结构中每一条数据,在遍历数据时计算每一条数据的数值,计算完成后将数据结果封装成消息发送至对比数据库,其中,具体计算数据包括:第一表结构和第二表结构中每一条数据的全部列md5值;第一表结构和第二表结构每一条数据对应的rowid值。优选地,所述对比数据库解析所述封装消息并还原数据结果,将最先完成的第一条数据结果直接插入第二表t中,后期每条计算完成的数据结果通过预设的对比方法与第二表t中的数据进行对比后,对比数据库操作第二表t底层b树上对应的叶子节点,依照对比规则对第二表t中进行数据插入、数据删除或数据更新操作,其中,具体对比方法包括:若当前数据结果中的全部列md5值与第二表t中已存在的全部列md5值不相同,对比数据库把当前数据结果插入至第二表t底层b树上对应的叶子节点中;若当前数据结果中的全部列md5值与第二表t中已存在的全部列md5值相同,查询第二表t中已存在的所述全部列md5值对应的rowid值是否为空,依据预设的判断方法,对比数据库把当前数据结果更新至第二表t底层b树中或从第二表t底层b树中删除当前数据结果。优选地,所述查询第二表t中已存在的所述全部列md5值对应的rowid值是否为空,依据预设的判断方法,对比数据库把当前数据结果更新至第二表t底层b树中或从第二表t底层b树中删除当前数据结果,其中,具体判断方法包括:若第二表t中已存在的所述全部列md5值及其对应的rowid值至少有一个不为空,对比数据库从第二表t底层b树中删除不为空的数据结果;若第二表t中已存在的所述全部列md5值及其对应的rowid值均为空,对比数据库把当前数据结果插入至第二表t底层b树上对应的叶子节点中。按照本发明的另一方面,提供了一种基于数据库b树对比数据库数据的装置,所述装置包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行权利要求1-9任一所述的基于数据库b树对比数据库数据的方法。总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:本发明采用对比数据库的方式,借助数据库b树的结构来进行数据的对比,由于数据库本身有完善的数据缓存和内存管理机制,所以在大量数据对比时,对比过程中无需考虑内存占用和数据缓存的问题,只需要实现两边数据在b树上操作,md5值高发散的特性也有助于降低两边并行操作时b树的访问冲突,稳定而高效。由于第一表结构或第二表结构的数据在计算完md5值后直接发到数据库,不需要保存中间结果,这将节省大量的内存空间,尤其是对比数据量特别大的时候,内存占用量少的优势就越明显。同时数据库接收到数据后可以批量并行插入到表t中,而且插入过程是直接操作数据库底层b树,省略掉数据库插入、更新和删除操作的中间步骤,效率高,速度快,完美实现了对比工具快速对比的特性。附图说明图1是本发明实施例一提供的一种基于数据库b树对比数据库数据的方法流程图;图2是本发明实施例二提供的一种基于数据库b树对比数据库数据的方法流程图;图3是本发明实施例三提供的一种基于数据库b树对比数据库数据的方法流程图;图4是本发明实施例提供的一种基于数据库b树对比数据库数据的装置结构示意图。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。实施例一:本实施例一提供了一种基于数据库b树快速对比数据的方法,如图1所示,方法包括:在步骤101中,启动对比数据库,在所述对比数据库中配置对比数据各来源表之间的对比关系,按照数据来源,将对比表分为第一表结构和第二表结构,在对比数据库中创建一张带有聚集主键的表t,所述表t结构根据第一表结构和第二表结构中是否带有主键区分成第一表t和第二表t。聚集索引是基于数据行的键值在表内排序和存储数据,每个表结构中只能有一个聚集索引,由于数据行只能按唯一的顺序存储。索引里有很多索引列,聚集主键从索引列中选择一列或者一组列作为主键,主键列的值就是主键值,一个表结构中只能存在一个聚集主键。因为表t中有聚集主键,在查询和删除操作的时候速度非常快,这是创建索引和主键的优势。如果第一表结构和第二表结构均带有主键,创建第一表t;如果第一表结构和第二表结构均不带有主键,创建第二表t。对比是在第一表结构和第二表结构之间,因此不考虑存在第三列表的情况。本实施例一借助对比数据库中b树的结构来进行数据的对比,由于数据库本身有完善的数据缓存和内存管理机制,所以在大量数据对比时,对比过程中无需考虑内存占用和数据缓存的问题,只需要实现两边数据在b树上操作,md5值高发散的特性也有助于降低两边并行操作时b树的访问冲突,稳定而高效。目前,关系数据库表的物理存储都是由b树来组织数据存储的,本实施例一中操作b树是对b树的叶子节点上的数据做删除、更新和插入操作中的一种。关系数据库表的物理存储都是由b树来组织数据存储的,现在市场上通用的关系数据库都是这样来组织数据的。创建表t的时候,就会创建一个对应的b树,数据被b树组织。在步骤102中,对比数据库抽取和遍历第一表结构和第二表结构中每一条数据,在遍历数据时计算每一条数据的数值,计算完成后将数据结果封装成消息发送至对比数据库。本实施例一中,通过对比数据库驱动从第一表结构和第二表结构中抽取数据,遍历数据。根据第一表结构和第二表结构的具体情况创建表t,计算结果按照创建第一表t或第二表t时的预设内容进行计算。抽取和遍历可以同步进行,也可以异步进行,根据生产者或消费者的模式进行选择。对每一条数据抽取和遍历,不需要对查询的数据排序,提升了查询效率,也不需要把计算后的中间结果保存在内存中,节省了内存空间。数据库驱动是数据库厂商提供的驱动,数据库中包括数据库驱动。数据库驱动是软件程序,是一种应用和数据库交互的接口函数的集合,通过数据库驱动,应用可以访问数据库,对数据库中的数据做增删改查操作,常用的数据库驱动有odbc驱动、jdbc驱动、oci、occi、donetprovider驱动等。抽取数据,是调用数据库提供的查询数据接口或者直接执行select查询语句对数据来源数据库中的对比数据进行查询,查询数据的过程就是抽取数据。遍历数据,是对查询出来的数据集合中的每一条数据都循环一次,然后对数据做相应的业务操作,比如本实施例中对表结构中每一条数据进行md5值加密。封装消息是为了提高线程间通信的速度,可以同时把多条数据封装成一条消息,然后发送至对比数据库,效率比逐条发送要高。在步骤103中,对比数据库解析所述封装消息并还原数据结果,将最先完成的第一条数据结果直接插入表t中,后期每条计算完成的数据结果通过预设的对比方法与表t中的数据进行对比后,对比数据库操作表t底层b树上对应的叶子节点,依照对比规则对表t进行数据插入、数据删除或数据更新操作。本实施例一中,向第一表t或第二表t中插入数据的过程中可以并发执行,也可以数据批量插入,充分利用了数据库特性来提高对比的效率。假设,第一表结构的数据首先完成第一条数据的计算,计算完成后将数据结果封装发送至所述对比数据库,对比数据库解析所述封装消息并还原数据结果,将第一表结构的第一条数据结果直接插入第一表t或第二表t中,后期在第一表结构或第二表结构中每条完成计算的数据结果都需要通过预设的对比方法与表t中的数据进行对比,对比完成后,对比数据库操作表t底层b树上对应的叶子节点,依照对比结果对表t中的数据进行插入、删除或更新操作,例如,在数据结果插入第一表t或第二表t前,需要判断数据结果是否与表t中的数据相同,首先需要对比的数据为主键列的md5值或全部列的md5值。在步骤104中,查询对比数据库中的表t,得到数据来源数据库中第一表结构和第二表结构数据对比的结果。最后,第一表t或第二表t中的数据就是第一表结构和第二表结构数据对比后的结果,根据第一表结构rowid的值在第一表结构中查找具体的数据,根据第二表结构rowid的值在第二表结构中查找具体的数据,生成详细的对比报告。实施例二:本发明实施例二从一个较为完整的方法步骤过程阐述本发明实施例一的实现过程,相比较实施例一而言,本发明实施例的过程表现更为完善、也更为实例化。如图2所示,在步骤101中,启动对比数据库,在对比数据库中配置对比数据各来源表之间的对比关系,按照数据来源,将对比表分为第一表结构和第二表结构,若第一表结构和第二表结构均带有主键,在对比数据库中创建一张带有聚集主键的第一表t,结合本发明实施例,还存在一种优选的实现方案,具体的,所述第一表t的结构为:tablet(pk_md5_valuechar,l_nonpk_md5_valuechar,r_nonpk_md5_valuechar,l_rowidchar,r_rowidchar,clusterprimarykey(pk_md5_value));其中:pk_md5_value是用来存放第一表结构或者第二表结构主键列md5值;l_nonpk_md5_value是用来存放第一表结构非主键列md5值;r_nonpk_md5_value是用来存放第二表结构非主键列md5值;l_rowid是用来存放第一表结构数据的rowid;r_rowid是用来存放第二表结构数据的rowid;rowid是标识数据库中一条记录物理位置的一个id。本实施例二中,先对数据来源数据库的第一表结构和第二表结构主键列进行md5值计算,然后对剩余非主键列进行md5值计算,计算完成后,按照主键列md5值为key,非主键列md5值为value的形式存储在内存中缓冲区中,第一表结构或第二表结构的数据在计算完md5值后发送至对比数据库,不需要保存中间结果,这将节省大量的内存空间,尤其是对比数据量特别大的时候,内存占用量少的优势就越明显。同时数据库接收到数据后可以并发执行,也可以数据批量到第一表t中,而且插入过程是直接操作数据库底层b树,省略了很多数据库插入、更新和删除操作的中间步骤,效率高,速度快,完美实现了对比工具快速对比的特性。本实施例二中,假设,第一表结构(以l代表)中有3条数据,第二表结构(以r代表)中也有3条数据,l和r中的数据用表格的方式列出,如表1所示。表1:其中,a1是第一表结构的主键列,b1是第一表结构的非主键列,a2是第二表结构的主键列,b2是第二表结构的非主键列。在对比工具对比数据库中创建第一表t,创建第一表t的sql语句如下:createtablet(pk_md5_valuechar(16),l_nonpk_md5_valuechar(16),r_nonpk_md5_valuechar(16),l_rowidchar(18),r_rowidchar(18),clusterprimarykey(pk_md5_value))。在步骤102中,结合本发明实施例,还存在一种优选的实现方案,具体的,对比数据库抽取和遍历第一表结构和第二表结构中每一条数据,在遍历数据时计算每一条数据的数值,计算完成后将数据结果封装成消息发送至对比数据库,具体计算数据包括:第一表结构和第二表结构每一条数据的主键列md5值;第一表结构和第二表结构每一条数据的非主键列md5值;第一表结构和第二表结构每一条数据对应的rowid值。本实施例二中,把第一表结构和第二表结构的主键列取出来,然后按照预设格式组合起来取md5值,取md5值的方法参照现有技术实现。通过对比数据库软件程序,从第一表结构中抽取数据,并且对a1、b1两列分别计算md5值,假设计算后的md5值和原值相等,计算后的临时表t1数据如下,如表2所示。表2:从第二表结构中抽取数据,并且对a2、b2两列分别计算md5值,假设计算后的md5值和原值相等,计算后的临时表t2数据如下,如表3所示。表3:把表t1中计算完成的第一条数据插入到表t中,插入时,表t1和第一表t中的对应关系如下,如表4所示。表4:t1tmd5(a1)pk_md5_valuemd5(b1)l_nonpk_md5_valuerowidl_rowid假设第一表结构中的三条数据均先于第二表结构的数据完成计算,由于相同表结构中的数据无须对比,因此第一表结构中的三条数据直接插入表t中,完成插入后,第一表t中数据如下,如表5所示。表5:在步骤103中,结合本发明实施例,还存在一种优选的实现方案,具体的,对比数据库解析所述封装消息并还原数据结果,将最先完成的第一条数据结果直接插入第一表t中,后期每条计算完成的数据结果通过预设的对比方法与第一表t中的数据进行对比后,对比数据库操作第一表t底层b树上对应的叶子节点,依照对比规则对第一表t进行数据插入、数据删除或数据更新操作,其中,具体对比方法包括:在步骤1031中,若当前数据结果中的主键列md5值与第一表t中已存在的主键列md5值不相同,对比数据库把当前数据结果插入至第一表t底层b树中。假设第一表结构的数据首先完成计算,计算完成后将数据结果封装发送至对比数据库,对比数据库解析所述封装消息并还原数据结果,将第一表结构的数据结果直接插入所述第一表t中,再将第二表结构中的数据结果插入所述第一表t前,判断第二表结构中的数据结果是否与第一表结构中的数据相同,首先需要对比的数据为主键列的md5值。例如,本实施例二中取表t2中的第一条数据结果与第一表t中的数据进行对比,该条数据rowid是5,md5(a2)是1,md5(b2)是1000,按照表t2和第一表t中设置的对应关系插入该条数据,如表6所示。表6:t2tmd5(a2)pk_md5_valuemd5(b2)r_nonpk_md5_valuerowidr_rowid由于md5(a2)的值1已经在第一表t主键值中存在,需要继续比较md5(b2)的值和第一表t主键值是1的记录中列l_nonpk_md5_value的值大小,发现都是1000,第一表t就把主键值是1的记录完全删除,完成后第一表t的更新数据如下,如表7所示。表7:在步骤1032中,若当前数据结果中的主键列md5值与第一表t中已存在的主键列md5值相同,查询第一表t中已存在的主键列md5值对应的非主键列md5值,判断当前数据结果中非主键列md5值和第一表t中已存在的主键列md5值对应的非主键列md5值是否相同,依据预设的判断方法,对比数据库把当前数据结果更新至第一表t底层b树中或从第一表t底层b树中删除当前数据结果。判断当前数据结果中非主键列md5值和第一表t中已存在的主键列md5值对应的非主键列md5值是否相同,依据预设的判断方法,对比数据库把当前数据结果更新至第一表t底层b树中或从第一表t底层b树中删除当前数据结果,其中,具体判断方法包括:在步骤1033中,若当前数据结果中非主键列md5值和第一表t中已存在的主键列md5值对应的非主键列md5值相同,对比数据库从第一表t底层b树中删除当前数据结果。在步骤1034中,若当前数据结果中非主键列md5值和第一表t中已存在的主键列md5值对应的非主键列md5值不相同,对比数据库把当前数据结果更新至第一表t底层b树中,同时,在第一表t底层b树中已存在的主键列md5值对应的叶子节点中插入当前数据结果中非主键列md5值和rowid值。例如,从列表t2中取第二条数据结果与第一表t中的数据进行对比,该条数据r_rowid是6,md5(a2)是2,md5(b2)是1003,把该条数据插入到第一表t中,因为md5(a2)的值2在第一表t主键值中已经存在,需要继续比较md5(b2)的值和第一表t中主键值是2的记录中列l_nonpk_md5_value的值大小,发现不相同,需要对记录进行更新:把r_nonpk_md5_value的值更新成md5(b2)的值1003,r_rowid的值更新成rowid的值6,完成后第一表t的更新数据如下,如表8所示。表8:从t2中取第三条数据结果与第一表t中的数据进行对比,该条数据r_rowid是7,md5(a2)是5,md5(b2)是1004,把该条数据插入到第一表t中,因为md5(a2)的值5在第一表t主键值中不存在,需要把该条数据直接插入到第一表t即可,完成后第一表t的更新数据如下,如表9所示。表9:在步骤104中,查询对比数据库中的第一表t,得到数据来源数据库中第一表结构和第二表结构数据对比的结果。第一表t中的数据就是第一表结构和第二表结构数据对比后的结果,根据l_rowid的值在第一表结构中查找具体的数据,根据r_rowid的值在第二表结构中查找具体的数据,这样就可以生成详细的对比报告。实施例三:本发明实施例三从一个较为完整的方法步骤过程阐述本发明实施例一的实现过程,相比较实施例一而言,本发明实施例的过程表现更为完善、也更为实例化。如图3所示,本发明实施例三与本发明实施例二选用不同的对比方案。在步骤101中,启动对比数据库,在所述对比数据库中配置对比数据各来源表之间的对比关系,按照数据来源,将对比表分为第一表结构和第二表结构,若第一表结构和第二表结构均不带有主键,在对比数据库中创建一张带有聚集主键的第二表t,结合本发明实施例,还存在一种优选的实现方案,具体的,所述第二表t的结构为:tablet(md5_valuechar,l_rowidchar,r_rowidchar,clusterprimarykey(md5_value,l_rowid,r_rowid));其中:md5_value是用来存放第一表结构或者第二表结构全部列md5值;l_rowid是用来存放第一表结构数据的rowid;r_rowid是用来存放第二表结构数据的rowid;rowid是标识数据库中一条记录物理位置的一个id。本实施例三中,把第一表结构和第二表结构全部列的值取出来,然后按照预设格式组合起来取md5值,取md5值的方法参照现有技术实现。计算第一表结构或者第二表结构中全部列的md5值,计算完成后,将数据结果存储在内存中缓冲区中,第一表结构或第二表结构的数据在计算完md5值后封装发送至对比数据库,不需要保存中间结果,这将节省大量的内存空间,尤其是对比数据量特别大的时候,内存占用量少的优势就越明显。同时数据库接收到数据后可以并发执行,也可以数据批量插入到表t中,而且插入过程是直接操作数据库底层b树,省略了很多数据库插入、更新和删除操作的中间步骤,效率高,速度快,完美实现了对比工具快速对比的特性。本实施例三中,第一表结构(以l代表)中有3条数据,第二表结构(以r代表)中也有3条数据,l和r中的数据用表格的方式列出,如表10所示。表10:其中,a1列的md5值对应唯一的一个l_rowid值,a2列的md5值对应唯一的一个r_rowid值。在对比工具对比数据库中创建第二表t,创建第二表t的sql语句如下:createtablet(md5_valuechar(16),l_rowidchar(18),r_rowidchar(18),clusterprimarykey(md5_value,l_rowid,r_rowid))。在步骤102中,结合本发明实施例,还存在一种优选的实现方案,具体的,所述对比数据库抽取和遍历第一表结构和第二表结构中每一条数据,在遍历数据时计算每一条数据的数值,计算完成后将数据结果封装成消息发送至对比数据库,其中,具体计算数据包括:第一表结构和第二表结构中每一条数据的全部列md5值;第一表结构和第二表结构每一条数据对应的rowid值。通过对比数据库软件程序,从第一表结构中抽取数据,并且对a1列计算md5值,假设计算后的md5值和原值相等,计算后的临时表t3数据如下,如表11所示。表11:从第二表结构中抽取数据,并且对a2列计算md5值,假设计算后的md5值和原值相等,计算后的临时表t4数据如下,如表12所示。表12:把表t3中计算完成的第一条数据插入到表t中,插入时,表t3和第一表t中的对应关系如下,如表13所示。表13:t3tmd5(a1)md5_valuerowidl_rowid假设第一表结构中的三条数据均先于第二表结构的数据完成计算,由于相同表结构中的数据无须对比,因此第一表结构中的三条数据直接插入第二表t中,完成插入后,第二表t中数据如下,如表14所示。表14:在步骤103’中,结合本发明实施例,还存在一种优选的实现方案,具体的,所述对比数据库解析所述封装消息并还原数据结果,将最先完成的第一条数据结果直接插入第二表t中,后期每条计算完成的数据结果通过预设的对比方法与第二表t中的数据进行对比后,对比数据库操作第二表t底层b树上对应的叶子节点,依照对比规则对第二表t中进行数据插入、数据删除或数据更新操作,其中,具体对比方法包括:在步骤1035中,若当前数据结果中的全部列md5值与第二表t中已存在的全部列md5值不相同,对比数据库把当前数据结果插入至第二表t底层b树上对应的叶子节点中。在步骤1036中,若当前数据结果中的全部列md5值与第二表t中已存在的全部列md5值相同,查询第二表t中已存在的所述全部列md5值对应的rowid值是否为空,依据预设的判断方法,对比数据库把当前数据结果更新至第二表t底层b树中或从第二表t底层b树中删除当前数据结果。结合本发明实施例,还存在一种优选的实现方案,具体的,所述查询第二表t中已存在的所述全部列md5值对应的rowid值是否为空,依据预设的判断方法,对比数据库把当前数据结果更新至第二表t底层b树中或从第二表t底层b树中删除当前数据结果,其中,具体判断方法包括:在步骤1037中,若第二表t中已存在的所述全部列md5值及其对应的rowid值至少有一个不为空,对比数据库从第二表t底层b树中删除不为空的数据结果;在步骤1038中,若第二表t中已存在的所述全部列md5值及其对应的rowid值均为空,对比数据库把当前数据结果插入至第二表t底层b树上对应的叶子节点中。例如,本实施例中取表t4的第一条数据结果与第二表t中的数据进行对比,该条数据r_rowid是5,md5(a2)是1000,按照表t4中列和第二表t中列的对应关系插入该条数据,如表15所示。表15:t4tmd5(a2)md5_valuerowidr_rowid因为md5(a2)的值1000已经在第二表t的md5_value列中存在,代表第二表结构中的一个md5值与第二表t中的一个md5值相同,需要继续判断第二表t中所述md5值对应的rowid值是否为空。检索出第二表t中md5_value列值是1000的有1条数据记录,发现md5_value列值是1000对应的rowid值不为空,即l_rowid为1,故删除第二表t中第一表结构和第二表结构中md5值均为1000的数据记录,完成后第二表t的更新数据如下,如表16所示。表16:从t4中取第二条数据结果与第二表t中的数据进行对比,该条数据r_rowid是6,md5(a2)是2000,把该条数据插入到第二表t中,因为md5(a2)的值2000在第二表t的md5_value列中不存在,等于第二表结构中的一个md5值与第一表结构中的一个md5值不相同,直接把该条数据插入第二表t,完成后第二表t的更新数据如下,如表17所示。表17:从t4中取第三条数据结果与第二表t中的数据进行对比,该条数据r_rowid是7,md5(a2)是2000,由于md5(a2)的值2000在第二表t的md5_value列中已经存在,即第二表结构中的一个md5值与所述第二表t中的一个md5值相同,均为2000,继续判断第二表t中md5_value列值是2000对应的rowid值是否为空。第二表t中md5_value列值是2000对应的l_rowid值为空,r_rowid为6,l_rowid值和r_rowid值之间有一个为空,故将第二表结构中的数据结果插入第二表t中,完成后第二表t中数据如下,如表18所示。表18:在步骤104中,查询对比数据库中的第一表t,得到数据来源数据库中第一表结构和第二表结构数据对比的结果。第二表t中的数据就是第一表结构和第二表结构数据对比后的结果,根据l_rowid的值在第一表结构中查找具体的数据,根据r_rowid的值在第二表结构中查找具体的数据,这样就可以生成详细的对比报告。实施例四:如图4所示,是本发明实施例的基于数据库b树对比数据库数据的装置示意图。本实施例的基于数据库b树对比数据库数据的装置包括一个或多个处理器21以及存储器22。其中,图4中以一个处理器21为例。处理器21和存储器22可以通过总线或者其他方式连接,图4中以通过总线连接为例。存储器22作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序和非易失性计算机可执行程序,如实施例一中的基于数据库b树对比数据库数据的方法。处理器21通过运行存储在存储器22中的非易失性软件程序和指令,从而执行基于日志解析的数据库删除列同步方法。存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器22可选包括相对于处理器21远程设置的存储器,这些远程存储器可以通过网络连接至处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例一至实施例三中的基于数据库b树对比数据库数据的方法,例如,执行以上描述的图1至图3所示的各个步骤。值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取存储器(ram,randomaccessmemory)、磁盘或光盘等。本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1