数据校验方法及应用系统与流程

文档序号:20919113发布日期:2020-05-29 13:54阅读:617来源:国知局
数据校验方法及应用系统与流程

本发明涉及应用数据同步领域,具体而言,涉及一种数据校验方法及应用系统。



背景技术:

在多个应用系统中,经常需要进行数据的同步,以确保系统间数据的一致性。以多级网管系统为例,下级网管系统需要将自身的数据同步到上级网管系统,然而即使在同步之后,下级网管系统中的数据仍然可能因为各种特殊原因与上级网管系统的数据不一致,因此通常会定期对上下级网管系统之间的数据的一致性进行校验,然而在上下级网管之间存在海量同步过的数据时,校验过程变得非常耗时,严重影响多级网管系统的性能。



技术实现要素:

有鉴于此,本发明实施例提供一种数据校验方法及应用系统,将待校验的数据表分段,在校验时只对各个待校验段的校验值进行校验,从而可以显著提高数据校验的效率。

为实现上述目的,本发明提供如下技术方案:

第一方面,本发明实施例提供一种数据校验方法,应用于待校验应用系统,方法包括:

计算待校验数据表中的每个待校验段的校验值,其中,待校验数据表被划分为多个待校验段;

将待校验段的校验值、待校验段的标识以及待校验数据表的标识发送至校验应用系统,以使校验应用系统获取与待校验数据表的标识对应的校验数据表中的、与待校验段的标识对应的校验段,并校验待校验段的校验值与校验段的校验值是否一致,其中,校验数据表为曾经与待校验数据表同步过数据的数据表;

从校验应用系统接收表示待校验段的校验值与校验段的校验值是否一致的校验结果,若待校验段的校验值与校验段的校验值一致,表明待校验段中的数据与校验段中的数据一致。

在上述方法中,待校验应用系统中的校验数据表被划分为多个待校验段,在校验时,待校验应用系统只需发送包括待校验段的校验值在内的少量信息到校验应用系统进行校验,而不用发送实际的数据进行校验,从而大幅减少了需要发送给校验应用系统的数据量,校验应用系统也不需要进行大量数据的对比才能得出校验结果,因此显著提高了数据校验过程的执行效率。在采用该方法后,即使在处理海量数据时,也不会对应用系统的性能产生明显的影响,可以确保应用系统中的业务正常运行。

在一些实施例中,方法还包括:

若待校验段的校验值与校验段的校验值不一致,将待校验段中的数据发送至校验应用系统,以使校验应用系统将待校验段中的数据同步至校验段。

待校验段的校验值与校验段的校验值不一致,表明待校验段中的数据与校验段中的数据不一致,从而只需要对这样的待校验段进行同步,无需同步校验值与校验段的校验值一致的待校验段,数据同步的量较小,同步速度较快。

在一些实施例中,待校验段中能够容纳的数据条数不大于预设条数。

在划分待校验段时,可以控制其能够容纳的数据条数不大于预设条数,从而确保待校验段在需要同步时能够以比较快的速度完成同步。

在一些实施例中,方法还包括:

若待校验段的校验值与校验段的校验值不一致且不满足迭代终止条件,计算待校验段中的每个新的待校验段的校验值,其中,待校验段被划分为多个新的待校验段;

将新的待校验段的校验值、新的待校验段的标识以及待校验数据表的标识发送至校验应用系统,以使校验应用系统获取与待校验数据表的标识对应的校验数据表中的、与新的待校验段的标识对应的新的校验段,并校验新的待校验段的校验值与新的校验段的校验值是否一致;

从校验应用系统接收表示新的待校验段的校验值与新的校验段的校验值是否一致的校验结果,若新的待校验段的校验值与新的校验段的校验值不一致且满足迭代终止条件,将新的待校验段中的数据发送至校验应用系统,以使校验应用系统将新的待校验段中的数据同步至新的校验段,若新的待校验段的校验值与新的校验段的校验值不一致且不满足迭代终止条件,将新的待校验段确定为待校验段,并跳转至“计算待校验段中的每个新的待校验段的校验值”的步骤继续执行。

当已经确认待校验段的数据与校验段的数据不一致时,可以进一步将不一致的数据定位到新的待校验段中,新的待校验段是待校验段划分后获得的,相当于对不一致的数据进行了更精确的定位,在同步数据时,只需要同步包含不一致的数据的新的待校验段,数据同步的量更少,同步效率更高。在这些实施例中,这一过程是迭代执行的,若在对新的待校验段进行校验后,迭代终止条件尚未满足,新的待校验段会被当作待校验段开始下一轮迭代。

在一些实施例中,迭代终止条件包括:当前的校验段中能够容纳的数据条数不大于预设条数。

在新的校验段中能够容纳的数据条数不大于预设条数时终止迭代,从而确保待新的待校验段能够以比较快的速度完成同步。

在一些实施例中,待校验数据表包括数值类型的主键,计算待校验数据表中的每个待校验段的校验值之前,方法还包括:

根据待校验数据表中的每条数据的主键值确定主键的取值范围;

