ある特定のファイルシステム操作(ファイルリネーム、削除、等)は個別に考えた場合にはアトミックであるが、今までトランザクションベースのコンテキスト内で一式のファイルIO操作をサポートするために、総括的なAPI一式を提供するための代替策はほとんど存在していなかった。トランザクションの一部として連続的に実行される必要のあるファイルオペレーション伴うアプリケーション(作成、修正、リネーム、ファイルの削除)は、システム・アプリケーションのクラッシュかもしくは同時進行アクセスのイベント内の不一致な状態になる傾向を減らすため、カスタムビルドソリューションに頻繁に依存する必要があった。
アプリケーション一式はファイルシステム用のより強固なフル機能のトランザクションサポートから利点を得ることができる。
- ”オフィス”アプリケーション(ワードプロセッサ、スプレッドシート、等)-膨大な数の読み取り、書き込み、削除ファイル操作が行われるところ
- インストーラ-クラッシュかもしくはエラーのイベント内でオリジナルのファイルシステムステートにリストアを要する事が可能
- 強力な”SQLライク"の検索能力を必要としない-いくつかのデータがフラットなファイルかもしくはデータベースにストアされていればより速く動作するかもしれない
- ドキュメントとコンテントマネジメントシステム-ファイルIO操作を非常に頻繁に使用する
この分野の進展において最も注目すべき取り組みは下記のとおりである。
MSDN Magazineの記事の中でMicrosoftのTechnicalエバンゲリストであるJason Olson氏は、トランザクションファイル操作をWindows Vistaと次世代のWindows Server('Longhorn')の概念を取り込んだ新たな機能であるTxFの主要機能(source)に関して説明した。Jason氏によるとその主なる目標は下記の通りである。
向上したアプリケーションスタビリティ:
トランザクショナルNTFSは、与えられたアプリケーションのために書かれ、保持される必要のあるエラー処理コードの量を減らすかもしくは削除する事によって、より良いアプリケーションスタビリティを可能にしている。これは究極にアプリケーションの複雑性を減らし、そのテストをし易くするのである・・・トランザクショナルファイルオペレーションなしでは、プロセス中にオペレーティングシステムがクラッシュする可能性を含めて失敗した時用のシナリオに頼るのは不可能に近い。
向上したプラットフォームスタビリティ:
・・・これはマイクロソフトがその独自のテクノロジにおいてTxFを使用している方法によって実現されている。現在Transactional NTFSを使用しているWindows VistaとWindows Server"Longhorn"内の機能には3つ主要なものがある。Windows Update、System RestoreとTask Schedulerである。これらの全ては電源が落ちたことよるシステムリブートのような例外において、ロールバック、コミットを処理するためにトランザクションのスコープ内でファイルをファイルシステムに記述するためTxFを使用している。
増加したイノベーション:
TxFはSQLコール外のトランザクションを使用するために、フレームワークを提供することによってイノベーションを促進している。最終的にトランザクショナルNTFSはデベロッパ達がより強固なコードを作るのを可能にするのと共に、彼らがアプリケーションを書く方法を根本的に変えることができる。あなたのデ ザインにトランザクションを取り込むことによって、起こり得る障害を考慮する必要なしにコードを書くことができるのである。
TxFはKernel Transaction Manager(KTM)の上に成り立っているので、KTMはMicrosoft Distributed Transaction Coordinatorと直接的に作用することができる。Jason氏はデベロッパがXAを使用している他のテクノロジでトランザクション化されたファイルオペレーションをリストアップできることを述べている。SQL操作、WS-Atomic TransactionかもしくはMSMQオペレーションを介したWebサービスコールである。それゆえにファイルシステムがXA Transactionに参加することを可能にする。
TxFに似た概念はVistaのLonghornのTransactional Registryで実装されている。この記事においてパフォーマンスに及ぼされる影響に関しても述べられている。TxFは厳格なpay-to-playモデルを備えている。もしあなたがトランザクション化されたファイルオペレーションを使用していないのなら経費はかからない。また彼は"TxFはコミット用に最適化されている"ことを付け加えた。
ApacheプロジェクトのCommons Transactionは、他の事項の中でもファイルシステムプロバイダ・実装にとらわれない方式でファイルシステムにトランザクショナルアクセスを提供する事を一番の目標としている。これはAPIが悲観的ロックスキーマを使用してファイルシステム上にACIDトランザクションをフィーチャするJavaライ ブラリによって実現されている。またmyjavatricks.com(サイト・英語)のブログには、Common Transactionの概念とJava内でトランザクション方式でベーシックなファイル操作を行う例(source)がいくつか提示されている。
Commons Transactionコンテキストの中心的なコンポーネントは、それがトランザクションを管理、準備、コミットするリソース・ファイル上でトランザクション、ファイル操作(コピー、作成、削除、移動、記述)をコーディネートするファイル操作のトランザクションと、コーディネートを開始するファイルリソースマネジャーである。初期化する際にFileResourceManagerには下記のものが提供される。
- メインデータがコミットの後を追うディレクトリ
- トランザクションが一時的なデータ(ワーキングディレクトリ)を保管しているディレクトリ
- パスがURLエンコードされるべきかどうかを表示するブールフラグ
- FileResourceManagerによって使用されるロガー
スタートアップするにあたって、FileResourceManagerはトランザクションを処理させようと試みる場合において、システムがクラッシュした時かもしくは回復不可能な障害に遭遇した時に、コミットを行うプロセスにそれがない限り未完成のトランザクションをどれでもロールバックしようと試みる。トランザクションが回復されない場合において(例:後転させる事も前転させ ることもできない)、全体的なワーキングディレクトリがファイルリソースマネジャーによって”汚れている”としてマークされていて、またその問題が解消されるまで変更が許されていない。ファイルリソースマネジャーが初期化される際に提供されるロガーは典型的に”汚れている”ステートからのマニュアルでのリカバリを可能にする情報を提供する。
もしもCommons TransactionがファイルシステムをXAコンプライアントリソースに変換しなくても、ファイルシステムトランザクションがアプリケーションに必要 でも、ブログ著者の意見ではライブラリは”多分考えられ得るどんなカスタムメカニズムよりも優れているのである”。
ファイルシステム内のトランザクションがデータベース環境にサポートされるのが可能になるまでの道のりはまだまだ長いが、少なくともいくつかの実装が姿を現し始めていて、それはデベロッパたちにとって未だ障害となっているこの分野に対するより実践的なソリューションを提供する準備が整っているようだ。
原文はこちらです:http://www.infoq.com/news/2008/01/file-systems-transactions