公告:本站正在遭受网络攻击,访问速度可能严重下降甚至无法访问。

WinFS,虚拟文件夹与库:WinFS概述

来自BetaWorld 百科
跳转到导航 跳转到搜索

所有“我”均指对应文章作者,请仔细分辨。

有对引用原文作改动,删减。

文章结构系MacAdmin整理调整

综述

Windows Future Storage平台允许开发人员和用户以以前无法完成的方式统一、组织和浏览数据。WinFS是微软集成数据计划的关键部分。(集成数据计划是一个术语,用于指一组技术,其目标是为数据提供更好的集成,因为大部分用户数据都锁定在单个应用程序孤岛中)。

WinFS数据模型允许定义丰富的数据概念,如项和关系。它还包括对象 API,可帮助开发人员使用此新数据模型进行编程,以及一组可用于启动开发和与其他应用程序共享数据的核心架构。 [1]

WinFS API数据访问

与现有的托管代码数据访问API不同,WinFS API是一种不同的数据访问模式。

具体来说,链接对于人们想要建模的关系类型是不够的。人们需要更多的标准关系方法来查询数据和项目之间的关联。这已经改变了很多,它最大的部分是关联模型。今天,我们有只基于属性的关联-实际上在存储中的两个项目(如联系人和通过作者关联的文档)之间的联接。我们还有链接关联,它们使用中间实体将两个项目连接在一起,例如在项之间进行临时链接(例如注释)。支持这两种类型的关联将是使应用程序开发人员能够对WinFS上更广泛的数据模型建模的关键。 [2]

OPath

OPath是WinFS API的对象查询语言,旨在允许开发人员对API的客户端对象结构表示丰富的查询。OPath 语言在StorageSearcher上的多个位置使用,用于指定API中其他位置(例如创建StorageView时)中的查询。

OPath是WinFS Beta 1上的“不受支持的工具”。 [3]

起源

很久以前,我和我的朋友加入微软,从事"下一代"操作系统的工作——我在Windows NT上,他在Cairo。开罗尝试建立一个集成存储-对象文件系统OFS。这是将取代Windows NT的那一刻,它发布的东西。但有一天,开罗消失了,接下来的开发继续尝试补全Cairo的部分开发成果,以交付优质的操作系统-下一代Windows NT。当时我没有想太多整个事情, 除了它也许远远领先于它的时间...

1999年左右的网上Storage:

五年后,我在Exchange网上存储工作时第二次遇到"集成存储"。前提是构建一个集成可管理性、多层部署、支持多个协议和数据访问堆栈以及应用开发平台的企业存储。这是一个文件服务器,一个网络服务器,一个公司电子邮件服务器,互联网电子邮件服务器,协作服务器,都卷成一个。文件服务器是工作的作品。我们实际上在Exchange 2000中运送了此产品, 但它是仍然出生的。技术基础并不完全存在——它缺乏真正的交易,存在可伸缩性问题,过于以邮件为导向。Win32支持太难了-我们在单个文件中掌握了整个文件系统,在文件中重新实现NTFS,使用我们自己的块管理策略、我们自己的锁定实现、与缓存管理器的复杂交互—哦!那是一场噩梦,但我们却步履蹒跚。尽管如此,我们还是付出了勇敢的努力,我们最终要学习!

此Webstore的客户端表现称为LIS(本地信息存储),这是构建客户端平台以匹配服务器上的Web store的英勇尝试。Office Designer是客户端上的开发环境,Outlook是客户端上使用该存储的选框应用程序。Outlook脱机存储的开头在这里扎根。挑战是双重的:将服务器存储"收缩"到客户端,然后通过HTTP有线协议提供MAPI填充程序以进行同步。性能从来没有真正匹配Outlook的要求。 [4]

2002年春天,我们开始在数据库组织内孵化WinFS项目。