将取值范围划分为多个区间,每个区间内的主键值对应的数据构成一个待校验段,待校验段的标识包括区间的两个端点对应的主键值。

在这些实施例中,每条数据均包括数值类型的主键,从而可以确定主键的取值范围,进而根据该范围来对待校验数据表进行分段,实施起来比较简单,同时,待校验段的标识包括该段对应的主键取值区间的端点值,在校验应用系统中,只要获取到这两个端点的主键值,要获取待校验段对应的校验段是十分容易的。若原始的数据不包括主键,也可以在原始的数据保存至待校验数据表时为其添加主键,以简化后续的分段操作。

在一些实施例中,待校验数据表包括校验值字段,计算待校验数据表中每个待校验段的校验值,包括:

从待校验段中的每条数据的校验值字段中读取每条数据的校验值,并根据待校验段中的每条数据的校验值计算待校验数据的校验值。

待校数据表中专门设置校验值字段保存每条数据的校验值,从而,每次要计算待校验段的校验值时,不必重新根据待校验段中的数据进行计算,而是直接根据该段中每条数据的校验值进行计算就可以了,这样计算待校验段的校验值将会十分快捷。

在一些实施例中,根据待校验段中的每条数据的校验值计算待校验数据的校验值,包括:

将待校验段中的每条数据的校验值之和确定为待校验数据的校验值。

在一些实施例中,在计算待校验数据表中的每个待校验段的校验值之前,方法还包括:

在接收到属于待校验数据表的至少一条原始数据时,计算每条原始数据的校验值,并将每条原始数据与对应的校验值保存为待校验数据表中的一条数据;

将待校验数据表中新保存的数据发送至校验应用系统,以使校验应用系统将新保存的数据同步至校验数据表。

每条数据的校验值在待校验应用系统接收到数据时就进行计算并作为数据的一部分进行保存,从而,将数据同步到校验应用系统时,每条数据的校验值也一起同步过去,从而在进行校验时,校验应用系统可以根据每条数据的校验值计算校验段的校验值。

在一些实施例中,计算每条原始数据的校验值,包括:

将每条原始数据映射为json数据对象;

将json数据对象转化为json字符串;

利用md5算法处理json字符串,获得json字符串的信息摘要字符串;

将信息摘要字符串中的每个字符按照字符的ascii码求和,获得每条原始数据的校验值。

第二方面,本发明实施例提供一种数据校验方法,应用于校验应用系统,包括:

从待校验应用系统接收待校验数据表中的待校验段的校验值、待校验段的标识以及待校验数据表的标识;

获取与待校验数据表的标识对应的校验数据表中的、与待校验段的标识对应的校验段,计算校验段的校验值,并校验待校验段的校验值与校验段的校验值是否一致,其中,校验数据表为曾经与待校验数据表同步过数据的数据表;

将校验结果发送至待校验应用系统。

在一些实施例中,方法还包括:

从待校验应用系统接收待校验段中的数据,并将待校验段中的数据同步至校验段。

在一些实施例中,校验数据表包括校验值字段,计算校验段的校验值,包括:

从校验段中的每条数据的校验值字段中读取每条数据的校验值,并根据校验段中的每条数据的校验值计算校验数据的校验值。

第三方面,本发明实施例提供一种待校验应用系统,包括:

校验值获取模块,用于计算待校验数据表中的每个待校验段的校验值,其中,待校验数据表被划分为多个待校验段;

校验模块,用于将待校验段的校验值、待校验段的标识以及待校验数据表的标识发送至校验应用系统,以使校验应用系统获取与待校验数据表的标识对应的校验数据表中的、与待校验段的标识对应的校验段,并校验待校验段的校验值与校验段的校验值是否一致,其中,校验数据表为曾经与待校验数据表同步过数据的数据表;

校验结果管理模块,从所述校验应用系统接收表示所述待校验段的校验值与所述校验段的校验值是否一致的校验结果,若所述待校验段的校验值与所述校验段的校验值一致,表明所述待校验段中的数据与所述校验段中的数据一致。

在一些实施例中,校验结果管理模块,还用于若待校验段的校验值与校验段的校验值不一致,将待校验段中的数据发送至校验应用系统,以使校验应用系统将待校验段中的数据同步至校验段。

在一些实施例中,待校验段中能够容纳的数据条数不大于预设条数。

在一些实施例中,校验值获取模块,还用于若待校验段的校验值与校验段的校验值不一致且不满足迭代终止条件,计算待校验段中的每个新的待校验段的校验值,其中,待校验段被划分为多个新的待校验段;

校验模块,还用于将新的待校验段的校验值、新的待校验段的标识以及待校验数据表的标识发送至校验应用系统,以使校验应用系统获取与待校验数据表的标识对应的校验数据表中的、与新的待校验段的标识对应的新的校验段,并校验新的待校验段的校验值与新的校验段的校验值是否一致;

校验结果管理模块,还用于从校验应用系统接收表示新的待校验段的校验值与新的校验段的校验值是否一致的校验结果,若新的待校验段的校验值与新的校验段的校验值不一致且满足迭代终止条件,将新的待校验段中的数据发送至校验应用系统,以使校验应用系统将新的待校验段中的数据同步至新的校验段,若新的待校验段的校验值与新的校验段的校验值不一致且不满足迭代终止条件,将新的待校验段确定为待校验段,并跳转至“计算待校验段中的每个新的待校验段的校验值”的步骤继续执行。

