トランザクション NTFS の使用の代替手段

概要

Microsoft では、将来のバージョンの Windows では利用できない可能性がある API プラットフォームを採用するのではなく、開発者が説明した代替手段を利用して調査することを強くお勧めします (場合によっては、他の代替手段を調査します)。

はじめに

TxF は、アトミック ファイル トランザクションを Windows に導入する手段として、Windows Vista で導入されました。 これにより、Windows 開発者は、1 つのファイルを含むトランザクション、複数のファイルを含むトランザクション、および複数のソース (レジストリ (TxR 経由)、データベース (SQL など) にまたがるトランザクションでのファイル操作に対するトランザクションアトミック性を持つことができます。 TxF は強力な API セットですが、Windows Vista の主な原因は複雑さと、開発者がアプリケーション開発の一部として考慮する必要があるさまざまな微妙な違いにより、この API プラットフォームに対する開発者の関心が非常に限られています。 その結果、Microsoft は、より大多数のお客様により多くの価値を持つ他の機能と API に対する開発とメンテナンスの取り組みに重点を置くために、将来のバージョンの Windows で TxF API を非推奨にすることを検討しています。 次のセクションでは、いくつかの種類のアプリケーション シナリオで TxF と同様の結果を得るための代替方法の例について説明します。

シナリオ別 TxF の代替手段

上記の制限により、開発者は TxF の代替手段を調査して、TxF で満たされないアプリケーション シナリオをカバーする必要があります。 ここでは、開発者が検討する TxF の一般的な使用に代わる推奨される代替手段をいくつか紹介します。 このリストは完全でも完全でもありません。

"ドキュメントに似た" データを使用して 1 つのファイルを更新するアプリケーション

"ドキュメントに似た" データを扱う多くのアプリケーションでは、ドキュメント全体をメモリに読み込み、操作し、書き戻して変更を保存する傾向があります。 ここで必要な原子性は、一貫性のない状態ではファイルが破損するため、変更が完全に適用されるか、まったく適用されないことです。 一般的な方法は、ドキュメントを新しいファイルに書き込み、元のファイルを新しいファイルに置き換える方法です。 これを行う方法の 1 つは、 ReplaceFile API です。

複数のファイルやレジストリ ハイブの更新を実行するアプリケーション

一連のファイルとレジストリの更新をアトミックに実行する必要があるアプリケーションは多数あります。 このシナリオは、Windows インストーラーなどのインストーラー アプリケーションによって最も一般的に実現されます。 Windows インストーラーの詳細については、「 Windows インストーラー」を参照してください。

構造化データのセットを管理するアプリケーション

多くのアプリケーションでは、データを格納する手段として、さまざまな型の独自のデータ構造のセットを管理しています。 これらのアプリケーションの重要な課題は、更新操作中に障害が発生した場合に内部ポインター/参照の整合性を維持するプロセスです。 このメカニズムの作成は実際には "ハードな問題" であるため、ほとんどのアプリケーションは真のデータベース サーバーに依存してデータセットを管理します。

構造化データの管理に役立つ 2 つの提案は次のとおりです。

  • Microsoft は、アプリケーションがトランザクションデータの更新および取得操作を実行できるようにするために、Windows で Extensible Storage Engine (ESE) 受信トレイを提供しています。 拡張可能記憶域エンジン (ESE) の詳細については、「」を参照してください https://msdn.microsoft.com/library/gg269259.aspx
  • より強力で堅牢でスケーラブルなデータベース プロバイダーを必要とするアプリケーションの場合は、Microsoft SQL Server で使用できる Filestream 機能の使用を検討することをお勧めします。 SQL Filestream の詳細については、 を参照してください https://technet.microsoft.com/library/bb933993.aspx

ローカル NTFS ボリューム上のファイルと外部 SQL データベースのテーブルを含むトランザクションを含むアプリケーション

大規模なデータセットのニーズを持つか、外部データベースとローカル ストレージを含む操作でトランザクションアトミック性を持つ必要があるアプリケーションのクラスがあります。 このシナリオでは、開発者は SQL Filestream を使用してトランザクション ファイル操作を実行することを強くお勧めします。 SQL Filestream の詳細については、 を参照してください https://technet.microsoft.com/library/bb933993.aspx

TxF は複雑で微妙な API のセットであり、サードパーティアプリケーションでは一般的に使用されません。 これらの API が将来のバージョンの Windows で使用できない可能性があり、TxF が開発されたシナリオの多くを実現するためのより簡単な代替手段があるという事実により、Microsoft は開発者に、アプリケーションで TxF への依存関係を作成するのではなく、これらの代替手段を調査することを強くお勧めします。