Ray Ozzie来到微软,在一个名为WHiPS的内部研讨会上发言(高性能系统研讨会)。雷谈到了格罗夫这是一个很酷的应用程序,试图成为一个平台(很难做一个小公司)。当我们在他的演讲后谈论时,他描述了他如何首先在操作系统上构建一个平台,然后使他能够构建他所设想的应用程序。他说,他需要存储,而不仅仅是一个文件系统;他需要同步功能来在不同计算机/用户之间共享信息,他需要高级安全机制,他需要一种方法来建模他在存储系统中的特定架构,他需要搜索信息。因此,他构建了一个更丰富的存储系统,该系统整合了这些类型的概念,然后在他的平台上构建了Groove应用程序。他对我的评论是,微软应该建立这样一个平台,停止销售我们这个行业已经磨练了20-30年的旧操作系统和存储功能。他认为这个更丰富的平台将创建一个新的生态系统,允许开发各种新的应用程序。 [5]

快进到2003年:

再过五年,我们又在集成存储+WinFS中以新的能量向第5次尝试(也是我的第二次尝试)发起。许多因素都有利于我们——随着数字出生数据每天爆炸,对存储平台需求比以往任何时候都迫切,因此需要采用许多技术基础:文件系统中的事务、成熟的数据库、复杂的编程语言,但最重要的是,一组非常有动力的个人,他们在汇集这一复杂技术所需的各种要素方面有着丰富的经验。我们有从QO/QP到事务、编程语言的王牌、在文件系统、分布式系统、Web服务、硬核同步专家、O/R制图大师方面拥有深厚数据库经验的人,但最重要的是,他是一位无所畏惧的领导者,他准备一次一次地真正地拍摄这件事,并且拥有控制这一创新工程的成熟度和纪律——Peter Spiro。

项目开始于许多宣传-一个非常资深的人热情地监督的愿景, 吨的内部团队连接到共同架构的努力-身份服务,状态管理,窗口帮助,自然语言,Windows 外壳,Pix, 媒体等。我们一度还有80多个外部ISV,他们处于不同级别的承诺。我们知道,对于任何单一平台来说,这些服务也是不可持续的,但我们也知道,这些参与对于将创新的核心金块提炼为v1的目标至关重要。Windows Vista的变化发生了,虽然表面上是负面的,但从表面上看,它实际上帮助我们暂停了一下,提炼了我们的核心价值支柱,并且跑得非常快。WinFS在很多方面增加了价值,但我想谈谈一个真正吸引我的方法:一个用于应用程序开发的存储平台。

存储平台:

首先,我们要构建一个存储平台,使应用程序能够以更丰富的方式对数据进行建模,同时仍然受益于人们期望从文件系统获得的常见服务:管理、同步、共享、安全、备份、拖放、移动/复制、删除和是、搜索。在与其他应用程序、Windows shell等进行交互时,文件系统不允许应用程序在比字节流更丰富的任何内容中建模其数据。数据库允许您利用关系功能以更丰富的方式对数据进行建模,但这些功能都没有自动使该数据像文件一样与Windows Shell共享。所以,你有它-我们是最好的文件系统(集成和服务)和数据库(丰富的数据建模功能)滚动成一个-因此采用集成存储。

...

关键是,当今的文件系统过于原始,无法让这些应用程序工作,WinFS试图通过提高应用程序数据的参与程度来缩小这一差距:这是一种交易—应用程序告诉系统有关其数据的信息的量越高,平台在允许应用程序生态系统与其内容交互方面,对于其类型的作用也越多。用户在一个应用程序中组织她的内-设置一个查询来过滤照片-"我的女儿的所有5星级照片,我没有使用较早,分组按年拍摄,按分辨率排序" 和另一个应用程序使用这些查询来编辑集,等等。这是可以通过一个丰富的底层存储平台实现的,只是不是今天。 [6]

WinFS Rules

经典应用实例与 WinFS Rules 解析

几个星期前,我和一位微软招聘人员(玛丽)坐在一起,她给我看了她的电脑。我很惊讶。看,玛丽的问题是,她可以有天,她有5个候选人同时在校园里在不同的面试循环,包括6+面试官每个。她还有一长串候选人,他们下周就要参加循环活动,所有这些都需要立即关注。所以网是:玛丽的邮箱是一场噩梦。一整天,她都收到电子邮件的轰炸。她会得到一封邮件, 说一个候选人错过了面试班车, 需要接电话。或者一个候选人迷路了,不小心走进了比尔格的办公室。因此,她整天坐在电脑前,在邮件中添加后续标志,只是想在攻击中领先一步。

