一种快速合并对象的方法和系统与流程

文档序号:15888419发布日期:2018-11-09 19:47阅读:403来源:国知局
一种快速合并对象的方法和系统与流程

本发明属于对象存储技术领域,具体涉及一种快速合并对象的方法和系统。

背景技术

对象存储是一种基于对象的存储形态,在基于对象存储的存储系统或服务中,对象(object)是存储的基本数据单位,用户上传的数据以对象的形式存储在一个或多个容器(bucket,桶)中。对象存储采用扁平化结构管理所有数据,容器和对象都有一个全局唯一的id,用户/应用经过认证接入后,只需要根据id就可以访问容器/对象及相关的数据(data)、元数据(metadata)和对象属性(attribute),解决了文件系统复杂目录树结构在海量数据情况下的数据查找耗时长的问题,这使得对象存储具备极强的扩展性。同时也能更好的满足特定非结构化数据(例如视频、录音、图片等)的存储要求。

在一些场景下,需要将对象存储中的多个对象合并成一个对象。目前业界通常使用的方法是通过s3api中提供的multipartuploadcopy相关接口,将多个对象拷贝并合并为一个对象。但是该方法需要在对象存储设备内部完整拷贝所有数据,对象越大合并时间越长,而且对分块对象有很多限制,例如,每个待合并的分块对象(part)必须大于等于5mb且小于等于5gb,part总数不能超过10000,且合并后整个对象的大小不能超过5tb等,这些限制约束了当前对象合并的应用场景。



技术实现要素:

发明目的:针对现有技术的不足,本发明提出一种快速合并对象的方法,能实现秒级合并,且对待合并的对象和合并后对象没有任何限制。

本发明的另一目的在于提供一种相应的能够快速合并对象的系统。

技术方案:本发明所述的一种快速合并对象的方法,基于一种新的对象结构来合并对象,所述新的对象结构为:以一个索引对象和至少一个数据对象构成一个向用户提供服务的完整对象,所述至少一个数据对象用于存储数据,索引对象用于记录对象的基本信息以及至少一个数据对象中的数据在整个数据段中的位置。在合并对象时,读取待合并对象的索引对象,基于索引对象中记录的信息进行整理合并。

具体地,索引对象包括索引头信息和数据段信息,所述索引头信息包括:对象标识:表示该对象是否为索引对象;数据总长度:表示完整对象中所有数据对象的总长度;数据段个数:表示完整对象中数据段的个数。所述数据段信息包括:数据偏移:表示该数据段在整个数据中的偏移;数据对象中的偏移:表示该数据段在对应的数据对象中的偏移;数据段长度:表示该数据段的长度。

基于上述索引对象格式,合并对象的操作包括以下步骤:读取待合并对象的索引对象;合并索引对象中的数据段信息,并将这些信息按照索引对象信息格式写入新的索引对象中;删除被合并对象的索引对象。

其中,在写入新索引对象时,索引头信息中数据段个数和数据总长度分别为需要合并的对象的索引对象的索引头信息中数据段个数之和和数据总长度之和;数据段信息中各数据对象的数据偏移根据合并顺序来计算,取值为前一数据对象的数据偏移和数据段长度之和。

一种快速合并对象的系统,包括客户端和对象存储设备,对象存储设备具有存储具有上述新的对象结构的对象,客户端基于用户的合并请求执行对象合并操作。客户端包括存储器和处理器,存储器存有计算机程序,所述程序被处理器执行时能够实现上述合并对象操作所包括的步骤。

有益效果:本发明的方法在对象合并过程中只需要通过读取对象的索引对象数据段信息,即可进行整理合并,不需要处理对象数据,索引对象相对真实对象大小是非常小的,能快速合并多个对象,实现秒级合并,且对待合并的对象和合并后对象大小没有任何限制。

附图说明

图1是根据本发明实施例的对象结构的对象组成示意图;

图2是根据本发明实施例的索引对象格式示意图;

图3是根据本发明实施例的对象合并场景下索引对象中数据段结构图。

具体实施方式

下面结合附图对本发明的技术方案作进一步说明。

