一种对象存储方法、装置、设备及计算机可读存储介质与流程

文档序号:16209186发布日期:2018-12-08 07:30阅读:154来源:国知局
一种对象存储方法、装置、设备及计算机可读存储介质与流程

本发明涉及数据存储技术领域,更具体地说,涉及一种对象存储方法、装置、设备及计算机可读存储介质。

背景技术

在分布式存储系统中,本地对象存储位于最底层,目前主流的本地对象存储引擎为filestore,其基于本地的xfs文件系统实现,对象数据(本地对象的数据)保存在一个固定大小的文件中(默认为4mb),本地对象的元数据保存在文件的扩展属性或者本地独立的kv数据库中。系统运行一段时间后,磁盘上会存储大量的对象文件(本地对象对应的文件)。

在filestore的基础上,通过对象聚合的方式减少了对象文件的个数,同时将小文件的随机io变成了线性io、修改写变成了追加写,提高了海量小文件场景下数据的写入性能。但是这种方式在某些场景下牺牲了读性能,由于在同一时间内所有的对象数据都被追加写到同一个聚合文件中,且写入操作是并发执行的,导致同一个本地对象的不同对象数据会被写到多个不同的聚合文件中,在小块随机读写的场景下,这种现象尤其明显。那么在需要实现本地对象的读取时,则需要获取本地对象的索引信息,该索引信息中包括本地对象有几个数据碎片,每个数据碎片在本地对象中的偏移量及长度、所在聚合文件的编号及偏移量等信息;然后分别从各个聚合文件中读取数据碎片,合并后返回。这种方式导致读操作的时延变高,性能降低。

综上所述,现有技术中对于本地对象的读取存在读操作的时延较高、性能较低的问题。



技术实现要素:

本发明的目的是提供一种对象存储方法、装置、设备及计算机可读存储介质,以解决现有技术中对于本地对象的读取存在的读操作的时延较高、性能较低的问题。

为了实现上述目的,本发明提供如下技术方案:

一种对象存储方法,包括:

读取存储于不同聚合文件中的属于同一对象的全部数据碎片;

判断读取到的数据碎片的数量是否大于数量阈值,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将所述数据碎片回写到同一个聚合文件中。

优选的,读取存储于不同聚合文件中的属于同一对象的全部数据碎片之后,还包括:

判断对所述对象的访问是否处于一写多读的场景,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将所述数据碎片回写到同一个聚合文件中。

优选的,读取存储于不同聚合文件中的属于同一对象的全部数据碎片之后,还包括:

判断所述对象所属的存储系统当前的负载值是否小于预设负载值,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将所述数据碎片回写到同一个聚合文件中。

优选的,将全部数据碎片回写到同一个聚合文件中之后,还包括:

将所述对象的索引信息设置为将所述数据碎片写入至的聚合文件的位置信息。

优选的,读取存储于不同聚合文件中的属于同一对象的全部数据碎片之后,还包括:

将全部数据碎片存储至缓存中供读取,所述缓存的存储规则为当所述缓存的存储空间被全部占用时,将所述缓存中存储的距离当前时刻最远被使用的数据删除。

优选的,将全部数据碎片存储至缓存中之后,还包括:

接收与所述对象对应的读取请求,判断所述缓存中是否存储有所述对象,如果是,则将所述缓存中存储的所述对象返回,如果否,则由将所述数据碎片写入至的聚合文件中获取所述对象并返回。

一种对象存储装置,包括:

读取模块,用于:读取存储于不同聚合文件中的属于同一对象的全部数据碎片;

数量判断模块,用于:判断读取到的数据碎片的数量是否大于数量阈值,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将所述数据碎片回写到同一个聚合文件中。

优选的,还包括:

场景判断模块,用于:读取存储于不同聚合文件中的属于同一对象的全部数据碎片之后,判断对所述对象的访问是否处于一写多读的场景,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将所述数据碎片回写到同一个聚合文件中。

