数据同步方法、接收端、发送端、介质和计算设备与流程
未命名
08-12
阅读:108
评论:0
1.本公开的实施方式涉及通信技术领域,更具体地,本公开的实施方式涉及数据同步方法、接收端、发送端、介质和计算设备。
背景技术:
2.本部分旨在为本公开的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
3.在数据同步领域中,一个集群中的数据变更后,会将变更的数据同步至另一个集群中。
4.示例性技术中,客户端将源端集群中变更的数据写入至消息队列,然后同步组件从消息队列将变更的数据写入至目的端集群。但受客户端的影响(例如客户端重启),存在消息队列并未写入有源端集群中更变的数据,而同步组件是顺序的从消息队列的中拉取数据进行写入,若消息队列中未有写入源端集群中变更的数据,导致同步组件写入至目的端集群的数据是错误的,造成写入至目标端集群中的数据的一致性无法得到保证,也即同步的数据一致性较差。
技术实现要素:
5.本公开提供一种数据同步方法、接收端、发送端、介质和计算设备,用于解决同步的数据一致性较差的问题。
6.在本公开实施方式的第一方面中,提供了一种数据同步方法,包括:接收发送端发送的目标数据以及对应的第一元数据;根据所述第一元数据确定所述目标数据在第一集群中所在的第一存储单元,以及所述目标数据在所述第一存储单元的第一变更次数;在第二集群中确定与所述第一存储单元对应的第二存储单元,并获取所述第二存储单元中数据的最大变更次数,所述第二存储单元用于同步所述第一存储单元的数据;根据所述第一变更次数与所述最大变更次数,确定所述目标数据是否已同步至所述第二存储单元。
7.在本公开一实施例中,所述根据所述第一变更次数与所述最大变更次数,确定所述目标数据是否已同步至所述第二存储单元,包括:根据所述最大变更次数获取目标次数,所述目标次数大于所述最大变更次数,且所述目标次数与所述最大变更次数之间的差值为1;确定所述第一变更次数是否小于所述目标次数,以确定所述目标数据是否已同步至所述第二存储单元。
8.在本公开另一实施例中,所述确定所述第一变更次数是否小于所述目标次数之后,还包括:响应于所述第一变更次数小于所述目标次数,确定所述目标数据已同步至所述第二存储单元;向所述发送端发送第一提示信息,所述第一提示信息用于指示所述发送端发送第一数据,所述第一数据在所述第一存储单元的变更次数为所述目标次数。
9.在本公开另一实施例中,所述确定所述第一变更次数是否小于所述目标次数之后,还包括:响应于所述第一变更次数等于所述目标次数,确定所述目标数据未同步至所述
第二存储单元,并将所述目标数据同步至所述第二存储单元,且将所述目标次数更新为所述第二存储单元对应的最大变更次数。
10.在本公开另一实施例中,所述确定所述第一变更次数是否小于所述目标次数之后,还包括:响应于所述第一变更次数大于所述目标次数,向所述发送端发送第二提示信息,所述第二提示信息用于指示所述发送端发送第二数据,所述第二数据在所述第一存储单元的变更次数小于所述第一变更次数且大于所述目标次数。
11.在本公开另一实施例中,所述获取所述第二存储单元中数据的最大变更次数,包括:在第一复制进度表中,获取所述第二存储单元中数据的最大变更次数。
12.在本公开实施方式的第二方面,还提供一种数据同步方法,应用于发送端,包括:获取目标数据对应的第一元数据,所述目标数据位于第一集群的第一存储单元;将所述目标数据以及所述第一元数据发送至接收端,所述第一元数据用于所述接收端确定所述目标数据是否已同步至第二集群中的第二存储单元,所述第二存储单元用于同步所述第一存储单元的数据。
13.在本公开一实施例中,所述获取目标数据对应的第一元数据,包括:从第二复制进度表中获取所述目标数据的第二元数据;将所述第二元数据中第一集群对应的标识预设值,更新为所述第一集群对应的标识真实值,得到所述目标数据的第一元数据,所述标识预设值用于指示所述目标数据是本地数据,所述标识真实值用于指示所述接收端禁止发送所述目标数据至所述发送端。
14.在本公开另一实施例中,所述从第二复制进度表中获取所述目标数据的第二元数据之前,包括:获取所述第一存储单元的单元标识以及所述目标数据在所述第一存储单元的第一变更次数;将所述标识预设值、所述单元标识以及所述第一变更次数,作为所述目标数据的第二元数据,写入所述第二复制进度表。
15.在本公开实施方式的第三方面,还提供一种接收端,包括:第一接收模块,用于接收发送端发送的目标数据以及对应的第一元数据;第一确定模块,用于根据所述第一元数据确定所述目标数据在第一集群中所在的第一存储单元,以及所述目标数据在所述第一存储单元的第一变更次数;第一获取模块,用于在第二集群中确定与所述第一存储单元对应的第二存储单元,并获取所述第二存储单元中数据的最大变更次数,所述第二存储单元用于同步所述第一存储单元的数据;第二确定模块,用于根据所述第一变更次数与所述最大变更次数,确定所述目标数据是否已同步至所述第二存储单元。
16.在本公开一实施例中,所述第二确定模块,包括:第一获取单元,用于根据所述最大变更次数获取目标次数,所述目标次数大于所述最大变更次数,且所述目标次数与所述最大变更次数之间的差值为1;第一确定单元,用于确定所述第一变更次数是否小于所述目标次数,以确定所述目标数据是否已同步至所述第二存储单元。
17.在本公开另一实施例中,所述第二确定模块,还包括:第二确定单元,用于响应于所述第一变更次数小于所述目标次数,确定所述目标数据已同步至所述第二存储单元;发送单元,用于向所述发送端发送第一提示信息,所述第一提示信息用于指示所述发送端发送第一数据,所述第一数据在所述第一存储单元的变更次数为所述目标次数。
18.在本公开另一实施例中,所述第二确定模块,还包括:第三确定单元,用于响应于所述第一变更次数等于所述目标次数,确定所述目标数据未同步至所述第二存储单元,并
将所述目标数据同步至所述第二存储单元,且将所述目标次数更新为所述第二存储单元对应的最大变更次数。
19.在本公开另一实施例中,所述第二确定模块,还包括:第四确定单元,用于响应于所述第一变更次数大于所述目标次数,向所述发送端发送第二提示信息,所述第二提示信息用于指示所述发送端发送第二数据,所述第二数据在所述第一存储单元的变更次数小于所述第一变更次数且大于所述目标次数。
20.在本公开另一实施例中,所述第一获取模块,包括:第二获取单元,用于在第一复制进度表中,获取所述第二存储单元中数据的最大变更次数。
21.在本公开实施方式的第四方面,还提供一种发送端,包括:第二获取模块,用于获取目标数据对应的第一元数据,所述目标数据位于第一集群的第一存储单元;发送模块,用于将所述目标数据以及所述第一元数据发送至接收端,所述第一元数据用于所述接收端确定所述目标数据是否已同步至第二集群中的第二存储单元,所述第二存储单元用于同步所述第一存储单元的数据。
22.在本公开一实施例中,所述第二获取模块,包括:第三获取单元,用于从第二复制进度表中获取所述目标数据的第二元数据;更新单元,用于将所述第二元数据中第一集群对应的标识预设值,更新为所述第一集群对应的标识真实值,得到所述目标数据的第一元数据,所述标识预设值用于指示所述目标数据是本地数据,所述标识真实值用于指示所述接收端禁止发送所述目标数据至所述发送端。
23.在本公开另一实施例中,所述第二获取模块,还包括:第四获取单元,用于获取所述第一存储单元的单元标识以及所述目标数据在所述第一存储单元的第一变更次数;第五确定单元,用于将所述标识预设值、所述单元标识以及所述第一变更次数,作为所述目标数据的第二元数据,写入所述第二复制进度表。
24.在本公开实施方式的第五方面,还提供一种介质,包括:计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上所述的数据同步方法。
25.在本公开实施方式的第五方面,还提供一种计算设备,包括:存储器以及处理器;所述存储器存储计算机执行指令;所述处理器执行所述存储器存储的计算机执行指令,使得所述处理器执行如上所述的数据同步方法。
26.本公开实施方式中,通过数据在第一集群中的存储单元的变更次数,以及数据待写入的第二集群中的存储单元内数据的最大变更次数,即可确定第一集群中的数据是否已经同步至第二集群,保证了第二集群与第一集群中数据的一致性。
附图说明
27.通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,其中:
28.图1示意性地示出了根据本公开实施方式的流量扶持方法应用场景示意图;
29.图2示意性地示出了根据本公开一实施例的流程示意图;
30.图3示意性地示出了根据本公开另一实施例的流程示意图;
31.图4示意性地示出了根据本公开又一实施例的流程示意图;
32.图5示意性地示出了根据本公开再一实施例的流程示意图;
33.图6示意性地示出了根据本公开实施例提供的程序产品的示意图;
34.图7示意性地示出了根据本公开实施例提供的接收端的结构示意图;
35.图8示意性地示出了根据本公开实施例提供的发送端的结构示意图;
36.图9示意性地示出了根据本公开实施例提供的计算设备的结构示意图。
37.在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
38.下面将参考若干示例性实施方式来描述本公开的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本公开,而并非以任何方式限制本公开的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
39.本领域技术人员知道,本公开的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
40.根据本公开的实施方式,提出了一种数据同步方法、装置、介质和计算设备。
41.此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
42.另外,本公开所涉及的数据可以为经用户授权或者经过各方充分授权的数据,对数据的采集、传播、使用等,均符合国家相关法律法规要求,本公开实施方式/实施例可以互相组合。
43.下面参考本公开的若干代表性实施方式,详细阐释本公开的原理和精神。
44.发明概述
45.在数据同步领域中,一个集群中的数据变更后,会将变更的数据同步至另一个集群中。
46.本公开发明人发现,客户端将源端集群中变更的数据写入至消息队列,然后同步组件从消息队列将变更的数据写入至目的端集群。但受客户端的影响(例如客户端重启),存在消息队列并未写入有源端集群中更变的数据,而同步组件是顺序的从消息队列的中拉取数据进行写入,若消息队列中未有写入源端集群中变更的数据,导致同步组件写入至目的端集群的数据是错误的,造成写入至目标端集群中的数据的一致性无法得到保证,也即同步的数据一致性较差。
47.本公开发明人因此想到,通过数据在第一集群中的存储单元的变更次数,以及数据待写入的第二集群中的存储单元内数据的最大变更次数,即可确定第一集群中的数据是否已经同步至第二集群,保证了第二集群与第一集群中数据的一致性。
48.应用场景总览
49.首先参考图1,图1为本公开实施方式的数据同步方法的应用场景示意图。发送端100在需要将数据同步到接收端200时,会将待同步的目标数据以及目标数据对应的元数据发送至接收端。发送端100可以是集群a中的某个节点设备,接收端200则是集群b中的某个节点设备。目标数据对应的元数据包括有集群a存储目标数据的存储单元的第一标识以及
目标数据在存储单元的第一变更次数。接收端200基于元数据中的第一标识确定目标数据在集群b中待存储的存储单元的第二标识,再获取第二标识关联的存储单元所对应的数据的最大变更次数,从而基于第一变更次数以及最大变更次数确定目标数据是否已经同步至第二标识关联的存储单元。示例性的,若是第一变更次数与最大变更次数相同,则可确定目标数据已同步至第二标识关联的存储单元。
50.示例性方法
51.下面结合图1的应用场景,参考图2-图5来描述根据本公开示例性实施方式的数据同步方法。需要注意的是,上述应用场景仅是为了便于理解本公开的精神和原理而示出,本公开的实施方式在此方面不受任何限制。相反,本公开的实施方式可以应用于适用的任何场景。
52.参照图2,图2示例性的示出了根据本公开实施例提供的数据同步方法一实施例的流程示意图,应用于接收端,数据同步方法包括:
53.步骤s201,接收发送端发送的目标数据以及对应的第一元数据。
54.在本实施例中,执行主体为接收端。接收端会接收发送端发送的目标数据以及目标数据对应的元数据,该元数据定义为第一元数据。
55.发送端是集群1的中的某个节点设备,或者发送端是集群1所配置的用于发送数据的终端设备。接收端是集群2中的某个节点设备,或者接收端是集群2所配置的用于接收数据的终端设备。
56.集群包括有多个存储单元,存储单元可以是slot(槽),slot是最小的数据管理粒度的数据存储单元。
57.集群1以及集群2可以是非对称集群,在两个集群进行数据同步时,需要配置集群1与集群2的存储单元的映射关系,使得集群1中的存储单元内的数据同步至集群2中指定的存储单元。示例性的,集群1的存储单元1与集群2的存储单元2具有映射关系,则存储单元1内的数据同步至存储单元2。
58.对此,在发送端发送目标数据时,需要将存储数据的存储单元的标识一同发送至接收端,也即第一元数据中包括有发送端中存储目标数据的存储单元的标识。
59.另外,集群设置有维护状态的数据表,该数据表定义为复制进度表。集群中每个存储单元所存储的数据进行更新时,会在复制进度表中更新存储单元的数据变更次数。示例性的,存储单元作为最小数据管理粒度,存储单元仅存储一个数据,若是存储单元中的数据更新,则在复制进度表中将存储单元所关联的数据变更次数+1。通过数据变更次数可以确定数据更新了多少次,可用用于进行数据是否同步的判断。对此,在需要进行数据同步时,发送端将目标数据所在的存储单元的数据变更次数发送至接收端,因此,目标数据对应的第一元数据中还包括了目标数据所在存储单元的数据变更次数。示例性的,第一元数据可标识为《slot id=s,op id=o+1》,其中,slot id表征第一存储单元的标识,s则为第一存储单元的标识的标识值,op id表征第一存储单元的数据变更次数,o+1则为数据变更次数的具体数值。
60.为了便于区分,将发送端对应集群定义为第一集群、接收端对应的集群定义为第二集群、第一集群中存储目标数据的存储单元定义为第一存储单元、第二集群中待存储目标数据的存储单元定义为第二存储单元、第一存储单元的数据变更次数定义为第一变更次
数。可以理解的是,第二存储单元用于同步第一存储单元的数据。
61.步骤s202,根据第一元数据确定目标数据在第一集群中所在的第一存储单元,以及目标数据在第一存储单元的第一变更次数。
62.步骤s203,在第二集群中确定与第一存储单元对应的第二存储单元,并获取第二存储单元中数据的最大变更次数,第二存储单元用于同步第一存储单元的数据。
63.接收端在接收到第一元数据后,对第一元数据进行解析,即可得到目标数据在第一集群中所在的第一存储单元的标识以及目标数据在第一存储单元的第一变更次数。
64.接收端存储有第一集群与第二集群中存储单元的映射关系,基于第一存储单元的标识以及映射关系,接收端则可确定第二集群中待存储目标数据的第二存储单元。
65.第二集群中存储有每个存储单元的数据的数据变更次数的记录,接收端基于记录获取第二存储单元的数据的最大变更次数。最大变更次数可以用于指示存储单元存储的数据的同步总次数。例如,最大变更次数为5次,则可确定存储单元已经对数据更新了5次。第二集群中设置有复制进度表,该复制进度表定义为第一复制进度表,接收端可以从第一复制进度表中获取第二存储单元中数据的最大变更次数。
66.步骤s204,根据第一变更次数与最大变更次数,确定目标数据是否已同步至第二存储单元。
67.接收端在获取最大变更次数,即可通过第一更变次数与最大变更次数确定目标数据是否已同步至第二存储单元。示例性的,接收端比对第一变更次数与最大变更次数,若是最大变更次数大于或等于第一变更次数,即可确定目标数据已同步至第二存储单元,接收端则无需对目标数据进行同步;若是第一变更次数小于最大变更次数,若是最大变更次数小于第一变更次数,则可确定目标数据并未同步至第二存储单元,装置则将目标数据存储至第二存单元,并在第一复制进度变中将最大更新次数更新为第一变更次数。
68.在实施例中,通过数据在第一集群中的存储单元的变更次数,以及数据待写入的第二集群中的存储单元内数据的最大变更次数,即可确定第一集群中的数据是否已经同步至第二集群,保证了第二集群与第一集群中数据的一致性。
69.参照图3,图3示例性的示出了根据本公开实施例提供的数据同步方法另一实施例的流程示意图,基于图2所示的实施例,步骤s203包括:
70.步骤s301,根据最大变更次数获取目标次数,目标次数大于最大变更次数,且目标次数与最大变更次数之间的差值为1。
71.在本实施例中,接收端基于最大变更次数获取目标次数,目标次数大于最大变更次数,且目标次数与最大变更次数之间的差值为1。示例性的,若是最大变更次数是5次,则目标次数为6次。
72.步骤s302,确定第一变更次数是否小于目标次数,以确定目标数据是否已同步至第二存储单元。
73.接收端在获得目标次数后,判断第一变更次数是否小于目标次数,以确定目标数据是否已同步至第二存储单元。
74.在一示例中,在当第一变更次数小于目标次数时,则可确定目标数据已同步至第二存储单元,接收端则向发送端发送第一提示信息,第一提示信息用于指示发送端发送第一数据,第一数据在第一存储单元的更新次数为目标次数,也即接收端告知发送端发送变
更操作的次数为目标次数的目标数据,进行同步。
75.在另一示例中,当第一变更次数等于目标次数时,也即第一变更次数是大于最大变更次数的,则可确定目标数据未同步至第二存储单元,接收端则将目标数据同步至第二存储单元,且将目标次数更新为第二存储单元对应的最大更新次数,也即在第一复制进度表中将第二存储单元的最大更新次数更新为目标次数。
76.在又一示例中,当第一变更次数大于目标次数时,则向发送端发送第二提示信息,第二提示信息用于指示发送端发送第二数据,第二数据在第一存储单元的变更次数小于第一变更次数且大于目标次数。可以理解的是,接收端向发送端发送第二提示信息,以告知发送端小于第一变更次数且大于目标次数的第二数据还未同步,需要等待第二数据同步完成后,才可进行目标数据的同步。
77.在本实施例中,接收端发送第二提示信息的原因在于,接收端需要先同步更新次数小的数据,再同步更新次数大的数据,而不能跳跃的进行数据同步。示例性的,第一存储单元先将原始数据同步至第二存储单元,在当第一存储单元的原始数据更新两次后,则需要先将第一更新后的原始数据同步至第二存储单元,然后再将第二次更新后的原始数据同步至第二存储单元,而不能出现跳过第一次更新后的原始数据的同步进行第二次更新后的原始数据的同步。
78.接收端不能跳跃某个更新次数进行最大更新次数的数据同步的原因在于,目标数据的数据结构并不是幂等结构,非幂等结构的数据只能按照顺序进行同步,且进行同步的操作只能执行一次。例如,第一存储单元的数据a进行了三次更新得到数据b、数据c以及数据d,则第二存储单元只能是依次同步数据a、数据b、数据c以及数据d,而不能跳过数据b以及数据c,直接同步数据d。
79.在本实施例中,对最大变更次数加1得到目标次数,确保能够出现第一变更次数大于目标次数的情况,从而保证接收端最终同步的数据与发送端的数据是一致的。
80.参照图4,图4示例性的示出了根据本公开实施例提供的数据同步方法一实施例的流程示意图,应用于发送端,数据同步方法包括:
81.步骤s401,获取目标数据对应的第一元数据,目标数据位于第一集群的第一存储单元。
82.在本实施例中,执行主体是发送端。发送端是集群1的中的某个节点设备,或者发送端是集群1所配置的用于发送数据的终端设备。接收端是集群2中的某个节点设备,或者接收端是集群2所配置的用于接收数据的终端设备。发送端也可以是redis(remote dictionary server,远程字典服务)aof(redis的持久化日志)的实体设备。发送端自身会进行增强,也即在发送目标数据至接收端的同时,发送目标数据对应的第一元数据。
83.集群包括有多个存储单元,存储单元可以是slot(槽),slot是最小的数据管理粒度的数据存储单元。
84.集群1以及集群2可以是非对称集群,在两个集群进行数据同步时,需要配置集群1与集群2的存储单元的映射关系,使得集群1中的存储单元内的数据同步至集群2中指定的存储单元。示例性的,集群1的存储单元1与集群2的存储单元2具有映射关系,则存储单元1内的数据同步至存储单元2。
85.对此,在发送端发送目标数据时,需要将存储数据的存储单元的标识一同发送至
接收端,也即第一元数据中包括有发送端中存储目标数据的存储单元的标识。
86.另外,集群设置有维护状态的数据表,该数据表定义为复制进度表。集群中每个存储单元所存储的数据进行更新时,会在复制进度表中更新存储单元的数据变更次数。示例性的,存储单元作为最小数据管理粒度,存储单元仅存储一个数据,若是存储单元中的数据更新,则在复制进度表中将存储单元所关联的数据变更次数+1。通过数据变更次数可以确定数据更新了多少次,可用用于进行数据是否同步的判断。对此,在需要进行数据同步时,发送端将目标数据所在的存储单元的数据变更次数发送至接收端,因此,目标数据对应的第一元数据中还包括了目标数据所在存储单元的数据变更次数。示例性的,第一元数据可标识为《slot id=s,op id=o+1》,其中,slot id表征第一存储单元的标识,s则为第一存储单元的标识的标识值,op id表征第一存储单元的数据变更次数,o+1则为数据变更次数的具体数值。
87.为了便于区分,将发送端对应集群定义为第一集群、接收端对应的集群定义为第二集群、第一集群中存储目标数据的存储单元定义为第一存储单元、第二集群中待存储目标数据的存储单元定义为第二存储单元、第一存储单元的数据变更次数定义为第一变更次数。可以理解的是,第二存储单元用于同步第一存储单元的数据。
88.步骤s402,将目标数据以及第一元数据发送至接收端,第一元数据用于接收端确定目标数据是否已同步至第二集群中的第二存储单元,第二存储单元用于同步第一存储单元的数据。
89.发送端将目标数据以及第一元数据发送至接收端,使得接收端基于第一元数据确定目标数据是否已同步至第二集群中的第二存储单元。
90.具体的,接收端在接收到第一元数据后,对第一元数据进行解析,即可得到目标数据在第一集群中所在的第一存储单元的标识以及目标数据在第一存储单元的第一变更次数。
91.接收端存储有第一集群与第二集群中存储单元的映射关系,基于第一存储单元的标识以及映射关系,接收端则可确定第二集群中待存储目标数据的第二存储单元。
92.第二集群中存储有每个存储单元的数据的数据变更次数的记录,接收端基于记录获取第二存储单元的数据的最大变更次数。最大变更次数可以用于指示存储单元存储的数据的同步总次数。例如,最大变更次数为5次,则可确定存储单元已经对数据更新了5次。第二集群中设置有复制进度表,该复制进度表定义为第一复制进度表,接收端可以从第一复制进度表中获取第二存储单元中数据的最大变更次数。
93.接收端在获取最大变更次数,即可通过第一更变次数与最大变更次数确定目标数据是否已同步至第二存储单元。
94.在一示例中,接收端比对第一变更次数与最大变更次数,若是最大变更次数大于或等于第一变更次数,即可确定目标数据已同步至第二存储单元,接收端则无需对目标数据进行同步;若是第一变更次数小于最大变更次数,若是最大变更次数小于第一变更次数,则可确定目标数据并未同步至第二存储单元,装置则将目标数据存储至第二存单元,并在第一复制进度变中将最大更新次数更新为第一变更次数。
95.在另一示例中,接收端基于最大变更次数得到目标次数,再通过第一变更次数与目标次数的比对确定目标数据是否已同步至第二存储单元,具体过程参照上述说明,在此
不再进行赘述。
96.在实施例中,通过数据在第一集群中的存储单元的变更次数,以及数据待写入的第二集群中的存储单元内数据的最大变更次数,即可确定第一集群中的数据是否已经同步至第二集群,保证了第二集群与第一集群中数据的一致性。
97.参照图5,图5示例性的示出了根据本公开实施例提供的数据同步方法另一实施例的流程示意图,基于图4中所示的实施例,步骤s201包括:
98.步骤s501,从第二复制进度表中获取目标数据的第二元数据。
99.在本实施例中,目标数据存储在第一存储单元后,发送端会将目标数据的元数据进行存储在复制进度表中,发送端的复制进度表定义为第二复制进度表中。示例性的,第二复制进度表存储目标对应的元数据为《slot id=s,op id=192》。
100.另外,第一存储单元的标识slot id的值可通过发送端进行计算。示例性的,发送端在将数据写入至第一存储单元时,获取数据对应的哈希值,通过哈希值确定存储数据的第一存储单元的slot id的值。
101.进一步,数据的元数据中还包括有集群标识cluster id。若是数据是本地的数据,则cluster id的值为标识预设值。若数据是本地数据,数据在第二复制进度表所存储的元数据为三元组数据,元数据示例性的为:《cluster id=0,slot id=s,op id=192》,其中cluster id=0中的0为标识预设值。在本实施例中,将作为本地数据的目标数据在第二复制进度表中的元数据定义为第二元数据。
102.在获取第二元数据之前,发送端获取第一存储单元的单元标识以及目标数据在第一存储单元的第一变更次数,发送端再将标识预设值、单元标识以及第一变更次数作为目标数据的第二元数据,写入至第二复制进度表中。
103.而在当数据不是本地数据时,例如,数据是从其他集群中同步的,则该数据的元数据中集群标识是其他集群的集群标识的真实值,示例性的,其他集群写入的数据在第二复制进度表中关联的元数据示例性的为《cluster id=55,slot id=s+1,op id=191》,也即55是其他集群的集群标识的真实值。集群标识的真实值可通过配置中心进行配置下发。
104.步骤s502,将第二元数据中第一集群对应的标识预设值,更新为第一集群对应的标识真实值,得到目标数据的第一元数据,标识预设值用于指示目标数据是本地数据,标识真实值用于指示接收端禁止发送目标数据至发送端。
105.在本实施例中,将作为本地数据的目标数据在第二复制进度表中的元数据定义为第二元数据。在当目标数据需要写入到其他集群时,发送端将第二元数据中的标识预设值更改为第一集群对应的标识真实值,即可得到目标数据的第一元数据。
106.接收端接收到目标数据以及第一元数据时,通过第一元数据中的标识真实值,则可确定目标数据不是本地数据,则可将目标数据进行同步。
107.本实施例中,本地数据在复制进度表中的集群标识为标识预设值,再将本地数据同步至其他集群时,再将本地数据的标识预设值更改为集群的标识真实值发送给其他进群进行同步,能够避免回环复制的问题。
108.具体的,集群a将数据g复制且同步至集群b,然后集群将数据g又复制且同步至集群a,集群b以及集群a会来回的将数据g进行复制同步,此种情况即为回还复制。本实施例中,本地数据在复制进度表中的集群标识为标识预设值,而在当本地数据写入至其他集群,
提取本地数据的元数据,并将元数据中标识预设值更改为标识真实值再发往其他集群,其他集群会同步该数据,且将该数据的元数据存储至其他集群的复制进度表中;若是发送端接收到其他集群发送的数据以及元数据,且元数据中的标识真实值是发送端对的集群的标识真实值,则可确定该数据是从发送端同步至其他集群的数据,发送端不会将该数据进行写入,从而避免了发送端的回还复制。
109.需要说明的是,接收端也可以是redis aof,且接收端写入本地数据时,本地数据的元数据也为三元组,三元组中的集群标识的值为接收端对应的集群的标识预设值,接收端将本地数据同步至其他集群时,也即将三元组中的集群标识的标识预设值改为标识真实值。接收端中关于本地数据的写入、本地数据的三元组、以及本地数据同步至其他进群的具体流程可参照上述说明,在此不再进行赘述。
110.此外,由于发送端以及接收端各自维护有复制进度表,复制进度表中有关于存储单元中数据的变更次数,且存储单元是在完成数据的同步后,再更新复制进度表中的更新次数。即便是网络出现故障,发送端在进行续传时,接收端的存储单元未能将数据全部同步,此时,复制进度表中存储单元的变更次数未更新,使得接收端的存储单元能够继续的进行数据同步,实现了数据的断点续传。
111.在本实施例中,发送端从第二复制进度表中获取目标数据的第二元数据,并将第二元数据中的第一集群对应的标识预设值更改为第一集群的标识真实值,从而可以避免目标数据的回还复制。
112.示例性介质
113.在介绍了本公开示例性实施方式的方法之后,接下来,参考图6对本公开示例性实施方式的存储介质进行说明。
114.参考图6所示,存储介质60中存储着根据本公开的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(cd-rom)并包括计算机执行指令,该计算机执行指令用于使计算设备执行本公开所提供的数据同步方法。然而,本公开的程序产品不限于此。
115.程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。
116.可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机执行指令。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质。
117.可以以一种或多种程序设计语言的任意组合来编写用于执行本公开公开操作的计算机执行指令,程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。计算机执行指令可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可
以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算设备。
118.示例性装置
119.在介绍了本公开示例性实施方式的介质之后,接下来,参考图7对本公开示例性实施方式的接收端进行说明,接收端用于实现上述任一数据同步方法实施例中的方法,其实现原理和技术效果类似。
120.参考图7,图7示意性地示出了根据本公开实施例提供的接收端的结构示意图。
121.如图7所示,接收端包括:第一接收模块710,用于接收发送端发送的目标数据以及对应的第一元数据;第一确定模块720,用于根据第一元数据确定目标数据在第一集群中所在的第一存储单元,以及目标数据在第一存储单元的第一变更次数;第一获取模块730,用于在第二集群中确定与第一存储单元对应的第二存储单元,并获取第二存储单元中数据的最大变更次数,第二存储单元用于同步第一存储单元的数据;第二确定模块740,用于根据第一变更次数与最大变更次数,确定目标数据是否已同步至第二存储单元。
122.在一实施例中,第二确定模块740,包括:第一获取单元,用于根据最大变更次数获取目标次数,目标次数大于最大变更次数,且目标次数与最大变更次数之间的差值为1;第一确定单元,用于确定第一变更次数是否小于目标次数,以确定目标数据是否已同步至第二存储单元。
123.在一实施例中,第二确定模块740,还包括:第二确定单元,用于响应于第一变更次数小于目标次数,确定目标数据已同步至第二存储单元;发送单元,用于向发送端发送第一提示信息,第一提示信息用于指示发送端发送第一数据,第一数据在第一存储单元的变更次数为目标次数。
124.在一实施例中,第二确定模块740,还包括:第三确定单元,用于响应于第一变更次数等于目标次数,确定目标数据未同步至第二存储单元,并将目标数据同步至第二存储单元,且将目标次数更新为第二存储单元对应的最大变更次数。
125.在一实施例中,第二确定模块740,还包括:第四确定单元,用于响应于第一变更次数大于目标次数,向发送端发送第二提示信息,第二提示信息用于指示发送端发送第二数据,第二数据在第一存储单元的变更次数小于第一变更次数且大于目标次数。
126.在一实施例中,第一获取模块730,包括:第二获取单元,用于在第一复制进度表中,获取第二存储单元中数据的最大变更次数。
127.在介绍了本公开示例性实施方式的介质之后,接下来,参考图8对本公开示例性实施方式的发送端进行说明,发送端用于实现上述任一数据同步方法实施例中的方法,其实现原理和技术效果类似。
128.参考图8,图8示意性地示出了根据本公开实施例提供的发送端的结构示意图。
129.如图8所示,发送端包括:第二获取模块810,用于获取目标数据对应的第一元数据,目标数据位于第一集群的第一存储单元;发送模块820,用于将目标数据以及第一元数据发送至接收端,第一元数据用于接收端确定目标数据是否已同步至第二集群中的第二存储单元,第二存储单元用于同步第一存储单元的数据。
130.在一实施例中,第二获取模块810,包括:第三获取单元,用于从第二复制进度表中获取目标数据的第二元数据;更新单元,用于将第二元数据中第一集群对应的标识预设值,更新为第一集群对应的标识真实值,得到目标数据的第一元数据,标识预设值用于指示目
标数据是本地数据,标识真实值用于指示接收端禁止发送目标数据至发送端。
131.在一实施例中,第二获取模块810,还包括:第四获取单元,用于获取第一存储单元的单元标识以及目标数据在第一存储单元的第一变更次数;第五确定单元,用于将标识预设值、单元标识以及第一变更次数,作为目标数据的第二元数据,写入第二复制进度表。
132.示例性计算设备
133.在介绍了本公开示例性实施方式的方法、介质和装置之后,接下来,参考图9对本公开示例性实施方式的计算设备进行说明。
134.图9显示的计算设备90仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。如图9所示,计算设备90以通用计算设备的形式表现。计算设备90的组件可以包括但不限于:至少一个处理单元901、至少一个存储单元902,连接不同系统组件(包括处理单元901和存储单元902)的总线903。其中,至少一个存储单元902中存储有计算机执行指令;至少一个处理单元901包括处理器,处理器执行该计算机执行指令,以实现上文描述的方法。
135.总线903包括数据总线、控制总线和地址总线。
136.存储单元902可以包括易失性存储器形式的可读介质,例如随机存取存储器(ram)9021和/或高速缓存存储器9022,可以进一步包括非易失性存储器形式的可读介质,例如只读存储器(rom)9023。
137.存储单元902还可以包括具有一组(至少一个)程序模块9024的程序/实用工具9025,这样的程序模块9024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
138.计算设备90也可以与一个或多个外部设备904(例如键盘、指向设备等)通信。这种通信可以通过输入/输出(i/o)接口905进行。并且,计算设备90还可以通过网络适配器906与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图9所示,网络适配器906通过总线903与计算设备90的其它模块通信。应当理解,尽管图中未示出,可以结合计算设备90使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。
139.应当注意,尽管在上文详细描述中提及了终端设备/服务端的若干单元/模块或子单元/模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多单元/模块的特征和功能可以在一个单元/模块中具体化。反之,上文描述的一个单元/模块的特征和功能可以进一步划分为由多个单元/模块来具体化。
140.此外,尽管在附图中以特定顺序描述了本公开方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
141.虽然已经参考若干具体实施方式描述了本公开的精神和原理,但是应该理解,本公开并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本公开旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
技术特征:
1.一种数据同步方法,其特征在于,应用于接收端,包括:接收发送端发送的目标数据以及对应的第一元数据;根据所述第一元数据确定所述目标数据在第一集群中所在的第一存储单元,以及所述目标数据在所述第一存储单元的第一变更次数;在第二集群中确定与所述第一存储单元对应的第二存储单元,并获取所述第二存储单元中数据的最大变更次数,所述第二存储单元用于同步所述第一存储单元的数据;根据所述第一变更次数与所述最大变更次数,确定所述目标数据是否已同步至所述第二存储单元。2.根据权利要求1所述的数据同步方法,其特征在于,所述根据所述第一变更次数与所述最大变更次数,确定所述目标数据是否已同步至所述第二存储单元,包括:根据所述最大变更次数获取目标次数,所述目标次数大于所述最大变更次数,且所述目标次数与所述最大变更次数之间的差值为1;确定所述第一变更次数是否小于所述目标次数,以确定所述目标数据是否已同步至所述第二存储单元。3.根据权利要求2所述的数据同步方法,其特征在于,所述确定所述第一变更次数是否小于所述目标次数之后,还包括:响应于所述第一变更次数小于所述目标次数,确定所述目标数据已同步至所述第二存储单元;向所述发送端发送第一提示信息,所述第一提示信息用于指示所述发送端发送第一数据,所述第一数据在所述第一存储单元的变更次数为所述目标次数。4.根据权利要求2所述的数据同步方法,其特征在于,所述确定所述第一变更次数是否小于所述目标次数之后,还包括:响应于所述第一变更次数等于所述目标次数,确定所述目标数据未同步至所述第二存储单元,并将所述目标数据同步至所述第二存储单元,且将所述目标次数更新为所述第二存储单元对应的最大变更次数。5.根据权利要求2所述的数据同步方法,其特征在于,所述确定所述第一变更次数是否小于所述目标次数之后,还包括:响应于所述第一变更次数大于所述目标次数,向所述发送端发送第二提示信息,所述第二提示信息用于指示所述发送端发送第二数据,所述第二数据在所述第一存储单元的变更次数小于所述第一变更次数且大于所述目标次数。6.一种数据同步方法,其特征在于,应用于发送端,包括:获取目标数据对应的第一元数据,所述目标数据位于第一集群的第一存储单元;将所述目标数据以及所述第一元数据发送至接收端,所述第一元数据用于所述接收端确定所述目标数据是否已同步至第二集群中的第二存储单元,所述第二存储单元用于同步所述第一存储单元的数据。7.一种接收端,其特征在于,包括:第一接收模块,用于接收发送端发送的目标数据以及对应的第一元数据;第一确定模块,用于根据所述第一元数据确定所述目标数据在第一集群中所在的第一存储单元,以及所述目标数据在所述第一存储单元的第一变更次数;
第一获取模块,用于在第二集群中确定与所述第一存储单元对应的第二存储单元,并获取所述第二存储单元中数据的最大变更次数,所述第二存储单元用于同步所述第一存储单元的数据;第二确定模块,用于根据所述第一变更次数与所述最大变更次数,确定所述目标数据是否已同步至所述第二存储单元。8.一种发送端,其特征在于,包括:第二获取模块,用于获取目标数据对应的第一元数据,所述目标数据位于第一集群的第一存储单元;发送模块,用于将所述目标数据以及所述第一元数据发送至接收端,所述第一元数据用于所述接收端确定所述目标数据是否已同步至第二集群中的第二存储单元,所述第二存储单元用于同步所述第一存储单元的数据。9.一种介质,其特征在于,包括:计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1至6任一项所述的数据同步方法。10.一种计算设备,其特征在于,包括:存储器以及处理器;所述存储器存储计算机执行指令;所述处理器执行所述存储器存储的计算机执行指令,使得所述处理器执行如权利要求1至6任一项所述的数据同步方法。
技术总结
本公开的实施方式提供了一种数据同步方法、接收端、发送端、介质和计算设备,该方法包括:接收发送端发送的目标数据以及对应的第一元数据;根据第一元数据确定目标数据在第一集群中所在的第一存储单元,以及目标数据在第一存储单元的第一变更次数;在第二集群中确定与第一存储单元对应的第二存储单元,并获取第二存储单元中数据的最大变更次数;根据第一变更次数与最大变更次数,确定目标数据是否已同步至第二存储单元。本申请,通过数据在第一集群中的存储单元的变更次数,以及数据待写入的第二集群中的存储单元内数据的最大变更次数,即可确定第一集群中的数据是否已经同步至第二集群,保证了第二集群与第一集群中数据的一致性。性。性。
技术研发人员:吴德妙 陈杰 闫东晓 孙建良
受保护的技术使用者:杭州网易云音乐科技有限公司
技术研发日:2023.05.06
技术公布日:2023/8/9
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