输入WinFS。现在,她进入她的招聘应用程序,并建立一个查询。她称之为"今天面试的候选人"。她回到她的电子邮件,并选择"与<people>相关的邮件",并选择"今天面试的候选人"作为<people>。她将邮件应用设置为红色邮件集的颜色。就是这样。每天,"今天面试的候选人"名单都会自动调整,她的电子邮件中正确的邮件现在被标记为红色。最棒的是,邮件应用和招聘应用不需要互相了解,它们只是将项目和查询存储在文件系统中,其他应用会拾取并使用它们。

那么,WinFS在这里支持什么?让我们在场景中向后工作。首先,构建该查询的能力("与今天面试的考生相关的邮件")仅由WinFS具有真正的查询处理器这一事实启用。这不是一个全文关键字搜索,而是一个需要至少两个连接之间的"表",并要求知道"今天"是什么意思。这很酷,但查询处理器需要知道关系才能有效。因此,这是第二篇文章,WinFS有一个信息模型,支持表达关系。在这种情况下,有两个重要关系:一种是候选人和面试循环之间的关系,另一种是个人与电子邮件之间的关系。很好, 但所有这些数据如何进入我的文件系统, 并在这两个应用程序之间共享?这是我们的第三篇文章-WinFS允许应用程序存储比文件更丰富的数据。我知道, 这令人困惑-一个存储超过文件的文件系统?但是,是的,这是一个关系文件系统,因此除了存储文件,WinFS允许您定义新的"项目类型",这些"项目类型"不是文件。因此,在此示例中,所有四个主要项类型(邮件、联系人、访谈循环和查询)都是非文件项类型。

但要点(将最好的保存为最后)是第四部分:WinFS是一个平台。在心脏,它是一个数据库引擎提供了一种方法,建模关系和存储非文件数据,使它是一个伟大的数据存储的应用程序。这意味着您可以利用现有的文件系统概念,在为您提供更多功能的平台上构建它们。

简单来说,Windows Future Storage提供了以“关系”来构建文件检索方式的方法。——MacAdmin注 [7] 使用 WinFS,Mary能够获得她的招聘申请和电子邮件申请,以便无缝配合,以便她自动跟踪"与今天面试的应聘者相关的邮件"。

那么,WinFS规则是关于什么的,它们如何启用此方案呢?

首先,WinFS规则是可坚持的逻辑单位。在这种情况下,Mary通过启用WinFS的招聘应用程序创建查询"今天面试的候选人",并保留它。但是查询是如何坚持的呢?作为WinFS项。事实上,所有WinFS规则(包括查询)都是项。这有很多优点。首先,可以创建、操作、存储和以与所有其他项相同的方式保护规则。

此外,WinFS规则是关于在应用程序之间发现和共享持久逻辑。由于规则是WinFS项,因此还可以像所有其他WinFS项一样在应用程序之间查询、发现和共享这些规则。在这种情况下,Mary可以很容易地找到并使用来自她的电子邮件应用程序的查询"今天面试的候选人",即使她通过她的招聘申请创建了它。

最后,WinFS规则是关于可重复性和组合的。玛丽不仅可以找到她在招聘申请中创建的查询,还可以在电子邮件应用程序中重新使用它,以创建一个新的查询"与今天面试的应聘者相关的邮件",该查询指的是原始查询。请注意,规则的组成是真实构成的;如果Mary更改了定义查询"今天面试的候选人"的逻辑,这些变化将影响"与今天面试的考生相关的邮件"的查询结果。

实际上,除了查询之外,还有其他几种类型的规则。我将在这里只提及其中之一——财产规则。使用属性规则,可以在项类型上定义新属性,而无需修改或扩展该类型的架构。这些属性的值定义为对现有项数据或可以通过WinFS访问的其他数据进行计算。例如,电子邮件应用程序可以公开为邮件创建"Color"属性的功能,并允许每个用户使用自己的逻辑定义"Color"的值。例如,Mary可能希望将属于查询结果的所有邮件"与今天面试的考生相关的邮件"的颜色都染为红色。 [8]

数据、链接、关系和同步结构

使用WinFS时,您不需要单独的文件。您的数据可以描述为WinFS架构和存储在WinFS本身中的数据的实例。您和其他应用可以使用WinFS API对此数据进行操作。如果需要保留单独的文件,可以编写元数据处理程序来升级和降级文件和存储之间的元数据。如果您希望文件格式由多个项目建模(例如,您的文件是客户信息的集合,其中每个客户都应该是单个项目),则需要编写一个同步适配器,以使存储中的数据和文件保持最新。

