数据比对方法及服务器与流程

文档序号:18409709发布日期:2019-08-10 00:52阅读:502来源:国知局
数据比对方法及服务器与流程

本发明实施例涉及数据处理技术领域,特别涉及一种数据比对方法及服务器。



背景技术:

在局数据同步的过程中,由于各种原因经常出现各系统之间的局数据不一致的情况,比如内容接口信息局数据由子公司同步给局数据系统,再由局数据系统同步给安全管控,经常会出现子公司与局数据系统之间、局数据系统与安全管控之间接口数据不一致的场景,因此需要对各网元数据是否一致进行比对。

目前,对各网元数据是否一致进行比对时,会把第一比对数据插入第一hash表a中,然后逐条读取第二比对数据,并判断在第一hash表a中是否存在与当前读取数据相同的第一数据,如果存在就把第一相同数据从第一hash表a中删除,如果不存在就把当前数据存储在第二hash表b中。当数据读取完毕之后,第一差异数据存储在第一hash表a中、第二差异数据存储在第二hash表b中。

发明人发现现有技术中至少存在如下问题:在比对开始前,第一比对数据需要先被存入hash表中;在第一比对数据的数据量非常大的情况下,由于hash表容量的限制,会出现瓶颈,处理速度由于碰撞严重而快速下滑的问题。



技术实现要素:

本发明实施方式的目的在于提供一种数据比对方法及服务器,可以高效地处理大数据量的比对,有效解决比对方案中hash表存储容量的瓶颈问题。

为解决上述技术问题,本发明的实施方式提供了一种数据比对方法,包括:并行读取两份数据;其中,每份所述数据包含多个记录且每个所述记录形成一个哈希节点;将每个所述哈希节点尝试插入哈希树中;在尝试插入的过程中,若确定所述哈希树中存在与所述哈希节点匹配的节点,剔除所述节点。

本发明的实施方式还提供了一种服务器,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述数据比对方法。

本发明的实施方式还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述数据比对方法。

本发明实施方式相对于现有技术而言,并行读取两份数据,并当确定哈希树中存在与哈希节点匹配的节点时,剔除该节点。两份数据采用并行读取方式,可以避免现有技术中由于先要容纳完整的一份数据而可能导致的由于哈希树容量限制造成的瓶颈问题;剔除与哈希节点匹配的节点,即剔除数据比对中不需要的记录,仅保留需要的记录,可以进一步节省存储空间;因此,本发明实施例可以高效地处理大数据量的比对,有效解决比对方案中hash表存储容量的瓶颈问题。

另外,所述剔除所述节点,包括:若所述节点为子节点,选择所述节点的叶子节点替换所述节点并删除选择的所述叶子节点,若所述节点为叶子节点,删除所述节点。本实施例提出了剔除节点的一种具体方式。

另外,所述节点与所述哈希节点匹配,包括:所述节点与所述哈希节点的关键词相同且数据来源不同。本实施例提出了匹配的一种具体方式。

另外,在确定所述哈希树存在与所述哈希节点匹配的所述节点后,还包括:判断所述节点与所述哈希节点的记录内容是否相同;若所述记录内容不同,输出并保存所述节点与所述哈希节点,并进入剔除所述节点的步骤;若所述记录内容相同,直接进入所述剔除所述节点的步骤。本实施例中,还可以识别出数据源不同、关键字相同且记录内容不同的记录,即可以识别出更多种类的差异数据。

另外,所述哈希树为基于质数的哈希树。本实施例基于质数的哈希树来实现数据比对方法,容量更大且比对效率更高。

附图说明

一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。

图1是根据本发明第一实施例的数据比对方法的流程图;

图2是根据本发明第一实施例中插入hash节点的示意图;

图3是根据本发明第一实施例中剔除节点的示意图;

图4是根据本发明第二实施例的数据比对方法的流程图;

图5是根据本发明第三实施例的服务器的示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。