在一些实施例中,迭代终止条件包括:当前的校验段中能够容纳的数据条数不大于预设条数。

在一些实施例中,系统还包括:

取值范围获取模块,用于根据待校验数据表中的每条数据的主键值确定主键的取值范围;

数据分段模块,用于将取值范围划分为多个区间,每个区间内的主键值对应的数据构成一个待校验段,待校验段的标识包括区间的两个端点对应的主键值。

在一些实施例中,待校验数据表包括校验值字段,校验值获取模块,具体用于从待校验段中的每条数据的校验值字段中读取每条数据的校验值,并根据待校验段中的每条数据的校验值计算待校验数据的校验值。

在一些实施例中,校验值获取模块,具体用于将待校验段中的每条数据的校验值之和确定为待校验数据的校验值。

在一些实施例中,校验值获取模块,还用于在接收到属于待校验数据表的至少一条原始数据时,计算每条原始数据的校验值,并将每条原始数据与对应的校验值保存为待校验数据表中的一条数据;

校验结果管理模块,还用于将待校验数据表中新保存的数据发送至校验应用系统,以使校验应用系统将新保存的数据同步至校验数据表。

在一些实施例中,校验值获取模块,具体用于:

将每条原始数据映射为json数据对象;

将json数据对象转化为json字符串;

利用md5算法处理json字符串,获得json字符串的信息摘要字符串;

将信息摘要字符串中的每个字符按照字符的ascii码求和,获得每条原始数据的校验值。

第四方面,本发明实施例提供一种校验应用系统,包括:

校验信息接收模块,用于从待校验应用系统接收待校验数据表中的待校验段的校验值、待校验段的标识以及待校验数据表的标识;

校验模块,用于获取与待校验数据表的标识对应的校验数据表中的、与待校验段的标识对应的校验段,计算校验段的校验值,并校验待校验段的校验值与校验段的校验值是否一致,其中,校验数据表为曾经与待校验数据表同步过数据的数据表;

校验结果发送模块,用于将校验结果发送至待校验应用系统。

在一些实施例中,系统还包括:

数据同步模块,用于从待校验应用系统接收待校验段中的数据,并将待校验段中的数据同步至校验段。

在一些实施例中,校验数据表包括校验值字段,校验模块,具体用于从校验段中的每条数据的校验值字段中读取每条数据的校验值,并根据校验段中的每条数据的校验值计算校验数据的校验值。

第五方面,本发明实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行本发明实施例提供的方法的步骤。

第六方面,本发明实施例提供一种电子设备,包括存储器以及处理器,存储器中存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行本发明实施例提供的方法的步骤。

为使本发明的上述目的、技术方案和有益效果能更明显易懂,下文特举实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例提供的一种数据校验方法的流程图;

图2示出了本发明实施例提供的一种数据校验方法的交互图;

图3示出了本发明实施例提供的一种数据校验方法的交互图;

图4示出了本发明实施例提供的一种待校验应用系统的功能模块图;

图5示出了本发明实施例提供的一种校验应用系统的功能模块图。

具体实施方式

在多级网管系统中,下级网管系统需要将自身的数据同步到上级网管系统,以使上级网管系统能够全面监控网络的状况。然而,即使在同步之后,下级网管系统中的数据仍然可能因为各种特殊原因与上级网管系统的数据不一致,因此在实际中,通常会建立定时任务,定期对上下级网管系统之间的数据的一致性进行校验:下级网管系统定期将希望校验的数据全部发送至上级网管系统,上级网管系统将接收到的数据和之前同步的数据进行比较,发现数据不一致时,重新进行同步。

发明人经长期研究实践发现,在数据总量较少时,上述校验方法尚可正常运作,但当上下级网管之间存在海量同步过的数据时,在校验时,下级网管系统需要发送的数据量、上级网管系统需要对比的数据量也过大,导致校验过程变得非常耗时,严重影响多级网管系统的性能。并且,发明人还进一步发现,该问题不仅仅存在于多级网管系统中,凡是需要确保数据同步的应用系统之中,都肯能存在该问题。

现有技术中存在的上述缺陷,是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本发明实施例针对上述问题所提出的解决方案,都应该是发明人在本发明过程中对本发明做出的贡献。

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于将一个实体或者操作与另一个实体或操作区分开来,而不能理解为指示或暗示相对重要性,也不能理解为要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本发明实施例提供的数据校验方法应用于待校验应用系统以及校验应用系统中,待校验应用系统与校验应用系统之间曾经同步过数据,但为了确保二者间数据的一致性,还需要在同步之后对数据的一致性进行校验(例如,以定期校验的方法),在发现数据不一致时,重新同步不一致的数据。这里的待校验应用系统和校验应用系统可以是,但不限于软件应用系统,例如待校验应用系统可以为下级网管系统,校验应用系统可以是上级网管系统。可以理解的,待校验应用系统还可以是任意的需要将数据发送到校验应用系统上进行校验的系统,校验应用系统还可以是任意的能够对接收到的数据进行校验,并将校验结果反馈至待校验应用系统的系统。

