NTFS 使用文件系统事务增强您的应用程序

上传人:ji****72 文档编号:45900338 上传时间:2018-06-20 格式:PDF 页数:7 大小:312.66KB
返回 下载 相关 举报
NTFS 使用文件系统事务增强您的应用程序_第1页
第1页 / 共7页
NTFS 使用文件系统事务增强您的应用程序_第2页
第2页 / 共7页
NTFS 使用文件系统事务增强您的应用程序_第3页
第3页 / 共7页
NTFS 使用文件系统事务增强您的应用程序_第4页
第4页 / 共7页
NTFS 使用文件系统事务增强您的应用程序_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《NTFS 使用文件系统事务增强您的应用程序》由会员分享,可在线阅读,更多相关《NTFS 使用文件系统事务增强您的应用程序(7页珍藏版)》请在金锄头文库上搜索。

1、NTFS 使用文件系统事务增强您的应用程序 Jason Olson下载本文中所用的代码: TxF2007_07.exe (159 KB) 浏览在线代码 http:/ cn/magazine/cc164464.aspx 目录目录 事务性 NTFS 的优点 何时避免使用事务性 NTFS 入门 次级资源管理器 管理 事务处理命令行发生了什么变化? 结束语它是基于 Windows 的应用程序的里程碑,可以帮助您开发比以往更加强大的应用程序。它就是事务性 NTFS,也称为 TxF。 在本文中,我将介绍事务性 NTFS,说明它对开发人员的重要性,以及如何在应用程序中使用这项新技术。 什么是 TxF?从概念

2、上讲,它非常简单,可以用一个逻辑等式表示:事务性 NTFS = 事务 + NTFS。作为 Windows Vista 和代号为“Longhorn”的下一版 Windows Server 中的新增功能,TxF 引入了事务处理文件操作的概念。 当我说事务处理文件操作时,也就是说具有可以直接提供给开发人员的完整 ACID 语义的事务。这意味着现在直接为文件操作启 用了执行完全原子的、一致、独立且持久的操作的能力。多年来数据库开发人员从这些 ACID 功能中受益颇多,文件操作拥有此 能力将使其更加受欢迎。 您可能想了解如果所有这些事务性功能都已内置于 NTFS 中,事务性 NTFS 的性能开销会是多少

3、?事实上,TxF 拥有严格的收 费模式。如果没有使用事务处理文件操作,则没有开销。不过即使您正在使用事务处理文件操作,开销也很少(介于 1 到 2 之间)。对于未绑定 I/O 的应用程序来说,这种性能影响甚至可能不会被注意到。 以下是应注意的性能的另一方面:事务性 NTFS 针对提交进行了优化。在事务中将新页面写入磁盘时,它们将直接就地写入,而 保存以前的页面以供其他读者检索(如有必要)。由于采用此优化措施,当提交事务时,经过更改的页面已位于磁盘中的相应位 置。因此,提交事务的开销微乎其微。事务性 NTFS 的优点 从理论上讲,事务性 NTFS 很好。但是作为开发人员,您为什么应使用 TxF?

4、原因有多种。尤其是,TxF 实现了帮助您开发功 能强大的应用程序的三个目标:改进的应用程序稳定性 改进的平台稳定性 提高的创新性下面我将详细介绍 TxF 如何实现这些目标。 事务性 NTFS 通过减少或消除错误处理代码数实现了更好的应用程序稳定性,这些错误处理代码需要针对给定应用程序进行写入 和维护。这最终会降低应用程序的复杂性,使应用程序更易于测试。例如,您正在开发一个文档管理系统,需要使 SQL 数据源与 磁盘上的文件存储保持一致。在非事务性系统中,确保此一致性可能比较棘手,不那么简单。不使用事务性文件操作,几乎不可 能解决每个可能失败的方案,甚至包括操作系统在该过程中的任何可能的点崩溃。

