一种数据库合并的方法以及装置与流程

文档序号:17534498发布日期:2019-04-29 13:50阅读:140来源:国知局
一种数据库合并的方法以及装置与流程

本申请涉及到数据库领域,特别是涉及一种数据库合并的方法以及装置。



背景技术:

数据库由于具有高负载、高响应、多并发、支持原子操作、支持多版本控制等优良性能,已成为数据存储的首选方式。现今许多软件和网站,上至云计算中心、下至即时聊天软件,都使用数据库来存储数据。在使用数据库的过程中,常常需要使用一个源数据库去更新一个目标数据库。而此时,便需要将数据库合并。另外,还有其他需要整合数据时,也需要将数据库合并。

常见的合并数据库通常由数据库维护人员手动完成。维护人员分别导出要合并的两个数据库,以某种视图打开,再借助其他的比较工具来合并数据库,自动化程度比较低下。某些商业数据库可能会提供关联的合并工具,但仅仅适用于其相关的数据库产品。而且由于一些关系式数据库作为免费软件,开发者也并未提供相关工具,所以该合并工具无法应用在一些关系式数据库的场合。还有某些数据库服务厂商,通常倾向于提供整套数据库服务,索取高昂的服务费。相应地,此类产品通常也是庞大臃肿、反应迟缓、难于维护。



技术实现要素:

本申请提供一种数据库合并的方法以及装置,通过轻量化的方法对数据库进行快速且安全的合并。

本申请采用的一个技术方案是:提供一种数据库合并的方法,包括步骤:分别从目标数据库和源数据库获取目标数据表和源数据表,其中所述目标数据表包括多个字段以及多条记录,所述源数据表也包括多个字段以及多条记录,每条记录包括分别与所述字段对应的字段值;根据所述目标数据表和所述源数据表的字段差异对所述目标数据表进行同结构化处理,以获取同结构化目标数据表;在所述源数据表和所述同结构化目标数据表的基础上进行数据合并。

为解决上述技术问题,本申请采用的另一个技术方案是:一种数据库合并的装置,包括:处理器、存储器,所述处理器连接所述存储器,所述处理器通过运行所述存储器内存储的程序执行以下步骤:分别从目标数据库和源数据库获取目标数据表和源数据表,其中所述目标数据表包括多个字段以及多条记录,所述源数据表也包括多个字段以及多条记录,每条记录包括分别与所述字段对应的字段值;根据所述目标数据表和所述源数据表的字段差异对所述目标数据表进行同结构化处理,以获取同结构化目标数据表;在所述源数据表和所述同结构化目标数据表的基础上进行数据合并。

本申请的有益效果是:提供了一种数据库合并的方式以及装置,通过将分别从源数据库以及目标数据库中获取的源数据表以及目标数据表进行同结构化在进行合并,从而实现了通过轻量化的方法对数据库进行快速且安全的合并。

附图说明

图1是本申请数据库合并的方法一实施方式的流程示意图

图2是本申请数据库合并的方法图1步骤s10一实施方式的子流程示意图;

图3是本申请数据库合并的方法图1步骤s11一实施方式的子流程示意图;

图4是图3同结构化的具体示意图;

图5是本申请数据库合并的方法图1步骤s12一实施方式的子流程示意图;

图6是本申请数据库合并的方法的两个需要合并的结构化目标数据表以源数据表的示意图;

图7是图1步骤s12一实施方式的又一子流程示意图;

图8是图6依照图7的方法合并后的同结构化目标数据表的示意图;

图9是本申请数据库合并的方法图1步骤s12一实施方式的又一子流程示意图;

图10是图6依照图9的方法合并后的同结构化目标数据表的示意图;

图11是本申请数据库合并的方法图1步骤s12一实施方式的又一子流程示意图;

图12是图6依照图11的方法合并后的同结构化目标数据表的示意图;

图13是本申请数据库合并的方法图1步骤s12一实施方式的又一子流程示意图;

图14是本申请一种数据库合并的装置一实施方式的结构示意图。

实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参阅图1,图1本申请数据库合并的方法一实施方式的流程示意图,且具体的缝隙检测方法包括以下步骤:

s10,分别从目标数据库和源数据库获取目标数据表和源数据表。

