采用可搜索块的内容可寻址存储系统和方法.pdf

上传人:xia****o6 文档编号:974550 上传时间:2018-03-22 格式:PDF 页数:31 大小:1.68MB
返回 下载 相关 举报
摘要
申请专利号:

CN200910174372.5

申请日:

2009.09.11

公开号:

CN101685468A

公开日:

2010.03.31

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 17/30申请日:20090911|||公开

IPC分类号:

G06F17/30

主分类号:

G06F17/30

申请人:

美国日本电气实验室公司

发明人:

C·昂古里努; C·杜布尼基

地址:

美国新泽西州

优先权:

2008.9.11 US 61/095994; 2009.8.13 US 12/540742

专利代理机构:

中国专利代理(香港)有限公司

代理人:

王 岳;李家麟

PDF下载: PDF下载
内容摘要

本发明涉及采用可搜索块的内容可寻址存储系统和方法。依照本发明的示例性实施例,一种内容可寻址数据结构系统可以包括使用用户定义搜索关键字和数据块内容两者来寻址的数据内容的有向非循环图(DAG)。可以在对其余块进行内容寻址的同时由用户定义搜索关键字得出DAG的保留根的内部关键字。与使用内容地址相反,用户可以在检索和删除保持数据内容的DAG时提供搜索关键字。另外,可以使用诸如应用散列函数和采用分布式散列表之类的内部内容可寻址存储操作来实现内部关键字。

权利要求书

1.  一种存储在存储介质上的内容可寻址数据结构系统,该系统包括:
一组不变规则块,其中,每个规则块可用由该系统根据相应规则块的数据内容得出的内容地址来引用;以及
一组不变可搜索块,其中,每个可搜索块可用相应可搜索块的用户定义搜索关键字来引用,并且其中,每个可搜索块是有向非循环图(DAG)的根,所述有向非循环图包括所述规则块的至少一个子集作为DAG节点。

2.
  权利要求1的系统,其中,所述规则块和可搜索块中的每一个包括以下各项中的至少一个:
充当DAG指针的暴露内容地址或多个字节的二进制数据。

3.
  权利要求1的系统,其中,通过对相应规则块的数据内容应用散列函数来得出所述内容地址中的每个,并且其中,所述可搜索块中的每一个可以用通过对相应可搜索块的对应用户定义搜索关键字应用所述散列函数获得的内部保留关键字来定位。

4.
  权利要求3的系统,其中,所述规则块和可搜索块的组被存储在将所述内容地址和所述内部保留关键字分别映射到对应规则块和可搜索块的分布式散列表中。

5.
  权利要求1的系统,其中,所述可搜索块的至少一个子集组成可搜索块的版本化序列,并且其中,由不同的版本号来标识且可用对应的用户定义搜索关键字来检索所述序列中的每个可搜索块。

6.
  权利要求1的系统,还包括:
至少一个删除根,其中,用由所述可搜索块之一的用户定义搜索关键字得出的内部删除关键字来写入每个删除根,并且其中,每个删除根将所述可搜索块之一标记为删除。

7.
  权利要求6的系统,其中,所述规则块组、所述可搜索块组和所述至少一个删除根被存储在将所述内容地址、所述内部保留关键字和所述内部删除关键字分别映射到对应的规则块、可搜索块和删除根的分布散列表中。

8.
  权利要求7的系统,还包括:
无用单元收集模块,被配置为删除从未被标记为删除的任何可搜索块不可到达的块。

9.
  一种用于管理包括存储介质的内容可寻址存储系统上的数据的方法,包括:
接收对写入不变可搜索块的写请求,所述写请求包括用户定义搜索关键字和数据内容;
基于所述用户定义搜索关键字来得出内部保留关键字;以及
将所述不变可搜索块存储在所述存储介质上,使得可搜索块成为不变规则块的有向非循环图(DAG)的根,其中,所述可搜索块包括所述数据内容,并可用所述内部保留关键字来定位,且所述规则块的每个地址是由相应规则块的内容得出的内容地址。

10.
  权利要求9的方法,其中所述得出还包括对用户定义搜索关键字应用散列函数以生成内部保留关键字,并且其中,由通过对存储在每个相应规则块中的内容应用所述散列函数生成的散列关键字来得出所述内容地址。

11.
  权利要求10的方法,还包括:
将所述可搜索块和所述内部保留关键字插入分布式散列表(DHT)中,使得DHT将所述内部保留关键字和所述内容地址分别映射到所述可搜索块和对应的规则块。

12.
  权利要求11的方法,还包括:
在所述插入之前执行DHT查找以便将内部保留关键字与DHT的条目相比较,其中如果DHT不包括所述内部保留关键字,或者如果DHT包括所述内部保留关键字并将所述内部保留关键字映射到与所述数据内容相同的值,则执行所述插入。

13.
  权利要求12的方法,还包括:
接收检索所述数据内容的读请求,所述读请求包括所述用户定义搜索关键字;
响应于接收到所述读请求而对所述用户定义搜索关键字应用散列函数以得出所述内部保留关键字;以及
用所述内部保留关键字来执行DHT查找以检索所述数据内容。

14.
  权利要求13的方法,还包括:
在内部为用户定义检索关键字附加版本号以将可搜索块标识为可搜索块的版本化序列的成分,其中,所述内部保留关键字基于所述用户定义搜索关键字和所述版本号两者。

15.
  权利要求14的方法,其中,所述读请求包括用于检索所述可搜索块的版本的版本号,所述可搜索块是所述版本化序列的一部分。

16.
  权利要求9的方法,还包括:
接收删除所述数据内容的删除请求,该删除请求包括所述用户定义搜索关键字;
基于所述搜索关键字来得出内部删除关键字;以及
用所述内部删除关键字将删除根块写在存储介质上以将所述可搜索块标记为删除。

17.
  权利要求16的方法,还包括:
对与所述可搜索块相关的规则块执行无用单元收集操作。

18.
  一种用于删除包括存储介质的内容可寻址存储系统上的数据的方法,包括:
提供包括以存储在所述存储介质上的可搜索块为根的规则块的有向非循环图(DAG)的一组不变数据块,其中,每个可搜索块可用相应可搜索块的用户定义搜索关键字来定位,并且其中,每个规则块可用由相应规则块的内容得出的内容地址来定位;
接收将组织在所述DAG之一中的数据内容标记为删除的请求,其中,所述请求包括作为所述用户定义搜索关键字之一的第一搜索关键字;
基于所述第一搜索关键字来得出内部删除关键字;
用内部删除关键字将删除根块写在所述存储介质上;以及
从所述存储介质中删除所述删除根块和可用所述第一搜索关键字来定位的可搜索块。

19.
  权利要求18的方法,其中,所述删除还包括:
将所述删除根和可用所述第一搜索关键字来定位的可搜索块标记为删除;
迭代地将从未被标记为删除的任何可搜索块不可到达的所有规则块标记为删除;以及
移除被标记为删除的所有块。

说明书

采用可搜索块的内容可寻址存储系统和方法
相关申请信息
本申请要求通过引用而结合到本文的于2008年9月11日提交的临时申请序列号61/095,994和通过引用而结合到本文的于2009年7月29日提交的非临时申请12/511,126的优先权。
技术领域
本发明一般涉及管理存储介质上的数据存储,更具体而言,涉及使用辅助存储系统上的可搜索数据块来管理数据内容的存储。
背景技术
用于存储信息的一般机制是内容可寻址存储(Content AddressableStorage,CAS)系统,其使数据块的地址基于其内容而不是预定的存储位置。通常,CAS系统被用于辅助或“永久性”存储器中的相对固定内容的快速存储和检索。内容可寻址存储(CAS)系统通过使用内容的地址来提供对存储数据的访问。一般通过将若干信息片组合起来形成内容地址(CA),所述若干信息片中的至少一个取决于存储对象的内容。通常,通过对于对象的相关数据块的内容应用诸如SHA-1之类的强散列函数来得出内容地址的至少一部分。
与传统存储系统相反,在一旦写入(write)数据块、则不能将其改变的意义上,基于内容地址的存储系统是不变的,因为改变块的数据内容还将改变其地址。这不仅向用户提供所检索的数据与所存储的数据完全相同的某种保证,而且其还允许系统避免存储重复块。例如,如果用户对相同的数据执行多次写操作,则系统将只存储该数据的一份拷贝,并对于每个写操作都返回相同的内容地址。这是可能的,因为数据块的地址由系统来确定。然而,应注意的是,虽然在本文中将CAS系统描述为不变的,但不应将“不变”解释为意指不能删除数据块。相反,应将“不变”解释为意指系统防止能够用已被用于不同数据内容的内容地址来引用数据内容。
遗憾的是,当采用CAS系统时,用户必须在写入对象之后存储CA,以便保持在稍后检索或读取该对象的能力。例如,因为由于散列函数的使用而不能在没有原始内容的情况下得出CA,所以用户不能在未存储内容地址的情况下检索块。另外,即便使用诸如EMS的C-clip之类的其中将CA嵌入存储对象以允许创建有向非循环图(DAG)的高级系统,DAG的根也是包括在没有内容的情况下不可得出的地址位的CA。在写入对象时,C-clip的内容地址被返回到必须将其存储在不同位置的应用程序。
因此,采用CAS的当前存储系统不是独立的(self-contained),因为其需要保持(retain)根块的CA、且在许多系统中还保持其它块的CA的单独存储器。
发明内容
因此,为了提高存储效率,需要一种不需要使用单独存储空间来保持数据块的地址的CAS系统。依照本发明的各种示例性实施方式,下文所讨论的“可搜索块”的使用消除了对维持用于数据块根的地址的单独存储器的任何需要。例如,可以依照不必基于块内容的散列(hash)且用户可简单地记起的用户定义搜索关键字来存储并引用(reference)被实现为保留根(retention root)的可搜索块。另外,如下文所讨论的,可以对其余DAG进行内容寻址以允许CAS系统的所有其它特征的无缝操作。
本发明的一个示例性实施例包括存储在存储介质上的内容可寻址数据结构系统,该系统包括:一组不变规则块(regular block),其中每个规则块可用由该系统根据相应规则块的数据内容而得出的内容地址来引用;以及一组不变可搜索块,其中每个可搜索块可用相应可搜索块的用户定义搜索关键字来引用,并且其中,每个可搜索块是有向非循环图(DAG)的根,该有向非循环图包括所述规则块的至少一个子集作为DAG节点。
本发明的另一示例性实施例包括一种用于管理包括存储介质的内容可寻址存储系统上的数据的方法,该方法包括步骤:接收对写入不变可搜索块的写请求,所述写请求包括用户定义搜索关键字和数据内容;基于所述用户定义搜索关键字来得出内部保留关键字;以及将所述不变可搜索块存储在所述存储介质上,使得可搜索块成为不变规则块的有向非循环图(DAG)的根(the searchable block roots a directedacyclic graph(DAG)of immutable regular blocks),其中,所述可搜索块包括所述数据内容,并可用所述内部保留关键字来定位,且所述规则块的每个地址是由相应规则块的内容得出的内容地址。
本发明的替代示例性实施例包括一种用于删除包括存储介质的内容可寻址存储系统上的数据的方法,该方法包括步骤:提供一组不变数据块,该组不变数据块包括以存储在所述存储介质上的可搜索块为根的规则块的有向非循环图(DAG),其中,每个可搜索块可用相应可搜索块的用户定义关键字来定位,并且其中,每个规则块可用由相应规则块的内容得出的内容地址来定位;接收对将组织在所述DAG之一中的数据内容标记为删除的请求,其中,该请求包括作为所述用户定义搜索关键字之一的第一搜索关键字;基于所述第一搜索关键字得出内部删除关键字;用内部删除关键字将删除根块写在所述存储介质上;以及从所述存储介质中删除所述删除根块和可用所述第一搜索关键字来定位的可搜索块。
通过将结合附图来阅读的本发明的说明性实施例的以下详细说明,这些及其它特征和优点将变得显而易见。
附图说明
本公开将参照以下附图来提供优选实施例的以下说明的细节,在附图中:
图1是示出依照本发明的一个示例性实施例的内容可寻址数据结构系统的方框图。
图2是示出依照本发明的一个示例性实施例的用于管理内容可寻址存储系统上的数据的方法的方框/流程图。
图3是示出依照本发明的一个示例性实施例的用于读取内容可寻址存储系统上的数据的方法的方框/流程图。
图4是示出依照本发明的一个示例性实施例的用于删除内容可寻址存储系统上的数据的方法的方框/流程图。
图5是示出依照本发明的一个示例性实施例的用于删除内容可寻址存储系统上的数据的替代方法的方框/流程图。
图6是示出依照本发明的一个示例性实施例的用于实现内容可寻址存储系统上的DAG的至少一部分的删除的方法的方框/流程图。
图7是示出依照本发明的示例性实施例的规则块和可搜索块的表示的一组方框图。
图8是示出依照本发明的示例性实施例的可搜索块和可搜索块的版本化序列(versioned sequence)的表示的一组方框图。
图9是示出依照本发明的示例性实施例的可搜索保留根块和删除根块的表示的一组方框图。
具体实施方式
为了避免维持用于数据块内容地址的单独存储器,依照本发明的示例性实施方式的存储系统可以提供用于存储至少两种块(规则块和“可搜索块”)的机制。
依照本发明的示例性实施例,以类似于其它CAS系统的方式来写入规则块,因为调用者(caller)提供要存储的对象作为参数(argument),所述要存储的对象可能包括对象已将内容地址(CA)嵌入其它块中的何处的描述。另外,在写完成时向用户返回包括基于其内容的CA的值:
CA<--write_regular_block(data,list_of_embedded_CAs)
根据本发明的一个示例性实施例,为了实现规则块,可以对块内容(包括任何嵌入的CA)进行散列以得出散列值。例如,现在详细地参考附图,在图中,相同的标号表示相同或类似的元素,首先参照图7,示出了示例性规则块700的表示。规则块的数据内容可以包括零或更多字节的二进制数据(例如‘用户-数据’)和/或可以包括充当DAG指针的暴露的内容地址。在图7提供的特定示例中,规则块700包括非CA二进制数据702和一列内容地址704两者。包括非CA二进制数据702和一组内容地址704两者的块706的内容由该系统存储,且是关于可以应用哪个散列函数来获得该块的散列值的信息。
例如,可以依照分布式散列表(DHT)使用散列值的至少一部分来将块路由到负责存储块的存储节点。该系统可以本地存储成对的<散列值,块>且可以返回CA,除可以有利于稍后块的方便检索的某些其它可选字段之外该CA还包括散列值部分。
为了检索规则块中的数据,提供CA:
(data,list_of_embedded_CAs)<--read_regular_block(CA)
例如,读取(read)可以使用上述散列值部分来路由到存储成对的<散列值,块>的节点,并可以可选地使用任何其它字段来加速对节点上的对的本地搜索。
可以将重复先前写入的块的任何后续块写入(block write)路由到存储先前写入的块的同一节点。该本地节点可以实现用以识别具有相同散列值的块已被存储的机制。例如,这可以通过采用本地散列表来实现。因此,可以在不利用其它字段的情况下检索(原始)块。
在某种意义上,块存储类似于(大型)词典(dictionary),其中CA充当词典的关键字(key),且数据加所嵌入CA的列表充当词典的值。这可以实现为DHT。规则块的主要特征在于其关键字或内容地址是在内部由块的内容得出的。
如下文所讨论的,可以通过采用可搜索块来避免用于检索DAG的根的CA存储器。以与规则块不同的方式写入可搜索块。对于可搜索块,系统可以在内部得出类似地作为CA来处理但不是CA的值;该值在本文中称为“内部关键字”。因此,与规则块的写操作相反,根据本发明的示例性实施例,可搜索块的写操作可以通过与对内容块进行散列相对比地对用户定义搜索关键字进行散列来获得散列值。在内部,系统可以使用被用于规则块的同一路由机制。此外,不需要为其生成CA,因为与在重复写入的情况中一样,可以在不利用其它字段的情况下检索所述对。
因此,根据本发明示例性实施例,除提供数据和/或所嵌入CA的列表之外,调用者还可以为可搜索块提供唯一的用户定义“搜索关键字”。
write_searchable_block(data,list_of_embedded_CAs,search_key)/*NoCA returned on completion(完成时不返回CA)*/
这里,搜索关键字(search_key)是客户端选择的,且不需要通过向正在写入的内容应用散列函数来获得。块的搜索关键字充当该块的地址,但不是内容地址。传统CAS系统的用户不能强迫系统返回新写入块的给定、预定内容地址,使得可通过该内容地址来检索该块,而本系统的用户可以在写入可搜索块时选择搜索关键字。搜索关键字可以是她选择的任何关键字,其允许用户在不必参考内容地址的情况下访问存储数据。
参照图7,示出了依照本发明的一个示例性实施例的可搜索块750的表示。如图7所示,可搜索块750可以包括用户定义搜索关键字752。此外,可搜索块750的数据内容还可以包括零或更多字节的非二进制数据754和/或充当指向其它块的指针的CA列表756。这里,可以通过对用户定义搜索关键字752而不是整个块内容进行散列来获得可搜索块的内部关键字。所存储的值758可以由用户定义搜索关键字752和块中的数据内容组成,所述数据内容如上所述可以包括以下各项中的至少一个:零或更多字节的非CA二进制数据754或充当指针的CA列表756。
如果以有向非循环图(DAG)结构来布置存储块,则可以将可搜索块实现为“保留根”,因为其可以用来存储规则块的DAG的根。为了检索数据,与CA相反,客户端可以提供搜索关键字:
(data,list_of_embedded_CAs)<--read_searchable_block(search_key)
应注意的是存储系统可以被配置为:如果已用同一搜索关键字写入具有不同内容的块,则拒绝写入。存储系统可以拒绝写入以避免在尝试读取该搜索关键字期间将出现的歧义。因此,选择可能唯一的关键字是客户端的责任。
例如,可以将客户端可简单地与DAG相关联的任何信息组合成搜索关键字,所述任何信息在概率上不大可能由于冲突而使得写请求被拒绝。应注意的是,对于共享块存储的非敌对(non-adversarial)客户端,可简单地通过使客户端名称成为搜索关键字的一部分来相当容易地避免其序列冲突。关于敌对客户端,可以在搜索关键字中包括诸如客户端的私有密钥(private cryptographic key)之类的在概率上难以被攻击者破译的信息的至少一部分。例如,对于使用本存储系统作为后端辅助存储系统的文件系统,信息的三个这样的部分可以包括:(i)应用程序的名称(例如“文件系统”),其使用后端存储来避免与后端存储系统的其它非文件系统用户的冲突,(ii)文件系统名称,以避免两个不同文件系统的搜索关键字的序列之间的冲突,以及(ii)从1开始的正序列号,以充当计数器,如下文更全面地讨论的。
为此,已经将块存储器描述为由存储可以通过由块存储(blockstore)基于块内容而生成的内容地址来寻址的规则块的池(pool)和存储可以用由客户端生成的搜索关键字来定位的块的池组成的两个单独存储池的联合。然而,不需要维持两个单独的存储池,因为用来实现规则块的代码可以再用来实现可搜索块。例如,可以通过与从规则块获得内容地址相同的方式对可搜索块的搜索关键字应用散列函数。因而,可以由搜索关键字生成伪内容地址(pseudo-content address)并将其存储在分布式散列表(DHT)中以供随后查找(lookup)。此伪内容地址可以对应于上述“内部关键字”。因此,当用户希望读取块并提供搜索关键字时,可以将搜索关键字转换成用来查找DHT中的块的内部关键字。
结果,在内部,可以以与规则块相同的方式来处理可搜索块,不同之处在于由搜索关键字、而不是由数据和所嵌入CA的列表来得出其伪CA。同样地,可以将可搜索块和规则块包括在同一存储池中,但在如何得出其关键字方面不同。如上所述,由于用户定义搜索关键字本身可以用来检索可搜索块,所以客户端不必提供伪CA以便检索块。由于此原因及其它原因,在写入完成时,不向客户端返回伪CA,这不同于返回CA的规则块情况。
下面在表1中示出依照本发明的示例性实施例的用于写入可搜索块的高级算法。如算法中所示,可以采用诸如DHT中的条目的插入和查找之类的CAS存储系统中的内部已经可用的操作来实现可搜索块:
表1
 search_write(search_key,data)
   hashkey=hash_function(search_key)
   block=lookup(hashkey)
   if block is NOT found
       dht.insert(hashkey,(search_key,data))
else//some block already exists for this hashkey
  if block is identical to search_key+data
     return success
  else
    return failure
下面示出的表2提供依照本发明的示例性实施例的用于读取可搜索块的高级算法。
表2
search(search_key):
  hashkey=hash_function(search_key)
  return dht.lookup(hashkey)
现在参照图1,示出依照本发明的一种示例性实施方式的采用可搜索块的数据存储系统100。应理解,本文所述的实施例可以完全是硬件,或包括硬件和软件元件两者。在优选实施例中,以软件和硬件来实现本发明,所述软件和硬件包括但不限于固件、常驻软件、微代码等。
实施例可以包括可从计算机可用或计算机可读介质访问的计算机程序产品,其提供程序代码以供计算机或任何指令执行系统使用或与其结合使用。计算机可用或计算机可读介质可以包括存储程序以供指令执行系统、装置、或设备使用或与其结合使用的任何装置。所述介质可以是磁性、光学、电子、电磁、红外、或半导体系统(或装置或设备)。该介质可以包括计算机可读介质,诸如半导体或固态存储器、磁带、可移动计算机磁盘、随机存取存储器(RAM)、只读存储器(ROM)、刚性磁盘和光盘等。
此外,在本发明的示例性实施例中,可以将可搜索块和规则块存储在包括一个或多个存储设备的存储介质上,包括存储设备的网络。另外,可以使用被配置为执行在硬件和/软件中编码的程序指令的处理器和存储器来实现本文所公开的方法。
返回图1,系统100的编程模型101可以基于存储在存储介质上的大小可变、内容寻址、具有高弹性的海量块的抽象。系统100可以包括一组不变规则块130,其中,例如,如上文所讨论的,该组中的每个规则块可用由系统根据相应数据块的数据内容得出的内容地址来引用。如上所述,例如,可以根据其内容的SHA-1散列来得出规则块地址。另外,可以在内容地址中采用可以用来比只使用内部散列关键字(hash key)更高效地定位系统中的块的其它信息。内容地址可以短于或长于散列关键字。
此外,系统100还可以包括一组不变可搜索块140,如上文所讨论的,其中的每一个不变可搜索块可用相应可搜索块的用户定义搜索关键字来引用。例如,内部关键字可以由用户定义搜索关键字得出并用来定位块。应理解的是,本文所采用的“得出”可以包括例如通过如上所述地应用散列函数或通过简单地使用用以“得出”内部关键字的对象来获得内部关键字。例如,可以由用户定义搜索关键字得出内部关键字,因为内部关键字是搜索关键字。然而,可以采用其它得出手段。此外,应注意的是,可以通过对用户定义搜索关键字应用用来由规则块得出内容地址的同一散列函数来由搜索关键字得出例如上文所讨论的伪内容地址的内部关键字。另外,可以将可搜索块140和规则块130的组存储在DHT中,DHT可以将内容地址和内部关键字分别映射到对应的规则块130和可搜索块140。因此,可用所得出的相应内部关键字来定位每个可搜索块。
任何块可以包括以下各项中的至少一个:零或更多字节的二进制数据和/或一列指针124,其指向已写入的块以定义块的DAG。如上所述,可以将指针实现为内容地址。这里,如图1所示,每个可搜索块102、104可以是至少包括规则块130的子集的DAG的根。因此,用于被实现为可搜索块的保留根的“内部关键字”可以同等地被称为“内部保留关键字”。在提供重复删除(deduplication)特征的存储系统中,块可以是大小可变的,以允许有改善的重复消除率。如下文更全面地讨论的,可以使指针124暴露以有利于被实现为用无用单元收集(garbage collection)模块160进行无用单元收集的变型的数据删除。
如图1所示,块可以形成有向非循环图(DAG)。如果存储系统提供了重复删除服务,则这些DAG可以在经重复删除的块处重叠。另外,在这些结构中不可能有循环,只要用来得出块地址的散列函数在密码学上是安全的。应理解,本文所指的“DAG”可以包括“树”,其为“DAG”的特例。
如上所述,DAG中的源顶点(source vertex)可以是称为可搜索保留根的特殊类型的块。然而,应理解,本发明的示例性实施例可以具有不是可搜索块的DAG根。除规则数据和地址阵列之外,如上文所讨论的,可以将保留根配置为具有用来定位块的用户定义搜索关键字的可搜索块。此类关键字可以是任意的数据。如上所述,用户可以通过提供其搜索关键字而不是系统生成的加密块内容地址来检索可搜索块。此外,如下文更全面地讨论的,同一文件系统的多个快照可以具有被组织为可搜索保留根的版本化序列的根,所述可搜索保留根可用例如由文件系统名得出的可搜索关键字基(base)来定位,并且计数器随着每个快照而递增。虽然可以通过指定任意的搜索关键字来检索可搜索块,但其不像规则块具有内容地址一样具有内容地址,因此其在系统中不被指向;如此,其不在块结构中产生循环。
再次参照图1,块组101包括三个源顶点102、104、和106,其中的两个源顶点102和104是被实现为可搜索块的保留根。另一源顶点106是规则块A,其指示DAG的此部分仍在构造中。
如下文更全面地讨论的,对DAG结构化数据的操作可以包括写入和读取规则块,写入具有用户定义搜索关键字的可搜索保留根,基于其搜索关键字来搜索保留根并通过使用用户定义关键字来写入相关删除根108而标记要删除的保留根。
如上所述,可以将可搜索保留根组织在保留根的版本化序列中。例如,存储系统可以将文件系统存储在DAG中,其中文件系统的超级块(superblock)作为DAG的根。周期性地,可以更新并存储文件系统的新版本,这产生表示新文件系统的新DAG结构和作为新DAG的根的新超级块。如果应用程序对写入对应于DAG的不同版本的许多根感兴趣,则该系统可方便地:(i)写入根的新版本,以及(ii)读取写入的最新版本:
version_number<--WRITE_NEW_VERSION(search_key_base,
data_with_embedded_CAs_exposed);
data_with_embedded_CAs_exposed<--
READ_LAST_VERSION(search_key_base)
由于不同文件系统的版本号随着时间而增加(沿着一个维度),所以该系统可以在内部将整体版本号与在这里相对于版本化序列称为“搜索关键字基”的用户定义搜索关键字值进行组合,以生成或得出内部关键字。如本领域普通技术人员所理解的,鉴于本公开,在必要时将此推广至多个维度是很简单的。此外,如上所述,用户定义搜索关键字或关键字基可以是任何字节序列。这种灵活性允许实现可以通过只记住整个版本序列的一个搜索关键字基来标识的可搜索块的版本序列。
在继续参照图1和7的情况下参照图8,示出了可搜索块800和可搜索块850的版本化序列的表示。如上所述,为了说明(account for)不同文件系统版本的可能性,该系统可以实现用于通过将序列号添加到搜索关键字来生成用于新的或更新的DAG的整个序列的内部保留关键字的过程。例如,如图8所示,可搜索块800可以包括组合值806,该组合值806包括附有版本号804的搜索关键字基802。组合值806可以被该系统用来以与上文所讨论的该系统由可搜索块750的用户定义搜索关键字752得出内部关键字相同的方式来得出内部保留关键字。另外,可以以与上文所述相同的方式来采用由组合值806得出的内部关键字。例如,内部关键字可以用作到将内部关键字映射到可搜索块的DHT的入口。其余可搜索块800可以包括内容808,内容808包括以下各项中的至少一个:零或更多字节的二进制数据或充当指向其它块的指针的内容地址。因此,以类似于上述的方式,可用所述用户定义搜索关键字来引用或定位被实现为具有版本号的可搜索块的保留根。
应理解,除版本号之外,在所有文件系统版本上,组合值806内的所有字段可以是一致的。例如,如图8所示,版本化序列852中的每个可搜索块可以包括附有不同版本号的相同的用户定义搜索关键字856。例如,块854可以包括版本号1(858)、块862可以包括版本号2(860)等等。此外,可以将可搜索块实现为保留根,该保留根包括用户数据864、866和/或指向形成DAG的规则块组872的内容地址868、870。
还应理解,从用户的观点来看,具有版本化序列的系统可以以类似于上文所述块检索的方式来检索可搜索块。例如,用户或客户端可以提供用户定义搜索关键字,且该系统可以自动地向用户返回对应可搜索块的最新版本。替换地或另外地,用户可以提供用户定义搜索关键字和版本号以检索由该系统存储的可搜索块的任何版本。而该系统可以返回相应可搜索块的对应版本:
data_with_embedded_CAs_exposed<--read_version(search_key_base,version_number)
这样,用户可以提供相同的用户定义搜索关键字以检索版本化序列中的任何可搜索块。
由于与搜索关键字基和最新版本号相对比,客户端可以更简单地只想起搜索关键字基(例如,除版本号之外的搜索关键字的所有字段),所以该系统可以在读取对象时采用确定最近版本号的方案。
例如,假设在示例性实施方式中版本号从1开始,可以执行序列的从头到尾的扩展搜索,直至确定具有最近版本号的正确搜索关键字。因此,该系统可以通过对通过附加“1”、“2”等而得出其组合值806的所有块进行简单地迭代(iterate)、直至读取/搜索不能发现块为止来发现写入具有search_key_base(搜索关键字基)的序列中的最新版本。如果对于版本N+1首先发生失败,则具有版本N的块是成功存储的最后一个块。这有助于上述的READ_LAST_VERSION(读取最新版本)功能,因为该系统应找出最新版本,而且有助于上文所讨论的WRITE_NEW_VERSION(写入新版本)功能,因为该系统应写入具有尚未被用于写的最低版本的块。当然,在某些示例性实施方式中,可以在存储器中缓存并更新最新版本号,使得可以只在启动时执行搜索。
虽然通过相继从头到尾地搜索所有版本号来执行上述扩展搜索过程,但相同的机制可以用来实现在确定正确版本号之前减少读取的块数的优化搜索变型。例如,上述可扩展搜索方案遍历(traversess)O(n)、量级N(order N)可搜索块以找到最近写入的块。可以通过采用O(log(n))并使用扩展搜索、继之以二进制搜索来优化该方案。扩展搜索可以检索块20、21、22等,直至第一次读取失败,例如在2P,其中,2P-1是成功的。因此,最新版本N使得2p-1≤N<2p。这里,扩展搜索使用p~log(N)个步骤。
在已确定范围2p-1≤N<2p之后,该系统可以以该间隔来执行二进制搜索以查找N。二进制搜索将取间隔长度的对数,其同样小于p,导致搜索的总体对数成本。例如,为了找到最新版本44,该系统可以依照表3中提供的近似序列来读取块。
表3
1->success(成功)
2->success
4->success
8->success
16->success
32->success
64->fail(失败)
//end of expanding search(扩展搜索结束)
//start of binary search in interval[32,64)(以间隔[32,64)开始二进制搜索)
48->fail(48 is midpoint between 32 and 64)
40->success(40 is midpoint between 32 and 48)
44->success
46->fail
45->fail END(失败结束)
在表3提供的示例中,版本号44是成功的,版本号45失败。因此,版本号44对应于版本化序列中的最近写入的块。
请注意,上述扩展搜索方案可用于连续存储的序列。如果由于例如版本化序列中的某些版本的可搜索块的删除而在所使用的版本号中存在未知长度的间隙,则可以采用其它搜索方案来适应版本化序列中的最新版本的可搜索块的自动检索。
除使用上述数据组织结构来写入和读取数据之外的其它服务可以包括数据删除。依照本发明的一种示例性实施方式,不应在接收到删除请求时立即删除单个块,因为这样的块可以由其它块来引用。由于允许用户删除各个块可能由于重复删除而引起悬挂指针(danglingpointer),所以优选的是使用无用单元收集操作来执行块的删除。在不同类型的无用单元收集方案之中,修改的引用计数操作提供这样的优点,即其执行与在两个收集循环之间写入的块的数目成比例的工作。
再次参照图1,在采用DAG数据组织结构的存储系统中,应用程序接口(API)可以标记DAG的哪些部分应被删除。为了将保留根标记为删除(即不活动(alive)),该系统可以写入称为可搜索删除根108的一种可搜索块或等效地写入删除根块108,其具有由与对应保留根的用户定义搜索关键字相同的搜索关键字得出的内部关键字。这里,可以将内部关键字称为内部删除关键字。可以通过对对应的用户定义搜索关键字进行散列来得出内部删除关键字并将其插入DHT中。在图1中,例如,使删除根108与保留根SP1 102相关联。无用单元收集模块160可以将从活动保留根不能到达的所有块标记为删除。例如,在图1中,作为保留根102被标记为删除的结果,块112、110和114将被标记为删除。应注意的是,块106也被标记为删除,因为其不具有指向它的保留根。相反,块116将被保留,因为其可从保留根SP2104到达。保留根104是“活动的”,因为其不具有匹配的删除根。
应注意的是,允许用户删除根是可允许的,因为根的删除不产生悬挂指针。如上所述,可搜索块不具有内容地址。通常,保持引用计数包括修改计数器。然而,修改计数器在不变存储系统中是不可能的。
为了示出解决此问题的依照本发明的示例性实施例的删除根的一种示例性实施方式,参照图9,其示出可搜索保留根块900和删除根块950的表示。应理解,保留根和删除根两者都是可搜索块。这里,如下表4所示,系统可以分别使用RETAIN(保持)和DELETE(删除)函数来实现保留根和删除根。
表4
RETAIN(search_key,data_with_embedded_CAs_exposed)
{
write_searchable(search_key+″retain″,data_with_embedded_CAs_exposed)
}
DELETE(search_key)
{
write_searchable(search_key+″delete″)
}
这样,为了实现RETAIN函数,用户提供用户定义搜索关键字902、任何对应的数据内容906,诸如零或更多二进制字节的数据和/或充当指针的任何暴露CA。同样地,为了实现DELETE函数,用户提供用户定义搜索关键字。如表4中的代码所示,可以通过由用户定义关键字分别得出用于保留根块和删除根块的内部保留关键字和内部删除关键字来实现关联。
例如,如图9所示,该系统可以通过将“保持(retain)”904附加于用户定义搜索关键字902来写入保留根900。该系统可以由包括用户定义搜索关键字902和“保持”标签904两者的组合值908来得出内部保留关键字。例如,可以通过如上所讨论地应用散列函数来得出内部保留关键字,并在DHT中将其用于写入、检索和删除的目的。同样地,系统可以通过将“删除(delete)”952附加于用户定义搜索关键字902来写入删除根950。该系统可以同样地由包括用户定义搜索关键字902和“删除”标签952的组合值954来得出内部删除关键字。可以将该内部删除关键字包括在DHT中,DHT可以将内部删除关键字映射到对应的块950。应注意的是“保持”和“删除”标签是任意的,且可以使用任何不同的标签来允许该系统将保留根与删除根区分开。
依照图9写入删除根950将保持块900标记为删除。例如,当图1的无用单元收集模块160开始无用单元收集操作时,如果例如通过在DHT中找到对应的内部删除关键字而遇到删除根,则模块160可以引起保留根被删除,并可以引起删除根本身的删除,因为其已服务于其目的。这样,例如,删除根可以发起对应可搜索块的删除。写入删除根解决调节不变存储系统上的引用计数器的问题,因为所述写入与将保留根上的引用计数调节为指示其应被删除具有相同的效果。
应注意的是为了简化存储系统的设计,可以将删除操作分为两个阶段:只读阶段,在此期间块被标记为删除且用户不能写入数据;以及读写阶段,在此期间被标记为删除的块被回收且用户可以进行读写。在正常读写操作期间,可以在后台执行空间回收。在进入只读阶段之前,活动的保留根应指向所有将被保持的块。具有只读阶段简化了删除实现,因为其消除了写对删除标记过程的影响。
在示例性实施方式中,可以用被配置为对数据块中指向该块的指针的数目进行计数的每块引用计数器(per-block reference counter)来实现删除。在写入时,不需要立即更新引用计数器。这是不变存储的优点。作为替代,可以随后在处理自先前只读阶段起写入的所有指针的只读阶段中将其更新,使得计数器更新递增。对于在写之后检测到的每个指针,其指向的块的引用计数器递增。在检测到所有指针并完成递增之后,引用计数器等于零的所有块被标记为删除。此外,已被标记为删除的块(包括具有相关删除根的根)所指向的块的引用计数器可以递减。其后,具有由于递减而等于零的引用计数器的任何块可以被标记为删除,且已被标记为删除的块所指向的块的引用计数器可以递减。可以重复标记和递减过程,直至没有附加块可以被标记为删除。这时,只读阶段可以结束且可以在后台移除被标记为删除的块。虽然在上文中使用引用计数举例说明了无用单元收集,但还可以采用其它无用单元收集方法,诸如“标记和清除(mark-and-sweep)”。可替代地,与要删除的块相比,可以在无用单元收集操作中标记要保持的块。
现在参照图2,示出了依照本发明的一种示例性实施方式的应用上文公开的原理的方法200,其用于管理包括存储介质的内容可寻址存储系统上的数据。方法200可以在存储系统从客户端接收写入不变可搜索块的请求的步骤202开始。该请求可以包括如上文所讨论的信息,诸如将被包括在可搜索块中的数据内容和用户定义搜索关键字。如上所述,数据内容可以包括零或更多字节的二进制数据和/或充当指针的暴露内容地址。
可选地,在步骤204,如上文所讨论的,存储系统可被配置为在内部为用户定义搜索关键字附加版本号以将可搜索块标识为可搜索块的版本化序列的成分(component)。应注意的是,该系统可以通过采用例如上述扩展搜索过程来确定要附加于搜索关键字的正确版本号。例如,该系统可以选择在最新正确版本号之后紧接着的第一个失败版本号。在表3提供的示例中,正确的版本号将对应于“45”。
在步骤206,如上文所讨论的,存储系统可被配置为基于用户定义搜索关键字来得出内部保留关键字。例如,如上文所讨论的,存储系统可以对搜索关键字应用诸如SHA-1之类的散列函数以生成内部保留关键字。另外,如果执行可选步骤204,则如上文所讨论的,内部保留关键字可以基于用户定义搜索关键字和版本号两者。
可选地,在步骤208,存储系统可以执行DHT查找以将内部保留关键字与DHT的条目相比较。其后,该系统可以确定是否进行写入。
例如,该系统可以可选地执行步骤210以确定DHT中是否存在内部保留关键字。如果在DHT中不存在保留关键字,则可以进行写入,且该方法继续进行到步骤212或步骤214。如果内部保留关键字是DHT中的条目且请求中的数据内容与被映射到DHT中的保留关键字条目的值不同,则在步骤211拒绝写入,因为用户定义搜索关键字(或者如果采用版本化序列,则为用户定义搜索关键字/版本号组合)已被用于不同的数据内容。照此,可以向用户返回指示该冲突并提示用户定义搜索关键字(或用户定义搜索关键字/版本号组合)的另一选择的消息。如果保留关键字是DHT中的条目且请求中的数据内容与被映射到DHT中的保留关键字条目的值相同,则可以进行写入,且该方法继续进行到步骤212或步骤214。这里,由于用户已经与该用户定义搜索关键字一起地存储数据内容,所以不需要指示写入被拒绝,因为辅助存储系统的内容与用户的愿望一致。替换地,如果保留关键字是DHT中的条目且请求中的数据内容与被映射到DHT中的保留关键字条目的值相同,则可以在步骤211拒绝写入并可以向用户返回消息,该消息指示已经与所述用户定义搜索关键字(或与所述用户定义搜索关键字/版本号组合)一起地存储了数据内容。
可选地,在步骤212,存储系统可以将可搜索块和内部保留关键字插入DHT中。例如,如果通过应用散列函数来得出内部保留关键字,则可以将该内部关键字存储在DHT中。这样,如上所述,存储系统可以采用CAS系统中已有的操作来实现可搜索块。
在可以与步骤212同时发生的步骤214,存储系统可以将不变可搜索块存储在存储介质上,使得可搜索块成为规则块的DAG的根。例如,可搜索块对应于上面关于图1所述的保留根之一。这里,可搜索块包括数据内容并且用内部保留关键字定位,如上所述。此外,每个规则块的地址可以是由相应规则块的内容得出的内容地址。
应注意的是,在构造DAG时,规则块可以对应于在存储可搜索块之前由用户存储的块。此外,可以在写入每个规则块之后向用户返回每个规则块的内容地址。例如,在DAG构造期间用户可以采用该内容地址作为指针。然而,还应注意的是,与规则块相反,如上所述,不需要向用户返回可搜索块的地址。另外,如果在步骤206中应用散列函数来得出内部搜索关键字,则该散列函数可以与用来生成散列关键字的散列函数相同,由所述散列关键字,得出规则块的内容地址。因此,上述DHT可以将内部保留关键字和内容地址分别映射到可搜索块和规则块。
可选地,存储系统可以使用可搜索块来执行除写数据内容之外的其它数据服务。例如,可以使用可搜索块分别在步骤216和218执行数据内容的读操作和删除操作。
在继续参照图2的情况下参照图3,示出了可以在步骤216执行的依照本发明的示例性实施例的用于读取数据内容的一种示例性方法300。方法300可以从存储系统可以接收读取数据内容的请求的步骤302开始。如上文所讨论的,读请求可以包括被用来写入数据内容的同一用户定义搜索关键字。可选地,如上文所讨论的,读请求还可以包括版本号,该版本号用于检索作为版本化序列的一部分的可搜索块的版本。
在步骤304,响应于接收到请求,存储系统可以对用户定义搜索关键字应用散列函数以得出并获得内部保留关键字。
在步骤306,该系统可以用内部保留关键字来执行DHT查找以便从可搜索块检索数据内容并将该数据内容呈现给用户。
现在在继续参照图1和2的情况下参照图4,示出了依照本发明的示例性实施例的使用上述原理的示例性方法400,该方法用于删除数据内容,其可以在步骤218执行。方法400可以从存储系统可以从用户接收删除数据内容的请求的步骤402开始。如上文所讨论的,删除请求可以包括被用来写入内容的用户定义搜索关键字。
在步骤404,存储系统可以基于用户定义搜索关键字来得出内部删除关键字。例如,如上文所讨论的,可以对用户定义搜索关键字应用散列函数以生成内部删除关键字。此外,还可以由诸如“删除”之类的将删除根块与对应的保留根块区别开的标签来得出内部删除关键字。
在步骤406,存储系统可被配置为用内部删除关键字来写入删除根块以将相应可搜索保留根标记为删除。例如,如上文关于图1所述,可以写入删除根108以将可搜索块102标记为删除。
在步骤408,无用单元收集模块160可以对与可搜索块相关的块执行无用单元收集操作。例如,无用单元收集模块160可被配置为删除可搜索保留根块、删除根块、和对应DAG中的任何不可到达规则块。
现在在继续参照图1和9的情况下参照图5,示出了依照本发明的一个示例性实施例的用于在采用可搜索块的内容可寻址存储系统中删除数据内容的更具体方法500。方法500可以通过提供包括以存储在存储介质上的可搜索块为根的规则块的DAG的一组数据块而从步骤502开始。例如,可以如上文关于图1所述地组织该组块。例如,每个可搜索块可用由不同的用户定义搜索关键字(或不同搜索关键字/版本号组合)得出的内部保留关键字来定位。另外,如上文所讨论的,每个规则块可用由相应规则块的内容得出的内容地址来定位。
在步骤504,存储系统可以接收将被组织在DAG之一中的数据内容标记为删除的请求。该删除请求可以包括与用来定位作为其中存储有数据内容的DAG的根的可搜索块的搜索关键字相同的搜索关键字。这里,在删除请求中提供的搜索关键字可以称为“第一搜索关键字”。
在步骤506,存储系统可以基于第一搜索关键字来得出内部删除根关键字。例如,如果通过对第一搜索关键字和“保持”应用散列函数来得出内部保留根,则可以通过对第一搜索关键字和“删除”应用同一散列函数来得出内部删除根。
在步骤508,例如,如上文关于图1和9所述,存储系统可以使用内部删除关键字来将删除根块写入到存储介质。
在步骤510,存储系统可以从存储介质中删除所述删除根块和可用第一搜索关键字来定位的可搜索块。例如,如上文所讨论的,无用单元收集模块160可以使用删除根块作为删除所述删除根块、对应的可搜索块、和DAG中的任何对应不可到达规则块的指示。
应理解,存在可以用来执行删除步骤510的各种方法。现在在继续参照图1和5的情况下参照图6,示出了依照本发明的示例性实施例的用于实现组织在DAG中的数据内容的删除的一种方法600。方法600可以从步骤602开始,在步骤602中,存储系统可以将删除根和可用用户定义搜索关键字(第一搜索关键字)来定位的可搜索块标记为删除。例如,无用单元收集模块160可以将删除根和对应的可搜索保留根标记为删除。应理解,在本发明的一个示例性实施例中,可以由用户发起无用单元收集操作。例如,在从该系统接收到删除根被成功写入的指示后,用户可以提交对相关DAG发起无用单元收集的请求。此外,如上文所讨论的,无用单元收集操作可以应用于具有相关删除根的所有DAG。
在步骤604和606,无用单元收集模块160可以迭代地将从未被标记为删除的任何可搜索块不可到达的所有规则块标记为删除。例如,可以实现上述迭代删除法,其中,可以将没有指向其的指针的所有块标记为删除。应将“不可到达(unreachable)”规则块理解为意指不存在通过DAG指针或一连串的DAG指针将未被标记为删除的任何可搜索块连接到规则块的路径。例如,参照图1,块E 114从诸如可搜索保留根104之类的未被标记为删除的任何可搜索块不可到达。同样地,块F 116可从作为未被标记为删除的可搜索块的块104到达。
在步骤608,无用单元收集模块160可被配置为移除被标记为删除的所有块。然而,应理解,鉴于本文所述的教导,本领域普通技术人员可以实现其它无用单元收集方法。例如,可以将系统和方法修改为与标记要删除的块相反地标记要保持的块。在这种情况,可以从存储介质中删除或移除所有未标记块。
如上文所述,可搜索块的使用有利地允许提供诸如写、读和删除数据内容之类的数据服务的新颖和高效方法。此外,如上文所讨论的,可搜索块的使用避免了存储保留根的内容地址的需要。此外,即使存储了保留根的地址,可搜索块的使用也允许用户先验地决定保留根的搜索前缀(prefix)并独立于存储系统的工作而将其存储。例如,用户不必使搜索前缀与该系统同步且不需要等待该系统返回内容地址。
虽然已描述了系统和方法的优选实施例(其意图是说明性而非限制性的),但应注意的是鉴于上述教导,本领域技术人员可以进行修改和变化。因此,应理解的是可以对所公开的特定实施例进行变更,所述修改在随附权利要求书的阐述的本发明的范围和精神内。虽然已这样用专利法所要求的细节和特殊性描述了本发明的各方面,但要求保护并期望受到专利证书保护的范围在随附权利要求书中阐述。

采用可搜索块的内容可寻址存储系统和方法.pdf_第1页
第1页 / 共31页
采用可搜索块的内容可寻址存储系统和方法.pdf_第2页
第2页 / 共31页
采用可搜索块的内容可寻址存储系统和方法.pdf_第3页
第3页 / 共31页
点击查看更多>>
资源描述

《采用可搜索块的内容可寻址存储系统和方法.pdf》由会员分享,可在线阅读,更多相关《采用可搜索块的内容可寻址存储系统和方法.pdf(31页珍藏版)》请在专利查询网上搜索。

本发明涉及采用可搜索块的内容可寻址存储系统和方法。依照本发明的示例性实施例,一种内容可寻址数据结构系统可以包括使用用户定义搜索关键字和数据块内容两者来寻址的数据内容的有向非循环图(DAG)。可以在对其余块进行内容寻址的同时由用户定义搜索关键字得出DAG的保留根的内部关键字。与使用内容地址相反,用户可以在检索和删除保持数据内容的DAG时提供搜索关键字。另外,可以使用诸如应用散列函数和采用分布式散列表。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1