5、 过去解决此问题的一种方法是将文件的新版本以一个临时文件名存储,将新数据写入 SQL 数据库,然后在提交 SQL 事务时将临 时文件重命名为真正的文件名。但是如果应用程序崩溃,或将数据提交到 SQL 数据库后重命名文件前停电,请考虑将会发生什么 情况。您不仅不会得到一致的数据集,文件系统上还会出现故障数据点,您必须在某一时间点将其清除。通常,最困难之处在于 该过程具体有多少种不同的失败方式。 某些解决方案实现自己的完整两阶段的提交协议,该协议将更改同时提交到数据库和文件系统。尽管此操作使您更加接近实现应 用程序稳定性的目标,但在您自己的应用程序中实现自定义的两阶段提交系统可能非常困难。此操作还

6、需要使用您必须亲自写 入、测试和维护的代码。 如果事务管理被内置到平台中,而不是必须由需要此类型行为的每个开发人员完成,是否会好一些?由于 Windows Vista 和 Windows Server“Longhorn”引入了 TxF,现在这些功能被直接内置到平台中。并且,由于事务性 NTFS 嵌入在系统本身中, 它能够为您的应用程序提供一定级别的集成性,否则很难提供这种级别的集成性。 事务性 NTFS 最出色的一部分是它可以与大量其他事务性技术一起使用。由于 TxF 使用新的内核事务管理器 (KTM) 功能,且 新的 KTM 可直接与 Microsoft 分布式事务处理协调器 (DTC) 一

7、起使用,与作为事务处理协调器的 DTC 一起使用的任何技 术都可以在单个事务中使用事务处理文件操作。这意味着现在您可以在同一事务中将事务处理文件操作登记为 SQL 操作,通过 WS- AtomicTransaction 进行 Web 服务调用,通过 OleTransactionProtocol 进行 Windows Communication Foundation 服务调用,甚至进行事务处理 MSMQ 操作。由于 DTC 也可与 XA 事务一起使用,您甚至可以直接将事务处理文2011 Microsoft Corporation. All rights reserved.本文讨论:内核事务管理器

8、 分布式事务处理协调器 在本机代码中使用事务性 NTFS 在托管代码中使用事务性 NTFS本文使用了以下技术: Windows Vista、.NET Framework页码,1/7NTFS: 使用文件系统事务增强您的应用程序2011- 10- 14http:/ cn/magazine/cc163388(printer).aspx件操作与使用 XA 事务的其他技术一起登记。简而言之,如果 DTC 可与其他技术一起使用,您就可以将事务处理文件操作整合 到该技术中。 使用文档管理示例,如何通过 TxF 更轻松地确保文档管理应用程序中的一致性?此时,DTC 就派上用场了。要完全确保 SQL 数据库和文

9、件存储之间的一致性,您可以启动一个事务,在该同一事务中执行 SQL 语句和文件操作,然后根据结果提交或回滚到 完成的事务。如果 SQL 调用失败,您的文件将永不被写入。如果文件系统调用失败,则回滚 SQL。当这些操作在事务中登记 后,所有内容都将保持一致,且平台将自动处理所有这些内容。 在我自己的应用程序中使用此方法时,我不再担心如何处理和解决可能发生的任何异常了。我只是将两种操作整合在同一事务 中,从而保证如果引发任何异常,平台将回滚到相应操作。代码更少,功能更强大,太棒了! 还有两个目标。对于平台稳定性,它是 Microsoft 通过将 TxF 用于其自身的某些方法实现的。现在,Windo

10、ws Vista 和 Windows Server“Longhorn”中有三种核心功能使用事务性 NTFS:Windows Update、系统还原和任务计划程序。在事务范 围内所有这些功能都使用 TxF 将文件写入文件系统,以便在出现异常(如由于断电引起系统重启)的情况下处理回滚/提交。如 果您在 Windows Update 过程中遇到过断电情况,您应该知道这可能会引起系统故障并需要全新安装。但是由于 Windows Update 使用了 TxF,如果您的 Windows Vista 系统发生这种情况,系统重启时回滚该事务即可恢复计算机。通过内部采用 TxF,Microsoft 帮助提高了自