在本实施例中,由于具体的操作对象是数据库中的各个数据表,所以先从目标数据库中以及源数据库中分别获取目标数据表以及源数据表。具体是通过对存储在目标数据库中的所有表的表名进行遍历,同时对存储在源数据库中的所有表的表名进行遍历,分别从两个数据库中选出表名对应的两个表,作为目标数据表以及源数据表。每个目标数据表和源数据表都包括多个字段以及多条记录,并包括了多个字段值。优选的,一个字段是指一个表的一个列,一条记录是指一个表的一行,字段值是指字段以及记录所对应的具体一个值。

特别的,在本实施例中,目标数据表以及源数据表都有一个唯一标识字段。对于一个表中,这个标识字段下的所有字段值都是唯一的,比如编号、学籍号等。

s11,根据目标数据表和源数据表的字段差异对目标数据表进行同结构化处理,以获取同结构化目标数据表。

在合并前,需要对目标数据表以及源数据表进行同结构操作,也就是使得目标数据表与源数据表具有相同的字段。在本实施例中,是对目标数据表进行操作,所以可以对目标数据库进行备份以及对源数据库进行只读声明。为使得目标数据表与源数据表有着相同的字段,需要在对目标数据表以及源数据表进行遍历,得到目标数据表相对源数据表多余或缺少的字段,然后创建一个临时表。其中临时表相对目标数据表增加了缺少的字段或者删除了多余的字段,或者即增加了缺少的字段又删除了多余的字段。另外,还可根据需要对同结构化目标数据表进行记录填充,以使得在同结构化目标数据表中保留目标数据表的记录中与同结构化目标数据表字段相同的字段值。可以将目标数据表的记录中与临时表相同字段的字段值填充到临时表中,并将临时表的记录中与目标数据表不同的字段所对应字段值由源数据表中对应记录的对应字段的字段值进行填充。最后,将临时表设置为同结构化目标数据表,这样就得到了同结构化处理后的同结构化目标数据表。

s12,在源数据表和同结构化目标数据表的基础上进行数据合并。

在得到同结构化目标数据表以及源数据表后,则对得到的源数据表与同结构化目标数据表进行合并。但是在实际操作中,用户可能需要对部分数据进行保护,所以在实际的合并过程中,先确定保护数据,包括保护记录以及字段,也可以选择不保护,这里不做限定,然后根据用户的不同选择使用不同的方法。

参见图2,图2为本申请数据库合并的方法图1步骤s10一实施方式的子流程示意图,且该实施例是在本申请第一实施例步骤s10的基础上的进一步扩展,该步骤在本实施方式中具体包括如下子步骤。

s101,分别对目标数据和原数据中所存储的表格的表名进行遍历。

在对数据库的实际操作中,其实就是对数据库存储的表进行操作,所以需要将所需要合并的源数据表以及目标数据表找出来。在具体的操作过程中,对于需要合并的数据库中的一个表,在源数据中也有这么一个对应的表存在。具体是表名存在对应关系,可以是表名相同或者相似,所以分别对每个存储在目标数据中的表的表名进行遍历,同时用相同的方法遍历源数据库。

s102,将表名对应且分别存储于目标数据库和源数据库中的表格作为目标数据表和源数据表。

对于目标数据中的一个表,如果源数据中存在一个表名与该表的表名相对应的一个表,则将目标数据库中的这个表作为目标数据表,将源数据中表名所对应的表作为源数据表。这里的对应可以是相同或者相似或者其他的对应关系。

参见图3,图3为本申请数据库合并的方法图1步骤s11一实施方式的子流程示意图,且该实施例是在本申请第一实施例步骤s11的基础上的进一步扩展,该实施方式具体包括如下子步骤。

s111,分别对目标数据表和源数据表中的字段进行遍历,以确定目标数据表相对于源数据表缺少的字段和多余的字段。

由于源数据表以及目标数据表中可能字段不同,这样就会导致合并时候出现数据错误。所以,首先要对目标数据表进行与源数据表的同样结构化,也就是使得目标数据表与源数据表有着相同的字段。因此,要对目标数据表以及源数据表中的字段进行遍历,得到目标数据表中相对于源数据表中缺少的一些字段以及多余的一些字段,并记录下来。

s112,建立一临时表并进行字段设置,以使得临时表相对于目标数据表增加了缺少的字段并删除多余的字段。

