首页> 中国专利> 分布式存储命名空间的路径分割映射方法和装置

分布式存储命名空间的路径分割映射方法和装置

摘要

本发明公开一种分布式存储命名空间的路径分割映射方法和装置。该方法包括:接收用户输入的路径信息,所述路径信息包括至少一个路径分量;通过命名空间的目录字段和属性字段对,从根目录开始逐个解析路径分量,确定所述路径信息对应的元数据位置,其中所述目录字段包括第一子字段和第二子字段,其中所述第一子字段为父目录索引节点号,所述第二子字段为文件名称;从所述元数据位置提取所述路径对应的元数据。本发明通过在目录字段的第一部分使用父目录索引号,由此同一目录下的条目在逻辑上会被连续存储;目录字段的第二部分采用文件名称替代原有的索引节点号,由此可以在列表操作中减少一次路径分量解析的过程,从而加速了列表操作。

著录项

  • 公开/公告号CN106682003A

    专利类型发明专利

  • 公开/公告日2017-05-17

    原文格式PDF

  • 申请/专利权人 中国电信股份有限公司;

    申请/专利号CN201510750854.6

  • 发明设计人 张凌;杨新章;

    申请日2015-11-06

  • 分类号G06F17/30(20060101);

  • 代理机构中国国际贸易促进委员会专利商标事务所;

  • 代理人王云飞

  • 地址 100033 北京市西城区金融大街31号

  • 入库时间 2023-06-19 02:12:12

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-09-20

    授权

    授权

  • 2017-07-04

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20151106

    实质审查的生效

  • 2017-05-17

    公开

    公开

说明书

技术领域

本发明涉及下一代互联网领域,特别涉及一种分布式存储命名空间的路径分割映射方法和装置。

背景技术

海量小文件的元数据管理一直是存储领域的一个难点。在一般通用的场景,文件的新建、更新、删除、修改文件名、目录名、目录列表都需要得到良好高效的支持。

现有的分布式存储文件系统一般采用整体读取文件/目录所有元数据信息的方式,这在海量小文件处理的情况下,文件存储路径分量解析的工作相当繁重,可能会造成系统的瓶颈;并且分布式文件存储系统对外提供服务时,特别在面向移动互联网用户时,具有海量小文件、高并发访问、文件读多写少的显著特点,目前的文件存储命名空间的方法仍采取一视同仁的每次访问即遍历文件/目录所有元数据信息的方式不够科学。

发明内容

鉴于以上技术问题,本发明提供了一种分布式存储命名空间的路径分割映射方法和装置,目录字段采用文件名称替代原有的索引节点号,可以在列表操作中减少一次路径分量解析的过程,从而加速了列表操作。

根据本发明的一个方面,提供一种分布式存储命名空间的路径分割映射方法,包括:

接收用户输入的路径信息,所述路径信息包括至少一个路径分量;

通过命名空间的目录字段和属性字段对,从根目录开始逐个解析路径分量,确定所述路径信息对应的元数据位置,其中所述目录字段包括第一子字段和第二子字段,其中所述第一子字段为父目录索引节点号,所述第二子字段为文件名称;

从所述元数据位置提取所述路径对应的元数据。

在本发明的一个实施例中,通过命名空间的目录字段和属性字段对,从根目录开始逐个解析路径分量,确定所述路径信息对应的元数据位置的步骤包括:

令j等于1;

遍历第一子字段为Kj-1的目录字段,确定第二子字段为第j个路径分量的目录-属性字段对,其中1≤j≤N,N为所述路径信息包含路径分量的数目,在j等于1时Kj-1为0,N为大于0的自然数;

遍历第二子字段为第j个路径分量的目录-属性字段对的属性字段,确定所述目录-属性字段对的索引节点号Kj

判断j是否等于N;

若j=N,则将索引节点号Kj的对应位置作为元数据位置;

若j<N,则令j=j+1,执行所述遍历第一子字段为Kj-1的目录字段,确定第二子字段为第j个路径分量的目录-属性字段对的步骤。

在本发明的一个实施例中,所述目录字段还包括第三子字段,所述第三子字段为属性类型码,不同的属性类型码对应所述属性字段的不同属性子字段。

在本发明的一个实施例中,属性类型包括第一属性、第二属性和第三属性,所述属性字段包括第一属性子字段、第二属性子字段和第三属性子字段,其中:第一属性为需要被频繁修改的属性,第二属性为很少被修改的属性;和第三属性为永远不会被修改的属性。

