本申请要求2005年2月28日提交的名为“FILE SYSTEM REPRESENTEDINSIDE A DATABASE(在数据库内部表示的文件系统)”的美国临时专利申请第60/657,533号的优先权。该申请的全部内容通过引用结合于此。
具体实施方式
如本申请中所使用的,术语“组件”、“系统”、“接口”等指的是计算机相关的实体,它们可以是硬件、软件(例如,执行中的)和/或固件。例如,组件可以是运行在处理器上的进程、处理器、对象、可执行文件、程序和/或计算机。作为说明,运行在服务器上的应用程序和服务器都可以是组件。一个或多个组件可驻留在进程中,且组件可以位于一台计算机上和/或分布在两台或多台计算机之间。
本发明是参考附图来描述的,在所有附图中,相同的参考标号用于指相同的元素。在以下描述中,为解释起见,陈述了多个具体细节以提供对本发明的全面理解。然而,很明显,本发明可以不使用这些具体细节来实施。在其它情况下,以框图的形式示出了公知的结构和设备以便于描述本发明。
现在转向附图,图1示出了便于将一个文件系统与一个完全不同的文件系统适配的系统100。文件系统102可以是文件存储系统,其中结构是基于文件流和/或目录。文件系统102可利用该文件系统,使得应用程序和/或应用程序编程接口(API)可丰富(enrich)该文件系统以提供更多结构。文件系统103可以是更复杂的模型,其中定义了项目、子项目、属性和关系以允许在文件系统104内将信息表示成复杂类型的实例。项目可以被定义为文件系统104中的最小一致性单元,它可以被独立地保护、串行化、同步、复制、备份/恢复等。项目是类型的实例,其中文件系统104中的所有项目可被储存在单个全局项目范围中。文件系统104可以基于至少一个项目和/或容器结构。文件系统104可以是展示在文件内作为项目隐藏的丰富的元数据的存储平台。可以理解,文件系统104可以是由数据模型表示的文件存储系统以支持所讨论的功能。
文件系统适配器106可提供文件系统102和文件系统104之间的兼容性和/或统一性。兼容性和/或统一性可允许文件系统102的应用程序和/或API在文件系统104内实现。文件系统适配器106可实现文件后备项目,它可以是涉及文件系统104的项目,它依赖于文件和/或文件流来填充与其相关联的至少一个属性。文件后备项目可以担当文件系统102和丰富模式化的文件系统104和/或与其有关的数据模型之间的桥梁。例如,文件系统104中的图像项目可以是文件后备项目,其中,图像项目是以文件系统102中符合标准图像格式(例如,JPEG、TIF、BMP等)的文件作为后备的。换言之,文件后备项目可利用文件和/或相关联的文件流(例如,由文件系统102利用)来用文件系统104中的属性和/或元数据来填充项目。通过利用文件后备项目,文件系统适配器106允许由与文件系统104相关联的API以及涉及文件系统102的当前和先前版本的现有API的操纵。文件系统适配器106也可提供文件系统102和文件系统104之间的同步。具体地,文件后备项目可提供与后备文件中的对应数据同步的数据。可以明白和理解,文件后备项目可向文件系统104提供文件系统102的特征,诸如但不限于,属性、安全特征、文件流、文件等。
系统100还包括接口组件108,它提供了各种适配器、连接器、通道、通信路径等,以将文件系统适配器106集成到实际上任何操作系统中。另外,接口组件108可提供各种适配器、连接器、通道、通信路径等,它们能够与数据和文件系统适配器106交互。可以理解,尽管接口组件108被结合到文件系统适配器106中,这种实现并不如此受限制。例如,接口组件108可以是独立的组件,以接收或发送与系统100有关的数据。
图2示出了便于适配至少两个完全不同的文件系统来提供统一性的系统200。文件系统适配器206可提供文件系统202和文件系统204之间的统一性和/或兼容性。然而,可以明白和理解,文件系统适配器206可提供对多个完全不同的文件系统的适配。文件系统202可以是基于文件流和目录的文件系统,它利用至少一个API和/或应用程序。例如,与文件系统202有关的API和/或应用程序可以是,但不限于,16位、32位等版本。文件系统204可以是利用项目作为一致性单元的复杂结构,其中元数据、属性、关系被实现为复杂类型的实例。文件系统204可以是可描述数据形状、声明隐含数据上的某一语义一致性的约束、以及定义数据之间的语义关联的数据模型。通过利用文件系统适配器206,与文件系统202有关的API和/或应用程序可以在文件系统204内统一地使用。可以理解,文件系统202、文件系统204和文件系统适配器206可以基本上分别类似于图1中的文件系统102、文件系统104和文件系统适配器106。
文件系统适配器206可包括分析文件系统202的分析器组件210。分析器组件210可确定与其相关联的目录和/或文件,以便于提供可与文件系统204适配和/或兼容的系统。分析器组件210可确定至少一个叶节点。可以理解,叶节点可以被表示为文件后备项目,其中文件系统202的所有目录和/或文件可被表示为文件系统204中的项目。由此,不是叶节点的目录和/或文件具有文件系统204中的存在,但没有与其相关联的流。
文件系统适配器206还可包括创建和/或生成文件后备项目的生成器组件212。生成器组件212可至少部分地基于对文件系统202的分析来创建文件后备项目。例如,生成器组件212可为与文件系统202相关联的任何叶节点创建文件后备项目,其中文件后备项目与文件系统204兼容,因为文件后备项目是由来自文件系统202的文件和/或文件流来丰富的。生成器组件212可用以下的至少一个来创建文件后备项目:文件后备项目具有相关联的(例如,后备)文件流;文件后备项目不能包含其它项目(例如,它们是名字空间中的叶节点);文件后备项目可以被建立映象(在下文中讨论);以及文件属性(在下文中讨论)是为文件后备项目维护的。
文件后备项目可担当文件系统202和文件系统204之间的桥梁。如果1)内容的至少一部分是来自文件系统202的文件和/或文件流,和/或2)底层文件的内容要由与文件系统202相关联的至少一个API和/或应用程序来操纵,则文件系统204的任何项目可以被指定为文件后备项目。文件系统204中的文件后备项目可储存与项目相关联的元数据属性,以及与项目相关联的文件流。可以理解,文件系统202文件夹/目录/文件分层结构机制可在文件系统204中利用包含包括文件后备项目的其它项目的容器项目来表示。由此,利用文件系统202的API的应用程序可与文件系统204的存储机制无缝地工作。
图3示出了便于适配文件流关联的文件系统和元数据关联的文件系统的系统300。文件系统适配器306可在文件系统302和与之完全不同的文件系统304之间提供统一和兼容的交互。文件系统适配器306可利用文件后备项目作为文件系统304内可用与文件系统302相关联的文件和/或文件流来填充至少一个属性和/或元数据的项目。文件后备项目可担当文件系统302(例如,文件格式)以及文件系统304(例如,丰富模式化的复杂类型实例)之间的桥梁。
文件系统适配器306可包括向文件系统304提供关联到与文件系统302相关联的文件和/或文件流的属性的属性组件310。例如,文件系统302利用基于文件流的存储系统,其中文件可具有至少一个属性,诸如但不限于,只读、压缩、归档文件等等,其中一个或多个位可表示这些属性。属性组件310可允许表示文件系统302中的文件和/或文件流的文件后备项目将这些属性结合到文件系统304中。可以理解,属性组件310可表示和/或对应这些属性,作为具有各自的文件后备项目的属性。在一个示例中,属性组件310可在通过来自文件系统302的调用关闭文件流之后提供对文件属性的更新。属性可通过与文件系统304相关联的API(在下文讨论)来更新。
属性组件310还可提供项目属性,它是包含对所有项目公用的属性的嵌套类型。属性可以由通过文件系统304和/或与文件系统304相关联的API工作的任何应用程序设置。以下属性可作为示例提供,以供应用程序和/或与文件系统302的兼容性使用。
名称 | 类型 | 描述 |
IsArchive | FileStorageSystem.Boolean | 如果项目被标记为用于归档,则为真。应用程序可设置和使用该属性。FileStorageSystem(文件存储系统)可以不解释/强制实施该属性的语义。其默认值=真 |
IsHidden | FileStorageSystem.Boolean | 如果项目被标记为隐藏则为真。应用程序可使用该属性来显示或隐藏项目。FileStorageSystem可以不解释/强制实施该属性的语义。其默认值=假 |
名称 | 类型 | 描述 |
IsReadOnly | FileStorageSystem.Boolean | 项目被标记为只读。应用程序可能希望阻止对这些项目的更新。FileStorageSystem可以不解释/强制实施该属性的语义。其默认值=假 |
IsSystem | FileStorageSystem.Boolean | 指示项目是否为操作系统的一部分。应用程序可更新该属性,并可使用来解释该属性用于显示或其它目的。FileStorageSystem可以不解释/强制实施该属性的语义。其默认值=假 |
IsTemporary | FileStorageSystem.Boolean | 指示项目用于临时存储。FileStorageSystem可以不解释/强制实施该属性的语义。其默认值=假 |
文件系统适配器306可包括允许至少一个属性保持在项目、文件后备项目以及后备文件(例如,文件系统302中由文件后备项目表示的文件)之间同步的元数据处理程序组件312。例如,属性可在后备文件流中修改,其中,元数据处理程序组件312可将新值升级到文件系统304内的项目中的适当字段。在另一示例中,属性可通过与文件系统304相关联的API来改变;元数据处理程序组件312可将新值降级到文件系统302内的后备文件流。可以明白和理解,不同类型的文件后备项目可具有与其相关联的不同元数据处理程序组件312。
例如,升级可以由元数据处理程序组件312在文件由应用程序关闭之后异步地完成。另一方面,降级可以是异步的。特殊的项目属性可指定升级的属性是否在项目和后备文件之间保持同步。升级状态可指定项目升级出错状态。该状态可与默认的文件后备项目流上的文件关闭异步地设置。该状态对于非文件后备项目可以为空。下表描述了升级状态的可能值。
可以理解,文件系统306可利用项目表,其中储存了至少一个项目和/或文件后备项目。项目表可利用文件流表和/或文件属性表,该表将文件流和/或文件属性关联到可被储存在项目表中的相应的文件后备项目。文件流表和/或文件属性表可储存与要成为文件后备项目(例如,包含文件流和/或文件以丰富和/或填充至少一个属性)的项目有关的相应文件流和文件属性。可以理解,文件属性可储存在项目表中。文件属性语义可以由例如更新API来实现。
此外,全局项目表可包含对文件后备项目的以下添加。
名称 | 类型 | 描述 |
(TableItem的当前列) | | |
LastAccessTime | FileStorageSystem.DataTime | 访问文件或目录的最后时间。库不更新该属性:可在需要时更新。它具有非常高的更新频率,且因此不被同步。 |
StreamSize | BigInt | 流的大小。 |
AllocationSize | BigInt | 文件流的分配大小 |
PromotionStatus | Int32 | 升级出错标志 |
例如,文件流表可以具有以下属性。
名称 | 类型 | 描述 |
ItemId | Uniqueidentifier非空 | FileStorageSystem项目身份 |
RowId | Uniqueidentifier非空,ROWGUIDCOL唯一默认(newid()) | 每一文件流的唯一标识符 |
Stream | varbinary(max)FILESTREAM非空 | 文件流 |
以下被示出为利用文件流存储的文件系统的一个示例,其中,实现了32位系统,且不被看作对本发明的局限。以下是用于可由系统300和文件存储系统(FSS)(例如,文件系统304)支持的32位文件系统的属性的示例。
32位文件属性 | FSS中的名称 | FSS类型 | 默认值 | 信任等级 | 32位语义 | FSS语义 |
CreationTime | Created | DateTime | 创建项目的时间 | 更新API,FSA存储API ,WRITEC | 指定创建文件的时间 | 指定创建项目的时间 |
| | | | ONTROL | | |
ChangeTime | Modified | DateTime | 创建项目的时间 | 更新API,FSA存储API,WRITE_CONTROL | 改变时间可以在属性、文件名流或目录内容改变时更新 | 指定改变项目的最后时间 |
| | | | ONTROL | | |
LastAccessTime | LastAccessTime | DateTime | 创建项目的时间 | 更新API,FSA存储API,WRITE_CONTROL | 指定访问文件或目录的新时间。如果访问新时间大于LastAccessTime属性的值一小时以上,则更新。 | 指定访问项目的最后时间,如果访问时间大于LastAccessTime属性的值一小时以上,则更新。 |
FILE_ATTRIBUTRE_HIDDEN | IsHidden | Bool | FALSE | WRITE_CONTROL | 文件或目录被隐藏 | 目标项目不被包括在普通文件夹清单中。 |
EndOfFile | StreamSize | Int32 | 0 | FSS存储API | 指定绝对文件末尾位置作为从文件起始的字节偏移量。指定到文件末尾的的字节偏移量。 | 指定绝对文件末尾位置作为从后备文件流的起始的字节偏移量。指定到文件末尾的字节偏移量。 |
AllocationSize | AllocationSize | Int32 | 0 | FSS存储API | 指定以字节为单位的文件分配大小。 | 指定以字节为单位的后备文件流分 |
| | | | | 通常,该值是底层物理设备的扇区或簇大小的倍数。 | 配。通常,该值是底层物理设备的扇区或簇大小的倍数。 |
FILE_ATTRIBUTE_ARCHIVE | IsArchive | Bool | True | WRITE_CONTROL | 文件或目录是归档文件或目录。应用程序使用该属性来标记文件以供备份或移除。 | 该项目是归档文件或目录。应用程序使用该属性来标记文件以供备份或移除。 |
FILE_ATTRIBUTE_TEMPORARY | IsTemporary | Bool | FALSE | WRTIE_CONTROL | 文件:该文件用于临时存储。 | 该项目用于临时存储。 |
| | | | | 通常,该值是底层物理设备的扇区或簇大小的倍数。 | 配。通常,该值是底层物理设备的扇区或簇大小的倍数。 |
FILE_ATTRIBUTE_READONLY | IsReadIOnly | Bool | FALSE | WRITE_CONTROL | 该文件可以是只读的。 | 该项目可以是只读的。 |
FILE_ATTRIBUTE_SYSTEM | IsSystem | Bool | FALSE | WRITE_CONTROL | 文件或目录是操作系统的一部分或由操作系统独占使用。 | 项目是操作系统的一部分或由操作系统独占使用。 |
NumberOfLinks | CalculatedValue | | | | 到文件的硬链接数。 | 总是为1,除根目录具有0以外。 |
DeletePending | CalculatedValue | | | | 删除待决状态,TRUE指 | 如果删除在通过32位的 |
| | | | | 示文件删除已被请求。 | FBI上待决,则为TRUE。否则为FALSE。 |
FILE_ATTRIBUTEDEVICE | CalculatedValue | | | | 保留;不使用。 | 总是为FALSE。 |
FILE_ATTRIBUTE_DIRECTORY | CalculatedValue | | | | 标识目录的句柄 | 对于文件后备项目为FALSE,否则为TRUE。 |
FILE_ATTRIBUTE_OFLINE | IsGhost | Bool | FALSE | 该标志不应当可通过32位API来设置。 | 该属性指示文件数据以被物理地移至离线存储。该属性由远程存储、分层结构存储管理软件使用。 | 指定项目是否被建立映象。 |
继续前一示例,以下属性可被部分地支持和/或完整地支持。
32位文件属性 | FSS中的名称 | FSS类型 | 默认值 | 信任级别 | 语义 | FSS语义 |
LastWriteTime | Modified | DateTime | CreationTime | 更新API,FSA存储API,WRITE_CONTEOL | 指定修改文件流或改变目录的枚举结果的最后时间 | 指定改变项目的最后时间 |
图4示出了便于将一个文件系统与一个完全不同的文件系统适配和/或结合的系统400。文件系统适配器406可提供与文件系统402和文件系统404的统一性。文件系统402可以基于文件流,且可包括目录、文件夹和文件。例如,文件流402可以是16位文件流,32位文件流(例如,胖文件系统),其中API(例如,16位API、32位API)利用这一文件系统用于各自的操作系统。文件系统404可以是基于复杂类型的系统,且包括类型、项目、属性、关系、类型实例、容器等等。可以理解,文件系统404是要将信息单元表示为具有相关联元数据和/或属性的对象。此外,文件系统402和文件系统404可以基本上类似于分别在图3、2和1中的文件系统302、304、202、204、102和104。
文件系统适配器406可至少部分地基于文件系统402的文件结构来创建文件后备项目,以允许无缝地集成到文件系统404中。文件后备项目可由文件和/或文件流来填充和/或丰富,以创建和/或附加由文件系统404利用的属性。文件后备项目可允许在文件系统404中利用文件系统402的API,而无论需要文件流的API格式如何,因为文件后备项目是具有与其相关联的文件和/或文件流的类型。换言之,文件后备项目是文件系统402和文件系统404之间的桥梁。
文件系统适配器406可包括为文件后备项目的属性提供同步的映象组件410。映象组件410可以创建映象项目,它是另一文件后备项目的复制品,但不包含文件流。此外,映象组件410可提供建立映象,建立映象是用于创建映象项目和/或将现有项目转换成映象项目的操作。映象组件410也可提供解除映象,它是用于将映象项目转换成常规项目的操作。尽管映象组件410被结合到文件系统适配器406中,但是可以理解,映象组件410可以是单独的组件和/或独立的单元。
下表可提供关于映象组件410的能力的进一步描述。
名称 | 方向 | 类型 | 描述 |
itemId | IN | Guid | 要建立映象/解除映象的项目的Id。 |
isGhost | IN | BIT | 指定项目是应当被建立映象还是解除映象。 |
concurrencyToken | IN | BIGINT | concurrencyToken是项目的期望并发性令牌值。如果输入值为NULL,则不完成检查。默认值是NULL。 |
在一个示例中,映象组件410可对文件系统404的实体建立映象。如果项目不是文件后备项目,则可返回错误。如果项目已被建立映象,则操作是空操作且返回成功。映象组件410可将该信息传播到该映象项目树中的所有子实体(例如,所有嵌入项目、关系和/或扩展),并将一个位设为真以通知该实体状态已被建立映象。文件流内容可在发生建立映象之后对该映象项目删除(例如,将文件流设为NULL)。
在另一示例中,实体可由映象组件410解除映象。如果映象不是文件后备项目,则返回错误。如果项目没有被建立映象,则操作是空操作且返回成功。可以将一个位设为假来通知该实体状态,该实体没有被建立映象。零长度的文件流可以被创建并添加到文件流表中。解除映象不会恢复文件流内容,调用者必须明确地用适当的内容来填充文件流(例如,较佳地在基本上类似的事务中)。在一个实例中,解除映象操作的使用模式可以如下:打开事务;对项目解除映象;填充/恢复文件流内容;以及提交事务。
文件系统适配器406可包括属性隧道传送组件(ATC)412。ATC 412提供了属性隧道传送以便于文件系统404内的名称改变和/或保存资源。文件系统402利用临时文件,其中这一文件是在打开、访问和/或编辑之后创建的。当文件被保存在文件系统402中时,临时文件和保存的文件名被交换。例如,可在文件系统402中创建和访问文件food.doc。在文件系统402内进行访问之后,可创建文件fl.tmp。food.doc可被移至f2.tmp,而fl.tmp被移至food.doc。文件f2.tmp可在文件系统402中删除。然而,基于文件系统404的结构以及对项目的利用来表示信息单元,更新名称的API调用是一种昂贵的资源。一般而言,ATC 412允许在两个文件后备项目之间交换相关联的文件流。例如,储存在表文件流表中的文件流可以由ATC 412利用,其中可交换两个文件流的项目ID。尽管被描述为结合到文件系统适配器406中,然而可以理解,ATC 412可以是独立的组件、被结合到任一合适的组件中、和/或其组合。
图5示出了被创建以便于适配多个完全不同的文件系统的文件后备项目。具体地,文件后备项目502可提供文件系统504和文件系统506之间的统一性。可以理解,文件系统504可以基本上类似于分别在图4、3、2和1中的文件系统402、302、202和102。此外,文件系统506可以基本上类似于分别在图4、3、2和1中的文件系统404、304、204和104。
文件后备项目502可提供提供语义的语义层508(例如,由上文描述的更新API和/或元数据处理程序组件实现)。文件后备项目502还包括文件流510。文件流510可以具有文件系统502的技术。与文件系统504相关联的应用程序(例如,32位应用程序和/或API)可利用文件后备项目502直接在用于储存在文件系统506中的文件的文件流上操作。诸如但不限于高速缓存管理、流传送、字节范围锁定以及存储器映射等许多文件系统504的技术无需由文件系统506重新实现。底层流与文件后备项目502相关联。此外文件流510可以由至少一个访问控制列表(ACL)来访问。文件流510可以在诸如下表的文件流表中表示。
名称 | 类型 | 描述 |
ItemId | Uniqueidentifier非空 | 文件存储系统项目身份 |
RowId | Uniqueidentifier非空,ROWGUIDCOL唯一默认(newid()) | 每一文件流的唯一标识符 |
Stream | varbinary(max)FILESTREAM非空 | 文件流 |
另外,文件后备项目502也可包括文件属性512和实体状态514、改变单元516以及项目数据518。文件属性512可以被储存在项目表中,其中文件属性语义可以由例如更新API来实现。实体状态514可具有储存在实体状态项目用户类型(UDT)字段中的属性。实体状态属性的语义可由更新API和/或元数据处理程序组件(未示出)来实现。此外,文件后备项目502可利用改变单元512来改变表示与项目有关的数据的至少一个单元和/或项目数据518。
在一个示例中,下表可表示实体状态514的至少一个特征。
名称 | 类型 | 描述 |
IsCompoundItemType | Boolean | 如果实体是项目类型,且在模式声明中被声明为“复合项目”则为真。如果实体是项目类型且不在模式声明中被声明为复合项目(例如,被声明为一般的容器)则为假。如果实体不是项目类型(例如,实体是链接、项目片段或扩展),则该位的值将与其所有者/源项目的值相同。其默认值为真。 |
RootCompoundItemId | Guid | 储存包含该实体的最顶部复合项目的ItemId。如果这不是复合项目分层结构的一部分(例如,这是“真实的一般容器”),则该值为空。如果该实体是最顶端的根复合项目,则该值可以与项目id相同。如果该实体被包含在复合项目分层结构中,则该值是从分层结构往上最顶端的根复合项目的项目id。其默认值为假。 |
IsRootFileBackedItem | Boolean | 如果项目是根文件后备项目,则为真。如果项目 |
| | 不是文件后备项目或者项目不是根文件后备项目(例如,在文件后备项目树中包含的项目),则为假。对于所有其它实体(链接、扩展和项目片段),该标志具有与其所有/源项目相同的值。其默认值为假。 |
RootFileBackedItemId | Guid | 储存包含该实体的根文件后备项目的项目Id。如果它不是文件后备项目则该值为空。如果该实体是根文件后备项目,该值可以与项目id相同。如果该实体包含在文件后备项目树中,则该值是根文件后备项目的项目id。 |
IsGhost | Boolean | 如果实体是另一项目的映象复制品(的一部分),则为真。其默认值为假。 |
图6示出了便于适配文件流关联的文件系统和元数据关联的文件系统的系统600。文件系统适配器600可提供文件系统602(例如,基于文件流的系统,利用32位的API)和文件系统604(例如,基于对象的系统,利用项目、类型、属性和关系来表示信息单元)之间的统一性和无缝集成。可以理解,文件系统602可以基本上类似于分别在图5、4、3、2和1中的504、402、302、202和102。另外,文件系统604可以基本上类似于分别在图5、4、3、2和1中的506、404、304、204和104。
有向无环图(DAG)组件608可结合本发明使用。DAG组件608可利用没有任何回路的有向图,其中对每一顶点,没有从这一顶点开始并在这一顶点结束的有向路径。源是没有进入边的顶点,而宿是没有外出边的顶点。有限的DAG具有至少一个源和至少一个宿。DAG的长度是最长有向路径的长度(例如,边数)。可以理解,文件系统602不结合DAG,而文件系统604可经由文件系统适配器606来利用DAG组件608。尽管被描述为独立的单元,但DAG组件608可被结合到文件系统适配器606和/或任一其它合适的组件中。通过利用DAG组件608,文件可同时描述两个目录。例如,当从一个目录中删除且物理地移除文件时,该文件仍可作为该目录的父节点。
图7示出了采用智能来便于将一个文件系统与一个完全不同的文件系统集成的系统700。系统700可包括文件系统702、文件系统704、文件系统适配器706以及接口108,它们都可以基本上类似于在先前的附图中所描述的代表性组件。系统700还包括智能组件708。智能组件708可由文件系统适配器706使用,以便于适配至少两个完全不同的文件系统。例如,智能组件708可以用于便于确定文件系统702的文件结构。
可以理解,智能组件708能够从一组通过事件和/或数据捕捉的观察中推出或推断系统、环境和/或用户的状态。推断可用于标识特定的上下文或行动,或可生成状态的概率分布。推断可以是概率性的一即,基于数据和事件的考虑计算感兴趣的状态的概率分布。推断也可以指用于从一组事件和/或数据组成更高级事件的技术。这类推断导致从一组观察的事件和/或储存的事件数据构造新的事件或行动,无论事件是否在相邻的时间上相关,也无论事件是否来自一个或若干个事件和数据源。各种分类(显式和/或隐式训练的)方案和/或系统(例如,支持矢量机、神经网络、专家系统、贝叶斯信任网、模糊逻辑、数据融合引擎……)可用于执行关于本发明的自动和/或推断的动作。
分类器是将输入属性矢量x=(x1,x2,x3,x4,xn)映射到该输入属于一个类的置信度的函数,即f(x)=confidence(class)。这一分类可采用基于概率和/或基于统计的分析(例如,分解成分析效用和成本)来预测或推断用户期望自动执行的动作。支持矢量机(SVM)是可采用的分类器的一个示例。SVM通过找出可能输入空间中的超曲面(hypersurface)来操作,其中,超曲面试图将触发准则从非触发事件中分离出来。直观上,这使得分类对于接近但不等同于训练数据的测试数据正确。可采用其它定向和非定向模型分类方法包括,例如,单纯贝叶斯、贝叶斯网络、决策树以及提供不同独立性模式的概率分类模型。此处所使用的分类也包括用于开发优先级模型的统计回归。
呈现组件710可提供各种类型的用户界面以便于在用户和/或耦合到文件系统适配器706的任何组件之间的交互。如图所示,呈现组件710是可与文件系统适配器706一起使用的单独实体。然而,可以理解,呈现组件710和/或类似的查看组件可以被结合到文件系统适配器706和/或独立单元中。呈现组件710可提供一个或多个图形用户界面(GUI)、命令行界面等等。例如,GUI可以被呈现为向用户提供加载、导入、读取等数据的区域或手段,并可包括呈现它们的结果的区域。这些区域可以包括已知的文本和/或图形区域,包括对话框、静态控件、下拉菜单、列表框、弹出菜单、编辑控件、组合框、单选按钮、复选框、按钮以及图形框。另外,可采用便于呈现这些垂直和/或水平滚动条以供导航的实用程序和工具条按钮来确定区域是否可被查看。例如,用户可与耦合到文件系统适配器706的一个或多个组件交互。
用户也可与区域交互以经由各种设备来选择和提供信息,这些设备诸如,例如鼠标、滚动球、小键盘、键盘、笔和/或语音激活。通常诸如键盘上的按钮或回车键等机制可在输入信息之后使用,以启动搜索。然而,可以理解,本发明不限于此。例如,仅仅加亮一复选框就可启动信息传输。在另一示例中,可采用命令行界面。例如,命令行界面可提示(例如,通过显示器上的文本消息和音频音调)用户通过提供文本消息来输入信息。用户然后可提供合适的信息,诸如对应于界面提示中提供的选项的字母数字输入或对提示中提出的问题的回答。可以理解,命令行界面可以结合GUI和/或API来使用。另外,命令行界面可结合具有有限图形支持和/或低带宽信道的硬件(例如,视频卡)和/或显示器(例如,黑白和EGA)来使用。
图8-10示出了依照本发明的方法。为解释简明起见,方法被描绘和描述成一系列动作。可以理解和明白,本发明不受所示的动作和/或动作的顺序限制,例如,动作可以按各种顺序和/或与此处未呈现和提出的其它动作同时发生。此外,并非所示的所有动作都是实现依照本发明的方法所必需的。另外,本领域的技术人员可以理解和明白,方法可以通过状态图或事件替换地被表示为一系列相互关联的状态。
图8示出了便于向至少两个完全不同的文件系统适配和/或提供统一性的方法800。第一文件系统可以是文件存储系统,其中结构基于文件流和/或目录。第一文件系统可利用文件流,使得应用程序/或API可丰富该文件流以提供更多结构。第二文件系统可以是更复杂的模型,其中定义了项目、子项目、属性和关系以允许在第二文件系统内将信息表示为复杂类型的实例。项目可以被定义为第二文件系统中的最小一致性单元,它可以被独立地保护、串行化、同步、复制、备份/恢复等。项目是类型的实例,其中第二文件系统中的所有项目可被储存在项目的单个全局范围中。第二文件系统可以基于至少一个项目和/或容器结构。第二文件系统可以是将文件中隐藏的丰富元数据展示为项目的存储平台。
在参考标号802处,可分析基于文件流的第一文件系统。这一分析可确定文件结构,以及要用于提供统一性的内容。在参考标号804处,可至少部分地基于该分析创建文件后备项目。例如,分析可确定与这一结构相关联的32位文件存储系统以及叶节点的数量。由此,可对与第一文件系统相关联的每一叶节点创建文件后备项目,而项目可用于表示不是叶节点的文件和/或目录。文件后备项目可以是第二文件系统内的项目,它依赖于文件和/或文件流来填充其某些或全部属性。文件后备项目可担当第一文件系统和第二文件系统之间的桥梁。在参考标号806处,文件后备项目可用于至少部分地基于用文件流和文件的第一文件系统,以及结合包含可与第一文件系统有关的文件和/或文件流的文件后备项目的第二文件系统,来提供两个完全不同的文件系统之间的统一性。
图9示出了用于将一个文件系统适配到一个完全不同的文件系统的方法900。在参考标号902处,分析利用文件和/或文件流作为其结构的第一文件系统。从这一分析中,在参考标号904处为不是第一文件系统的叶节点的每一目录和/或文件创建项目。在参考标号906处,可确定叶节点存在于第一文件系统中,其中对其创建文件后备项目。文件后备项目是利用复杂类型实例来表示信息单元的关联到第二文件系统的项目。在参考标号908处,文件后备项目用文件、文件流、属性、安全特征等来丰富和/或填充,以将文件表示为第二文件系统中的项目。在参考标号910处,使用文件后备项目将第一文件系统适配到第二文件系统。
图10示出了便于适配文件流结构化的文件系统和元数据关联的文件系统的方法1000。在参考标号1002处,分析文件流结构化的文件系统(例如,被称为第一文件系统)。在参考标号1004处,可至少部分地基于对第一文件系统的分析生成文件后备项目。文件后备项目是关联到第二系统的项目,其中文件和/或文件流可丰富至少一个其属性。在1006处,文件后备项目可用于将第一文件系统与第二文件系统适配。
在参考标号1008处,可提供建立映象来确保第一文件系统和第二文件系统的属性完整性和同步。例如,可创建映象项目,使得它是另一文件后备项目的复制品,但不包括文件流。此外,可以提供作为用于创建映象项目和/或将现有项目转换成映象项目的操作的映象建立。另外,可使用解除映象,它是用于将映象项目转换成常规项目的操作。在参考标号1010处,来自第一文件系统的属性可被结合到与第二文件系统相关联的文件后备项目中和/或与其一起使用。第一文件系统可包含属性,它可以是,但不限于,只读、压缩、归档文件等等,其中一个和/或多个位可表示这些属性。可以理解,属性可通过文件后备项目被结合到第二文件系统中。
在参考标号1012处,可使用属性隧道传送和/或DAG。属性隧道传送可提供至少两个文件后备项目之间的文件流的交换,以允许在第二文件系统中的临时文件之间保存资源和/或改变名称。在参考标号1014处,来自第一文件系统的API可通过采用提供无缝集成的文件后备项目用于第二文件系统。换言之,文件后备项目包含了与项目相关联的元数据属性以及与项目相关联的文件流。后备项目可以由与第二文件系统相关联的API以及作为第一文件系统的一部分的API来操纵。
为了提供用于实现本发明的各方面的附加上下文,图11和12及以下讨论旨在提供对适于在其中实现本发明的各方面的计算环境的简要概括描述。尽管以上本发明是在由运行在本地计算机和/或远程计算机上的计算机程序的计算机可执行指令的一般上下文环境中描述的,但本领域的技术人员可以认识到,本发明也可结合其它程序模块来实现。一般而言,程序模块包括例程、程序、对象、组件、数据结构等等,它们执行特定的任务或实现特定的抽象数据类型。
此外,本领域的技术人员可以理解,本发明可以用其它计算机系统配置来实践,包括单处理器或多处理器计算机系统、小型机、大型计算机、以及个人计算机、手持式设备、基于微处理器和/或可编程消费者电子设备等等,其每一个可在操作上与一个或多个相关联的设备通信。本发明所示的各方面也可以在分布式计算环境中实践,其中,任务由通过通信网络连接的远程处理设备来执行。然而,本发明的某些(如果不是全部)方面可以在独立的计算机上实施。在分布式计算环境中,程序模块可以位于本地和/或远程存储器存储设备中。
图11是其中本发明可交互的示例计算环境1100的示意性框图。系统1100包括一个或多个客户机1110。客户机1110可以是硬件和/或软件(如,线程、进程、计算装置)。系统1100也包括一个或多个服务器1120。服务器1120也可以是硬件和/或软件(如,线程、进程、计算装置)。例如,服务器1120可容纳线程,以例如通过使用本发明执行变换。
客户机1110和服务器1120之间的一个可能的通信可以是适用于在两个或多个计算机进程之间传输的数据分组的形式。系统1100包括可用于促进客户机1110和服务器1120之间的通信的通信框架1140。客户机1110操作上连接至可用于储存对客户机1110本地的信息的一个或多个客户机数据存储1150。类似地,服务器1120操作上连接至可用于储存对服务器1120本地的信息的一个或多个服务器数据存储1130。
参考图12,用于实现本发明的各方面的示例性环境1200包括计算机1212。计算机1212包括处理单元1214、系统存储器1216和系统总线1218。系统总线1218将包括但不限于系统存储器1216的系统组件耦合至处理单元1214。处理单元1214可以是各种可用处理器的任一种。双微处理器和其它多处理器体系结构也可用作处理单元1214。
系统总线1218可以是若干种总线结构类型的任一种,包括存储器总线或存储器控制器、外围总线或外部总线、和/或使用各类总线体系结构的局部总线,这些体系结构包括但不限于,工业标准体系结构(ISA)、微通道体系结构(MCA)、扩展ISA(EISA)、智能驱动电子设备(IDE)、VESA局部总线(VLB)、外围部件互连(PCI),插件总线、通用串行总线(USB)、高级图形端口(AGP)、个人计算机存储卡国际协会总线(PCMCIA)、火线(IEEE 1394)以及小型计算机系统接口(SCSI)。
系统存储器1216包括易失性存储器1220和非易失性存储器1222。基本输入/输出系统(BIOS)包括如在启动时帮助在计算机1212内的元件之间传输信息的基本例程,通常储存在非易失性存储器1222中。作为说明而非局限,非易失性存储器1222可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除ROM(EEPROM)或闪存。易失性存储器1220包括随机存取存储器(RAM),它担当外部高速缓存。作为说明而非局限,RAM以许多形式可用,如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDR SDRAM)、增强型SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)和Rambus直接RAM(RDRAM)、直接Rambus动态RAM(DRDRAM)以及Rambus动态RAM(RDRAM)。
计算机1212也包括可移动/不可移动、易失性/非易失性计算机存储介质。例如,图12示出了盘存储1224。盘存储1224包括但不限于,诸如磁盘驱动器、软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-100驱动器、闪存卡或记忆棒等设备。另外,盘存储1224可单独包括存储介质或与其它存储介质组合,其它存储介质包括但不限于,诸如光盘ROM设备(CD-ROM)、CD可记录驱动器(CD-R驱动器)、CD可重写驱动器(CD-RW驱动器)或数字多功能盘ROM驱动器(DVD-ROM)等光盘驱动器。为便于盘存储设备1224连接到系统总线1218,通常使用可移动或不可移动接口,如接口1226。
可以理解,图12描述了担当用户和合适的操作环境1210中描述的基本计算机资源之间的中介的软件。这类软件包括操作系统1228。操作系统1228可储存在盘存储1224中,它用于控制并分配计算机系统1212的资源。系统应用程序1230利用操作系统1228通过储存在系统存储器1216或盘存储1224上的程序模块1232和程序数据1234对资源的管理。可以理解,本发明可用各种操作系统或操作系统的组合来实现。
用户通过输入设备1236向计算机1212输入命令和信息。输入设备1236包括但不限于,诸如鼠标、跟踪球、指示笔、触摸垫等定位设备、键盘、麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪、TV调谐卡、数码相机、数码摄像机、web摄像头等等。这些和其它输入设备通过系统总线1218经由接口端口1238连接到处理单元1214。接口端口1238包括,例如,串行端口、并行端口、游戏端口、通用串行总线(USB)。输出设备1240使用与输入设备1236相同类型端口中的某一些。由此,例如,USB端口可用于向计算机1212提供输入,并从计算机1212输出信息到输出设备1240。提供了输出适配器1242以说明存在一些输出设备1240,如监视器、扬声器和打印机,以及需要特殊适配器的其它输出设备1240。输出适配器1242包括,作为说明而非局限,提供输出设备1240和系统总线1218之间的连接装置的显卡和声卡。应当注意,其它设备和/或设备的系统可同时提供输入和输出能力,如远程计算机1244。
计算机1212可以在使用到一个或多个远程计算机,如远程计算机1244的逻辑连接的网络化环境中操作。远程计算机1244可以是个人计算机、服务器、路由器、网络PC、工作站、基于微处理器的电器、对等设备或其它常见的网络节点等等,并通常包括相对于计算机1212所描述的许多或所有元件。为简明性起见,仅示出了远程计算机1244具有存储器存储设备1246。远程计算机1244通过网络接口1248逻辑上连接至计算机1212,然后通过通信连接1250物理地连接。网络接口1248包含诸如局域网(LAN)和广域网(WAN)等通信网络。LAN技术包括光纤分布式数据接口(FDDI)、铜缆分布式数据接口(CDDI)、以太网/IEEE 802.3、令牌环/IEEE 802.5等等。WAN技术包括但不限于,点对点链路、诸如综合业务数字网(ISDN)及其变体等电路交换网络、分组交换网络以及数字订户线(DSL)。
通信连接1250指用于将网络接口1248连接到总线1218的硬件/软件。尽管为说明的清晰性,示出通信连接1250在计算机1212内,然而它也可以对计算机1212是外部的。仅为示例性起见,连接到网络接口1248必需的硬件/软件包括内部和外部技术,如包括常规电话级调制解调器、线缆调制解调器和DSL调制解调器的调制解调器、ISDN适配器和以太网卡。
上文所描述的包括本发明的示例。当然,不可能为了描述本发明而描述组件或方法的每一可想象的组合,但是本领域的普通技术人员可以认识到,本发明的许多另外的组合和置换是可能的。因此,本发明旨在包含落入所附权利要求书的精神和范围中的所有这样的改变、修改和变化。
特别地,关于由上述组件、设备、电路、系统等执行的各种功能,用于描述这些组件的术语(包括对“装置”的引用)除非另外指明,否则旨在对应于执行所描述的组件的指定功能的任何组件(例如,功能等效物),即使在结构上不等效与所揭示的结构,这些结构执行此处所示的本发明的示例性方面中的功能。在这一点上,也可以理解,本发明包括系统以及具有用于执行本发明的各种方法的动作和/或事件的计算机可执行指令的计算机可读介质。
另外,尽管本发明的具体特征是相对于若干实现中的仅一个来揭示的,但是特征可以如对任何给定或特定应用所需且有利的那样与其它实现的一个或多个其它特征相组合。此外,在术语“包括”以及“其中包括”及其变体用于详细描述或权利要求书的意义上,这类术语旨在以与术语“包含”类似的方式为包含性的。