在具体的数据库操作中,为了保护数据以及操作过程中防止数据的误删,丢失等等,一般都采用备份以及建立临时表的方法。所以首先建立一个临时表,再给这个临时表设置字段,使得临时表相对目标数据表而言,增加了前一步骤记录的缺少的字段,删除了前一步骤所记录的所多余的字段。也就是说,这个临时表与源数据表有着相同的字段。

s113,将目标数据表的记录中与临时表相同字段的字段值填充到临时表中。

由于只对临时表设置了字段,所以还需要对临时表填充记录,其中包括对临时表与目标数据表相同的字段进行记录填充。对于临时表中与目标数据库中相同的字段,就将目标数据表中这个字段所对应的字段值依次按照顺序填充到临时表对应的字段中。其中,特别的,由于目标数据表与源数据表都有一个标识字段,所以临时表中也必有标识字段。

s114,将临时表的记录中与目标数据表不同的字段所对应字段值由源数据表中对应记录的对应字段的字段值进行填充。

由于临时表相对目标数据表会多余一定字段,而这些字段由于来自源数据表,所以在目标数据表中不存在这些字段所对应的字段值,所以这些字段的字段值需要从源数据库中获取。在实际操作中,比如一个字段指的是年龄,而一个记录指的是甲的信息,这甲的年龄的这个字段值是由字段以及记录一起决定的。从而可以得知,对于不存在的字段,如在目标数据表中没有甲的工资,但是临时表却多了一个工资字段,则甲的工资如果需要填充的话,需要从源数据库中得到。这里就需要一个唯一标识字段的字段值来确定,假设在表中的唯一标识字段就是姓名,对于甲的工资,如果在源数据表中的唯一标识字段的字段值也有甲,则将源数据表甲所对应的工资填入到临时表甲所对应的工资,如果在源数据表中的唯一标识字段的字段值不存在甲,则不进行填充。

s115,将临时表设置为同结构化目标数据表。

现在的临时表已经有了和源数据表相同的字段,也就是有着一样的结构了,同时也对临时表填充了数据,也就是同结构化完成,将临时表设置为同结构化目标数据表。

请在具体参阅图4,图4是图3同结构化的具体示意图。其中包括源数据表、目标数据表以及临时表。其中,在本实施例中,姓名作为标识字段。

可以看出,在临时表中,对于甲而言,字段中工号以及年龄同时存在与源数据表以及目标数据表中,所以从目标数据表中获取字段值,但对于工资字段而言,作为标识字段,甲是目标数据表以及源数据表共有的标识字段值,所以甲的工资可以由源数据表对应甲的工资进行填充,但是对于丁而言,由于在源数据表中的标识字段也就是姓名下面没有这个字段值,所以无法进行填充,则为空。

参见图5,图5为本申请数据库合并的方法图1步骤s12一实施方式的子流程示意图,且该实施例是在本申请第一实施例步骤s12的基础上的进一步扩展,该实施方式具体包括如下子步骤。

s121,在同结构化目标数据表中指定受保护记录或受保护字段。

在实际操作中,用户可能需要对某些数据进行保护,所以需要确定用户保护的数据,在后续的合并过程中对需要保护的数据进行跳过,这些保护的数据可以是字段,也可以是记录,确定需要保护的数据,这里的保护数据具体是对同结构化的目标数据表进行指定。

s122,在跳过受保护记录或受保护字段的基础上对同结构化目标数据表和源数据表进行数据合并。

在确定了受保护字段或手保护记录后,在后续的合并过程中,跳过这些数据,也就是在后续的合并过程中,这些记录或者字段不参与合并,也不进行任何改动,然后对同结构化数据表以及源数据表进行合并。

参见图6,图6为本申请数据库合并的方法的两个需要合并的结构化目标数据表以源数据表的示意图。

其中,同结构化数据表以及源数据表的标识字段为编号。在其他实施例中,这里的标识字段不作限制,可以是工号、学号、姓名等。其中,1、2、3为同结构化数据表的标识字段的字段值,1所在的一行就是其所对应的记录,张三是同结构化数据表中姓名字段的字段值,也就1所对应的记录的一个字段值。

参见图7,图7为本申请数据库合并的方法图1步骤s12一实施方式的又一子流程示意图。且该实施例是在本申请第一实施例步骤s12的基础上的进一步扩展,也是