在本发明的一个实施例中,所述第三属性字段包括索引节点号和/或文件类型,所述文件类型为目录或普通文件。

根据本发明的另一方面,提供一种分布式存储命名空间的路径分割映射装置,包括接收单元、解析单元和提取单元,其中:

接收单元,用于接收用户输入的路径信息,所述路径信息包括至少一个路径分量;

解析单元,用于通过命名空间的目录字段和属性字段对,从根目录开始逐个解析路径分量,确定所述路径信息对应的元数据位置,其中所述目录字段包括第一子字段和第二子字段,其中所述第一子字段为父目录索引节点号,所述第二子字段为文件名称;

提取单元,用于从所述元数据位置提取所述路径对应的元数据。

在本发明的一个实施例中,解析单元包括初始化模块、字段对确定模块、节点号确定模块、识别模块、位置确定模块和循环模块,其中:

初始化模块,用于令j等于1;

字段对确定模块,用于遍历第一子字段为Kj-1的目录字段,确定第二子字段为第j个路径分量的目录-属性字段对,其中1≤j≤N,N为所述路径信息包含路径分量的数目,在j等于1时Kj-1为0,N为大于0的自然数;

节点号确定模块,用于遍历第二子字段为第j个路径分量的目录-属性字段对的属性字段,确定所述目录-属性字段对的索引节点号Kj

识别模块,用于判断j是否等于N;

位置确定模块,用于根据识别模块的判断结果,若j=N,则将索引节点号Kj的对应位置作为元数据位置;

循环模块,用于根据识别模块的判断结果,若j<N,则令j=j+1,并指示字段对确定模块重复执行所述遍历第一子字段为Kj-1的目录字段,确定第二子字段为第j个路径分量的目录-属性字段对的操作。

在本发明的一个实施例中,所述目录字段还包括第三子字段,所述第三子字段为属性类型码,不同的属性类型码对应所述属性字段的不同属性子字段。

在本发明的一个实施例中,属性类型包括第一属性、第二属性和第三属性,所述属性字段包括第一属性子字段、第二属性子字段和第三属性子字段,其中:第一属性为需要被频繁修改的属性,第二属性为很少被修改的属性;和第三属性为永远不会被修改的属性。

在本发明的一个实施例中,所述第三属性字段包括索引节点号和/或文件类型,所述文件类型为目录或普通文件。

本发明通过在目录字段的第一部分使用父目录索引号,由此同一目录下的条目在逻辑上会被连续存储;目录字段的第二部分采用文件名称替代原有的索引节点号,由此可以在列表操作中减少一次路径分量解析的过程,从而加速了列表操作。

附图说明

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

图1为现有扁平的命名空间的示意图。

图2为本发明分布式存储命名空间的路径分割映射方法一个实施例的示意图。

图3为本发明第一实施例中目录字段的结构示意图。

图4为本发明一个实施例中路径解析的示意图。

图5为本发明第一实施例中路径分割映射的示意图。

图6为本发明第二实施例中目录字段的结构示意图。

图7为本发明第三实施例中目录字段的结构示意图。

图8为本发明第三实施例中路径分割映射的示意图。

图9为本发明分布式存储命名空间的路径分割映射装置一个实施例的示意图。

图10为一个实施例中解析单元的示意图。

图11为一个实施例中节点号确定单元的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。

在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

图1为现有扁平的命名空间的示意图。如图1所示,现有的扁平的命名空间由目录项(dentry)、索引节点(Inode)组成。

申请人发现,现有的分布式文件系统的元数据组织都是针对大文件存储进行设计的,因此基于海量小文件的应用在性能和存储效率方面要大幅降低。

元数据主要数据结构由目录项、索引节点组成,保存在磁盘不同位置上。现有的分布式存储命名空间的全路径映射方法,访问一个小文件需要经历多次独立磁盘访问,造成大量随机IO。

文件元数据访问要进行大量命名空间的路径分量解析,这个过程会访问每个路径分量的Inode,即多次进行随机IO且系统调用开销太大。

申请人发现,图1所示的现有文件存储命名技术还存在下述问题:文件路径解析效率低下,文件的新建、更新、删除、访问、修改文件名等每一次操作都需要对文件命名空间路径进行一次全局更新;对于大型分布式存储系统,对外提供海量文件访问服务时延迟会较大。

基于以上发现,申请人提出了一种分布式存储命名空间的路径分割映射方法和装置,下面进行具体说明。

图2为本发明分布式存储命名空间的路径分割映射方法一个实施例的示意图。优选的,本实施例可由本发明分布式存储命名空间的路径分割映射装置执行。该方法包括以下步骤:

步骤201,接收用户输入的路径信息,所述路径信息包括至少一个路径分量。

例如:“/foo/bar/file”的路径信息中,包括foo、bar、file三个路径分量。其中,从根目录开始,foo为第一路径分量、bar为第二路径分量、file为第三路径分量。

步骤202,通过命名空间的目录字段和属性字段对,从根目录“/”开始逐个解析路径分量,确定所述路径信息对应的元数据位置。

在本发明的一个实施例中,如图3所示,所述目录字段可以包括第一子字段和第二子字段,其中所述第一子字段为父目录索引节点号,所述第二子字段为文件名称。

在本发明的一个实施例中,所述属性字段记录普通文件或目录的元数据,普通文件元数据信息包括:名称、版本、权限、创建时间、修改时间、类型、大小和文件片信息;目录元数据信息主要包括:目录名称、权限、创建时间、修改时间、大小。其中,文件名称直接反映为用户命名空间显示的文件的名称。文件类型主要用于区分普通文件和目录。文件块信息是一个列表,存储了该文件所有的文件块信息。每个表项包含这个文件块的SHA-1校验值,使用这个校验值可以定位到存储这个块的数据服务器。

步骤203,从所述元数据位置提取所述路径对应的元数据。

基于本发明上述实施例提供的分布式存储命名空间的路径分割映射方法,使用父目录索引节点号作为目录字段的第一部分意味着同一目录下的条目在逻辑上会被连续存储。目录字段的第二部分直接设置为文件名称而非文件Inode号,这是因为在同一目录下不可能出现文件名相同的多个文件,因此在同一目录下文件名可以唯一的指示一个文件,更重要的是当用文件名代替Inode号,可以在列表操作中减少一次路径分量解析(需要到磁盘读取当前分量Inode信息)的过程,从而加速了列表操作。

图4为本发明一个实施例中从第一路径分量开始逐个解析路径分量的示意图。优选的,本实施例可由本发明解析单元执行。如图4所示,图2实施例中的步骤202可以包括:

步骤401,令j等于1。

步骤402,遍历第一子字段(父目录索引节点号)为Kj-1的目录字段,确定第二子字段(文件名称)为第j个路径分量的目录-属性字段对,其中1≤j≤N,N为所述路径信息包含路径分量的数目,在j等于1时Kj-1为0,N为大于0的自然数。

步骤403,遍历第二子字段为第j个路径分量的目录-属性字段对的属性字段,确定所述目录-属性字段对的索引节点号Kj

步骤404,判断j是否等于N;若j=N,则;否则,若j不等于N,即j<N,则令j=j+1,之后重复执行步骤402。

步骤405,将索引节点号Kj的对应位置作为元数据位置。

下面通过具体实施例对采用图3所示目录字段实现路径分割映射的方法(即对图4实施例的方法)进行具体介绍:

图5为本发明第一实施例中路径分割映射的示意图。在图5所示的实施例可以是利用Google的开源LevelDB项目实现命名空间的路径分割:Google的LevelDB库提供了一种永久性的key value存储,LevelDB可以理解为针对大规模Key/Value数据的单机存储库,本发明使用LevelDB条目的value来记录文件的元数据,借助LevelDB我们能够实现一个高性能的key-value存储引擎。图5所述实施例中,采用Key作为如图3所示的目录字段,Value作为属性字段。

图5所示的路径解析方法具体可以包括:

1、在读取路径为“/foo/bar/file”的文件的元数据时,首先会从已知的Inode号为0的root目录“/”开始逐个解析路径分量:遍历key第一部分为“0”的key-value对,直到找到key第二部分为“foo”的key-value对,即,找到key的第一、第二部分为“0-foo”的key-value对。

2、从key的第一、第二部分为“0-foo”的key-value对中,找到“0-foo”的key-value对的索引节点号(Inode ID),具体为1。

3、遍历key第一部分为“1”的key-value对,直到找到key第二部分为“bar”的key-value对,即,找到key的第一、第二部分为“1-bar”的key-value对。

4、从key的第一、第二部分为“1-bar”的key-value对中,找到“1-bar”的key-value对的索引节点号(Inode ID),具体为3。

5、遍历key第一部分为“3”的key-value对,直到找到key第二部分为“file”的key-value对,即,找到key的第一、第二部分为“3-file”的key-value对。

