比较数据表的数据的方法和系统与流程

文档序号:11523911阅读:137来源:国知局
本申请涉及数据库领域,并且更具体地,涉及一种比较数据表的数据的方法和系统。
背景技术
::对于大数据领域,键值(key-value)数据库是应对大量随机写、随机读场景的一种最佳选择。key-value数据库中的所有数据,均以key-value形式存在。key-value形式具有严格定义的结构,数据库中的所有数据,都以不可改写的文件存在于底层文件系统中。新数据的写入,会生成新的key-value;旧数据的改写或者删除,也会生成新的key-value来标记该改写或者删除。另外,大数据领域为了追求数据更高的可用性和更好的容灾性,通常在多数据中心方案中采取异地备份数据的功能。因此,备份数据前、中、后校验数据的一致性,成为现在大数据存储领域一项重要的功能特性。现有的比较工具是基于数据的比较工具。当使用该比较工具对两个数据库(工作数据库和备份数据库)的数据表(两个数据库中数据表的结构应是相同的)进行内容比较时,该比较工具会将校验任务进行并行化处理,例如,提交成映射归约(mapreduce,mr)作业分配到很多节点上并行执行。该比较工具分别从两个数据库的数据表中读取数据,进行比较,得到不一致的数据。现有的比较工具对数据表中的数据进行逐行比较,比较效率低下,比较工具运行速度慢。另外,现有的比较技术,需要映射框架在本地跟本地数据库的集群的多个服务器进行通信,还可能需要跟远端数据库的集群的服务器进行通信,这会占用大量的网络资源。技术实现要素:本申请提供一种比较数据表的数据的方法和系统,能够避免大量的数据传输和比较,运行速度快成本低,网络资源占用量小。本申请第一方面提供了一种比较数据表的数据的方法,其特征在于,所述方法应用于比较第一数据库和第二数据库的目标数据表的数据的系统,所述系统包括客户端和多个服务端,其中,所述第一数据库对应至少一个第一服务端,所述第二数据库对应至少一个第二服务端,所述方法包括:所述客户端获取所述第一数据库中所述目标数据表的第一元数据和所述第二数据库中所述目标数据表的第二元数据,所述第一元数据中包括所述目标数据表的数据在所述第一数据库的服务器中所对应的第一范围,所述第二元数据中包括所述目标数据表的数据在所述第二数据库的服务器中所对应的第二范围;所述客户端根据所述第一范围和所述第二范围中的至少一个,确定目标范围;所述至少一个第一服务端根据所述目标范围,对所述第一数据库中目标数据表的数据进行签名得到第一签名;所述至少一个第二服务端根据所述目标范围,对所述第二数据库中目标数据表的数据进行签名得到第二签名;所述客户端根据所述第一签名和所述第二签名,确定所述第一数据库中目标数据表的数据与所述第二数据库中目标数据表的数据是否相同。第一方面的比较数据表的数据的方法,客户端根据数据表的数据的分布确定目标范围,服务端根据目标范围对数据进行签名,客户端比较两个数据库中数据表的数据对应的签名是否一致即可判断出这两个数据表的数据是否一致,避免了大量的数据传输和比较,运行速度快成本低,网络资源占用量小。在第一方面的一种可能的实现方式中,所述第一数据库的每个服务器对应一个第一服务端,所述第一范围包括所述目标数据表的数据在所述第一数据库的每个服务器的子范围,所述第二数据库的每个服务器对应一个第二服务端,所述第二范围包括所述目标数据表的数据在所述第二数据库的每个服务器的子范围,所述客户端根据所述第一范围和所述第二范围中的至少一个,确定目标范围,包括:所述客户端根据所述目标数据表的数据在所述第一数据库的每个服务器的子范围和所述目标数据表的数据在所述第二数据库的每个服务器的子范围,确定所述目标范围的子范围,每个所述子范围对应的数据在所述第一数据库中分布在一个服务器上,并且在所述第二数据库中分布在一个服务器上。本实现方式使得后续在对数据进行签名时,不再需要跨服务器(跨rs)进行数据传输,可以进一步提高运行速度,降低网络资源的占用量。在第一方面的一种可能的实现方式中,在所述至少一个第一服务端根据所述目标范围,对所述第一数据库中目标数据表的数据进行签名得到第一签名,所述至少一个第二服务端根据所述目标范围,对所述第二数据库中目标数据表的数据进行签名得到第二签名之前,所述方法还包括:所述客户端、所述至少一个第一服务端和所述至少一个第二服务端中的至少一种为每个所述子范围进行树型分段;所述至少一个第一服务端根据所述目标范围,对所述第一数据库中目标数据表的数据进行签名得到第一签名,包括:所述至少一个第一服务端根据所述树型分段,对所述第一数据库中目标数据表的数据的分段进行签名得到树型的所述第一签名;所述至少一个第二服务端根据所述目标范围,对所述第二数据库中目标数据表的数据进行签名得到第二签名,包括:所述至少一个第二服务端根据所述树型分段,对所述第二数据库中目标数据表的数据的分段进行签名得到树型的所述第二签名。本实现方式对目标范围的子范围进行树型分段可以得到更细化的签名,能够提高比较签名时的效率。在第一方面的一种可能的实现方式中,所述客户端根据所述第一签名和所述第二签名,确定所述第一数据库中目标数据表的数据与所述第二数据库中目标数据表的数据是否相同,包括:所述客户端根据树型的所述第一签名和树型的所述第二签名,确定所述第一签名和所述第二签名的树的相同层的签名是否一致,当签名不一致时,确定所述层对应的分段在所述第一数据库中目标数据表的数据与所述第二数据库中目标数据表的数据不同。在第一方面的一种可能的实现方式中,所述客户端、所述至少一个第一服务端和所述至少一个第二服务端中的至少一种为每个所述子范围进行树型分段,包括:所述至少一个第一服务端和所述至少一个第二服务端对所述目标范围中数据的密度进行统计;所述至少一个第一服务端和所述至少一个第二服务端根据统计的结果,为每个所述子范围进行树型分段。本实现方式可以使得各个服务器负载更均衡。在第一方面的一种可能的实现方式中,所述至少一个第一服务端根据所述目标范围,对所述第一数据库中目标数据表的数据进行签名得到第一签名,包括:所述至少一个第一服务端根据所述目标范围,通过哈希算法对所述第一数据库中目标数据表的数据进行签名得到第一签名;所述至少一个第二服务端根据所述目标范围,对所述第二数据库中目标数据表的数据进行签名得到第二签名,包括:所述至少一个第二服务端根据所述目标范围,通过哈希算法对所述第二数据库中目标数据表的数据进行签名得到第二签名。本申请第二方面提供了一种比较数据表的数据的系统,其特征在于,所述系统用于比较第一数据库和第二数据库的目标数据表的数据,所述系统包括运行客户端的计算设备和运行服务端的多个服务器,其中,所述第一数据库包括运行第一服务端的至少一个第一服务器,所述第二数据库包括运行第二服务端的至少一个第二服务器:所述计算设备用于获取所述第一数据库中所述目标数据表的第一元数据和所述第二数据库中所述目标数据表的第二元数据,所述第一元数据中包括所述目标数据表的数据在所述第一数据库的服务器中所对应的第一范围,所述第二元数据中包括所述目标数据表的数据在所述第二数据库的服务器中所对应的第二范围;所述计算设备还用于根据所述第一范围和所述第二范围中的至少一个,确定目标范围;所述至少一个第一服务器用于根据所述目标范围,对所述第一数据库中目标数据表的数据进行签名得到第一签名;所述至少一个第二服务器用于根据所述目标范围,对所述第二数据库中目标数据表的数据进行签名得到第二签名;所述计算设备还用于根据所述第一签名和所述第二签名,确定所述第一数据库中目标数据表的数据与所述第二数据库中目标数据表的数据是否相同。在第二方面的一种可能的实现方式中,所述第一数据库中用于存储所述目标数据表的每个服务器均为运行所述第一服务端的所述第一服务器,所述第一范围包括所述目标数据表的数据在所述第一数据库的每个所述第一服务器的子范围,所述第二数据库中用于存储所述目标数据表的每个服务器均为运行所述第二服务端的所述第二服务器,所述第二范围包括所述目标数据表的数据在所述第二数据库的每个所述第二服务器的子范围,所述计算设备具体用于:根据所述目标数据表的数据在所述第一数据库的每个所述第一服务器的子范围和所述目标数据表的数据在所述第二数据库的每个所述第二服务器的子范围,确定所述目标范围的子范围,每个所述子范围对应的数据在所述第一数据库中分布在一个服务器上,并且在所述第二数据库中分布在一个服务器上。在第二方面的一种可能的实现方式中,在所述第一服务器根据所述目标范围,对所述第一数据库中目标数据表的数据进行签名得到第一签名,所述第二服务器根据所述目标范围,对所述第二数据库中目标数据表的数据进行签名得到第二签名之前,所述计算设备、所述至少一个第一服务器和所述至少一个第二服务器中的至少一种用于为每个所述子范围进行树型分段;所述至少一个第一服务器具体用于:根据所述树型分段,对所述第一数据库中目标数据表的数据的分段进行签名得到树型的所述第一签名;所述至少一个第二服务器具体用于:根据所述树型分段,对所述第二数据库中目标数据表的数据的分段进行签名得到树型的所述第二签名。在第二方面的一种可能的实现方式中,所述计算设备具体用于:根据树型的所述第一签名和树型的所述第二签名,确定所述第一签名和所述第二签名的树的相同层的签名是否一致,当签名不一致时,确定所述层对应的分段在所述第一数据库中目标数据表的数据与所述第二数据库中目标数据表的数据不同。在第二方面的一种可能的实现方式中,所述至少一个第一服务器和所述至少一个第二服务器用于对所述目标范围中数据的密度进行统计;所述至少一个第一服务器和所述至少一个第二服务器用于根据统计的结果,为每个所述子范围进行树型分段。在第二方面的一种可能的实现方式中,所述至少一个第一服务器具体用于:根据所述目标范围,通过哈希算法对所述第一数据库中目标数据表的数据进行签名得到第一签名;所述至少一个第二服务器具体用于:根据所述目标范围,通过哈希算法对所述第二数据库中目标数据表的数据进行签名得到第二签名。本申请第三方面提供了一种存储介质,该存储介质中存储了程序,该程序被计算设备和服务器运行时,该计算设备和服务器执行前述第一方面或第一方面的任一实现方式提供的比较数据表的数据的方法。该存储介质包括但不限于只读存储器,随机访问存储器,快闪存储器、hdd或ssd。本申请第四方面提供了一种计算机程序产品,该计算机程序产品包括程序指令,当该计算机程序产品被计算设备和服务器执行时,该计算设备和服务器执行前述第一方面或第一方面的任一实现方式提供的比较数据表的数据的方法。该计算机程序产品可以为一个软件安装包,在需要使用前述第一方面或第一方面的任一实现方式提供的比较数据表的数据的方法的情况下,可以下载该计算机程序产品并在计算设备和服务器上执行该计算机程序产品。附图说明图1是一种采用比较工具来比较数据表的数据的方法的示意图。图2是本发明一个实施例的比较数据表的数据的系统的示意性框图。图3是本发明另一个实施例的比较数据表的数据的系统的示意性框图。图4是本发明一个实施例的比较数据表的数据的方法的示意性流程图。图5是本发明一个实施例的切分目标范围的示意图。图6是本发明另一个实施例的切分目标范围的示意图。图7是本发明另一个实施例的切分目标范围的示意图。图8是本发明另一个实施例的切分目标范围的示意图。图9是本发明另一个实施例的切分目标范围的示意图。图10是本发明一个实施例的目标范围的切分结果的示意图。图11是本发明一个实施例的建立树型的签名的示意图。图12是本发明一个实施例的计算设备或服务器的示意性框图。具体实施方式下面将结合附图,对本发明实施例中的技术方案进行描述。对于校验两个数据库中数据的一致性,现有的比较工具是基于数据的比较工具。当使用该比较工具对两个数据库的数据表进行内容比较时,该比较工具会将校验任务进行并行化处理。下面结合hadoop数据库(hadoopdatabase,hbase),以现有的比较工具为例,介绍比较数据库中数据表的数据的流程。图1是现有的比较工具比较数据表的数据的方法100的示意图。该方法100包括:s110,现有的比较工具向数据中心(datacenter,dc)1的数据库对应的hbase集群提交一个mr作业。s120,hbase集群的远程控制器(remotemaster,rm)将mr作业分配到很多节点上并行执行,即将mr作业分配给多个映射任务(maptask)。s130,每一个maptask负责一部分数据的比较。每一个maptask分别从两个数据中心dc1和dc2的hbase集群读取数据,然后进行数据比较,并打印出不一致的数据。通常,hbase集群中的每个服务器上均配置有服务程序区域服务器(regionserver,rs),rs用于管理服务器上运行的任务。现有的比较工具对数据表中的数据进行逐行比较,比较效率低下,比较工具运行速度慢。其次,现有的比较工具不仅需要两个hbase集群的参与,还需要集群提供rm作业的运行节点,比较工具的占用和运行成本较高。另外,现有的比较技术,需要映射框架在本地跟本地数据库的hbase集群的多个服务器的rs进行通信,还可能需要跟远端数据库的hbase集群的服务器的rs进行通信,这会占用大量的网络资源。基于以上问题,本发明实施例提供了一种比较数据表的数据的方法。图2示出了本发明实施例的比较数据表的数据的系统200的示意性框图。应理解,图2示出的系统200是软件的角度的示意性框图。如图2所示,该系统200从软件上看包括客户端210和多个服务端,其中,每个数据库对应至少一个服务端,第一数据库对应至少一个第一服务端221,第二数据库对应至少一个第二服务端222。图3示出了本发明实施例的比较数据表的数据的系统300的示意性框图。应理解,图3示出的系统300是硬件的角度的示意性框图。与图2的软件相对应地,系统300包括运行客户端的计算设备310和运行服务端的多个服务器。客户端210可以部署在用户的计算设备310上,计算设备310通常不是任意一个数据库对应的服务器,即通常不是dc的服务器;第一服务端221可以部署在第一数据库对应的第一dc的第一服务器321上;第二服务端222可以部署在第二数据库对应的第二dc的第二服务器322上。可选地,第一数据库用于存储数据表的每台服务器上可以部署一个第一服务端221,即部署了第一服务端221的服务器认为是第一服务器321;第二数据库用于存储数据表的每台服务器上可以部署一个第二服务端222,即部署了第二服务端222的服务器认为是第二服务器322。当然每个数据库的多台服务器也可以共用一个服务端,本发明实施例对此不作限定。图2示出的第一服务端和第二服务端的数量,以及图3示出的第一服务器和第二服务器的数量仅是示意性的,而非对本发明实施例的限定。另外,本发明实施例中涉及获取元数据(metadata),元数据一般存储在meta表中,meta表通常存储在数据库中区别于存储数据表的服务器以外的另外的服务器上。图3中示意性的示出第一数据库的meta表存储在第一数据库的第三服务器323上,第二数据库的meta表存储在第二数据库的第四服务器324上。当然meta表也可以存储在数据库中存储数据表的服务器上,本发明实施例对此不作限定。应理解,系统300中的计算设备和服务器可以认为是一个节点。其中,用于存储数据表的服务器(例如第一服务器和第二服务器)可以认为是存储节点,存储节点上部署有服务端,服务端可以是rs的部分功能,也可以独立与rs存在。存储meta表的服务器可以认为是元数据管理节点。还应理解,本发明实施例的服务端可以作为rs的一个功能模块,也可作为单独的模块或单元,本发明实施例对此不作限定。图4示出了本发明实施例的比较数据表的数据的方法400的示意性流程图。如图4所示,方法400包括:s410,客户端210获取第一数据库中目标数据表的第一元数据和第二数据库中目标数据表的第二元数据,第一元数据中包括目标数据表的数据在第一数据库的服务器中所对应的第一范围,第二元数据中包括目标数据表的数据在第二数据库的服务器中所对应的第二范围;s420,客户端210根据第一范围和第二范围中的至少一个,确定目标范围;s430,至少一个第一服务端221根据目标范围,对第一数据库中目标数据表的数据进行签名得到第一签名;s440,至少一个第二服务端222根据目标范围,对第二数据库中目标数据表的数据进行签名得到第二签名;s450,客户端210根据第一签名和第二签名,确定第一数据库中目标数据表的数据与第二数据库中目标数据表的数据是否相同。本发明实施例的方法,客户端根据数据表的数据的分布确定目标范围,服务端根据目标范围对数据进行签名,客户端比较两个数据库中数据表的数据对应的签名是否一致即可判断出这两个数据表的数据是否一致,避免了大量的数据传输和比较,运行速度快成本低,网络资源占用量小。具体而言,本发明实施例的待比较的目标数据表所在的第一数据库和第二数据库分别属于不同的数据库,两个数据库进一步可以分别属于不同的数据中心的服务器的集群。当然两个数据库也可以属于同一个数据中心,本发明实施例对此不作限定。通常,数据库中的数据表较大,一般需将数据表横向切分,在多个服务器存放,以增强并发处理的速度。在s410中,客户端210分别与存放目标数据表的第一数据库和第二数据库的服务器通信,以得到第一数据库中目标数据表的第一元数据和第二数据库中目标数据表的第二元数据。元数据(metadata)一般存储在meta表中,meta表通常存储在数据库中区别于存储数据表的服务器以外的另外的服务器上,当然meta表也可以存储在数据库中存储数据表的服务器上,本发明实施例对此不作限定。客户端210得到两个数据库的目标数据表的对应的两张meta表,即得到第一元数据和第二元数据。现假设每个数据库分别包括3台服务器,每台服务器上运行一个rs,每个rs对应存储目标数据表的一个区域(region)。根据第一元数据和第二元数据,得到每个region对应一个范围(range)分布情况,即开始键(startkey)和结束键(endkey)。其中,第一元数据中包括目标数据表的数据在第一数据库的服务器中所对应的第一范围,第二元数据中包括目标数据表的数据在第二数据库的服务器中所对应的第二范围。在一个具体的例子中,目标数据表table1的分布情况可以如表1所示。表1目标数据表的分布情况第一数据库的目标数据表在第一数据库的rs1上的key的范围为1-30,在第一数据库的rs2上的key的范围为31-80,在第一数据库的rs3上的key的范围为81-100。第二数据库的目标数据表在第二数据库的rs1上的key的范围为1-25,在第二数据库的rs2上的key的范围为26-60,在第二数据库的rs3上的key的范围为61-100。在s320中,客户端210根据第一范围和第二范围中的至少一个,确定目标范围。可选地,上述例子中的分布符合:第一数据库的每个服务器对应一个第一服务端221,第一范围包括目标数据表的数据在第一数据库的每个服务器的子范围,第二数据库的每个服务器对应一个第二服务端222,第二范围包括目标数据表的数据在第二数据库的每个服务器的子范围。s420中客户端210根据第一范围和第二范围中的至少一个,确定目标范围,可以包括:客户端210根据目标数据表的数据在第一数据库的每个服务器的子范围和目标数据表的数据在第二数据库的每个服务器的子范围,确定目标范围的子范围,每个子范围对应的数据在第一数据库中分布在一个服务器上,并且在第二数据库中分布在一个服务器上。具体地,客户端210可以根据两个数据表分别对应的第一范围和第二范围(即startkey和endkey的分布),作出重复范围最大匹配目标的切分,得到目标范围。目标范围包括多个子范围,每个子范围对应的数据在第一数据库中分布在一个服务器上,并且在第二数据库中分布在一个服务器上。这样,后续在对数据进行签名时,不再需要跨服务器(跨rs)进行数据传输,可以进一步提高运行速度,降低网络资源的占用量。下面详细介绍一种划分目标范围的子范围的方案。这种方案不仅使得目标范围的子范围在第一数据库中分布在一个服务器上,并且在第二数据库中分布在一个服务器上;而且还能保证划分出的子范围的个数最少。切分的具体步骤可以如下。步骤1.客户端210按照行键(rowkey)从小到大的顺序将两个数据库的目标数据表在服务器上分布的范围形成两个region队列。第一范围对应region队列a(a1,a2,…),第二范围对应region队列b(b1,b2,…)。客户端210分别从两个region队列中依次选取region。步骤2.客户端210比较被选中两个region(例如ax和by)的范围(range),看这两个region是否有重叠。这里又分为几种情况:a)如果两个region没有重叠,则将startkey较小region作为已经切分好的region(即目标范围的一个子范围)输出,然后从startkey较小的region所在的region队列中取下一个region,然后继续重复步骤2的操作,继续比较。b)如果两个region有重叠,又可以分为几种情况:i.完全重叠的情况:如图5所示,当两个region(a1和b1)完全重叠时,将其中任意一个region作为已经切分好的regionc1(即目标范围的一个子范围)输出,然后从两个region队列中分别取出下一个region,然后继续重复步骤2的操作,继续比较。ii.部分重叠的情况(startkey相同,endkey不同):如图6所示,当两个region(a1和b1)有部分重叠时,截取重叠部分,作为已经切分好的regionc1(即目标范围的一个子范围)输出。将b1进行截取,并将剩下的部分regionb1-作为新的region跟region队列a的下一个regiona2进行步骤2的比较。iii.部分重叠的情况(startkey不同,endkey也不同,一个region包含另一个region的情况):如图7所示,当regionb1中完全包含regiona1时,用regiona1的startkey和endkey将regionb1做切分,得到的c1,c2和b1-(regionb1剩余的部分)。将c1和c2(分别为目标范围的子范围)作为切分后的结果保存,将b1-和region队列a的下一个regiona2作为待比较的两个region,进行步骤2的比较。iv.部分重叠的情况(startkey不同,endkey也不同,不存在一个region包含另一个region的情况):如图8所示,regionb1的startkey小于regiona1的startkey,regionb1的endkey也小于regiona1的endkey,将regiona1的startkey和regionb1的endkey作为切分标准,对regiona1和regionb1进行切分。切分后得到的前两个regionc1和regionc2(分别为目标范围的子范围)作为结果输出,将regiona1剩下的部分a1-和region队列b的下一个regionb2作为待比较的两个region进行步骤2的比较。v.部分重叠的情况(startkey不同,endkey相同):在如图9所示的例子中,将regiona1的startkey作为切分标准,对regiona1和regionb1进行切分。切分后得到两个regionc1和regionc2(分别为目标范围的子范围)作为切分结果输出,然后将region队列a的下一个regiona2和region队列b的下一个regionb2作为待比较的两个region进行步骤2的比较。步骤3.客户端210依次读取两个数据库的目标数据表对应的第一范围中的region和第二范围中的region,直到划分完毕。对表1所示的例子中目标数据表的第一范围中的region和第二范围中的region进行划分后的结果如图10所示。目标范围包括5个子范围,每个子范围不论是在第一数据库还是在第二数据库均分布在一个rs上,不会跨rs。可选地,在s320中,客户端210也可以将第一范围和第二范围中的一个,作为目标范围,本发明实施例对划分目标范围的具体方式不作限定。在确定目标范围之后,可以直接以上述目标范围的各个子范围作为最细粒度,通过服务端对两个数据库中目标数据表的数据进行签名。可选地,作为一个实施例,在s330至少一个第一服务端根据所述目标范围,对所述第一数据库中目标数据表的数据进行签名得到第一签名,s340至少一个第二服务端根据所述目标范围,对所述第二数据库中目标数据表的数据进行签名得到第二签名之前,方法300还可以包括:客户端、至少一个第一服务端和至少一个第二服务端中的至少一个为每个子范围进行树型分段;s330至少一个第一服务端根据目标范围,对第一数据库中目标数据表的数据进行签名得到第一签名,可以包括:至少一个第一服务端根据树型分段,对第一数据库中目标数据表的数据的分段进行签名得到树型的第一签名;s340至少一个第二服务端根据目标范围,对第二数据库中目标数据表的数据进行签名得到第二签名,可以包括:至少一个第二服务端根据树型分段,对第二数据库中目标数据表的数据的分段进行签名得到树型的第二签名。这样,对目标范围的子范围进行树型分段可以得到更细化的签名,能够提高比较签名时的效率。下面结合一个具体的实施例说明本发明实施例的方法为每个子范围进行树型分段的过程。在该实施例中,客户端、至少一个第一服务端和至少一个第二服务端中的至少一个为每个子范围进行树型分段,包括:至少一个第一服务端和至少一个第二服务端对目标范围中数据的密度进行统计;至少一个第一服务端和至少一个第二服务端根据统计的结果,为每个子范围进行树型分段。具体而言,客户端210将切分好的目标范围的子范围的信息封装成统计记数的请求,发送给两个数据库的服务端。因为待比较的两个数据库中的目标数据表的数据结构是相同的,因此对每一个子范围仅需要两个数据库中的任意一个数据库的服务端进行统计记数即可。在本发明的一个实施例中,对两个数据库中的服务端进行负载均衡(loadbalance)操作。如表2所示,将子范围[0-25]分配给第二数据库的第二服务端(对应于rs1)来统计密度,将子范围[26-30]分配给第一数据库的第一服务端(对应于rs1)来统计密度。子范围[81-100]则分配给第一数据库的第一服务端或第二数据库的第二服务端均可。这样,没有rs是闲置的,也没有rs过于繁忙,可以使得各个服务器的负载均衡。当然,在本发明的其他实施例中,可以不考虑各个服务器的负载均衡,客户端210可以选择两个数据库的任意一个数据库的服务端来统计数据密度;或者,客户端210可以从两个数据库中选择一个数据库,统计数据密度均使用被选中的数据库的服务端,本发明实施例对此不作限定。表2密度统计示意目标范围的子范围第一数据库第二数据库1-25等待统计密度(rs1)26-30统计密度(rs1)等待31-58等待统计密度(rs2)59-80统计密度(rs2)等待81-100等待统计密度(rs3)根据表2,第二数据库的rs2统计得到子范围[31-58]中数据的密度,将子范围进行分段后得到,将该子范围[31-58]分成每层具有两个分支的树形,树形的最底层的各段(即粒度最细的各段)分别为[31-37][38-44][45-51][52-58]。第二数据库的rs2将该信息封装起来发送给第一数据库的rs2,格式可以如下“startkey,endkey,leastsize,childsize”,其值为“31,58,7,2”。第一数据库的rs2收到该信息后,得到树形分组的信息。第一数据库的第二服务端(对应rs2)根据树型分段读取数据,对第一数据库中目标数据表的数据的分段进行签名得到树型的第一签名。应理解,在本发明实施例中,读取数据是花费时间较长的一个环节,因此,第二数据库的rs2可以一边对目标范围的子范围中数据的密度进行统计,一边就完成了签名。服务端根据树型分段,对数据分段进行签名得到树型的签名的过程可以如下。服务端对每个子范围的树形的最底层的各段进行签名运算,然后依据树的分支,进行自下而上的建树操作。图11示出了本发明一个实施例的建立树型的签名的示意图。步骤a.先建立最细粒度的分段的数据的签名。例如,v1=[31-37],v2=[38-44],v3=[45-51],v4=[52-58]。步骤b.按照树的分支为2的设置,建立上一层的签名。例如,v5=[31-44]=签名(v1,v2),v6=[45-58]=签名(v3,v4)。步骤c.如果该层的签名个数不为1,重复执行步骤b;如果该层的签名个数为1则结束。最终得到最上边一层的签名v7=[31-58]=签名(v5,v6)。可选地,本发明实施例采用哈希算法对数据进行签名,例如,可以通过消息摘要算法第五版(messagedigestalgorithm5,md5)对数据进行签名。相应地,s330至少一个第一服务端根据目标范围,对第一数据库中目标数据表的数据进行签名得到第一签名,可以包括:至少一个第一服务端根据目标范围,通过哈希算法对第一数据库中目标数据表的数据进行签名得到第一签名;s340至少一个第二服务端根据目标范围,对第二数据库中目标数据表的数据进行签名得到第二签名,可以包括:至少一个第二服务端根据目标范围,通过哈希算法对第二数据库中目标数据表的数据进行签名得到第二签名。每个服务端得到签名之后可以将树形的第一签名或树形的第二签名反馈给客户端210。应理解,本发明实施例中每个子范围对应一个树形的签名,因此可能存在多个第一签名以及多个第二签名。每个服务端也可以仅将树形的第一签名的最高层的签名或树形的第二签名的最高层的签名反馈给客户端210。当最高层的签名不一致时,再将下层的签名发送给客户端210用于比较,本发明实施例对此不做限定。客户端210收到来自两个数据库的目标范围的子范围的签名。客户端210对签名进行比较,如果最高层的签名相等,则认为两个数据库中目标数据表的内容一致,比较结束。如果客户端210发现最高层的签名不相等,则依次比较下层的签名,直到找到签名不一致的最细粒度的分段,确定是哪些数据不一致。或者,客户端210发现最高层的签名不相等,则要求服务端返回下一层的签名,客户端210继续比较返回回来的签名,如果发现其中有不一致的,继续要求服务端返回下一层的签名,直到找到签名不一致的最细粒度的分段。概括而言,s350客户端根据第一签名和第二签名,确定第一数据库中目标数据表的数据与第二数据库中目标数据表的数据是否相同,可以包括:客户端根据树型的第一签名和树型的第二签名,确定第一签名和第二签名的树的相同层的签名是否一致,当签名不一致时,确定层对应的分段在第一数据库中目标数据表的数据与第二数据库中目标数据表的数据不同。客户端210可以根据签名不一致的最细粒度的分段,对两个数据库的目标数据表在该分段内做一次小范围查询,读出来的数据在客户端210内部做一下字符串比较,即可得到详细的数据表的差异。本发明实施例也可以不进行详细的比较,只给出目标数据表的数据是否一致即可,本发明实施例对此不作限定。图12示出了本发明实施例的设备500的示意性框图,设备500可以对应于本发明实施例的图3中所涉及的任一计算设备或服务器。如图12所示,设备500可以包括处理器510、存储器520和网络接口530。其中,处理器510可以用于执行本发明实施例的方法,存储器520可以用于存储处理器510所执行的代码,网络接口530用于与其他设备进行通信。图3的计算设备310还可以包括输出设备或与输出设备连接的输出接口,用于输出比较结果。输出设备可以包括显示器,打印机等等。设备500中的处理器、存储器和网络接口之间可以通过内部连接通路互相通信,传递控制和/或数据信号。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1