三种合并方式的其中一种,该实施方式具体包括如下子步骤。

s121a,将同结构化目标数据表与源数据表的记录中起到标识作用的标识字段所对应的字段值进行对比。

在本实施例中,需要通过标识字段来进行对比合并,也就是来对比结构化目标数据表以及源数据表的标识字段的字段值。如源数据表以及结构化目标数据表的标识字段为编号,则将结构化目标数据表的每个编号值与源数据表的每个编号值进行比对。

s122a,确定同结构化目标数据表相对于源数据表缺少的记录和/或多余的记录。

在进行比对后,确定同结构化数据表相对于源数据表不同的标识字段的字段值所对应的记录。也就是说,如同结构化数据表以及源数据表的标识字段为编号,在同结构化数据表假设编号的编号值有1、2、3,而源数据表中的编号的编号值有3、4、5,则同结构化数据表相对于源数据表而言,缺少了4、5,也就是缺少了4、5所对应的记录,多余了1、2,也就是多余了1、2所对应的记录,对其进行确定与记录。

s123a,在同结构化目标数据表中添加缺少的记录/或删除所述多余的记录。

在同结构化目标数据表添加所确定的缺少的记录。也就是如上述步骤而言,添加同结构化目标数据表相对于源数据所缺少的记录也就是4以及5对应的记录,删除多余的记录,也就是删除同结构化目标数据表相对于源数据所缺少的记录也就是1以及2对应的记录。

请进一步参阅图8,图8是图6依照图7的方法合并后的同结构化目标数据表的示意图。

结构化目标数据表相对于源数据表而言,多余了1以及2所对应的记录,但是缺少了4以及5所对应的记录。所以在合并数据表中,相对于目标数据表而言,删除了1以及2所对应的记录,添加了4以及5所对应的记录,不对3所对应的记录进行修改,得到图8。

参见图9,图9为本申请数据库合并的方法图1步骤s12一实施方式的又一子流程示意图,且该实施例是在本申请第一实施例步骤s12的基础上的进一步扩展,也是

三种合并方式的其中一种。该实施方式具体包括如下子步骤。

s121b,将同结构化目标数据表与源数据表的记录中的字段值进行对比。

在本实施例中,需要通过标识字段来进行对比合并,也就是来对比结构化目标数据表以及源数据表的标识字段的字段值。如源数据表以及结构化目标数据表的标识字段为编号,则将结构化目标数据表的每个编号值与源数据表的每个编号值进行比对。

s122b,确定起到标识作用的标识字段所对应的字段值相同但其余字段所对应的字段值至少部分不同的记录。

也就是说,如同结构化数据表以及源数据表的标识字段为编号,在同结构化数据表假设编号的编号值有1、2、3,而源数据表中的编号的编号值有3、4、5,则有一个共同的字段值3。在确定3在结构化目标数据表中所对应的记录,以及3在源数据表中所对应的记录,确定这两个记录所不同的字段值。

s123b,利用源数据表中确定的记录更新同结构化目标数据表中的对应记录。

也就是说,源数据表对于3所对应的记录中的某个字段值不同于同结构化目标数据表3所对应的记录中的某个字段值,则将同结构化目标数据表中的这个字段值替换成源数据表的这个字段值,其他保持不变。

请进一步参阅图10,图10是图6依照图9的方法合并后的同结构化目标数据表的示意图。

结构化目标数据表相对于源数据表而言,结构化目标数据表的标识字段有1、2、3,源数据表的标识字段有3、4、5,则两个数据表的标识字段共有一个相同的3。在结构化数据表中,3所对应的记录为:3、谢里、3k。而在源数据表中,3所对应的记录为:3、王二、6k。则显然,在结构化数据表中3所对应的记录的字段值与源数据表中3所对应的记录的字段值不同,则将结构化数据表中3所对应的记录替换成源数据表中3所对应的记录,得到图10。

参见图11,图11为本申请数据库合并的方法图1步骤s12一实施方式的又一子流程示意图,且该实施例是在本申请第一实施例步骤s12的基础上的进一步扩展,也是三种合并方式的其中一种,该实施方式具体包括如下子步骤。

s121c,将同结构化目标数据表中的记录全部替换成源数据表中的记录。

也就是说,将结构化目标数据表清空,并将所有的源数据表的记录进行填充,使得源数据表的记录覆盖结构化目标数据表。

