将容器索引写入持久性存储装置的制作方法

文档序号:29946601发布日期:2022-05-07 16:24阅读:62来源:国知局
将容器索引写入持久性存储装置的制作方法
将容器索引写入持久性存储装置


背景技术:

1.可以应用数据归约(data reduction)技术来减少存储在存储系统中的数据量。示例数据归约技术包括数据去重(deduplication)。数据去重识别(identify)重复的数据单元,并且力图缩减或消除存储在存储系统(storage system)中的重复数据单元的实例的数量。
附图说明
2.关于以下附图描述了一些实施方式。
3.图1是根据一些实施方式的示例存储系统的示意图。
4.图2是根据一些实施方式的示例数据结构的图示。
5.图3是根据一些实施方式的示例数据结构的图示。
6.图4是根据一些实施方式的示例系统的图示。
7.图5是根据一些实施方式的示例操作的图示。
8.图6是根据一些实施方式的示例数据结构的图示。
9.图7是根据一些实施方式的示例过程的图示。
10.图8是根据一些实施方式的示例过程的图示。
11.图9是根据一些实施方式的存储有指令的示例机器可读介质的图。
12.图10是根据一些实施方式的示例计算设备的示意图。
13.在所有附图中,相同的附图标记指代相似但不一定相同的元素。附图不一定是成比例的,并且一些部分的尺寸可以被放大以更清楚地图示所示的示例。此外,附图提供了与描述一致的示例和/或实施方式;然而,描述不限于附图中提供的示例和/或实施方式。
具体实施方式
14.在本公开中,除非上下文另外明确指示,否则使用术语“一个(a)”、“一种(an)”或“所述(the)”旨在同样包括复数形式。同样地,当在本公开中使用时,术语“包括/包含(includes/including/comprises/comprising)”或“具有(have/having)”指明存在所述元件,但不排除存在或添加其他元件。
15.在一些示例中,存储系统可以对数据进行去重以减少存储数据所需的空间量。存储系统可以执行数据去重过程,包括将数据流分解为离散的数据单元或“组块(chunk)”。进一步地,存储系统可以确定传入数据单元的标识符或“指纹”,并且可以确定哪些传入数据单元是先前存储的数据单元的复制品。在数据单元是复制品的情况下,存储系统可以存储对先前数据单元的引用,而不是存储重复的传入数据单元。
16.如本文所使用的,“指纹”是指通过对数据单元的内容应用函数而得到的值(其中“内容”可以包括数据单元的内容的全部或子集)。可以应用的函数的示例包括基于传入数据单元产生散列值的散列函数。散列函数的示例包括密码散列函数,如安全散列算法2(sha-2)散列函数(例如,sha-224、sha-256、sha-384等)。在其他示例中,可以采用其他类型
的散列函数或其他类型的指纹函数。
[0017]“存储系统”可以包括存储设备(storage device)或存储设备阵列。存储系统还可以包括管理对(多个)存储设备的访问的(多个)存储控制器。“数据单元”可以指可以在存储系统中单独识别的任何数据部分。在一些情况下,数据单元可以指组块、组块的集合、或任何其他数据部分。在一些示例中,存储系统可以将数据单元存储在持久性存储装置(persistent storage)中。可以使用一种或多种(多个)持久性(例如,非易失性)存储设备(比如(多个)基于磁盘的存储设备(例如,(多个)硬盘驱动器(hdd))、(多个)固态设备(ssd)(比如(多个)闪速存储设备)等或者其组合)来实施持久性存储装置。
[0018]“控制器”可以指硬件处理电路,其可以包括微处理器、多核微处理器的核、微控制器、可编程集成电路、可编程门阵列、数字信号处理器或其他硬件处理电路中的任一项或某种组合。可替代地,“控制器”可以指硬件处理电路与可在硬件处理电路上执行的机器可读指令(软件和/或固件)的组合。
[0019]
在一些示例中,数据去重存储系统可以使用元数据来处理一个或多个入站数据流(例如,多个并发入站数据流)。例如,这样的元数据可以包括指定特定数据单元的接收顺序(例如,在数据流中)的数据配方(data recipe)(本文也称为“清单(manifest)”)。随后,响应于读取请求,数据去重系统可以使用清单来确定数据单元的接收顺序,从而可以重新创建原始数据流。清单可以包括一系列记录,每个记录代表一组特定的数据单元。
[0020]
清单的记录可以包括标识包括数据单元的存储信息的索引的一个或多个字段(本文也称为“指针信息”)。例如,存储信息可以包括一个或多个索引字段,其指定所存储数据单元的位置信息(例如,容器、偏移量等)、所存储数据单元的压缩和/或加密特性等。在一些示例中,清单和索引均可以以固定大小的可寻址部分(例如,4kb部分)读取。
[0021]
在一些示例中,在处理入站数据流时,数据去重系统可以生成和更新存储器(memory)中的数据对象。例如,每个数据流可以与数据容器、清单(指定数据单元的接收顺序)和容器索引(指定诸如数据容器的标识符、偏移量等存储信息)相关联。然而,这种仅存在于存储器中的数据对象可能会在断电或系统错误期间丢失。因此,在操作期间的不同时间,数据去重系统可以将这样的数据对象从存储器写入持久性存储装置(在本文中也称为“持久化”每个对象)。
[0022]
在一些示例中,用于持久化入站流的数据对象的传统过程可以包括,对于入站流的每个清单,持久化与清单相关联的数据容器,然后持久化与清单相关联的容器索引,并且最后持久化清单本身。进一步地,为了确保数据对象的事务完整性(transactional integrity),必须在持久化第一个清单及其相关联的数据对象成功完成之后,才能继续持久化另一个清单及其相关联的数据对象。然而,在包括多个入站流的示例中,相同的数据对象(例如,特定容器索引)可能被持久化多次(即,每个入站流一次)。因此,此类传统持久化操作可能涉及对持久性存储装置的重复且低效的写入,并且因此可能导致相对缓慢和/或低效的数据去重操作。
[0023]
根据本公开的一些实施方式,存储系统可以包括用于管理持久化操作的控制进程。控制进程可以从流进程(stream process)接收对持久化操作的请求,并且作为响应可以向流进程提供令牌而不是执行所请求的持久化操作。在一些实施方式中,所提供的令牌可以表示用于在稍后的时间点执行所请求的写入的合约(contract)或承诺(commitment),
或者与其相关联(在本文中也称为“持久化合约”)。进一步地,流进程可以随后使用令牌来完成持久化操作。
[0024]
在一些实施方式中,可以向多个请求者发出多个令牌,其中,这些令牌表示用于单个数据对象(例如,特定容器索引)的多个持久化合约。当在稍后的时间点持久化数据对象时,可以通过单个写入操作同时履行多个持久化合约。以这种方式,存储系统可以提供数据对象的持久性,同时减少数据对象的重复写入次数。因此,一些实施方式可以提高存储系统的性能,并且可以减少为提供数据持久性而消耗的计算资源量。
[0025]
1.示例存储系统
[0026]
图1示出了根据一些实施方式的包括存储控制器110、存储器115和持久性存储装置140的存储系统100的示例。如图所示,持久性存储装置140可以包括任何数量的清单150、容器索引160、数据容器170和日志(journal)分组120。进一步地,存储器115也可以包括清单150、容器索引160、数据容器170、日志分组120和控制进程180。持久性存储装置140可以包括一个或多个非暂态存储介质,如硬盘驱动器(hdd)、固态驱动器(ssd)、光盘等、或其组合。存储器115可以用诸如随机存取存储器(ram)等半导体存储器实施。
[0027]
在一些实施方式中,存储系统100可以对多个入站数据流105a-105n(本文也称为“数据流105”)执行并发数据去重。例如,存储控制器110可以将每个数据流105划分成数据单元,并且可以在数据容器170中存储每个数据单元的至少一个副本(例如,通过将数据单元附加到容器170的末尾)。在一些示例中,每个数据容器170可以被划分成多个部分(本文也称为“实体”)(图1中未示出)。每个实体可以包括一个或多个存储的数据单元。
[0028]
在一个或多个实施方式中,存储控制器110可以为每个数据单元生成指纹。例如,指纹可以包括基于数据单元的完整或部分散列值。为了确定传入的数据单元是否是存储的数据单元的复制品,存储控制器110可以将针对传入数据单元生成的指纹与存储的数据单元的指纹进行比较。如果该比较产生匹配,则存储控制器110可以确定存储系统100已经存储了传入数据单元的复制品。
[0029]
在一些实施方式中,存储控制器110可以生成清单150以记录每个数据流105中的数据单元的接收顺序。进一步地,清单150可以包括指示与每个数据单元相关联的容器索引160的指针或其他信息。在一些实施方式中,相关联的容器索引160可以指示数据单元的存储位置。例如,相关联的容器索引160可以包括指定数据单元以特定偏移量存储在实体中并且实体以特定偏移量存储在数据容器170中的信息。
[0030]
在一些实施方式中,存储控制器110可以接收读取请求以访问所存储的数据,并且作为响应可以访问清单150以确定构成原始数据的数据单元的序列。存储控制器110然后可以使用包括在清单150中的指针数据来识别与数据单元相关联的容器索引160。进一步地,存储控制器110可以使用包括在所识别的容器索引160中的信息来确定数据单元(例如,数据容器170、实体、偏移量等)的存储位置,并且然后可以从所确定的位置中读取数据单元。
[0031]
在一些实施方式中,每个日志分组120可以包括多个日志130。每个日志130可以与对应的索引160相关联。在一些实施方式中,存储器115中的日志130可以记录与存储在相关联索引160中的元数据相关联的更改。例如,当存在于存储器115中的索引160的副本被修改以反映对元数据的更改时,该更改也可以被记录为相关联日志130中的条目。在一些实施方式中,每个日志分组120可以与存储在数据去重系统中的单个文件或对象相关联。例如,包
括在特定日志分组120中的多个日志130可以对应于存储与单个文件相关联的元数据的索引。
[0032]
在一些实施方式中,在访问与索引160相关联的(多个)数据单元时,存储系统100可以将该索引160存储在存储器115中。例如,在与索引160相关联的数据单元被添加到数据容器170、从数据容器170中删除等时,可以将索引160存储在存储器115中。进一步地,存储器115还可以存储包括与索引160相对应的日志130的日志分组120。在一些实施方式中,日志130可以记录与存储在索引160中的元数据相关联的一组更改。例如,当修改存储器115中的索引160以反映对元数据的更改时,该更改也可以记录在日志130中。
[0033]
在一些实施方式中,响应于命令或事件,可以修改索引160以包括记录在日志130中的更改。例如,在将索引160和相关联的日志130加载到存储器115中时(例如,响应于读取请求),可以比较索引160和日志130的版本号。如果日志130的版本号比索引160的版本号更高(即,更新),则可以按时间顺序(例如,按发生顺序)访问记录在索引160中的更改,并且每个更改可以在索引160中依次执行。否则,如果日志130的版本号不高于索引160的版本号,则日志130可以被清除所有记录的更改,并且日志130可以用于记录附加更改。
[0034]
在一些实施方式中,当发生将导致对存储在索引160中的元数据的更改的事件时,这些更改可以记录在与索引160相关联的日志130中。在一些示例中,当存在将索引160写入持久性存储装置140的要求时,可以确定相关联的日志130的填充水平是否超过预定义阈值。如果填充水平未超过阈值,则将日志130而不是索引160写入持久性存储装置140。进一步地,因为日志130仅记录对索引160的最近更改,所以将日志130写入持久性存储装置140可以消耗的处理时间和带宽与在将整个索引160写入持久性存储装置140时所需要消耗的相比相对较少。
[0035]
在一个或多个实施方式中,控制进程180可以接收对存储器115中的容器索引160的持久化请求,并且作为响应可以向请求进程提供令牌。令牌可以表示用于在稍后的时间点执行所请求的持久化操作的合约。下面参考图4至图10进一步描述用于表示持久化合约的令牌的使用。控制进程180可以由存储控制器110执行。
[0036]
2.示例数据结构
[0037]
现在参考图2,示出了根据一些实施方式的在数据去重中使用的示例数据结构200的图示。如图所示,数据结构200可以包括清单记录210、容器索引220、容器250和实体260。在一些示例中,清单记录210、容器索引220、容器250和实体230可以大体上分别对应于清单记录155、索引160、数据容器170和实体175(如图1所示)的示例实施方式。在一些示例中,数据结构200可以由存储控制器110(如图1所示)生成和/或管理。
[0038]
如图2所示,在一些示例中,清单记录210可以包括各种字段,如偏移量、长度、容器索引和单元地址。在一些实施方式中,每个容器索引220可以包括任何数量的数据单元记录230和实体记录240。每个数据单元记录230可以包括各种字段,如指纹(例如,数据单元的散列)、单元地址、实体标识符、单元偏移量(即,数据单元在实体内的偏移量)、计数值和单元长度。进一步地,每个实体记录240可以包括各种字段,如实体标识符、实体偏移量(即,实体在容器内的偏移量)、存储长度(即,数据单元在实体内的长度)、解压缩长度、校验和值和压缩/加密信息(例如,压缩类型、加密类型等)。在一些实施方式中,每个容器250可以包括任何数量的实体260,并且每个实体260可以包括任何数量的存储的数据单元。
[0039]
在一些实施方式中,每个容器索引220可以包括版本号235,所述版本号指示容器索引中元数据的代或相对年龄。例如,可以将版本号235与相关联日志(图2中未示出)的版本号进行比较。如果版本号235大于相关联日志的版本号,则可以确定容器索引220包括比相关联日志更新的元数据。
[0040]
在一个或多个实施方式中,数据结构200可以用于取得存储的去重数据。例如,读取请求可以指定给定文件中数据的偏移量和长度。可以将这些请求参数与特定清单记录210的偏移量和长度字段进行匹配。然后可以将特定清单记录210的容器索引和单元地址与包括在容器索引220中的特定数据单元记录230进行匹配。进一步地,可以将特定数据单元记录230的实体标识符与特定实体记录240的实体标识符进行匹配。此外,特定实体记录240的一个或多个其他字段(例如,实体偏移量、存储长度、校验和等)可以用于识别容器250和实体260,然后可以从识别的容器250和实体260中读取数据单元。
[0041]
3.示例数据结构
[0042]
现在参考图3,示出了包括日志分组310和多个索引330的存储器115的图示。如图所示,日志分组310包括多个日志320。在一些示例中,日志分组310、日志320和索引330可以大体上分别对应于日志分组120、日志130和索引160(如图1所示)的示例实施方式。
[0043]
在一些实施方式中,每个日志320可以与对应的索引330相关联,并且可以记录对存储在对应索引330中的元数据的更改。进一步地,对于每个日志分组120,所有对应的索引330都可以与单个存储对象(例如,文档、数据库表、数据文件等)相关联。例如,所有的对应索引330可以包括用于在存储在数据去重系统(例如,图1中所示的存储系统100)中的单个文件中包括的数据单元的元数据。
[0044]
在一些实施方式中,每个日志320可以包括或与版本号325相关联。进一步地,每个索引330可以包括或与版本号335相关联。在一些实施方式中,可以将版本号325与版本号335进行比较以确定日志320或相关联索引330是否反映了元数据的最新版本。例如,如果版本号325大于版本号335,则可以确定包括在日志320中的更改数据反映了比存储在索引330中的元数据更新的元数据状态。如果是这样,则可以更新索引330以包括记录在日志320中的更改。然而,如果版本号325小于版本号335,则可以确定包括在日志320中的更改数据反映了比存储在索引330中的元数据更旧的元数据状态。在这种情况下,可以清除日志320,而不更新索引330。在一些实施方式中,可以响应于将日志320或相关联索引330从持久性存储装置加载到存储器中(例如,从持久性存储装置140到存储器115中,如图1所示)来执行版本号325与版本号335的比较。在一个或多个实施方式中,可以在存储的参数(例如,用户设置、配置变量等)中指定包括在日志分组310中的日志320的数量。
[0045]
4.示例系统
[0046]
现在参考图4,示出了根据一些实施方式的示例系统400。如图所示,系统400可以包括存储器415和持久性存储装置440。在一些示例中,存储器415和持久性存储装置440可以大体上分别对应于存储器115和持久性存储装置140(如图1所示)的示例实施方式。
[0047]
如图所示,存储器415可以包括多个流进程410a-410n(本文也称为“流进程410”)、多组数据对象420a-420n(本文也称为“数据对象420”)和写入控制430。每个流进程410可以是与单个数据流相关联的执行进程(例如,线程、模块、应用程序等)。例如,每个流进程410可以由处理器(图4中未示出)执行,并且可以基于外部数据(例如,通过网络从远程源接收
的数据)或本地数据(例如,存储在持久性存储装置440中的文件或其他数据)来管理相关联数据流的数据去重。如图4所示,每个流进程410可以生成和/或更新对应的一组数据对象420。每组数据对象420可以包括清单422、容器索引424、日志426和数据容器428。在一些实施方式中,每个日志426可以与特定容器索引424相关联。
[0048]
在一些实施方式中,写入控制430可以是管理数据对象420从存储器415到持久性存储装置440的写入(本文也称为“持久化操作”)的执行进程。例如,写入控制430可以从流进程410接收持久化请求,并且作为响应可以向流进程410提供令牌。令牌可以表示用于在稍后的时间点执行所请求的持久化操作的合约。在一些示例中,写入控制430可以大体上对应于控制进程180(如图1所示)的示例实施方式。
[0049]
在一些实施方式中,多个流进程410可以利用相同的数据对象420(例如,特定的容器索引424),并且可以单独地向写入控制430发送对相同数据对象420的持久化请求。代替执行所请求的持久化操作,写入控制430可以向请求流进程410提供表示相同数据对象420的持久化合约的各种令牌。在稍后的时间点,写入控制430可以通过执行从存储器415到持久性存储装置440的单个写入操作来持久化数据对象420。进一步地,可以通过该单个写入操作来履行多个持久化合约(由多个令牌表示)。
[0050]
在一些实施方式中,每个令牌可以是表示持久化合约的唯一标识符,但是对于流进程410是“不透明的”(即,不能被流进程410读取或解析以确定关于相关联合约的特定信息)。例如,写入控制430可以将每个令牌生成为随机的字母数字字符串。进一步地,写入控制430可以包括合约数据结构435以跟踪关于提供给流进程410的令牌和相关联的持久化合约的信息。例如,合约数据结构435可以跟踪每个令牌、接收了令牌的流进程410、要持久化的数据对象、持久化操作的当前状态等。下面参考图5描述使用令牌和合约数据结构435的示例操作。
[0051]
在一些实施方式中,写入控制430可以通过以下方式来持久化每个数据对象420:首先发出表示持久化合约的令牌,随后完成或“履行”由令牌表示的持久化合约(在本文中也称为“完成令牌”)。在一些示例中,写入控制430可以响应于来自流进程410的持久化请求而发出令牌。
[0052]
在一些实施方式中,写入控制430可以响应于来自流进程410的令牌完成请求来完成令牌。例如,令牌完成请求可以是流进程410响应于到达入站数据流的端点或检查点而生成的转储清除命令。在一些示例中,完成请求可以包括令牌(例如,作为参数、归档等)。进一步地,在一些实施方式中,写入控制430可以响应于系统400中出现的事件或条件(本文也称为“系统事件”)来完成令牌。例如,可以根据最近最少使用(lru)策略来选择存储器中的容器索引424用于逐出(eviction)(例如,如果分配给容器索引424的存储器空间已满的话),并且作为响应,写入控制430可以导致将所选的容器索引写入持久性存储装置。以这种方式,逐出系统事件可以履行所选容器索引424的持久化合约。
[0053]
在一个或多个实施方式中,由令牌表示的持久化合约可以与特定容器索引424及其版本号的组合相关联。例如,如果第一容器索引c1在生成第一令牌的时间点具有第一版本号v1,则第一令牌可以表示用于持久化具有第一版本v1的第一容器索引c1的副本的合约。在另一示例中,如果第一容器索引c1在生成第二令牌的稍后时间点具有第二版本号v2,则第二令牌可以表示用于持久化具有第二版本v2的第一容器索引c1的副本的合约。进一步
地,在一些实施方式中,容器索引424的版本号可以响应于以第一版本号(例如,v1)写入容器索引424的持久化操作而递增(例如,到v2)。
[0054]
在一些实施方式中,可以修改表示用于持久化容器索引424的合约的令牌,以使得其替代地表示用于持久化与容器索引424相关联的日志426的合约。例如,写入控制430(或另一控制模块)可以确定为容器索引424分配的存储器空间已经超过阈值水平,并且因此可以导致使用第一日志426来代替相关联的容器索引424(即,以记录传入流的元数据更改)。进一步地,写入控制430可以将用于持久化容器索引424的现有合约修改为替代地持久化第一日志426。此外,写入控制430可以将用于持久化日志426的合约修改为替代地持久化相关联的容器索引424。在一些实施方式中,这种合约修改可以由写入控制430进行和跟踪,但是可以对接收令牌的流进程410隐藏。
[0055]
5.示例操作
[0056]
现在参考图5,示出了根据一些实施方式的示例操作500。如图所示,示例操作500涉及三个进程(即,流a 502、写入控制504和流b 506)的数据流和/或动作。流a 502和流b 506可以是由处理器(例如,图1中所示的存储控制器110)执行的流进程。进一步地,写入控制504是由处理器执行的写入控制进程。在图5所示的图示中,假设在不同的竖直位置示出了不同的时间点,其中相对较高的竖直位置表示较早的时间点,并且相对较高较低的位置表示较晚的时间点。
[0057]
在图5所示的最早时间点,流a 502可以发送用于持久化第一容器索引c1的请求510。假设此时,第一容器索引c1的版本号为v1(例如,对应于图2所示的版本号235)。因此,响应于请求510,写入控制504可以向流a 502提供515token1(c1,v1)。如本文所使用的,记号“token1(c1,v1)”是指表示用于具有版本号v1的容器索引c1的持久化合约的第一令牌。在示例操作500中,假设第一容器索引c1没有响应于请求510而被持久化。
[0058]
在稍后的时间点,流b 506可以发送用于持久化第一容器索引c1的请求520。因此,响应于请求520,写入控制504可以向流b 506提供525token2(c1,v1)。进一步地,流a 502可以发送用于持久化第二容器索引c2的请求530。假设此时第二容器索引c2的版本号为v1。因此,响应于请求530,写入控制504可以向流a 502提供535token3(c2,v1)。在示例操作500中,假设第一容器索引c1没有响应于请求520而被持久化,并且第二容器索引c2没有响应于请求530而被持久化。
[0059]
在稍后的时间点,流b 506可以发送用于完成token2(c1,v1)的请求540。如本文所使用的,短语“完成令牌”是指履行由令牌表示的持久化合约。响应于请求540,写入控制504可以根据token2(c1,v1)写入542第一容器索引c1。换言之,写入控制504可以通过将第一容器索引c1的版本v1写入持久性存储装置来完成token2(c1,v1)。进一步地,响应于将第一容器索引c1写入持久性存储装置,写入控制504可以将第一容器索引c1的版本号从v1递增到v2。此外,在将第一容器索引c1写入持久性存储装置之后,写入控制504可以向流b 506发送已经完成token2(c1,v1)的确认546。
[0060]
在稍后的时间点,写入控制504可以根据系统事件写入550第二容器索引c2。例如,如果为容器索引分配的存储器空间已满,则最近最少使用(lru)进程可以指定从存储器中逐出第二容器索引c2。因此,写入控制504可以将第二容器索引c2写入持久性存储装置以避免当第二容器索引c2从存储器逐出时索引信息的丢失。进一步地,响应于将第二容器索引
c2写入持久性存储装置,写入控制504可以将第二容器索引c2的版本号从v1递增到v2。
[0061]
在稍后的时间点,流a 502可以发送用于持久化第一容器索引c1的请求560。回想起第一容器索引c1的版本号已递增到v2(即,在框542处)。因此,响应于请求560,写入控制504可以向流a 502提供565token4(c1,v2)。
[0062]
在稍后的时间点,流a 502可以发送用于完成token1(c1,v1)、token3(c2,v1)和token4(c1,v2)的请求570。响应于请求570,写入控制504可以读取存储的合约数据(例如,图4中所示的合约数据435),并且可以由此确定token1(c1,v1)和token3(c2,v1)先前已完成。具体地,当根据token2(c1,v1)写入第一容器索引c1时(即,在框542处),token1(c1,v1)先前已完成。进一步地,当根据系统事件写入第二容器索引c2时(即,在框550),token3(c2,v1)先前已完成。因此,写入控制504可以根据token4(c1,v2)写入572第一容器索引c1。换言之,写入控制504可以通过将第一容器索引c1的版本v2写入持久性存储装置来完成token4(c1,v2)。进一步地,响应于将第一容器索引c1写入持久性存储装置,写入控制504可以将第一容器索引c1的版本号从v2递增到v3。此外,写入控制504可以向流a 502发送已经完成token1(c1,v1)、token3(c2,v1)和token4(c1,v2)的确认576。
[0063]
6.示例合约数据结构
[0064]
现在参考图6,示出了根据一些实施方式的示例合约数据结构600。在一些示例中,合约数据结构600可以大体上对应于与写入控制430(如图4中所示)相关联的合约数据435的示例实施方式。如图6所示,合约数据结构600可以包括对应于不同令牌的任何数量的条目。在一些实施方式中,写入控制进程可以使用合约数据结构600来跟踪和修改由发出的令牌表示的持久化合约。
[0065]
在一些实施方式中,合约数据结构600的每个条目可以包括与特定令牌相关的任何数量的数据字段。例如,如图6所示,每个条目可以包括令牌值、客户端标识符、对象标识符、版本号和/或状态字段。在一些示例中,令牌值可以是唯一的字母数字串。客户端标识符可以标识进程(例如,图5中所示的流进程流a 502),并且接收令牌(例如,作为对持久化请求的响应)。
[0066]
在一些实施方式中,对象标识符和版本号可以标识将通过由令牌表示的合约持久化的数据对象及其版本(例如,容器索引424或相关联的日志426,如图4所示)。状态字段可以指示合约的状态(例如,未履行、已履行、完成等)。
[0067]
在一个或多个实施方式中,在条目所表示的合约被修改以持久化不同的数据对象的情况下,可以更新条目的对象标识符。例如,如果条目最初与用于持久化容器索引的合约相关联,并且合约被修改为替代地持久化日志,则可以将该条目的对象标识符更新为标识日志而不是容器索引。在一些示例中,写入控制进程(或另一控制进程)可以确定为容器索引分配的存储器空间已经超过阈值水平,并且因此可以导致使用第一日志来代替相关联的容器索引(即,以记录传入流的元数据更改)。进一步地,写入控制进程可以将用于持久化容器索引的现有合约修改为替代地持久化第一日志。
[0068]
7.用于对容器索引中的跟踪数据设置上限的示例过程
[0069]
现在参考图7,示出了根据一些实施方式的用于修改合约的示例过程700。在一些示例中,可以执行过程700以将用于持久化一种类型的数据对象的合约修改为替代地持久化不同类型的对象。过程700可以使用存储控制器110(如图1所示)来执行。可以以硬件或硬
件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)的方式来实施过程700。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。为了便于说明,下面可以参考示出了根据一些实施方式的示例的图1至图6来描述过程700的细节。然而,其他实施方式也是可能的。
[0070]
框710可以包括从流进程接收将存储器中的容器索引写入持久性存储装置的请求。框720可以包括生成合约并向流进程发送令牌。例如,参考图4,写入控制430可以从流进程410a接收用于持久化容器索引424的请求。作为响应,写入控制430可以向流进程410a发送令牌,其中,所述令牌表示用于持久化容器索引424的合约。
[0071]
框730可以包括检测到为容器索引分配的存储器空间超过阈值。框740可以包括将合约修改为替代地写入与容器索引相关联的日志。例如,参考图4,写入控制430(或另一控制模块)可以确定为容器索引424分配的存储器空间已经超过阈值水平,并且作为响应可以将合约修改为替代地持久化与容器索引424相关联的日志426。在框740之后,过程700可以终止。
[0072]
8.用于持久化容器索引的示例过程
[0073]
现在参考图8,示出了根据一些实施方式的用于持久化容器索引的示例过程800。在一些示例中,可以使用存储控制器110(图1所示)来执行过程800。可以以硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)的方式来实施过程800。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。为了便于说明,下面可以参考示出了根据一些实施方式的示例的图1至图6来描述过程800的细节。然而,其他实施方式也是可能的。
[0074]
框810可以包括从第一流进程接收对存储器中的第一容器索引的第一写入请求。框820可以包括响应于接收到第一写入请求,向第一流进程发送第一令牌,而不将第一容器索引写入持久性存储装置。例如,参考图5,写入控制504可以从流进程流b 506接收用于持久化第一容器索引c1的请求520。作为响应,写入控制504可以向流b 506提供525token2(c1,v1)。
[0075]
框830可以包括从第二流进程接收对第一容器索引的第一完成请求。框840可以包括响应于接收到第一完成请求,将第一容器索引从存储器写入到持久性存储装置。例如,参考图5,写入控制504可以从流b 506接收用于完成token2(c1,v1)的请求540。作为响应,写入控制504可以将第一容器索引c1的版本v1写入542到持久性存储装置。在框840之后,过程800可以终止。
[0076]
9.示例机器可读介质
[0077]
图9示出了根据一些实施方式的存储指令910-940的机器可读介质900。指令910-940可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。机器可读介质900可以是非暂态存储介质,比如光学存储介质、半导体存储介质或磁性存储介质。
[0078]
可以执行指令910以从第一流进程接收对存储器中的第一容器索引的第一写入请求。可以执行指令920以响应于接收到第一写入请求,向第一流进程发送第一令牌,而不将第一容器索引写入持久性存储装置。可以执行指令930以从第二流进程接收对第一容器索
引的第一完成请求。可以执行指令940以响应于接收到第一完成请求,将第一容器索引从存储器写入到持久性存储装置。
[0079]
10.示例计算设备
[0080]
图10示出了示例计算设备1000的示意图。在一些示例中,计算设备1000可以大体上对应于存储系统100(如图1所示)的一些或全部。如图所示,计算设备1000可以包括硬件处理器1002和包含指令1010-1040的机器可读存储装置1005。机器可读存储装置1005可以是非暂态介质。指令1010-1040可以由硬件处理器1002或者由硬件处理器1002中所包括的处理引擎执行。
[0081]
可以执行指令1010以从第一流进程接收对存储器中的第一容器索引的第一写入请求。可以执行指令1020以响应于接收到第一写入请求,向第一流进程发送第一令牌,而不将第一容器索引写入持久性存储装置。可以执行指令1030以从第二流进程接收对第一容器索引的第一完成请求。可以执行指令1040以响应于接收到第一完成请求,将第一容器索引从存储器写入到持久性存储装置。
[0082]
根据本文描述的实施方式,存储系统可以包括用于管理持久化操作的控制进程。控制进程可以从流进程接收对持久化操作的请求,并且作为响应可以向流进程提供令牌而不是执行所请求的持久化操作。在一些实施方式中,所提供的令牌可以表示用于在稍后的时间点执行所请求的写入的合约。进一步地,流进程可以随后使用令牌来完成持久化操作。使用这种令牌,存储系统可以持久化数据对象,同时减少数据对象的重复写入次数。因此,一些实施方式可以提高存储系统的性能,并且可以减少为提供数据持久性而消耗的计算资源量。
[0083]
注意,尽管图1至图10示出了各种示例,但是实施方式在这方面不受限制。例如,参考图1,可以设想存储系统100可以包括附加的设备和/或部件、更少的部件、不同的部件、不同的布置等。在另一示例中,可以设想上述存储控制器110的功能可被包括在存储系统100的任何另一引擎或软件中。其他组合和/或变化也是可能的。
[0084]
数据和指令存储在被实施为一个或多个计算机可读或机器可读存储介质的相应存储设备中。存储介质包括不同形式的非暂态存储器,包括:半导体存储器设备,比如动态随机存取存储器或静态随机存取存储器(dram或sram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)和闪速存储器;磁盘,比如固定的软盘和可移动盘;其他磁性介质,包括磁带;光学介质,比如紧致盘(cd)或数字视盘(dvd);或者其他类型的存储设备。
[0085]
注意,上文讨论的指令可以在一个计算机可读或机器可读存储介质上提供,或者可替代地,可以在分布在具有可能多个节点的大型系统中的多个计算机可读或机器可读存储介质上提供。这种一个或多个计算机可读或机器可读存储介质被认为是物品(或制品)的一部分。物品或制品可以指任何制造的单个部件或多个部件。一个或多个存储介质可以位于运行机器可读指令的机器中、或者位于远程站点处,可以通过网络从所述远程站点下载机器可读指令以供执行。
[0086]
在前述描述中,阐述了许多细节以使得理解本文中所公开的主题。然而,可以在没有这些细节中的一些细节的情况下实践实施方式。其他实施方式可以包括上文所讨论的细节的修改和变化。所附权利要求旨在覆盖这样的修改和变化。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1