一种分布式存储系统快速查询对象所属目录的配置方法及系统与流程

文档序号:23003611发布日期:2020-11-20 11:52阅读:123来源:国知局
一种分布式存储系统快速查询对象所属目录的配置方法及系统与流程

本发明属于分布式存储系统技术领域,具体涉及一种分布式存储系统快速查询对象所属目录的配置方法及系统。



背景技术:

在信息技术快速发展的同时,数据逐渐成为信息技术中的重要一环,通过对生活和工作中的各种数据进行收集、分析、总结,可以获取相关信息并依据这些信息获取在经济等方面的收益,互联网行业逐渐进入“大数据时代”但是数据的快速增长同样给数据存储带来了巨大的压力,如何确保数据安全有效存储成为刻不容缓的关键问题,软件定义的分布式存储凭借其可扩展能有效满足数据量不断增长的要求,逐渐被越老越多的企业所认可。

软件定义存储将每个的硬盘标记为osd((objectstoragedevice,存储对象设备),每个osd划分成多个pg(placementgroup,存储池),最终所有要保存的数据转换为对象保存到对应的pg,为所有的pg在底层文件系统中创建一个目录,用于保存一个pg内的所有对象,在代码中这个目录记为collection(聚集),同时为了保证存储系统的性能,当collection中某个子目录下的对象数目超过一定阈值时,根据对象名的哈希值在这个目录下继续创建子目录,并将多出的对象移动到子目录下,这样可以通过控制子目录的层级来控制每个目录下的对象数,从而保证存储系统的性能,但是这样存在一个问题,就是对象的保存目录变得十分混乱,查找对象时需要根据对象名按目录层级从上往下依次查找,直到找到对象或遍历完所有层的目录,并且查询每次目录需要与硬盘进行通信,造成了读放大,对象查找效率较低。



技术实现要素:

针对现有技术的上述不足,本发明提供一种分布式存储系统快速查询对象所属目录的配置方法及系统,以解决上述技术问题。

第一方面,本发明提供一种分布式存储系统快速查询对象所属目录的配置方法,包括:

预估单个存储池需要保存的对象个数并根据所述对象个数计算有效子目录的层级数;

根据存储设备中的存储池数量计算通用子目录的层级数,并根据通用子目录和有效子目录的层级数之和创建对应层级数的子目录;

根据子目录的层级数,将对象名按元素个数划分并取与层级数对应个数的字符组成子目录的名称;

重写对象存储目录查询方法,直接将对象名中对应层级数个数的字符作为存储目录的名称进行输出。

进一步的,所述方法还包括:

若所述存储池的目录结构已经创建完成,则每个对象在第一次被查询目录时,根据对象名变量逐层向下查找,获取到目标目录后,将目标目录更新为当前对象的子目录;

将所述当前对象的子目录及对应对象的对象名存储到所述对象存储目录查询方法中。

进一步的,所述方法还包括:

在所述对象存储目录查询方法中,设置用户输入的对象名变量和方法输出的目录名变量;

执行所述对象存储目录查询方法,向对象名变量输入查询的对象名得到所属子目录的名称。

进一步的,所述方法还包括:

设置层级数标识符,在所述根据通用子目录的层级数和有效子目录的层级数创建对应层级数的子目录之后,将所述层级数标识符写入对象名变量中;

在执行所述对象存储目录查询方法时,根据所述层级数标识符判断是否已经创建对象存储目录的层级数,若否:则进行根据对象名变量逐层向下查找存储目录。

进一步的,所述预估单个存储池需要保存的对象个数并根据所述对象个数计算有效子目录层级数,包括:

设定单个层级的目录数量上限和每个目录保存的对象数量上限;

采集集群需要保存的对象数量,计算所述对象数量除以所述目录的对象数量上限的商值,并将所述商值输出为目录需求量;

将所述目录需求量除以所述单个层级的目录数量上限的商值作为有效子目录的层级数输出。

进一步的,所述根据存储系统中的存储池数量计算通用子目录的层级数,包括:

设定pg数目的上限值,所述上限值为以2^n表示;

将上限值转化为二进制表示;

将二进制中的1按照每次4位移动,直到二进制的整数位全为0,所述移动次数作为通用子目录层级数。

进一步的,其特征在于,所述根据通用子目录的层级数和有效子目录的层级数创建对应层级数的子目录,包括:

先创建通用子目录,然后创建对应层级数的有效子目录,同时记录通用子目录层级数和有效子目录层级数之和,所述和作为存储目录的总层级数。

第二方面,本发明提供一种分布式存储系统快速查询对象所属目录的配置系统,包括:

有效子目录创建单元,配置用于预估单个存储池需要保存的对象个数并根据所述对象个数计算有效子目录的层级数;

通用子目录创建单元,配置用于根据存储设备中的存储池数量计算通用子目录的层级数,并根据通用子目录和有效子目录的层级数之和创建对应层级数的子目录;

目录名称设置单元,配置用于根据子目录的层级数,将对象名按元素个数划分并取与层级数对应个数的字符组成子目录的名称;

查询方法重写单元,配置用于重写对象存储目录查询方法,直接将对象名中对应层级数个数的字符作为存储目录的名称进行输出。

第三方面,提供一种终端,包括:

处理器、存储器,其中,

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

该处理器用于从存储器中调用并运行该计算机程序,使得终端执行上述的终端的方法。

第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。

本发明的有益效果在于,

本发明提供的一种分布式存储系统快速查询对象所属目录的配置方法及系统,在分布式存储系统中对于新建的存储设备,通过设置通用子目录和有效子目录,并根据对象名和层级数的关系设置子目录名称,实现了可通过一步查询获取对象所在目录;同时对于已经存在的存储设备,只有在第一次查找对象目录时需要按目录层级依次查询,之后查询同样只需要一次查询便可获取对象所在目录;只需与磁盘建立一次通信便可获取对象存储目录,避免多次查询时需要与磁盘进行多次通信造成的读放大,释放系统磁盘的资源,提升集群性能,增强对分布式存储系统的管理能力。

此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。

附图说明

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

图1是本发明一个实施例的方法的示意性流程图。

图2是本发明一个实施例的系统的示意性框图。

图3为本发明实施例提供的一种终端的结构示意图。

具体实施方式

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

下面对本发明中出现的关键术语进行解释。

osd((objectstoragedevice,存储设备);

pg(placementgroup,存储池);

collection:聚集,一种对象操作接口。

图1是本发明一个实施例的方法的示意性流程图。其中,图1执行主体可以为一种分布式存储系统快速查询对象所属目录的配置系统。

如图1所示,该方法包括:

步骤110,预估单个pg需要保存的对象个数并根据所述对象个数计算有效子目录的层级数;

步骤120,根据osd中的pg数量计算通用子目录的层级数,并根据通用子目录和有效子目录的层级数之和创建对应层级数的子目录;

步骤130,根据子目录的层级数,将对象名按元素个数划分并取与层级数对应个数的字符组成子目录的名称;

步骤140,重写对象存储目录查询方法,直接将对象名中对应层级数个数的字符作为存储目录的名称进行输出。

可选地,作为本发明一个实施例,所述方法还包括:

若所述pg的目录结构已经创建完成,则每个对象在第一次被查询目录时,根据对象名变量逐层向下查找,获取到目标目录后,将目标目录更新为当前对象的子目录;

将所述当前对象的子目录及对应对象的对象名存储到所述对象存储目录查询方法中。

可选地,作为本发明一个实施例,所述方法还包括:

在所述对象存储目录查询方法中,设置用户输入的对象名变量和方法输出的目录名变量;

执行所述对象存储目录查询方法,向对象名变量输入查询的对象名得到所属子目录的名称。

可选地,作为本发明一个实施例,所述方法还包括:

设置层级数标识符,在所述根据通用子目录的层级数和有效子目录的层级数创建对应层级数的子目录之后,将所述层级数标识符写入对象名变量中;

在执行所述对象存储目录查询方法时,根据所述层级数标识符判断是否已经创建对象存储目录的层级数,若否:则进行根据对象名变量逐层向下查找存储目录。

可选地,作为本发明一个实施例,所述预估单个存储池需要保存的对象个数并根据所述对象个数计算有效子目录层级数,包括:

设定单个层级的目录数量上限和每个目录保存的对象数量上限;

采集集群需要保存的对象数量,计算所述对象数量除以所述目录的对象数量上限的商值,并将所述商值输出为目录需求量;

将所述目录需求量除以所述单个层级的目录数量上限的商值作为有效子目录的层级数输出。

可选地,作为本发明一个实施例,,所述根据存储系统中的存储池数量计算通用子目录的层级数,包括:

设定pg数目的上限值,所述上限值为以2^n表示;

将上限值转化为二进制表示;

将二进制中的1按照每次4位移动,直到二进制的整数位全为0,所述移动次数作为通用子目录层级数。

可选地,作为本发明一个实施例,其特征在于,所述根据通用子目录的层级数和有效子目录的层级数创建对应层级数的子目录,包括:

先创建通用子目录,然后创建对应层级数的有效子目录,同时记录通用子目录层级数和有效子目录层级数之和,所述和作为存储目录的总层级数。

为了便于对本发明的理解,下面以本发明一种分布式存储系统快速查询对象所属目录的配置方法的原理,结合实施例中分布式系统对象存储目录查询的过程,对本发明提供的一种分布式存储系统快速查询对象所属目录的配置方法做进一步的描述。

具体的,所述一种分布式存储系统快速查询对象所属目录的配置方法包括:

s1、预估存储集群中单个pg需要保存的对象数量,根据预估的对象数量在文件系统的代码中增加一个配置项filestore_subdir_level,用于指定collection(聚集)创建的有效子目录层级数,在代码中这个目录记为collection(聚集),所述配置项为工作人员根据存储集群的业务量以及每个pg需要保存的对象数量自行计算得到有效子目录的级数:设定单个层级的目录数量上限和每个目录保存的对象数量上限;采集集群需要保存的对象数量,计算所述对象数量除以所述目录的对象数量上限的商值,并将所述商值输出为目录需求量;将所述目录需求量除以所述单个层级的目录数量上限的商值作为有效子目录的层级数输出。例如,collection的目录使用固定前缀加16进制的一个数字进行命名,如dir_0;按照命名规则同一层级下最多只能创建16个目录;假设集群需要保存60万个对象,每个目录中保存300个对象,需要200个目录才能满足需求,由于同一层级最多只有16个目录,故需要采用两层目录结构,创建出16*16=256个目录满足200个目录的需求,此时有效子目录层级数为2。

s2、根据pg数计算通用子目录层级数,首先计算最接近且大于pg数目的2^n,然后将2^n用二进制表示,对二进制表达式中的1向右移动,每次移动4位,直到二进制表达式全部变成0,移动次数就是通用子目录的层级数,如pg数目为100,那么2^n就是2^7=128,二进制表达式为010000000,表达式中的1向右移动每次移动4位需要移动两次才可以全部变成0,因此通用子目录层级数位2。

s3、创建collection中的子目录,需要先创建通用子目录,然后创建对应层级数的有效子目录,同时记录通用子目录层级数和有效子目录层级数之和所述和用总层级数(path_length)表示,并用层级数标识符(bool型值have_subdir)进行层级数设置完成标记;

s4、根据数据集群osd中单个存储池pg的数量计算collection(聚集)中通用子目录层级数和通用子目录的名称,对象名按元素个数度划分并取与层级数对应个数的字符组成子目录的名称;计算对象名的哈希值,所述哈希值为8位16进制的数,若对象名哈希值为“abcd1234”,则将对象名的哈希值为第一位元素为“a”的对象分到一个目录下,当第一位元素为“a”的对象超过300个时,将前两位元素为“ab”的对象分到一个目录下,以此类推,将由左到右元素位相同的对象依次向下划分目录。

s5、重写对象存储目录查询方法,所述查询方法为现有的函数,使用对象名变量(vector型值path_comp)获取对象名每一位的值;使用目录名变量表示方法输出得到的存储目录的名称;若对象名哈希值为“abcd1234”,且对象设置在层级数为2的有效子目录中,则所述对象的存储目录名称为“ab”,通过获取“ab”数,得到对象“abcd1234”在第二层。

s6、根据have_subdir判断是否已经获得collection中对象保存的目录层级数,若所述pg的目录结构已经创建完成,则每个对象在第一次被查询目录时,根据对象名变量逐层向下查找,获取到目标目录后,将目标目录更新为当前对象的子目录;

s7、对于由旧集群升级上来、已经存在的存储池,其未经过目录层级数的设置,path_length的值为0,无法通过步骤s4直接获取对象保存目录,第一次查找对象目录时根据path_comp逐层向下查找,获取到对应目录后,更新path_length的值并标记have_subdir。同时对于已经存在的osd,只有在第一次查找对象目录时需要按目录层级依次查询,之后查询同样只需要一次查询便可获取对象所在目录;只需与磁盘建立一次通信便可获取对象存储目录,避免多次查询时需要与磁盘进行多次通信造成的读放大,释放系统磁盘的资源。

此外,所述对象存储目录查询方法的执行方法如下:

s8、在所述对象存储目录查询方法中,设置用户输入的对象名变量和方法输出的目录名变量;

s9、执行所述对象存储目录查询方法,向对象名变量输入查询的对象名得到所属子目录的名称。通过一次查询,获取对象所在目录,避免了读放大,提升集群的性能。

如图2示,该系统200包括:

有效子目录创建单元210,配置用于预估单个pg需要保存的对象个数并根据所述对象个数计算有效子目录的层级数;

通用子目录创建单元220,配置用于根据osd中的pg数量计算通用子目录的层级数,并根据通用子目录和有效子目录的层级数之和创建对应层级数的子目录;

目录名称设置单元230,配置用于根据子目录的层级数,将对象名按元素个数划分并取与层级数对应个数的字符组成子目录的名称;

查询方法重写单元240,配置用于重写对象存储目录查询方法,直接将对象名中对应层级数个数的字符作为存储目录的名称进行输出。

图3为本发明实施例提供的一种终端系统300的结构示意图,该终端系统300可以用于执行本发明实施例提供的一种分布式存储系统快速查询对象所属目录的配置方法。

其中,该终端系统300可以包括:处理器310、存储器320及通信单元330。这些组件通过一条或多条总线进行通信,本领域技术人员可以理解,图中示出的服务器的结构并不构成对本发明的限定,它既可以是总线形结构,也可以是星型结构,还可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

其中,该存储器320可以用于存储处理器310的快速查询对象所属目录的配置方的执行指令,存储器320可以由任何类型的易失性或非易失性存储终端或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。当存储器320中的快速查询对象所属目录的配置方执行指令由处理器310执行时,使得终端300能够执行快速查询对象所属目录的配置方法实施例中的部分或全部步骤,同时在分布式系统中执行集群中某个对象的存储目录一步查询方法。

处理器310为存储终端的控制中心,利用各种接口和线路连接整个电子终端的各个部分,通过运行或执行存储在存储器320内的配置程序和/查询函数方法模块,以及调用存储在存储器内的分布式系统的对象名、目录结构和目录名称,以执行电子终端的配置、查询功能和/或进行目录名称测设置。所述处理器可以由集成电路(integratedcircuit,简称ic)组成,例如可以由单颗封装的ic所组成,也可以由连接多颗相同功能或不同功能的封装ic而组成。举例来说,处理器310可以仅包括中央处理器(centralprocessingunit,简称cpu)。在本发明实施方式中,cpu可以是单运算核心,也可以包括多运算核心。

通信单元330,用于建立通信信道,从而使所述存储终端可以与其它终端进行通信。接收其他终端发送的用户数据例如查询请求和输入的对象名或者向其他终端发送用户数据。

本发明还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本发明提供的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-onlymemory,简称:rom)或随机存储记忆体(英文:randomaccessmemory,简称:ram)等。

因此,本发明在分布式存储系统中对于新建osd,通过一次查询,获取对象所在目录,避免了读放大,提升集群的性能;同时对于已经存在的osd,只有在第一次查找对象目录时需要按目录层级依次查询,之后查询同样只需要一次查询便可获取对象所在目录;只需与磁盘建立一次通信便可获取对象存储目录,避免多次查询时需要与磁盘进行多次通信造成的读放大,释放系统磁盘的资源,提升集群性能,增强对分布式存储系统的管理能力,,本实施例所能达到的技术效果可以参见上文中的描述,此处不再赘述。

本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中如u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质,包括若干指令用以使得一台计算机终端(可以是个人计算机,服务器,或者第二终端、网络终端等)执行本发明各个实施例所述方法的全部或部分步骤。

本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于终端实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统、系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,系统或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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