图1示出了本发明实施例提供的一种数据校验方法的流程图。图1中的方法应用于待校验应用系统。参照图1,该方法具体包括:

步骤s10:计算待校验数据表中的每个待校验段的校验值。

待校验应用系统的数据库中存储有一个或多个数据表,待校验数据表是指其中需要进行校验的数据表,待校验数据表中存储有待校验的数据,对数据的校验以数据表为单位进行。待校验数据表按照预设的规则被划分为多个数据段,每个数据段中至少可以容纳一条数据。

每个待校验段可以计算该段的一个校验值,校验值是和待校验段中的数据相关的,待校验段中的数据如果发生变化,待校验段计算出的校验值也会相应地变化(至少在极大的概率上会相应地变化),例如待检验段的校验值可以为段中的数据的信息摘要,可以采用某些哈希算法或者类似算法进行计算。

每个待校验段采用相同的方式进行校验,所以后文在阐述时常常以其中任意一个待校验段为例进行阐述。

步骤s11:将待校验段的校验值、待校验段的标识以及待校验数据表的标识发送至校验应用系统。

校验应用系统的数据库中存储有校验数据表,校验数据表和待校验数据表实际上是同一张数据表的两个副本,在之前两个系统同步数据时待校验数据表被同步至校验应用系统中,成为校验数据表,从而两张数据表的标识是相同的,因此校验应用系统根据待校验数据表的标识可以获取到校验数据表,这里数据表的标识可以是,但不限于数据表的表名。

根据待校验段的标识能够从待校验数据表中获取待校验段,由于校验数据表和待校验数据表具有相同的结构,因此根据待校验段的标识从校验数据表中也能够获得一个对应的数据段,称为校验段。例如,如果两个系统采用同样的规则对数据表进行分段,则待校验段的标识可以是待校验段的分段序号。又例如,待校验段的标识可以是对段中数据的某种描述,根据这种描述能够确定待校验段中包含哪些数据,相当于能够确定待校验段在待校验数据表中的位置。

虽然校验数据表与待校验数据表曾经同步过数据,但因为同步过程中的异常,或者同步之后的其他特殊原因,待校验数据表和校验数据表中的数据仍然可能与校验数据表中的数据不一致,具体而言,即待校验段中的数据可能与校验段中的数据不一致。在本发明实施例中,通过在校验应用系统中对比待校验段与校验段的校验值来校验两个数据段中的数据是否一致并获得校验结果,校验段的校验值采用和待校验段的校验值同样的方式进行计算,以确保校验是有意义的。

步骤s12:从校验应用系统接收表示待校验段的校验值与校验段的校验值是否一致的校验结果。

校验应用系统将获得的校验结果发送至待校验应用系统,若待校验段的校验值与校验段的校验值一致,表明待校验段中的数据与校验段中的数据一致,若待校验段的校验值与校验段的校验值不一致,表明待校验段中的数据与校验段中的数据不一致。在对待校验数据表中的所有待校验段进行校验后,就可以确定整个待校验数据表中的数据与校验数据表中的数据的一致性状况。

在上述方法中,校验数据表被划分为多个待校验段逐段进行校验,在校验时,待校验应用系统只需发送包括待校验段的校验值在内的少量信息到校验应用系统,并不用发送实际的数据进行校验,从而大幅减少了需要发送给校验应用系统的数据量,校验应用系统也只需要对比待校验段的校验值与校验段的校验值就能够获得校验结果,并不需要对比实际的数据,因此显著提高了数据校验过程的执行效率。在采用该方法后,即使在处理海量数据时,也不会对应用系统的性能产生明显的影响,从而可以确保应用系统中的业务逻辑的正常执行。

图2示出了本发明实施例提供的一种数据校验方法的交互图。下面参照图2,再进一步说明该方法的步骤:

s20:待校验应用系统计算待校验数据表中的待校验段的校验值。

在一些实施例中,待校验数据表包括校验值字段,即待校验段中的每条数据都有一个校验值存储于该字段中。每条数据的校验值是和该条数据的其余部分相关的,如果数据的其余部分发生变化,则该条数据计算出的校验值也会相应地变化(至少在极大的概率上会相应地变化),例如一条数据校验值可以为除校验值以外的其余部分的信息摘要,可以采用某些哈希算法或者类似算法进行计算。

在这些实施例中,可以从待校验段中的每条数据的校验值字段中读取每条数据的校验值,并根据待校验段中的每条数据的校验值计算待校验数据的校验值。例如,可以将待校验数据的校验值定义为待校验段中的每条数据的校验值之和,也可以将待校验数据的校验值定义为上述校验值之和再进行哈希运算后的结果,等等。

从而,在这些实施例中,每次要计算待校验段的校验值时,不必重新根据待校验段中的数据进行计算,而是直接根据该段中每条数据的校验值进行计算就可以了,这样计算速度将会大大加快。同时,由于每条数据的校验值与数据的内容同步地变化,从而根据每条数据的校验值计算出的待校验段的校验值与待校验段中的数据的内容也是同步变化的,即任意一条数据内容的变化都将导致待校验段的校验值的变化。