一种对象存储设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上任一项所述对象存储方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述对象存储方法的步骤。

本发明提供了一种对象存储方法、装置、设备及计算机可读存储介质,其中该方法包括:读取存储于不同聚合文件中的属于同一对象的全部数据碎片;判断读取到的数据碎片的数量是否大于数量阈值,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将所述数据碎片回写到同一个聚合文件中。本发明的技术方案中,在读取到存储于不同聚合文件中的属于同一对象的全部数据碎片后,如果读取到的数据碎片的数量大于数量阈值,即在读取对象时需要由较多的聚合文件中分别读取,认为读取该对象导致的对读操作的时延及性能的影响较严重,则将全部数据碎片回写到同一个聚合文件中,以在下次读取时由这一个聚合文件中即可读取,否则则无需将全部数据碎片回写到同一个聚合文件中。由此,在读取对象对读操作的时延及性能影响严重时将对象的全部数据碎片回写到一个聚合文件中,由这一个聚合文件中读取对象相对于由多个聚合文件中分别读取得到对象大大降低了读操作的时延,提高了读操作的性能。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种对象存储方法的流程图;

图2为本发明实施例提供的一种对象存储方法的具体实现示意图;

图3为本发明实施例提供的一种对象存储装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,其示出了本发明实施例提供的一种对象存储方法的流程图,可以包括:

s11:读取存储于不同聚合文件中的属于同一对象的全部数据碎片。

需要说明的是,本发明实施例提供的一种对象存储方法的执行主语可以为对应的对象执行装置,而该装置可以设置于分布式存储系统的管理节点上,因此本发明实施例提供的一种对象存储方法的执行主语也可以为分布式存储系统的管理节点。另外,本申请中的对象为本地对象的简称,而步骤s11所说的读取属于同一对象的全部数据碎片具体可以指首次读取属于该同一对象的全部数据碎片,由此,在首次读取属于同一对象的全部数据碎片之后即进行后续操作,能够保证后续对该同一对象的读取均采用简便的方式实现。

聚合文件及数据碎片即为背景技术中指出的对应概念,其中,对象可以划分为多个数据碎片。

s12:判断读取到的数据碎片的数量是否大于数量阈值,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将数据碎片回写到同一个聚合文件中。

其中,数量阈值可以根据实际需要进行设定,如可以为3。读取到的数据碎片、即属于同一对象的数据碎片的数量如果大于数量阈值,则说明在读取在对象时需要由较多的聚合文件中获取对象的不同数据碎片,进而导致读操作的时延较高、性能较低,因此,将全部数据碎片回写到一个聚合文件中供读取,能够在下次需要读取对象时由一个聚合文件中读取,使得读操作的时延较低、性能较高;读取到的数据碎片、即属于同一对象的数据碎片的数量如果不大于数量阈值,则说明在读取对象时需要由较少的聚合文件中获取对象的不同数据碎片,那么认为这种情况下造成的对读操作的时延及性能的影响是可以忍受的,因此,无需将数据碎片回写到同一个聚合文件中。

需要说明的是,将全部数据碎片回写到同一个聚合文件中可以是将全部数据碎片合并成一个对象后将合并得到的对象写入一个聚合文件中,也可以将全部数据碎片按获取的先后顺序写入同一个聚合文件中,还可以根据实际需要进行其他设置,均在本发明的保护范围之内。

另外,将全部数据碎片回写到同一个聚合文件中被回写全部数据碎片的聚合文件,可以为当前正在进行写操作的聚合文件,具体来说,在将数据写入聚合文件时,一般是先判断当前聚合文件是否写满,如果是,则将下一个新的聚合文件作为当前聚合文件被写入,如果否,则直接将数据写入当前聚合文件,对应的,本申请中只要当前聚合文件没被写满,则可以忽略当前聚合文件的大小,而直接将全部数据碎片全部写入当前聚合文件后,再启用新的聚合文件实现写操作。

