【技术实现步骤摘要】
数据存储方法、装置及存储介质
本申请涉及数据存储领域,特别涉及一种数据存储方法、装置及存储介质。
技术介绍
在用户节点向数据存储系统上传数据量较大的数据对象时,由于网络环境或者业务场景等的限制,可能需要分多次才能完成对一个数据对象的完整写入,也即是,需要将数据对象拆分后分多次上传,每次上传部分数据。相关技术中,用户节点在向数据存储系统上传目标对象的过程中,在已经上传了目标对象的部分数据的情况下,会继续向数据存储系统发送目标对象的追加写请求,该追加写请求用于请求追加上传目标对象的部分数据。在对目标对象进行追加写时,用户节点可能会在极短时间内向数据存储系统连续发送多个追加写请求,这样,数据存储系统也就会在极短时间内接收到多个追加写请求,并需要并行处理这多个追加写请求。其中,目标对象为需要上传的数据对象,可以为图片或视频等数据文件。但是,追加写请求的并行处理可能会导致数据错乱。比如,假设目标对象的数据量为10MB,在已经上传了1MB后,若用户节点在极短时间内向数据存储系统的第一存储节点和第二存储节点分别发送了第一追加写请求和第二追加写请求,第一追加写请求用于请求在相对于目标对象的数据起始位置偏移1MB的位置处追加上传2MB数据,第二追加写请求用于请求在相对于目标对象的数据起始位置偏移1MB的位置处追加上传3MB数据,则第一存储节点在目标对象偏移1MB的位置处写入2MB数据的同时,第二存储节点也会在目标对象偏移1MB的位置处写入3MB,这样可能会导致目标对象数据写入错乱,无法得到完整的目标对象。 >
技术实现思路
本申请实施例提供了一种数据存储方法、装置及存储介质,可以用于解决相关技术中存在的追加写请求的并行处理可能会导致数据错乱的问题。所述技术方案如下:一方面,提供了一种数据存储方法,所述方法包括:接收存储节点发送的预占请求,所述预占请求是由所述存储节点在接收到针对目标对象的第一追加写请求后触发的;基于所述预占请求,确定已存储的所述目标对象的当前已上传大小和当前预占大小,所述当前已上传大小为当前已上传完成的部分数据的数据大小,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为所述存储节点所在的数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;若所述当前已上传大小和所述当前预占大小不相等,则向所述存储节点发送加锁通知,所述加锁通知用于指示所述目标对象当前存在正在处理的追加写请求,不允许对所述第一追加写请求进行响应。可选地,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述确定已存储的所述目标对象的当前已上传大小和当前预占大小之后,还包括:若所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与已存储的第二数据偏移相等,则确定第一预占大小;其中,所述第一预占大小为所述第一追加写请求响应完成后所述目标对象的预估已上传大小,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;基于所述第一预占大小,对所述当前预占大小进行更新,以及向所述存储节点发送预占成功通知,所述预占成功通知用于指示对所述当前预占大小更新成功,允许对所述第一追加写请求进行响应。可选地,所述向所述存储节点发送预占成功通知之后,还包括:接收所述存储节点发送的第三数据偏移,所述第三数据偏移为在对所述第一追加写请求响应完成后确定的所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移;基于所述第三数据偏移,对所述第二数据偏移进行更新。可选地,所述确定已存储的所述目标对象的当前已上传大小和当前预占大小之后,还包括:若所述当前已上传大小和所述当前预占大小相等,但所述第一数据偏移与已存储的第二数据偏移不相等,则向所述存储节点发送错误请求通知,所述错误请求通知用于指示所述第一追加写请求为错误请求,不允许对所述第一追加写请求进行响应,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移。可选地,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述向所述存储节点发送加锁通知之后,还包括:在所述第二追加写请求的响应完成后,基于所述第二追加写请求的响应结果,对已存储的所述当前已上传大小和第二数据偏移进行更新,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;若检测到更新后的所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与更新后的所述第二数据偏移相等,则向所述存储节点发送解锁通知,所述解锁通知用于指示所述目标对象当前不存在正在处理的追加写请求,允许对所述第一追加写请求进行响应。另一方面,提供了一种数据存储方法,所述方法包括:接收用户节点发送的针对目标对象的第一追加写请求;基于所述第一追加写请求,向管理节点发送预占请求,所述预占请求用于请求对已存储的所述目标对象的当前预占大小进行更新,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为当前数据存储系统在所述第一追加写请求之前接收的针对所述目标对象的追加写请求;若接收到所述管理节点发送的加锁通知,则基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应,所述加锁通知是由所述管理节点在确定已存储的当前已上传大小和所述当前预占大小不相等时触发,所述当前已上传大小为所述目标对象当前已上传完成的部分数据的数据大小。可选地,所述向管理节点发送预占请求之后,还包括:若接收到所述管理节点发送的预占成功通知,则基于所述预占成功通知确定所述管理节点基于所述预占请求对已存储的所述当前预占大小更新成功,并对所述第一追加写请求进行响应。可选地,所述对所述第一追加写请求进行响应之后,还包括:在对所述第一追加写请求响应完成后,确定所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移,得到第三数据偏移;向所述管理节点发送所述第三数据偏移。可选地,所述向管理节点发送预占请求之后,还包括:若接收到所述管理节点发送的错误请求通知,则基于所述错误请求通知确定所述第一追加写请求为错误请求,不对所述第一追加写请求进行响应。可选地,所述基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应之后,还包括:若接收到所述管理节点发送的解锁通知,则基于所述解锁通知确定所述目标对象当前不存在正在处理的追加写请求,并对所述第一追加写请求进行响应。另一方面,提供了一种数据存储装置,所述装置包括:接本文档来自技高网...
【技术保护点】
1.一种数据存储方法,其特征在于,所述方法包括:/n接收存储节点发送的预占请求,所述预占请求是由所述存储节点在接收到针对目标对象的第一追加写请求后触发的;/n基于所述预占请求,确定已存储的所述目标对象的当前已上传大小和当前预占大小,所述当前已上传大小为当前已上传完成的部分数据的数据大小,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为所述存储节点所在的数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;/n若所述当前已上传大小和所述当前预占大小不相等,则向所述存储节点发送加锁通知,所述加锁通知用于指示所述目标对象当前存在正在处理的追加写请求,不允许对所述第一追加写请求进行响应。/n
【技术特征摘要】
1.一种数据存储方法,其特征在于,所述方法包括:
接收存储节点发送的预占请求,所述预占请求是由所述存储节点在接收到针对目标对象的第一追加写请求后触发的;
基于所述预占请求,确定已存储的所述目标对象的当前已上传大小和当前预占大小,所述当前已上传大小为当前已上传完成的部分数据的数据大小,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为所述存储节点所在的数据存储系统在所述第一追加写请求之前最近一次处理的针对所述目标对象的追加写请求;
若所述当前已上传大小和所述当前预占大小不相等,则向所述存储节点发送加锁通知,所述加锁通知用于指示所述目标对象当前存在正在处理的追加写请求,不允许对所述第一追加写请求进行响应。
2.如权利要求1所述的方法,其特征在于,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述确定已存储的所述目标对象的当前已上传大小和当前预占大小之后,还包括:
若所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与已存储的第二数据偏移相等,则确定第一预占大小;
其中,所述第一预占大小为所述第一追加写请求响应完成后所述目标对象的预估已上传大小,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
基于所述第一预占大小,对所述当前预占大小进行更新,以及向所述存储节点发送预占成功通知,所述预占成功通知用于指示对所述当前预占大小更新成功,允许对所述第一追加写请求进行响应。
3.如权利要求2所述的方法,其特征在于,所述向所述存储节点发送预占成功通知之后,还包括:
接收所述存储节点发送的第三数据偏移,所述第三数据偏移为在对所述第一追加写请求响应完成后确定的所述目标对象已上传完成的部分数据的末尾位置相对于所述目标对象的数据起始位置的偏移;
基于所述第三数据偏移,对所述第二数据偏移进行更新。
4.如权利要求2所述的方法,其特征在于,所述确定已存储的所述目标对象的当前已上传大小和当前预占大小之后,还包括:
若所述当前已上传大小和所述当前预占大小相等,但所述第一数据偏移与已存储的第二数据偏移不相等,则向所述存储节点发送错误请求通知,所述错误请求通知用于指示所述第一追加写请求为错误请求,不允许对所述第一追加写请求进行响应,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移。
5.如权利要求1-4任一所述的方法,其特征在于,所述预占请求携带第一数据偏移,所述第一数据偏移为所述第一追加写请求请求追加的数据的起始位置相对于所述目标对象的数据起始位置的偏移,所述向所述存储节点发送加锁通知之后,还包括:
在所述第二追加写请求的响应完成后,基于所述第二追加写请求的响应结果,对已存储的所述当前已上传大小和第二数据偏移进行更新,所述第二数据偏移为所述目标对象已上传完成的部分数据的数据末尾位置相对于所述目标对象的数据起始位置的偏移;
若检测到更新后的所述当前已上传大小和所述当前预占大小相等,且所述第一数据偏移与更新后的所述第二数据偏移相等,则向所述存储节点发送解锁通知,所述解锁通知用于指示所述目标对象当前不存在正在处理的追加写请求,允许对所述第一追加写请求进行响应。
6.一种数据存储方法,其特征在于,所述方法包括:
接收用户节点发送的针对目标对象的第一追加写请求;
基于所述第一追加写请求,向管理节点发送预占请求,所述预占请求用于请求对已存储的所述目标对象的当前预占大小进行更新,所述当前预占大小为第二追加写请求响应完成后的预估已上传大小,所述第二追加写请求为当前数据存储系统在所述第一追加写请求之前接收的针对所述目标对象的追加写请求;
若接收到所述管理节点发送的加锁通知,则基于所述加锁通知确定所述目标对象当前存在正在处理的追加写请求,不对所述第一追加写请求进行响应,所述加锁通知是由所述管理节点在确定已存储的当前已上传大小和所述当前预占大小不相等时触发,所述当前已上传大小为所述目标对象当前已上传完成的部分数据的数据...
【专利技术属性】
技术研发人员:丁智勇,黄华东,洪溪,
申请(专利权)人:杭州海康威视系统技术有限公司,
类型:发明
国别省市:浙江;33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。