请进一步参阅图12,图12是图6依照图11的方法合并后的同结构化目标数据表的示意图。

将源数据表完全覆盖了结构化数据表,也就是将同结构化目标数据表中的记录全部替换成源数据表中的记录,得到图12。

参见图13,图13为本申请数据库合并的方法图1步骤s12一实施方式的又一子流程示意图,且该实施例是在本申请第一实施例步骤s12的基础上的进一步扩展。且需要注意的,本实施例是对图7、图9以及图11实施例的具体实现方法的实施方式的示意图,且具体有如下的步骤:

s121d,利用第一线程循环地从源数据表中读取记录,并存储到第一缓存区。

在本实施中,主要通过具体的实现方法来说明合并的实现。这里是通过采用引用多个线程来实现,首先采用第一线程循环的从源数据表中读取一行记录,并存储为一个字符串列表,并将这个字符串列表存储在第一缓存区中,一直循环上述操作,一直到第一缓存区被写满。

s122d,利用第二线程循环地从第一缓存区中读取记录,并存储到第二缓存区。

采用第二线程循环的从第一缓存区取出一个记录,并放在第二缓存区中。需要注意的是,第二缓存区比第一缓存区要小。如果第一缓冲区是空的或者第二缓存区是满的,则第二线程进入睡眠状态,也就是不工作。当写入成功后,由于第一缓存区又空了一个位置,则使用第一线程对第一缓存区进行写入。

s123d,利用第三线程循环地从同结构化目标数据表中读取记录,并存储到第三缓存区。

在对源数据表进行操作后,这里需要在对同结构化目标数据表进行操作。首先采用第三线程循环的从同结构化目标数据表中读取一行记录,并存储为一个字符串列表,并将这个字符串列表存储在第三缓存区中。一直循环上述操作,一直到第一缓存区被写满。

s124d,利用第四线程循环地从第三缓存区中读取记录,并存储到第四缓存区。

采用第四线程循环的从第三缓存区取出一个记录,并放在第四缓存区中。需要注意的是,第四缓存区比第三缓存区要小,如果第三缓冲区是空的或者第四缓存区是满的,则第四线程进入睡眠状态,也就是不工作。当写入成功后,由于第三缓存区又空了一个位置,则使用第三线程对第三缓存区进行写入。

s125d,利用第五线程对第二缓存区所存储的记录以及所述第四缓存区所存储的记录进行比较,并根据比较结果执行相应的数据合并操作。

也就是说,当第二缓存区以及第四缓存区不是空的时候,则采用第五线程对第二缓存区所存储的记录与第四缓存区所存储的记录进行对比,并通过对比的结果以及选择的合并方式来进行增加、删除、替换等等操作。在比较以及操作完成后,清除第二缓存区以及第四缓存区,并唤醒第二线程以及第四线程进行工作。

参阅图14,图14为本申请一种数据库合并的装置一实施方式的结构示意图。

本实施例中,该装置包括处理器10以及存储器11,处理器10连接存储器11。

其中,处理器10用于确定保护数据,设置临时表以及对临时表进行填充,对数据库以及数据表进行遍历,通过使用多线程以及多缓存区的方式对数据表进行比较以及合并。

其中,处理器10还可以称为cpu(centralprocessingunit,中央处理单元)。处理器10可能是一种集成电路芯片,具有信号的处理能力。处理器10还可以是通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

上述设备的各个模块终端可分别执行上述方法实施例中对应的步骤,故在此不对各模块进行赘述,详细请参阅以上对应步骤的说明。

本申请的存储装置存储20有能够实现上述所有方法的指令文件,该程序文件可以以软件产品的形式存储在上述存储装置中,同时还是记录各种计算的数据,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式方法的全部或部分步骤。而前述的存储装置包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质,或者是计算机、服务器、手机、平板等终端设备。

综上所述,本领域技术人员容易理解,本申请提供一种合并数据库的方法及装置,通过遍历的方式分别从两个数据库中取出两个数据表,然后在对两个数据表进行同结构化,在确定保护数据后,通过多线程以及缓冲区的方式对两个数据表进行多种方式的合并,从而快速的完成合并,并且在本申请中,有着完善的数据保护机制,在合并过程中不会造成数据的丢失或损坏。

以上仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1