公告:2024年4月15日起本站用户注册、新用户的前10个编辑需要审核,如果您的编辑没有立即显示,请等待管理员审核完毕。

WinFS,虚拟文件夹与库:WinFS数据同步专题

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

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

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

文章结构系MacAdmin整理调整

WinFS同步API

WinFS同步API。API集的目标是提供对WinFS为开发人员构建同步解决方案提供的所有服务的访问。但是,在我们深入探讨这一点之前,让我们先谈谈同步究竟是什么。

当大多数人想要将数据输入WinFS时,最简单的想法就是编写导入器。也就是说,他们计划只编写一个简单的应用程序来从某些应用程序存储中提取数据,然后使用WinFS API创建WinFS实体来表示其数据。这是一个单路进口商。

所以,这看起来很棒,对吧?您已经获得数据,数据将移入WinFS。假设您不会再使用非WinFS应用程序来更新数据,这工作得很好。但是,如果要更新非WinFS应用程序中的数据,会发生什么?让我们更具体一点,假设我们在应用程序存储中有一个联系人,并且我们已经将其导入WinFS。然后,假设我们将继续前进,并继续使用非WinFS应用程序来更新联系人。

所以这工作正常?右?我们定期重新运行导入程序,并更新应用程序存储的WinFS联系人。

而且,这将工作。它之所以有效,是因为我们从来没有在两个位置之一更新数据。这意味着我们每次都可以覆盖WinFS中的数据。但是,WinFS是一个共享数据存储-该联系人以众所周知的架构格式提供。用户可以选择使其可供其他应用程序使用。因此,其他人可能会更新它。但是,如果我们运行我们的简单导入程序,我们将失去数据。我们如何解决?

答案在于检测(以及以后解决)此冲突。但更进一步,我们希望尝试合并在一起的变化,发生在不同的Store。这意味着我们需要能够找出每个Store上更改了哪些更改,以便我们可以尝试将更改应用于其他Store中的相应项目。[1]

所以,让我们再次考虑我们的联系。现在,让我们更具体地谈谈我们正在改变什么。

假设我们做了一些初始同步,以确保我们在两个Store都有我们的联系人。(我们可以稍后讨论这到底意味着什么,但现在我们可以认为它就像运行我们的进口商。

让我们想象一下,我们同步后,我们进行一些更新:

在应用程序存储中,我们将更新: -家庭地址 -电话

在WinFS中,我们将更新: -家庭地址 -单元格

所以,现在想象一下,我们要让我们的两家Store重新同步。那么,我们如何做到这一点呢?我们知道我们以前是同步的,所以我们需要弄清楚每个Store有什么变化,然后将这些更改应用到其他Store。我们可以分别调用这些进程更改枚举和更改应用程序,并且我们希望在两个方向上执行它们。(事实上,WinFS会努力找出我们的变化,并确保给WinFS带来的远程更改以后不会回显给我们。

考虑到我们的示例,我们有一些简单明了的更改 - 电话号码在一个Store上都更改了,但另一家Store没有更改。我们称之为非冲突更改。对于这些非冲突更改,我们可以简单地将它们应用于其他存储。困难来自家庭地址——我们在两家Store都进行了更改——所谓的冲突更改。我们已经检测到冲突,我们需要通过提示用户或更可能根据某些策略(例如,保持最新更改)来解决它。然后,我们可以让我们的两个Store重新同步。

WinFS同步从根本上说是提供在存储中只执行这些操作的服务:更改枚举、更改应用程序、冲突检测、通过延迟手动解决或通过自动解决解决冲突,以及其他事情。我们还对具有任意拓扑的许多存储的情况进行概括这些服务,并为常见情况(如同步文件或同步多个WinFS存储)提供专用解决方案。在即将发布的帖子中,我将讨论WinFS同步提供的服务,以及如何使用这些服务来解决有趣的数据移动问题。我们还将讨论一些更有趣的方案,这些场景涉及多个具有有趣拓扑的同步存储(例如对等)方案。

除了提供一组与非WinFS存储同步的服务(Neil所述)中,我们还希望允许开发人员构建对等应用程序。因此,作为WinFS Sync平台的一部分,我们提供的服务将允许应用程序在多个WinFS存储之间同步其数据,而无需应用程序开发人员设计和编码对等应用程序所需的复杂同步算法。

Microsoft Rave的同步应用

使用WinFS Sync构建的对等应用程序的一个很好的示例是Microsoft Rave,这是WinFS Beta 1 SDK中包含的示例应用程序。Rave允许用户之间共享WinFS数据,而无需服务器-每个用户可以直接将计算机上的文件夹与其他用户的对等文件夹同步。Rave的开发人员在上一篇文章中讨论了他生成此应用程序的经验。

让我们从WinFS到WinFS同步的最简单使用开始,同步两个WinFS存储。

那么,启动同步时会发生什么?WinFS同步将执行以下操作:

• 确定自上次同步以来对每个存储区所做的更改(更改枚举) • 将这些更改传达给其他存储并更新其他存储(更改应用程序) • 应用更改时,确定是否有任何冲突数据 – 自上次同步(冲突检测)以来,两个存储区上相同的数据已更改 • 记录冲突数据以进行以后解决,或者立即解决(冲突解决)。

WinFS存储将包含许多不同类型的数据,如文件、自定义项类型、项目之间的链接等。WinFS同步将同步存储在WinFS中的所有数据;不需要自定义代码,例如,即使定义了新的项类型。

两个存储之间的同步很有用;然而,更有趣的场景涉及多个Store。对于多个Store,可以配置存储以进行通信的方式不同 — 同步拓扑。

例如,Microsoft Rave示例应用程序允许多个用户进行同步,每个用户能够在完整网格拓扑中与所有其他用户同步。例如,另一个应用程序可能需要拓扑,所有更改都通过中央"集线器"进行通信。我想在这里强调的是,WinFS Sync非常灵活,旨在满足任何拓扑需求;不需要有"主"节点,可以构建真正的对等应用程序。

我已经介绍了WinFS Sync是如何构建来处理对等方案和不同拓扑的,但我们如何处理同步应用程序需要在许多不同的网络配置中运行这一事实?以下是对等同步应用程序的一些可能方案:

  • 家庭工作组网络上有多台计算机;用户可以在计算机之间同步其数据,以便可以在家庭中的任何计算机上访问和更新数据。
  • 用户是公司网络上的域的成员,可以配置文件夹以与其他受邀用户共享和协作。
  • 家庭成员位于该国不同地区或不同国家;他们可以通过Internet同步计算机,与家人的其他成员共享照片。

WinFS Sync不知道网络配置或可用于通信更改的传输。应用程序开发人员必须提供同步协议将运行的传输。我们为传输定义了一个接口,同步应用程序必须向WinFS Sync提供该接口的实现。传输的开发人员不必关注复杂的同步逻辑;他们实现简单的方法,如读信息和写入消息和WinFS同步做其余。

仔细查看了我们的Beta 1版本的人可能会感到困惑,因为我们提供了一个名为"Store同步器"的设施,该工具在WinFS Store之间同步数据,并包含适合本地网络的传输。对于Beta 2,我们决定专注于提供对等同步平台,并且不会提供任何特定的传输实现。因此,我们修改了存储同步器,因此它需要传输实现。在Beta 2 SDK中,我们当然会提供传输的示例代码、有关如何构建传输的指导以及存储同步器类的参考材料。[2]

参考资料