对于待校验段中每条数据的校验值,可以在数据存储至待检验数据表之前就进行计算并在计算好后作为数据的一部分保存。

例如,待校验应用系统从不同的渠道,比如其他业务系统接收属于待校验数据表的原始数据,原始数据中并不包括校验值。待校验应用系统计算每条原始数据的校验值,并将每条原始数据与对应的校验值保存为待校验数据表中的一条数据,即待校验数据表中的一条数据时包括校验值的。下面给出一种校验值的具体计算方法:

a.将每条原始数据映射为json数据对象;

b.将json数据对象转化为json字符串;

c.利用md5算法处理json字符串,获得json字符串的信息摘要字符串;

d.将信息摘要字符串中的每个字符按照字符的ascii码求和,获得每条原始数据的校验值。

可以理解的,以上计算方法仅为示例,在实施时也可以采用其他方法计算每条数据的校验值。待校验应用系统在存储完数据后,将待校验数据表中新保存的数据(之前保存的数据之前已经同步过了)发送至校验应用系统,以使校验应用系统将新保存的数据同步至校验数据表。待校验数据表的结构与校验数据表的结构是相同的,若待校验数据表中包括校验值字段,则校验数据表中也包括校验值字段,此时每条包括校验值在内的数据被同步到校验数据表中。

下面以具体的数据为例说明每条数据的校验值的计算方法,假设待校验数据表为:

user(idbigint,namevarchar(50),addressvarchar(50),checkbigint)其中,最后一个字段为校验值字段,若待校验应用系统中的待校验数据表本来没有校验值字段,为支持本发明实施例提供的数据校验方法,可以为其添加一个字段。假设业务系统向待校验应用系统提交了一条原始数据user(1,张三,北京市),该条原始数据应当存储至上述待校验数据表。

先将该条原始数据映射为json数据对象:

{id:1,name:"张三",address:"北京市"}

然后将其转化为json字符串:

"{"id":1,"name":"张三","address":"北京市"}"

例如,可以直接调用函数json.stringify(json)进行转化,其中,json为json数据对象。

利用md5算法处理上述json字符串,获得json字符串的信息摘要字符串,根据md5算法输出128bit的结果,在实际中常常按照每4bit一个十六进制数,将结果表示为一个32字节的信息摘要字符串(也有的表示方法从中进一步取16字节),对于上面的json字符串,对应的信息摘要字符串为:

c3800f54d25d8848afe9f14d6e41fb99

将信息摘要字符串中的每个字符按照字符的ascii码求和,即计算'c'+'3'+'8'+…+'9'得到结果2262,2262就是根据原始数据计算出的校验值。将user(1,张三,北京市,2262)作为一条数据保存至待校验数据表,对每条新接收到的原始数据都计算校验值并保存至待校验数据表后,将这些数据同步至校验数据表,此时校验数据表中也包含一条数据user(1,张三,北京市,2262)。

s21:待校验应用系统向校验应用系统发送待校验段的校验值、待校验段的标识以及待校验数据表的标识。

待校验段的校验值、待校验数据表的标识之已经阐述过。下面再具体说明待校验段的段标识的产生。段标识的实现方式和待校验段的划分方式有关。可以在每次开始待校验数据表的校验之前执行分段操作,或者如果不需要重新分段,可以沿用上次校验时的分段结果。

在一些实现方式中,待校验数据表中的每条数据都包含数值类型的主键,如步骤s20的例子中,user表中的id字段为bigint类型,因此可以作为主键,在这些实现方式中,如果原始数据中不包括主键,可以在其保存至待校验数据表时为其添加主键。

由于主键为数值类型,从而可以确定待校验数据表中主键的取值范围。例如,user表中数据的id值均为正整数的,最小值为100,最大值为50000000,则取值范围可以是[100,50000000]。可选的,取值范围并不一定恰好是待校验数据表中的实际数据的主键的取值范围,只要包含这个范围就可以了。例如,上面的例子中,由于id值均为正整数,取值范围也可以是[1,50000000],尽管id值[1,99]可能并未对应任何实际存在的数据,但在确定主键的取值范围时仍可将该区间涵盖在其中,以简化计算。

确定好主键的取值范围后,可以根据预设的规则将该取值范围划分为多个区间,例如,采取平均划分的方式,将[1,50000000]划分为100个区间,分别是id值为[1,500000]、[500001,1000000]、…、[4950001,5000000]的区间。每个区间内的数据构成一个待校验段,在上述例子中,共有100个待校验段,每个待校验段可以容纳500000条数据,当然,每个待校验段中并不一定有500000条数据,也有可能存在数据的id值并不连续的情况。

在通过主键值划分待校验段的实现方式中,待校验段的标识可以为该段对应的主键值区间的两个端点对应的主键值。例如,对应于id值区间[1,500000]的校验段的标识为id=1和id=500000。通过段的标识可以从待校验数据表中获取数据段并计算校验值。例如,通过执行如下的结构化查询语言(structuredquerylanguage,sql)语句:

selectsum(check)fromuserwhereid>=1andid<=500000

该语句标识从名为user待校验数据表中,获取id值在[1,500000]区间内的所有数据的校验值check,并计算这些数据的校验值之和,即待校验段的校验值,不妨记为check0。

在该例子中,步骤s21发送的三项信息分别为,待校验段的校验值sum(check)、待校验段的标识1和500000以及待校验数据表的标识user。通过主键的取值范围来对待校验数据表进行分段,实施起来比较简单,便于生成对应的sql语句计算待校验段的校验值,但可以理解的,在其他一些实现方式中,也可以不通过主键对待校验数据表进行分段,或者即使通过主键对待校验数据表进行分段,也可以采用不同的方式实现待校验段的标识和待校验数据表的标识。

s22:校验应用系统获取校验数据表中的校验段,计算校验段的校验值,校验待校验段的校验值与校验段的校验值是否一致。

从待校验数据表中获取待校验段的方式和从校验数据表中获取校验段的方式是相同的,计算待校验段的校验值的方式和计算校验段的校验值的方式也是相同的,这样才能够确保校验的是对应的数据,这样获得的校验结果才是有意义的。

例如,在接收到待校验段的校验值check0、待校验段的标识1和500000以及待校验数据表的标识user之后,校验应用系统也可以执行sql语句:

selectsum(check)fromuserwhereid>=1andid<=500000

获得校验段的校验值,不妨记为check1,由于校验数据表和待校验数据表之前本来就是同一张表的副本,因此该sql语句可以正常工作。比较check0和check1就可以获得校验结果,校验结果共两种,一致和不一致。可见,校验过程不涉及比较实际的数据,只需要比较段的校验值就可以了,并且比较过程通过简单的sql语句就可以完成,非常高效,待校验应用系统和校验应用系统之间需要交互的数据量也非常少。

s23:校验应用系统向待校验应用系统发送校验结果。

s24:待校验应用系统根据校验结果判断待校验段的校验值与校验段的校验值是否一致。

若校验结果为两个校验值一致,表示待校验段的数据与校验段的数据一致,这个待校验段无需重新同步,可以去校验下一个待校验段。若校验结果为两个校验值不一致,表示待校验段的数据与校验段的数据不一致,这个待校验段需重新同步,执行步骤s25。

s25:待校验应用系统向校验应用系统发送待校验段中的数据。根据实施方式的不同,步骤s25也可能需要发送其他信息,例如待校验段的标识,待校验数据表的标识等。

s26:校验应用系统将待校验段中的数据同步至校验段。

例如,校验应用系统接收到待校验段中的数据后,可以用这些数据覆盖掉校验段中的数据,当然也可以采用其他同步方式,总之,正常同步后的校验段中的数据与待校验段中的数据恢复为一致。

由于在校验时,是分段进行校验的,各校验段之间彼此独立。因此一旦某个待校验段与校验段的数据不一致,只需要对该校验段进行数据同步,并不涉及其他待检验段。在多数情况下,只有少量的待检验段需要进行数据同步,数据同步的量较小,同步速度较快。

可选的,既然每个待校验段的校验和同步过程相互独立,可以采用并行机制进行处理,进一步加快数据校验和数据同步的过程。

可选的,在划分待校验段时,可以考虑数据库的性能等因素,来确定每个待校验段所能容纳的数据的条数,例如,限制每个待校验段中能够容纳的数据的条数不大于预设条数。例如,对于上面的例子,虽然sql语句本身较为简单,但仍然涉及一定量的数据库查询和计算操作,若待校验段中的数据量较大,可能成为性能瓶颈,可以在划分id值的区间[1,50000000]时,将分段的数量设置为5000段,从而限制每个待校验段中的数据最多不超过10000条(即预设条数),这样每个待校验段中的数据都能够被正常处理。当然,若数据库的性能较优,可以将预设条数设置为较大的值。

在面对海量数据时,即使将待校验数据表划分了待校验段,待校验段中的数据量仍然可能较大,同步过程耗时较长,或者像上面的可选方式中的,限定待校验段中能够容纳的数据条数,但有可能导致待校验段的数量较多,处理这些待校验段的时间也会增长。在本发明的一些实施例中,采用图3示出的数据校验方法改善这一问题。参照图3,该方法包括如下步骤:

s30:待校验应用系统判断待校验段的校验值与校验段的校验值是否一致。

步骤s30可以在步骤s23之后紧接着执行,在步骤s23中由于获得了校验结果,因此待校验应用系统可以判断待校验段的校验值与校验段的校验值是否一致。若待校验段的校验值与校验段的校验值不一致,执行步骤s31,若待校验段的校验值与校验段的校验值一致,则无需进行进一步处理。

s31:待校验应用系统判断是否满足迭代终止条件。

迭代终止条件具体不作限定,例如,可以是迭代次数不超过预设次数、迭代时长不超过预设时长或者当前的校验段中能够容纳的数据条数不大于预设条数,等等。若不满足迭代终止条件,执行步骤s32,若满足迭代终止条件,可以参考步骤s25以及步骤s26执行,不再具体阐述。