本发明的技术方案中,在读取到存储于不同聚合文件中的属于同一对象的全部数据碎片后,如果读取到的数据碎片的数量大于数量阈值,即在读取对象时需要由较多的聚合文件中分别读取,认为读取该对象导致的对读操作的时延及性能的影响较严重,则将全部数据碎片回写到同一个聚合文件中,以在下次读取时由这一个聚合文件中即可读取,否则则无需将全部数据碎片回写到同一个聚合文件中。由此,在读取对象对读操作的时延及性能影响严重时将对象的全部数据碎片回写到一个聚合文件中,由这一个聚合文件中读取对象相对于由多个聚合文件中分别读取得到对象大大降低了读操作的时延,提高了读操作的性能。

另外,如果读取到的数据碎片的数量不大于数量阈值,即在读取对象时需要由较少的聚合文件中分别读取,认为读取该对象导致的对读操作的时延及性能的影响较轻微,则无需将全部数据碎片回写到同一个聚合文件中,避免了对于写资源的不必要占用。

本发明实施例提供的一种对象存储方法,读取存储于不同聚合文件中的属于同一对象的全部数据碎片之后,还可以包括:

判断对对象的访问是否处于一写多读的场景,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将数据碎片回写到同一个聚合文件中。

其中,一写多读与现有技术中对应概念相同,一般指对对象进行写操作的端仅一个,但是对对象进行读操作的端很多,在此不再过多说明。如果当前对对象的访问处于一写多读的场景,则说明需要对对象的读取次数较多,则无论对象的全部数据碎片的数量是否大于数量阈值,则认为由于读取次数多导致对读操作的时延及性能影响严重,因此将全部数据碎片回写到同一个聚合文件中供读取,进一步降低了读操作的时延,提高了读操作的性能。

本发明实施例提供的一种对象存储方法,读取存储于不同聚合文件中的属于同一对象的全部数据碎片之后,还可以包括:

判断对象所属的存储系统当前的负载值是否小于预设负载值,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将数据碎片回写到同一个聚合文件中。

其中,预设负载值可以根据实际需要进行设定,存储系统的负载值与现有技术中对应概念相同,一般指存储系统当前正在进行的各项操作所占用的资源与所具有的全部资源的比例,当然也可以根据实际需要进行其他设定,在此不做具体限定。如果对象所属存储系统当前的负载值小于预设负载值,则说明存储系统可以有足够的资源供数据碎片的回写,此时将全部数据碎片回写到同一个聚合文件中供读取,否则则说明存储系统没有足够的资源供数据碎片回写,因此无需将数据碎片回写到同一个聚合文件中。从而根据存储系统的负载情况确定数据碎片是否需要回写,保证了存储对象的资源的合理占用。

另外需要说明的是,读取到的数据碎片大于数量阈值、对象的访问处于一写多读的场景及对象所属的存储系统当前的负载值小于预设负载值这三项条件中,如果一项均不满足,则无需将数据碎片回写到同一个聚合文件中,如果满足至少一项,则将数据碎片回写到同一个聚合文件中;当然也可以根据实际需要设置其他条件,均在本发明的保护范围之内。

本发明实施例提供的一种对象存储方法,将全部数据碎片回写到同一个聚合文件中之后,还可以包括:

将对象的索引信息设置为将数据碎片写入至的聚合文件的位置信息。

将索引信息更新为全部数据碎片写入至的聚合文件的位置信息,能够基于该索引信息快速定位到聚合文件进行读取对象,当然索引信息中还可以包括其他内容,如对象在聚合文件中的偏移量等位置信息,均在本发明的保护范围之内。

另外,将全部数据碎片回写到同一个聚合文件之后,还可以将数据碎片之前所属的聚合文件中的数据碎片删除,即将步骤s11中读取数据碎片时数据碎片所属的聚合文件中的数据碎片删除,以免造成聚合文件空间的浪费。