6、从key的第一、第二部分为“3-file”的key-value对中,找到“3-file”的key-value对的索引节点号(Inode ID),具体为4,而文件类型(file type)为普通文件,因此确定了索引节点号4的对应位置作为元数据位置。

图6为本发明第二实施例中目录字段的结构示意图。与图3所示实施例相比,图6所述实施例中,所述目录字段还可以包括第三子字段。

在本发明的一个实施例中,所述第三子字段为属性类型码,不同的属性类型码对应所述属性字段的不同属性子字段。

在本发明的一个实施例中,考虑到一些文件或目录的部分属性被会比另一部分属性更加频繁的被更新,比如修改时间和访问时间和文件大小被修改的次数远远大于创建时间、拥有者、访问权限等属性,属性类型可以包括第一属性、第二属性和第三属性,所述属性字段相应地包括第一属性子字段、第二属性子字段和第三属性子字段,其中:第一属性(属性类型码=1)代表需要被频繁修改的属性,第二属性(属性类型码=2)为很少被修改的属性;和第三属性(属性类型码=3)为永远不会被修改的属性。

本发明上述实施例采用属性类型码区分对待文件的部分属性被会比另一部分属性更加频繁的被更新的情况,减少元数据更新时的IO数据量,并减少日志记录的数据量。

在本发明的一个实施例中,图4所述实施例中步骤403(即遍历第二子字段为第j个路径分量的目录-属性字段对的属性字段,确定所述目录-属性字段对的索引节点号Kj的步骤)可以包括:

步骤4031,遍历第二子字段为第j个路径分量的目录字段,确定第三子字段为第三属性码的目录-属性字段对。

步骤4032,遍历第三子字段为第三属性码的目录-属性字段对的属性字段,确定所述目录-属性字段对的索引节点号Kj

因此,本发明上述实施例通过不同属性类型码的划分,将属性字段划分为相应不同属性的子字段,只需查找目录-属性字段对的某一属性信息。例如查找目录-属性字段对的索引节点号时,相对于图3和图5所示实施例需要在整个目录-属性字段对进行查找,本发明图7和图8所示实施例只需在第三属性(属性类型码=3)对应的属性子字段中进行查找,从而进一步提高了路径解析的效率

图7为本发明一个具体实施例中目录字段的结构示意图。如图7所示,目录字段(key)包括第一子字段、第二子字段和第三子字段,其中第一子字段为父目录索引节点号(parent Inode ID),所述第二子字段为文件名称(filename),第三子字段为属性类型(type)。

与目录字段的第三子字段对应,属性字段(value)可以划分为三个子字段,其中:

第一属性子字段(type=1)包括修改时间(mtime)、访问时间(atime)、文件大小(size)、校验和列表(checksum list)等。

第二属性子字段(type=2)包括拥有者(owner)、访问权限(mode)等。

第三属性子字段(type=3)包括索引节点号(Inode ID)、创建时间(ctime)、文件类型(file type)等。

在本发明的一个实施例中,文件类型可以用于区分元数据为目录或普通文件。

下面通过具体实施例对采用图7所示目录字段实现路径分割映射的方法进行具体介绍:

图8为本发明第三实施例中路径分割映射的示意图。如图8所示,所述路径解析方法可以包括:

1、在读取路径为“/foo/bar/file”的文件的元数据时,首先会从已知的Inode号为0的root目录“/”开始逐个解析路径分量:遍历key第一部分为“0”的key-value对,直到找到key的第二部分为“foo”的key-value对,即,找到key的第一、第二部分为“0-foo”的key-value对。

2、从key的第一、第二部分为“0-foo”的key-value对中,找到key的第三部分为“3”的key-value对,即确定key为“0-foo-3”的key-value对;之后,从key为“0-foo-3”的key-value对的value部分中,找到“0-foo”的key-value对的索引节点号(Inode ID),具体为1。

3、遍历key第一部分为“1”的key-value对,直到找到key第二部分为“bar”的key-value对,即,找到key的第一、第二部分为“1-bar”的key-value对。

4、从key的第一、第二部分为“1-bar”的key-value对中,找到key的第三部分为“3”的key-value对,即确定key为“1-bar-3”的key-value对;之后,从key为“1-bar-3”的key-value对的value部分中,找到“1-bar”的key-value对的索引节点号(Inode ID),具体为3。

5、遍历key第一部分为“3”的key-value对,直到找到key第二部分为“file”的key-value对,即,找到key的第一、第二部分为“3-file”的key-value对。