考虑选取预设时长或者当前的校验段中能够容纳的数据条数不大于预设条数作为迭代终止条件的情况,在执行步骤s31时,当前的待校验段就是指划分待校验数据表后获得的待校验段。沿用在阐述图2时提到的例子,划分待校验数据表时,将id值的取值范围[1,50000000]划分为100个区间,分别是id值为[1,500000]、[500001,1000000]、…、[4950001,5000000]的区间,每个区间内的数据构成一个待校验段,共有100个待校验段,每个待校验段可以容纳500000条数据,假设预设条数为10000条,显然500000>10000并不满足迭代终止条件。此时可以进一步将待校验段划分为新的待校验段,例如,对于id值为[1,500000]的区间,再将其平均划分为100个新的区间,分别是id值为[1,50000]、[50001,100000]、…、[495001,500000]的区间,每个新的区间内的数据构成一个新的待校验段,共有100个新的待校验段,每个新的待校验段可以容纳50000条数据,划分好新的待校验段后执行步骤s32。

s32:待校验应用系统计算待校验段中的新的待校验段的校验值。

s33:待校验应用系统向校验应用系统发送新的待校验段的校验值、新的待校验段的标识以及待校验数据表的标识。

s34:校验应用系统获取校验表中的新的校验段,计算新的校验段的校验值,校验新的待校验段的校验值与新的校验段的校验值是否一致。

s35:校验应用系统向待校验应用系统发送校验结果。

新的待校验段和校验段实际上都是待校验数据表中的数据段,并无本质区别,因此步骤s32至步骤s35与步骤s20至步骤s23类似,不再详细阐述。

s36:待校验应用系统根据校验结果判断新的待校验段的校验值与新的校验段的校验值是否一致。

若校验结果为两个校验值一致,表示新的待校验段的数据与新的校验段的数据一致,新的待校验段无需重新同步,可以去校验下一个新的待校验段。若校验结果为两个校验值不一致,表示新的待校验段的数据与新的校验段的数据不一致,执行步骤s37。

s37:待校验应用系统判断是否满足迭代终止条件。

关于迭代终止条件,在步骤s31中已经介绍。若不满足迭代终止条件,执行步骤s40,若满足迭代终止条件,则执行步骤s38。

以选取预设时长或者当前的校验段中能够容纳的数据条数不大于预设条数作为迭代终止条件为例,在执行步骤s37时,当前的待校验段是指新的待校验段。沿用步骤s31中提到的例子,新的待校验段可以容纳50000条数据,预设条数为10000条,50000>10000不满足迭代终止条件,应执行步骤s40开始迭代。假设在某次迭代后获得的新的待校验段可以容纳500条数据,500>10000满足迭代终止条件,则执行步骤s38。

s38:待校验应用系统向校验应用系统发送新的待校验段中的数据。

s39:校验应用系统将新的待校验段中的数据同步至新的校验段。

步骤s38至步骤s39与步骤s25至步骤s26类似,不再详细阐述。由于步骤s38是在满足迭代终止条件之后执行的,此时,待校验段可能已经经过多次划分,新的待校验段中的数据已经比较少了,例如,上面例子中的500条,对这样少的数据进行同步,效率较高。并且,只有当待校验段中的数据存在不一致的情况下,才会对其进一步划分,而数据不一致的情况是比较少见的,因此不会产生太多新的待校验段,处理这些新的待校验段也不会花费太多时间。

s40:待校验应用系统跳转至步骤s30开始迭代。

迭代时,将新的待校验段确定为待校验段即可,每经过一次迭代,产生的新的待校验段中能够容纳的数据条数将比迭代之前的待校验段更少,例如,若的待校验段中能够容纳5000000条数据,每次迭代划分100个新的待校验段,两次次迭代后产生的新的待校验段中将智能容纳500条数据,这一数据量已经足够小,同步起来效率很高。

上述方法在已经确认待校验段的数据与校验段的数据不一致时,可以进一步将不一致的数据定位到新的待校验段中,新的待校验段是待校验段划分后获得的,相当于对不一致的数据进行了更精确的定位,在同步数据时,只需要同步包含不一致的数据的新的待校验段,数据同步的量更少,同步效率更高。在这些实施例中,这一过程是迭代执行的,若在对新的待校验段进行校验后,迭代终止条件尚未满足,新的待校验段会被当作待校验段开始下一轮迭代,不断缩小不一致的数据所在的范围,不断减小需要同步的数据量。

本发明实施例还提供一种如图4所示的待校验应用系统500。参照图4,该系统包括:

校验值获取模块510,用于计算待校验数据表中的每个待校验段的校验值,其中,待校验数据表被划分为多个待校验段;

校验模块520,用于将待校验段的校验值、待校验段的标识以及待校验数据表的标识发送至校验应用系统,以使校验应用系统获取与待校验数据表的标识对应的校验数据表中的、与待校验段的标识对应的校验段,并校验待校验段的校验值与校验段的校验值是否一致,其中,校验数据表为曾经与待校验数据表同步过数据的数据表;