项属性作为项目本身的一部分存储在WinFS存储中。WinFS具有"链接"的概念,该概念是具有源项和与项目相关的目标项的实体类型。还有基于项属性的"公共值"关系的概念。公共值关系的导航是基于值的联接。

WinFS 提供同步基础结构,允许您将信息移入和移出WinFS存储。使用此框架,开发人员可以构建同步适配器以支持与外部数据存储的同步。因此,例如,您可以构建一个同步适配器,以便直接与后端邮件存储(如POP3或IMAP4服务器)同步。您还可以构建同步适配器以同步本地计算机上的数据。例如,Outlook同步适配器可以从Outlook导入PIM数据(电子邮件、联系人、约会)。您应该在不受支持的工具文件夹中签出"StoreSpy";此工具包括一个双向Outlook同步适配器。

关系"设置"将取决于其建模。链接需要由某项设置(例如元数据处理程序、同步适配器、应用程序等)但是,公共值关系只是基于联接。WinFS取决于应用程序和用户来提供信息来创建链接。在许多情况下,应用程序已经具有此数据;例如Office应用程序已具有"作者"属性。在其他情况下,用户已经知道此信息,可以设置它。将主要联系人的信息移动到WinFS中,然后将图片与联系人关联起来将相当容易。将来,可能有许多过程可用于关联您的数据:文档的自然语言处理、概念提取、图像的人脸识别等。 [9]

我的演讲是使用 WinFS、WPF(以前称为"Avalon")和Windows 窗体构建以数据为中心的应用程序。我真的很想炫耀什么让我兴奋的Winfs。对我来说,一个关系文件系统,将允许用户统一,组织和探索他们的数据在新的方式真的需要一个丰富的API,开发人员可以创新。WinFS为开发人员提供了一个在众多桌面上可以依赖的单个存储,这一事实真正开启了惊人的可能性。

在我的演示中,我构建了一个简单的WPF应用程序,通过使用以下一些关键概念,展示了如何在WinFS之上构建更丰富的文档查看体验: - 简单的查询定义。我使用公共模式定义查询。 - 可扩展视图。我使用了API的强大组件,它允许开发人员真正利用关系存储的强大功能。 - 强大的联接。我关联了与联系人的文档,并展示了当数据被架构化时,应用程序如何与其他应用程序共享类型。 - 丰富的数据绑定。我展示了将数据从 WinFS绑定到UI是多么容易, 并且真正执行开发人员以前必须做的所有硬管道工作

这样做的主要目标是显示开发人员通过使用WinFS获得的工作效率提升,以及通过使用存储所有类型的数据的中央存储来实现的新方案。我显示的所有代码是真实的。 [10]

数据安全性

即使所有数据都在单个孤岛中,但所有数据也无法平等访问。WinFS提供两种数据保护机制。首先,存在控制对WinFS共享的访问的共享级别安全性。其次,有支持 NT兼容安全描述符的项级安全性。为了访问项目,必须在共享和项之间预配调用方。为了管理这种情况,WinFS将为安全管理提供丰富的API。此外,Windows Vista中还有应用程序的"完整性级别"概念(强制性完整性控制)。可以配置数据以防止低完整性应用访问它。Simon(我们的安全PM)将很快发布有关此的更详细的描述。

需要注意的是,应用程序不应将文件格式复杂性用作主要安全措施。对于银行帐户和信用卡号等重要信息,您可以继续将它们存储在加密且受密码保护的文件中。但是,没有理由此文件不能存储在WinFS中。

应用程序可能有一些数据,他们肯定想锁定。但是,WinFS使应用程序开发人员有机会共享他选择共享的数据。今天,一个货币文件中有大量信息,并不是所有的信息都需要是私有的。例如,Money可以有"付款人"(即您从您收到支票或向其写支票的人)表示为WinFS联系人。

当文件存储在WinFS中时,其元数据将由类型特定的属性处理程序提取。我们的Beta 2工作的一部分是将其与Windows桌面搜索处理程序集成。最终结果是Windows桌面搜索查询将返回WinFS和非WinFS文件。