11、己操作系统的稳定性。 最后,TxF 通过为在 SQL 调用之外使用事务提供框架来推动创新。总之,事务性 NTFS 可以从根本上改变开发人员编写应用程 序的方式,允许他们构建更强大的代码。通过将事务整合到您的设计中,您可以编写代码,而不必解决可能发生的每个单独的失 败。操作系统会注意这些普遍的细节!何时避免使用事务性 NTFS 尽管 TxF 有很多优点,但是在某些情况下,您应考虑不使用 TxF。下列是考虑避免使用传统数据库事务处理系统时讨论的一些 情况。 如果您的系统上具有长时间运行的事务,则不应使用 TxF。不过,“长时间运行”的定义是相对的。长时间运行的事务是指在同 一日志中活动时间比其他许

12、多事务长的事务。如果有成千上万个事务发生并持续了很短的时间,则“长时间”可能指几秒。而另 一方面,如果系统中很少发生事务,则一两天可能也不算是“长时间”。 如果要对同一文件使用多个编写器,您也应慎用 TxF。事务处理文件操作一次仅允许使用一个编写器(甚至是共享的编写器), 这意味着当文件被一个编写器打开时,不允许第二个编写器打开它,除非第二个编写器在同一事务中。因此,TxF 可以导致对单 个文件使用多个编写器的系统出现争用的情况。 最后,您要小心自动启动的服务和混合的事务资源。如果该服务使用事务性 NTFS 和 SQL,则它要访问的文件在完成恢复前将 保持锁定状态(因为您的服务直接依赖于 DT

13、C 和 SQL,这些服务需要先启动,所以在 DTC 和 SQL 先完成恢复前,您可能无 法完整地恢复文件)。入门 现在,让我们看看如何使用 TxF。如果您非常熟悉现有文件 I/O Win32 API,则事务性 NTFS API 不难理解。新的事务性 NTFS API 除了在末尾添加了一组特定于事务的参数外,与它们的非事务处理对应项没有不同。图图 1 给出了 Win32 文件 API 及其事务处理对应项的一些示例。完整列表要长得多,几乎 Win32 中的每个文件 API 都有一个对应的事务处理版本。Figu re 1 W in 3 2 A P I 及其事务处理对应项及其事务处理对应项从应用程序角

14、度来看,当开发识别 TxF 的应用程序时,可以使用三种主要的手段。您可以将新的 KTM 直接用作事务处理协调 器。这将允许您开发在事务中仅使用 TxF 文件操作的应用程序。 第二种方法是将 DTC 用作事务处理协调器。使用此方法时,您需要通过 DTC 获取内核级事务对象的句柄,然后可将其传递到事 务处理 API 中。 第三种方法实际上是第二种方法的扩展,即使用托管代码中的 System.Transactions 来利用 DTC(如果只有一种持久登记, 则仅使用轻型事务管理器)。我马上就会讨论此方法面临的挑战,以及它对托管开发人员的真正意义。 现在,我将详细介绍这三种方法。图图 2 说明了在 W

15、indows Vista 和 Windows Server“Longhorn”中事务平台的所有主要移 动部分。非事务处理非事务处理 A P I事务处理事务处理 A P ICreateFileCreateFileTransactedCopyFileExCopyFileTransactedMoveFileWithProgressMoveFileTransactedDeleteFileDeleteFileTransactedCreateHardLinkCreateHardLinkTransactedCreateSymbolicLinkCreateSymbolicLinkTransactedCreat

16、eDirectoryExCreateDirectoryTransactedRemoveDirectoryRemoveDirectoryTransacted页码,2/7NTFS: 使用文件系统事务增强您的应用程序2011- 10- 14http:/ cn/magazine/cc163388(printer).aspx图 2 事务平台事务平台 (单击该图像获得较大视图) 在 API 级别,可通过三个主要接口进入 TxF。第一种方法是通过新的 ktmw32.h 头文件直接进入 KTM。在最基础的级别,这 包含对于 KTM 的事务处理协调器 Win32 调用:CreateTransaction、CommitTransaction 和 RollbackTransaction。在此 方法中,如果只在单个事务中执行事务处理文件操作,则直接使用这些调用并让 KTM 自己进行事务协调(请参见图图 3)。Figu re 3

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号