一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于桶分片的数据同步处理方法、系统及终端与流程

2022-06-01 10:53:36 来源:中国专利 TAG:


1.本技术涉及分布式对象存储系统数据处理技术领域,特别是涉及一种基于桶分片的数据同步处理方法、系统及终端。


背景技术:

2.在分布式对象存储系统中部署有多站点环境,当同步网关正常运行后,如果主站点发送的数据改变,例如:写入、删除、修改等操作,从站点上同步网关中的同步线程就能感知到变化,然后根据变化日志执行相同操作,从而实现数据同步,进而达到主从站点之间数据一致的目的。在分布式对象存储系统中数据同步是以桶分片为单位的,因此,如何基于桶分片进行数据同步处理,是实现主从站点数据一致的关键。
3.目前基于桶分片进行数据同步处理的方法,通常是:首先通过异步通知、之前处理失败的桶分片以及扫描方式这三种常见途径,获取到发生数据变化的桶分片;然后针对三种方式获取到的桶分片以协程的方式并发处理。
4.然而,目前进行数据同步处理的方法中,进行并发处理时,三种常见的获取发生数据变化的桶分片的方式中有很大概率都存在于同一个桶分片上,此时,同步线程获取到同一个桶分片后会同时同时启动三个协程并发处理,从而引起同步丢对象、同步位置更新错乱等问题。因此,目前进行数据同步处理的方法容易出现同步故障,影响后续数据处理的顺利进行。


技术实现要素:

5.本技术提供了一种基于桶分片的数据同步处理方法、系统及终端,以解决现有技术中的数据同步方法中容易出现同步故障的问题。
6.为了解决上述技术问题,本技术实施例公开了如下技术方案:
7.一种基于桶分片的数据同步处理方法,所述方法应用于分布式对象存储系统中,所述方法包括:
8.对任一桶分片创建缓存,所述缓存用于存放所述任一桶分片的信息,所述信息包括:桶分片名称、所述任一桶分片上所有待处理桶分片任务的时间戳,以及用于进行桶分片任务计数的计数变量;
9.根据所获取的桶分片处理请求,更新所述缓存;
10.根据对所述缓存的更新结果,当处理桶分片任务时,利用缓存中的计数变量和待处理桶分片任务的时间戳,对当前在处理桶分片任务的计数变量以及当前在处理桶分片任务的处理时间进行赋值;
11.判断当前在处理桶分片任务的计数变量是否不等于缓存中的任务计数,或者当前在处理桶分片任务的处理时间小于缓存中的时间戳;
12.如果是,判定缓存中有新的待处理桶分片任务,并重新根据所获取的所述任一桶分片的处理请求,更新所述缓存,直到所述任一桶分片的所有待处理桶分片任务完成;
13.如果否,判定缓存中没有新的待处理桶分片任务。
14.可选地,当缓存中的时间戳为空时,判定当前在处理桶分片任务是所述任一桶分片的第一个待处理桶分片任务。
15.可选地,所述根据所获取的桶分片处理请求,更新所述缓存,包括:
16.根据所获取的桶分片处理请求,判断所述缓存中是否存在当前在处理桶分片任务;
17.如果否,将与所述桶分片处理请求相对应的待处理桶分片任务加入所述缓存,同时将缓存中的计数变量加1;
18.直接处理与所述任一桶分片的处理请求相对应的待处理桶分片任务;
19.如果是,判断缓存中当前在处理桶分片任务的时间戳是否大于所述待处理桶分片任务的时间戳;
20.如果当前在处理桶分片任务的时间戳大于所述待处理桶分片任务的时间戳,不对缓存进行更新;
21.如果当前在处理桶分片任务的时间戳小于或等于所述待处理桶分片任务的时间戳,将所述待处理桶分片任务更新至缓存中,同时将缓存中的计数变量加1。
22.可选地,根据对所述缓存的更新结果,当处理桶分片任务时,利用缓存中的计数变量和待处理桶分片任务的时间戳,对当前在处理桶分片任务的计数变量以及当前在处理桶分片任务的处理时间进行赋值,包括:
23.当处理桶分片任务时,将缓存的计数变量中的任务计数赋值给当前在处理桶分片任务的计数变量;
24.初始化当前在处理桶分片任务的处理时间变量;
25.当前在处理桶分片上的对象处理完毕后获取处理时间;
26.将所述处理时间赋值给处理时间变量并返回。
27.一种基于桶分片的数据同步处理系统,所述系统应用于分布式对象存储系统中,所述系统包括:
28.缓存创建模块,用于对任一桶分片创建缓存,所述缓存用于存放所述任一桶分片的信息,所述信息包括:桶分片名称、所述任一桶分片上所有待处理桶分片任务的时间戳,以及用于进行桶分片任务计数的计数变量;
29.缓存更新模块,用于根据所获取的桶分片处理请求,更新所述缓存;
30.赋值模块,用于根据对所述缓存的更新结果,当处理桶分片任务时,利用缓存中的计数变量和待处理桶分片任务的时间戳,对当前在处理桶分片任务的计数变量以及当前在处理桶分片任务的处理时间进行赋值;
31.更新判断模块,用于判断当前在处理桶分片任务的计数变量是否不等于缓存中的任务计数,或者当前在处理桶分片任务的处理时间小于缓存中的时间戳,如果是,判定缓存中有新的待处理桶分片任务,重新启动缓存更新模块,直到所述任一桶分片的所有待处理桶分片任务完成,如果否,判定缓存中没有新的待处理桶分片任务,不启动缓存更新模块。
32.可选地,所述缓存更新模块包括:
33.第一判断单元,用于根据所获取的桶分片处理请求,判断所述缓存中是否存在当前在处理桶分片任务;
34.第一更新单元,用于当缓存中不存在当前在处理桶分片任务时,将与所述桶分片处理请求相对应的待处理桶分片任务加入所述缓存,同时将缓存中的计数变量加1;
35.处理单元,用于将与所述桶分片处理请求相对应的待处理桶分片任务加入所述缓存之后,直接处理与所述任一桶分片的处理请求相对应的待处理桶分片任务;
36.第二判断单元,用于当缓存中存在当前在处理桶分片任务时,判断缓存中当前在处理桶分片任务的时间戳是否大于所述待处理桶分片任务的时间戳;
37.第二更新单元,用于当前在处理桶分片任务的时间戳小于所述待处理桶分片任务的时间戳时,将所述待处理桶分片任务更新至缓存中,同时将缓存中的计数变量加1,否则,不对缓存进行更新。
38.可选地,所述赋值模块包括:
39.第一赋值单元,用于当处理桶分片任务时,将缓存的计数变量中的任务计数赋值给当前在处理桶分片任务的计数变量;
40.初始化单元,用于初始化当前在处理桶分片任务的处理时间变量;
41.处理时间获取单元,用于当前在处理桶分片上的对象处理完毕后获取处理时间;
42.第二赋值单元,用于将所述处理时间赋值给处理时间变量并返回。
43.一种终端,所述终端包括:处理器以及与所述处理器通信连接的存储器,其中,
44.所述存储器中存储有可被所述处理器执行的指令,所述指令被所述处理器执行,以使所述处理器能够执行如上所述的基于桶分片的数据同步处理方法。
45.本技术的实施例提供的技术方案可以包括以下有益效果:
46.本技术提供一种基于桶分片的数据同步处理方法,该方法首先对任意桶分片创建用于存放桶分片信息的缓存,其次根据所获取的桶分片处理请求,更新该缓存;然后根据对该缓存的更新结果,当处理桶分片任务时,利用缓存中的计数变量和待处理桶分片任务的时间戳,对当前在处理桶分片任务的计数变量以及当前在处理桶分片任务的处理时间进行赋值;最后,判断当前在处理桶分片任务的计数变量是否不等于缓存中的任务计数,或者当前在处理桶分片任务的处理时间小于缓存中的时间戳,如果是,判定缓存中有新的待处理桶分片任务,否则判定缓存中没有新的待处理桶分片任务。当前在处理桶分片任务的计数变量不等于缓存中的任务计数时,或者当前在处理桶分片任务的处理时间小于缓存中的时间戳时,重新根据所获取的该任一桶分片的处理请求,更新缓存,直到该任一桶分片的所有待处理桶分片任务完成。
47.本实施例通过对异步通知、之前处理失败的桶分片以及扫描方式三种途径获取到的待处理桶分片,创建缓存,存放每个桶分片的时间戳、任务计数等桶分片信息,且当该待处理桶分片的处理请求到来时,更新缓存。相比于现有技术中的并发处理方式,本实施例通过设置数据同步缓存机制,使得同一时间段内只有一个桶分片被处理,能够有效避免同步丢对象、同步位置更新错乱等故障问题,从而确保后续数据处理的顺利进行。本实施例在处理桶分片信息时,将当前任务的桶分片信息与缓存中的桶分片信息进行比对,当前在处理桶分片任务的计数变量不等于缓存中的任务计数,或者,当前在处理桶分片任务的处理时间小于缓存中的时间戳时,判定缓存中有新的待处理桶分片任务,循环处理该桶分片,即:返回重新根据所获取的任一桶分片的处理请求更新缓存,直到该任一桶分片的所有待处理桶分片任务完成。
48.本技术还提供一种基于桶分片的数据同步处理系统,该系统主要包括:缓存创建模块、缓存更新模块、赋值模块和更新判断模块。通过缓存创建模块,对任一桶分片创建用于存放该任一桶分片的信息的缓存,并利用缓存更新模块根据所获取的桶分片处理请求,更新缓存,使得同一时间段内只有一个桶分片被处理,从而避免并发处理桶分片时所引起的同步丢对象以及同步位置错乱等问题,有效解决数据同步过程中的故障,提高数据同步处理效率。
49.本技术还提供一种终端,该终端也具有如上基于桶分片的数据同步处理方法和系统相应的技术效果,在此不再赘述。
50.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
51.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
52.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
53.图1为本技术实施例所提供的一种基于桶分片的数据同步处理方法的流程示意图;
54.图2为本技术实施例所提供的一种基于桶分片的数据同步处理系统的结构示意图。
具体实施方式
55.为了使本技术领域的人员更好地理解本技术中的技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
56.为了更好地理解本技术,下面结合附图来详细解释本技术的实施方式。
57.实施例一
58.参见图1,图1为本技术实施例所提供的一种基于桶分片的数据同步处理方法的流程示意图。由图1可知,本实施例中基于桶分片的数据同步处理方法,主要包括如下过程:
59.s1:对任一桶分片创建缓存,缓存用于存放任一桶分片的信息。
60.本实施例中的桶分片信息包括:桶分片名称、任一桶分片上所有待处理桶分片任务的时间戳,以及用于进行桶分片任务计数的计数变量。本实施例中的方法应用于分布式对象存储系统中,该分布式对象存储系统指的是针对非结构化数据对象的分布式存储系统。一个数据中心就是一套存储系统,数据中心也称为站点,有主从之分。每个数据中心有单独的存储网关、同步网关和存储池。本实施例中的数据同步过程主要是站点上同步网关进程中的同步线程,以主动拉取的方式,从其他站点上将数据的修改同步到本站点,实现数
据的备份。数据同步是以桶分片为单位进行的。
61.在对象存储中,桶指的是逻辑上的用于存放对象的容器,每个桶分为若干个桶分片,桶中的对象均匀地分散在不同的桶分片上。本实施例就是针对同一个桶的每个桶分片创建一个缓存,用于存放时间戳、计数变量等,每个待处理的桶分片任务都携带有时间戳。
62.针对任一桶分片创建缓存之后,执行步骤s2:根据所获取的桶分片处理请求,更新缓存。
63.具体地,更新缓存的方法包括如下过程:
64.s21:根据所获取的桶分片处理请求,判断缓存中是否存在当前在处理桶分片任务。
65.如果缓存中不存在当前在处理桶分片任务,执行步骤s22:将与桶分片处理请求相对应的待处理桶分片任务加入缓存,同时将缓存中的计数变量加1。
66.将缓存中的计数变量加1之后,执行步骤s23:直接处理与任一桶分片的处理请求相对应的待处理桶分片任务。
67.如果缓存中存在当前在处理桶分片任务,执行步骤s24:判断缓存中当前在处理桶分片任务的时间戳是否大于待处理桶分片任务的时间戳。
68.如果当前在处理桶分片任务的时间戳大于待处理桶分片任务的时间戳,执行步骤s25:不对缓存进行更新。
69.也就是此时需要等待当前在处理桶分片任务执行完毕,而不是对缓存进行更新。
70.如果当前在处理桶分片任务的时间戳小于或等于待处理桶分片任务的时间戳,执行步骤s26:将待处理桶分片任务更新至缓存中,同时将缓存中的计数变量加1。
71.本发明在处理桶分片任务之前,会通过三种途径获取到待处理的桶分片:异步通知、写入特定对象的以前处理失败的桶分片以及扫描方式。其中,异步通知指的是主站点每发生一个数据变化,就会以通知的方式将发生变化的桶分片信息发送至从站点;写入特定对象的以前处理失败的桶分片,指的是同步线程将处理失败的桶分片写入特定对象,下一循环再次读取出来并处理,处理成功则从该对象中擦除;扫描方式指的是同步线程会主动扫描主站点发生的数据变化日志,然后根据日志确定发生数据变化的桶分片。
72.由步骤s26可知,当缓存中的时间戳小于或等于当前待处理桶分片任务的时间戳时,判定缓存中当前在处理桶分片任务已经被处理过了。例如:针对同一个桶分片任务,即相同的桶分片名称,异步通知已经发送过之后,扫描方式再次发送,则会出现当前在处理桶分片任务的时间戳小于待处理桶分片任务的时间戳的情况,此时就可以判定缓存中当前在处理桶分片任务已经通过异步通知被处理过了,执行步骤s26将待处理桶分片任务更新至缓存中,同时将缓存中的计数变量加1。这种方法,能够有效避免重复处理同一个桶分片任务,从而大大提高桶分片的处理效率。
73.继续参见图1可知,根据所获取的桶分片处理请求,更新缓存之后,执行步骤s3:根据对缓存的更新结果,当处理桶分片任务时,利用缓存中的计数变量和待处理桶分片任务的时间戳,对当前在处理桶分片任务的计数变量以及当前在处理桶分片任务的处理时间进行赋值。
74.具体地,步骤s3包括如下过程:
75.s31:当处理桶分片任务时,将缓存的计数变量中的任务计数赋值给当前在处理桶
分片任务的计数变量;
76.s32:初始化当前在处理桶分片任务的处理时间变量;
77.s33:当前在处理桶分片上的对象处理完毕后获取处理时间;
78.s34:将处理时间赋值给处理时间变量并返回。
79.由以上步骤s31-s34可知,当处理桶分片任务时,首先将缓存中的任务计数赋值给当前任务的计数变量count,然后初始化当前任务的处理时间t,携带该初始化时间t继续后续的流程,当当前桶分片上的对象处理结束后获取时间并赋值给变量t并返回。
80.对当前在处理桶分片任务的计数变量以及当前在处理桶分片任务的处理时间进行赋值之后,执行步骤s4:判断当前在处理桶分片任务的计数变量是否不等于缓存中的任务计数,或者当前在处理桶分片任务的处理时间小于缓存中的时间戳。
81.也就是,判断当前在处理桶分片任务是否满足如下条件之一:当前在处理桶分片任务的计数变量不等于缓存中的任务计数,或者,当前在处理桶分片任务的处理时间小于缓存中的时间戳。
82.如果当前在处理桶分片任务的计数变量不等于缓存中的任务计数,或者,当前在处理桶分片任务的处理时间小于缓存中的时间戳,执行步骤s5:判定缓存中有新的待处理桶分片任务。
83.重新返回步骤s2:根据所获取的任一桶分片的处理请求,更新缓存,直到任一桶分片的所有待处理桶分片任务完成。
84.如果当前在处理桶分片任务的计数变量等于缓存中的任务计数,或者,当前在处理桶分片任务的处理时间大于或等于缓存中的时间戳,执行步骤s6:判定缓存中没有新的待处理桶分片任务。
85.由以上步骤s4-s6可知,若当前正在处理任务的计数变量count不等于缓存中的任务计数,说明在之前处理任务期间又有新的待处理任务到来;当前处理任务的时间t小于缓存中的任务时间戳,说明在之前处理任务之后,该桶分片上又有新的数据变化。
86.以上步骤s4-s6,可以利用桶分片处理协程循环对当前桶分片进行对象同步任务处理。本实施例中协程是比线程更小的一种执行单元,可认为是轻量级的线程,它运行于线程之上,协程切换由用户代码控制,可减少多线程之间切换成本高的问题,提高并发性能。
87.进一步地,当缓存中的时间戳为空时,判定当前在处理桶分片任务是该任一桶分片的第一个待处理桶分片任务。
88.综上所述,本实施例通过对任一桶分片创建缓存,将来自不同途径的同一个桶分片的待处理任务实时更新至缓存中,然后让桶分片处理协程根据缓存内容,循环对当前桶分片进行对象同步任务处理。
89.实施例二
90.在图1所示实施例的基础上参见图2,图2为本技术实施例所提供的一种基于桶分片的数据同步处理系统的结构示意图。由图2可知,本实施例中基于桶分片的数据同步处理系统,主要包括:缓存创建模块、缓存更新模块、赋值模块和更新判断模块。
91.其中,缓存创建模块,用于对任一桶分片创建缓存,缓存用于存放任一桶分片的信息,信息包括:桶分片名称、任一桶分片上所有待处理桶分片任务的时间戳,以及用于进行桶分片任务计数的计数变量;缓存更新模块,用于根据所获取的桶分片处理请求,更新缓
存;赋值模块,用于根据对缓存的更新结果,当处理桶分片任务时,利用缓存中的计数变量和待处理桶分片任务的时间戳,对当前在处理桶分片任务的计数变量以及当前在处理桶分片任务的处理时间进行赋值;更新判断模块,用于判断当前在处理桶分片任务的计数变量是否不等于缓存中的任务计数,或者当前在处理桶分片任务的处理时间小于缓存中的时间戳,如果是,判定缓存中有新的待处理桶分片任务,重新启动缓存更新模块,直到任一桶分片的所有待处理桶分片任务完成,如果否,判定缓存中没有新的待处理桶分片任务,不启动缓存更新模块。
92.进一步地,缓存更新模块包括:第一判断单元、第一更新单元、处理单元、第二判断单元、第二更新单元。
93.其中,第一判断单元,用于根据所获取的桶分片处理请求,判断缓存中是否存在当前在处理桶分片任务;第一更新单元,用于当缓存中不存在当前在处理桶分片任务时,将与桶分片处理请求相对应的待处理桶分片任务加入缓存,同时将缓存中的计数变量加1;处理单元,用于将与桶分片处理请求相对应的待处理桶分片任务加入缓存之后,直接处理与任一桶分片的处理请求相对应的待处理桶分片任务;第二判断单元,用于当缓存中存在当前在处理桶分片任务时,判断缓存中当前在处理桶分片任务的时间戳是否大于待处理桶分片任务的时间戳;第二更新单元,用于当前在处理桶分片任务的时间戳小于待处理桶分片任务的时间戳时,将待处理桶分片任务更新至缓存中,同时将缓存中的计数变量加1,否则,不对缓存进行更新。
94.赋值模块包括:第一赋值单元、初始化单元、处理时间获取单元和第二赋值单元。其中,第一赋值单元,用于当处理桶分片任务时,将缓存的计数变量中的任务计数赋值给当前在处理桶分片任务的计数变量;初始化单元,用于初始化当前在处理桶分片任务的处理时间变量;处理时间获取单元,用于当前在处理桶分片上的对象处理完毕后获取处理时间;第二赋值单元,用于将处理时间赋值给处理时间变量并返回。
95.实施例三
96.本技术还提供一种终端,该终端包括:处理器以及与处理器通信连接的存储器,其中,存储器中存储有可被处理器执行的指令,指令被处理器执行,以使处理器能够执行如上基于桶分片的数据同步处理方法。
97.处理器所执行的基于桶分片的数据同步处理方法如下:
98.1)对任一桶分片创建缓存,缓存用于存放任一桶分片的信息,信息包括:桶分片名称、任一桶分片上所有待处理桶分片任务的时间戳,以及用于进行桶分片任务计数的计数变量。
99.2)根据所获取的桶分片处理请求,更新缓存。
100.3)根据对缓存的更新结果,当处理桶分片任务时,利用缓存中的计数变量和待处理桶分片任务的时间戳,对当前在处理桶分片任务的计数变量以及当前在处理桶分片任务的处理时间进行赋值。
101.4)判断当前在处理桶分片任务的计数变量是否不等于缓存中的任务计数,或者当前在处理桶分片任务的处理时间小于缓存中的时间戳。
102.5)如果当前在处理桶分片任务的计数变量不等于缓存中的任务计数,或者,当前在处理桶分片任务的处理时间小于缓存中的时间戳,判定缓存中有新的待处理桶分片任
务。
103.6)然后,重新返回步骤2)根据所获取的任一桶分片的处理请求,更新缓存,直到任一桶分片的所有待处理桶分片任务完成。
104.7)如果当前在处理桶分片任务的计数变量等于缓存中的任务计数,或者,当前在处理桶分片任务的处理时间大于或等于缓存中的时间戳,判定缓存中没有新的待处理桶分片任务。
105.以上方法的具体执行步骤和原理,可以参见图1所示的实施例一和图2所示的实施例二,在此不再赘述。
106.以上所述仅是本技术的具体实施方式,使本领域技术人员能够理解或实现本技术。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献