参照图1,根据本发明实施例提供的一种对象存储方式的对象组成示意图,一个完整的对象包括一个索引对象和至少一个数据对象,数据存储于这些数据对象中,索引对象用于记录该完整对象的基本信息以及数据对象中的数据在整个数据段中的位置。索引对象名为对外提供服务的对象名,索引对象包括索引头信息和数据段信息,索引头信息中提供了对象的基本信息,包含对象大小等,数据段信息记录了数据段与数据对象中的数据的对应关系。图2示出了索引对象的结构,其中,0至32字节是索引对象头信息,后面是数据段信息,每个数据对象的数据段信息也占用32字节,具体地,索引头信息包括:

标识:4字节,用于判断是索引对象还是数据对象;

版本:4字节,用于表示索引对象的版本;

索引长度:4字节,用于表示索引对象的总长度;

校验码:4字节,用于表示索引对象的校验码,检查索引对象的完整性;

数据总长度:8字节,用于表示数据对象的总长度;

标志:4字节,用于表示对象属性,例如可共享读、正常关闭等;

数据段个数:4字节,用于表示该完整对象中的数据段个数。

数据段信息包括:

数据对象名:16字节,用于表示数据段对应的数据对象名;

数据偏移:8字节,用于表示该数据段在整个数据中的起始位置;

数据对象中的偏移:4字节,用于表示该数据段在对应的数据对象中的起始位置;

数据段长度:4字节,用于表示该数据段的长度。

基于上述对象结构,本发明的方法在合并对象时,通过读取待合并对象的索引对象,基于索引对象中记录的信息进行整理合并即可,不需要处理数据对象中的数据,索引对象的大小相对于真实对象而言是非常小的,从而能够实现秒级合并。

合并对象的前提是对象已经存在,即已按照上述对象结构创建了对象。创建对象的过程为:先创建一个同名的索引对象,然后再创建数据对象,针对数据特别大的对象,会将对象切割成固定大小的数据对象。数据对象可以4mb、8mb、16mb、32mb或者更大的数据分片粒度进行切割,在索引对象中记录每个数据段对应的数据对象及其数据对应的位置,并更新数据总长度,其中,数据对象的数据偏移从0开始递增,下一个数据对象的数据偏移根据上一数据对象的数据偏移和数据段长度得出,为二者之和;数据对象中的偏移均为0。如果对象小于等于数据分片粒度大小,数据对象大小为对象数据实际大小,不会切割。

合并对象包括以下步骤:读取待合并对象的索引对象;合并索引对象中的数据段信息,并将这些信息按照索引对象信息格式写入新的索引对象中;删除被合并对象的索引对象。

其中,在写入新索引对象时,索引头信息中数据段个数和数据总长度分别为需要合并的对象的索引对象的索引头信息中数据段个数之和和数据总长度之和;数据段信息中各数据对象的数据偏移根据合并顺序来计算,取值为前一数据对象的数据偏移和数据段长度之和;数据段信息中其余信息不变。

图3为根据本发明实施例提供的对象结构来快速合并对象时索引对象中数据段结构图。如图3所示,有对象1和对象2两个对象需要合并,对象1大小为8mb,有2个数据段,对象2大小为6mb,也有2个数据段。对象1和对象2合并后,生成对象3,对象3中数据段为4个。数据段1和数据段2与对象1中的数据段1和数据段2相同。数据段3对应数据对象3,数据偏移为8mb,数据对象中的偏移为0,数据长度为4mb。数据段4对应数据对象4,数据偏移为12mb,数据对象中的偏移为0,数据长度为2mb。

一种快速合并对象的系统,包括客户端和对象存储设备,对象存储设备用于存储具有上述新的对象结构的对象,客户端基于用户的合并请求执行对象合并操作。客户端包括存储器和处理器,存储器存有计算机程序,所述程序被处理器执行时能够实现以下步骤:读取合并对象对应的索引对象中的数据,将数据段信息进行合并,重新写入一个新的索引对象,删除合并对象对应的索引对象。

其中,所述程序在写入新索引对象时,索引头信息中数据段个数和数据总长度分别为需要合并的对象的索引对象的索引头信息中数据段个数之和和数据总长度之和;数据段信息中各数据对象的数据偏移根据合并顺序来计算,取值为前一数据对象的数据偏移和数据段长度之和;其余信息不变。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1