桌面搜索是真正统一存储的第一步。虽然您可以使用桌面搜索在结果视图中查看不同孤岛的不同类型的数据,但数据本身仍驻留在单独的孤岛中。这意味着很难跨所有数据进行操作。例如,我可以搜索具有"Shell命名空间扩展名"的所有文件,并获取大量电子邮件、文档和其他文件的列表。此时,存在一些操作限制。例如,我不能复制所有数据,并把它放在单个文件夹或USB驱动器中,将其刻录到CD,甚至将其共享出去。桌面搜索是一个伟大的最终用户应用程序,但它不是一个平台。WinFS是一个平台,通过面向统一和可扩展数据类型的托管API进行出色的程序员访问。

NTFS和WinFS的关系

与这个问题有关,有人问,"WinFS驱动器可以转换回NTFS驱动器吗?没有"WinFS驱动器"。由于WinFS构建在NTFS之上并依赖于NTFS,因此无法替换它。一种思考的方法是,WinFS是NTFS顶部的子系统;您可以将WinFS存储与普通Ntfs文件放在同一驱动器上。

WinFS如何简化数据寻找?

就我个人而言,我喜欢从接触的角度来考虑这个问题。现在,我的联系人(朋友、家人、同事等)分布在一些地方。我有联系信息在我的手机,我的家庭电脑,我的主要盒子在工作,我的Outlook,我的Hotmail帐户,我的美国在线IM帐户,我的GMail帐户,在我的办公桌上随机张贴笔记在工作和家里,和那些名片,哎呀, 我甚至有一些打印输出(写在Word里)与我婚礼的所有的客人信息。

在我心目中,我大致知道去哪里获取这些信息:我的手机有最准确的电话号码,我的Hotmail帐户有我所有的大学朋友的信息,等等。

那么,WinFS如何帮助简化这个问题呢?使用WinFS,我可以将所有联系人信息移动到一个中央Store。我的应用程序可以与此信息进行交互,我可以随时随地同步这些信息。显而易见的好处是,我可以可靠地去一个地方获得最新的信息。现在, 我可以很容易地添加任何人,我想为万圣节派对的Evite。无需再键入电子邮件地址或导入所有联系人(输入另一个孤岛)。当我在妈妈生日那天为她点花时,只需点击一下即可填写收件人的信息。 [11]

WinFS数据同步概述

除了作为中央数据存储之外,WinFS还可以成为您的同步中心。我可以在WinFS Store之间同步,还可以将更改与其他平台(如Outlook、PDA和手机)来回同步。现在,我可以在手机上显示我最新的联系信息,在路上进行更改,然后将该信息同步回WinFS。当然,这可实现一些出色的离线体验。当我在度假时工作时,我不必担心回家后手动将数据与桌面计算机同步。

当然,这适用于所有数据;不只是联系人。现在,我所有的日历应用程序将显示我的Evite邀请。我的照片现在与联系人和活动关联,所以我可以很容易地说,"邮寄这些照片给每个人在活动"。当你开始添加电子邮件,RSS源,文档,音乐和一切到这一点,它可以变得相当令人兴奋。 [12]

另请参阅

WinFS数据关系与结构构建方案

果你像我一样,你的电脑上可能有成吨的数字图片。我的照片目前以简单的层次结构进行组织。在"我的照片"中,我有一堆文件夹,它们的名字叫"2004-11感恩节"。这个文件夹中是我所有的照片从那个假期。我相信你已经可以看到这个结构的局限性了。

我最近的挑战,实际上使用我的照片是前几天。我的祖父母要我给他们寄一些我未婚妻和我的照片。如果我能告诉我的电脑,"给我看所有有克里西和我的照片",这难道不是很酷吗?相反,我必须扫描我的文件夹,看看我们都在什么事件,并复制所有的照片与我们俩在其中临时文件夹。然后,我需要通过临时文件夹来选择要发送的。当然,我不记得删除了临时文件夹;所以它正在占用空间。幸好硬盘现在这么便宜。

使用WinFS,我可以将联系人与照片关联,因此我可以很容易地查询与设置联系人相关的所有图片。一个建立在WinFS上的照片应用程序可以显示所有的照片与克里西和我。然后,我可以选择好的电子邮件或打印。如果你一直在玩Beta 1位,你知道用这种行为编写应用程序是多么容易。

