CN111917834A - 一种数据同步方法、装置、存储介质及计算机设备 - Google Patents
一种数据同步方法、装置、存储介质及计算机设备 Download PDFInfo
- Publication number
- CN111917834A CN111917834A CN202010668230.0A CN202010668230A CN111917834A CN 111917834 A CN111917834 A CN 111917834A CN 202010668230 A CN202010668230 A CN 202010668230A CN 111917834 A CN111917834 A CN 111917834A
- Authority
- CN
- China
- Prior art keywords
- data
- server
- target
- hash
- data set
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1095—Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种数据同步方法、装置、存储介质及计算机设备;本申请实施例与云储存的文件存储以及数据库同步相关,本申请实施例可以获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树;基于第一哈希树和第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识;确定目标标识在数据集和目标数据集对应的第一数据和第二数据;根据第一数据和第二数据的版本信息之间的区别进行数据同步。本申请可以有效提高数据同步效率。
Description
技术领域
本申请涉及数据存储领域,具体涉及一种数据同步方法、装置、存储介质及计算机设备。
背景技术
在分布式数据存储的过程中,可以为数据集中的一份数据设置多个副本,并将不同的副本存放在不同的服务器中,以确保数据的可靠性和可用性,由于对数据的修改和读写是不间断的,但部分服务器并非始终处于可用状态,因此部分服务器中数据的副本值并不是此数据的最新数据值。
在对现有技术的研究和实践过程中,本申请的发明人发现,在将多个服务器中的副本进行同步的过程中会读取大量的数据进行比对,由于数据集中数据的数量巨大,同步的时间往往很慢,使得数据同步效率较下。
发明内容
本申请实施例提供一种数据同步方法、装置、存储介质及计算机设备,可以提高数据同步效率。
本申请实施例提供一种数据同步方法,包括:
获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树;
基于所述第一哈希树和所述第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识;
确定所述目标标识在所述数据集和所述目标数据集对应的第一数据和第二数据;
根据所述第一数据和所述第二数据的版本信息之间的区别进行数据同步。
相应地,本申请实施例提供一种数据同步装置,包括:
获取模块,用于获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树;
对比模块,用于基于所述第一哈希树和所述第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识;
确定模块,用于确定所述目标标识在所述数据集和所述目标数据集对应的第一数据和第二数据;
同步模块,用于根据所述第一数据和所述第二数据的版本信息之间的区别进行数据同步。
在本申请的一些实施例中,获取模块包括数据子模块、设置子模块和循环子模块,其中,
数据子模块,用于对第一服务器上的数据集中的每一数据做哈希计算,得到每一数据的哈希值;
设置子模块,用于将第一服务器上的每一数据的哈希值设置为叶子节点的数值,并对叶子节点的数值之和进行哈希计算,得到上层节点的数值;
循环子模块,用于循环对上层节点的数值之和进行哈希计算,得到新的上层节点的数值,直至上层节点为根节点结束,以得到数据集的第一哈希树。
在本申请的一些实施例中,第一服务器上的数据集中包含多个数据,每一数据包含标识、数据值和版本信息,数据子模块具体用于:
对第一服务器上的数据集中的每一包含标识、数据值和版本信息的数据做哈希计算,得到每一数据的哈希值。
在本申请的一些实施例中,对比模块包括设置子模块、循环子模块和获取子模块,其中,
设置子模块,用于将所述第一哈希树和所述第二哈希树上的根节点的子节点中哈希值不同的子节点设置为候选节点;
循环子模块,用于循环将第一哈希树和所述第二哈希树上的候选节点的子节点中哈希值不同的子节点替换为新的候选节点,直至候选节点为叶子节点结束;
获取子模块,用于将循环结束时的候选节点确定为目标叶子节点,并获取目标叶子节点对应的目标标识。
在本申请的一些实施例中,数据同步装置还包括:
标识模块,用于基于所述第一哈希树树和所述第二哈希树的根节点开始遍历对比,确定目标叶子节点对应的待新增标识;
数据模块,用于确定所述数据集中所述待新增标识对应的目标数据;
保存模块,用于将所述目标数据保存在所述目标数据集中,以进行数据同步,并基于同步后的目标数据集更新第二哈希树。
在本申请的一些实施例中,同步模块具体用于:
当所述第一数据的第一版本信息大于所述第二数据的第二版本信息时,将所述目标数据集中的第二数据替换为所述第一数据,以进行数据同步。
在本申请的一些实施例中,同步模块包括比较子模块和替换子模块,其中,
比较子模块,用于当所述第一数据的第一版本信息等于所述第二数据的第二版本信息,且所述第一数据的第一数据值和所述第二数据的第二数据值不同时,比较所述第一数据值的哈希值是否大于所述第二数据值的哈希值;
替换子模块,用于当所述第一数据值的哈希值大于所述第二数据值的哈希值时,将所述目标数据集中的第二数据替换为所述第一数据,以进行数据同步。
在本申请的一些实施例中,替换子模块具体用于:
当所述第一数据值的哈希值大于所述第二数据值的哈希值时,获取所述目标数据集中所述目标标识对应的存储地址;
将所述第一数据写入所述目标数据集中所述目标标识对应的存储地址,以替换所述目标数据集中的第二数据。
在本申请的一些实施例中,数据同步装置还包括:
目标模块,用于基于顺序信息确定与所述第二服务器相邻的目标服务器;
更新模块,用于将所述第二服务器更新为新的第一服务器,并将所述相邻服务器更新为新的第二服务器;
重新模块,用于重新执行获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树。
相应的,本申请实施例还提供了一种存储介质,存储介质存储有计算机程序,计算机程序适于处理器进行加载,以执行本申请实施例提供的任一种数据同步方法。
相应的,本申请实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行计算机程序时实现本申请实施例提供的任一种数据同步方法。
本申请实施例通过获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树;基于第一哈希树和第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识;确定目标标识在数据集和目标数据集对应的第一数据和第二数据;根据第一数据和第二数据的版本信息之间的区别进行数据同步。通过比较数据集和目标数据集对应的第一哈希树和第二哈希树,可以快速地确定数据集和目标数据集中存在差异的目标标识,再基于此目标标识,对相应的目标数据集进行数据同步,极大的提升了数据同步效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的数据同步系统的场景示意图;
图2是本申请实施例提供的数据同步系统的另一场景示意图;
图3是本申请实施例提供的数据同步系统的另一场景示意图;
图4是本申请实施例提供的数据同步方法的流程示意图;
图5是本申请实施例提供的数据同步方法生成的第一哈希树的示例图;
图6是本申请实施例提供的数据同步方法的另一流程示意图;
图7是本申请实施例提供的数据同步方法的待同步服务器示例图;
图8是本申请实施例提供的数据同步方法的数据同步示例图;
图9是本申请实施例提供的数据同步方法的另一数据同步示例图;
图10是本申请实施例提供的数据同步方法的另一数据同步示例图;
图11是本申请实施例提供的数据同步方法中哈希树的示例图;
图12是本申请实施例提供的数据同步方法的多服务器数据同步示例图;
图13是本申请实施例提供的数据同步装置的结构示意图;
图14是本申请实施例提供的数据同步装置的另一结构示意图;
图15是本申请实施例提供的计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,本申请所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(ID,ID entity)等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(RAID,Redundant Array of Independent Disk)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。
数据库(Database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
数据库管理系统(英语:Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、XML(Extensible MarkupLanguage,即可扩展标记语言);或依据所支持的计算机类型来作分类,例如服务器群集、移动电话;或依据所用查询语言来作分类,例如SQL(结构化查询语言(Structured QueryLanguage)、XQuery;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS能够跨类别,例如,同时支持多种查询语言。
本申请实施例提供一种数据同步方法、装置、存储介质及计算机设备。具体地,本申请实施例可以集成在数据同步系统中。
数据同步系统可以集成在计算机设备中,该计算机设备可以包括终端或服务器等,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
如图1所示,在本申请实施例中,数据同步系统可以至少包括数据同步服务器、第一服务器和第二服务器,数据同步服务器可以对第一服务器和第二服务器上的数据进行同步,具体地,数据同步系统可以获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树,然后基于第一哈希树和第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识,再确定目标标识在数据集和目标数据集对应的第一数据和第二数据,最后根据第一数据和第二数据的版本信息之间的区别进行数据同步。
为了更加灵活的进行数据同步,数据同步系统也可以集成在数据同步服务器和数据同步终端上,相关人员可以通过终端设置数据同步相关的关键信息(如待同步服务器等),并发送至数据同步服务器,使得数据同步服务器可以结合关键信息进行数据同步。
在实际操作过程中,待同步的服务器的数量可以是多个,此时需要通过数据同步系统依次对待同步服务器进行数据同步,如图2所示,当存在5个待同步服务器时,可以依次对服务器1和服务器2、服务器2和服务器3、服务器3和服务器4、服务器4和服务器5以及服务器5和服务器1之间进行数据同步,前一次数据同步完成后进行下一次数据同步(如服务器2和服务器3之间完成数据同步后,则继续完成同步后的服务器3与未同步的服务器4进行下一次数据同步),直至全部5个服务器完成一轮数据同步。
参见图3,在一些实施例中,待同步的服务器可以包括服务器1、服务器2、服务器3、服务器4和服务器5,服务器1中的数据可以包括<k1,v:”v1”,seq:5>和<k2,v:”v2”,seq:3>,服务器2中的数据可以包括<k1,v:”v2”,seq:4>和<k2,v:”v2”,seq:3>,服务器3中的数据可以包括<k1,v:”v3”,seq:6>和<k2,v:”v2”,seq:3>,服务器4中的数据可以包括<k1,v:”v1”,seq:5>,服务器5中的数据可以包括<k1,v:”v1”,seq:5>,在进行数据同步时,可以先通过服务器1对服务器2进行同步,再通过服务器2对服务器3进行同步,然后通过服务器3对服务器4进行同步,再通过服务器4对服务器5进行同步,最后通过服务器5对服务器1进行同步,即完成了这5个服务器之间的数据同步。
需要说明的是,图1、图2以及图3所示的数据同步系统的场景示意图仅仅是一个示例,本申请实施例描述的数据同步系统以及场景是为了更加清楚的说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着数据同步装置的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
以下分别进行详细说明。在本实施例中,将对数据同步方法进行详细描述,该数据同步方法可以集成在数据同步服务器上,如图4所示,图4是本申请实施例提供的数据同步方法的流程示意图。该数据同步方法可以包括:
101、获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树。
在本申请中,数据同步可以包括能够去除不同服务器之间保存的数据之间差异的操作,对于不同服务器中的数据,由于数据更新方法限制等原因,导致不同服务器中的数据集中的数据值可能并不一致,将不同数据集中数据的数据值统一为相同数据值的过程即数据同步的过程。
其中,第一服务器可以包括为待同步的服务器提供参考数据的服务器,第二服务器可以是待同步服务器,
其中,第一服务器和第二服务器可以是包含数据存储和处理能力的计算机设备,如,第一服务器可以储存数据集,第二服务器可以储存目标数据集,在进行数据同步过程中,第二服务器可以以第一服务器中的数据集为参照,对第二服务器中的目标数据集进行数据同步,第一服务器和第二服务器可以是物理服务器或云服务器等,
数据集和目标数据集可以包含海量数据,二者中一方可以作为另一方的副本数据集,因此,数据集和目标数据集中的数据标识大致相同,由于在进行数据更新时,会有副本数据未被及时更新,因此,数据集和目标数据集中同一数据标识的数据值可能存在差异,本申请所实现的技术效果即消除数据集和目标数据集中数据的差异。数据集和目标数据集在进行数据存储时,可以基于分布式存储(key-value)实现,其中,key可以为数据的关键字(或数据标识),value可以为数据的数据值。
第一哈希树和第二哈希树可以为存储哈希值的树形结构,哈希可以包括把任意长度的数据映射成固定长度数据的函数,数据发生变化后,通过哈希函数得到的数据的哈希值也会随之变化,因此,可以通过对比哈希值来快速确定数据是否有变动,哈希树中的每个节点可以对应存储一个哈希值且每一节点的哈希值可以基于其子节点的哈希值确定,哈希树的叶子节点的哈希值可以是对数据集中的数据做哈希计算得到,则第一哈希树可以基于数据集中的数据得到,第二哈希树可以基于目标数据集中的数据得到,哈希树通常为有序树,则第一哈希树和第二哈希树中叶子节点的顺序为固定的,在一实施方式中,可以通过key来进行叶子节点的排序。
第一哈希树和第二哈希树可以是分别存储在第一服务器上和第二服务器上,在需要对第一服务器上的数据集和第二服务器上的目标数据集进行数据同步时,可以向第一服务器和第二服务器发送请求,并接收返回的第一哈希树和第二哈希树;第一哈希树和第二哈希树可以由数据同步服务器生成,当通过数据同步服务器进行数据同步时,数据同步服务器也可以及时对哈希树进行更新,从而始终确保哈希树与其对应的数据集之间的一致性,等等。
比如,获取第一服务器A上的数据集a1的第一哈希树a2,以及获取待同步的第二服务器B上的目标数据集b1的第二哈希树b2。
在本申请的一些实施例中,步骤“获取第一服务器上的数据集的第一哈希树”可以包括:
(1)对第一服务器上的数据集中的每一数据做哈希计算,得到每一数据的哈希值;
(2)将第一服务器上的每一数据的哈希值设置为叶子节点的数值,并对叶子节点的数值之和进行哈希计算,得到上层节点的数值;
(3)循环对上层节点的数值之和进行哈希计算,得到新的上层节点的数值,直至上层节点为根节点结束,以得到数据集的第一哈希树。
其中,哈希计算可以基于多种哈希算法实现,比如,SHA-2(一种哈希算法)、或MD5(一种哈希算法)等,在对每一数据进行哈希计算后,可以得到每一数据的哈希值,这些数据的哈希值长度保持一致,并将这些长度一致的哈希值作为哈希树的叶子节点的数值(哈希值),叶子节点上的哈希值按照固定的数据标识顺序设置,可参见图5,第一哈希树上的叶子节点从左到右分别保存数据p1、p2、p3、p4、p5、p6的哈希值。
接着,通过叶子节点的哈希值进行循环哈希计算,以得到完整的哈希树,具体地,可以根据实际设置的哈希树的树形结构,如预先设置第一哈希树的树形结构为二叉树,并对叶子节点进行合并,得到上层节点,上层节点的哈希值可以是对叶子节点的哈希值之和做哈希计算得到,如,分别合并数据p1和p2对应的叶子节点、数据p3和p4对应的叶子节点、以及数据p5和p6对应的叶子节点,可得到上层节点p12、p34和p56,p12的数值为对p1和p2的哈希值之和做哈希计算得到,p34的数值为对p3和p4的哈希值之和做哈希计算得到,p56的数值为对p5和p6的哈希值之和做哈希计算得到,
然后循环继续根据哈希树的树形结构,对上层节点进行合并,得到新的上层节点,直至上层节点的数量为1,即上层节点为根节点,此时即生成完整的哈希树,比如,第一哈希树预设的树形结构为二叉树,则对上层节点p34和p56进行合并,得到新的上层节点p1234,p1234的数值为对对p12和p34的哈希值之和做哈希计算得到,然后,合并p1234和p56,得到新的上层节点p0,由于此时p0为唯一的上层节点,即p0为根节点,如图5所示,则此时生成完整的第一哈希树a2。
在本申请的一些实施例中,步骤“对第一服务器上的数据集中的每一数据做哈希计算,得到每一数据的哈希值”可以包括:
(1.1)对第一服务器上的数据集中的每一包含标识、数据值和版本信息的数据做哈希计算,得到每一数据的哈希值。
其中,数据集中的数据可以包括标识,数据值和版本信息,标识可以包括起唯一标识作用的信息,数据值可以是标识对应的内容,如字符、图片等,版本信息可以是此条数据中数据值的版本信息,数据标识的数据值会变化(如外部修改数据值、或自动更新数据值等),可通过版本信息标记每一次数据值的变化。在对数据集中的数据作哈希计算时,可以将数据的标识、数据值和版本信息整合在一起作为一个数据块,并对此数据块作哈希计算,得到数据的哈希值。
此外,由于需要对第一哈希树和第二哈希树进行遍历对比,因此第一哈希树和第二哈希树的预设树形结构、进行哈希计算时使用的哈希算法、以及叶子节点的数据标识顺序需要保持一致,第二哈希树的具体生成过程与第一哈希树一致,可以参照第一哈希树的生成过程,在此不再赘述。
102、基于第一哈希树和第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识。
其中,目标叶子节点可以为第一哈希树与第二哈希树中存在哈希值差异的叶子节点,由于第一哈希树和第二哈希树是根据相同的预设树形结构、相同的哈希算法以及相同叶子节点数据标识顺序构建,因此第一哈希树和第二哈希树上的节点可以进行对应比较,可以通过对应比较确定存在差异的叶子节点。
在一实施方式中,获取到第一哈希树和第二哈希树后,可以分别获取第一哈希树的根节点数值(根节点哈希值)和第二哈希树的根节点数值,并对二者进行对比,若二者不同,即表明第一哈希树和第二哈希树中存在哈希值不同的叶子节点,顺着第一哈希树和第二哈希树的子节点继续进行遍历,直至通过确定第一哈希树和第二哈希树中存在哈希值差异的目标叶子节点,进而确定目标叶子节点对应的目标标识。若二者相同,则表明数据集与目标数据集完全一致,即无需对目标数据集进行数据同步。在此过程中,对于哈希值相同的节点,可以确定其叶子节点对应的数据相同,无需再关注哈希值相同的节点的子节点,从而更快找到存在差异的目标叶子节点。
进一步的,随着技术的发展,服务器上的数据集中的数据量越来越大,(从两个巨大的数据集找出不同的数据)从一个巨大的数据集中确定一个标识对应的数据值,需要读取此数据集中的几乎所有数据,由于数据同步需要先确定存在差异的数据,即需要确定数据集中的所有标识对应的数据值,则仅从第一服务器和第二服务器中确定一标识对应的数据值就需要分别读取两个数据集几乎所有数据,若通过此种方式进行数据同步,数据同步过程将耗费大量计算机资源和时间,数据同步效率极低。本申请通过比较哈希树,可以确定数据集中存在差异的数据的标识,避免了确定差异数据时的海量数据读取,从而有效提高数据同步效率。
比如,基于第一哈希树a2和第二哈希树b2的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识pp。
在本申请的一些实施例中,步骤“基于第一哈希树和第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识”可以包括:
将第一哈希树和第二哈希树上的根节点的子节点中哈希值不同的子节点设置为候选节点;循环将第一哈希树和第二哈希树上的候选节点的子节点中哈希值不同的子节点替换为新的候选节点,直至候选节点为叶子节点结束;将循环结束时的候选节点确定为目标叶子节点,并获取目标叶子节点对应的目标标识。
当第一哈希树和第二哈希树的根节点的数值(哈希值)不同时,则分别对比第一哈希树和第二哈希树的根节点的每一子节点,比如,第一哈希树的根节点的子节点为ma和mb,第二哈希树的根节点的子节点为na和nb,则可以分别对比ma和na,以及mb和nb的哈希值,若ma和na的哈希值相同,则可表明第一哈希树和第二哈希树中此子节点a下的叶子节点均相同,当存在哈希值不同的子节点时,将哈希值不同的叶子节点作为候选节点,比如,若mb和nb的哈希值不同,则确定子节点b为新的候选节点。
循环将第一哈希树和第二哈希树上的候选节点的子节点中哈希值不同的子节点替换为新的候选节点,并判断候选节点是否为叶子节点(即候选节点没有子节点),当候选节点为叶子节点时,则循环结束。
比如,分别从第一哈希树和第二哈希树上获取候选节点mb和nb的子节点,候选节点mb的子节点为mb1、mb2和mb3,候选节点nb的子节点为nb1、nb2和nb3,分别对mb1和nb1的哈希值、mb2和nb2的哈希值、以及mb3和nb3的哈希值,确定其中存在差异的子节点,即候选节点为b2,经判断,候选节点b2还包含子节点b21,则继续分别从第一哈希树和第二哈希树上获取候选节点mb2和nb2的子节点,候选节点mb2的子节点为mb21,候选节点nb2的子节点为nb21,当mb21和nb21的哈希值不同且mb21和nb21均为叶子节点时,循环结束。
将结束循环的候选节点确定为目标叶子节点,并获取目标叶子节点对应的目标标识(目标数据标识)。此处叶子节点的标识可以与数据标识一致,则目标叶子节点的标识即为目标标识;叶子节点的标识也可以与数据标识不一致,二者之间可以存在相互对应的映射关系表,则可以通过从映射关系表中查找目标叶子节点标识对应的数据标识的方式,来获取目标叶子节点对应的目标标识。比如,可以将结束循环的叶子节点b21确定为目标叶子节点,并从映射关系表中确定b21对应的目标数据标识Q,即第一服务器和第二服务器在该目标数据标识Q上相应的数据为不同的。
103、确定目标标识在数据集和目标数据集对应的第一数据和第二数据。
其中,第一数据可以包括第一服务器上的数据集中目标标识对应的数据,第二数据可以包括第二服务器上的目标数据集中目标标识对应的数据,具体地,可以从分别向第一服务器和第二服务器发送数据请求,以请求目标标识对应的数据,再接收第一服务器和第二服务器返回的第一数据和第二数据。
比如,接收第一服务器返回的目标标识Q对应的第一数据q1,以及接收第二服务器返回的目标标识Q对应的第二数据q2。
104、根据第一数据和第二数据的版本信息之间的区别进行数据同步。
其中,由于数据集中的数据可以包含标识、数据值和版本信息,该版本信息可以记录数据值的更新次数,该版本越高,说明此数据值越新。
可以根据版本信息判断第一数据和第二数据中已更新和未更新的数据,进而确定第二数据是否需要同步,若需要,则将目标数据集中的第二数据替换为第一数据,以实现数据同步。
此外,也可通过第一数据和第二数据的版本信息,确定第一数据是否需要同步,若需要,也可以将数据集中的第一数据替换为第二数据,以通过目标数据集实现对数据集的数据同步,即实现数据集和目标数据集之间的双向数据同步。
在一些情况下(如第一服务器的数据处理能力强大,可以支持顺利实施数据同步的过程),本实施例的方法也可以在保存数据集的服务器上进行,则此时,相关数据(如哈希树、目标标识对应的数据)的获取、数据同步操作的执行等可以根据实际情况进行调整,这些调整仍应属于本实施例方案的范畴。
在一些实施例中,步骤“根据第一数据和第二数据的版本信息之间的区别进行数据同步”可以包括:
(1)当第一数据的第一版本信息大于第二数据的第二版本信息时,将目标数据集中的第二数据替换为所述第一数据,以进行数据同步。
其中,版本信息可以为字符等形式,随着数据值的更新,数据值的版本信息可以越来越大,因此,一个数据的两个数据值中,版本信息更大的数据值为已更新的数据值,则当第一数据的第一版本信息大于第二数据的第二版本信息时,即可表明第一数据为已更新的数据,需要对目标数据集中的第二数据进行同步,具体地,可以将目标数据集中的第二数据替换为第一数据。
当第一数据的第一版本信息小于第二数据的第二版本信息时,即可表明第二数据为已更新的数据,则无需对目标数据集中的第二数据进行数据同步操作。
比如,第一数据q1的第一版本信息为g5,第二数据q2的第二版本信息为g4,通过对比可以确定第一版本信息g5大于第二版本信息g4,则可以将目标数据集中的第二数据替换为第一数据q1,以完成针对目标数据集的数据同步。
在本申请的一些实施例中,步骤“根据第一数据和第二数据的版本信息之间的区别进行数据同步”可以包括:
(1.1)当第一数据的第一版本信息等于第二数据的第二版本信息,且第一数据的第一数据值和第二数据的第二数据值不同时,比较第一数据值的哈希值是否大于第二数据值的哈希值;
(1.2)当第一数据值的哈希值大于第二数据值的哈希值时,将目标数据集中的第二数据替换为第一数据,以进行数据同步。
其中,由于数据集中的数据量巨大,在某些情况(如网络延迟、代码出错、或版本信息的生成机制导致)下,可能会出现数据值不同但版本信息不同(是否为相同)的情况出现,当出现此种情况时,可以通过预设规则从不同的数据值中选择一个作为已更新数据,并基于此已更新数据进行数据同步,预设规则可以包括多种,可以根据实际需求进行灵活设定,比如,可以将内存占用更大的数据值作为已更新数据值,当第一数据值的内存占用更大时,即可将第一数据值作为已更新数据值,则可将目标数据集中的第二数据替换为第一数据,以进行数据同步。
又比如,可以通过计算数据值的哈希值,将哈希值较大的作为已更新数据值,分别计算第一数据值和第二数据值的哈希值,当第一数据值的哈希值大于第二数据值的哈希值时,可以确定第一数据值为已更新数据值,则可将目标数据集中的第二数据替换为第一数据,以进行数据同步;类似地,也可以将哈希值较小的作为已更新数据值,等等。
比如,第一数据q1的第一版本信息为g3,第一数据值为“ED”,第二数据q2的第二版本信息为g3,第二数据值为“AFG”,即第一数据q1的第一版本信息g3等于第二数据q2的第二版本信息g3,且第一数据的第一数据值“ED”和第二数据的第二数据值“AFG”不同,则可以分别计算第一数据值和第二数据的哈希值,为H1和H2,通过对比确定H1大于H2,即第一数据q1为已更新数据,即可将目标数据集中的第二数据替换为第一数据q1。
在本申请的一些实施例中,步骤“将目标数据集中的第二数据替换为第一数据”可以包括:
(2.1)获取目标数据集中目标标识对应的存储地址;
(2.2)将第一数据写入目标数据集中目标标识对应的存储地址,以替换目标数据集中的第二数据。
其中,在进行数据替换时,需要获取目标数据集中第二数据的存储地址,第二服务器在存储目标数据集中的数据时,根据数据中数据的特性为每一数据分配了存储空间,如,为第二数据分配了存储空间A,存储空间A在第二服务器中的存储地址可以为0x00000001,在确定第二数据的存储后,可以将第一数据写入第二数据的存储地址0x00000001,即可实现对目标数据集中第二数据的替换。
在本申请的一些实施例中,数据同步方法还可以包括:
(3.1)基于第一哈希树树和第二哈希树的根节点开始遍历对比,确定目标叶子节点对应的待新增标识;
(3.2)确定数据集中待新增标识对应的目标数据;将目标数据保存在目标数据集中,以进行数据同步,并基于同步后的目标数据集更新第二哈希树。
其中,在进行数据同步时,第一服务器上的数据集中,还可能存在一部分新增数据,即数据集中存在但目标数据集中不存在的数据,数据集的第一哈希树中,新增数据的哈希值对应的叶子节点位于哈希树的最右侧,并不会对已存在的节点结构产生影响,类似地,也可以基于第一哈希数据和第二哈希树的根节点开始遍历对比,当发现第一哈希中存在,而第二哈希树中不存在的目标叶子节点时,确定目标叶子节点对应的数据标识,即待新增标识。
从数据集中获取此待新增标识对应的目标数据,再将获取到的目标数据保存在目标数据集中,即可实现针对目标数据集的数据同步。
完成对目标数据集的数据同步后,可以基于同步后的目标数据集,对第二哈希树进行更新,以使第二哈希树与更新后的目标数据集的数据存储内容相匹配,有助于后续数据同步的顺利进行。
比如,基于第一哈希树a2和第二哈希树b2的根节点开始遍历对比,确定目标叶子节点对应的待新增标识kk,确定数据集中待新增标识kk对应的目标数据K,将目标数据K保存在目标数据集中,以进行数据同步,并基于同步后的目标数据集更新第二哈希树b2。
此外,对比数据集和目标数据集,也可能存在待删除数据,即目标数据集中存在但数据集中不存在的数据,为了保证第一哈希树和第二哈希树可以进行节点对比,可以对哈希树进行特殊处理,比如,数据集/目标数据集中已删除的数据在第一/第二哈希树中仍保留叶子节点,并将叶子节点的数值保存为可识别的删除关键字,此删除关键字标识此叶子节点对应的数据标识在数据集中不存在,则当识别到第一哈希树中叶子节点的数值为删除关键字,而第二哈希树中的此叶子节点的数值为哈希值时,确定此叶子节点为目标叶子节点,并将目标叶子节点对应的数据标识确定为待删除标识,然后,可以将目标数据集中此待删除标识对应的数据做删除处理,以完成数据同步。
在本申请的一些实施例中,数据同步方法还可以包括:
(4.1)基于顺序信息确定与第二服务器相邻的目标服务器;
(4.2)将第二服务器更新为新的第一服务器,并将相邻服务器更新为新的第二服务器;重新执行获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树。
其中,在进行数据同步时,可以存在多个待同步的服务器,这些服务器之间可以存在预设的顺序信息,为了实现多个服务器之间的数据同步,可以如图2所示,依次对相邻的两个服务器上的数据集进行数据同步,直至完成一轮数据同步,即所有服务器都作为过第一服务器和第二服务器,即待同步的服务器之间彼此相连,形成闭环。
进一步的,在完成两个服务器的数据同步后,可以通过待同步服务器的顺序信息,确定与第二服务器相邻的目标服务器,当多个待同步服务器为首尾相连的环时,目标服务器即除第一服务器以外,与第二服务器相邻的服务器,接着,将第二服务器更新为新的第一服务器,即已更新服务器,将目标服务器作为新的第二服务器,即待更新服务器,然后重新执行获取第一哈希树和第二哈希树的过程,以进行新一次数据同步,直至所有服务器都作为待同步的第二服务器进行过数据同步。
本申请实施例中,可以仅通过比较数据集和目标数据集对应的第一哈希树和第二哈希树,快速便捷地确定数据集和目标数据集中存在差异的目标标识,再基于此目标标识,对目标数据集进行数据同步,使得本实施例描述的数据同步方法可以显著提高数据同步效率。
根据上述实施例所描述的方法,以下将举例作进一步详细说明。
本申请实施例将多个待同步服务器为例,每个服务器中包含一主数据集的一个副本,即每一副本为一数据集,数据集的数据量巨大,本申请将通过数据同步方法,实现对每一服务器上的副本的数据同步,以使每一副本中的数据为最新版本的数据,其中,数据集中的任意数据包含数据标识、数据值和版本信息,本实施例可以在服务器上进行,服务器可以是物理服务器或云服务器,以对该数据同步方法进行介绍。
本实施例中的数据可以通过分布式存储进行,每一数据包含数据标识(即key)、数据值(即value)和数据值的版本信息,版本信息可以是数据值变更的时间点,等。本实施例的数据同步方法可以用于分布式存储系统、或对象存储的元数据存储系统等。
本实施例的总体流程图可以参见图6,其中:
201、服务器从多个包含顺序信息的待同步服务器中确定第一服务器和待同步的第二服务器。
比如,参见图7,服务器可以从服务器1、服务器2、服务器3、服务器4和服务器5中确定第一服务器和第二服务器,分别为服务器1和服务器2。
202、服务器获取第一服务器上的数据集的第一哈希树和待同步的第二服务器上目标数据集的第二哈希树。
比如,服务器获取服务器1上的数据集的第一哈希树A1和服务器2上的目标数据集的第二哈希树A2。
203、服务器将第一哈希树和第二哈希树上的根节点的子节点中哈希值不同的子节点设置为候选节点。
204、服务器循环将第一哈希树和第二哈希树上的候选节点的子节点中哈希值不同的子节点替换为新的候选节点,直至候选节点为叶子节点结束。
205、服务器将循环结束时的候选节点确定为目标叶子节点,并获取目标叶子节点对应的目标标识。
比如,确定目标叶子节点对应的目标标识为k1。
由于每一待同步数据集的数据量可以达到千万甚至亿级,对数据集中的每一数据分别进行读取和对比需要耗费的资源过高,而本实施例中,可以通过对比数据集的哈希树,从而快速确定数据集中的存在差异的数据,进而极大提高了数据同步效率。
206、服务器分别从数据集和目标数据集中获取目标标识对应的第一数据和第二数据。
比如,可以从服务器1上的数据集中确定目标标识k1对应的第一数据<k1,v:”v1”,seq:5>,从服务器2上的目标数据集中确定目标标识k1对应的第二数据<k1,v:”v2”,seq:4>。
207、当第一数据的版本信息和第二数据的版本信息满足预设要求时,服务器将目标数据集中的第二数据替换为此第一数据,以进行数据同步。
比如,当第一数据为<k1,v:”v1”,seq:5>,第二数据为<k1,v:”v2”,seq:4>,可知第一数据的版本信息seq:5大于第二数据的版本信息seq:4,则如图8所示,服务器设备将服务器2中的第二数据替换为第一数据<k1,v:”v1”,seq:5>。
又比如,当第一数据为<k1,v:”v3”,seq:6>,第二数据为<k1,v:”v1”,seq:6>,服务器可以确定第一数据值v:”v3”的哈希值大于第二数据值v:”v1”的哈希值,如图9所示,服务器将服务器4(即目标数据集)中的第二数据替换为第一数据<k1,v:”v3”,seq:6>。
又比如,参见图9,服务器3中存在而服务器4中不存在的待新增标识对应的待新增数据<k2,v:”v2”,seq:3>,则将待新增数据<k2,v:”v2”,seq:3>保存到服务器4中。
208、当完成针对第二服务器的数据同步时,根据顺序信息确定第二服务器的相邻服务器,并将第二服务器更新为新的第一服务器,将相邻服务器更新为新的第二服务器。
完成步骤208后,服务器可以重新执行步骤202,直至每一待同步服务器都作为第二服务器完成过数据同步,即完成了针对多个待同步服务器的数据同步。
比如,可以根据服务器2和服务器3进行新一轮的数据同步,完成针对服务器3的数据同步后,可以将服务器3更新为新的第一服务器,将服务器4确定为新的第二服务器,并基于服务器3和服务器4进行一轮的数据同步,依次进行此过程,直至服务器1至服务器5都作为第二服务器完成过数据同步,如图10所示,当依次完成对服务器2、服务器3、服务器4和服务器5的数据同步后,将服务器5作为第一服务器,将服务器1作为第二服务器,以实现对服务器1的数据集同步,即完成对多个待同步服务器的数据同步。
本实施例可以仅通过比较数据集和目标数据集对应的第一哈希树和第二哈希树,可以快速便捷地确定数据集和目标数据集中存在差异的目标标识,再基于此目标标识,对目标数据集进行数据同步,使得本申请的数据同步方法可以显著提高数据同步效率。
根据上述实施例所描述的方法,以下将举例作进一步详细说明。
参见图11,图11为本申请的数据同步方法在进行确定存在差异的目标标识时所需的哈希树的示例图,哈希树的叶子节点的哈希值为对数据块(data blocks)中的数据做哈希计算得到,如图11中叶子节点Hash 0-0的哈希值为对数据b1做哈希计算(hash(b1)),然后对依次对进行节点合并,直至合并到跟节点,在进行合并时,合并得到的父节点的哈希值为对被合并的子节点的哈希值加和做哈希计算得到,如,父节点hash 0的哈希值为对hash0-0的哈希值和hash 0-1的哈希值的和做哈希计算得到(hash(hash 0-0+hash 0-1)。
进行数据同步时,得到第一哈希树和第二哈希树后,可以从根节点开始,对第一哈希树和第二哈希树上对应节点的哈希值进行对比,直至确定哈希值不同的叶子节点,进而确定该叶子节点对应的数据的目标标识,比如,目标标识可以为数据b1,接着基于该目标标识进行数据同步。
在对图3的多个待同步服务器进行数据同步时,具体地流程可以参见图12,先通过服务器1对服务器2进行数据同步,确定服务器1与服务器2中存在差异的目标标识k1后,比较版本信息发现服务器1中k1的版本信息seq:5大于服务器2中k1的版本信息seq:4,则将服务器1中的数据<k1,v:”v1”,seq:5>更新到服务器2中。
接着通过服务器2对服务器3进行数据同步,确定服务器2与服务器3中存在差异的目标标识k1后,比较版本信息发现服务器2中k1的版本信息seq:5小于服务器3中k1的版本信息seq:6,则不对服务器3中的k1进行操作。
然后通过服务器3对服务器4进行数据同步,确定服务器3与服务器4中存在差异的目标标识k1以及待新增标识k2后,比较版本信息发现服务器3中k1的版本信息seq:6等于服务器4中k1的版本信息seq:6,再比较数据值v1的哈希值小于数据值v3的哈希值,则将服务器3中的数据<k1,v:”v3”,seq:6>更新到服务器4中,以及将服务器3中的待新增标识对应的目标数据<k2,v:”v2”,seq:3>更新到服务器4中。
再通过服务器4对服务器5进行数据同步,确定服务器4与服务器5中存在差异的目标标识k1以及待新增标识k2后,比较版本信息发现服务器4中k1的版本信息seq:5大于服务器5中k1的版本信息seq:5,则将服务器4中的数据<k1,v:”v3”,seq:6>更新到服务器5中,以及将服务器4中的待新增标识对应的目标数据<k2,v:”v2”,seq:3>更新到服务器5中。
最后通过服务器5对服务器1进行数据同步,确定服务器5与服务器1中存在差异的目标标识k1后,比较版本信息发现服务器5中k1的版本信息seq:6大于服务器1中k1的版本信息seq:5,则将服务器5中的数据<k1,v:”v3”,seq:6>更新到服务器1中。
经过以上流程,可以对多个待同步服务器进行高效快速地数据同步。
为便于更好的实本申请实施例提供的数据同步方法,本申请实施例还提供一种基于上述数据同步方法的装置。其中名词的含义与上述数据同步方法中相同,具体实现细节可以参考方法实施例中的说明。
如图13所示,图13本申请一实施例提供的数据同步装置的结构示意图,其中该数据同步装置可以包括获取模块301、对比模块302、确定模块303和同步模块304,其中,
获取模块301,用于获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树;
对比模块302,用于基于第一哈希树和第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识;
确定模块303,用于确定目标标识在数据集和目标数据集对应的第一数据和第二数据;
同步模块304,用于根据第一数据和第二数据的版本信息之间的区别进行数据同步。
在本申请的一些实施例中,如图14所示,获取模块301包括数据子模块3011、设置子模块3012和循环子模块3013,其中,
数据子模块3011,用于对第一服务器上的数据集中的每一数据做哈希计算,得到每一数据的哈希值;
设置子模块3012,用于将第一服务器上的每一数据的哈希值设置为叶子节点的数值,并对叶子节点的数值之和进行哈希计算,得到上层节点的数值;
循环子模块3013,用于循环对上层节点的数值之和进行哈希计算,得到新的上层节点的数值,直至上层节点为根节点结束,以得到数据集的第一哈希树。
在本申请的一些实施例中,第一服务器上的数据集中包含多个数据,每一数据包含标识、数据值和版本信息,数据子模块具体用于:
对第一服务器上的数据集中的每一包含标识、数据值和版本信息的数据做哈希计算,得到每一数据的哈希值。
在本申请的一些实施例中,对比模块包括设置子模块、循环子模块和获取子模块,其中,
设置子模块,用于将第一哈希树和第二哈希树上的根节点的子节点中哈希值不同的子节点设置为候选节点;
循环子模块,用于循环将第一哈希树和第二哈希树上的候选节点的子节点中哈希值不同的子节点替换为新的候选节点,直至候选节点为叶子节点结束;
获取子模块,用于将循环结束时的候选节点确定为目标叶子节点,并获取目标叶子节点对应的目标标识。
在本申请的一些实施例中,数据同步装置还包括:
标识模块,用于基于第一哈希树树和第二哈希树的根节点开始遍历对比,确定目标叶子节点对应的待新增标识;
数据模块,用于确定数据集中待新增标识对应的目标数据;
保存模块,用于将目标数据保存在目标数据集中,以进行数据同步,并基于同步后的目标数据集更新第二哈希树。
在本申请的一些实施例中,同步模块具体用于:
当第一数据的第一版本信息大于第二数据的第二版本信息时,将目标数据集中的第二数据替换为第一数据,以进行数据同步。
在本申请的一些实施例中,同步模块包括比较子模块和替换子模块,其中,比较子模块,用于当第一数据的第一版本信息等于第二数据的第二版本信息,且第一数据的第一数据值和第二数据的第二数据值不同时,比较第一数据值的哈希值是否大于第二数据值的哈希值;
替换子模块,用于当第一数据值的哈希值大于第二数据值的哈希值时,将目标数据集中的第二数据替换为第一数据,以进行数据同步。
在本申请的一些实施例中,替换子模块具体用于:
当第一数据值的哈希值大于第二数据值的哈希值时,获取目标数据集中目标标识对应的存储地址;
将第一数据写入目标数据集中目标标识对应的存储地址,以替换目标数据集中的第二数据。
在本申请的一些实施例中,数据同步装置还包括:
目标模块,用于基于顺序信息确定与第二服务器相邻的目标服务器;
更新模块,用于将第二服务器更新为新的第一服务器,并将相邻服务器更新为新的第二服务器;
重新执行模块,用于重新执行获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树。
本申请中,获取模块301获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树,对比模块302基于第一哈希树和第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识,确定模块303确定目标标识在数据集和目标数据集对应的第一数据和第二数据,最后,同步模块304根据第一数据和第二数据的版本信息之间的区别进行数据同步。
本申请中,仅通过比较数据集和目标数据集对应的第一哈希树和第二哈希树,可以快速便捷地确定数据集和目标数据集中存在差异的目标标识,再基于此目标标识,对目标数据集进行数据同步,使得本申请的数据同步方法可以显著提高数据同步效率。
此外,本申请实施例还提供一种计算机设备,该计算机设备可以为终端或者服务器,如图15所示,其示出了本申请实施例所涉及的计算机设备的结构示意图,具体来讲:
该计算机设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图15中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该计算机设备的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行计算机设备的各种功能和处理数据,从而对计算机设备进行整体监控。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户页面和应用程序等,调制解调处理器主要处理无线通讯。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
计算机设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该计算机设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,计算机设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,计算机设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树;基于第一哈希树和第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识;确定目标标识在数据集和目标数据集对应的第一数据和第二数据;根据第一数据和第二数据的版本信息之间的区别进行数据同步。
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过计算机程序来完成,或通过计算机程序控制相关的硬件来完成,该计算机程序可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例还提供一种存储介质,其中存储有计算机程序,该计算机程序能够被处理器进行加载,以执行本申请实施例所提供的任一种数据同步方法中的步骤。例如,该计算机程序可以执行如下步骤:
获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树;基于第一哈希树和第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识;确定目标标识在数据集和目标数据集对应的第一数据和第二数据;根据第一数据和第二数据的版本信息之间的区别进行数据同步。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的计算机程序,可以执行本申请实施例所提供的任一种数据同步方法中的步骤,因此,可以实现本申请实施例所提供的任一种数据同步方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例中各种可选实现方式中提供的方法。
以上对本申请实施例所提供的一种数据同步方法、装置、存储介质及计算机设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (12)
1.一种数据同步方法,其特征在于,包括:
获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树;
基于所述第一哈希树和所述第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识;
确定所述目标标识在所述数据集和所述目标数据集对应的第一数据和第二数据;
根据所述第一数据和所述第二数据的版本信息之间的区别进行数据同步。
2.根据权利要求1所述的方法,其特征在于,所述获取第一服务器上的数据集的第一哈希树,包括:
对第一服务器上的数据集中的每一数据做哈希计算,得到每一数据的哈希值;
将第一服务器上的每一数据的哈希值设置为叶子节点的数值,并对叶子节点的数值之和进行哈希计算,得到上层节点的数值;
循环对上层节点的数值之和进行哈希计算,得到新的上层节点的数值,直至上层节点为根节点结束,以得到数据集的第一哈希树。
3.根据权利要求2所述的方法,其特征在于,第一服务器上的数据集中包含多个数据,每一数据包含标识、数据值和版本信息,所述对第一服务器上的数据集中的每一数据做哈希计算,得到每一数据的哈希值,包括:
对第一服务器上的数据集中的每一包含标识、数据值和版本信息的数据做哈希计算,得到每一数据的哈希值。
4.根据权利要求1所述的方法,其特征在于,所述基于所述第一哈希树和所述第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识,包括:
将所述第一哈希树和所述第二哈希树上的根节点的子节点中哈希值不同的子节点设置为候选节点;
循环将第一哈希树和所述第二哈希树上的候选节点的子节点中哈希值不同的子节点替换为新的候选节点,直至候选节点为叶子节点结束;
将循环结束时的候选节点确定为目标叶子节点,并获取目标叶子节点对应的目标标识。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
基于所述第一哈希树树和所述第二哈希树的根节点开始遍历对比,确定目标叶子节点对应的待新增标识;
确定所述数据集中所述待新增标识对应的目标数据;
将所述目标数据保存在所述目标数据集中,以进行数据同步,并基于同步后的目标数据集更新第二哈希树。
6.根据权利要求1所述的方法,其特征在于,所述根据所述第一数据和第二数据的版本信息之间的区别进行数据同步,包括:
当所述第一数据的第一版本信息大于所述第二数据的第二版本信息时,将所述目标数据集中的第二数据替换为所述第一数据,以进行数据同步。
7.根据权利要求1所述的方法,其特征在于,所述根据所述第一数据和第二数据的版本信息之间的区别进行数据同步,包括:
当所述第一数据的第一版本信息等于所述第二数据的第二版本信息,且所述第一数据的第一数据值和所述第二数据的第二数据值不同时,比较所述第一数据值的哈希值是否大于所述第二数据值的哈希值;
当所述第一数据值的哈希值大于所述第二数据值的哈希值时,将所述目标数据集中的第二数据替换为所述第一数据,以进行数据同步。
8.根据权利要求7所述的方法,其特征在于,所述将所述目标数据集中的第二数据替换为所述第一数据,包括:
获取所述目标数据集中所述目标标识对应的存储地址;
将所述第一数据写入所述目标数据集中所述目标标识对应的存储地址,以替换所述目标数据集中的第二数据。
9.根据权利要求1所述的方法,其特征在于,所述根据所述第一数据和第二数据的版本信息之间的区别进行数据同步之后,还包括:
基于顺序信息确定与所述第二服务器相邻的目标服务器;
将所述第二服务器更新为新的第一服务器,并将所述相邻服务器更新为新的第二服务器;
重新执行获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树。
10.一种数据同步装置,其特征在于,包括:
获取模块,用于获取第一服务器上的数据集的第一哈希树,以及获取待同步的第二服务器上的目标数据集的第二哈希树;
对比模块,用于基于所述第一哈希树和所述第二哈希树的根节点开始遍历对比,确定存在差异的目标叶子节点对应的目标标识;
确定模块,用于确定所述目标标识在所述数据集和所述目标数据集对应的第一数据和第二数据;
同步模块,用于根据所述第一数据和所述第二数据的版本信息之间的区别进行数据同步。
11.一种存储介质,其特征在于,所述存储介质存储有多条计算机程序,所述计算机程序适于处理器进行加载,以执行如权利要求1至9任一项方法中的步骤。
12.一种计算机设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如权利要求1至9任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010668230.0A CN111917834A (zh) | 2020-07-13 | 2020-07-13 | 一种数据同步方法、装置、存储介质及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010668230.0A CN111917834A (zh) | 2020-07-13 | 2020-07-13 | 一种数据同步方法、装置、存储介质及计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111917834A true CN111917834A (zh) | 2020-11-10 |
Family
ID=73227055
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010668230.0A Pending CN111917834A (zh) | 2020-07-13 | 2020-07-13 | 一种数据同步方法、装置、存储介质及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111917834A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799839A (zh) * | 2021-01-28 | 2021-05-14 | 百果园技术(新加坡)有限公司 | 请求处理方法、装置、计算机可读存储介质及电子设备 |
CN113190575A (zh) * | 2021-05-31 | 2021-07-30 | 平安科技(深圳)有限公司 | 数据核对方法、装置、计算机设备和存储介质 |
CN113220236A (zh) * | 2021-05-17 | 2021-08-06 | 北京青云科技股份有限公司 | 一种数据管理方法、系统及设备 |
CN113986243A (zh) * | 2021-10-26 | 2022-01-28 | 腾讯科技(深圳)有限公司 | 资源同步方法以及相关设备 |
CN117251434A (zh) * | 2023-11-20 | 2023-12-19 | 深圳万物安全科技有限公司 | 数据对比方法、服务器及可读存储介质 |
-
2020
- 2020-07-13 CN CN202010668230.0A patent/CN111917834A/zh active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799839A (zh) * | 2021-01-28 | 2021-05-14 | 百果园技术(新加坡)有限公司 | 请求处理方法、装置、计算机可读存储介质及电子设备 |
CN112799839B (zh) * | 2021-01-28 | 2024-03-15 | 百果园技术(新加坡)有限公司 | 请求处理方法、装置、计算机可读存储介质及电子设备 |
CN113220236A (zh) * | 2021-05-17 | 2021-08-06 | 北京青云科技股份有限公司 | 一种数据管理方法、系统及设备 |
CN113220236B (zh) * | 2021-05-17 | 2024-01-30 | 北京青云科技股份有限公司 | 一种数据管理方法、系统及设备 |
CN113190575A (zh) * | 2021-05-31 | 2021-07-30 | 平安科技(深圳)有限公司 | 数据核对方法、装置、计算机设备和存储介质 |
CN113986243A (zh) * | 2021-10-26 | 2022-01-28 | 腾讯科技(深圳)有限公司 | 资源同步方法以及相关设备 |
CN113986243B (zh) * | 2021-10-26 | 2023-06-13 | 腾讯科技(深圳)有限公司 | 资源同步方法以及相关设备 |
CN117251434A (zh) * | 2023-11-20 | 2023-12-19 | 深圳万物安全科技有限公司 | 数据对比方法、服务器及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111917834A (zh) | 一种数据同步方法、装置、存储介质及计算机设备 | |
US9767131B2 (en) | Hierarchical tablespace space management | |
US8140498B2 (en) | Distributed database system by sharing or replicating the meta information on memory caches | |
US20130110873A1 (en) | Method and system for data storage and management | |
JP2017195004A (ja) | モジュール式ブロックおよび関連付けられたログファイルを伴う分散型データベース | |
EP3362916B1 (en) | Signature-based cache optimization for data preparation | |
CN108509462B (zh) | 一种同步活动事务表的方法及装置 | |
US11960363B2 (en) | Write optimized, distributed, scalable indexing store | |
CN112148693A (zh) | 一种数据处理方法、装置及存储介质 | |
CN114610680A (zh) | 分布式文件系统元数据管理方法、装置、设备及存储介质 | |
US20170270149A1 (en) | Database systems with re-ordered replicas and methods of accessing and backing up databases | |
CN114595286A (zh) | 一种数据同步方法、装置、电子设备及存储介质 | |
Kvet et al. | Relational pre-indexing layer supervised by the DB_index_consolidator Background Process | |
CN112507026B (zh) | 基于键值模型、文档模型和图模型的分布式高速存储方法 | |
CN115114294A (zh) | 数据库存储模式的自适应方法、装置、计算机设备 | |
CN114297196A (zh) | 元数据存储方法、装置、电子设备及存储介质 | |
CN114490865A (zh) | 数据库同步方法、装置、设备及计算机存储介质 | |
Klein et al. | Dxram: A persistent in-memory storage for billions of small objects | |
US11232095B2 (en) | Composite metadata objects for database systems | |
US10353920B2 (en) | Efficient mirror data re-sync | |
CN108984343B (zh) | 一种基于内容分析的虚拟机备份及存储管理方法 | |
CN117235185B (zh) | 数据平衡处理方法、装置及电子设备 | |
CN117131023B (zh) | 数据表处理方法、装置、计算机设备和可读存储介质 | |
CN117009439B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN117931095A (zh) | 地图数据存储方法、装置、电子设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230925 Address after: 518057 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 floors Applicant after: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. Applicant after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd. Address before: 518057 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 floors Applicant before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |