CN111651419B - 数据存储方法、装置及存储介质 - Google Patents

数据存储方法、装置及存储介质 Download PDF

Info

Publication number
CN111651419B
CN111651419B CN202010504954.1A CN202010504954A CN111651419B CN 111651419 B CN111651419 B CN 111651419B CN 202010504954 A CN202010504954 A CN 202010504954A CN 111651419 B CN111651419 B CN 111651419B
Authority
CN
China
Prior art keywords
data
write request
size
target object
current
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.)
Active
Application number
CN202010504954.1A
Other languages
English (en)
Other versions
CN111651419A (zh
Inventor
丁智勇
黄华东
洪溪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Hikvision System Technology Co Ltd
Original Assignee
Hangzhou Hikvision System Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Hikvision System Technology Co Ltd filed Critical Hangzhou Hikvision System Technology Co Ltd
Priority to CN202010504954.1A priority Critical patent/CN111651419B/zh
Publication of CN111651419A publication Critical patent/CN111651419A/zh
Application granted granted Critical
Publication of CN111651419B publication Critical patent/CN111651419B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/176Support for shared access to files; File sharing support
    • G06F16/1767Concurrency control, e.g. optimistic or pessimistic approaches
    • G06F16/1774Locking methods, e.g. locking methods for file systems allowing shared and concurrent access to files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种数据存储方法、装置及存储介质,属于数据存储领域。所述方法包括:接收存储节点在接收到目标对象的第一追加写请求后触发的预占请求,基于预占请求确定已存储的目标对象的当前已上传大小和当前预占大小,当前预占大小为最近一次处理的第二追加写请求响应完成后的预估已上传大小;若当前已上传大小和当前预占大小不相等,则向存储节点发送加锁通知,以指示存储节点目标对象当前存在正在处理的追加写请求,不允许对第一追加写请求进行响应。如此,可以通过对数据存储系统进行加锁,来限制同一时刻同一数据对象只能有一个追加写请求能被处理,避免了并行处理追加写请求的情况发生以及因追加写请求的并行处理导致的数据错乱。

Description

数据存储方法、装置及存储介质
技术领域
本申请涉及数据存储领域,特别涉及一种数据存储方法、装置及存储介质。
背景技术
在用户节点向数据存储系统上传数据量较大的数据对象时,由于网络环境或者业务场景等的限制,可能需要分多次才能完成对一个数据对象的完整写入,也即是,需要将数据对象拆分后分多次上传,每次上传部分数据。
相关技术中,用户节点在向数据存储系统上传目标对象的过程中,在已经上传了目标对象的部分数据的情况下,会继续向数据存储系统发送目标对象的追加写请求,该追加写请求用于请求追加上传目标对象的部分数据。在对目标对象进行追加写时,用户节点可能会在极短时间内向数据存储系统连续发送多个追加写请求,这样,数据存储系统也就会在极短时间内接收到多个追加写请求,并需要并行处理这多个追加写请求。其中,目标对象为需要上传的数据对象,可以为图片或视频等数据文件。
但是,追加写请求的并行处理可能会导致数据错乱。比如,假设目标对象的数据量为10MB,在已经上传了1MB后,若用户节点在极短时间内向数据存储系统的第一存储节点和第二存储节点分别发送了第一追加写请求和第二追加写请求,第一追加写请求用于请求在相对于目标对象的数据起始位置偏移1MB的位置处追加上传2MB数据,第二追加写请求用于请求在相对于目标对象的数据起始位置偏移1MB的位置处追加上传3MB数据,则第一存储节点在目标对象偏移1MB的位置处写入2MB数据的同时,第二存储节点也会在目标对象偏移1MB的位置处写入3MB,这样可能会导致目标对象数据写入错乱,无法得到完整的目标对象。
发明内容
本申请实施例提供了一种数据存储方法、装置及存储介质,可以用于解决相关技术中存在的追加写请求的并行处理可能会导致数据错乱的问题。所述技术方案如下:
一方面,提供了一种数据存储方法,所述方法包括:
接收存储节点发送的预占请求,所述预占请求是由所述存储节点在接收到针对目标对象的第一追加写请求后触发的;
基于所述预占请求,确定已存储的所述目标对象的当前已上传大小和当前预占大小,所述当前已上传大小为当前已上传完成的部分数据的数据大小,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为所述存储节点所在的数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
若所述当前已上传大小和所述当前预占大小不相等,则向所述存储节点发送加锁通知,所述加锁通知用于指示所述目标对象当前存在正在处理的追加写请求,不允许对所述第一追加写请求进行响应。
可选地,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述确定已存储的所述目标对象的当前已上传大小和当前预占大小之后,还包括:
若所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与已存储的第二数据偏移相等,则确定第一预占大小;
其中,所述第一预占大小为所述第一追加写请求响应完成后所述目标对象的预估已上传大小,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
基于所述第一预占大小,对所述当前预占大小进行更新,以及向所述存储节点发送预占成功通知,所述预占成功通知用于指示对所述当前预占大小更新成功,允许对所述第一追加写请求进行响应。
可选地,所述向所述存储节点发送预占成功通知之后,还包括:
接收所述存储节点发送的第三数据偏移,所述第三数据偏移为在对所述第一追加写请求响应完成后确定的所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移;
基于所述第三数据偏移,对所述第二数据偏移进行更新。
可选地,所述确定已存储的所述目标对象的当前已上传大小和当前预占大小之后,还包括:
若所述当前已上传大小和所述当前预占大小相等,但所述第一数据偏移与已存储的第二数据偏移不相等,则向所述存储节点发送错误请求通知,所述错误请求通知用于指示所述第一追加写请求为错误请求,不允许对所述第一追加写请求进行响应,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移。
可选地,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述向所述存储节点发送加锁通知之后,还包括:
在所述第二追加写请求的响应完成后,基于所述第二追加写请求的响应结果,对已存储的所述当前已上传大小和第二数据偏移进行更新,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
若检测到更新后的所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与更新后的所述第二数据偏移相等,则向所述存储节点发送解锁通知,所述解锁通知用于指示所述目标对象当前不存在正在处理的追加写请求,允许对所述第一追加写请求进行响应。
另一方面,提供了一种数据存储方法,所述方法包括:
接收用户节点发送的针对目标对象的第一追加写请求;
基于所述第一追加写请求,向管理节点发送预占请求,所述预占请求用于请求对已存储的所述目标对象的当前预占大小进行更新,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为当前数据存储系统在所述第一追加写请求之前接收的针对所述目标对象的追加写请求;
若接收到所述管理节点发送的加锁通知,则基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应,所述加锁通知是由所述管理节点在确定已存储的当前已上传大小和所述当前预占大小不相等时触发,所述当前已上传大小为所述目标对象当前已上传完成的部分数据的数据大小。
可选地,所述向管理节点发送预占请求之后,还包括:
若接收到所述管理节点发送的预占成功通知,则基于所述预占成功通知确定所述管理节点基于所述预占请求对已存储的所述当前预占大小更新成功,并对所述第一追加写请求进行响应。
可选地,所述对所述第一追加写请求进行响应之后,还包括:
在对所述第一追加写请求响应完成后,确定所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移,得到第三数据偏移;
向所述管理节点发送所述第三数据偏移。
可选地,所述向管理节点发送预占请求之后,还包括:
若接收到所述管理节点发送的错误请求通知,则基于所述错误请求通知确定所述第一追加写请求为错误请求,不对所述第一追加写请求进行响应。
可选地,所述基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应之后,还包括:
若接收到所述管理节点发送的解锁通知,则基于所述解锁通知确定所述目标对象当前不存在正在处理的追加写请求,并对所述第一追加写请求进行响应。
另一方面,提供了一种数据存储装置,所述装置包括:
接收模块,用于接收存储节点发送的预占请求,所述预占请求是由所述存储节点在接收到针对目标对象的第一追加写请求后触发的;
第一确定模块,用于基于所述预占请求,确定已存储的所述目标对象的当前已上传大小和当前预占大小,所述当前已上传大小为当前已上传完成的部分数据的数据大小,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为所述存储节点所在的数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
发送模块,用于若所述当前已上传大小和所述当前预占大小不相等,则向所述存储节点发送加锁通知,所述加锁通知用于指示所述目标对象当前存在正在处理的追加写请求,不允许对所述第一追加写请求进行响应。
可选地,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述装置还包括:
第二确定模块,用于若所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与已存储的第二数据偏移相等,则确定第一预占大小;
其中,所述第一预占大小为所述第一追加写请求响应完成后所述目标对象的预估已上传大小,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
第一更新模块,用于基于所述第一预占大小,对所述当前预占大小进行更新;
发送模块,还用于向所述存储节点发送预占成功通知,所述预占成功通知用于指示对所述当前预占大小更新成功,允许对所述第一追加写请求进行响应。
可选地,所述装置还包括:
接收模块,用于接收所述存储节点发送的第三数据偏移,所述第三数据偏移为在对所述第一追加写请求响应完成后确定的所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移;
第二更新模块,用于基于所述第三数据偏移,对所述第二数据偏移进行更新。
可选地,发送模块,还用于若所述当前已上传大小和所述当前预占大小相等,但所述第一数据偏移与已存储的第二数据偏移不相等,则向所述存储节点发送错误请求通知,所述错误请求通知用于指示所述第一追加写请求为错误请求,不允许对所述第一追加写请求进行响应,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移。
可选地,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述装置还包括:
第三更新模块,用于在所述第二追加写请求的响应完成后,基于所述第二追加写请求的响应结果,对已存储的所述当前已上传大小和第二数据偏移进行更新,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
发送模块,还用于若检测到更新后的所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与更新后的所述第二数据偏移相等,则向所述存储节点发送解锁通知,所述解锁通知用于指示所述目标对象当前不存在正在处理的追加写请求,允许对所述第一追加写请求进行响应。
另一方面,提供了一种数据存储装置,所述装置包括:
接收模块,用于接收用户节点发送的针对目标对象的第一追加写请求;
发送模块,用于基于所述第一追加写请求,向管理节点发送预占请求,所述预占请求用于请求对已存储的所述目标对象的当前预占大小进行更新,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为当前数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
处理模块,用于若接收到所述管理节点发送的加锁通知,则基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应,所述加锁通知是由所述管理节点在确定已存储的当前已上传大小和所述当前预占大小不相等时触发,所述当前已上传大小为所述目标对象当前已上传完成的部分数据的数据大小。
可选地,处理模块还用于:
若接收到所述管理节点发送的预占成功通知,则基于所述预占成功通知确定所述管理节点基于所述预占请求对已存储的所述当前预占大小更新成功,并对所述第一追加写请求进行响应。
可选地,所述装置还包括:
确定模块,用于在对所述第一追加写请求响应完成后,确定所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移,得到第三数据偏移;
发送模块,还用于向所述管理节点发送所述第三数据偏移。
可选地,处理模块还用于:
若接收到所述管理节点发送的错误请求通知,则基于所述错误请求通知确定所述第一追加写请求为错误请求,不对所述第一追加写请求进行响应。
可选地,处理模块还用于:
若接收到所述管理节点发送的解锁通知,则基于所述解锁通知确定所述目标对象当前不存在正在处理的追加写请求,并对所述第一追加写请求进行响应。
另一方面,提供了一种数据存储系统,所述系统包括管理节点和多个存储节点;
存储节点,用于接收用户节点发送的针对目标对象的第一追加写请求,基于所述第一追加写请求,向管理节点发送预占请求,所述存储节点为所述多个存储节点中的任一存储节点;
所述管理节点,用于接收所述存储节点发送的所述预占请求,基于所述预占请求,确定已存储的所述目标对象的当前已上传大小和当前预占大小,若所述当前已上传大小和所述当前预占大小不相等,则向所述存储节点发送加锁通知,所述当前已上传大小为当前已上传完成的部分数据的数据大小,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为所述数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
所述存储节点,还用于若接收到所述管理节点发送的加锁通知,则基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应。
另一方面,提供了一种管理节点,所述管理节点包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述任一种数据存储方法。
另一方面,提供了一种存储节点,所述存储节点包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行上述任一种数据存储方法。
另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述任一种数据存储方法。
另一方面,还提供了一种计算机程序产品,当所述计算机程序产品被执行时,用于实现上述任一种数据存储方法。
本申请实施例提供的技术方案带来的有益效果是:
本申请实施例中,对于正在上传的目标对象,可以存储目标对象的当前已上传大小,若先接收到第二追加写请求,可以先预估第二追加写请求响应完成后的已上传大小,并将预估的已上传大小存储为当前预占大小。之后,若接收到存储节点基于第一追加写请求后触发的预占请求,则先查询已存储的当前已上传大小和当前预占大小,若当前已上传大小和当前预占大小不相等,即当前已上大小与第二追加写请求的预占大小不相等,则说明此时第二追加写请求还未响应完成,第二追加写请求还在追加上传数据,此时通过向存储节点发送加锁通知,即可指示该存储节点目标对象当前还存在正在处理的追加写请求,不允许对第一追加写请求进行响应。如此,实现了对数据存储系统进行加锁,通过加锁来限制同一时刻同一数据对象只能有一个追加写请求能被处理,从而避免了并行处理多个追加写请求的情况发生,进而避免了因追加写请求的并行处理导致的数据错乱。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种数据存储系统的示意图;
图2是本申请实施例提供的一种数据存储方法的流程图;
图3是本申请实施例提供的另一种数据存储方法的流程图;
图4是本申请实施例提供的一种数据存储装置的结构框图;
图5是本申请实施例提供的另一种数据存储装置的结构框图;
图6是本申请实施例提供的一种服务器的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在对本申请实施例进行详细地解释说明之前,先对本申请实施例的应用场景予以说明。
本申请实施例应用于用户节点向数据存储系统上传数据对象的场景中,主要应用于在向数据存储系统上传数据量较大的数据对象时,采用追加写的模式来上传数据对象的场景中。其中,该数据存储系统包括多个存储节点,以为分布式存储系统等。另外,本申请实施例中,可以由一个用户节点对同一数据对象进行追加写,也可以由多个用户节点对同一数据对象进行追加写,本申请实施例对此不作限定。
比如,设置在道路卡口的监控设备可以对道路上行驶的车辆进行抓拍,并将抓拍图片上传到数据存储系统。由于抓拍图片的数据量较大,因此往往需要采用追加写的模式来上传,也即是,需要将抓拍图像数据拆分后分多次上传,每次上传部分数据。
接下来,对本申请实施例涉及的实施环境进行介绍。
图1是本申请实施例提供的一种数据存储系统的示意图,如图1所示,该系统包括管理节点集群10和存储节点集群20。其中,管理节点集群10包括一个或多个管理节点,如包括管理节点11和管理节点12。存储节点集群20包括一个或多个存储节点,如包括存储节点21和存储节点22。
其中,管理节点集群10中的管理节点用于对存储节点集群20进行管理。比如,管理节点集群10可以在用户节点准备上传数据时,为用户节点从存储节点集群20中选择上传节点。值得注意的是,本申请实施例中,管理节点集群10还可以对存储节点集群20处理同一数据对象的追加写请求的过程进行维护,以限制存储节点集群20在同一时刻只能处理同一数据对象的一个追加写请求,保证同一时刻同一数据对象只能有一个追加写请求能被处理,从而避免存储节点集群20并行处理同一数据对象的多个追加写请求的情况发生,进而避免因追加写请求的并行处理导致的数据错乱。
需要说明的是,在用户节点上传目标对象的过程中,管理节点集群10可以记录并存储目标对象的当前已上传大小和当前预占大小。其中,当前已上传大小为目标对象当前已上传的部分数据的数据大小,当前预占大小为初始预占大小或最近一次追加写请求响应完成后的预估已上传大小,最近一次追加写请求为数据存储系统最近一次处理的针对目标对象的追加写请求。
也即是,管理节点集群10可以实时获取目标对象的当前已上传大小,并基于实时获取的当前已上传大小对已存储的当前已上传大小进行更新。或者,管理节点集群10可以在目标对象的任一追加写请求响应完成时,获取目标对象的已上传大小,并基于获取的已上传大小,对已存储的当前已上传大小进行更新。
另外,在任一存储节点接收到某个用户节点发送的针对目标对象的追加写请求后,管理节点集群10可以预估该追加写请求响应完成后目标对象的已上传大小,基于预估的已上传大小更新已存储的当前预占大小。
请参考图1,用户节点32,用于向存储节点22发送针对目标对象的第二追加写请求。用户节点31,用于向存储节点21发送针对目标对象的第一追加写请求。其中,第二追加写请求可以与第一追加写请求同时发送,也可以在第一追加写请求之前发送。
其中,存储节点21,用于在接收到第一追加写请求后,向管理节点11发送预占请求。管理节点11,用于根据该预占请求,预估在第一追加写请求响应完成后目标对象的已上传大小,并基于预估的已上传大小对已存储的目标对象的当前预占大小进行更新。另外,存储节点21,还用于对第一追加写请求进行响应,并在对第一追加写请求进行响应的过程中,或者在第一追加写请求响应完成后,确定目标对象的已上传大小,并将确定的已上传大小发送给管理节点11。管理节点11,还用于基于接收的已上传大小,对已存储的目标对象的当前已上传大小进行更新。另外,管理节点11还可以将已存储的目标对象的当前已上传大小和当前预占大小同步给管理节点12。
其中,存储节点22,用于在接收到第二追加写请求后,向管理节点12发送预占请求。管理节点12,用于根据该预占请求,获取已存储的目标对象的当前已上传大小和当前预占大小,若检测到已存储的当前已上传大小和当前预占大小不相等,则向存储节点22发送加锁通知。存储节点22接收到该加锁通知后,基于该加锁通知确定目标对象当前存在正在处理的追加写请求,不允许对第一追加写请求进行响应。
由于在检测到管理节点12存储的当前已上传大小和当前预占大小不相等时,说明此时第二追加写请求还未响应完成,第二追加写请求还在追加上传数据,因此需要通过向存储节点22发送加锁通知,来阻止存储节点22在第二追加写请求还未响应完成的同时对第一追加写请求进行响应,从而保证同一时刻同一数据对象只能有一个追加写请求能被处理,避免了并行处理多个追加写请求的情况发生。
需要说明的是,管理节点11和管理节点12可以为同一管理节点,也可以为不同管理节点,本申请实施例对此不作限定。也即是,多个设备节点可以由同一管理节点进行管理,也可以由不同管理节点分别进行管理。
还需要说明的是,用户节点可以为手机、平板电脑、计算机或监控设备等用户终端。管理节点和存储节点可以为终端或服务器等电子设备。比如,管理节点为MDS(MetaData Server,元数据服务器),存储节点为OSD(Object-based Storage Device,对象存储设备)。
接下来,对本申请实施例提供的数据存储方法进行详细说明。
图2是本申请实施例提供的一种数据存储方法的流程图,该方法应用于图1所示的数据存储系统中,如图2所示,该方法包括如下步骤:
步骤201:用户节点向存储节点发送针对目标对象的第一追加写请求。
需要说明的是,存储节点为数据存储系统包括的多个存储节点中的任一存储节点。也即是,用户节点可以向任一存储节点发送第一追加写请求。
作为一个示例,存储节点可以由管理节点为该用户节点分配得到。
比如,用户节点在发送第一追加写请求之前,在准备追加写数据时,可以先向管理节点发送节点申请,该节点申请用于申请待追加数据的上传节点。
管理节点接收到该节点申请之后,可以从数据存储系统的多个存储节点中选择满足上传要求的存储节点,并将选择的存储节点的标识发送给用户节点,以便用户节点将该存储节点的标识所指示的存储节点作为待追加数据的上传节点,进而向该上传节点发送第一追加写请求。
其中,该上传要求可以预先设置得到。比如,该上传要求可以包括处理资源要求、带宽要求、传输时延要求和平均在线时长要求中的至少一种。存储节点的标识可以为存储节点的节点名称、节点编号或节点地址等,本申请实施例对此不作限定。
再者,目标对象为待上传的数据对象,可以为图片或视频等数据文件。第一追加写请求用于请求追加上传目标对象的部分数据。
作为一个示例,第一追加写请求可以携带待追加的数据和第一数据偏移。其中,第一数据偏移为待追加的数据的数据偏移,具体为第一追加写请求请求追加的数据的起始位置相对于目标对象的数据起始位置的偏移。
比如,若第一追加写请求携带待追加的数据2MB以及第一数据偏移1MB,则表示第一追加写请求请求在数据偏移1MB处追加写2MB的数据。
步骤202:存储节点接收用户节点发送的第一追加写请求,基于第一追加写请求,向管理节点发送预占请求。
需要说明的是,该预占请求用于请求管理节点对已存储的目标对象的当前预占大小进行更新。该预占请求可以携带追加数据大小和第一数据偏移,追加数据大小为第一追加写请求请求追加的数据的数据大小。
其中,管理节点预先存储有目标对象的当前预占大小,当前预占大小为第二追加写请求响应完成后的预估已上传大小。第二追加写请求为当前数据存储系统在第一追加写请求之前最近一次处理的针对目标对象的追加写请求。
在当前数据存储系统还未曾接收到目标对象的追加写请求的情况下,目标对象的当前预占大小一般为初始预占大小或目标对象的已上传大小,初始预占大小为零。在当前数据存储系统已接收过目标对象的追加写请求的情况下,目标对象的当前预占大小一般为基于最近一次处理的追加写请求预估的已上传大小,即预估最近一次处理的追加写请求响应完成后目标对象的已上传大小。
其中,该管理节点可以为该存储节点对应的管理节点。该数据存储系统中可以包括一个管理节点,该管理节点用于对所有存储节点进行管理。或者,该数据存储系统也可以包括多个管理节点,每个管理节点用于对应管理部分存储节点。本申请实施例对此不作限定。
本申请实施例中,对于数据存储系统中的任一存储节点,在接收到用户节点发送的针对目标对象的追加写请求后,即可先向对应的管理节点发送预占请求,请求管理节点基于预占请求,对存储的目标对象的当前预占请求进行更新。
步骤203:管理节点接收存储节点发送的预占请求,基于该预占请求,确定已存储的目标对象的当前已上传大小和当前预占大小。
其中,目标对象的当前已上传大小为目标对象当前已上传的部分数据的数据大小。管理节点预先存储有目标对象的当前已上传大小。
需要说明的是,在目标对象还未曾有数据上传的情况下,当前已上传大小为初始已上传大小,初始已上传大小为零。在目标对象已有数据上传的情况下,当前已上传大小即为目标对象当前已上传的部分数据的数据大小。
本申请实施例中,管理节点接收到该预占请求后,可以先查询已存储的目标对象的当前已上传大小和当前预占大小。
步骤204:管理节点判断已存储的目标对象的当前已上传大小和当前预占大小是否相等。
若最近一次处理的第二追加写请求已响应处理完成,则目标对象的当前已上传大小也就会和当前预占大小相等,因此,若当前已上传大小和当前预占大小相等,也就可以确定目标对象当前已不存在正在处理的追加写请求。
若当前已上传大小和当前预占大小相等,则表示最近一次处理的第二追加写请求还未处理完成,第二追加写请求还在追加上传数据,当前目标对象存在正在处理的追加写请求。
步骤205:若确定当前已上传大小和当前预占大小不相等,则管理节点向该存储节点发送加锁通知。
其中,该加锁通知用于指示目标对象当前存在正在处理的追加写请求,不允许对第一追加写请求进行响应。示例的,该加锁通知可以为第一错误码,第一错误码用于指示目标对象当前存在正在处理的追加写请求,不允许对第一追加写请求进行响应。
其中,不允许对第一追加写请求进行响应可以包括暂时不对第一追加写请求进行响应,或者,永久不对第一追加写请求进行响应。
本申请实施例中,若确定当前已上传大小和当前预占大小相等,则也就可以确定在第一追加写请求之前接收的第二追加写请求还未处理完成,因此可以向该存储节点发送加锁通知,来阻止存储节点在第二追加写请求还未响应完成的同时对第一追加写请求进行响应。
步骤206:存储节点若接收到管理节点发送的加锁通知,则基于该加锁通知确定目标对象当前存在正在处理的追加写请求,不对第一追加写请求进行响应。
通过在接收到管理节点发送的加锁通知时,不对第一追加写请求进行响应,也就可以保证同一时刻目标对象只能有一个追加写请求能被处理,避免了并行处理多个追加写请求的情况发生。
通过上述加锁方式可知,本申请实施例的主要用于在数据存储系统处理追加写请求的过程中,为数据存储系统施加全局锁,该全局锁用于限制同一时刻同一数据对象只能有一个追加写请求被处理,以避免并行处理同一数据对象的多个追加写请求的情况发生,进而避免追加写请求的并行处理可能导致的数据错乱。
另外,存储节点还能够存储有第二数据偏移,第二数据偏移是指目标对象已上传完成的部分数据的数据末尾位置相对于目标对象的数据起始位置的偏移。另外,第二数据偏移还可以基于当前已上传大小确定,比如,第二数据偏移与已存储的当前已上传大小相等。比如,若目标对象已上传5MB,则第二数据偏移为5MB。
在一种可能的实现方式中,该加锁通知可以指示存储节点暂时不对第一追加写请求进行响应。在第二追加写请求的响应完成后,存储节点可以基于第二追加写请求的响应结果,对已存储的当前已上传大小和第二数据偏移进行更新。在更新完成之后,若检测到更新后的当前已上传大小和当前预占大小相等,且第一数据偏移与更新后的第二数据偏移相等,则向存储节点发送解锁通知。
其中,该解锁通知用于指示第二追加写请求已响应完成,目标对象当前不存在正在处理的追加写请求,允许对第一追加写请求进行响应。也即是,存储节点接收到该解锁通知之后,即可确定目标对象当前不存在正在处理的追加写请求,并对第一追加写请求进行响应。
如此,即可实现在目标对象存在正在处理的追加写请求情况下,则对目标对象的追加写请求进行加锁,通过加锁不允许同时处理目标对象的其他追加写请求。而在目标对象正在处理的追加写请求已响应完成的情况下,则对目标对象的追加写请求进行解锁,通过解锁指示可以继续对目标对象的其他追加写请求进行处理。
步骤207:若确定当前已上传大小和当前预占大小相等,但第一数据偏移与已存储的第二数据偏移不相等,则向存储节点发送错误请求通知。
其中,第一数据偏移为第一追加写请求请求追加数据的数据偏移,第二数据偏移为目标对象已上传完成的部分数据的数据末尾位置相对于目标对象的数据起始位置的偏移。
其中,错误请求通知用于指示第一追加写请求为错误请求,即第一追加写请求为不合法请求,不允许对第一追加写请求进行响应。该错误请求通知可以为第二错误码,第二错误码用于指示第一追加写请求为错误请求,不允许对第一追加写请求进行响应。第二错误码与第一错误码可以为相同的错误码,也可以为不同的错误码,本申请实施例对此不作限定。
若当前已上传大小和当前预占大小相等,则表示正在处理的第二追加写请求已响应处理完成,当前目标对象不存在正在处理的追加写请求。在确定当前已上传大小和当前预占大小相等之后,还需要继续判断第一数据偏移与已存储的第二数据偏移是否相等,若第一数据偏移与第二数据偏移不相等,则说明若基于第一数据偏移对第一追加写请求进行响应,将会导致数据错乱,因此可以确定第一追加写请求为错误请求,并向存储节点发送错误请求通知。
步骤208:存储节点若接收到管理节点发送的错误请求通知,则基于该错误请求通知确定第一追加写请求为错误请求,并不对第一追加写请求进行响应。
步骤209:若当前已上传大小和所述当前预占大小相等,且第一数据偏移与已存储的第二数据偏移相等,则确定第一预占大小,基于第一预占大小,对当前预占大小进行更新。
其中,第一预占大小为第一追加写请求响应完成后目标对象的预估已上传大小。第一预占大小可以基于预占请求中携带的待追加数据的数据大小和第一数据偏移确定,比如,可以将待追加数据的数据大小与第一数据偏移之和,确定为第一预占大小。
若当前已上传大小和所述当前预占大小相等,且第一数据偏移与已存储的第二数据偏移相等,则说明目标对象当前不存在正在处理的追加写请求,且第一追加写请求为合法请求,这种情况下,即可基于预占请求,确定第一预占大小,并基于第一预占大小,对当前预占大小进行更新。
步骤210:管理节点向存储节点发送预占成功通知。
其中,预占成功通知用于指示对当前预占大小更新成功,且目标对象当前不存在正在处理的追加写请求,允许对第一追加写请求进行响应。
步骤211:存储节点若接收到管理节点发送的预占成功通知,则基于预占成功通知确定管理节点基于预占请求对已存储的当前预占大小更新成功,并对第一追加写请求进行响应。
也即是,若存储节点接收到预占成功通知,则即可确定目标对象当前不存在正在处理的追加写请求,且管理节点基于预占请求对已存储的当前预占大小更新成功,如此,即可执行对第一追加写请求进行响应的操作。
另外,存储节点在对第一追加写请求响应完成后,还可以向管理节点上传最新的数据偏移。
比如,存储节点在对第一追加写请求响应完成后,可以确定目标对象已上传完成的部分数据的末尾位置相对于目标对象的数据起始位置的偏移,得到第三数据偏移,并向管理节点发送第三数据偏移。管理节点接收到存储节点发送的第三数据偏移后,可以基于第三数据偏移,对已存储的第二数据偏移进行更新。
本申请实施例中,对于正在上传的目标对象,可以存储目标对象的当前已上传大小,若先接收到第二追加写请求,可以先预估第二追加写请求响应完成后的已上传大小,并将预估的已上传大小存储为当前预占大小。之后,若接收到存储节点基于第一追加写请求后触发的预占请求,则先查询已存储的当前已上传大小和当前预占大小,若当前已上传大小和当前预占大小不相等,即当前已上大小与第二追加写请求的预占大小不相等,则说明此时第二追加写请求还未响应完成,第二追加写请求还在追加上传数据,此时通过向存储节点发送加锁通知,即可指示该存储节点目标对象当前还存在正在处理的追加写请求,不允许对第一追加写请求进行响应。如此,实现了对数据存储系统进行加锁,通过加锁来限制同一时刻同一数据对象只能有一个追加写请求能被处理,从而避免了并行处理多个追加写请求的情况发生,进而避免了因追加写请求的并行处理导致的数据错乱。
图3是本申请实施例提供的另一种数据存储方法的流程图,该方法应用于图1所示的数据存储系统中,如图3所示,该方法包括第一追加写请求的处理过程以及第二追加写请求的处理过程。其中,第一追加写请求和第二追加写请求均为目标对象的追加写请求,且第二追加写请求可以在第一追加写请求之前发送,也可以与第一追加写请求同时发送。
1)第二追加写请求的处理过程包括如下步骤:
步骤1:用户节点2在准备追加数据时,向管理节点2发送节点申请。
其中,该节点申请用于申请待追加数据的上传节点。
步骤2:管理节点2基于节点申请,向用户节点2发送存储节点2的标识。
管理节点2接收到该节点申请之后,可以从数据存储系统的多个存储节点中选择满足上传要求的存储节点,并将选择的存储节点的标识发送给用户节点2。比如,将存储节点2的标识发送给用户节点2。
步骤3:用户节点2基于接收的存储节点2的标识,向存储节点2发送针对目标对象的第二追加写请求。
其中,第二追加写请求可以包括待追加的数据和第四数据偏移,第四数据偏移为待追加的数据的数据偏移,具体为待追加的数据的起始位置相对于目标对象的数据起始位置的偏移。
比如,第二追加写请求携带待追加的数据3MB以及第四数据偏移1MB,用于请求在目标对象的数据偏移1MB处追加写3MB的数据。
步骤4:存储节点2基于第二追加写请求,向管理节点2发送预占请求。
其中,预占请求可以携带第二追加写请求请求追加数据的数据大小和第四数据偏移,用于请求存储节点2基于该预占请求,对已存储的目标对象的当前预占大小进行更新。
步骤5:管理节点2基于该预占请求,查询已存储的目标对象的当前已上传大小和当前预占大小,若当前已上传大小和当前预占大小相等,则确定第一预占大小,基于第一预占大小对已存储的当前预占大小进行更新,并向存储节点2发送预占成功通知。
步骤6:存储节点2基于预占成功通知,确定目标对象当前不存在正在处理的追加写请求,并对第二追加写请求进行响应。
另外,存储节点2在对第二追加写请求响应完成后,确定第五数据偏移,向管理节点2发送第五数据偏移。其中,第五数据偏移为在对第二追加写请求响应完成后确定的目标对象已上传完成的部分数据的末尾位置相对于目标对象的数据起始位置的偏移。
管理节点2接收到第五数据偏移后,可以基于第五数据偏移对已存储的第二数据偏移进行更新。第二数据偏移为存储节点2已存储的目标对象已上传完成的部分数据的数据末尾位置相对于目标对象的数据起始位置的偏移。
另外,管理节点2还可以与管理节点1进行数据同步,比如同步目标对象的当前已上传大小和当前预占大小。
2)第二追加写请求的处理过程包括如下步骤:
步骤1:用户节点1在准备追加数据时,向管理节点1发送节点申请。
步骤2:管理节点1基于节点申请,向用户节点1发送存储节点1的标识。
步骤3:用户节点1基于存储节点1的标识,向存储节点1发送针对目标对象的第一追加写请求。
其中,第一追加写请求可以携带待追加的数据和第一数据偏移。第一数据偏移为待追加数据的数据偏移,具体为待追加的数据的起始位置相对于目标对象的数据起始位置的偏移。
步骤4:存储节点1基于第一追加写请求,向管理节点1发送预占请求。
其中,该预占请求携带第一追加写请求待追加数据的数据大小和第一数据偏移。
步骤5:管理节点1基于该预占请求,查询已存储的目标对象的当前已上传大小和当前预占大小,若当前已上传大小和当前预占大小不相等,则管理节点1向存储节点1发送加锁通知。
若当前已上传大小和当前预占大小不相等,则说明第二追加写请求还未处理完成,目标对象当前存在正在处理的追加写请求,此时即可向存储节点1发送加锁通知,阻止存储节点1对第一追加写请求进行响应。
步骤6:存储节点1基于加锁通知,确定目标对象当前存在正在处理的追加写请求,并不对第一追加写请求进行响应。
如此,可以避免数据存储系统在对目标对象的第二追加写请求进行处理的同时,并行对第一追加写请求进行处理,避免了并行处理多个追加写请求的情况发生,进而避免了因追加写请求的并行处理导致的数据错乱。
图4是本申请实施例提供的一种数据存储装置的结构框图,该装置集成于管理节点中,如图4所示,该装置包括:
接收模块401,用于接收存储节点发送的预占请求,所述预占请求是由所述存储节点在接收到针对目标对象的第一追加写请求后触发的;
第一确定模块402,用于基于所述预占请求,确定已存储的所述目标对象的当前已上传大小和当前预占大小,所述当前已上传大小为当前已上传完成的部分数据的数据大小,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为所述存储节点所在的数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
发送模块403,用于若所述当前已上传大小和所述当前预占大小不相等,则向所述存储节点发送加锁通知,所述加锁通知用于指示所述目标对象当前存在正在处理的追加写请求,不允许对所述第一追加写请求进行响应。
可选地,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述装置还包括:
第二确定模块,用于若所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与已存储的第二数据偏移相等,则确定第一预占大小;
其中,所述第一预占大小为所述第一追加写请求响应完成后所述目标对象的预估已上传大小,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
第一更新模块,用于基于所述第一预占大小,对所述当前预占大小进行更新;
发送模块403,还用于向所述存储节点发送预占成功通知,所述预占成功通知用于指示对所述当前预占大小更新成功,允许对所述第一追加写请求进行响应。
可选地,所述装置还包括:
接收模块401,还用于接收所述存储节点发送的第三数据偏移,所述第三数据偏移为在对所述第一追加写请求响应完成后确定的所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移;
第二更新模块,用于基于所述第三数据偏移,对所述第二数据偏移进行更新。
可选地,发送模块403,还用于若所述当前已上传大小和所述当前预占大小相等,但所述第一数据偏移与已存储的第二数据偏移不相等,则向所述存储节点发送错误请求通知,所述错误请求通知用于指示所述第一追加写请求为错误请求,不允许对所述第一追加写请求进行响应,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移。
可选地,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述装置还包括:
第三更新模块,用于在所述第二追加写请求的响应完成后,基于所述第二追加写请求的响应结果,对已存储的所述当前已上传大小和第二数据偏移进行更新,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
发送模块403,还用于若检测到更新后的所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与更新后的所述第二数据偏移相等,则向所述存储节点发送解锁通知,所述解锁通知用于指示所述目标对象当前不存在正在处理的追加写请求,允许对所述第一追加写请求进行响应。
本申请实施例中,对于正在上传的目标对象,可以存储目标对象的当前已上传大小,若先接收到第二追加写请求,可以先预估第二追加写请求响应完成后的已上传大小,并将预估的已上传大小存储为当前预占大小。之后,若接收到存储节点基于第一追加写请求后触发的预占请求,则先查询已存储的当前已上传大小和当前预占大小,若当前已上传大小和当前预占大小不相等,即当前已上大小与第二追加写请求的预占大小不相等,则说明此时第二追加写请求还未响应完成,第二追加写请求还在追加上传数据,此时通过向存储节点发送加锁通知,即可指示该存储节点目标对象当前还存在正在处理的追加写请求,不允许对第一追加写请求进行响应。如此,实现了对数据存储系统进行加锁,通过加锁来限制同一时刻同一数据对象只能有一个追加写请求能被处理,从而避免了并行处理多个追加写请求的情况发生,进而避免了因追加写请求的并行处理导致的数据错乱。
图5是本申请实施例提供的另一种数据存储装置的结构框图,该装置集成于存储节点中,如图5所示,该装置包括:
接收模块501,用于接收用户节点发送的针对目标对象的第一追加写请求;
发送模块502,用于基于所述第一追加写请求,向管理节点发送预占请求,所述预占请求用于请求对已存储的所述目标对象的当前预占大小进行更新,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为当前数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
处理模块503,用于若接收到所述管理节点发送的加锁通知,则基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应,所述加锁通知是由所述管理节点在确定已存储的当前已上传大小和所述当前预占大小不相等时触发,所述当前已上传大小为所述目标对象当前已上传完成的部分数据的数据大小。
可选地,处理模块503还用于:
若接收到所述管理节点发送的预占成功通知,则基于所述预占成功通知确定所述管理节点基于所述预占请求对已存储的所述当前预占大小更新成功,并对所述第一追加写请求进行响应。
可选地,所述装置还包括:
确定模块,用于在对所述第一追加写请求响应完成后,确定所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移,得到第三数据偏移;
发送模块502,还用于向所述管理节点发送所述第三数据偏移。
可选地,处理模块503还用于:
若接收到所述管理节点发送的错误请求通知,则基于所述错误请求通知确定所述第一追加写请求为错误请求,不对所述第一追加写请求进行响应。
可选地,处理模块503还用于:
若接收到所述管理节点发送的解锁通知,则基于所述解锁通知确定所述目标对象当前不存在正在处理的追加写请求,并对所述第一追加写请求进行响应。
本申请实施例中,对于正在上传的目标对象,可以存储目标对象的当前已上传大小,若先接收到第二追加写请求,可以先预估第二追加写请求响应完成后的已上传大小,并将预估的已上传大小存储为当前预占大小。之后,若接收到存储节点基于第一追加写请求后触发的预占请求,则先查询已存储的当前已上传大小和当前预占大小,若当前已上传大小和当前预占大小不相等,即当前已上大小与第二追加写请求的预占大小不相等,则说明此时第二追加写请求还未响应完成,第二追加写请求还在追加上传数据,此时通过向存储节点发送加锁通知,即可指示该存储节点目标对象当前还存在正在处理的追加写请求,不允许对第一追加写请求进行响应。如此,实现了对数据存储系统进行加锁,通过加锁来限制同一时刻同一数据对象只能有一个追加写请求能被处理,从而避免了并行处理多个追加写请求的情况发生,进而避免了因追加写请求的并行处理导致的数据错乱。
需要说明的是:上述实施例提供的数据存储装置在进行数据存储时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据存储装置与数据存储方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图6是本申请实施例提供的一种服务器600的结构示意图,该服务器600可以为上述图1中的任一管理节点或存储节点,该服务器600可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(Central Processing Units,CPU)601和一个或一个以上的存储器602,其中,所述存储器602中存储有至少一条指令,所述至少一条指令由所述处理器601加载并执行以实现上述各个方法实施例提供的数据存储方法。当然,该服务器600还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该服务器600还可以包括其他用于实现设备功能的部件,在此不做赘述。
在示例性的实施例中,还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,所述指令被处理器执行时实现上述数据存储方法。
在示例性实施例中,还提供了一种计算机程序产品,当该计算机程序产品被执行时,其用于实现上述数据存储方法。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (18)

1.一种数据存储方法,其特征在于,所述方法包括:
接收存储节点发送的预占请求,所述预占请求是由所述存储节点在接收到针对目标对象的第一追加写请求后触发的,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移;
基于所述预占请求,确定已存储的所述目标对象的当前已上传大小和当前预占大小,所述当前已上传大小为当前已上传完成的部分数据的数据大小,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为所述存储节点所在的数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
若所述当前已上传大小和所述当前预占大小不相等,则向所述存储节点发送加锁通知,所述加锁通知用于指示所述目标对象当前存在正在处理的追加写请求,不允许对所述第一追加写请求进行响应;
在所述第二追加写请求的响应完成后,基于所述第二追加写请求的响应结果,对已存储的所述当前已上传大小和第二数据偏移进行更新,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
若检测到更新后的所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与更新后的所述第二数据偏移相等,则向所述存储节点发送解锁通知,所述解锁通知用于指示所述目标对象当前不存在正在处理的追加写请求,允许对所述第一追加写请求进行响应。
2.如权利要求1所述的方法,其特征在于,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述确定已存储的所述目标对象的当前已上传大小和当前预占大小之后,还包括:
若所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与已存储的第二数据偏移相等,则确定第一预占大小;
其中,所述第一预占大小为所述第一追加写请求响应完成后所述目标对象的预估已上传大小,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
基于所述第一预占大小,对所述当前预占大小进行更新,以及向所述存储节点发送预占成功通知,所述预占成功通知用于指示对所述当前预占大小更新成功,允许对所述第一追加写请求进行响应。
3.如权利要求2所述的方法,其特征在于,所述向所述存储节点发送预占成功通知之后,还包括:
接收所述存储节点发送的第三数据偏移,所述第三数据偏移为在对所述第一追加写请求响应完成后确定的所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移;
基于所述第三数据偏移,对所述第二数据偏移进行更新。
4.如权利要求2所述的方法,其特征在于,所述确定已存储的所述目标对象的当前已上传大小和当前预占大小之后,还包括:
若所述当前已上传大小和所述当前预占大小相等,但所述第一数据偏移与已存储的第二数据偏移不相等,则向所述存储节点发送错误请求通知,所述错误请求通知用于指示所述第一追加写请求为错误请求,不允许对所述第一追加写请求进行响应,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移。
5.一种数据存储方法,其特征在于,所述方法包括:
接收用户节点发送的针对目标对象的第一追加写请求;
基于所述第一追加写请求,向管理节点发送预占请求,所述预占请求用于请求对已存储的所述目标对象的当前预占大小进行更新,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为当前数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
若接收到所述管理节点发送的加锁通知,则基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应,所述加锁通知是由所述管理节点在确定已存储的当前已上传大小和所述当前预占大小不相等时触发,所述当前已上传大小为所述目标对象当前已上传完成的部分数据的数据大小;
若接收到所述管理节点发送的解锁通知,则基于所述解锁通知确定所述目标对象当前不存在正在处理的追加写请求,并对所述第一追加写请求进行响应。
6.如权利要求5所述的方法,其特征在于,所述向管理节点发送预占请求之后,还包括:
若接收到所述管理节点发送的预占成功通知,则基于所述预占成功通知确定所述管理节点基于所述预占请求对已存储的所述当前预占大小更新成功,并对所述第一追加写请求进行响应。
7.如权利要求6所述的方法,其特征在于,所述对所述第一追加写请求进行响应之后,还包括:
在对所述第一追加写请求响应完成后,确定所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移,得到第三数据偏移;
向所述管理节点发送所述第三数据偏移。
8.如权利要求5所述的方法,其特征在于,所述向管理节点发送预占请求之后,还包括:
若接收到所述管理节点发送的错误请求通知,则基于所述错误请求通知确定所述第一追加写请求为错误请求,不对所述第一追加写请求进行响应。
9.一种数据存储装置,其特征在于,所述装置包括:
接收模块,用于接收存储节点发送的预占请求,所述预占请求是由所述存储节点在接收到针对目标对象的第一追加写请求后触发的,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移;
第一确定模块,用于基于所述预占请求,确定已存储的所述目标对象的当前已上传大小和当前预占大小,所述当前已上传大小为当前已上传完成的部分数据的数据大小,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为所述存储节点所在的数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
发送模块,用于若所述当前已上传大小和所述当前预占大小不相等,则向所述存储节点发送加锁通知,所述加锁通知用于指示所述目标对象当前存在正在处理的追加写请求,不允许对所述第一追加写请求进行响应;
第三更新模块,用于在所述第二追加写请求的响应完成后,基于所述第二追加写请求的响应结果,对已存储的所述当前已上传大小和第二数据偏移进行更新,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
所述发送模块,还用于若检测到更新后的所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与更新后的所述第二数据偏移相等,则向所述存储节点发送解锁通知,所述解锁通知用于指示所述目标对象当前不存在正在处理的追加写请求,允许对所述第一追加写请求进行响应。
10.根据权利要求9的装置,其特征在于,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述装置还包括:
第二确定模块,用于若所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与已存储的第二数据偏移相等,则确定第一预占大小;其中,所述第一预占大小为所述第一追加写请求响应完成后所述目标对象的预估已上传大小,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
第一更新模块,用于基于所述第一预占大小,对所述当前预占大小进行更新;
所述发送模块,还用于向所述存储节点发送预占成功通知,所述预占成功通知用于指示对所述当前预占大小更新成功,允许对所述第一追加写请求进行响应。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
接收模块,用于接收所述存储节点发送的第三数据偏移,所述第三数据偏移为在对所述第一追加写请求响应完成后确定的所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移;
第二更新模块,用于基于所述第三数据偏移,对所述第二数据偏移进行更新。
12.根据权利要求10所述的装置,其特征在于,所述发送模块,还用于若所述当前已上传大小和所述当前预占大小相等,但所述第一数据偏移与已存储的第二数据偏移不相等,则向所述存储节点发送错误请求通知,所述错误请求通知用于指示所述第一追加写请求为错误请求,不允许对所述第一追加写请求进行响应,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移。
13.一种数据存储装置,其特征在于,所述装置包括:
接收模块,用于接收用户节点发送的针对目标对象的第一追加写请求;
发送模块,用于基于所述第一追加写请求,向管理节点发送预占请求,所述预占请求用于请求对已存储的所述目标对象的当前预占大小进行更新,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为当前数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
处理模块,用于若接收到所述管理节点发送的加锁通知,则基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应,所述加锁通知是由所述管理节点在确定已存储的当前已上传大小和所述当前预占大小不相等时触发,所述当前已上传大小为所述目标对象当前已上传完成的部分数据的数据大小;
所述处理模块,还用于若接收到所述管理节点发送的解锁通知,则基于所述解锁通知确定所述目标对象当前不存在正在处理的追加写请求,并对所述第一追加写请求进行响应。
14.根据权利要求13所述的装置,其特征在于,所述处理模块,还用于若接收到所述管理节点发送的预占成功通知,则基于所述预占成功通知确定所述管理节点基于所述预占请求对已存储的所述当前预占大小更新成功,并对所述第一追加写请求进行响应。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
确定模块,用于在对所述第一追加写请求响应完成后,确定所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移,得到第三数据偏移;
发送模块,用于向所述管理节点发送所述第三数据偏移。
16.根据权利要求13所述的装置,其特征在于,所述处理模块,还用于若接收到所述管理节点发送的错误请求通知,则基于所述错误请求通知确定所述第一追加写请求为错误请求,不对所述第一追加写请求进行响应。
17.一种数据存储系统,其特征在于,所述系统包括管理节点和多个存储节点;
存储节点,用于接收用户节点发送的针对目标对象的第一追加写请求,基于所述第一追加写请求,向管理节点发送预占请求,所述存储节点为所述多个存储节点中的任一存储节点;
所述管理节点,用于接收所述存储节点发送的所述预占请求,基于所述预占请求,确定已存储的所述目标对象的当前已上传大小和当前预占大小,若所述当前已上传大小和所述当前预占大小不相等,则向所述存储节点发送加锁通知,所述当前已上传大小为当前已上传完成的部分数据的数据大小,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为所述数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移;
所述存储节点,还用于若接收到所述管理节点发送的加锁通知,则基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应;
所述管理节点,还用于在所述第二追加写请求的响应完成后,基于所述第二追加写请求的响应结果,对已存储的所述当前已上传大小和第二数据偏移进行更新,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
所述管理节点,还用于若检测到更新后的所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与更新后的所述第二数据偏移相等,则向所述存储节点发送解锁通知,所述解锁通知用于指示所述目标对象当前不存在正在处理的追加写请求,允许对所述第一追加写请求进行响应;
所述存储节点,还用于若接收到所述管理节点发送的解锁通知,则基于所述解锁通知确定所述目标对象当前不存在正在处理的追加写请求,并对所述第一追加写请求进行响应。
18.一种计算机可读存储介质,所述计算机可读存储介质上存储有指令,其特征在于,所述指令被处理器执行时实现权利要求1-4或权利要求5-8所述的任一项方法的步骤。
CN202010504954.1A 2020-06-05 2020-06-05 数据存储方法、装置及存储介质 Active CN111651419B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010504954.1A CN111651419B (zh) 2020-06-05 2020-06-05 数据存储方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010504954.1A CN111651419B (zh) 2020-06-05 2020-06-05 数据存储方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN111651419A CN111651419A (zh) 2020-09-11
CN111651419B true CN111651419B (zh) 2023-10-20

Family

ID=72347175

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010504954.1A Active CN111651419B (zh) 2020-06-05 2020-06-05 数据存储方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN111651419B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112114757B (zh) * 2020-09-28 2024-04-05 北京百度网讯科技有限公司 对象存储系统中的存储方法及系统、计算设备和介质
CN112925672B (zh) * 2021-02-08 2022-11-22 重庆紫光华山智安科技有限公司 数据恢复方法、装置、设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016002325A1 (ja) * 2014-07-04 2016-01-07 日本電気株式会社 情報処理システム、情報処理方法、記憶制御装置およびその制御方法と制御プログラム
WO2018019255A1 (zh) * 2016-07-26 2018-02-01 中兴通讯股份有限公司 文件写入方法及装置
CN110008142A (zh) * 2019-04-16 2019-07-12 苏州浪潮智能科技有限公司 存储数据管理方法、装置、设备及计算机可读存储介质
CN110505314A (zh) * 2019-09-26 2019-11-26 浪潮电子信息产业股份有限公司 一种并发追加上传请求的处理方法
CN110837338A (zh) * 2018-08-15 2020-02-25 阿里巴巴集团控股有限公司 一种存储索引处理方法及装置
CN111124280A (zh) * 2019-11-29 2020-05-08 浪潮电子信息产业股份有限公司 一种数据追加写入方法、装置及电子设备和存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016002325A1 (ja) * 2014-07-04 2016-01-07 日本電気株式会社 情報処理システム、情報処理方法、記憶制御装置およびその制御方法と制御プログラム
WO2018019255A1 (zh) * 2016-07-26 2018-02-01 中兴通讯股份有限公司 文件写入方法及装置
CN107656939A (zh) * 2016-07-26 2018-02-02 南京中兴新软件有限责任公司 文件写入方法及装置
CN110837338A (zh) * 2018-08-15 2020-02-25 阿里巴巴集团控股有限公司 一种存储索引处理方法及装置
CN110008142A (zh) * 2019-04-16 2019-07-12 苏州浪潮智能科技有限公司 存储数据管理方法、装置、设备及计算机可读存储介质
CN110505314A (zh) * 2019-09-26 2019-11-26 浪潮电子信息产业股份有限公司 一种并发追加上传请求的处理方法
CN111124280A (zh) * 2019-11-29 2020-05-08 浪潮电子信息产业股份有限公司 一种数据追加写入方法、装置及电子设备和存储介质

Also Published As

Publication number Publication date
CN111651419A (zh) 2020-09-11

Similar Documents

Publication Publication Date Title
CN107295080B (zh) 应用于分布式服务器集群的数据存储方法和服务器
US11288253B2 (en) Allocation method and device for a distributed lock
US10567542B2 (en) Method for state based snapshot difference with restart capability
CN111651419B (zh) 数据存储方法、装置及存储介质
CN113704354B (zh) 一种数据同步方法及装置、计算机设备、存储介质
EP3251028A1 (en) Regenerated container file storing
US9479578B1 (en) Randomized peer-to-peer synchronization of shared content items
CN110046062B (zh) 分布式数据处理方法及系统
JP2018515850A (ja) データ・コピー方法及びデバイス
CN113094430B (zh) 一种数据处理方法、装置、设备以及存储介质
CN111464603B (zh) 一种服务器扩容方法及扩容系统
US20180349432A1 (en) Database system, transaction management node, method, and medium
US20180302470A1 (en) Randomized Peer-to-Peer Synchronization of Shared Content Items
CN107516048B (zh) 一种控制分布式文件系统中文件访问的方法与设备
CN113190619B (zh) 分布式kv数据库的数据读写方法、系统、设备和介质
US8489698B2 (en) Apparatus and method for accessing a metadata
CN115878138B (zh) 应用预下载方法、装置、计算机、存储介质
CN111147226B (zh) 数据存储方法、装置及存储介质
JP6343983B2 (ja) 仮想記憶ゲート・システム
EP2959661B1 (en) Method, apparatus and system for processing user generated content
CN110417850B (zh) 软件配置获取方法、系统、服务器及介质
CN106407320B (zh) 文件处理方法、装置及系统
CN111400324B (zh) 一种锁定云存储中对象的方法、装置及服务器
CN117255101B (zh) 分布式存储系统的数据处理方法、装置、设备及介质
CN117215501B (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
GR01 Patent grant
GR01 Patent grant