6、从key的第一、第二部分为“3-file”的key-value对中,找到key的第三部分为“3”的key-value对,即确定key为“3-file-3”的key-value对;之后,从key为“3-file-3”的key-value对的value部分中,找到“3-file”的key-value对的索引节点号(Inode ID),具体为4,而文件类型(file type)为普通文件,因此确定了索引节点号4的对应位置作为元数据位置。

图9为本发明分布式存储命名空间的路径分割映射装置一个实施例的示意图。如图9所示,所述路径分割映射装置包括接收单元100、解析单元200和提取单元300,其中:

接收单元100,用于接收用户输入的路径信息,所述路径信息包括至少一个路径分量。

解析单元200,用于通过命名空间的目录字段和属性字段对,从根目录开始逐个解析路径分量,确定所述路径信息对应的元数据位置,其中所述目录字段包括第一子字段和第二子字段,其中所述第一子字段为父目录索引节点号(Inode号),所述第二子字段为文件名称(filename)。

提取单元300,用于从所述元数据位置提取所述路径对应的元数据。

基于本发明上述实施例提供的分布式存储命名空间的路径分割映射装置,使用父目录Inode号作为第一字段,同一目录下的条目在逻辑上会被连续存储的自动实现;使用文件名称作为第二字段,在列表操作中减少了一次Inode的路径分量解析,可以直接指向本目录下的这个文件名唯一的文件,从而加速了列表操作。

图10为图9实施例中解析单元的示意图。如图10所示,图9中的解析单元200可以包括初始化模块210、字段对确定模块220、节点号确定模块230、识别模块240、位置确定模块250和循环模块260,其中:

初始化模块210,用于令j等于1。

字段对确定模块220,用于遍历第一子字段为Kj-1的目录字段,确定第二子字段为第j个路径分量的目录-属性字段对,其中1≤j≤N,N为所述路径信息包含路径分量的数目,在j等于1时Kj-1为0,N为大于0的自然数。

节点号确定模块230,用于遍历第二子字段为第j个路径分量的目录-属性字段对的属性字段,确定所述目录-属性字段对的索引节点号Kj

识别模块240,用于判断j是否等于N。

位置确定模块250,用于根据识别模块240的判断结果,若j=N,则将索引节点号Kj的对应位置作为元数据位置。

循环模块260,用于根据识别模块240的判断结果,若j<N,则令j=j+1,并指示字段对确定模块220重复执行所述遍历第一子字段为Kj-1的目录字段,确定第二子字段为第j个路径分量的目录-属性字段对的操作。

在本发明的一个实施例中,所述目录字段还可以包括第三子字段,所述第三子字段为属性类型码,不同的属性类型码对应所述属性字段的不同属性子字段。

在本发明的一个实施例中,所述第三属性字段可以包括索引节点号和/或文件类型,所述文件类型为目录或普通文件。

在本发明的一个实施例中,属性类型可以包括第一属性、第二属性和第三属性,所述属性字段相应可以包括第一属性子字段、第二属性子字段和第三属性子字段,其中:第一属性为需要被频繁修改的属性,第二属性为很少被修改的属性;和第三属性为永远不会被修改的属性。

本发明的分布式存储命名空间的文件路径分割映射方法,将文件目录列表条目格式化为3部分,并在第三部分设置属性类别码以区分可变属性和不变属性,由此可以减少每次元数据更新时的IO数据量以及可以减少日志记录的数据量,从而进一步提高了系统效率。

图11为一个实施例中节点号确定单元的示意图。如图11所示,图10实施例中的节点号确定模块230可以包括第一确定子模块231和第二确定子模块232,其中:

第一确定子模块231,用于遍历第二子字段为第j个路径分量的目录字段,确定第三子字段为第三属性码的目录-属性字段对。

第二确定子模块232,用于遍历第三子字段为第三属性码的目录-属性字段对的属性字段,确定所述目录-属性字段对的索引节点号Kj

因此,本发明上述实施例通过不同属性类型码的划分,将属性字段划分为相应不同属性的子字段,只需查找目录-属性字段对的某一属性信息。例如查找目录-属性字段对的索引节点号时,相对于图3和图5所示实施例需要在整个目录-属性字段对进行查找,本发明图7和图8所示实施例只需在第三属性(属性类型码=3)对应的属性子字段中进行查找,进一步提高了路径解析的效率。

在上面所描述的接收单元100、解析单元200、提取单元300等功能单元可以实现为用于执行本申请所描述功能的通用处理器、可编程逻辑控制器(PLC)、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件或者其任意适当组合。

至此,已经详细描述了本发明。为了避免遮蔽本发明的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号