本发明的第一实施方式涉及一种数据比对方法,包括:并行读取两份数据;其中,每份数据包含多个记录且每个记录形成一个哈希节点;将每个哈希节点尝试插入哈希树中;在尝试插入的过程中,若确定哈希树中存在与哈希节点匹配的节点,剔除该节点。

下面对本实施方式的数据比对方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。

本实施方式中的数据比对方法可以应用于服务器,服务器用于对两份数据进行一致性比对,以识别出两份数据中的差异数据。例如,子公司要将一份数据a同步至局数据系统,为了确定局数据系统接收到的数据b与子公司发送的数据a是否完全一致,要对子公司内的这份数据a与局数据系统接收到的这份数据b进行比对。因此,服务器直接从子公司获取数据a,并直接从局数据系统获取数据b;然后对这两份数据a、b进行比对,并得到这两份数据a、b之间的差异数据。

如图1所示为第一实施例的数据比对方法的流程图,具体包括以下步骤:

步骤101,并行读取两份数据。

服务器并行读取这两份数据a、b,并将这两份数据a、b尝试插入哈希树中。具体的,每份数据包含多个记录且每个记录形成一个哈希hash节点。以其中一份数据a为例,服务器依次读取数据a中的各条记录,并将各条记录(即hash节点)插入hash树中。在读取各记录的过程中,每个记录形成一个哈希hash节点,每个hash节点包括关键字key、记录内容word以及数据源标志flag;其中,flag表示来自哪份数据,如记录1来自数据a,那么记录1的flag=a;word表示该条记录的具体内容;key可以唯一表征该条记录的特征,如该条记录的word为合作伙伴局数据,则key可以为合作伙伴代码。本实施例中,服务器尝试插入每条记录时,将一个记录处理完成后,再处理下一个记录。

本实施例中根据质数分辨定理构造hash树,以实现本实施例所述的数据对比方法。设计人员可以根据存储容量的需要选择多个质数来构建hash树。本实施例中,选择质数序列prim={3、5、7、11、13、17、19、23、29},即hash树的根节点下有3个节点,作为第一层,第一层中的每个节点下有5个节点,作为第二层,第二层中的每个节点下有7个节点,作为第三层;以此类推。根据质数分辨定理可知,这9个质数可以容纳3*5*7*11*13*17*19*23*29,即30亿的数据;本实施例中选择上述9个质数构建hash树,可以兼顾存储容量需求以及复杂度。需要说明的是,本实施例对选择的hash树的类型不作限定,任何适用于本申请的数据比对方法的hash树类型均属于本申请保护范围。

以下步骤102~107为将记录(hash节点)尝试插入基于质数的hash树的过程。

步骤102,对哈希节点的关键字进行哈希运算并得到随机数。

以其中一份数据a中的一个记录为例进行说明,该记录形成hash节点,对hash节点中的关键字key进行hash运算并得到一个随机数,以确保向将各hash节点插入到hash树的插入位置满足或近似满足随机分布。计算出随机数后进入位置搜索步骤,即进入步骤103。

步骤103,根据随机数与哈希树中当前搜索层对应的质数,确定哈希节点对应的节点位置。

具体的,利用步骤102中得到的随机数对当前搜索层对应的质数作取余数运算,并得到余数i,即,hash节点对应的节点位置为当前搜索层的第i个节点位置。

搜索hash节点对应的hash树中的节点位置,是从hash树的根节点开始查找的;因此,首先从第一层开始查找,即当前搜索层的初始值为第一层,第一层对应的质数为prim[0]=3;即,本次搜索中,hash节点对应的节点位置为第一层的第i个子节点位置。

步骤104,判断节点位置是否被占据;若未被占据,进入步骤105;若已被占据,进入步骤106。

如果该hash节点对应的节点位置尚未有其他hash节点插入,则表示该节点位置未被占据,此时该hash节点可以插入该节点位置,即步骤105;如果该hash节点对应的节点位置已经有其他hash节点插入,则表示该节点位置已经被占据。

步骤105,将哈希节点插入节点位置。

步骤106,确定节点位置的节点与哈希节点是否匹配;若是,进入步骤107;若否,则进入步骤108,然后再返回步骤103。

