对象存储批量读取及写入方法、客户端、存储网关及介质
文献发布时间:2023-06-19 11:52:33
技术领域
本发明实施例涉及对象存储领域,尤其涉及一种对象存储批量读取及写入方法、客户端、存储网关及介质。
背景技术
对象存储(Object Storage)最早是亚马逊2006年推出的S3(Simple StorageService)。对象存储是面向对象/文件的、海量的互联网存储,它也可以直接被称为“云存储”。对象尽管是文件,它是已被封装的文件(编程中的对象就有封装性的特点),也就是说,在对象存储系统里,不能直接打开/修改文件,但可以像ftp一样上传文件,下载文件等。
以分布式对象存储为例,在实现http类型应用客户端在读写时是基于S3 RESTAPI标准。然而,现有的S3类型存储接口,不管是AWS还是公有云等产品,如果要写多个文件,一次请求只能写一个文件,客户端需要分别封装多个文件的PUT写入请求,然后以一定并发发送请求,交互非常耗用客户端资源和网络资源。读取文件时,有时只需要读取文件的部分分片,即部分范围数据,通常的做法是使用GET读取请求来指定多个不同的范围,而且可能需要单独封装不同分片的GET读取请求,然后以一定并发发送请求。特别是对不同文件的分片进行GET读取时,如果文件数很多,就得构造很多请求,交互很多次,同样很耗费系统整体资源,并且效率低。
发明内容
本发明实施例的目的是提供一种对象存储批量读取及写入方法、客户端、存储网关及存储介质,通过提供基于POST请求的批量读写接口,减少客户端与存储网关间的请求交互次数,提高读写效率,降低客户端资源消耗。
第一方面,本发明实施例提供了一种对象存储批量读取方法,应用于客户端;所述方法包括:
在接收到针对目标桶信息对应的至少一个指定对象的读取操作指令时,封装读取POST请求;所述读取PSOT请求包括读取请求头、位于读取请求头或读取请求行的目标桶信息、位于读取请求体的待读取分片范围;
将所述读取POST请求发送给所述存储网关,以供所述存储网关在接收到所述读取POST请求后,根据所述读取POST请求进行回应;
根据所述存储网关的回应读取所述指定对象的待读取分片范围的多个分片数据。
在一些实施例中,所述封装读取POST请求,包括:
在读取请求行中确定请求方法为读取;
将所述目标桶信息放入读取请求头中;
在读取请求体的正文中添加多级标签,以标识所述指定对象及所述指定对象的指定范围的分片数据,其中,所述指定对象的数量为1。
在一些实施例中,所述封装读取POST请求,还包括:
按照存储定义的API接口规范封装读取POST请求,其中,所述API接口基于S3 RESTAPI协议标准。
在一些实施例中,若所述指定对象的数量大于1,则所述在请求体的正文中添加多级标签,以标识所述指定对象及所述指定对象的指定范围的分片数据,包括:
在读取请求体的正文中添加多级标签,且对不同的指定对象增加不同的标识,以标识所述指定对象及所述指定对象的指定范围的分片数据。
在一些实施例中,所述方法还包括:
若所述读取POST请求包含至少两个指定对象,则所述指定对象的数量至多200个,且每个所述指定对象的分片数据至多200个;若所述读取POST请求仅包含一个指定对象,则所述指定对象的分片数据的数量至多1000个。
第二方面,本发明实施例提供了一种对象存储批量写入方法,应用于客户端;所述方法包括:
创建写入POST请求,所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据;
将所述写入POST请求发送给存储网关,以供所述存储网关在接收到所述写入POST请求后,解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端;
在接收到所述响应结果后,若所述响应结果中存在请求通过的待处理对象,则解析所述响应结果中每个所述请求通过的待处理对象的处理结果。
在一些实施例中,所述创建写入POST请求,所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据,包括:
在写入请求行中确定请求方法为写入;
将所述目标桶信息放入写入请求头或写入请求行中;
在所述写入请求头中设置对象分割线;
在写入请求体的正文中,以对象分割线开始;
封装第一个待处理对象,其中所述待处理对象包括对象名,待处理对象的分片数据以及附加属性;
继续封装第二个待处理对象,且通过所述对象分割线将所述第一个待处理对象与所述第二个待处理对象分隔,直至完成所有待处理对象的封装;
添加结束分割线,完成所述写入POST请求的封装。
在一些实施例中,所述创建写入POST请求,还包括:
按照存储定义的API接口规范封装写入POST请求,其中,所述API接口基于S3 RESTAPI协议标准。
在一些实施例中,所述方法还包括:
若所述响应结果中存在请求未通过的待处理对象,则接收所述存储网关发送的请求未通过的待处理对象的错误码;
根据所述错误码判断未通过原因,并根据未通过原因修正所述未通过的待处理对象,以重新根据修正后的待处理对象创建写入POST请求。
第三方面,本发明实施例还提供一种对象存储批量读取方法,应用于存储网关,所述方法包括:
在接收到所述客户端发送的读取POST请求后,根据所述读取POST请求进行回应,其中,所述读取POST请求包括读取请求头、位于读取请求头或请求行的目标桶信息、位于读取请求体的至少一个指定对象及所述指定对象的分片数据,且所述指定对象为请求通过的待处理对象。
在一些实施例中,所述根据所述读取POST请求进行回应,包括:
对所述读取POST请求进行合法性校验;
在所述读取POST请求通过所述合法性校验时,解析所述读取请求体的正文,获得所述指定对象及所述指定对象的指定范围;
在已存储的分片数据中查找所述指定范围对应的位置;
根据所述位置对所述已存储的分片数据的存储顺序进行整合和/或排序,得到读取顺序;
按照所述读取顺序读取所述指定范围的分片数据;
将所述指定范围的分片数据封装在回应结果中,且将所述回应结果发送给所述客户端。
在一些实施例中,所述指定对象的数量为1,则所述将所述指定范围的分片数据封装在回应结果中,包括:
将回应结果放在回应请求行中;
在回应请求头中设置分片分割线;
在回应请求体的正文中以分片分割线开始;
封装所述指定对象的所述指定范围的第一个分片数据,所述第一个分片数据包括分片范围及数据;
封装指定范围的第二个分片数据,直至封装所述指定范围内所有的分片数据,且相邻分片数据之间通过分片分割线分隔;
添加分片分割线以结束所述指定范围的分片数据的封装。
在一些实施例中,所述指定对象的数量大于1,则将所述指定范围的分片数据封装在回应结果中,包括:
将回应结果放在回应请求行中;
在回应请求头中设置分片分割线;
在回应请求体的正文中以分片分割线开始;
封装第一个指定对象的指定范围的分片数据,且所述第一个指定对象的指定范围的分片数据之间通过分片分割线分割;
封装第二个指定对象的指定范围的分片数据,直至封装所有的指定对象的指定范围的分片数据;且所述第二个指定对象的指定范围的分片数据之间通过分片分割线分割;
添加对象分割线以结束所有的指定对象的指定范围的分片数据的封装。
第四方面,本发明实施例还提供一种对象存储批量写入方法,应用于存储网关,所述方法包括:
接收客户端发送的写入POST请求;所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据;
解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端。
在一些实施例中,所述解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端,包括:
解析所述写入请求头,对所述写入POST请求进行合法性校验,得到与所述待处理对象对应的响应结果;
将所述响应结果放置在响应请求行中;
设置对象分割线,且将所述对象分割线放置在所述响应请求头中;
在响应请求体的正文以响应分割线开始;
封装第一个对象的回应结果,所述回应结果包括对象名、回应码及附加属性;
封装第二个对象的回应结果,且通过响应分割线将所述第一个对象的回应结果与第二个对象的回应结果分隔,直至完成所有对象的回应结果的封装;
添加结束分割线,完成所述响应结果的封装。
在一些实施例中,所述对所述写入POST请求进行合法性校验,得到与所述待处理对象对应的响应结果,包括:
对所述写入POST请求的请求接口合法性进行校验,其中,在所述写入POST请求的请求接口合法性校验不通过时,得到所述写入POST请求的请求接口合法性校验不通过的第一响应结果;
在所述写入POST请求的请求接口合法性校验通过时,得到所述写入POST请求的请求接口合法性校验通过的第二响应结果,并校验所述目标桶信息和待处理对象的权限;
在所述目标桶信息和指定对象的权限校验通过时,得到校验通过的第三响应结果,且存储所述目标桶信息、待处理对象及分片数据;
在所述目标桶信息和待处理对象的权限校验不通过时,得到校验不通过的第四响应结果。
第五方面,本发明实施例提供了一种客户端,所述客户端包括:
至少一个第一处理器,以及
第一存储器,所述第一存储器与所述第一处理器通信连接,所述第一存储器存储有可被所述至少一个第一处理器执行的指令,所述指令被所述至少一个第一处理器执行,以使所述至少一个处理器能够执行上述中任一项所述的方法。
第六方面,本发明实施例提供了一种存储网关,所述存储网关包括:
至少一个第二处理器,以及
第二存储器,所述第二存储器与所述第二处理器通信连接,所述第二存储器存储有可被所述至少一个第二处理器执行的指令,所述指令被所述至少一个第二处理器执行,以使所述至少一个处理器能够执行上述中任一项所述的方法。
第七方面,本发明实施例提供了一种非易失性计算机可读写存储介质,所述计算机可读写存储介质存储有计算机可执行指令,当所述计算机可执行指令被客户端或存储网关执行时,使所述客户端执行如上所述的方法或存储网关执行如上所述的方法。
本发明实施例的对象存储批量读取及写入方法、客户端、存储网关及存储介质,由于写入的时候可以写入至少一个对象,因此,在客户端读取分片数据时,类似地,可以从存储网关读取一个指定对象,或者是多个指定对象,将读取POST请求发送给所述存储网关,以供所述存储网关根据所述读取POST请求进行回应,根据所述存储网关的回应读取所述指定对象的多个分片数据,从而实现对多个分片数据的批量读取。
并且,在客户端将批量对象写入存储网关时,创建写入POST请求,并且,所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据,实现一个目标桶信息对应至少两个待处理对象及其分片数据,即一个写入POST请求包括多个待处理对象及其分片数据;将所述写入POST请求发送给存储网关,存储网关解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端,根据响应结果写入待处理对象及分片数据,从而实现待处理对象及分片数据的全部写入或部分写入。本申请在需要写入海量对象、读取海量对象的分片数据时,能有效降低交互次数,提高访问效率,降低客户端资源消耗。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是本发明对象存储批量写入方法的一个实施例的流程示意图;
图2是本发明对象存储批量写入及读取方法的一个实施例的交互示意图;
图3是本发明对象存储批量写入方法的一个实施例的交互示意图;
图4是本发明对象存储批量读取方法的一个实施例的流程示意示意图;
图5是本发明对象存储批量读取方法的一个实施例的读取一个对象的交互示意图;
图6是本发明对象存储批量读取方法的一个实施例的读取多个对象的流程示意图;
图7是本发明对象存储批量写入方法的一个实施例的流程示意图;
图8是本发明对象存储批量写入方法的又一个实施例的流程示意图;
图9是本发明第一对象存储批量写入装置的一个实施例的结构示意图;
图10是本发明第一对象存储批量读取装置的一个实施例的结构示意图;
图11是本发明第二对象存储批量写入装置的一个实施例的结构示意图;
图12是本发明第二对象存储批量读取装置的一个实施例的结构示意图;
图13是本发明客户端的一个实施例中第一控制器的硬件结构示意图;
图14是本发明存储网关的一个实施例中第二控制器的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供的对象存储批量读取/写入方法可以应用于客户端。其中,客户端可以为智能终端设备,如智能手机、电脑、Ipad等终端设备。
本发明实施例提供的对象存储批量读取/写入方法可以应用于存储网关,存储网关可以是服务器等设备。
可以理解的是,客户端中,设置有第一控制器,作为客户端的主控中心;存储网关中,设置有第二控制器,作为存储网关的主控中心。通过提供基于POST请求的批量读写接口,减少客户端与存储网关间的请求交互次数,提高读写效率,降低客户端资源消耗。
请参阅图1,图1为本发明实施例提供的对象存储批量写入方法的流程示意图,所述方法可以由客户端中的第一控制器13执行,如图1和图2所示,所述方法应用于客户端,所述方法包括:
101:创建写入POST请求,所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据。
具体地,写入POST请求,是指请求方法为POST的HTTP请求报文,请求报文包括请求行、请求头和请求体,其中,在请求行中,包括请求方法、URL和协议;请求头包括头部字段名、值,可以将目标桶信息放在请求行或者是请求头中;请求体包括请求数据,即至少两个待处理对象及所述待处理对象的分片数据。
目标桶信息,可以理解为bucket(存储空间),在桶里面,全部都是对象,每个对象有多个分片数据。并且,对象即客户端业务中的一个文件,对象存储一般把存储进来的文件成为对象,因此,在本案中,对象即文件。
可以理解的是,本案中的目标桶信息是指一个桶,一个桶内有至少两个待处理对象,每个对象拥有唯一的文件名,每个对象还可以有单独的元数据(附加属性)以及分片数据,在构造完一个写入POST请求时,可以包含200个或者更多的待处理对象同时写入存储网关中。
在其中一些实施例中,所述创建写入POST请求,可以包括:
按照存储定义的API接口规范封装写入POST请求,其中,所述API接口基于S3 RESTAPI协议标准。
具体地,S3为Amazon S3,全称是Amazon Simple Storage Service,REST,是一种Web服务架构。简单来说,资源是由URI进行识别和定位,对资源的操作是通过HTTP方法来定义,HTTP方法包括GET、PUT、POST、DELETE和HEAD,构成REST中的动作,这些HTTP方法通常会匹配如下的CRUD动作:
Create:POST;
Read:GET;
Update:PUT/PATCH;
Delete:DELETE。
但上述匹配并不是严格限制,有时候PUT可以用来创建新资源,POST用来更新资源,POST请求的非幂等性的特点使其成为一个非常灵活的方法。
写入POST请求中最关键的是如何将多个文件数据进行一起传递。为了提高效率,限制一个写入POST请求只能批量写同一个桶的文件,因此桶名就只有一个,直接放在请求头或请求行中,然后将待处理对象的文件名和分片数据等放入请求正文中,为了分割不同文件数据,还定义“分割线”在请求头中。请求正文以“--分割线”开始,以“--分割线--”表示结束,不同文件按分割线分割,存储处理数据时将按照分割线来识别不同对象(回应中同理采用分割线分割不同的文件回应信息)。生成完请求后客户端将请求发送给存储网关。
在其中一些实施例中,所述创建写入POST请求,所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据,可以包括:
在写入请求行中确定请求方法为写入;
将所述目标桶信息放入写入请求头或写入请求行中;
在所述写入请求头中设置对象分割线;
在写入请求体的正文中,以对象分割线开始;
封装第一个待处理对象,其中所述待处理对象包括对象名,待处理对象的分片数据以及附加属性;
继续封装第二个待处理对象,且通过所述对象分割线将所述第一个待处理对象与所述第二个待处理对象分隔,直至完成所有待处理对象的封装;
添加结束分割线,完成所述写入POST请求的封装。
具体地,如图3所示,客户端构造写入POST请求的过程如下:
1、在请求行的URL中填入put表示写;
2、将目标桶(bucketname)放于请求头中;
3、设置对象分割线(boundary)放于请求头中;
4、加入空行;
5、请求正文以“--分割线”开始;
6、封装第一个对象:对象名(Key1)、附加属性(Additional)、文件内容(Content);
7、添加“--分割线”表示存在下一个对象;
8、封装第二个对象:对象名(Key2)、附加属性(Additional)、文件内容(Content);
9、依次封装其他对象;
10、添加“--分割线--”表示结束,没有其他对象。
通过将多个待处理对象封装到写入POST请求中,一起发送给网关存储,存储处理完整个写入POST请求后进行响应,达到批量写多个对象的目的。
102:将所述写入POST请求发送给存储网关,以供所述存储网关解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端。
客户端在创建写入POST请求后,将所述写入POST请求发送给存储网关。存储网关在接收到写入POST请求后,解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端。
在其中一些实施方式中,所述解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端,包括:
解析所述写入请求头,对所述写入POST请求进行合法性校验,得到与所述待处理对象对应的响应结果;
将所述响应结果放置在响应请求行中;
设置对象分割线,且将所述对象分割线放置在所述响应请求头中;
在响应请求体的正文以响应分割线开始;
封装第一个对象的回应结果,所述回应结果包括对象名、回应码及附加属性;
封装第二个对象的回应结果,且通过响应分割线将所述第一个对象的回应结果与第二个对象的回应结果分隔,直至完成所有对象的回应结果的封装;
添加结束分割线,完成所述响应结果的封装。
具体地,如图3所示,存储网关回应客户端的写入POST请求的封装过程如下:
1、将请求响应结果放于请求行中;
2、设置对象分割线(boundary)放于请求头中;
3、加入空行;
4、回应正文以“--分割线”开始;
5、封装第一个对象写回应:对象名(Key)、错误码(Result)、附加属性(Additional);
6、添加“--分割线”表示存在下一个回应;
7、封装第二个对象写回应:对象名(Key)、错误码(Result)、附加属性(Additional);
8、依次封装其他对象;
9、添加“--分割线--”表示结束,没有其他回应。
并且,存储网关在进行请求响应时,会进行校验,在其中一些实施例中,存储网关对所述写入POST请求进行合法性校验,得到与所述待处理对象对应的响应结果,且存储所述目标桶信息、至少两个待处理对象及分片数据,可以包括:
对所述写入POST请求的请求接口合法性进行校验,其中,在所述写入POST请求的请求接口合法性校验不通过时,得到所述写入POST请求的请求接口合法性校验不通过的第一响应结果;
在所述写入POST请求的请求接口合法性校验通过时,得到所述写入POST请求的请求接口合法性校验通过的第二响应结果,并校验所述目标桶信息和待处理对象的权限;
在所述目标桶信息和待处理对象的权限校验通过时,得到校验通过的第三响应结果,且存储所述目标桶信息、待处理对象及分片数据;
在所述目标桶信息和待处理对象的权限校验不通过时,得到校验不通过的第四响应结果。
具体地,存储网关收到写入POST请求后,首先,进行写入POST请求的请求接口的合法性校验,存储支持这样的批量POST接口(不支持的存储会认为这是非法请求),即在所述写入POST请求的请求接口合法性校验不通过时,得到所述写入POST请求的请求接口合法性校验不通过的第一响应结果;然后在所述写入POST请求的请求接口合法性校验通过时,得到所述写入POST请求的请求接口合法性校验通过的第二响应结果,并校验所述目标桶信息和待处理对象的权限,如提取目标桶信息校验桶的存在和正确性等其他权限等,否则直接返回请求错误。最后是进行文件的批量存储业务,即在所述目标桶信息和待处理对象的权限校验通过时,得到校验通过的第三响应结果,且存储所述目标桶信息、待处理对象及分片数据,具体将不同文件名和对应的元数据和数据提取后,按照存储内部的通用存储做法将文件写入底层存储介质。比如,小文件可以合并为大文件写入,保证海量文件性能。不管是怎么样的存储方式,当每个待处理对象处理后,都会有单独对应的结果,会体现在每个对象执行的返回错误码中。
可以理解的是,在所述目标桶信息和待处理对象的权限校验不通过时,得到校验不通过的第四响应结果,即不管是否通过校验,都会返回对应的响应结果,以使客户端得到响应结果。
通过对每个待处理对象进行单独响应,保证不会因为少量文件写入失败而导致整体请求失败,整体失败意味着客户端需要重新全部写入,对客户端而言不够友好,也不利于性能体验。当存储网关对写入POST请求中的每个待处理文件处理完成后,存储网关保存所有的响应结果,并进行回应封装。
103:在接收到所述响应结果后,若所述响应结果中存在请求通过的待处理对象,则解析所述响应结果中每个所述请求通过的待处理对象的处理结果。
客户端在接收到存储网关返回的响应结果后,会查看响应结果,从而判断是否请求整体成功或部分成功或全部失败,当响应结果中存在请求通过的待处理对象时,则解析请求通过的处理结果。
在其中一些实施例中,所述方法还包括:
若所述响应结果中存在请求未通过的待处理对象,则接收所述存储网关发送的请求未通过的待处理对象的错误码;
根据所述错误码判断未通过原因,并根据未通过原因修正所述未通过的待处理对象,以重新根据修正后的待处理对象创建写入POST请求。
具体地,当存在部分校验未通过时,响应结果会存在请求未通过的待处理对象,由于不管是否校验通过,都会返回对应的响应结果,并且,请求未通过会产生错误码,客户端可以根据错误码判断未通过原因,从而可以根据未通过原因修正未通过的待处理对象,比如,请求非法,或者是权限不足,如超过单次限制的对象数量,那么客户端可以减少对象数量,使得验证能够通过;再者,客户端可以重新写入可以封装的POST请求,避免已经成功的对象重新写入,覆盖原有的对象,也可以和其他待写入的对象一起封装,发起写入POST请求,而对于存储网关而言,是无状态写入,不会影响到已经写入成功的文件。
本发明实施例的对象存储批量处理方法、客户端、存储网关,在客户端将批量对象写入存储网关时,创建写入POST请求,并且,所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据,实现一个目标桶信息对应至少两个待处理对象及其分片数据,即一个写入POST请求包括多个待处理对象及其分片数据;将所述写入POST请求发送给存储网关,存储网关解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端,根据响应结果写入待处理对象及分片数据,从而实现待处理对象及分片数据的全部写入或部分写入。
请参阅图4,在将待处理对象及分片数据写入后,客户端可以对已存储在存储网关的对象及分片数据进行读取操作,因此,本发明实施例还提供一种对象存储批量读取方法,应用于客户端,所述方法还包括:
104:在接收到针对所述目标桶信息对应的至少一个指定对象的读取操作指令时,封装读取POST请求;所述读取PSOT请求包括读取请求头、位于读取请求头或读取请求行的目标桶信息、位于读取请求体的待读取分片范围;
105:将所述读取POST请求发送给所述存储网关,以供所述存储网关在接收到所述读取POST请求后,根据所述读取POST请求进行回应;其中,所述指定对象为处理结果中请求通过的待处理对象;
106:根据所述存储网关的回应读取所述指定对象的多个分片数据。
具体地,客户端在接收到针对目标桶信息对应的至少一个指定对象的读取操作指令时,封装读取POST请求,然后,将所述读取POST请求发送给所述存储网关,所述存储网关在接收到所述读取POST请求后,根据所述读取POST请求进行回应;其中,所述指定对象为处理结果中请求通过的待处理对象;最后,根据所述存储网关的回应读取所述指定对象的多个分片数据。
客户端需要读取存储在存储网关内的对象时,可以是请求读取单个桶内的单个对象的多个分片数据,也可以是请求读取单个桶内的多个对象的多个分片数据;将要读取的对象定义为指定对象,并且,所述指定对象为处理结果中对应的待处理对象。读取POST请求内封装有多个分片数据的信息,且将至少一个所述指定对象对应的读取POST请求发送给所述存储网关。
在请求读取单个桶内的单个对象的多个分片数据时,获得分片数据偏移的范围,比如,一个对象大小为100字节,目前的读取操作指令对应0-5和10-25范围的分片数据,那么,读取POST请求会封装有目标桶信息、指定对象的名称和分片数据需要读取的范围0-5和10-25,即读取POST请求中不会包含实际的数据,请求的内容类型是固定的,为了简化请求的生成,提高请求生成的效率,可以使用xml格式的请求消息体来表示指定对象的文件名和需要读取的分片范围,分片最大个数可以达到1000个。
在其中一些实施例中,客户端封装读取POST请求,可以包括:
在读取请求行中确定请求方法为读取;
将所述目标桶信息放入读取请求头中;
在读取请求体的正文中添加多级标签,以标识所述指定对象及所述指定对象的指定范围的分片数据,其中,所述指定对象的数量为1。
具体地,如图5所示,客户端封装读取POST请求的过程如下:
1、在请求行的URL中填入get表示读;
2、将目标桶(bucketname)放于请求头中;
3、加入空行;
4、请求正文以xml格式;
5、一级标签
6、二级标签
7、三级标签
8、三级标签
9、三级标签
在封装完读取POST请求后,再将读取POST请求发送给存储网关,存储网关在接收到读取POST请求后,对读取POST请求进行回应。
对应地,在封装读取POST请求时,按照存储定义的API接口规范封装读取POST请求,其中,所述API接口基于S3 REST API协议标准。
在其中一些实施方式中,存储网关在接收到读取POST请求后,会根据所述读取POST请求进行回应,可以包括:
对所述读取POST请求进行合法性校验;
在所述读取POST请求通过所述合法性校验时,解析所述读取请求体的正文,获得所述指定对象及所述指定对象的指定范围;
在已存储的分片数据中查找所述指定范围对应的位置;
根据所述位置对所述已存储的分片数据的存储顺序进行整合和/或排序,得到读取顺序;
按照所述读取顺序读取所述指定范围的分片数据;
将所述指定范围的分片数据封装在回应结果中,且将所述回应结果发送给所述客户端。
具体地,合法性的校验可以是先进行统一的请求参数校验流程,以确保请求合法;然后,解析消息正文中的具体文件请求。在获取单个指定对象的多个分片数据时,为了提高效率和降低数据回应冗余,在已存储的分片数据中查找所述读取POST请求中的至少一个指定对象的所在位置,然后,去读取指定对象对应的分片数据,并且,在读取的时候,可以根据所述所在位置对所述已存储的分片数据的存储顺序进行整合和/或排序,得到读取顺序,例如,要读取的范围是分片0-5和4-10,可以合并为一个分片0-10,这样就不用重复读取或封装4-5的分片数据,又例如,要读取的分片范围为20-50和10-15,如果先读取10-15,再读取20-50,对于存储网关的存储底层会更友好,时延更低,可以完全避免将10-50的范围全部读取,即可以排序,调整读取顺序,优化了原有的读取顺序;在得到优化后的读取顺序后,按照读取顺序读取所述分片数据,使得读取的效率更高。
在其中一些实施方式中,当指定对象的数量为1时,所述存储网关将所述指定范围的分片数据封装在回应结果中,可以包括:
将回应结果放在回应请求行中;
在回应请求头中设置分片分割线;
在回应请求体的正文中以分片分割线开始;
封装所述指定对象的所述指定范围的第一个分片数据,所述第一个分片数据包括分片范围及数据;
封装指定范围的第二个分片数据,直至封装所述指定范围内所有的分片数据,且相邻分片数据之间通过分片分割线分隔;
添加分片分割线以结束所述指定范围的分片数据的封装。
具体地,存储网关在读取分片数据时同样需要回应客户端,当指定对象的数量为1时,如图5所示,存储网关回应客户端相应的过程如下:
1、将请求响应结果放于请求行中;
2、设置分片分割线(boundary)放于请求头中;
3、加入空行;
4、回应正文以“--分割线”开始;
5、封装第一个分片数据:范围(Range)、数据(Content);
6、添加“--分割线”表示存在下一个分片数据;
7、封装第二个分片数据:范围(Range)、数据(Content);
8、依次封装其他分片;
9、添加“--分割线--”表示结束,没有其他分片数据。
最后,客户端接收到回应后,按照顺序解析分片数据,如果存在已经合并的分片,需要按照分片的范围确定请求的数据包含于哪些分片中,按照自己的业务需要提取数据给业务上层。分片数据的读取同样可能存在失败,可以根据错误码进行重试请求或联系运维定位问题。
在读取单个桶的多个对象的多分片数据时,多个对象分别的多个不同分片数据包含在一个读取POST请求中一起发送给存储网关,存储网关处理完整个读取POST请求后回应该请求,达到批量读多个对象的多个分片数据的目的。
在其中一些实施方式中,所述指定对象的数量大于1,即客户端要读取的指定对象为多个时,则所述客户端在请求体的正文中添加多级标签,以标识所述指定对象及所述指定对象的指定范围的分片数据,包括:
在读取请求体的正文中添加多级标签,且对不同的指定对象增加不同的标识,以标识所述指定对象及所述指定对象的指定范围的分片数据。
请参阅图6,在同一个桶内,多对象的多分片数据的读取是由单个对象的多分片数据读取的扩展,因此,客户端需要确认请求的POST文件是否属于同一个桶内,否则会导致请求失败。
具体地,相对单个指定对象而言,对不同的指定对象增加不同的文件标识,可以采用新增xml二级标签来区分不同的指定对象,然后,每个指定对象的多个分片数据均包含于各自的三级标签
如图6所示,客户端构造针对一个桶内多个指定对象的多个分片数据的读取POST请求过程如下:
1、在请求行的URL中填入get表示读;
2、将目标桶(bucketname)放于请求头中;
3、加入空行;
4、请求正文以xml格式;
5、一级标签
6、二级标签
7、三级标签
8、三级标签
9、三级标签
10、依次封装其他对象Key2……
然后,存储网关收到读取POST请求后,需要解析不同的指定对象,然后解析每个指定对象的多个分片数据。同样,如果文件存在重复或者分片存在重叠,存储会进行合并,以提高读取速度和降低回应包大小。例如文件a读取0-5和20-25,文件a读取2-10、40-50,会合并为文件a读取0-10、20-25、40-50。每个文件的读取是分离的,存储先查找对应文件数据的存储位置,然后并发读取不同文件的数据,完成后分别封装。因为包含了多个对象,因此请求正文中需要实现两种分割线:对象分割线和分片分割线。对象分割线定义在请求头中,请求正文中使用对象分割线标识每个对象的区间。而每个对象区间还包含多个分片,因此分片分割线定义在每个对象区间中,每个对象的分片分割线是不同的,每个单独的分片使用的自己所属对象单独的分割线区分。封装完后将回应回复给客户端。
当所述指定对象的数量大于1,则所述存储网关将所述指定范围的分片数据封装在回应结果中,可以包括:
将回应结果放在回应请求行中;
在回应请求头中设置分片分割线;
在回应请求体的正文中以分片分割线开始;
封装第一个指定对象的指定范围的分片数据,且所述第一个指定对象的指定范围的分片数据之间通过分片分割线分割;
封装第二个指定对象的指定范围的分片数据,直至封装所有的指定对象的指定范围的分片数据;且所述第二个指定对象的指定范围的分片数据之间通过分片分割线分割;
添加对象分割线以结束所有的指定对象的指定范围的分片数据的封装。
具体地,请参阅图6,存储回应客户端相应的过程如下:
1、将请求响应结果放于请求行中;
2、设置对象分割线(boundary1)放于请求头中;
3、加入空行;
4、回应正文以“--对象分割线”开始;
5、封装第一个对象数据:对象名(Key1)、错误码(Result)、分片分割线(boundary2);
6、数据以“--分片分割线”开始;
7、封装第一个分片数据:范围(Range)、数据(Content);
8、添加“--分割线”表示存在下一个分片数据;
9、封装第二个分片数据:范围(Range)、数据(Content);
10、依次封装其他分片;
11、添加“--分片分割线--”表示结束,此对象没有其他分片数据。
12、依次封装其他对象;
13、添加“--对象分割线--”表示结束,没有其他对象。
最后,客户端收到回应后,如果是成功的响应,则依次解析消息正文中的对象名,每个对象名下面解析不同分片的数据。由于文件和分片可能是被合并后返回的,不能一一对应,因此要根据文件名和分片数据范围获取需要的数据。对于失败的文件或分片,同样可以识别错误码并进行重试等处理。
本发明实施例的对象存储批量处理方法,由于写入的时候可以写入至少一个对象,因此,在客户端读取分片数据时,类似地,可以从存储网关读取一个指定对象,或者是多个指定对象,将读取POST请求发送给所述存储网关,以供所述存储网关根据所述读取POST请求进行回应,根据所述存储网关的回应读取所述指定对象的多个分片数据,从而实现对多个分片数据的批量读取。本申请在需要写入海量对象、读取海量对象的分片数据时,能有效降低交互次数,提高访问效率,降低客户端资源消耗。
请参阅图7,图7为本发明实施例提供的对象存储批量写入方法的流程示意图,所述方法可以由存储网关中的第二控制器23执行,如图7所示,所述方法应用于存储网关,所述方法包括:
201:接收客户端发送的写入POST请求,所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据。
202:解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端。
本发明实施例的对象存储批量写入方法、客户端和存储网关,在客户端将批量对象写入存储网关时,创建写入POST请求,并且,所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据,实现一个目标桶信息对应至少两个待处理对象及其分片数据,即一个写入POST请求包括多个待处理对象及其分片数据;将所述写入POST请求发送给存储网关,存储网关解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端,根据响应结果写入待处理对象及分片数据,从而实现待处理对象及分片数据的全部写入或部分写入。
在其中一些实施例中,所述解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端,包括:
解析所述写入请求头,对所述写入POST请求进行合法性校验,得到与所述待处理对象对应的响应结果;
将所述响应结果放置在响应请求行中;
设置对象分割线,且将所述对象分割线放置在所述响应请求头中;
在响应请求体的正文以响应分割线开始;
封装第一个对象的回应结果,所述回应结果包括对象名、回应码及附加属性;
封装第二个对象的回应结果,且通过响应分割线将所述第一个对象的回应结果与第二个对象的回应结果分隔,直至完成所有对象的回应结果的封装;
添加结束分割线,完成所述响应结果的封装。
在其中一些实施例中,所述对所述写入POST请求进行合法性校验,得到与所述待处理对象对应的响应结果,包括:
对所述写入POST请求的请求接口合法性进行校验,其中,在所述写入POST请求的请求接口合法性校验不通过时,得到所述写入POST请求的请求接口合法性校验不通过的第一响应结果;
在所述写入POST请求的请求接口合法性校验通过时,得到所述写入POST请求的请求接口合法性校验通过的第二响应结果,并校验所述目标桶信息和待处理对象的权限;
在所述目标桶信息和指定对象的权限校验通过时,得到校验通过的第三响应结果,且存储所述目标桶信息、待处理对象及分片数据;
在所述目标桶信息和待处理对象的权限校验不通过时,得到校验不通过的第四响应结果。
本发明还提供一种对象存储批量读取方法,当客户端向存储网关读取数据时,所述方法应用于存储网关,所述方法可以包括:
200:在接收到所述客户端发送的读取POST请求后,根据所述读取POST请求进行回应,其中,所述读取POST请求包括读取请求头、位于读取请求头或请求行的目标桶信息、位于读取请求体的至少一个指定对象及所述指定对象的分片数据,且所述指定对象为请求通过的待处理对象。
在其中一些实施例中,如图8所示,所述根据所述读取POST请求进行回应,包括:
203:对所述读取POST请求进行合法性校验;
204:在所述读取POST请求通过所述合法性校验时,解析所述读取请求体的正文,获得所述指定对象及所述指定对象的指定范围;
205:在已存储的分片数据中查找所述指定范围对应的位置;
206:根据所述位置对所述已存储的分片数据的存储顺序进行整合和/或排序,得到读取顺序;
207:按照所述读取顺序读取所述指定范围的分片数据;
208:将所述指定范围的分片数据封装在回应结果中,且将所述回应结果发送给所述客户端。
在其中一些实施方式中,所述指定对象的数量为1,则所述将所述指定范围的分片数据封装在回应结果中,包括:
将回应结果放在回应请求行中;
在回应请求头中设置分片分割线;
在回应请求体的正文中以分片分割线开始;
封装所述指定对象的所述指定范围的第一个分片数据,所述第一个分片数据包括分片范围及数据;
封装指定范围的第二个分片数据,直至封装所述指定范围内所有的分片数据,且相邻分片数据之间通过分片分割线分隔;
添加分片分割线以结束所述指定范围的分片数据的封装。
在其中一些实施方式中,所述指定对象的数量大于1,则将所述指定范围的分片数据封装在回应结果中,包括:
将回应结果放在回应请求行中;
在回应请求头中设置分片分割线;
在回应请求体的正文中以分片分割线开始;
封装第一个指定对象的指定范围的分片数据,且所述第一个指定对象的指定范围的分片数据之间通过分片分割线分割;
封装第二个指定对象的指定范围的分片数据,直至封装所有的指定对象的指定范围的分片数据;且所述第二个指定对象的指定范围的分片数据之间通过分片分割线分割;
添加对象分割线以结束所有的指定对象的指定范围的分片数据的封装。
相应的,如图9所示,本发明实施例还提供了一种第一对象存储批量写入装置,可以用于客户端,第一对象存储批量读写装置700包括:
写入请求创建模块701,用于创建写入POST请求,所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据;
发送模块702,用于将所述写入POST请求发送给存储网关,以供所述存储网关在接收到所述写入POST请求后,解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端;
响应接收模块703,用于在接收到所述响应结果后,若所述响应结果中存在请求通过的待处理对象,则解析所述响应结果中每个所述请求通过的待处理对象的处理结果。
本发明实施例,在客户端将批量对象写入存储网关时,创建写入POST请求,并且,所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据,实现一个目标桶信息对应至少两个待处理对象及其分片数据,即一个写入POST请求包括多个待处理对象及其分片数据;将所述写入POST请求发送给存储网关,存储网关解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端,根据响应结果写入待处理对象及分片数据,从而实现待处理对象及分片数据的全部写入或部分写入。
在其他实施例中,写入请求创建模块701,还用于:
在写入请求行中确定请求方法为写入;
将所述目标桶信息放入写入请求头或写入请求行中;
在所述写入请求头中设置对象分割线;
在写入请求体的正文中,以对象分割线开始;
封装第一个待处理对象,其中所述待处理对象包括对象名,待处理对象的分片数据以及附加属性;
继续封装第二个待处理对象,且通过所述对象分割线将所述第一个待处理对象与所述第二个待处理对象分隔,直至完成所有待处理对象的封装;
添加结束分割线,完成所述写入POST请求的封装。
在其他实施例中,写入请求创建模块701,还用于:
按照存储定义的API接口规范封装写入POST请求,其中,所述AP I接口基于S3REST API协议标准。
在其他实施例中,第一对象存储批量读写装置700还包括修正模块704,用于:
若所述响应结果中存在请求未通过的待处理对象,则接收所述存储网关发送的请求未通过的待处理对象的错误码;
根据所述错误码判断未通过原因,并根据未通过原因修正所述未通过的待处理对象,以重新根据修正后的待处理对象创建写入POST请求。
如图10,本发明实施例还提供了一种第一对象存储批量读取装置,可以用于客户端,第一对象存储批量读取装置600包括:
封装读取请求模块601,用于在接收到针对所述目标桶信息对应的至少一个指定对象的读取操作指令时,封装读取POST请求;
读取请求发送模块602,用于将所述读取POST请求发送给所述存储网关,以供所述存储网关在接收到所述读取POST请求后,根据所述读取POST请求进行回应;其中,所述指定对象为处理结果中请求通过的待处理对象;
读取模块603,用于根据所述存储网关的回应读取所述指定对象的多个分片数据。
在其他实施例中,封装读取请求模块601,还用于:
在读取请求行中确定请求方法为读取;
将所述目标桶信息放入读取请求头中;
在读取请求体的正文中添加多级标签,以标识所述指定对象及所述指定对象的指定范围的分片数据,其中,所述指定对象的数量为1。
在其他实施例中,若所述指定对象的数量大于1,封装读取请求模块601,还用于:
在读取请求体的正文中添加多级标签,且对不同的指定对象增加不同的标识,以标识所述指定对象及所述指定对象的指定范围的分片数据。
在其他实施例中,在所述第一对象存储批量读取装置600中,若所述读取POST请求包含至少两个指定对象,则所述指定对象的数量至多200个,且每个所述指定对象的分片数据至多200个;若所述读取POST请求仅包含一个指定对象,则所述指定对象的分片数据的数量至多1000个。
相应的,如图11所示,本发明实施例还提供了一种第二对象存储批量写入装置,可以用于存储网关,第二对象存储批量读写装置800包括:
写入请求接收模块801,用于接收客户端发送的写入POST请求;所述写入POST请求包括写入请求头、位于请求头或请求行的目标桶信息、位于请求体的至少两个待处理对象及所述待处理对象的分片数据;
写入请求响应模块802,用于解析所述写入请求头,以对所述目标桶信息、所述待处理对象以及分片数据进行请求响应,得到响应结果,根据响应结果写入所述目标桶信息、所述待处理对象以及所述分片数据,且将所述响应结果返回至所述客户端。
在其他实施例中,写入请求响应模块802,还用于:
解析所述写入请求头,对所述写入POST请求进行合法性校验,得到与所述待处理对象对应的响应结果;
将所述响应结果放置在响应请求行中;
设置对象分割线,且将所述对象分割线放置在所述响应请求头中;
在响应请求体的正文以响应分割线开始;
封装第一个对象的回应结果,所述回应结果包括对象名、回应码及附加属性;
封装第二个对象的回应结果,且通过响应分割线将所述第一个对象的回应结果与第二个对象的回应结果分隔,直至完成所有对象的回应结果的封装;
添加结束分割线,完成所述响应结果的封装。
在其他实施例中,写入请求响应模块802,还用于:
对所述写入POST请求的请求接口合法性进行校验,其中,在所述写入POST请求的请求接口合法性校验不通过时,得到所述写入POST请求的请求接口合法性校验不通过的第一响应结果;
在所述写入POST请求的请求接口合法性校验通过时,得到所述写入POST请求的请求接口合法性校验通过的第二响应结果,并校验所述目标桶信息和待处理对象的权限;
在所述目标桶信息和指定对象的权限校验通过时,得到校验通过的第三响应结果,且存储所述目标桶信息、待处理对象及分片数据;
在所述目标桶信息和待处理对象的权限校验不通过时,得到校验不通过的第四响应结果。
相应的,如图12所示,本发明实施例还提供了一种第二对象存储批量读取装置,可以用于存储网关,第二对象存储批量读写装置900包括:
读取请求回应模块901,用于:
在接收到所述客户端发送的读取POST请求后,根据所述读取POST请求进行回应,其中,所述读取POST请求包括读取请求头、位于读取请求头或请求行的目标桶信息、位于读取请求体的至少一个指定对象及所述指定对象的分片数据,且所述指定对象为请求通过的待处理对象。
读取请求回应模块901,还用于:
对所述读取POST请求进行合法性校验;
在所述读取POST请求通过所述合法性校验时,解析所述读取请求体的正文,获得所述指定对象及所述指定对象的指定范围;
在已存储的分片数据中查找所述指定范围对应的位置;
根据所述位置对所述已存储的分片数据的存储顺序进行整合和/或排序,得到读取顺序;
按照所述读取顺序读取所述指定范围的分片数据;
将所述指定范围的分片数据封装在回应结果中,且将所述回应结果发送给所述客户端。
在其他实施例中,所述指定对象的数量为1,读取请求回应模块901,还用于:
将回应结果放在回应请求行中;
在回应请求头中设置分片分割线;
在回应请求体的正文中以分片分割线开始;
封装所述指定对象的所述指定范围的第一个分片数据,所述第一个分片数据包括分片范围及数据;
封装指定范围的第二个分片数据,直至封装所述指定范围内所有的分片数据,且相邻分片数据之间通过分片分割线分隔;
添加分片分割线以结束所述指定范围的分片数据的封装。
在其他实施例中,所述指定对象的数量大于1,读取请求回应模块901,还用于:
将回应结果放在回应请求行中;
在回应请求头中设置分片分割线;
在回应请求体的正文中以分片分割线开始;
封装第一个指定对象的指定范围的分片数据,且所述第一个指定对象的指定范围的分片数据之间通过分片分割线分割;
封装第二个指定对象的指定范围的分片数据,直至封装所有的指定对象的指定范围的分片数据;且所述第二个指定对象的指定范围的分片数据之间通过分片分割线分割;
添加对象分割线以结束所有的指定对象的指定范围的分片数据的封装。
需要说明的是,上述装置可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在装置实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。
图13为客户端的一个实施例中第一控制器的硬件结构示意图,如图13所示,第一控制器13包括:
一个或多个第一处理器131、第一存储器132。图13中以一个第一处理器131、一个第一存储器132为例。
第一处理器131、第一存储器132可以通过总线或者其他方式连接,图13中以通过总线连接为例。
第一存储器132作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的对象存储批量读取/写入方法对应的程序指令/模块(例如,附图9所示的写入请求创建模块701、发送模块702、响应接收模块703、修正模块704及附图10所示的封装读取请求模块601、读取请求发送模块602、读取模块603)。第一处理器131通过运行存储在第一存储器132中的非易失性软件程序、指令以及模块,从而执行控制器的各种功能应用以及数据处理,即实现上述方法实施例的对象存储批量读取/写入方法。
第一存储器132可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据第一对象存储批量读写装置的使用所创建的数据等。此外,第一存储器132可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,第一存储器132可选包括相对于第一处理器131远程设置的存储器,这些远程存储器可以通过网络连接至客户端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述一个或者多个模块存储在所述第一存储器132中,当被所述一个或者多个第一处理器131执行时,执行上述任意方法实施例中的对象存储批量处理方法,例如,执行以上描述的图1中的方法步骤101至步骤103、图4中的方法步骤104-106;实现图9中的模块701-704、图10中的模块601-603的功能。
上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。
图14为客户端的一个实施例中第二控制器的硬件结构示意图,如图14所示,第二控制器23包括:
一个或多个第二处理器231、第二存储器232。图14中以一个第二处理器231、一个第二存储器232为例。
第二处理器231、第二存储器232可以通过总线或者其他方式连接,图14中以通过总线连接为例。
第二存储器232作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的对象存储批量写入/读取方法对应的程序指令/模块(例如,附图11所示的写入请求接收模块801、写入请求响应模块802及图12所示的读取请求回应模块901)。第二处理器231通过运行存储在第二存储器232中的非易失性软件程序、指令以及模块,从而执行控制器的各种功能应用以及数据处理,即实现上述方法实施例的对象存储批量写入/读取方法。
第二存储器232可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据第二对象存储批量写入/读取装置的使用所创建的数据等。此外,第二存储器232可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,第二存储器232可选包括相对于第二处理器231远程设置的存储器,这些远程存储器可以通过网络连接至客户端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述一个或者多个模块存储在所述第二存储器232中,当被所述一个或者多个第二处理器231执行时,执行上述任意方法实施例中的对象存储批量处理方法,例如,执行以上描述的图7-8中的方法步骤201至步骤202,步骤203至步骤208;实现图11中的模块801-802及图12中的模块901的功能。
上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。
本申请实施例提供了一种非易失性计算机可读写存储介质,所述计算机可读写存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,例如图13和14中的一个第一处理器131/第二处理器231,可使得上述一个或多个第一处理器131/第二处理器231可执行上述任意方法实施例中的对象存储批量读取/写入方法,例如,执行以上描述的图1中的方法步骤101至步骤103、图4中的方法步骤104-106、图7中的方法步骤201至步骤202;实现图9中的模块701-704、图10中的模块601-603、图11中的模块801-802及图12中的模块901的功能。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施例的描述,本领域普通技术人员可以清楚地了解到各实施例可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
- 对象存储批量读取及写入方法、客户端、存储网关及介质
- 基于对象存储的网关的控制方法、控制装置、网关和介质