一、什么是WinFS?
WinFS是Longhorn操作系统引入的全新的存储系统。它针对原先的Microsoft Windows 平台作了三方面的改进:
1、WinFS允许你用多种方式来对你的存储信息进行分类,并且允许你将信息的某个数据项(item)同其它信息的数据项进行关联。
2、WinFS为日常信息提供了公共存储格式(common storage format),比如:用于处理人、地点、照片等信息的存储格式。
3、WinFS支持多个应用程序间公共信息的共享。往往这些应用程序来自于不同的开发商。
二、WinFS是一个信息存储平台:
WinFS是一个用于组织、搜索和共享各类信息的存储平台。WinFS定义了丰富的数据模型(data model )。你可以使用这些数据模型来定义能让WinFS可以使用的数据类型(data type)。WinFS还包含了很多的模式(schema)。模式是用来描述类似照片、文档、人、地点、事件、任务和消息等真实世界的实体。这些实体可以非常的复杂。比如:一个人能够有多个名字、多个住址、多个e-mail地址,甚至拥有更多的实体。
每个软件提供商(ISV)也可以定义自己的数据类型,并将相应的模式提供给WinFS。通过将复杂的存储问题交给WinFS去管理,ISV可以将精力集中于开发应用程序的逻辑、将WinFS提供的便利应用到自己的日常和定制数据上来。
WinFS提供了一个关系引擎(relational engine )。通过它,你可以运用强大的关系查询方式来定位一个存储类型的实例。WinFS允许使用关系来组合多个存储实体。一个联系人(contact)可以是一个组织(Organization)的雇员(Employee)组中的一个成员,同时他也可以是某个住址的室友(Household)组中的一个成员。ISV可以在自己定制的数据类型之间或是在WinFS预定义的数据类型之间,自动获取搜索、复制、设置安全属性和建立关系的能力。
这种结构允许用户向系统提问,并且通过回答相应的定位信息来查找数据,而不同于Longhorn之前系统提供的搜索方式。比如:你可以要求WinFS从你的即时通讯好友中查找所有没有电话号码的人的e-mail地址。使用关系,你能够在所有室友中找到本周过生日的特定成员。
WinFS也支持多种灵活的编程方式。使用这些编程方式,你可以选择适当的编程接口(API)来完成相应的任务。你可以使用传统的关系查询语句SQL来访问存储系统。同样,你也可以使用.NET类和对象来访问存储系统。你也可以使用基于XML的API来访问数据存储系统。WinFS也支持传统的Microsoft Win32文件系统API函数访问数据的方式。你甚至可以混合使用上述的几种API来完成单一的任务。然而,在大多数情况下,开发人员总是使用托管类API来操作WinFS存储系统中的数据。使用SQL语句来实现数据更新远比使用对象API要复杂得多。
此外,WinFS提供了一个数据服务函数集合,用于监视、管理和操作数据。你可以通过注册所感兴趣的事件(event)来接收类似数据项(item)改变的事件。你也可以安排WinFS定期地将数据复制到其它系统中。
三、WinFS是一个文件系统:
不同于传统的基于文件的文件系统,WinFS是一个全新的Windows文件系统。通常,你会把文件的主要数据,即“文件流”(file stream)作为一个文件存放在NTFS卷中。然而,每当你调用API来改变或添加NTFS文件流,WinFS将从文件流中提取出元数据(metadata),并将元数据添加到WinFS存储系统中。元数据描述了文件流的信息,包括文件的路径和其它WinFS从文件流中所提取出来的信息。根据文件的内容,元数据也许是文档的创建者,音频文件的类型或者是PDF文件的关键字等信息。文件流是驻留在NTFS中的,而相应的元数据则驻留在WinFS中,WinFS则对两者进行一致性控制。新的Longhorn应用程序可以选择将文件流直接存放在WinFS中。文件流能够用现有的Win32文件系统API或者新的WinFS API来访问。
四、WinFS不只是一个文件系统:
一个文件系统是用来管理文件和文件夹的。WinFS不仅能管理文件和文件夹,同时它还能管理各类非文件的数据,比如:个人的联系人、个人日程安排日历、个人的e-mail消息。WinFS数据可以是结构化的、半结构化的、或者是非结构化的。结构化数据包含了模式(schema)。模式是用来定义数据是什么东西,以及如何使用该数据。因为WinFS部分实现了关系型系统的功能,所以WinFS要求数据满足相应的语义完整性、数据的事务处理和数据约束。
WinFS又不只是一个关系型系统。它支持分级存储,又支持关系存储。它支持结构化类型,又支持对象。你可以将WinFS看作是层次型、关系型和面向对象型三为一体的数据存储系统。尽管实际上它只是实现了三个传统存储系统的某些方面。同时,WinFS扩展了传统的文件系统和关系型数据库系统。WinFS支持最新Windows平台上所有的数据类型。
五、WinFS和NTFS:
你可以将文件存放在传统的NTFS文件系统中,将文件存放到新的WinFS数据存储系统中。一般而言,一个存放在NTFS中的文件在WinFS中是不可见的。Longhorn应用程序使用了新的WinFS API函数来访问存放于WinFS或NTFS中的数据。此外,Longhorn应用程序也允许继续使用Win32 API函数来访问存放在NTFS文件系统中的数据。
六、文件的升级(File Promotion):
文件不是驻留在WinFS中,就是在NTFS中。任何包含文件数据流的数据项(item)都能够进行所谓“元数据处理”(metadata handling)的升级/降级操作(promotion/demotion)。当WinFS升级一个文件时,它会从NTFS文件的内容中提取元数据,并将元数据添加到WinFS存储系统中。而文件的实际数据流则仍旧留在NTFS文件系统中。你可以根据元数据在WinFS中查询相应的文件,就如同文件的实际数据被存放在WinFS系统中。WinFS也会检查NTFS文件的改变,并对WinFS中的元数据做出相应的修改。
七、文件的导入和导出:
你可以在WinFS和NTFS之间任意地导入导出文件。文件的导入和导出操作将会移动文件内容和文件的元数据。在导入导出操作完成后,产生的新文件就和原文件完全没有关系了。