管理存储对象的元数据的方法、装置和计算机程序产品与流程

    专利2022-07-08  76

    本公开的实施例总体涉及数据存储领域,具体涉及用于管理存储对象的元数据的方法、装置和计算机程序产品。
    背景技术
    ::分布式对象存储系统通常不依赖于文件系统来管理数据。在分布式对象存储系统中,所有的存储空间可以被划分成固定大小的存储块(chunk)。用户数据可以作为对象(也称为“存储对象”)被存储在存储块中。对象可以具有与其相关联的元数据,用于记录该对象的属性和其他信息(诸如,该对象的地址等)。在对存储对象进行实际访问之前,通常需要首先访问该存储对象的元数据。元数据需要被存储在持久化存储设备(例如,磁盘)上,否则在存储服务重启或存储节点重启等故障情况可能会丢失。当分布式对象存储系统中的某个存储节点发生故障时,由该存储节点管理的元数据可以被故障转移到其他存储节点。其他存储节点在响应元数据访问请求之前,需要从持久化存储设备中将这些元数据恢复到存储器中。元数据持久化和故障转移的速度是衡量存储系统可用性的重要指标。因此,期望提供用于管理存储对象的元数据的方案,以提高元数据故障转移和持久化的速度。技术实现要素:本公开的实施例提供了用于管理存储对象的元数据的方法、装置和计算机程序产品。在本公开的第一方面,提供了一种用于管理存储对象的元数据的方法。该方法包括:响应于存储对象的元数据被更新,在存储器中更新用于索引存储对象的元数据的第一索引结构和与第一索引结构相对应的页表,其中第一索引结构用于记录存储对象的第一标识符和存储对象的元数据所在的存储页面的第二标识符之间的映射关系,页表用于记录第二标识符与存储页面的页面地址之间的映射关系,并且其中第一索引结构和页表已被存储在持久化存储设备中;将对页表的更新记录在至少一个页表日志中;以及将经更新的第一索引结构和至少一个页表日志存储到持久化存储设备中。在本公开的第二方面,提供了一种用于管理存储对象的元数据的方法。该方法包括:从持久化存储设备中将用于索引存储对象的元数据的第一索引结构和与第一索引结构相对应的页表的至少一部分读取到存储器中,其中第一索引结构用于记录存储对象的第一标识符和该存储对象的元数据所在的存储页面的第二标识符之间的映射关系,并且页表用于记录第二标识符与存储页面的页面地址之间的映射关系;以及响应于接收到访问存储对象的元数据的第一请求,基于第一索引结构和页表的至少一部分来访问该存储对象的元数据。在本公开的第三方面,提供了一种用于管理存储对象的元数据的装置。该装置包括至少一个处理单元和至少一个存储器。至少一个存储器被耦合到至少一个处理单元并且存储用于由至少一个处理单元执行的指令。该指令当由至少一个处理单元执行时使得装置执行动作,该动作包括:响应于存储对象的元数据被更新,在存储器中更新用于索引存储对象的元数据的第一索引结构和与第一索引结构相对应的页表,其中第一索引结构用于记录存储对象的第一标识符和存储对象的元数据所在的存储页面的第二标识符之间的映射关系,页表用于记录第二标识符与存储页面的页面地址之间的映射关系,并且其中第一索引结构和页表已被存储在持久化存储设备中;将对页表的更新记录在至少一个页表日志中;以及将经更新的第一索引结构和至少一个页表日志存储到持久化存储设备中。在本公开的第四方面,提供了一种用于管理存储对象的元数据的装置。该装置包括至少一个处理单元和至少一个存储器。至少一个存储器被耦合到至少一个处理单元并且存储用于由至少一个处理单元执行的指令。该指令当由至少一个处理单元执行时使得装置执行动作,该动作包括:从持久化存储设备中将用于索引存储对象的元数据的第一索引结构和与第一索引结构相对应的页表的至少一部分读取到存储器中,其中第一索引结构用于记录存储对象的第一标识符和该存储对象的元数据所在的存储页面的第二标识符之间的映射关系,并且页表用于记录第二标识符与存储页面的页面地址之间的映射关系;以及响应于接收到访问存储对象的元数据的第一请求,基于第一索引结构和页表的至少一部分来访问该存储对象的元数据。在本公开的第五方面,提供了一种计算机程序产品。该计算机程序产品被有形地存储在非瞬态计算机存储介质中并且包括机器可执行指令。该机器可执行指令在由设备执行时使该设备执行根据本公开的第一方面所描述的方法的任意步骤。在本公开的第六方面,提供了一种计算机程序产品。该计算机程序产品被有形地存储在非瞬态计算机存储介质中并且包括机器可执行指令。该机器可执行指令在由设备执行时使该设备执行根据本公开的第二方面所描述的方法的任意步骤。提供
    发明内容部分是为了以简化的形式来介绍对概念的选择,它们在下文的具体实施方式中将被进一步描述。
    发明内容部分无意标识本公开的关键特征或必要特征,也无意限制本公开的范围。附图说明通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施例中,相同的参考标号通常代表相同部件。图1示出了本公开的实施例能够在其中被实施的示例环境的示意图;图2示出了传统方案中利用b 树来索引存储对象的元数据的示意图;图3示出了传统方案中利用b 树和页表两者来索引存储对象的元数据的示意图;图4示出了传统方案中用于持久化页表的示意图;图5示出了根据本公开的实施例的用于管理存储对象的元数据的示例方法的流程图;图6示出了根据本公开的实施例的用于持久化存储对象的元数据及其索引结构的示意图;图7示出了根据本公开的实施例的通过将页表日志存储到持久化存储设备中来持久化页表的示意图;图8示出了根据本公开的实施例的以数据部分和索引部分两者来将页表存储在持久化存储设备中的示意图;图9示出了根据本公开的实施例的合并页表日志的示意图;图10示出了根据本公开的实施例的用于恢复存储对象的元数据的示意图;图11示出了根据本公开的实施例的在存储器中恢复页表的示意图;图12示出了根据本公开的实施例的在存储器中恢复页表的示意图;图13示出了根据本公开的实施例的用于管理存储对象的元数据的示例方法的流程图;以及图14示出了可以用来实施本公开内容的实施例的示例设备的示意性框图。在各个附图中,相同或对应的标号表示相同或对应的部分。具体实施方式下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。图1示出了本公开的实施例能够在其中被实现的示例环境100的框图。应当理解,仅出于示例性的目的描述环境100的结构,而不暗示对于本公开的范围的任何限制。例如,本公开的实施例还可以被应用到与环境100不同的环境中。如图1所示,环境100可以包括主机110和主机110可访问的持久化存储设备130。主机110可以包括处理单元111和存储器112。主机110可以是任何物理计算机、服务器等等。存储器112的示例可以包括但不限于随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)等。持久化存储设备130可以是与主机110分离的存储设备,其可以由多个主机(图1仅示出了其中的一个主机)共享。持久化存储设备130可以利用任何目知或者将来开发的非易失性存储介质实现,诸如磁盘、光盘、盘阵列等。例如,持久化存储设备130可以包括一个或多个磁盘、光盘、盘阵列等等。环境100可以被实现为分布式对象存储系统。在下文中,环境100有时也被称为分布式对象存储系统100。例如,持久化存储设备130的存储空间可以被划分成固定大小的存储块(chunk)。用户数据可以作为存储对象被存储在存储块中。存储对象可以具有与其相关联的元数据,用于记录该对象的属性和其他信息(诸如,该对象的地址等)。存储对象的元数据可以以页面(page)为单位被存储在至少一些存储块中。用户120可以对分布式对象存储系统130中的存储对象进行访问。例如,用户120可以向主机110发送访问某个存储对象的请求。响应于接收到该请求,主机110可以首先访问该存储对象的元数据,例如以获取该对象的地址、属性以及其他信息。然后,主机110可以基于该存储对象的元数据来访问该存储对象所对应的用户数据,并将用户数据返回给用户120。由于元数据的重要性,元数据需要被存储在持久化存储设备上,否则在存储服务重启或存储节点重启等故障情况可能会丢失。例如,持久化存储设备130上的存储块可以被划分成不同的分区,以分别存储用户数据(例如,存储对象)和存储对象的元数据。当分布式对象存储系统100中的某个存储节点(例如,某个主机)发生故障时,由该存储节点管理的元数据可以被故障转移到其他存储节点(例如,图1中未示出的其他主机)。其他存储节点在响应元数据访问请求之前,需要从持久化存储设备中将这些元数据恢复到存储器中。元数据持久化和故障转移的速度是衡量存储系统可用性的重要指标。在基于存储块(chunk)的对象存储系统中,存储块中的数据以追加(append-only)的方式被写入。也即,在新内容到达时,当前存储块中的现有内容不会被修改或删除,而是将更新附加在当前存储块的末尾或新的存储块中。对于基于块的对象存储系统,一些传统方案利用b 树来索引存储对象的元数据。例如,b 树的叶子节点(由于节点以页面为单位进行存储,因此也称为“叶子页面”或“叶子页”)用于存储对象的标识符(id)和元数据所组成的键值对,非叶子节点(也称为“索引节点”或“索引页”)用于记录叶子页的索引信息(例如,叶子页的地址)。当存储对象的元数据被更新时,相应的叶子页将以追加方式被写入到存储块中的不同位置。由于叶子页的位置被更新,因此相应的索引页也需要以追加方式被重新写入到新的位置,从而导致“写放大”的问题(即,少量更新可能导致大量的写入操作)。图2示出了这样的示例。图2示出了传统方案中用于索引存储对象的元数据的b 树200,其中叶子页201、202、203、205和206分别用于存储存储对象id和存储对象元数据所组成的键值对,索引页204、207和208分别用于存储叶子页201、202、203、205和206的索引信息。节点201、202、203和204例如被存储在存储块210中,节点205、206、207和208例如被存储在存储块220中。在某些情况下,节点203和205所涉及的元数据被更新。因此,如更新后的b 树200’所示,叶子页203被更新为203’,叶子页205被更新为205’。由于叶子页203被更新为203’,索引页204被相应地更新为204’。由于叶子页205被更新为205’,索引页207被相应地更新为207’。根节点208因此被更新至根节点208’。由于存储块中的数据以追加方式被写入,因此存储块210中的节点203和204以及存储块220中的节点205、207和208被无效,而经更新的节点203’、204’、205’、207’和208’被写入到新的存储块230中。为了解决如图2所示的写放大问题,一些传统方案利用创新的b 树和页表两者来索引存储对象的元数据。与如图2所示的传统方案不同,在这些方案中b 树中的叶子节点仍用于记录存储对象的元数据,而索引节点则用于记录存储对象的id与该存储对象的元数据所在的存储页面的id之间的映射关系(例如,以键值对的形式)。这些方案利用与b 树相对应的页表来记录页面id与页面地址之间的映射关系。以此方式,当b 树中的叶子页被修改时,可以仅更新页表中的页面地址,而索引页中的数据可以维持不变并且不需要重写,由此大大减轻如图2所示的写放大问题。图3示出了这样的示例。图3示出了用于索引存储对象的元数据的b 树310和与之对应的页表320。如图3所示,b 树的叶子节点313、314……分别记录了一个或多个存储对象的元数据,索引节点312和根节点310则记录了存储对象的id与存储页面id之间的映射关系。各存储页面的具体地址被记录在页表320中。例如,当要访问存储对象#000的元数据时,通过查找根节点310可以找到与存储对象#000相关联的存储页面#1。通过查找页表320能够确定存储页面#1的地址,从而从该地址找到索引节点312。通过查找索引节点312可以找到与存储对象#000相关联的存储页面#3。通过查找页表320能够确定存储页面#3的地址,从而从该地址找到叶子节点313。进一步地,可以在叶子页面313中找到存储对象#000的元数据。如图3所示,页表可以记录每个b 树中的页面(即,节点)的页面id和页面地址之间的映射关系。为了避免在故障情况下丢失页表数据,当更新的b 树数据被持久化时,对应的页表也需要被持久化。图4示出了传统方案中用于持久化页表的示意图。图4示出了不同版本的b 树420-1、420-2……420-6(统称为或单独称为“b 树420”)及其对应的页表430-1、430-2……430-6(统称为或单独称为“页表430”)。例如,版本号为1(表示为“v1”)的b 树420-1和页表430-1两者将决定系统中v1版本的元数据410-1。当元数据被更新时,b 树和对应的页表随之更新。当每个版本的b 树420的数据被存储到持久化设备440中时,与之对应的页表430也将被存储到持久化设备440中。当发生故障转移时,页表430需要从持久化设备440中被读取并且在存储器中被恢复,然后存储系统才能够响应针对与页表430相关联的元数据的访问请求。发明人认识到,对于分布式对象存储系统而言,随着越来越多的数据被注入系统,元数据将相应地增长。对于那些使用b 树及其对应的页表来索引元数据的系统而言,页表的规模将会相应地增长。这将导致如下几个问题。首先,元数据故障转移的时间将随页表大小的增加而增长。在系统故障转移期间,在系统可以响应针对元数据的访问请求之前,需要将页表加载到存储器中。例如,如果使用如图3所示的传统页表结构,当为具有1000万页(即,1000万节点)的b 树加载页表时,系统需要加载大约75mb的数据并在存储器中恢复,这将花费例如至少0.5到1秒。此外,随着页表大小的增加,从持久化存储设备恢复页表的现有方案将导致故障转移期间更多的输入/输出(i/o)操作。当存储节点发生故障时,系统需要将故障节点管理的所有元数据故障转移至其他存储节点。这可能会在系统中引起大量i/o操作,从而不仅导致故障转移时间更长,而且还会导致用户读/写请求的响应延迟。这将使系统可用性和可扩展性更加糟糕。同时,在传统方案中,随着元数据的增长,需要更多时间来持久化页表。由于系统需要在元数据持久化期间继续提供针对元数据读/写请求的响应,因此需要将对元数据的更新缓存在存储器中,直到持久化完成为止。这将为整个系统带来额外的内存开销。本公开的实施例提出了一种用于管理存储对象的元数据的方案,旨在解决上述问题和其他潜在问题中的一个或多个。为了避免页表大小的增加导致元数据持久化和恢复的时间延长,该方案通过仅将对页表的更新存储到持久化存储设备中来持久化页表。这些更新将在后台被合并为包括数据部分和索引部分两者的新的页表存储结构中,从而缩短故障转移期间恢复页表所需的时间。以下将进一步结合附图来详细描述本公开的实施例。图5示出了根据本公开的实施例的用于管理存储对象的元数据的示例方法500的流程图。例如,方法500可以由如图1所示的主机110来执行,以用于持久化存储对象的元数据及其索引结构。应当理解,方法500还可以包括未示出的附加动作和/或可以省略所示出的动作,本公开的范围在此方面不受限制。在框510处,响应于存储对象的元数据被更新,主机110在存储器112中更新用于索引存储对象的元数据的第一索引结构和与第一索引结构相对应的页表。在此假设,在更新之前,第一索引结构和与第一索引结构相对应的页表已被存储在持久化存储设备130中。其中,第一索引结构用于记录存储对象的id(本文也称为“第一标识符”)和该存储对象的元数据所在的存储页面的id(本文也称为“第二标识符”)之间的映射关系;页表用于记录第二标识符与存储页面的页面地址之间的映射关系。在一些实施例中,第一索引结构例如利用图3所示的b 树结构来实现。备选地,在另一些实施例中,第一索引结构也可以利用除b 树以外的其他数据结构实现。在下文中,将以b 树作为第一索引结构的示例。应当理解,这仅仅出于示例的目的,而不暗示对本公开范围的限制。当第一索引结构利用如图3所示的b 树结构来实现时,存储器112中的与第一索引结构相对应的页表例如可以是如图3所示的页表320。在框520处,主机110将对页表的更新记录在至少一个页表日志中。然后,在框530处,主机110将经更新的第一索引结构和至少一个页表日志存储到持久化存储设备130中。在一些实施例中,当持久化元数据时,可以首先将b 树中的页面按照传统流程存储在持久化存储设备130中。然而,当使用页面id所对应的页面地址对页表进行修改、在页表中添加新页面或删除页面时,可以将对页表的更新记录在页表日志中,页表日志在下文中也被简称为ptj(即,pagetablejournal)。在将经更新的b 树存储在持久化存储设备130中之后,可以将页表日志存储在持久化存储设备130中,而非存储新版本的页表。元数据及其索引结构的持久化可以被周期性地执行(例如,每隔一段时间),或者可以响应于某个持久化命令而被执行。图6示出了根据本公开的实施例的用于持久化存储对象的元数据及其索引结构的示意图。图6示出了用于索引存储对象的元数据的第一索引结构(例如,b 树)610和与之对应的页表620。在此假设,b 树610中的叶子页611被更新,并且新的叶子页612被创建。针对被更新的页面611和612,页表620中与之对应的条目将被更新,并且页表620的更新将被记录在页表日志630中。在持久化元数据时,更新的b 树页面611和612将被存储至持久化存储设备130中,并且页表日志630将被存储到持久化存储设备130中。如上所述,元数据及其索引结构的持久化可以被周期性地执行(例如,每隔一段时间),或者可以响应于某个持久化命令而被执行。例如,在系统初始化时,空的b 树和空页表可以被存储在持久化存储设备130中。在后续执行的每次持久化中,经更新的b 树和对应版本的页表日志可以被存储在持久化存储设备130中。图7示出了根据本公开的实施例的通过将页表日志存储到持久化存储设备中来持久化页表的示意图。与图4相同,图7示出了不同版本的b 树420-1、420-2……420-6(统称为或单独称为“b 树420”)及其对应的页表430-1、430-2……430-6(统称为或单独称为“页表430”)。例如,版本号为1(表示为“v1”)的b 树420-1和页表430-1两者将决定系统中v1版本的元数据410-1。当元数据被更新时,b 树和对应的页表随之更新。与图4不同的是,当每个版本的b 树420的数据被存储到持久化设备440中时,用于记录最新版本的页表相对于先前版本的页表的更新的页表日志也将被存储到持久化设备440中。例如,页表日志包括与v1版本页表430-1对应的页表日志710-1(例如,其用于记录页表430-1相对于空页表的更新)、与v2版本页表430-2对应的页表日志710-2(例如,其用于记录页表430-2相对于页表430-1的更新)……与v6版本页表430-6对应的页表日志710-6。在一些实施例中,被持久化的每个版本的元数据都会在系统中添加一个新的页表日志记录,其例如可以包括该列表日志在持久化存储设备上的位置和版本号。版本号可以按顺序增加,这意味着如果系统按顺序重放所有ptj,则能够得到最新版本的页表。然而,随着越来越多版本的元数据被持久化,当系统将页表恢复到存储器时,将会存在许多ptj需要被读取。这将增加在系统能够响应元数据访问请求之前用于加载和重放所有ptj的时间。此外,这还将增加元数据存储开销。为了避免这种情况,在一些实施例中,主机110可以发起后台过程来执行页表日志的合并,并且将合并结果存储在持久化存储设备130中。在一些实施例中,该后台过程可以确定持久化存储设备130中的至少一个页表日志是否将与先前版本的页表合并。在一些实施例中,该后台过程可以在合并条件被满足时,将至少一个页表日志与先前版本的页表合并,以得到新版本的列表。例如,合并条件包括以下至少一项:距离上次页表日志合并的时间超过阈值时间;以及由至少一个页表日志所指示的页表更新量超过阈值量。在一些实施例中,该后台过程可以将经合并的新版本的页表存储在持久化存储设备130中。在一些实施例中,将经合并的新版本的页表可以以数据部分和索引部分两者来被存储在持久化存储设备130中。例如,数据部分可以包括新版本的页表被划分而成的多个分块(以下也称为“数据分块”)。数据部分可以首先被存储在持久化存储设备130中。索引部分可以基于多个分块在持久化存储设备中的相应地址而被生成,并且可以在数据部分被存储之后被存储在持久化存储设备130中。在本文中,页表的索引部分也被称为“第二索引结构”。图8示出了根据本公开的实施例的以数据部分和索引部分两者来将页表存储在持久化存储设备中的示意图。图8示出了页表800,其数据部分810例如被划分成多个分块811、812……818。这些分块可以以串行或者并行的方式被存储在持久化存储设备130中。在一些实施例中,这些分块811、812……818可以被进一步划分成不同的组。例如,同一组内的分块可以以串行方式写入持久化存储设备130中的同一存储块(chunk)中,而不同组的分块可以以并行方式写入持久化存储设备130中的不同存储块(chunk)中。基于这些分块在持久化存储设备130中的位置可以生成页表800的索引部分820,其例如包括索引结构821。在一些实施例中,当分块811、812……818可以被进一步划分成不同的组时,索引部分820可以包括多个索引结构,以分别对应于不同的组。在数据部分810被持久化后,索引部分820(例如,索引结构821)可以被存储在持久化存储设备130中。图9示出了根据本公开的实施例的合并页表日志的示意图。在一些实施例中,例如,后台过程可以定期检查是否存在新的ptj需要被合并。当确定存在新的ptj需要被合并时,后台过程可以将待合并的ptj依次应用于上次合并的页表的数据部分,然后生成新的页表索引部分并将其存储在持久化存储设备130中。ptj被合并后,其所占用的存储空间可以被回收和释放。如图9所示,例如ptj710-1、710-2和710-3可以与先前合并的页表(未示出)一起被合并为页表430-3。然后,页表430-3可以与ptj710-4、710-5和710-6一起被合并为页表430-6。例如,每次合并的页表430可以以如图8所示的数据部分810和索引部分820被存储在持久化存储设备130中。如上所述,在管理元数据的存储节点发生故障时,由故障节点管理的元数据可以被故障转移至其他存储节点。其他存储节点需要将元数据从持久化存储设备恢复至存储器中,从而能够响应针对元数据的访问请求。图10示出了根据本公开的实施例的用于恢复存储对象的元数据的示意图。如图10所示,例如,各个版本的页表日志1010-1、1010-2……1010-8分别被存储在持久化存储设备中,同时最新版本的b 树1030也被存储在持久化存储设备中。后台过程例如将页表日志1010-1与先前版本的页表(未示出)合并成页表1020-1,进一步将页表1020-1与页表日志1010-2、1010-3……1010-4合并成页表1020-5。页表日志1010-6、1010-7和1010-8尚未合并。在一些实施例中,可以从持久化存储设备中读取最近合并的页表1020-5、未合并的页表日志1010-6、1010-7和1010-8以及最新版本的b 树1030,以在存储器中恢复最新版本的元数据1040。在一些实施例中,为了缩短故障转移的时间,页表的恢复可以分为两个步骤。在步骤一,可以从持久化存储设备中读取最近合并的页表的索引部分和其余未合并的页表日志。存储器中的待恢复页表的结构可以相应地改变。例如,存储器中的页表可以被分为多个分块。当从持久化存储设备中读取最近合并的页表的索引部分时,可以利用该索引部分记录的每个分块的位置信息来初始化存储器中的页表的每个分块。然后,可以将具有版本顺序的ptj应用于每个分块。以此方式,在完成步骤一之后,存储器中将具有未合并的ptj的内容和页表的每个数据分块的位置信息。此时,当接收到针对元数据的访问请求时,可以利用至多一个额外的读取操作来从持久化存储设备读取相应的页表内容。例如,当期望从页表中查询某个页面的位置时,可以首先在未合并的ptj中查找是否存在与该页面id相对应的记录(也即,最新的页面地址)。如果没有找到,则可以基于该页面id来确定该页面与页表的多个数据分块中的哪个数据分块关联。然后,可以基于该数据分块的位置信息从持久化存储设备中读取该数据分块的内容。在存储器中,该数据分块的内容可以进一步与ptj中的内容进行合并。以此方式,在上述步骤一完成之后,系统就已经能够响应针对元数据的访问请求。在步骤二,可以在后台从持久化存储设备中并行读取页表的各个数据分块。当数据部分被加载到存储器时,其可以与未合并的页表日志中的内容合并。当数据部分被完全加载到存储器并与页表日志合并之后,系统可以在不向持久化存储设备查询页表数据块的情况下响应针对元数据的访问请求。图11示出了根据本公开的实施例的在存储器中恢复页表的示意图。例如,图11示出了上述步骤一。如图11所示,存储在持久化存储设备130中的b 树1110可以被读取到存储器112中。为了在存储器112中恢复页表1120,可以从持久化存储设备中读取最近合并的页表的索引部分和其余未合并的页表日志。存储器中的页表1120可以被分为多个分块1121、1122……1128。当从持久化存储设备130中读取最近合并的页表的索引部分时,可以利用该索引部分记录的每个分块的位置信息来初始化存储器中的页表1120的每个块。然后,可以将具有版本顺序的ptj应用于存储器中的页表1120的每个块。以此方式,如图11所示,分块1121可以具有与其关联的未合并页表日志1131和分块位置信息1141,分块地址信息1141例如指示分块1121在持久化存储设备130中被存储的位置1151。分块1122可以具有与其关联的未合并页表日志1132和分块位置信息1142,分块地址信息1142例如指示分块1122在持久化存储设备130中被存储的位置1152……分块1128可以具有与其关联的未合并页表日志1138和分块位置信息1148,分块地址信息1148例如指示分块1128在持久化存储设备130中被存储的位置1158。图12示出了根据本公开的实施例的在存储器中恢复页表的示意图。例如,图12示出了上述步骤二。如图12所示,可以在后台从持久化存储设备130中并行读取页表1120的各个数据分块1121、1122……1128。例如,当数据分块1121的数据部分被加载到存储器112时,其可以与未合并的页表日志1131中的内容合并。在合并完成后,页表1120中的数据分块1121中的内容被完全恢复,因此可以在不向持久化存储设备查询该数据分块1121的内容的情况下响应针对与该数据分块1121相关联的元数据的访问请求。类似地,可以对数据分块1122、1123……1128执行类似操作,以在存储器中恢复整个页表。图13示出了根据本公开的实施例的用于管理存储对象的元数据的示例方法1300的流程图。例如,方法1300可以由如图1所示的主机110来执行,以用于恢复存储对象的元数据并且响应针对存储对象的元数据的访问请求。应当理解,方法1300还可以包括未示出的附加动作和/或可以省略所示出的动作,本公开的范围在此方面不受限制。在框1310处,主机110从持久化存储设备130中将用于索引存储对象的元数据的第一索引结构和与第一索引结构相对应的页表的至少一部分读取到存储器112中,其中第一索引结构用于记录存储对象的第一标识符和该存储对象的元数据所在的存储页面的第二标识符之间的映射关系,并且页表用于记录第二标识符与存储页面的页面地址之间的映射关系。在框1320处,主机110响应于接收到访问存储对象的元数据的第一请求,基于第一索引结构和页表的至少一部分来访问该存储对象的元数据。在一些实施例中,在持久化设备中存储的页表包括多个分块和用于记录多个分块在持久化存储设备中的相应地址的第二索引结构,并且读取页表的至少一部分包括:从持久化存储设备中读取第二索引结构。在一些实施例中,访问存储对象的元数据包括:从第一请求中提取存储对象的第一标识符;通过查找第一索引结构,确定存储对象的元数据所在的存储页面的第二标识符;基于第二标识符,从多个分块中确定与存储页面相关联的分块;通过查找第二索引结构,确定该分块在持久化存储设备中的地址;从持久化存储设备中的地址读取该分块;基于第二标识符,在该分块中查找存储页面的页面地址;以及从持久化存储设备中的该页面地址访问存储对象的元数据。在一些实施例中,方法1300还包括:基于第二索引结构,从持久化存储设备中将多个分块读取到存储器中,以在存储中恢复该页表。在一些实施例中,在持久化设备中存储的页表包括先前页表和用于记录页表相对于先前页表的更新的至少一个页表日志,先前页表包括多个分块和用于记录多个分块在持久化存储设备中的相应地址的第二索引结构,并且读取页表的至少一部分包括:从持久化存储设备中读取至少一个页表日志和第二索引结构。在一些实施例中,访问存储对象的元数据包括:从第一请求中提取存储对象的第一标识符;通过查找第一索引结构,确定存储对象的元数据所在的存储页面的第二标识符;基于第二标识符,从至少一个页表日志中查找存储页面的页面地址;以及响应于存储页面的页面地址在至少一个页表日志中被找到,从持久化存储设备中的该页面地址访问存储对象的元数据。在一些实施例中,方法1300还包括:响应于存储页面的页面地址在至少一个页表日志中未被找到,基于第二标识符从多个分块中确定与存储页面相关联的分块;通过查找第二索引结构,确定该分块在持久化存储设备中的地址;从持久化存储设备中的该地址读取分块;基于第二标识符,在该分块中查找存储页面的页面地址;以及从持久化存储设备中的页面地址访问存储对象的元数据。在一些实施例中,方法1300还包括:基于第二索引结构,从持久化存储设备中将多个分块读取到存储器中,以在存储器中恢复先前页表;以及通过合并先前页表和至少一个页表日志,在存储器中恢复页表。在一些实施例中,第一索引结构还用于索引另一存储对象的元数据,并且方法1300还包括:响应于接收到访问另一存储对象的元数据的第二请求基于第一索引结构和页表来访问另一存储对象的元数据。在一些实施例中,第一索引结构利用b 树来实现。通过以上描述能够看出,本公开的实施例能够显著地提高元数据的持久化和故障转移的速度。由于在元数据恢复时只需要加载页表的索引部分和若干未合并的页表日志,因此在元数据故障转移期间可以节省大量磁盘i/o操作。此外,元数据的增长将不会导致故障转移期间的元数据不可用的时间段被延长,这极大地提高了系统可用性和可扩展性。此外,利用这种页表恢复方案,可以在页表恢复期间缓解i/o突发问题。可以进一步通过限制页表数据的后台加载速度,来实现i/o压力和元数据访问性能之间的平衡。这能够大大提高元数据故障转移的性能。同时,在持久化阶段,由于仅需要对两个版本的页表之间的增量部分进行持久化,因此可以极大地提高元数据持久化速度,并且持久化所需时间不再随着页表大小的增加而延长。此外,元数据的增长也将不再影响元数据故障转移的时间。这意味着在持久化期间可以节省用于缓存元数据更新所消耗的内存空间,从而降低系统的内存开销。图14示出了可以用来实施本公开内容的实施例的示例设备1400的示意性框图。例如,如图1所示的主机110可以由设备1400实施。如图14所示,设备1400包括中央处理单元(cpu)1401,其可以根据存储在只读存储器(rom)1402中的计算机程序指令或者从存储页面1408加载到随机访问存储器(ram)1403中的计算机程序指令,来执行各种适当的动作和处理。在ram1403中,还可存储设备1400操作所需的各种程序和数据。cpu1401、rom1402以及ram1403通过总线1404彼此相连。输入/输出(i/o)接口1405也连接至总线1404。设备1400中的多个部件连接至i/o接口1405,包括:输入单元1406,例如键盘、鼠标等;输出单元1407,例如各种类型的显示器、扬声器等;存储页面1408,例如磁盘、光盘等;以及通信单元1409,例如网卡、调制解调器、无线通信收发机等。通信单元1409允许设备1400通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。上文所描述的各个过程和处理,例如方法500和/或1300,可由处理单元1401执行。例如,在一些实施例中,方法500和/或1300可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储页面1408。在一些实施例中,计算机程序的部分或者全部可以经由rom1402和/或通信单元1409而被载入和/或安装到设备1400上。当计算机程序被加载到ram1403并由cpu1401执行时,可以执行上文描述的方法500和/或1300的一个或多个动作。本公开可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是——但不限于——电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c 等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本
    技术领域
    :的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本
    技术领域
    :的其它普通技术人员能理解本文披露的各实施例。当前第1页1 2 3 当前第1页1 2 3 
    技术特征:

    1.一种用于管理存储对象的元数据的方法,包括:

    响应于存储对象的元数据被更新,在存储器中更新用于索引所述存储对象的所述元数据的第一索引结构和与所述第一索引结构相对应的页表,其中所述第一索引结构用于记录所述存储对象的第一标识符和所述存储对象的所述元数据所在的存储页面的第二标识符之间的映射关系,所述页表用于记录所述第二标识符与所述存储页面的页面地址之间的映射关系,并且其中所述第一索引结构和所述页表已被存储在持久化存储设备中;

    将对所述页表的更新记录在至少一个页表日志中;以及

    将经更新的第一索引结构和所述至少一个页表日志存储到所述持久化存储设备中。

    2.根据权利要求1所述的方法,还包括:

    确定所述持久化存储设备中的所述至少一个页表日志是否将与所述页表合并;

    响应于确定所述至少一个页表日志将与所述页表合并,将所述页表和至少一个页表日志合并为经更新的页表;以及

    将所述经更新的页表存储在所述持久化存储设备中。

    3.根据权利要求2所述的方法,其中确定所述至少一个页表日志是否将与所述页表合并包括:

    确定合并条件是否被满足;以及

    响应于所述合并条件被满足,确定所述至少一个页表日志将与所述页表合并,其中所述合并条件包括以下至少一项:

    距离上次页表日志合并的时间超过阈值时间;以及

    由所述至少一个页表日志所指示的页表更新量超过阈值量。

    4.根据权利要求2所述的方法,其中将所述经更新的页表存储在所述持久化存储设备中包括:

    将所述经更新的页表划分为多个分块;

    将所述多个分块分别存储在所述持久化存储设备中;

    生成第二索引结构以用于记录所述多个分块在所述持久化存储设备中的相应地址;以及

    将所述第二索引结构存储在所述持久化存储设备中。

    5.根据权利要求1所述的方法,其中所述第一索引结构利用b 树来实现。

    6.一种用于管理存储对象的元数据的方法,包括:

    从持久化存储设备中将用于索引存储对象的元数据的第一索引结构和与所述第一索引结构相对应的页表的至少一部分读取到存储器中,其中所述第一索引结构用于记录所述存储对象的第一标识符和所述存储对象的所述元数据所在的存储页面的第二标识符之间的映射关系,并且所述页表用于记录所述第二标识符与所述存储页面的页面地址之间的映射关系;以及

    响应于接收到访问所述存储对象的元数据的第一请求,基于所述第一索引结构和所述页表的所述至少一部分来访问所述存储对象的所述元数据。

    7.根据权利要求6所述的方法,其中在所述持久化设备中存储的所述页表包括多个分块和用于记录所述多个分块在所述持久化存储设备中的相应地址的第二索引结构,并且读取所述页表的至少一部分包括:

    从所述持久化存储设备中读取所述第二索引结构。

    8.根据权利要求7所述的方法,其中访问所述存储对象的所述元数据包括:

    从所述第一请求中提取所述存储对象的所述第一标识符;

    通过查找所述第一索引结构,确定所述存储对象的所述元数据所在的所述存储页面的所述第二标识符;

    基于所述第二标识符,从所述多个分块中确定与所述存储页面相关联的分块;

    通过查找所述第二索引结构,确定所述分块在所述持久化存储设备中的地址;

    从所述持久化存储设备中的所述地址读取所述分块;

    基于所述第二标识符,在所述分块中查找所述存储页面的页面地址;以及

    从所述持久化存储设备中的所述页面地址访问所述存储对象的所述元数据。

    9.根据权利要求7所述的方法,还包括:

    基于所述第二索引结构,从所述持久化存储设备中将所述多个分块读取到所述存储器中,以在所述存储中恢复所述页表。

    10.根据权利要求6所述的方法,其中在所述持久化设备中存储的所述页表包括先前页表和用于记录所述页表相对于所述先前页表的更新的至少一个页表日志,所述先前页表包括多个分块和用于记录所述多个分块在所述持久化存储设备中的相应地址的第二索引结构,并且读取所述页表的至少一部分包括:

    从所述持久化存储设备中读取所述至少一个页表日志和所述第二索引结构。

    11.根据权利要求10所述的方法,其中访问所述存储对象的所述元数据包括:

    从所述第一请求中提取所述存储对象的所述第一标识符;

    通过查找所述第一索引结构,确定所述存储对象的所述元数据所在的所述存储页面的所述第二标识符;

    基于所述第二标识符,从所述至少一个页表日志中查找所述存储页面的页面地址;以及

    响应于所述存储页面的所述页面地址在所述至少一个页表日志中被找到,从所述持久化存储设备中的所述页面地址访问所述存储对象的所述元数据。

    12.根据权利要求11所述的方法,还包括:

    响应于所述存储页面的所述页面地址在所述至少一个页表日志中未被找到,基于所述第二标识符从所述多个分块中确定与所述存储页面相关联的分块;

    通过查找所述第二索引结构,确定所述分块在所述持久化存储设备中的地址;

    从所述持久化存储设备中的所述地址读取所述分块;

    基于所述第二标识符,在所述分块中查找所述存储页面的页面地址;以及

    从所述持久化存储设备中的所述页面地址访问所述存储对象的所述元数据。

    13.根据权利要求10所述的方法,还包括:

    基于所述第二索引结构,从所述持久化存储设备中将所述多个分块读取到所述存储器中,以在所述存储器中恢复所述先前页表;以及

    通过合并所述先前页表和所述至少一个页表日志,在所述存储器中恢复所述页表。

    14.根据权利要求9或13所述的方法,其中所述第一索引结构还用于索引另一存储对象的元数据,并且所述方法还包括:

    响应于接收到访问所述另一存储对象的所述元数据的第二请求基于所述第一索引结构和所述页表来访问所述另一存储对象的所述元数据。

    15.根据权利要求6所述的方法,其中所述第一索引结构利用b 树来实现。

    16.一种用于管理存储对象的元数据的装置,包括:

    至少一个处理单元;

    至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理单元并且存储用于由所述至少一个处理单元执行的指令,所述指令当由所述至少一个处理单元执行时,使得所述装置执行动作,所述动作包括:

    响应于存储对象的元数据被更新,在存储器中更新用于索引所述存储对象的所述元数据的第一索引结构和与所述第一索引结构相对应的页表,其中所述第一索引结构用于记录所述存储对象的第一标识符和所述存储对象的所述元数据所在的存储页面的第二标识符之间的映射关系,所述页表用于记录所述第二标识符与所述存储页面的页面地址之间的映射关系,并且其中所述第一索引结构和所述页表已被存储在持久化存储设备中;

    将对所述页表的更新记录在至少一个页表日志中;以及

    将经更新的第一索引结构和所述至少一个页表日志存储到所述持久化存储设备中。

    17.根据权利要求16所述的装置,其中所述动作还包括:

    确定所述持久化存储设备中的所述至少一个页表日志是否将与所述页表合并;

    响应于确定所述至少一个页表日志将与所述页表合并,将所述页表和至少一个页表日志合并为经更新的页表;以及

    将所述经更新的页表存储在所述持久化存储设备中。

    18.根据权利要求17所述的装置,其中确定所述至少一个页表日志是否将与所述页表合并包括:

    确定合并条件是否被满足;以及

    响应于所述合并条件被满足,确定所述至少一个页表日志将与所述页表合并,其中所述合并条件包括以下至少一项:

    距离上次页表日志合并的时间超过阈值时间;以及

    由所述至少一个页表日志所指示的页表更新量超过阈值量。

    19.根据权利要求17所述的装置,其中将所述经更新的页表存储在所述持久化存储设备中包括:

    将所述经更新的页表划分为多个分块;

    将所述多个分块分别存储在所述持久化存储设备中;

    生成第二索引结构以用于记录所述多个分块在所述持久化存储设备中的相应地址;以及

    将所述第二索引结构存储在所述持久化存储设备中。

    20.根据权利要求16所述的装置,其中所述第一索引结构利用b 树来实现。

    21.一种用于管理存储对象的元数据的装置,包括:

    至少一个处理单元;

    至少一个存储器,所述至少一个存储器被耦合到所述至少一个处理单元并且存储用于由所述至少一个处理单元执行的指令,所述指令当由所述至少一个处理单元执行时,使得所述装置执行动作,所述动作包括:

    从持久化存储设备中将用于索引存储对象的元数据的第一索引结构和与所述第一索引结构相对应的页表的至少一部分读取到存储器中,其中所述第一索引结构用于记录所述存储对象的第一标识符和所述存储对象的所述元数据所在的存储页面的第二标识符之间的映射关系,并且所述页表用于记录所述第二标识符与所述存储页面的页面地址之间的映射关系;以及

    响应于接收到访问所述存储对象的元数据的第一请求,基于所述第一索引结构和所述页表的所述至少一部分来访问所述存储对象的所述元数据。

    22.根据权利要求21所述的装置,其中在所述持久化设备中存储的所述页表包括多个分块和用于记录所述多个分块在所述持久化存储设备中的相应地址的第二索引结构,并且读取所述页表的至少一部分包括:

    从所述持久化存储设备中读取所述第二索引结构。

    23.根据权利要求22所述的装置,其中访问所述存储对象的所述元数据包括:

    从所述第一请求中提取所述存储对象的所述第一标识符;

    通过查找所述第一索引结构,确定所述存储对象的所述元数据所在的所述存储页面的所述第二标识符;

    基于所述第二标识符,从所述多个分块中确定与所述存储页面相关联的分块;

    通过查找所述第二索引结构,确定所述分块在所述持久化存储设备中的地址;

    从所述持久化存储设备中的所述地址读取所述分块;

    基于所述第二标识符,在所述分块中查找所述存储页面的页面地址;以及

    从所述持久化存储设备中的所述页面地址访问所述存储对象的所述元数据。

    24.根据权利要求22所述的装置,其中所述动作还包括:

    基于所述第二索引结构,从所述持久化存储设备中将所述多个分块读取到所述存储器中,以在所述存储中恢复所述页表。

    25.根据权利要求21所述的装置,其中在所述持久化设备中存储的所述页表包括先前页表和用于记录所述页表相对于所述先前页表的更新的至少一个页表日志,所述先前页表包括多个分块和用于记录所述多个分块在所述持久化存储设备中的相应地址的第二索引结构,并且读取所述页表的至少一部分包括:

    从所述持久化存储设备中读取所述至少一个页表日志和所述第二索引结构。

    26.根据权利要求25所述的装置,其中访问所述存储对象的所述元数据包括:

    从所述第一请求中提取所述存储对象的所述第一标识符;

    通过查找所述第一索引结构,确定所述存储对象的所述元数据所在的所述存储页面的所述第二标识符;

    基于所述第二标识符,从所述至少一个页表日志中查找所述存储页面的页面地址;以及

    响应于所述存储页面的所述页面地址在所述至少一个页表日志中被找到,从所述持久化存储设备中的所述页面地址访问所述存储对象的所述元数据。

    27.根据权利要求26所述的装置,其中所述动作还包括:

    响应于所述存储页面的所述页面地址在所述至少一个页表日志中未被找到,基于所述第二标识符从所述多个分块中确定与所述存储页面相关联的分块;

    通过查找所述第二索引结构,确定所述分块在所述持久化存储设备中的地址;

    从所述持久化存储设备中的所述地址读取所述分块;

    基于所述第二标识符,在所述分块中查找所述存储页面的页面地址;以及

    从所述持久化存储设备中的所述页面地址访问所述存储对象的所述元数据。

    28.根据权利要求25所述的装置,其中所述动作还包括:

    基于所述第二索引结构,从所述持久化存储设备中将所述多个分块读取到所述存储器中,以在所述存储器中恢复所述先前页表;以及

    通过合并所述先前页表和所述至少一个页表日志,在所述存储器中恢复所述页表。

    29.根据权利要求24或28所述的装置,其中所述第一索引结构还用于索引另一存储对象的元数据,并且所述动作还包括:

    响应于接收到访问所述另一存储对象的所述元数据的第二请求基于所述第一索引结构和所述页表来访问所述另一存储对象的所述元数据。

    30.根据权利要求21所述的装置,其中所述第一索引结构利用b 树来实现。

    31.一种计算机程序产品,所述计算机程序产品被有形地存储在计算机存储介质中并且包括机器可执行指令,所述机器可执行指令在由设备执行时使所述设备执行根据权利要求1-5中的任一项所述的方法。

    32.一种计算机程序产品,所述计算机程序产品被有形地存储在计算机存储介质中并且包括机器可执行指令,所述机器可执行指令在由设备执行时使所述设备执行根据权利要求6-15中的任一项所述的方法。

    技术总结
    本公开的实施例涉及用于管理存储对象的元数据的方法、装置和计算机程序产品。一种方法包括:响应于存储对象的元数据被更新,在存储器中更新用于索引存储对象的元数据的第一索引结构和与第一索引结构相对应的页表,其中第一索引结构用于记录存储对象的第一标识符和存储对象的元数据所在的存储页面的第二标识符之间的映射关系,页表用于记录第二标识符与存储页面的页面地址之间的映射关系,并且其中第一索引结构和页表已被存储在持久化存储设备中;将对页表的更新记录在至少一个页表日志中;以及将经更新的第一索引结构和至少一个页表日志存储到持久化存储设备中。本公开的实施例能够显著提高分布式对象存储系统中元数据故障转移和持久化的速度。

    技术研发人员:丁辰瑜;曹江;郭敬元
    受保护的技术使用者:伊姆西IP控股有限责任公司
    技术研发日:2019.09.12
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-23637.html

    最新回复(0)