当该hash节点对应的节点位置已经被占据时,服务器返回该节点位置的节点,其中,该节点位置的节点也是一个hash节点,包括key、word、flag;本实施例中将待插入的记录称之为hash节点,将已经被插入在节点位置的记录称之为节点,只是为了从名字上区分这两者。服务器判断该hash节点和该节点是否匹配。本实施例中,节点位置中的节点与待插入的hash节点匹配,包括,该节点与该hash节点的关键字相同且数据来源不同。即,当该节点的key与该hash节点的key相同,且该节点的flag与该hash节点的flag不同时,可以认为该节点和该hash节点是分别来自上述两份数据的同一个记录,此时要剔除该节点,即进入步骤107;当该节点的key和该hash节点的key不相同或者该节点的flag和该hash节点的flag相同,则确定该节点和该hash节点不匹配,此时,需要往hash树的下一层继续搜索该hash节点对应的节点位置。

需要说明的是,本实施例中所述的节点位置中的节点与待插入的hash节点匹配的具体条件,仅仅是举例说明,并不以此为限;本领域技术人员可以根据实际的数据比对需要设定匹配的具体条件。

步骤107,剔除节点。

当该节点和该hash节点被确定为匹配时,就会把该节点从hash树中剔除。本实施例中剔除节点的方式包括:若该节点为子节点,选择该节点的叶子节点替换该节点并删除选择的该叶子节点,若该节点为叶子节点,删除该节点。

步骤108,根据预设规则更新当前搜索层。

在本次搜索中,当节点位置的节点与hash节点不匹配时,需要向下一层继续搜索该hash节点对应的节点位置。本实施例中的预设规则为,将当前搜索层更新为当前搜索层的下一层。如当前搜索层为第一层,则更新后的当前搜索层为第二层;如当前搜索层为第二层,则更新后的当前搜索层为第三层,以此类推。步骤108之后再返回步骤103。

如图2所示为当hash节点对应的节点位置未被占据时,hash节点插入其对应的节点位置的示意图。图2中所示为将记录1和记录2尝试插入hash树的过程。记录1中,key=10,flag=a,表示记录1来自数据a且key为10,记录2中,key=1,flag=b,表示记录2来自数据b且key为1;需要说明的是,由于记录内容的数据量较大,图2中未示出。

如图2中标有记录1的虚线所指示的,记录1对应于hash树第一层中的节点位置p1已经被一个节点(key=0,flag=a)占据且记录1与该节点不匹配,故再次搜索第二层中的节点位置p12,记录1对应于第二层中的节点位置p12未被占据,图中标志为null的表示未被占据;故将记录1插入到第二层中对应的节点位置p12;同理,如图2中标有记录2的虚线所指示的,记录2对应于hash树第一层中的节点位置p3已经被一个节点(key=1,flag=b)占据且记录2与该节点不匹配,故再次搜索第二层中的节点位置p35,记录2对应于第二层中的节点位置p35未被占据,故将记录2插入到第二层中对应的节点位置p35。图2的例子中,记录2对应于hash树第一层中的节点位置p3上的节点(key=1,flag=b),其key与flag与该hash节点相同,表示数据b中有重复的记录。

图3所示为当hash节点对应的节点位置已被占据,且节点位置的节点与该hash节点匹配时,剔除该节点的示意图。图3中所示为将记录3尝试插入hash树的过程。记录3中,key=0,flag=b,表示记录3来自数据b且key为0。如图3中标有记录3的虚线所指示的,记录3对应于hash树第一层中的节点位置p1已经被一个节点(key=0,flag=a)占据,记录3与该节点的key相同且flag不同,表示记录3与该节点匹配,两者是重复的记录,所以要将该节点(key=0,flag=a)剔除;此时,获取该节点(key=0,flag=a)的一个叶子节点node1,用该叶子节点node1替换该节点,并删除该叶子节点node1。需要说明的是,本实施例对剔除节点的方式不作任何限定,在其他例子中,也可以用该节点下层的各节点依次向上替换;例如图3中,可以先用node2替换该节点,再用node1替换node2,最后再删除node1。