此外,我现在可以很容易地检查,看看我已经发送了什么照片,所以我不再发送相同的。如何?告诉电脑"给我看我发给祖父母的照片"。所有这些包含关系和关联已经在我的Store中。

同样,这仅适用于图片。我可以将文档与会议、音乐和联系人关联到聚会邀请。这些关键字不是添加到文件中的关键字,这些是真实项目之间的关联。所有这些组织构造都在等待WinFS应用的利用。

此外,所有这些类型都是可扩展的。因此,对于我的婚礼客人名单,我可以扩展联系人类型,有属性为"发送'保存日期'卡","发送邀请","RSVP收到","客人#","素食餐?这会使事情变得容易得多。 [13] WinFS 使您能够使用关系来查找和显示数据。在PDC视频中,我们展示了一个应用,该应用包含一系列日期,并在地图上显示会议的位置。由于它绘制了在所有会议之间行驶的最佳路线,因此它添加了表示您的联系人和重要客户在地图上位置的图标。现在,当您可视化您的日程安排时,您可以看到谁就近,并简单的与其开始午餐。

让我们来了解WinFS是如何使这一切成为可能的。该应用程序能够查询特定日期范围内的所有约会。它使用会议位置在地图上的适当位置显示每个约会。今天,地图应用程序很难做到这一点,因为您的约会在不同的应用程序,甚至可能多个应用程序。假设您可以以编程方式访问会议,则访问该位置可能很难。您的日历应用可能只是有一个名为"位置"的字段,该字段可以包含任意字符串,并且很难正确分析。使用WinFS,您的所有约会信息都位于单个存储中,具有API,让任何应用程序统一访问数据。

接下来,应用程序使用联系人的地址查找具有高优先级问题的联系人和客户,这些问题位于您要位于的位置附近,并在地图上显示它们。如果选择联系人,应用可以显示此人的一些信息(例如照片和联系信息)。从那里,你可以给他们发送一封邮件,让他们在城里时安排午餐。今天,这很难做到这点。您的联系信息可能位于地图应用程序无法到达的孤岛中。此外,对于具有高优先级问题的客户,您很可能被跟踪在完全不同的应用程序孤岛中。

我们已经讨论过有一个照片应用程序,可以排序和显示照片的基础上的人。除了此功能之外,还很容易使应用能够按位置(图像属性)、事件(与Evite或会议的关联)甚至发送给您的人对照片进行排序。

WinFS是关键,因为它具有显著丰富的数据和由关系引擎提供的新组织结构。我不必担心规模,因为我的存储增长,因为WinFS是建立在企业规模关系引擎。当用户拥有数百万个项目时,他们不必担心自己的系统会陷入困境。

实际上,WinFS支持大量非常有趣的关系探索场景: -"找到我所有的照片和视频,从我的曲棍球比赛。

- "找到我今天要见的人发的所有邮件"

-"找到所有我需要查看的文件,我的老板更新了自我们上次会议。

-"给我看所有以前的万圣节派对照片,我有今年被邀请的人。

-...

当你开始思考使这些场景在今天工作的困难时,关系探索的力量应该变得清晰起来。想想看,现在我能找到东西,而不知道它们存储在哪里! [14] WinFS构建在一个真正的关系存储上,所有应用程序都可以利用该存储。如今,大量流行的应用程序将数据锁定在专有Store中。这包括照片应用程序,如Photoshop专辑,音乐应用程序,如WMP和iTunes,金融应用程序,如加快与 Microsoft Money,电子邮件应用程序,Outlook等等。通过使用WinFS,开发人员可以集中精力构建丰富的应用程序,而不必担心创建存储孤岛。毕竟,WinFS 可以为应用程序提供其所有结构化、半结构化和非结构化数据的位置。

此外,WinFS还将提供同步、通知、规则和备份/恢复等服务。WinFS提供的服务带来零管理和极其可靠的体验。

存储中的所有数据都可以作为CLR对象访问,因此开发人员可以在构建应用时利用他们的所有Visual Studio和.NET知识。开发人员还可以利用我们完整的数据查询引擎,使用我们强大的序列化支持传输数据。与当今与多形式和多个数据位置的繁琐交互,这是一个重大改进。 [15]

参考资料