本发明实施例提供的一种对象存储方法,读取存储于不同聚合文件中的属于同一对象的全部数据碎片之后,还包括:

将全部数据碎片存储至缓存中供读取,缓存的存储规则为当缓存的存储空间被全部占用时,将缓存中存储的距离当前时刻最远被使用的数据删除。

需要说明的是,本申请中缓存的存储规则为lru,lru是leastrecentlyused的缩写,即最近最少使用,常用于缓存热点数据,当数据量达到预先设置的上限时,自动将那些最久未使用的数据剔除,腾出内存空间保存最新的热点数据。也即当缓存的存储空间被全部占用时,将缓存中存储的距离当前时刻最远被使用的数据删除。从而使得缓存中的数据为目前最需要的数据,以供读取。

本发明实施例提供的一种对象存储方法,将全部数据碎片存储至缓存中之后,还可以包括:

接收与对象对应的读取请求,判断缓存中是否存储有对象,如果是,则将缓存中存储的对象返回,如果否,则由将数据碎片写入至的聚合文件中获取对象并返回。

当需要实现对象的读取时,可以先由缓存中读取,如果缓存中没有该对象,则由聚合文件中读取,从而进一步加速了数据的读取。

如图2所示,其中,聚合文件1至聚合文件6即为步骤s11中的不同聚合文件,进而由这些不同的聚合文件中读取属于对象的数据碎片s0至s5,而聚合文件7即为上述实施例中将全部数据碎片s0至s5写入至的新的聚合文件,从而由最初需要由聚合文件1至聚合文件6分别获取数据碎片,改变为仅由聚合文件7这一个聚合文件中即可获取全部数据碎片,减少了需要访问的聚合文件数量,降低了读操作的时延,提高了读操作的性能。

本发明实施例还提供了一种对象存储装置,如图3所示,可以包括:

读取模块11,用于:读取存储于不同聚合文件中的属于同一对象的全部数据碎片;

数量判断模块12,用于:判断读取到的数据碎片的数量是否大于数量阈值,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将数据碎片回写到同一个聚合文件中。

本发明实施例提供的一种对象存储装置,还可以包括:

场景判断模块,用于:读取存储于不同聚合文件中的属于同一对象的全部数据碎片之后,判断对对象的访问是否处于一写多读的场景,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将数据碎片回写到同一个聚合文件中。

本发明实施例提供的一种对象存储装置,还可以包括:

负载判断模块,用于:读取存储于不同聚合文件中的属于同一对象的全部数据碎片之后,判断对象所属的存储系统当前的负载值是否小于预设负载值,如果是,则将全部数据碎片回写到同一个聚合文件中供读取,如果否,则确定无需将数据碎片回写到同一个聚合文件中。

本发明实施例提供的一种对象存储装置,还可以包括:

信息设置模块,用于:将全部数据碎片回写到同一个聚合文件中之后,将对象的索引信息设置为将数据碎片写入至的聚合文件的位置信息。

本发明实施例提供的一种对象存储装置,还包括:

缓存模块,用于:读取存储于不同聚合文件中的属于同一对象的全部数据碎片之后,将全部数据碎片存储至缓存中供读取,缓存的存储规则为当缓存的存储空间被全部占用时,将缓存中存储的距离当前时刻最远被使用的数据删除。

本发明实施例提供的一种对象存储装置,还包括:

请求响应模块,用于:将全部数据碎片存储至缓存中之后,接收与对象对应的读取请求,判断缓存中是否存储有对象,如果是,则将缓存中存储的对象返回,如果否,则由将数据碎片写入至的聚合文件中获取对象并返回。

本发明实施例还提供了一种对象存储设备,可以包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现如上任一项对象存储方法的步骤。

本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可以实现如上任一项对象存储方法的步骤。

需要说明的是,本发明实施例提供的一种对象存储装置、设备及计算机可读存储介质中相关部分的说明请参见本发明实施例提供的一种对象存储方法中对应部分的详细说明,在此不再赘述。另外本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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