本实施例中,在各记录插入hash树的过程中,可以将来自不同数据且关键字相同的记录剔除掉,即在将所有的记录处理完毕后,保存在hash树中的节点是两份数据中的差异数据,该差异数据为仅在其中一份数据中存在的记录(仅在数据a中存在,或仅在数据b中存在);遍历hash树即可得到两份数据中的这类差异数据。

本发明实施方式相对于现有技术而言,并行读取两份数据,并当确定哈希树中存在与哈希节点匹配的节点时,剔除该节点。两份数据采用并行读取方式,可以避免现有技术中由于先要容纳完整的一份数据而可能导致的由于哈希树容量限制造成的瓶颈问题,当数据量较大时,哈希树容量限制造成的瓶颈问题尤其严重;并且,剔除与哈希节点匹配的节点,即剔除数据比对中不需要的记录,仅保留需要的记录,可以进一步节省存储空间;因此,本发明实施例可以高效地处理大数据量的比对,有效解决比对方案中hash表存储容量的瓶颈问题。

本发明的第二实施方式涉及一种数据比对方法。第二实施方式与第一实施方式大致相同,主要区别之处在于:在本发明第二实施方式中,还可以识别出关键字相同但记录内容不同的节点。

如图4所示是根据本发明第二实施例的数据比对方法的流程图,包括如下步骤:

步骤201,并行读取两份数据;其中,每份数据包含多个记录且每个记录形成一个哈希节点;

步骤202,对哈希节点的关键字进行哈希运算并得到随机数,并进入位置搜索步骤;

步骤203,根据随机数与哈希树中当前搜索层对应的质数,确定哈希节点对应的节点位置;

步骤204,判断节点位置是否被占据;若未被占据,进入步骤105;若已被占据,进入步骤106;

步骤205,将哈希节点插入节点位置

步骤206,确定节点位置的节点与哈希节点是否匹配;若是,进入步骤207;若否,则进入步骤210后再返回步骤203;

其中,当确定节点位置的节点与哈希节点匹配时,即确定哈希树中存在与哈希节点匹配的节点。

步骤207,判断节点与哈希节点的记录内容是否相同;若否,则进入步骤208;若是,则进入步骤209;

步骤208,输出并保存节点与哈希节点;并进入步骤209。

步骤209,剔除节点。

步骤210,根据预设规则更新当前搜索层。

其中,步骤201~206、209~210与第一实施例中的步骤101~108大致相同,此处不再赘述;不同之处在于,还包括步骤207、208。

当步骤206中判断出节点位置的节点与hash节点匹配时,还要对节点与hash节点的记录内容是否相同进行判断;如果记录内容相同,表示该节点与hash节点完全一致,则直接进入步骤209;如果记录内容不相同,表示该节点与该hash节点并不完全一致,则进入步骤209,输出并保存该节点与该hash节点,可以将该节点与该hash节点保存在一张预设的差异数据表里,该差异数据表专门用于保存flag不同、key相同且word不同的记录。本实施例中,key相同的记录中的word存在不同,可能是由于网络传输中的各种不确定因素引起的,如数据从子公司同步给局数据系统的过程中,记录内容中的某些部分发生了丢失或改变。

本实施例相对于第一实施例而言,还可以识别出数据源不同、关键字相同且记录内容不同的记录,即可以识别出更多种类的差异数据。

上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。

本发明第三实施方式涉及一种服务器,如图5所示,包括:

至少一个处理器501;以及,

与所述至少一个处理器501通信连接的存储器502;其中,

所述存储器502存储有可被所述至少一个处理器501执行的指令,所述指令被所述至少一个处理器501执行,以使所述至少一个处理器501能够执行上述方法实施例。

该服务器还可以包括:输入装置和输出装置。

其中,存储器502和处理器501采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器501和存储器502的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器501处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器501。

处理器501负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器502可以被用于存储处理器501在执行操作时所使用的数据。

上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法实施例。

本发明第四实施方式涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。

即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。

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