使用事务 NTFS 的替代方法

摘要

Microsoft 强烈建议开发人员利用 (讨论的替代方法进行调查,或者在某些情况下,调查其他替代方法) ,而不是采用可能在未来版本的 Windows 中不可用的 API 平台。

简介

TxF 是随 Windows Vista 一起引入的,用于将原子文件事务引入 Windows。 它允许 Windows 开发人员在具有单个文件的事务、涉及多个文件的事务以及跨多个源的事务(例如通过 TxR) 的注册表 (和数据库 ((如 SQL) )中对文件操作具有事务原子性。 虽然 TxF 是一组功能强大的 API,但自 Windows Vista 以来,开发人员对此 API 平台的兴趣非常有限,这主要是由于开发人员在应用程序开发过程中需要考虑的复杂性和各种细微差别。 因此,Microsoft 正在考虑在未来版本的 Windows 中弃用 TxF API,以将开发和维护工作集中在对大多数客户具有更大价值的其他功能和 API 上。 下一部分介绍用于在多种类型的应用程序方案中实现与 TxF 类似的结果的示例替代方法。

TxF 的替代方案(按方案)

根据上述限制,开发人员应调查 TxF 的替代方案,以涵盖 TxF 未满足的应用程序方案。 此处讨论了一些建议的 TxF 常见用法的替代方法,供开发人员考虑。 请注意,此列表既不详尽也不完整。

使用“类似文档”数据更新单个文件的应用程序

许多处理“类似文档”数据的应用程序倾向于将整个文档加载到内存中,对其执行操作,然后写回以保存更改。 此处所需的原子性是,更改要么完全应用,要么根本不应用,因为不一致状态会导致文件损坏。 一种常见方法是将文档写入新文件,然后将原始文件替换为新文件。 执行此操作的一种方法是使用 ReplaceFile API。

对多个文件和/或注册表配置单元执行更新的应用程序

有许多应用程序需要以原子方式对一组文件和注册表执行更新。 此方案通常通过安装程序应用程序(如 Windows Installer)来实现。 有关 Windows Installer 的详细信息,请参阅 Windows Installer

管理一组结构化数据的应用程序

许多应用程序管理一组不同类型的专有数据结构,作为存储数据的方法。 对于这些应用程序来说,一个重大挑战是在更新操作期间发生故障时维护内部指针/引用的完整性的过程。 为此创建机制确实是一个“难题”,因此大多数应用程序将依赖于真正的数据库服务器来管理其数据集。

帮助管理结构化数据的两个建议是:

  • Microsoft 在 Windows 中提供可扩展存储引擎 (ESE) 收件箱,使应用程序能够执行事务处理的数据更新和检索操作。 有关 Extensible Storage Engine (ESE) 的详细信息,请参阅 https://msdn.microsoft.com/library/gg269259.aspx
  • 对于需要功能更强大、更可靠且可缩放的数据库提供程序的应用程序,建议客户考虑使用 Microsoft SQL Server 提供的 Filestream 功能。 有关 SQL 文件流的详细信息,请参阅 https://technet.microsoft.com/library/bb933993.aspx

具有涉及本地 NTFS 卷上的文件和外部 SQL 数据库中表的事务的应用程序

有些类的应用程序要么有较大的数据集需求,要么需要在涉及外部数据库和本地存储的操作中具有事务原子性。 对于此方案,强烈建议开发人员考虑使用 SQL 文件流来执行事务性文件操作。 有关 SQL 文件流的详细信息,请参阅 https://technet.microsoft.com/library/bb933993.aspx

TxF 是一组复杂而微妙的 API,第三方应用程序不常使用。 由于这些 API 可能在将来的 Windows 版本中不可用,并且有更简单的替代方法可以实现 TxF 所针对的许多方案,Microsoft 强烈建议开发人员调查这些替代方法,而不是在其应用程序中创建对 TxF 的依赖关系。