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

数据处理方法及装置与流程

2022-05-21 08:26:37 来源:中国专利 TAG:


1.本说明书实施例涉及计算机技术领域,特别涉及一种数据处理方法。


背景技术:

2.随着云计算的普及,越来越多的用户和企业选择将数据存储在云上。对于一些重要的数据,用户希望数据能够同时存储在云服务商的不同区域的数据中心,以达到容灾、提升数据可用性和安全性的目的,例如当云服务商某一个区域的数据中心由于电力、天气、机房设备等原因出现故障或者损毁时,用户能将数据访问切换到该云服务商的其他区域的数据中心,以恢复数据服务。
3.目前,具备跨区域复制功能的对象存储服务提供了将不同区域的数据中心或者不同机房集群间的数据异步复制的能力,它会将对象的创建、更新和删除等操作从源存储空间异步复制到不同区域的目标存储空间。当源端(源存储空间)出现故障时,用户可切换读写到对端集群(目标存储空间)恢复服务。
4.由于是异步复制,切换后对端可能会“丢失”少部分源端集群还未复制过来的数据。但是,很多传统企业用户(比如金融类用户),对于数据的一致性有强需求,要求在容灾切换事,不能有数据“丢失”或者不一致的情况出现。


技术实现要素:

5.有鉴于此,本说明书施例提供了一种数据处理方法。本说明书一个或者多个实施例同时涉及一种数据处理装置,一种计算设备,一种计算机可读存储介质,一种计算机程序,以解决现有技术中存在的技术缺陷。
6.根据本说明书实施例的第一方面,提供了一种数据处理方法,包括:
7.响应于数据写入请求,将目标数据写入存储端的目标对象,其中,所述存储端包括主存储端和备份存储端;
8.确定所述目标对象的初始对象元数据,并为所述初始对象元数据添加数据锁;
9.向所述存储端发送针对所述目标数据的预提交请求;
10.在接收到所述存储端返回的预提交元数据以及预提交成功指令的情况下,向所述存储端发送针对所述目标数据的提交请求,其中,所述预提交元数据为添加当前版本号的所述目标数据的元数据,且所述当前版本号为所述存储端获取;
11.在接收到所述存储端返回的提交成功指令的情况下,确定所述目标数据写入成功。
12.根据本说明书实施例的第二方面,提供了一种数据处理装置,包括:
13.写入模块,被配置为响应于数据写入请求,将目标数据写入存储端的目标对象,其中,所述存储端包括主存储端和备份存储端;
14.加锁模块,被配置为确定所述目标对象的初始对象元数据,并为所述初始对象元数据添加数据锁;
15.第一请求发送模块,被配置为向所述存储端发送针对所述目标数据的预提交请求;
16.第二请求发送模块,被配置为在接收到所述存储端返回的预提交元数据以及预提交成功指令的情况下,向所述存储端发送针对所述目标数据的提交请求,其中,所述预提交元数据为添加当前版本号的所述目标数据的元数据,且所述当前版本号为所述存储端获取;
17.数据写入模块,被配置为在接收到所述存储端返回的提交成功指令的情况下,确定所述目标数据写入成功。
18.根据本说明书实施例的第三方面,提供了一种计算设备,包括:
19.存储器和处理器;
20.所述存储器用于存储计算机可执行指令,所述处理器用于执行所述计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。
21.根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。
22.根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据处理方法的步骤。
23.本说明书一个实施例实现了一种数据处理方法及装置,其中,所述数据处理方法包括响应于数据写入请求,将目标数据写入存储端的目标对象,其中,所述存储端包括主存储端和备份存储端;确定所述目标对象的初始对象元数据,并为所述初始对象元数据添加数据锁;向所述存储端发送针对所述目标数据的预提交请求;在接收到所述存储端返回的预提交元数据以及预提交成功指令的情况下,向所述存储端发送针对所述目标数据的提交请求,其中,所述预提交元数据为添加当前版本号的所述目标数据的元数据,且所述当前版本号为所述存储端获取;在接收到所述存储端返回的提交成功指令的情况下,确定所述目标数据写入成功。
24.具体的,所述数据处理方法采用将待写入数据并发写入主存储端和备份存储端,确保任意时刻待写入数据可以同时写入主存储端和备份存储端,解决了异步复制带来的数据短期不一致的问题,并且通过采用预提交和提交两阶段提交的方式,确保在一端提交成功而另一端提交失败的情况下,可以利用预提交的预提交元数据作为重做日志来进行数据恢复,以保证主存储端和备份存储端的数据在读取时的一致性。
附图说明
25.图1是本说明书一个实施例提供的一种数据处理方法的具体应用场景示意图;
26.图2是本说明书一个实施例提供的一种数据处理方法的流程图;
27.图3是本说明书一个实施例提供的一种数据处理方法的处理过程流程图;
28.图4是本说明书一个实施例提供的一种数据处理装置的结构示意图;
29.图5是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
30.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能
够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
31.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
32.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
33.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
34.异步复制:将数据从源端存储空间复制到目标存储空间中,目标存储空间的数据是源端存储空间的精确副本,它们具有相同的object名、版本信息、元数据以及内容等;数据复制到对端(目标存储空间)不是实时的,和源端存储空间有一定时间间隔。
35.同步复制:和异步复制类似,可以将数据从源端存储空间复制到目标存储空间中,但是数据复制是实时的,源端数据写入成功后,数据即在对端可见。
36.pre-commit:预提交,指数据写入后,预提交记录,但是不直接对用户可见。
37.commit:提交,指数据写入后,持久化到存储系统并对用户可见。
38.原子写:compare and swap,cas,即比较并交换,用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题;该操作通过将内存中的值与指定数据进行比较,当数值一样时,将内存中的数据替换为新的值。
39.object meta:对象元数据;request body:请求体;bucket:桶,存储空间;versionid:版本号;redo log:重做日志;failovere:故障转移;current:当前;redo:重做。
40.在本说明书中,提供了一种数据处理方法,本说明书同时涉及一种数据处理装置,一种计算设备,一种计算机可读存储介质以及一种计算机程序,在下面的实施例中逐一进行详细说明。
41.参见图1,图1示出了根据本说明书一个实施例提供的一种数据处理方法的具体应用场景示意图。
42.图1中包括对象存储服务平台102、主存储端104、备份存储端106,其中,主存储端104包括由多个存储空间构成的存储集群,备份存储端106包括由多个存储空间构成的存储集群。
43.具体的,对象存储服务平台102接收到用户的数据写请求后,检查主存储端104和备份存储端106的待写入目标数据的目标对象的初始对象元数据是否存在数据锁,若没有数据锁或者数据锁已经过期,说明该目标对象没有进行其他数据操作,则可以流式读取用户写入的目标数据,并将读取的目标数据并发写入主存储端104以及备份存储端106,直至目标数据读取结束。
44.在所有的目标数据均已并发写入主存储端104以及备份存储端106之后,对象存储服务平台102分别为主存储端104以及备份存储端106的目标对象的初始对象元数据添加数据锁,具体添加数据锁的操作可以理解为在目标对象的初始对象元数据中增加锁标记。
45.在主存储端104和备份存储端106的目标对象的初始对象元数据都加锁成功后,对象存储服务平台102并发主存储端104和备份存储端106针对目标数据的预提交,即对象存储服务平台102向主存储端104和备份存储端106发送针对目标数据的预提交请求。
46.对象存储服务平台102在接收到主存储端104和备份存储端106返回的预提交成功指令的情况下,再次向主存储端104和备份存储端106并发针对目标数据的提交请求,在接收到主存储端104针对该目标数据返回的提交成功指令的情况下,确定该目标数据写入主存储端104写入成功,此时异步删除主存储端104预提交时返回预提交元数据,其中,预提交元数据可以理解为添加有主存储端104获取的当前版本号的目标数据的元数据;同时,释放主存储端104的目标对象的初始对象元数据的数据锁。
47.在接收到备份存储端106针对该目标数据返回的提交成功指令的情况下,确定该目标数据写入备份存储端106写入成功,此时异步删除备份存储端106预提交时返回预提交元数据,其中,预提交元数据可以理解为添加有主存储端104获取的当前版本号的目标数据的元数据;同时,释放备份存储端106的目标对象的初始对象元数据的数据锁。
48.本说明书实施例提供的数据处理方法,通过将目标数据同步写入主存储端104和备份存储端106的方式,保证目标数据在主存储端104和备份存储端106的同步写入,并且通过预提交以及提交两阶段,保证某一端的数据写入出现故障转移的情况下,可以根据另一端已经提交成功的目标数据所在的目标对象的对象元数据的版本号、与其预提交元数据中的版本号的一致关系,通过其预提交元数据恢复目标数据,以实现将该目标数据成功提交,保证两端目标数据在被读取时的一致性。
49.参见图2,图2示出了根据本说明书一个实施例提供的一种数据处理方法的流程图,具体包括以下步骤。
50.步骤202:响应于数据写入请求,将目标数据写入存储端的目标对象,其中,所述存储端包括主存储端和备份存储端。
51.其中,主存储端可以理解为上述实施例的源端,备份存储端可以理解为上述实施例的对端;主存储端包括由若干个存储空间形成的存储集群,备份存储端包括由若干个存储空间形成的存储集群。
52.以上述实施例的对象存储服务平台为执行主体,响应于数据写入请求,将目标数据写入存储端的目标对象,可以理解为,对象存储服务平台响应于数据写入请求,将目标数据写入主存储端和备份存储端。
53.具体的,所述响应于数据写入请求,将目标数据写入存储端的目标对象,包括:
54.接收第一用户发送的数据写入请求;
55.根据所述数据写入请求通过预设读取方式获取所述用户写入的目标数据;
56.将所述目标数据分别写入主存储端和备份存储端的目标对象。
57.其中,第一用户可以为任意类型的用户;预设读取方式可以根据实际应用进行设置,本说明书对此不作任何限定;例如预设读取方式可为流式读取等。
58.具体实施时,以预设读取方式为流式读取为例,对象存储服务平台接收第一用户
发送的数据写入请求,流式读取第一用户写入的目标数据,并将读取的目标数据并发写入主存储端和备份存储端。
59.本说明书实施例中,对象存储服务平台在接收第一用户发送的数据写入请求之后,通过流式读取的方式读取第一用户写入的目标数据,然后将流式读取的目标数据同步写入主存储端和备份存储端,通过此种边写边读的流式读取方式避免数据堆积、减轻网络负担;同时通过将读取的目标数据并发写入主存储端和备份存储端,保证主存储端和备份存储端写入数据的一致性。
60.此外,为了避免在向主存储端和备份存储端的目标对象进行目标数据存储的情况下,有其他数据操作对其进行数据处理,造成数据混乱的情况发生,对象存储服务平台在获取第一用户写入的目标数据之前,会分别检查主存储端和备份存储端的目标对象的初始对象元数据是不是存在数据锁,若不存在,则进行下一步的数据获取和写入流程,以保证同一时刻同一目标对象只能进行一个数据处理操作。具体实现方式如下所述:
61.所述根据所述数据写入请求通过预设读取方式获取所述用户写入的目标数据,包括:
62.确定所述主存储端的目标对象和所述备份存储端的目标对象;
63.在确定两端目标对象的初始对象元数据均不存在数据锁的情况下,根据所述数据写入请求流式获取所述用户写入的目标数据。
64.其中,两端目标对象的初始对象元数据可以理解为主存储端的目标对象的初始对象元数据、以及备份存储端的目标对象的初始对象元数据。
65.具体的,对象存储服务平台在接收第一用户发送的数据写入请求后,会同时检查主存储端和备份存储端的目标对象的初始对象元数据是不是存在数据锁,若主存储端和备份存储端的目标对象的初始对象元数据均不存在数据锁的情况下,可以说明主存储端和备份存储端的目标对象当前不存在其他数据处理操作;此时,对象存储服务平台才会进入针对目标数据的流式读取流程,流式读取第一用户写入的目标数据。
66.并且,在主存储端和备份存储端的目标对象的初始对象元数据虽然存在数据锁,但是该数据锁已经失效的情况下,也可以直接进行下一步的数据获取和写入流程,以保证同一时刻同一目标对象只能进行一个数据处理操作。具体实现方式如下所述:
67.所述根据所述数据写入请求通过预设读取方式获取所述用户写入的目标数据,包括:
68.确定所述主存储端的目标对象和所述备份存储端的目标对象;
69.在确定两端目标对象的初始对象元数据的数据锁失效的情况下,根据所述数据写入请求流式获取所述用户写入的目标数据。
70.其中,数据锁失效可以理解为数据锁过期,例如设置数据锁时,为数据锁配置5分钟的生命周期,在该数据锁的生命周期结束之后,表示该数据锁失效。
71.具体的,对象存储服务平台在接收第一用户发送的数据写入请求后,会同时检查主存储端和备份存储端的目标对象的初始对象元数据是不是存在数据锁,若主存储端和备份存储端的目标对象的初始对象元数据存在数据锁,但是数据锁均过期的情况下,也可以说明主存储端和备份存储端的目标对象当前不存在其他数据处理操作;此时,对象存储服务平台才会进入针对目标数据的流式读取流程,流式读取第一用户写入的目标数据。
72.步骤204:确定所述目标对象的初始对象元数据,并为所述初始对象元数据添加数据锁。
73.其中,数据锁可以理解为一个锁标记;而添加数据锁的操作可以理解为更新存储端的目标对象的旧object meta(即初始对象元数据),在存储端的目标对象的旧object meta中增加数据锁标记。
74.具体的,所述确定所述目标对象的初始对象元数据,并为所述初始对象元数据添加数据锁,包括:
75.分别确定所述主存储端和所述备份存储端的目标对象的初始对象元数据;
76.在确定所述目标数据写入所述主存储端和所述备份存储端的目标对象结束的情况下,分别为所述主存储端和所述备份存储端的目标对象的初始对象元数据添加数据锁。
77.具体的,对象存储服务平台确定主存储端的目标对象的初始对象元数据,在确定目标数据全部写入主存储端的目标对象的情况下,为主存储端的目标对象的初始对象元数据添加数据锁;同时,对象存储服务平台确定备份存储端的目标对象的初始对象元数据,在确定目标数据全部写入备份存储端的目标对象的情况下,为备份存储端的目标对象的初始对象元数据添加数据锁,通过此种方式为两端的目标对象的初始元数据添加数据锁,以保证后续在对两端进行目标数据提交时,目标对象不会再被其他数据处理操作占用,保证目标数据处理的稳定性。
78.步骤206:向所述存储端发送针对所述目标数据的预提交请求。
79.具体的,在存储端包括主存储端和备份存储端的情况下,向存储端发送针对目标数据的预提交请求可以理解为,对象存储服务平台向主存储端和备份存储端并发预提交事务。具体实现方式如下所述:
80.所述向所述存储端发送针对所述目标数据的预提交请求,包括:
81.分别向所述主存储端以及所述备份存储端发送针对所述待写入数据的预提交请求。
82.其中,为了保证主存储端和备份存储端存储目标数据的一致性,对象存储服务平台会并发主存储端和备份存储端的预提交,使得主存储端和备份存储端可以同时针对该目标数据进行预提交。
83.步骤208:在接收到所述存储端返回的预提交元数据以及预提交成功指令的情况下,向所述存储端发送针对所述目标数据的提交请求。
84.其中,所述预提交元数据为添加当前版本号的所述目标数据的元数据,且所述当前版本号为所述存储端获取。
85.具体的,所述在接收到所述存储端返回的预提交元数据以及预提交成功指令的情况下,向所述存储端发送针对所述目标数据的提交请求,包括:
86.在接收到所述主存储端响应于所述预提交请求返回的预提交元数据、以及针对所述目标数据的预提交成功指令,以及
87.接收到所述备份存储端响应于所述预提交请求返回的预提交元数据、以及针对所述目标数据的预提交成功指令的情况下,向所述存储端发送针对所述目标数据的提交请求。
88.其中,在存储端包括主存储端和备份存储端的情况下,当前版本号为主存储端从
对象存储服务平台获取,并发送至备份存储端。
89.即当前versionid(当前版本号)为源端从对象存储服务平台的版本生成器模块获取;实际应用中,主存储端和备份存储端都可以从对象存储服务平台获取当前versionid,为了保证versionid自增的一致性,所以在主存储端获取该当前versionid的同时,将该当前versionid发送至备份存储端。
90.并且,预提交成功指令为主存储端或者备份存储端将目标数据进行预提交成功后生成。
91.具体实施时,对象存储服务平台向分别向主存储端和备份存储端发送预提交请求,主存储端和备份存储端接收到该预提交请求之后,主存储端从对象存储服务平台获取当前版本号,并将该当前版本号发送至备份存储端。
92.在获取当前版本号之后,主存储端和备份存储端均将该当前版本号添加至目标数据的元数据中,作为预提交元数据;然后将预提交元数据以及针对该目标数据的预提交成功指令返回对象存储服务平台;对象存储服务平台在接收到主存储端和备份存储端返回的预提交元数据以及针对该目标数据的预提交成功指令的情况下,分别向主存储端和备份存储端发送提交请求。
93.其中,主存储端和备份存储端提交至对象存储服务平台的预提交元数据可以作为重做日志,用来在主存储端或者备份存储端发生故障转移时恢复数据,保持主存储端和备份存储端的数据一致性使用。
94.具体的,所述向所述存储端发送针对所述目标数据的提交请求,包括:
95.分别向所述主存储端以及所述备份存储端发送针对所述目标数据的提交请求。
96.本说明书实施例中,对象存储服务平台在将目标数据向主存储端和备份存储端进行同步存储时,增加预提交阶段,并且在主存储端和备份存储端均预提交成功的情况下,再进行目标数据的正式提交流程,以保证在目标数据的正式提交过程中,主存储端和备份存储端任意一端出现宕机或者其他故障造成目标数据提交失败的情况下,可以采用预提交元数据作为重做日志恢复数据,保持主存储端和备份存储端存储的目标数据的一致性。
97.步骤210:在接收到所述存储端返回的提交成功指令的情况下,确定所述目标数据写入成功。
98.具体的,所述在接收到所述存储端响应于所述提交请求返回的、针对所述目标数据的提交成功指令的情况下,确定所述目标数据写入成功,包括:
99.在接收到所述主存储端响应于所述提交请求返回的、针对所述目标数据的提交成功指令的情况下,确定所述目标数据写入成功;和/或
100.在接收到所述备份存储端响应于所述提交请求返回的、针对所述目标数据的提交成功指令的情况下,确定所述目标数据写入成功;
101.其中,所述提交成功指令为所述主存储端或者所述备份存储端,在确定所述初始对象元数据对应的版本号小于等于获取的当前版本号的情况下,将根据所述初始对象元数据以及所述目标对象的元数据生成的更新对象元数据、以及所述目标数据进行成功提交生成。
102.具体实施时,对象存储服务平台在将针对目标数据的提交请求并发至主存储端和备份存储端之后,主存储端和备份存储端均会严格判断其目标对象的初始对象元数据对应
的版本号是否小于等于获取的当前版本号,若是,则根据其目标对象的初始对象元数据和目标对象的元数据,生成该目标对象的更新对象元数据;且将获取的当前版本号作为该更新对象元数据对应的版本号;同时,原子写该更新对象元数据。
103.其中,主存储端和备份存储端针对该更新对象元数据以及目标数据进行提交时,该更新对象元数据中不会存在数据锁,某一端将该更新对象元数据以及目标数据提交成功后,均会向对象存储服务平台发出提交成功指令;而对象存储服务平台在接收到主存储端和备份存储端的提交成功指令后,则会确定该目标数据同步写主存储端和备份存储端写入成功,即同步存储成功。
104.而在某一端针对该目标数据提交成功后,对象存储服务平台则会释放该端的目标对象的初始对象元数据的数据锁,并删除该端预提交至对象存储服务平台的预提交元数据,以使得该目标对象可以继续进行其他数据处理操作。具体实现方式如下所述:
105.所述确定所述目标数据写入成功之后,还包括:
106.删除所述主存储端的预提交元数据,以及释放所述主存储端的目标对象的初始对象元数据的数据锁;和/或
107.删除所述备份存储端的预提交元数据,以及释放所述备份存储端的目标对象的初始对象元数据的数据锁。
108.具体的,对象存储服务平台在接收到某一端针对目标数据的提交成功指令的情况下,均会释放该端的目标对象的初始对象元数据的数据锁,并删除该端预提交至对象存储服务平台的预提交元数据,以使得该目标对象可以继续进行其他数据处理操作。
109.本说明书实施例提供的所述数据处理方法,采用将目标数据并发写入主存储端和备份存储端,确保任意时刻目标数据可以同时写入主存储端和备份存储端,解决了异步复制带来的数据短期不一致的问题,并且通过采用预提交和提交两阶段提交的方式,确保在一端提交成功而另一端提交失败的情况下,可以利用预提交的数据作为重做日志来进行数据恢复,以保证主存储端和备份存储端的数据在读取时的一致性。
110.此外,所述数据处理方法中将目标数据同步写入主存储端和备份存储端之后,在接收其他用户发送的针对该目标对象的数据读取请求的情况下,可以从主存储端和/或备份存储端获取该目标对象的目标数据,并将该目标数据返回至客户端。具体实现方式如下所述:
111.所述方法,还包括:
112.接收第二用户发送的针对所述主存储端或者所述备份存储端中一端的目标对象的数据读取请求;
113.根据所述数据读取请求确定所述一端的目标对象的对象元数据;
114.在确定所述一端的目标对象的对象元数据不存在数据锁的情况下,从所述一端读取所述目标对象的目标数据;
115.将所述目标数据返回至所述第二用户。
116.其中,第一用户和第二用户可以是同一用户,也可以为不同用户;在第一用户和第二用户为同一用户的情况下,先根据上述方式进行数据同步存储,再对同步存储的数据进行读取;在第一用户和第二用户为不同用户的情况下,数据读取就会分为多种情况,例如在数据读取时,数据已经同步存储至主存储端和备份存储端,此时两端的目标对象的对象元
数据均不存在数据锁,由于数据是按照上述数据处理方法中的数据同步存储方式存储至主存储端或者备份存储端的,数据不会存在不一致的情况,那么则可以从主存储端或者备份存储端任意一端快速的读取数据。
117.具体的,主存储端或者备份存储端中的一端,可以理解为主存储端,也可以理解为备份存储端,即在主存储端以及备份存储端两端均不存在数据锁的情况下,即可以从主存储端的目标对象的元数据中读取目标对象的目标数据,也可以从备份存储端中读取目标对象的目标数据。
118.而在数据读取时,数据正在同步存储至主存储端和备份存储端的过程中,此时主存储端和备份存储端的目标对象的对象元数据均已加锁,且数据锁均为过期,则需要等待主存储端和备份存储端的数据同步存储之后,才可以进行数据读取流程。具体实现方式如下所述:
119.所述根据所述数据读取请求确定所述一端的目标对象的对象元数据之后,还包括:
120.在确定所述一端的目标对象的对象元数据存在数据锁,且所述数据锁未失效的情况下,将所述数据读取请求挂起。。
121.又或者在数据读取时,数据正在同步存储至主存储端和备份存储端的过程中,此时主存储端和备份存储端的任意一端已经将目标数据提交成功,目标对象的对象元数据的数据锁已经被释放,而另一端的目标对象的对象元数据的数据锁还存在,但是一端的目标对象的更新对象元数据的版本号与另一端的预提交元数据中的版本号一致,则可以说明数据在同步存储至两端的时候,另一端由于宕机或者网络等故障,使得目标数据丢失。此时,则需要根据另一端的预提交元数据找到丢失的目标数据,并根据上述提交流程再次提交该目标数据,在该目标数据提交成功之后,再从主存储端和/或备份存储端的目标对象中读取目标数据。具体实现方式如下所述:
122.所述根据所述数据读取请求确定所述一端的目标对象的对象元数据之后,还包括:
123.在确定所述一端的目标对象的对象元数据不存在数据锁,且另一端的目标对象的对象元数据存在已失效数据锁的情况下,确定不存在数据锁的一端的对象元数据的版本号、与存在已失效数据锁的另一端的预提交元数据的版本号;
124.在两端的版本号相同的情况下,确定所述另一端的预提交元数据;
125.根据所述另一端的预提交元数据恢复所述另一端的目标数据;
126.在接收到所述另一端针对所述目标数据返回的提交成功指令的情况下,从所述主存储端和/或所述备份存储端读取所述目标对象的目标数据。
127.其中,从主存储端和备份存储端同时读取目标对象的目标数据,可以理解为后续可以根据主存储端和备份存储端读取目标对象的目标数据进行比较,以验证主存储端和备份存储端同步存储的数据的一致性。
128.本说明书实施例提供的数据处理方法,采用主存储端集群和备份存储端集群并发写的流程,确保任意时刻数据同时写入两端集群,解决了异步复制带来的数据短期不一致的问题;通过采用pre-commit和commit两阶段提交的方式,确保在一端提交成功而另一端失败的场景下,可以以pre-commit的数据作为redo log来恢复,使得在数据读取时,根据两
端的目标对象的对象元数据的数据锁的情况,选择合适的方式进行目标数据的读取,保证两端的数据在读取时的一致性。
129.下述结合附图3,以本说明书提供的数据处理方法实现将数据同步存储至源端和对端的应用为例,对所述数据处理方法进行进一步说明。其中,图3示出了本说明书一个实施例提供的一种数据处理方法的处理过程流程图,具体包括以下步骤。
130.具体的,同步复制的数据写入流程如下所述:
131.步骤302:对象存储服务平台接收用户发送的数据写入请求。
132.具体的,该数据写入请求中携带有待写入数据、以及用户想要待写入数据写入的目标对象,如待写入数据的存储空间或者文件名称等。
133.步骤304:对象存储服务平台流式读取用户的待写入数据。
134.具体的,对象存储服务平台在接收用户发送的数据写入请求之后,分别检查源端(如主存储端)和对端(如备份存储端)的目标对象的旧object meta(对象元数据)是否有数据锁,若虽然两端(即源端和对端)存在数据锁,但是该数据锁已经过期、或者两端均不存在数据锁的情况下,对象存储服务平台流式读取用户的待写入数据。
135.其中,数据锁已经过期,可以理解为数据锁在超时一定时间(如5分钟或者10分钟等)之后,会被认为该数据锁已经过期,其他针对该目标对象的数据处理请求(如其他数据写入请求)就可以继续操作该目标对象。设置数据锁过期的目的是为了防止对目标对象的对象元数据加数据锁后,服务器发生宕机或者网络异常等导致数据锁一直没有被释放、一直被锁住的情况发生,保证后续数据操作的正常处理。
136.步骤306:对象存储服务平台将流式读取的待写入数据写入源端的目标对象,直至从用户读取待写入数据结束。
137.步骤308:对象存储服务平台将流式读取的待写入数据写入对端的目标对象,直至从用户读取待写入数据结束。
138.步骤310:对象存储服务平台确定所有的待写入数据写入源端以及对端均结束后,更新源端的目标对象的旧object meta,实现为目标对象的旧object meta添加数据锁。
139.步骤312:对象存储服务平台在更新源端的目标对象的旧object meta,实现为目标对象的旧object meta添加数据锁的同时,并发更新对端的目标对象的旧object meta,实现为目标对象的旧object meta添加数据锁。
140.其中,数据锁可以理解为一个锁标记;具体的,只要两端的待写入数据写入完成后,对象存储服务平台就可以为两端的目标对象的旧object meta添加数据锁,而添加数据锁的操作可以理解为更新两端的目标对象的旧object meta,在两端的目标对象的旧object meta中增加数据锁标记。
141.步骤314:对象存储服务平台接收源端发送的版本号获取请求,根据该版本号获取请求生成一个全局自增的当前versionid(版本号),并将该当前versionid分别发送至源端和对端。
142.其中,当前versionid为源端从对象存储服务平台的版本生成器模块获取;实际应用中,源端和对端都可以从对象存储服务平台获取当前versionid,为了保证versionid自增的一致性,所以在源端获取该当前versionid的同时,将该当前versionid发送至对端。
143.此外,对象存储服务平台给源端和对端的目标对象的旧object meta添加数据锁
meta对应的当前versionid一致,说明源端和对端引用的待写入数据相同;那么当系统恢复后,用户尝试去读取源端的目标对象时,对象存储服务平台就会按照读流程中步骤四的操作,利用源端的pre-commit meta来重做,恢复源端没有commit的待写入数据,以保证读取的两端数据的一致性。
158.同步复制的数据读取流程如下所述:
159.步骤一:对象存储服务平台接收用户发送的数据读取请求。
160.其中,目标对象可以理解为源端和对端的存储空间或者文件名称。
161.步骤二:对象存储服务平台根据该数据读取请求中携带的目标对象,检查源端或对端的该目标对象的初始对象元数据是否存在数据锁,若源端或对端的该目标对象的初始对象元数据不存在数据锁的情况下,则直接读取源端或对端的目标对象的目标数据,并将读取的目标数据返回用户。
162.步骤三:对象存储服务平台检查源端和对端的该目标对象的初始对象元数据存在数据锁,但是数据锁均已经过期时,说明针对待写入数据的写操作流程只进行到了pre-commit阶段就失败了,待写入数据并未commit过,此时,则需要更新两端的旧object meta去除锁信息恢复到原始状态,再读取源端和对端的目标对象的目标数据,并将读取的目标数据返回用户。
163.步骤四:对象存储服务平台检查源端的该目标对象的初始对象元数据存在过期的数据锁、对端的该目标对象的初始对象元数据不存在数据锁,并且对端的新object meta对应的当前versionid、与源端的pre-commit meta对应的当前versionid一致,说明对端和源端进行了数据同步写入,但是源端在进行数据写入的时候出现了故障,待写入数据还没有commit过,那么为了保证本次的数据读取一致性,需要对源端的数据写入进行重做,即利用源端的pre-commit meta来重做,恢复源端没有commit的待写入数据,以保证读取的两端数据的一致性。
164.在源端commit成功后,读取源端和对端的目标对象的目标数据,并进行比对,在两端的目标数据一致的情况下,将读取的目标数据返回用户,保证数据读取的一致性。
165.步骤五:对象存储服务平台检查源端和对端的该目标对象存在数据锁,并且数据锁均未经过期时,则判断这个object可能被某个请求持有中,则hang住等待并重试。
166.如果该目标对象没有被其他请求持有中,则可能发生了和上述数据锁过期的情况,此时参考上述锁过期的具体操作对数据进行整理后,进行数据读取即可,保证读取数据的一致性。
167.本说明书实施例提供的数据处理方法,采用主存储端集群和备份存储端集群并发写的流程,确保任意时刻数据同时写入两端集群,解决了异步复制带来的数据短期不一致的问题;通过采用pre-commit和commit两阶段提交的方式,确保在一端提交成功而另一端失败的场景下,可以以pre-commit的数据作为redo log来恢复,保证两端的数据在读取时的一致性。
168.与上述方法实施例相对应,本说明书还提供了数据处理装置实施例,图4示出了本说明书一个实施例提供的一种数据处理装置的结构示意图。如图4所示,该装置包括:
169.写入模块402,被配置为响应于数据写入请求,将目标数据写入存储端的目标对象,其中,所述存储端包括主存储端和备份存储端;
170.加锁模块404,被配置为确定所述目标对象的初始对象元数据,并为所述初始对象元数据添加数据锁;
171.第一请求发送模块406,被配置为向所述存储端发送针对所述目标数据的预提交请求;
172.第二请求发送模块408,被配置为在接收到所述存储端返回的预提交元数据以及预提交成功指令的情况下,向所述存储端发送针对所述目标数据的提交请求,其中,所述预提交元数据为添加当前版本号的所述目标数据的元数据,且所述当前版本号为所述存储端获取;
173.数据写入模块410,被配置为在接收到所述存储端返回的提交成功指令的情况下,确定所述目标数据写入成功。
174.可选地,所述写入模块402,进一步被配置为:
175.接收第一用户发送的数据写入请求;
176.根据所述数据写入请求通过预设读取方式获取所述用户写入的目标数据;
177.将所述目标数据分别写入主存储端和备份存储端的目标对象。
178.可选地,所述写入模块402,进一步被配置为:
179.确定所述主存储端的目标对象和所述备份存储端的目标对象;
180.在确定两端目标对象的初始对象元数据均不存在数据锁的情况下,根据所述数据写入请求流式获取所述用户写入的目标数据。
181.可选地,所述写入模块402,进一步被配置为:
182.确定所述主存储端的目标对象和所述备份存储端的目标对象;
183.在确定两端目标对象的初始对象元数据的数据锁失效的情况下,根据所述数据写入请求流式获取所述用户写入的目标数据。
184.可选地,所述加锁模块404,进一步被配置为:
185.分别确定所述主存储端和所述备份存储端的目标对象的初始对象元数据;
186.在确定所述目标数据写入所述主存储端和所述备份存储端的目标对象结束的情况下,分别为所述主存储端和所述备份存储端的目标对象的初始对象元数据添加数据锁。
187.可选地,所述第一请求发送模块406,进一步被配置为:
188.分别向所述主存储端以及所述备份存储端发送针对所述目标数据的预提交请求;
189.相应地,所述第二请求发送模块408,进一步被配置为:
190.在接收到所述主存储端响应于所述预提交请求返回的预提交元数据、以及针对所述目标数据的预提交成功指令,以及
191.接收到所述备份存储端响应于所述预提交请求返回的预提交元数据、以及针对所述目标数据的预提交成功指令的情况下,向所述存储端发送针对所述目标数据的提交请求。
192.可选地,所述第二请求发送模块408,进一步被配置为:
193.分别向所述主存储端以及所述备份存储端发送针对所述目标数据的提交请求;
194.相应地,所述数据写入模块410,进一步被配置为:
195.在接收到所述主存储端响应于所述提交请求返回的、针对所述目标数据的提交成功指令的情况下,确定所述目标数据写入成功;和/或
196.在接收到所述备份存储端响应于所述提交请求返回的、针对所述目标数据的提交成功指令的情况下,确定所述目标数据写入成功;
197.其中,所述提交成功指令为所述主存储端或者所述备份存储端,在确定所述初始对象元数据对应的版本号小于等于获取的当前版本号的情况下,将根据所述初始对象元数据以及所述目标对象的元数据生成的更新对象元数据、以及所述目标数据进行成功提交生成。
198.可选地,所述装置,还包括:
199.后处理模块,被配置为:
200.删除所述主存储端的预提交元数据,以及释放所述主存储端的目标对象的初始对象元数据的数据锁;和/或
201.删除所述备份存储端的预提交元数据,以及释放所述备份存储端的目标对象的初始对象元数据的数据锁。
202.可选地,所述装置,还包括:
203.第一数据读取模块,被配置为:
204.接收第二用户发送的针对所述主存储端或者所述备份存储端中一端的目标对象的数据读取请求;
205.根据所述数据读取请求确定所述一端的目标对象的对象元数据;
206.在确定所述一端的目标对象的对象元数据不存在数据锁的情况下,从所述一端读取所述目标对象的目标数据;
207.将所述目标数据返回至所述第二用户。
208.可选地,所述装置,还包括:
209.第二数据读取模块,被配置为:
210.在确定所述一端的目标对象的对象元数据存在数据锁,且所述数据锁未失效的情况下,将所述数据读取请求挂起。
211.可选地,所述装置,还包括:
212.第三数据读取模块,被配置为:
213.在确定所述一端的目标对象的对象元数据不存在数据锁,且另一端的目标对象的对象元数据存在已失效数据锁的情况下,确定不存在数据锁的一端的对象元数据的版本号、与存在已失效数据锁的另一端的预提交元数据的版本号;
214.在两端的版本号相同的情况下,确定所述另一端的预提交元数据;
215.根据所述另一端的预提交元数据恢复所述另一端的目标数据;
216.在接收到所述另一端针对所述目标数据返回的提交成功指令的情况下,从所述主存储端和/或所述备份存储端读取所述目标对象的目标数据。
217.本说明书实施例提供的所述数据处理装置,采用将待写入数据并发写入主存储端和备份存储端,确保任意时刻待写入数据可以同时写入主存储端和备份存储端,解决了异步复制带来的数据短期不一致的问题,并且通过采用预提交和提交两阶段提交的方式,确保在一端提交成功而另一端提交失败的情况下,可以利用预提交的数据作为重做日志来进行数据恢复,以保证主存储端和备份存储端的数据在读取时的一致性。
218.上述为本实施例的一种数据处理装置的示意性方案。需要说明的是,该数据处理
装置的技术方案与上述的数据处理方法的技术方案属于同一构思,数据处理装置的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
219.图5示出了根据本说明书一个实施例提供的一种计算设备500的结构框图。该计算设备500的部件包括但不限于存储器510和处理器520。处理器520与存储器510通过总线530相连接,数据库550用于保存数据。
220.计算设备500还包括接入设备540,接入设备540使得计算设备500能够经由一个或多个网络560通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备540可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
221.在本说明书的一个实施例中,计算设备500的上述部件以及图5中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图5所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
222.计算设备500可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备500还可以是移动式或静止式的服务器。
223.其中,处理器520用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。
224.上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的数据处理方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
225.本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述数据处理方法的步骤。
226.上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的数据处理方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
227.本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述数据处理方法的步骤。
228.上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的数据处理方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述数据处理方法的技术方案的描述。
229.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可
以的或者可能是有利的。
230.所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
231.需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
232.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
233.以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
再多了解一些

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

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

相关文献