校验结果管理模块530,从所述校验应用系统接收表示所述待校验段的校验值与所述校验段的校验值是否一致的校验结果,若所述待校验段的校验值与所述校验段的校验值一致,表明所述待校验段中的数据与所述校验段中的数据一致。

在本实施例的一些实现方式中,校验结果管理模块530,还用于若待校验段的校验值与校验段的校验值不一致,将待校验段中的数据发送至校验应用系统,以使校验应用系统将待校验段中的数据同步至校验段。

在本实施例的一些实现方式中,待校验段中能够容纳的数据条数不大于预设条数。

在本实施例的一些实现方式中,校验值获取模块510,还用于若待校验段的校验值与校验段的校验值不一致且不满足迭代终止条件,计算待校验段中的每个新的待校验段的校验值,其中,待校验段被划分为多个新的待校验段;

校验模块520,还用于将新的待校验段的校验值、新的待校验段的标识以及待校验数据表的标识发送至校验应用系统,以使校验应用系统获取与待校验数据表的标识对应的校验数据表中的、与新的待校验段的标识对应的新的校验段,并校验新的待校验段的校验值与新的校验段的校验值是否一致;

校验结果管理模块530,还用于从校验应用系统接收表示新的待校验段的校验值与新的校验段的校验值是否一致的校验结果,若新的待校验段的校验值与新的校验段的校验值不一致且满足迭代终止条件,将新的待校验段中的数据发送至校验应用系统,以使校验应用系统将新的待校验段中的数据同步至新的校验段,若新的待校验段的校验值与新的校验段的校验值不一致且不满足迭代终止条件,将新的待校验段确定为待校验段,并跳转至“计算待校验段中的每个新的待校验段的校验值”的步骤继续执行。

在本实施例的一些实现方式中,迭代终止条件包括:当前的校验段中能够容纳的数据条数不大于预设条数。

在本实施例的一些实现方式中,系统还包括:

取值范围获取模块,用于根据待校验数据表中的每条数据的主键值确定主键的取值范围;

数据分段模块,用于将取值范围划分为多个区间,每个区间内的主键值对应的数据构成一个待校验段,待校验段的标识包括区间的两个端点对应的主键值。

在本实施例的一些实现方式中,待校验数据表包括校验值字段,校验值获取模块510,具体用于从待校验段中的每条数据的校验值字段中读取每条数据的校验值,并根据待校验段中的每条数据的校验值计算待校验数据的校验值。

在本实施例的一些实现方式中,校验值获取模块510,具体用于将待校验段中的每条数据的校验值之和确定为待校验数据的校验值。

在本实施例的一些实现方式中,校验值获取模块510,还用于在接收到属于待校验数据表的至少一条原始数据时,计算每条原始数据的校验值,并将每条原始数据与对应的校验值保存为待校验数据表中的一条数据;

校验结果管理模块530,还用于将待校验数据表中新保存的数据发送至校验应用系统,以使校验应用系统将新保存的数据同步至校验数据表。

在本实施例的一些实现方式中,校验值获取模块510,具体用于:

将每条原始数据映射为json数据对象;

将json数据对象转化为json字符串;

利用md5算法处理json字符串,获得json字符串的信息摘要字符串;

将信息摘要字符串中的每个字符按照字符的ascii码求和,获得每条原始数据的校验值。

本发明实施例提供的待校验应用系统500,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,装置实施例部分未提及之处,可参考方法施例中相应内容。

本发明实施例还提供一种如图5所示的校验应用系统600。参照图5,该系统包括:

校验信息接收模块610,用于从待校验应用系统接收待校验数据表中的待校验段的校验值、待校验段的标识以及待校验数据表的标识;

校验模块620,用于获取与待校验数据表的标识对应的校验数据表中的、与待校验段的标识对应的校验段,计算校验段的校验值,并校验待校验段的校验值与校验段的校验值是否一致,其中,校验数据表为曾经与待校验数据表同步过数据的数据表;

校验结果发送模块630,用于将校验结果发送至待校验应用系统。

在本实施例的一些实现方式中,系统还包括:

数据同步模块,用于从待校验应用系统接收待校验段中的数据,并将待校验段中的数据同步至校验段。

在本实施例的一些实现方式中,校验数据表包括校验值字段,校验模块620,具体用于从校验段中的每条数据的校验值字段中读取每条数据的校验值,并根据校验段中的每条数据的校验值计算校验数据的校验值。

本发明实施例提供的校验应用系统600,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,装置实施例部分未提及之处,可参考方法施例中相应内容。

本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行本发明实施例提供的数据校验方法的步骤。

本发明实施例还提供一种电子设备,包括存储器以及处理器,存储器中存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行本发明实施例提供的数据校验方法的步骤。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其他的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得计算机设备执行本发明各个实施例所述方法的全部或部分步骤。前述的计算机设备包括:个人计算机、服务器、移动设备、智能穿戴设备、网络设备、虚拟设备等各种具有执行程序代码能力的设备,前述的存储介质包括:u盘、移动硬盘、只读存储器、随机存取存储器、磁碟、磁带或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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