我正在浏览Win32 API函数以进行文件和目录管理操作。我看到其中一些功能有他们所谓的“交易”对应物。
示例:
CreateDirectory和CreateDirectoryTransacted
RemoveDirectory和RemoveDirectoryTransacted
CreateFile和CreateFileTransacted
CopyFile和CopyFileTransacted
我阅读了这些交易函数的解释,维基百科文章Transactional NTFS和this MSDN Magazine page。但是由于这些页面中的重要术语(对我而言),我并没有清楚地理解这些解释。他们都达成了共识,即这些功能是“原子的”。但据我从“原子”这个词理解,它是一个围绕它旋转电子的原子核......
请您用基本简单的英语句子解释我,这些功能的目的和操作是什么?为什么以及何时更喜欢API函数的交易版本?
答案 0 :(得分:1)
简而言之,只有在流程中没有发生错误的情况下,才能完成交易(无论是文件系统,数据库还是银行)。
使用非事务性文件系统和API,假设您有一个包含以下内容的文件:
AAAA
现在你想要用所有B
填充文件,但是在中间这样做时会断电并且并不是所有数据都被提交到磁盘。现在,当您重新读取文件时(返回电源后),您的状态不一致:
BBAA
还记得FAT和scandisk吗?
现在有了事务,文件系统基本上首先将更改写入磁盘上的不同位置,并且仅在完成时将“文件数据位置指针”inodes更改为数据的新位置,标记为将旧数据再次占用为“可用”。
您不需要事务性NTFS(TxF),因为“标准”NTFS也promises to ensure consistency:
NTFS是一个可恢复的文件系统,它通过使用标准事务日志记录和恢复技术来保证卷的一致性。在系统发生故障的情况下,NTFS运行恢复过程,该过程访问存储在事务日志文件中的信息。 NTFS恢复过程可确保卷恢复到一致状态。事务日志记录只需要很少的开销。
答案 1 :(得分:1)
为什么以及何时更喜欢API功能的交易版本?
我在上面引用的link中提供了几种情景。
其中一个是安装程序应用程序的用例,需要将多个文件复制/安装到不同的位置,然后可能会对注册表执行一些更新。在安装程序运行之前,可以将系统视为一致。安装程序完成所有工作后,软件将完全安装,系统将再次处于一致状态。
但是,如果计算机在安装过程中崩溃,那么确定安装过程的哪些步骤在崩溃之前已成功执行以及哪些步骤尚未成功执行可能并非易事。如果任何原因导致安装失败,那么事务操作可以通过“自动”恢复安装程序运行之前的来自动恢复一致的系统状态。
正如微软所说,开发人员从未采用过多的事务性文件系统操作,这可能表明绝大多数应用程序并不真正需要该功能,或者有更简单的方法来实现期望的结果以特定于应用程序的方式,MS也给出了例子。
此外,“原子”操作的概念存在于软件开发的不同领域,例如并发编程或数据库管理系统。请参阅Wikipedia文章。
答案 2 :(得分:1)
重要
请注意,Microsoft已将整个“ Transactional NTFS” API标记为已弃用,并强烈劝阻其使用。
请参见https://docs.microsoft.com/cs-cz/windows/win32/fileio/deprecation-of-txf(使用事务性NTFS的替代方法)