HotOS 2009 Paper 分布式元数据论文阅读笔记整理
问题
文件系统一直采用分层名称空间,随着用户与越来越多的数据交互,并且对搜索能力的要求越来越高,这样一个简单的分层模型已经过时了。例如,查找照片时,用户描述他们想要的内容(照片的各种特征)而不是照片所在的位置(照片在文件系统中的完整路径名)来查找数据。
因此应该重新设计文件系统,将其组织映射到我们现在访问和操作数据的方式。
本文工作
本文提出了一种新的文件系统体系结构 hFAD,用标记的、基于搜索的名称空间取代了分层名称空间。
在最低级别上,使用基于对象的存储设备(OSD)[14],存储对象有唯一的ID,系统的高层通过ID访问这些对象。对象是可字节访问的:可以从对象中读取字节,可以将字节插入对象的中间,可以从中间删除字节等。内部hFAD使用基于搜索的API,索引结构包含可扩展的索引集合,便于多种命名模式和搜索类型。
API
命名接口:对象由一个或多个标记/值对进行命名。标记告诉hFAD如何解释该值,以及在多个索引中的哪个索引中搜索该值。例如,我们支持将POSIX命名为本机API之上的薄层。POSIX路径P上的命名操作转换为对标记/值对的查找:POSIX/P。对搜索项S1、S2、…Sn的全文搜索转换为对形式为FULLTEXT/S1、FULLTEXT/S2等的标记/值对的矢量的命名操作。这种操作的结果是矢量中每个元素的索引查找结果的总和。命名操作可以返回多个项目(这些项目将以未指定的顺序返回)。此外,任何查询都不需要唯一地定义数据项。只有OSD层中数据的标识符必须是唯一的。
访问接口:与标准文件系统一样支持读取和写入,还可以支持插入和删除操作,能够插入到对象中间,并从文件中的任何位置截断。添加了insert和truncate调用。读写调用与POSIX兼容,便于支持遗留应用程序。插入调用采用与写入调用相同的参数,但它不会覆盖文件中间的字节,而是将这些字节插入到适当的位置,使文件增加插入的字节数。截断也有类似的扩展。POSIX截断从文件末尾截取一个带有要截断的字节数的off_t,而hFAD则截取两个off_t(偏移量和长度),准确地指示要从文件中删除哪些字节。
索引存储
使用可扩展的索引存储,以便于对丰富的数据类型进行高效搜索。给定一个或多个类型/值规范,索引存储的集合必须返回与搜索项匹配的对象ID列表。我们认为高效访问需要多种索引方法。例如,键/值存储足以用于简单属性,但不足以用于全文,并且全文索引和键/值存储器都不太可能适用于图像索引。因此我们确定了几种类型的标签,表1显示了不同的用例如何在请求中使用不同类型的标签。索引存储层被设计为支持多个索引。虽然关键字和路径名可能很容易存储在同一索引中,但我们希望保留用任意索引类型扩展hFAD的可能性,例如图像、声音等的索引。一个特殊的标签ID表示该值实际上是一个唯一的对象ID,支持应用程序内的对象引用缓存。
总结
本文提出一种新的文件系统体系结构 hFAD,便于普通用户使用的文件系统,用标记的、基于搜索的名称空间取代了分层名称空间。(1)对象命名时使用多个标记+值命名,便于用户通过不同标记进行搜索。(2)对象访问时额外支持插入和部分删除,允许用户直接对字节操作,在对象中间插入或删除数据。(3)存储部分使用索引存储,根据标签构建多个索引。