(57)【要約】  ファイル・システム・オペレーションのための共有モデルが、クエリ言語ステートメントのトランザクション／ロッキング・モデルと統合され、ストレージ・プラットフォームにおけるロッキングとアイソレーションのための全体的なフレームワークを提供する。さらに、ファイル・システム・オペレーションについてトランザクションのサポートが提供され、その結果、ファイル・システム・オペレーションをトランザクションのコンテキストで実行することができる。したがって、単一のトランザクションが、単一のファイル・システム・ステートメント、単一のクエリ言語ステートメント、複数のファイル・システム・ステートメント、複数のクエリ言語ステートメント、およびファイル・システム・ステートメントとクエリ言語ステートメントの組合せを含むことができる。さらに、非トランザクション型ファイル・システム・ステートメントについてサポートが提供され、その結果、ファイル・システム・ステートメントは、必ずしもトランザクションのコンテキストで実行されることを必要としない。
2007528555.tif 000002
【特許請求の範囲】
【請求項１】
アイテムを開くための呼出しと、前記アイテムから読み取るための呼出しと前記アイテムに書き込むための呼出しのうちの１つと、前記アイテムを閉じるための呼出しとを含むファイル・システム・ステートメントをトランザクションのコンテキストで実行するための方法であって、
前記ファイル・システム・ステートメントを前記トランザクションに関連付けること、および、
前記アイテムに対応するデータ・テーブル行に関して読取りロックおよび書込みロックのうち１つを獲得することによって、前記トランザクションを開始すること
を備えることを特徴とする方法。
【請求項２】
前記アイテムに対応するユーザ定義タイプを含むデータ・テーブル行に関して読取りロックおよび書込みロックのうち１つを獲得することによって、前記トランザクションを開始することを備えることを特徴とする請求項１に記載の方法。
【請求項３】
第２のステートメントを前記トランザクションに関連付けることをさらに備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記第２のステートメントを前記トランザクションに関連付けることを備え、前記第２のステートメントは、別のファイル・システム・ステートメントであることを特徴とする請求項３に記載の方法。
【請求項５】
前記第２のステートメントを前記トランザクションに関連付けることを含み、前記第２のステートメントは、トランザクションのクエリ言語ステートメントであることを特徴とする請求項３に記載の方法。
【請求項６】
前記トランザクションを開始することは、
前記トランザクションを開始するとコンフリクトが生じるかどうか判定すること、
生じる場合には、コンフリクト解決スキームに従って前記コンフリクトを解決すること、および、
生じない場合には、前記トランザクションを開始すること
を備えることを特徴とする請求項１に記載の方法。
【請求項７】
前記行に関して前記読取りロックを獲得することは、前記行の読取りコミットされたビューを獲得することを備えることを特徴とする請求項１に記載の方法。
【請求項８】
前記行に関して前記書込みロックを獲得することは、前記トランザクションが処理されている間、別のトランザクションが前記行にアクセスするのを妨げることになる書込みロックを獲得することを備えることを特徴とする請求項１に記載の方法。
【請求項９】
前記行に関して前記書込みロックを獲得することは、前記トランザクションが処理されている間、非ファイル・システム・ステートメントが前記行にアクセスするのを妨げることになる書込みロックを獲得することを備えることを特徴とする請求項１に記載の方法。
【請求項１０】
前記行に関して前記書込みロックを獲得することは、前記トランザクション内の別のステートメントが前記行に書き込むのを妨げることになる書込みロックを獲得することを備えることを特徴とする請求項１に記載の方法。
【請求項１１】
前記行に関して前記書込みロックを獲得することは、前記トランザクション内の別のステートメントが前記行から読み取ることを可能にすることになる書込みロックを獲得することを含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記行のファイルストリーム・フィールドに関して読取りロックおよび書込みロックのうち１つを獲得することによって、前記トランザクションを開始することをさらに備えることを特徴とする請求項１に記載の方法。
【請求項１３】
請求項１に記載の諸ステップを実行するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ可読媒体。
【請求項１４】
アイテムを開くための呼出しと、前記アイテムから読み取るための呼出しと、前記アイテムを閉じるための呼出しとを含むファイル・システム・ステートメントのロッキングとアイソレーションのための方法であって、
前記アイテムに対応するデータ・テーブルの行について読取りアクセスが使用可能であるかどうか判定すること、
使用可能でない場合には、前記オープンを見捨てること、および、
使用可能である場合には、前記行に関して読取りロックを獲得すること
を備えることを特徴とする方法。
【請求項１５】
前記アイテムに対応するユーザ定義タイプを含むデータ・テーブルの行について読取りアクセスが使用可能であるかどうか判定することをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項１６】
前記行に関して読取りロックを獲得することは、前記行の読取りコミットされたビューを獲得することを備えることを特徴とする請求項１４に記載の方法。
【請求項１７】
前記行のファイルストリーム・フィールドに関して読取りロックを獲得することをさらに備えることを特徴とする請求項１４に記載の方法。
【請求項１８】
請求項１４に記載の諸ステップを実行するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ可読媒体。
【請求項１９】
アイテムを開くための呼出しと、前記アイテムに書き込むための呼出しと、前記アイテムを閉じるための呼出しとを含むファイル・システム・ステートメントのロッキングとアイソレーションのための方法であって、
前記アイテムに対応するデータ・テーブルの行について書込みアクセスが使用可能であるかどうか判定すること、
使用可能でない場合には、前記オープンを見捨てること、および、
使用可能である場合には、前記行に関して書込みロックを獲得すること
を備えることを特徴とする方法。
【請求項２０】
前記アイテムに対応するユーザ定義タイプを含むデータ・テーブルの行について書込みアクセスが使用可能であるかどうか判定することをさらに備えることを特徴とする請求項１９に記載の方法。
【請求項２１】
前記行に関して前記書込みロックを獲得することは、前記ステートメントが処理されている間、別のステートメントが前記行にアクセスするのを妨げることになる書込みロックを獲得することを備えることを特徴とする請求項１９に記載の方法。
【請求項２２】
前記行のファイルストリーム・フィールドに関して書込みロックを獲得することによって、前記トランザクションを開始することをさらに備えることを特徴とする請求項１９に記載の方法。
【請求項２３】
請求項１９に記載の諸ステップを実行するためのコンピュータ実行可能命令を有することを特徴とするコンピュータ可読媒体。
【請求項２４】
アイテムを開くための呼出しと、前記アイテムから読み取るための呼出し、および前記アイテムに書き込むための呼出しのうちの１つと、前記アイテムを閉じるための呼出しとを含むファイル・システム・ステートメントをトランザクションのコンテキストで実行するためのシステムであって、
前記アイテムに対応する行を有するデータ・テーブルを備えるリレーショナル・データ・エンジンと、
前記リレーショナル・データ・エンジン上で構築されるストレージ・プラットフォームであって、前記ファイル・システム・ステートメントを前記トランザクションに関連付けるための手段と、前記行に関して読取りロックおよび書込みロックのうち１つを獲得することによって前記トランザクションを開始するための手段とを備えるストレージ・プラットフォームと
を備えることを特徴とするシステム。
【請求項２５】
前記アイテムに対応する前記行は、前記アイテムに対応するユーザ定義タイプを含むことを特徴とする請求項２４に記載のシステム。
【請求項２６】
前記ストレージ・プラットフォームは、第２のステートメントを前記トランザクションに関連付けるための手段をさらに備えることを特徴とする請求項２４に記載のシステム。
【請求項２７】
前記第２のステートメントは、別のファイル・システム・ステートメントであることを特徴とする請求項２６に記載のシステム。
【請求項２８】
前記第２のステートメントは、トランザクションのクエリ言語ステートメントであることを特徴とする請求項２６に記載のシステム。
【請求項２９】
前記トランザクションを開始するための前記手段は、
前記トランザクションを開始するとコンフリクトが生じるかどうか判定するステップと、
生じる場合には、コンフリクト解決スキームに従って前記コンフリクトを解決するステップと、
生じない場合には、前記トランザクションを開始するステップと
を実行するための手段を備える
ことを特徴とする請求項２４に記載のシステム。
【請求項３０】
前記読取りロックは、前記行の読取りコミットされたビューを提供することを特徴とする請求項２４に記載のシステム。
【請求項３１】
前記書込みロックは、前記トランザクションが処理されている間、別のトランザクションが前記行にアクセスするのを妨げることを特徴とする請求項２４に記載のシステム。
【請求項３２】
前記書込みロックは、前記トランザクションが処理されている間、非トランザクション型ファイル・システム・ステートメントが前記行にアクセスするのを妨げることを特徴とする請求項２４に記載のシステム。
【請求項３３】
前記書込みロックは、前記トランザクション内の別のステートメントが前記行に書き込むのを妨げることを特徴とする請求項２４に記載のシステム。
【請求項３４】
前記書込みロックは、前記トランザクション内の別のステートメントが前記行から読み取ることを可能にすることを特徴とする請求項２４に記載のシステム。
【請求項３５】
前記行は、ファイルストリーム・フィールドを備えることを特徴とする請求項２４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ取出しおよび操作の分野に関し、より詳細には、ストレージ・プラットフォームにおけるロッキングとアイソレーションに関する。
【背景技術】
【０００２】
本願は、２００４年３月１０日に出願された米国特許出願第１０／７９７，２３８号明細書の利益を主張し、その開示は、その全体を参照により本明細書に組み込む。
【０００３】
コンピューティング分野における最近の進展は、コンピュータ・オペレーティング・システムを、リレーショナル・エンジン上で構築されるストレージ・プラットフォームで使用することができることである。そのようなストレージ・プラットフォームは、たとえば、ワシントン州レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．からのＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）  ＦＩＬＥ  ＳＹＳＴＥＭ（商標）（ＷｉｎＦＳ）とすることができる。ＷｉｎＦＳは、前述のＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．からのＳＱＬ  ＳＥＲＶＥＲ（商標）上で構築される。
【０００４】
ＷｉｎＦＳプラットフォームのデータ・モデルは、アイテム、アイテム拡張（item extensions）、および関係（relationship）で表して、データ・ストレージの諸単位を定義する。アイテムは、ストレージ情報の基本単位である。データ・モデルは、アイテムおよびアイテム拡張を宣言するための、また、アイテム間の関係を確立するための機構を提供する。アイテムは、コピー、削除、移動、オープンなどの各オペレーションを使用して記憶し、取り出すことができる単位である。アイテムは、連絡先（Contact）、人々（People）、サービス（Service）、場所（Location）、（あらゆる様々な種類の）ドキュメント（Document）などの、実世界の容易に理解可能な単位を表すことが意図されている。アイテム拡張は、既存のアイテムの定義を拡張するための方法であり、関係は、アイテム間の定義されたリンクである。
【０００５】
ＷｉｎＦＳでは、情報を記憶するために様々なアイテムタイプが定義される。たとえば、アイテムタイプは、Ｃｏｎｔａｃｔ、Ｐｅｏｐｌｅ、Ｌｏｃａｔｉｏｎ、Ｄｏｃｕｍｅｎｔなどについて定義される。各アイテムタイプは、所与のアイテムのプロパティや特性を定義するスキーマによって説明される。たとえば、「Ｌｏｃａｔｉｏｎ」アイテム（Ｉｔｅｍ）は、ＥＡｄｄｒｅｓｓｅｓ、ＭｅｔｒｏｐｏｌｉｔａｎＲｅｇｉｏｎ、Ｎｅｉｇｈｂｏｒｈｏｏｄ、ＰｏｓｔａｌＡｄｄｒｅｓｓｅｓなど、プロパティを有するものとして定義することができる。所与のアイテムタイプについてスキーマが定義されると、対応するユーザ定義タイプ（ＵＤＴ）が、データ・ストア内で作成される。データ・ストア内に記憶されたＩｔｅｍタイプの各インスタンスは、それに関連付けられた一意の識別子（たとえば、Ｉｔｅｍ＿ＩＤ）を有する。すなわち、一実施形態では、各アイテム識別子が、グローバルに一意の識別子（ＧＵＩＤ）である。ＳＱＬ  ＳＥＲＶＥＲ内のＵＤＴの任意のインスタンスの場合と同様に、ＷｉｎＦＳアイテムのインスタンスは、最終的に、別個のＵＤＴカラム内でデータベース・ストアのテーブル内に格納される。
【０００６】
ＷｉｎＦＳの構成ブロックの１つは、それがＳＱＬサーバからのファイルストリーム（filestream）技術を組み込むことである。ファイルストリームは、リレーショナル・データ・テーブルのカラムであり、そのカラムの各セルごとのデータが、そのテーブルの他のカラムを格納するファイルと別個のファイル内に格納される。ＷｉｎＦＳの重要な特徴は、ＷｉｎＦＳアイテムの各フィールドを、ファイルストリーム・フィールドとして指定することができることである。ファイルストリーム技術は、大量のデータを有するフィールドを含むアイテムについて特に有利である。たとえば、Ｐｅｒｓｏｎアイテムは、対応する人のデジタル写真を含む「写真」フィールドを有することができる。写真フィールドは、データ・テーブル内での格納に適していない大量のデータを含むことができる。
【０００７】
ＷｉｎＦＳの他の重要な特徴は、ファイルストリーム・フィールドへの「帯域外（out of band）」アクセスを可能にし、それにより、データベース・ストアの基礎となるクエリ言語を使用することなしに、従来のファイル・システム呼出し（open、 read/write、 close など）を介してファイルストリーム・フィールドにアクセスすることができることである。従来のファイル・システム呼出しをサブミットするためのファイル・システム・アプリケーション・プログラム・インターフェース（ＡＰＩ）は、たとえば、前述のＭｉｃｒｏｓｏｆｔ  ＣｏｒｐからのＷｉｎ３２（商標）とすることができ、一方、データベース・ストアの基礎となるクエリ言語は、たとえば、Ｔ−ＳＱＬ（transact structured query language）とすることができる。ＷｉｎＦＳは、ファイルストリーム・フィールドへの帯域外アクセス（out of band access）を可能にするため、そのようなファイルストリーム・フィールドを含むアイテムは、２つの異なるチャネル、すなわちＴ−ＳＱＬとＷｉｎ３２を介して操作することができる。
【０００８】
Ｔ−ＳＱＬとＷｉｎ３２に関する１つの違いは、Ｔ−ＳＱＬは明確なトランザクション／ロッキング・モデルを有し、一方、Ｗｉｎ３２は有していないことである。本明細書では、「トランザクション」という用語は、  を指す。Ｔ−ＳＱＬのトランザクション・モデルは、ステートメントの概念の周りで構築される。Ｔ−ＳＱＬステートメントは、「ＳＥＬＥＣＴ」または「ＵＰＤＡＴＥ」ステートメントなど、データ・ストアに対するオペレーションを表す。Ｔ−ＳＱＬステートメントは、単一ステートメント・トランザクションまたはマルチ・ステートメント・トランザクションの一部として含まれる可能性がある。単一ステートメント・トランザクションでは、単一のＴ−ＳＱＬステートメントが実行されると、そのステートメントが実行に成功した場合にコミットするデータ・ストアに関してトランザクションが作成される。トランザクション寿命は、ステートメントによって調べられる。マルチ・ステートメント・トランザクションでは、データ・ストアに関してトランザクションを明示的に開始しコミットする（またはアボートする）ために、アプリケーションが、「Ｂｅｇｉｎ  Ｔｒａｎｓａｃｔｉｏｎ」および「Ｃｏｍｍｉｔ  Ｔｒａｎｓａｃｔｉｏｎ」Ｔ−ＳＱＬステートメントを発行する。ｂｅｇｉｎおよびｃｏｍｍｉｔの括弧内のステートメントのすべてが、そのデータ・ストアに関する同じマルチ・ステートメント・トランザクションの一部として実行される。
【０００９】
Ｔ−ＳＱＬは、トランザクション・ロッキングのための明確なセマンティクスを有する。一般に、「ＳＥＬＥＣＴ」ステートメントは、行（row）に関する読取りロックを獲得することになり、一方、「ＵＰＤＡＴＥ」ステートメントは、行に関する書込みロックを獲得することになる。書込みロックは、トランザクションがコミットする、またはアボートするまで保持され、一方、読み取りロックは、より早く解放することができる。トランザクションが、ある行に関する書込みロックを有する場合には、他のトランザクションは、その行に対する読取りアクセスおよび／または書込みアクセスを得ることを阻止される。トランザクションが、別のトランザクションがすでに書込みロックを獲得している行に対して読取りアクセスおよび／または書込みアクセスを得ようと試みた場合には、コンフリクト（conflict）が生じる。そのコンフリクトを解決するために、標準的なコンフリクト解決方法を使用することができる。
【００１０】
Ｗｉｎ３２は、ステートメントの概念を使用するのでなく、従来のファイル・システム共有モードを使用し、オペレーション（open、 read/write、 close）間のアイソレーションを定義する。ファイル共有読取りフラグは、読取り共有を可能にし、これは、ファイルのオープンが、同じファイルに対する別のオープンと読取りを共有することができることを意味する。ファイル共有書込みフラグは、書込み共有を可能にするが、これは、ファイルのオープンが、同じファイルに対する別のオープンと書込みを共有することができることを意味する。さらに、ファイル共有読取りフラグとファイル共有書込みフラグは共に、読取り共有と書込み共有の両方を可能にするように設定することができる。さらに、どちらのファイル共有フラグも、共有を否定するように設定することができない。重要なことに、従来のＷｉｎ３２  ＡＰＩや他の従来のファイル・システムＡＰＩは、トランザクションのコンテキストでオペレーションを実行することを可能にしない。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
したがって、当技術分野では、クエリ言語トランザクションおよびロッキング・モデルをファイル・システム共有モデルと統合する、ストレージ・プラットフォームにおけるロッキングとアイソレーションのためのシステムおよび方法に対するニーズが存在する。トランザクション・モデルの統合は、ＷｉｎＦＳなどストレージ・プラットフォームにおいて、ファイルストリーム・フィールドを含むアイテムを操作するための全体的なトランザクション・モデルが提供することになる。全体的なフレームワークが、ファイル・システム・オペレーションをトランザクションのコンテキストにおいて実行することを可能にすることは、さらに望ましい。
【課題を解決するための手段】
【００１２】
本発明は、ストレージ・プラットフォームにおけるロッキングとアイソレーションのためのシステムおよび方法を対象とする。本発明によれば、ファイル・システム・オペレーションのための共有モデルが、クエリ言語ステートメントのためのトランザクション／ロッキング・モデルと統合され、ストレージ・プラットフォームにおけるファイルストリームのロッキングとアイソレーションのための全体的なフレームワークを提供する。さらに、ファイル・システム・オペレーションについてトランザクションのサポート（transactional support）が提供され、その結果、ファイル・システム・オペレーションをトランザクションのコンテキストで実行することができる。したがって、単一のトランザクションが、単一のファイル・システム・ステートメント、単一のクエリ言語ステートメント、複数のファイル・システム・ステートメント、複数のクエリ言語ステートメント、およびファイル・システム・ステートメントとクエリ言語ステートメントの組合せを含むことができる。さらに、非トランザクション型ファイル・システムについてサポートが提供され、その結果、ファイル・システム・オペレーションは、必ずしもトランザクションのコンテキストで実行されることを必要としない。
【００１３】
本発明の一態様によれば、ファイル・システム・ステートメントは、アイテムを開くための呼出しと、読取りまたは書込みオペレーションと、アイテムを閉じるための呼出しとを含むことができる。ファイル・システム・ステートメントは、そのアイテムに対応するユーザ定義タイプ（ＵＤＴ）を含むデータ・テーブルの行に関してアイソレーションを獲得することができる。トランザクション型書込みステートメントは、トランザクションの寿命（lifetime）の間、行に関して排他的なロックを獲得する。トランザクション型読取りステートメントは、行の読取りコミットされたビューを獲得する。ファイル・システム共有モードを使用し、各トランザクション間、およびトランザクション内のステートメント間、でアイソレーションを定義することができる。さらに、非トランザクション型ステートメントもまた、共有モードに基づいてアイソレーションを獲得することができる。
【００１４】
本発明の他の態様によれば、いくつかのクエリ言語ステートメントおよび／またはファイル・システム・ステートメントを、ストレージ・プラットフォーム部で受け取ることができる。ステートメントは、トランザクションに関連付けることができる。トランザクションを開始するとコンフリクトが生じるかどうか判定することができる。生じる場合には、たとえば、ブロッキングなど、標準的なコンフリクト解決技法に従ってコンフリクトを解決することができる。コンフリクトが生じない場合には、トランザクション内のクエリ言語ステートメントおよび／またはファイル・システム・ステートメントに対して適切な読取りロックおよび／または書込みロックを獲得することによって、トランザクションを開始することができる。
【００１５】
本発明の追加の特徴および利点は、添付の図面を参照しながら進む以下の例示的な諸実施形態についての詳細な説明から、明らかになる。
【００１６】
例示的な諸実施形態は、添付の図面を参照しながら以下の詳細な説明を読んだ後で、よりよく理解されることになる。
【発明を実施するための最良の形態】
【００１７】
本発明の主題は、法定要件を満たすために特定性（specificity）をもって記載している。しかし、この説明それ自体は、この特許の範囲を限定することを意図していない。そうではなく、発明者等は、特許請求の範囲に記載された主題はまた他の方法で実施することができ、他の現行の、または将来の技術と関連して、本書で述べられているものと異なる様々なステップまたは類似の要素を含むことを企図している。
【００１８】
上述のように、本発明は、前述のＷｉｎＦＳなどの、ストレージ・プラットフォームにおけるロッキングとアイソレーションのためのシステムおよび方法を対象とする。本発明は、前述のＷｉｎ３２など、ファイル・システム・オペレーションをトランザクションのコンテキストで実行することを可能にする。さらに、本発明は、ファイル・システム・オペレーションのための共有モデルを、前述のＴ−ＳＱＬなど、クエリ言語のためのトランザクションおよびロッキング・モデルと統合し、それによって、ストレージ・プラットフォームにおいてファイルストリーム・フィールドを含むアイテムを操作するための全体的なモデルを提供する。
【００１９】
次に図１を参照すると、ストレージ・プラットフォーム・アイテムのインスタンスは、例示的なテーブル２００など、リレーショナル・データベース・テーブル内に格納することができる。テーブル２００は、２つのカラム、すなわちＩＤカラム２０２ａとユーザ定義タイプ（ＵＤＴ）カラム２０２ｂ、を含む。列２０２ａ内の各ＩＤは、対応するＵＤＴに対する一意の識別子を提供する。列２０２ｂ内の各ＵＤＴは、アイテムタイプのインスタンスに対応する。たとえば、列２０２ｂ内の各ＵＤＴは、Ｐｅｒｓｏｎアイテムタイプに関連付けられた特定の人に対応することができる。ＵＤＴ１〜３のフィールド２０４ａ〜ｃは、それぞれファイルストリーム・フィールドとして指定され、これは、そのフィールド用のデータが、テーブル２００と別個のファイル内に格納されることを意味する。ファイルストリーム・フィールド２０４ａ〜ｃは、デジタル写真など、大量のデータを含むフィールドを格納するために有利である。たとえば、Ｐｅｒｓｏｎアイテムは、その人のデジタル写真を含むファイルストリーム・フィールドである、対応する「写真」フィールドを有することができる。本発明は、下記で詳しく論じるように、表２００の行１〜３のそれぞれなど、各行のロッキングとアイソレーションを可能にする。
【００２０】
例示的なストレージ・プラットフォーム環境が、図２に示されている。上記で述べたように、クライアント・アプリケーション３００は、ストレージ・プラットフォーム３０８を通して、またはファイル・システムＡＰＩ３０２を通した「帯域外」アクセスを介して、データ・ストア３１０内のアイテムを直接操作することができる。クライアント・アプリケーション３００がストレージ・プラットフォーム３０８を通してアイテムを直接操作する場合、そのような操作は、Ｔ−ＳＱＬなどクエリ言語を使用して実行することができる。一方、クライアント・アプリケーション３００がファイル・システムＡＰＩ３０２を通して「帯域外」アクセスを介してアイテムを操作する場合、そのような操作は、Ｗｉｎ３２などファイル・システムＡＰＩを使用して実行することができる。「帯域外」アクセスは、ファイルストリーム・フィールドを含むアイテムについてだけ使用可能である。
【００２１】
クライアント・アプリケーション３００は、データ・ストア３１０に関するクエリを開始させるために、ストレージ・プラットフォーム・メソッドを使用してストレージ・プラットフォーム３０８に直接アクセスして、ことができる。Ｐｅｒｓｏｎアイテムタイプの例を続けると、クライアント・アプリケーション３００は、そのタイプの「誕生日（Ｂｉｒｔｈｄａｙ）」フィールド内の値が特定の日付（たとえば、１９９９年１２月３１日）より大きいＰｅｒｓｏｎタイプのインスタンスすべてについてクエリを開始させるために、ストレージ・プラットフォーム３０８の「ＦｉｎｄＡｌｌ」メソッドを使用することができる。次いで、ストレージ・プラットフォーム３０８は、「ＦｉｎｄＡｌｌ」オペレーションを、Ｔ−ＳＱＬまたは別のクエリ言語でのクエリに変換し、それを、基礎となるデータ・ストア３１０にサブミットする。次いで、データ・ストア３１０は、Ｐｅｒｓｏｎ  ＵＤＴの対応するインスタンスに対してクエリを実行し、Ｐｅｒｓｏｎ  ＵＤＴの各合致するインスタンスについて、格納された値を返す。次いで、ストレージ・プラットフォーム３０８は、Ｐｅｒｓｏｎ  ＵＤＴオブジェクトをラップし、それらをＰｅｒｓｏｎタイプのアイテムとしてアプリケーションに返す。
【００２２】
上述のようにアイテムに対する直接アクセスを可能にすることに加えて、ストレージ・プラットフォーム３０８は、ファイル・システムＡＰＩ３０２を介して、アイテム内のファイルストリーム（Filestream）フィールドに対する「帯域外」アクセスを可能にする。図２の例示的な環境では、クライアント・アプリケーション３００は、たとえば、ストレージ・プラットフォーム３０８のＣｒｅａｔｅＦｉｌｅインターフェースを呼び出し、永続（persisted）アイテム（ＵＤＴ）のインスタンス内の対応するフィールドの識別に基づいて要求されたデータを識別するストレージ・プラットフォーム３０８へのパス名を渡す、ことによって帯域外アクセスを開始する。ファイル・システム（File System）ＡＰＩ３０２が、ストレージ・プラットフォーム・パス名を含むＣｒｅａｔｅＦｉｌｅコマンドをクライアント・アプリケーション３００から受け取ると、ファイル・システム（File System）ＡＰＩ３０２はそのようなものとして認識し、それをＦＳ  Ａｇｅｎｔ３０６に転送する。次いで、ＦＳ  Ａｇｅｎｔ３０６は、「ＯＰＥＮ」呼出しをストレージ・プラットフォーム３０８に発行し、アイテム・フィールドのストレージ・プラットフォーム・パス名を渡す。次いで、ストレージ・プラットフォーム３０８は、ストレージ・プラットフォーム・パス名からそのアイテムとフィールドを識別し、次いで、この情報をデータベース・エンジン３１０に渡す。ストレージ・プラットフォーム３０８は、上述のような形で、データベース・ストアと別々に格納されているＵＤＴオブジェクトのファイルストリーム・フィールド用のファイル・システム・パス名を返すデータベース・エンジン関数を渡すことができる。
【００２３】
データベース・エンジン３１０は、要求の対象であるＵＤＴオブジェクトが格納されているテーブル２００内でテーブルルックアップを実行することによって、要求に応答する。データベース・エンジン３１０は、テーブル２００の正しい行に、次いでその行内のＵＤＴオブジェクトの、シリアル化された断片に位置決めする。該当するファイルストリーム・フィールドについて、データベース・エンジン３１０は、その対応する断片から、そのフィールド用のデータが格納されているファイルへの実ファイル・システム・パスを抽出する。データベース・エンジン３１０は、この実パスをストレージ・プラットフォーム３０８に返送する。次いで、ストレージ・プラットフォーム３０８は、そのファイル・システム・パスをＦＳ  Ａｇｅｎｔ３０６に渡し、ＦＳ  Ａｇｅｎｔは、ファイルを開くためにファイル・システム（File System）ＡＰＩ３０２を呼び出し、その要求内で実ファイル・システム・パスを渡す。次いで、ファイル・システム（File System）ＡＰＩ３０２は、ファイル・システム（File System）ＡＰＩ３０２に対してＣｒｅａｔｅＦｉｌｅ呼出しが行われたとき通常行うように、そのファイルへのハンドルを得て、それをクライアント・アプリケーション３００に渡す。
【００２４】
この時点で、クライアント・アプリケーション３００は、通常のファイル・システム（File System）ＡＰＩ呼出し（たとえば、Ｗｉｎ３２  ＡＰＩ  Ｆｉｌｅ  Ｉ／Ｏ呼出し）を介して、ファイルに対して読取りおよび書込みをすることができる。クライアント・アプリケーション３００は、ファイルを使い終えたとき、ファイル・システム（File System）ＡＰＩに対してＣＬＯＳＥ呼出しを発行する。この呼出しは、ＦＳ  Ａｇｅｎｔ３０６によって再びインターセプトされる。ＦＳ  Ａｇｅｎｔ３０６は、ストレージ・プラットフォーム３０８に対して「ＣＬＯＳＥ」呼出しを発行し、そのファイルを閉じることを要求する。ストレージ・プラットフォーム３０８は、このオペレーションを永続アイテムに対する更新としてモデル化し、任意の関連する変更追跡やその更新に関連付けられた他の機能を実行する。次いで、データベース・エンジン３１０は、永続ＵＤＴオブジェクトに関してそれ自体の更新処理を行う。この処理が完了した後で、制御はＦＳ  Ａｇｅｎｔ３０６に戻り、ＦＳ  Ａｇｅｎｔ３０６は、ファイル・システム（File System）ＡＰＩ３０２を呼び出し、クライアント・アプリケーション３００に代わって通常のファイル・クローズ・オペレーションを実行する。
【００２５】
したがって、上述の環境では、ストレージ・プラットフォーム３０８は、Ｔ−ＳＱＬなどクエリ言語を使用して、ファイルストリーム・フィールドに対する直接アクセスを、あるいは、Ｗｉｎ３２などファイル・システムＡＰＩを使用して「帯域外」アクセスを、可能にする。上述のように、クエリ言語トランザクション／ロッキング・モデルとファイル・システム共有モデルの間にいくつかの違いがある。そのような違いの１つは、ファイル・システムが、クエリ言語の場合のようにステートメントの考えを有していないことである。そうではなく、ファイル・システムは、たとえば、ｏｐｅｎ、ｒｅａｄ、ｗｒｉｔｅ、ｃｌｏｓｅなど、各オペレーションを生成する。本発明は、オープンがトランザクションのコンテキストで行われることを可能にする。開かれたファイルは、そのオープン中に提供されるトランザクション・コンテキストに関連付けられることができる。後続の読取りおよび／または書込みは、トランザクションのコンテキストで行われる。クエリ言語でのトランザクションの場合と同様に、任意の所与の瞬間において、ファイルに対して１つのトランザクション型ライタ（transacted writer）だけが存在することができる。さらに、トランザクション型リーダ（transacted reader）は、ファイルの読取りコミットされたビューを取得し、これは、トランザクション型リーダが、オープンのときに、そのコミットされた状態でファイルを見ることを意味する。
【００２６】
非トランザクション型リーダ／ライタは、指定された共有モデルに基づいてアイソレーションを得ることができる。ファイルが開かれる（オープンされる）際、そのオープンの意図を指定することができる。ファイルは、３つの意図、すなわち読取りの意図のためのオープン、書込みの意図のためのオープン、読取りの意図と書込みの意図両方のためのオープン、のうち１つのために開くことができる。さらに、ファイル共有読取り、ファイル共有書込み、ファイル共有読取りとファイル共有書込みの両方、ファイル共有読取りでもファイル共有書込みでもない、という共有モデルを使用して、所望のアイソレーション・モデルを指定することができる。ファイル・システム・オペレーションについては、オープンは、共有コンフリクトに基づいてファイルに対するアクセスが否認された場合、ブロックされるのでなく、見捨てられる。そのオープンは、共有コンフリクトが再発しないことを期待して、後で再試行することができる。
【００２７】
共有モデルは、２つのレベル、すなわち各トランザクション間、およびトランザクション内の各オープン間でアイソレーションを提供することができる。非トランザクション型オープンは、常にアクティブである、また、あらゆる非トランザクション型書込みについてオートコミットする単一のグローバル・トランザクション内にすべてあるかのように動作することができる。非トランザクション型読取りは、対応するファイルの読取りコミットされたビューを取得せず、共有モードで要求されたアイソレーションだけが提供される。
【００２８】
ストレージ・プラットフォーム３０８では、アイソレーションの単位は、そのアイテム、そのアイテムに関連付けられた拡張、またはそのアイテムに関連付けられた関係とすることができる。これら３つの場合のそれぞれにおいて、基礎となる表現は、適切なテーブル内のＵＤＴのインスタンスであり、アイソレーションの単位は、テーブル内の行に対応する。これは、クエリ言語ロッキング・モデルにマップし、その中で、適切なロックが行ごとに得られる。したがって、ストレージ・プラットフォーム３０８内のロッキングの粒度は、クエリ言語内の行の粒度に直接マップする。
【００２９】
上述のように、ファイル・システム・オペレーションのためのトランザクションのサポート（transactional support）を提供することに加えて、本発明は、ファイル・システム・オペレーションのためのモデルとクエリ言語ステートメントを統合することを対象とする。ファイルストリーム・アイテムに対する帯域外アクセスのためだけに処理されるファイル・システム・ステートメントと異なり、クエリ言語ステートメントは、ファイルストリーム・アイテムに関しても非ファイルストリーム・アイテムに関しても実行することができる。クエリ言語のトランザクション・モデルをファイル・システムの共有モデルと統合するために、ファイル・システム・ステートメントの概念を定義することが必要である。そのようなファイル・システム・ステートメントは、オープン・オペレーションと、読取りまたは書込みオペレーションと、クローズ・オペレーションとを含むことができる。したがって、オープン・オペレーション、読取りオペレーション、クローズ・オペレーションを含むファイル・システム・ステートメントは、クエリ言語におけるＳＥＬＥＣＴファイルストリーム・ステートメントと意味論的に等価であり、一方、オープン・オペレーション、書込みオペレーション、クローズ・オペレーション作を含むファイル・システム・ステートメントは、クエリ言語におけるＵＰＤＡＴＥファイルストリーム・ステートメントと意味論的に等価である。
【００３０】
クエリ言語ステートメントの場合と同様に、ファイル・システム・ステートメントは、マルチ・ステートメント・トランザクションまたは単一ステートメント・トランザクションのコンテキストで発生することができ、そこにおいて、トランザクションはステートメントの処理中に存在する。したがって、本発明によるトランザクションは、単一のクエリ言語ステートメント、単一のファイル・システム・ステートメント、複数のクエリ言語ステートメント、複数のファイル・システム・ステートメント、またはクエリ言語ステートメントとファイル・システム・ステートメントの組合せを含むことができる。
【００３１】
単一のクエリ言語ステートメントの場合には、アイテム内のフィールドが更新され、ｕｐｄａｔｅｇｒａｍがサーバに送信される。アイテム内の値はすべて、Ｆｉｌｅｓｔｒｅａｍ値を含めて、インラインすることができる。ｕｐｄａｔｅｇｒａｍを実行することの一部として、トランザクションが、サーバ上で即座に作成されることが、およびコミットされることが可能になる。単一のファイル・システム・ステートメントの場合には、トランザクションは、オープンの一部として作成される。次いで、読取りまたは書込みが、トランザクションのコンテキスト内で行われる。次いで、トランザクションは、クローズの一部としてコミットされる。ストレージ・プラットフォーム３０８は、＜ｏｐｅｎ，  ｗｒｉｔｅ，  ｃｌｏｓｅ＞境界を跨いでトランザクションの寿命を作成および管理することができる。
【００３２】
複数のクエリ言語ステートメントの場合には、トランザクションは、そのサーバ上に関して開始され、アイテム・フィールドが更新され、１つまたは複数のｕｐｄａｔｅｇｒａｍがサーバに送信される。次いで、トランザクションがそのサーバに関してコミットされる。
【００３３】
複数のファイル・システム・ステートメントの場合には、トランザクションは、そのサーバに関して開始され、ファイル・システム・ステートメントがそのトランザクションのコンテキストで実行される。次いで、トランザクションがサーバに関してコミットされる。
【００３４】
クエリ言語ステートメントとファイル・システム・ステートメントの組合せの場合には、トランザクションは、そのサーバに関して開始され、次いで、アイテム内の非ファイルストリーム・フィールドを修正するｕｐｄａｔｅｇｒａｍを発行することができる。次いで、ファイル・システム・ステートメントをトランザクションのコンテキストで実行することができる。次いで、トランザクションをそのサーバに関してコミットすることができる。
【００３５】
対応する行に関して適切なロックを得るために、トランザクション・コンテキストをファイル・システム・オペレーションのために指定することができる。オープンが読取りのためのものである場合には、トランザクションは、Ｆｉｌｅｓｔｒｅａｍを含む行上の読取りロックを得ることになる。オープンが書込みのためのものである場合には、トランザクションは、Ｆｉｌｅｓｔｒｅａｍを含む行上の書込みロックを得ることになる。ＦｓＡｇｅｎｔ  ３０６は、トランザクションのために代わって行ロックを得ることができ、ロックは、トランザクション・アイソレーションレベルに基づいて解放することができ、またトランザクション寿命に結び付けることができる。
【００３６】
クエリ言語アイソレーション・モデルをエミュレートするために、排他的オープンをライタ（writers）のために得ることができ、一方、共有オープンをリーダ（readers）のために得ることができる。排他的オープンと共有オープンは、クエリ言語モデル内で、それぞれ排他的行レベル・ロックと共有行レベル・ロックに対応する。したがって、ある種の共有モード・フラグは、このモデルと矛盾する可能性があり、尊重されない可能性がある。
【００３７】
たとえば、ファイル共有書込みフラグは、２つのオープンが同じファイルに書き込むことを共有することを可能にするため、このモデルと矛盾する。したがって、ファイル共有書込みフラグは、許可されず、尊重されないことになる。たとえば、ファイル共有書込みは、静かに（ユーザーへの通知もなく）再マップされるか、または適切なエラーコードで拒絶されるかする可能性がある。したがって、トランザクションが複数のファイル・システム書込みステートメントを含む場合には、書込みオペレーションをシリアル化することができる。トランザクション内のシリアル化は、複数の並行更新が、同じトランザクションのコンテキストで許されないというクエリ言語セマンティクスに適合する。さらに、２つの非トランザクション型ファイル・システム・ステートメントが同時に実行しようと試みた場合には、それらもまたシリアル化することができる。非トランザクション型ステートメントのシリアル化は、２つのＵＰＤＡＴＥステートメントを同時に実行することができないクエリ言語ステートメント・セマンティクスに適合する。さらに、トランザクションのコンテキストでの書込みのためのオープンは、ファイル共有読取りを指定しなければならない。指定しない場合、無効なオペレーション・エラーコードでオープンが見捨てられる可能性がある。これにより、同じトランザクションのコンテキストでＵＰＤＡＴＥがＳＥＬＥＣＴを妨げないクエリ言語セマンティクスが実施される。
【００３８】
本発明による、ファイル・システム・ステートメントをトランザクションのコンテキストで実行するための例示的な方法の流れ図が、図３に示されている。動作（act）４１０で、ストレージ・プラットフォーム３０８は、クライアント・アプリケーション３００から、データ・ストア３１０内に格納されたアイテムに関して実行されるステートメントを受け取る。そのようなステートメントは、クライアント・アプリケーション３００から受け取られるクエリ言語ステートメントとすることも、ファイル・システムＡＰＩ８０２およびＦＳＡｇｅｎｔ８０４を介してクライアント・アプリケーション３００から受け取られる帯域外ファイル・システム・ステートメントとすることもできる。クエリ言語ステートメントは、ファイルストリーム・アイテムに関しても非ファイルストリーム・アイテムに関しても実行することができ、一方、ファイル・システム・ステートメントは、ファイルストリーム・アイテムに関して実行することができるだけである。
【００３９】
上述のように、クエリ言語ステートメントは、たとえば、ＳＥＬＥＣＴステートメントまたはＵＰＤＡＴＥステートメントを含むことができる。クエリ言語ステートメントは、単一ステートメント・トランザクションまたはマルチ・ステートメント・トランザクションの一部とすることができる。クエリ言語ステートメントがマルチ・ステートメント・トランザクションの一部である場合には、開始（begin）トランザクション・コマンドとコミット（commit）トランザクション・コマンドによって括られる。
【００４０】
ファイル・システム・ステートメントは、オープン・オペレーションと、読取りオペレーションまたは書込みオペレーションと、クローズ・オペレーションとを含むことができる。各ファイル・システム・ステートメントは、トランザクションのコンテキストでサブミットすることができる。動作４１２では、動作４１０で受け取られた各ステートメントがトランザクションに関連付けられる。
【００４１】
理解されるはずであるが、ファイル・システム・ステートメントは、必ずしもトランザクションのコンテキストでサブミットすることを必要としない。そのような非トランザクション型ファイル・システム・ステートメントのためのロッキングとアイソレーションについては、図４および図５を参照しながら下記で詳しく論じる。
【００４２】
動作４１４で、トランザクションを開始するとコンフリクトが生じるかどうか判定される。たとえば、トランザクション内の任意のステートメントが、すでに別のトランザクションが書込みロックを獲得している行に対応する場合には、コンフリクトが生じることになる。
【００４３】
動作４１４でコンフリクトが生じると決定された場合には、動作４１６で、そのコンフリクトが解決される。コンフリクトは、標準的なコンフリクト解決慣行に従って解決することができる。一般に、コンフリクトが１つだけ検出された場合でも、トランザクション全体をロールバックすることができる。
【００４４】
動作４１８で、トランザクションが開始される。トランザクションは、適切な行に関して読取りロックおよび書込みロックを獲得することによって開始される。前述のように、読取りロックは、読取りオペレーションに、またＳＥＬＥＣＴステートメントに対応する行に関して獲得される。読取りオペレーションに対応する読取りロックは、その行の読取りコミットされたビューを獲得する。読取りロックは、共有型行ロック（shared row lock）である。
【００４５】
書込みロックは、書込みオペレーションに、およびＵＰＤＡＴＥステートメントに対応する行に関して獲得される。書込みロックは、そのトランザクションの寿命の間獲得される排他的ロックである。書込みロックは、そのトランザクションが処理されている間、別のトランザクションが（読取りアクセスまたは書込みアクセスを介して）対応する行にアクセスするのを妨げることになる。書込みロックはまた、そのトランザクションが処理されている間、非トランザクション型ファイル・システム・ステートメントが（読取りアクセスまたは書込みアクセスを介して）対応する行にアクセスするのを妨げることになる。しかし、書込みロックは、そのトランザクション内の他のステートメントが、対応する行を読み取るのを妨げない。
【００４６】
本発明による、非トランザクション型ファイル・システム読取りステートメントのロッキングとアイソレーションのための例示的な方法の流れ図が、図４に示されている。動作４２０で、ストレージ・プラットフォーム３０８は、クライアント・アプリケーション３００から、データ・ストア３１０内に格納されたアイテムに関して実行される非トランザクション型ファイル・システム読取りステートメントを受け取る。上述のように、ファイル・システム読取りステートメントは、オープン動作と、読取り動作と、クローズ動作とを含む。
【００４７】
動作４２２で、そのアイテムに対応するデータ・テーブルの行について読取りアクセスが使用可能であるかどうか判定される。その行は、そのアイテムに対応するユーザ定義タイプを含むことができる。
【００４８】
動作４２２で読取りアクセスが使用可能であると決定された場合には、動作４２４で、読取りロックがその行に関して獲得される。読取りロックは、その行の読取りコミットされたビューを提供することができる。動作４２２で読取りアクセスが使用可能でないと決定された場合には、動作４２６で、そのオープンは見捨てられる。
【００４９】
本発明による、非トランザクション型ファイル・システム書込みステートメントのロッキングとアイソレーションのための例示的な方法の流れ図が、図５に示されている。動作５２０で、ストレージ・プラットフォーム３０８は、クライアント・アプリケーション３００から、データ・ストア３１０内に格納されたアイテムに関して実行される非トランザクション型ファイル・システム書込みステートメントを受け取る。上述のように、ファイル・システム書込みステートメントは、オープン動作と、書込み動作と、クローズ動作とを含む。
【００５０】
動作５２２で、そのアイテムに対応するデータ・テーブルの行について書込みアクセスが使用可能であるかどうか判定される。その行は、そのアイテムに対応するユーザ定義タイプを含むことができる。書込みアクセスは、たとえば、あるトランザクション、または別の非トランザクション型ステートメントがその行に関してすでに書込みロックを有する場合、否認されることになる。
【００５１】
動作５２２で書込みアクセスが使用可能であると決定された場合には、動作５２４で、書込みロックがその行に関して獲得される。書込みロックは、そのステートメントが処理されている間、トランザクションまたは別の非トランザクション型ステートメントがその行上の書込みロックを獲得するのを妨げることができる。動作５２２で書込みアクセスが使用可能でないと決定された場合には、動作５２６で、そのオープンは、見捨てられる。
【００５２】
上記から明らかであるように、本発明の様々なシステム、方法、態様のすべてまたは一部分は、ハードウェア、ソフトウェア、または両者の組合せで実施することができる。ソフトウェアで実施されたとき、本発明の方法および装置、あるいはそのある種の態様または一部分を、プログラム・コード（すなわち、命令）の形態で実施することができる。このプログラム・コードは、限定しないが、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、磁気テープ、フラッシュ・メモリ、ハードディスク・ドライブ、または任意の他の機械可読記憶媒体を含めて、磁気、電気、または光記憶媒体などコンピュータ可読媒体に記憶することができ、そのプログラム・コードが、コンピュータまたはサーバなど、機械内にロードされ、機械によって実行されたとき、その機械は、本発明を実施するための装置となる。そのプログラム・コードが実行されるコンピュータは、一般に、プロセッサと、そのプロセッサによって可読の（揮発性／不揮発性メモリおよび／または記憶要素を含む）記憶媒体と、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを含むことになる。プログラム・コードは、高級手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装することができる。別法として、プログラム・コードは、アセンブリ言語または機械語で実装することができる。どのような場合でも、言語は、コンパイラ言語またはインタープリタ言語とすることができる。
【００５３】
また、本発明は、電気配線またはケーブルを介して、または光ファイバを介して、または、ローカル・エリア・ネットワーク、広域ネットワーク、インターネット、もしくはイントラネットを含むネットワークを介して、または任意の他の伝送形態を介してなど、何らかの伝送媒体を介して伝送されるプログラム・コードの形態で実施することができ、そのプログラム・コードが、コンピュータなど、機械内にロードされ、機械によって実行されたとき、その機械は、本発明を実施するための装置となる。
【００５４】
このプログラム・コードは、汎用プロセッサ上で実施されたとき、プロセッサと結合し、特定の論理回路と同様に動作する独自の装置を提供する。
【００５５】
さらに、本発明は、コンピュータ・ネットワークの一部として、または分散コンピューティング環境内で展開することができる任意のコンピュータまたは他のクライアントもしくはサーバ・デバイスに実装することができる。これに関して、本発明は、任意の数のメモリまたは記憶装置と、任意の数のアプリケーション、ならびに任意の数の記憶装置またはボリュームを跨いで発生するプロセスとを有する任意のコンピュータ・システムまたは環境に関係し、これらは、本発明による、データベース・ストア内の持続オブジェクトのためのプロセスに使用することができる。本発明は、ネットワーク環境または分散コンピューティング環境内で展開される、遠隔ストレージまたはローカル・ストレージを有するサーバ・コンピュータおよびクライアント・コンピュータを有する環境に適用することができる。また、本発明は、遠隔デバイスまたはローカル・デバイスに情報を生成し、受信し、送信するために、プログラミング言語機能、解釈および実行機能を有する独立型コンピューティング・デバイスに適用することができる。
【００５６】
分散コンピューティングは、コンピューティング・デバイス群とシステム群の間で交換することによって、コンピュータ・リソースおよびサービスの共用を容易にする。これらのリソースおよびサービスには、それだけには限らないが、情報の交換、キャッシュストレージ、ファイルのためのディスク・ストレージが含まれる。分散コンピューティングは、ネットワーク接続を利用し、クライアントがその総力を利用して企業全体に利益を与えることを可能にする。これに関して、本発明のオブジェクト永続方法に関連して実行される処理を関係させることができるアプリケーション、オブジェクト、または資源を、様々なデバイスが有することができる。
【００５７】
図６は、例示的なネットワーク化された、または分散されたコンピューティング環境の概略図である。分散コンピューティング環境は、コンピューティング・オブジェクト１０ａ、１０ｂなど、また、コンピューティング・オブジェクトまたはデバイス１１０ａ、１１０ｂ、１１０ｃなどを含む。これらのオブジェクトは、プログラム、メソッド、データ・ストア、プログラム可能な論理などを含む。オブジェクトは、ＰＤＡ、テレビジョン、ＭＰ３プレイヤ、パーソナル・コンピュータなど、同じまたは異なるデバイスの一部分を含むことができる。各オブジェクトは、通信ネットワーク１４によって別のオブジェクトと通信することができる。このネットワークはそれ自体、図６のシステムにサービスを提供する他のコンピューティング・オブジェクトおよびコンピューティング・デバイスを含むことができ、それ自体、複数の相互接続されたネットワークを表すことができる。本発明の一態様によれば、各オブジェクト１０ａ、１０ｂなど、または１１０ａ、１１０ｂ、１１０ｃなどは、ＡＰＩ、あるいは他のオブジェクト、ソフトウェア、ファームウェア、および／またはハードウェアを利用し、本発明のオブジェクト持続方法を実装するために使用されるプロセスの使用を要求することができる。
【００５８】
また、１１０ｃなど、オブジェクトは、別のコンピューティング・デバイス１０ａ、１０ｂなど、または１１０ａ、１１０ｂなどにおいてホスティングを受けることができることも理解することができる。したがって、図の物理環境は、接続されたデバイスをコンピュータとして示す可能性があるが、そのような例示は例示的なものにすぎず、物理環境については、別法として、ＰＤＡ、テレビジョン、ＭＰ３プレイヤなど様々なデジタル・デバイス、インターフェースなどソフトウェア・オブジェクト、ＣＯＭオブジェクトなどを含めて示す、または述べることができる。
【００５９】
分散コンピューティング環境をサポートする様々なシステム、コンポーネント、ネットワーク構成がある。たとえば、コンピューティング・システムは、有線システムまたは無線システムによって、またローカル・ネットワークまたは広く分散されたネットワークによって共に接続することができる。現在、ネットワークの多くはインターネットに結合されており、インターネットは、広く分散されたコンピューティングのためのインフラストラクチャを提供し、多数の異なるネットワークを包含する。どのインフラストラクチャも、本発明に付随して行われる例示的な通信のために使用することができる。
【００６０】
インターネットは、コンピューティング・ネットワーキングの技術分野で周知である、プロトコルのＴＣＰ／ＩＰスイートを使用するネットワークおよびゲートウェイの集まりを指す。ＴＣＰ／ＩＰは、「伝送制御プロトコル／インターネット・プロトコル」の頭字語である。インターネットは、ユーザがネットワーク（群）を介して情報と対話する、また情報を共有することを可能にするネットワーキングプロトコルを実行するコンピュータ群によって相互接続された、地理的に分散された遠隔コンピュータ・ネットワーク群のシステムとして説明することができる。そのように広範囲に及ぶ情報共有のため、インターネットなど遠隔ネットワーク群は今まで、概して、開発者が、専門の動作またはサービスを実行するためのソフトウェア・アプリケーションを、本質的に制約なしに設計することができるオープンシステムの形に発展してきた。
【００６１】
したがって、ネットワーク・インフラストラクチャは、クライアント／サーバ、ピア・ツー・ピア、またはハイブリッド・アーキテクチャなど、多数のネットワーク・トポロジを可能にする。「クライアント」は、それが関連しない別のクラスまたはグループのサービスを使用するクラスまたはグループのメンバである。したがって、コンピューティングにおいて、クライアントは、別のプログラムによって提供されるサービスを要求するプロセス、すなわち、大雑把に言えば、１組の命令またはタスクである。クライアント・プロセスは、他のプログラムまたはサービスそれ自体についてどんな作業詳細を「知っている」ことをも必要とせずに、要求されたサービスを使用する。クライアント／サーバ・アーキテクチャ、特にネットワーク化されたシステムでは、クライアントは通常、別のコンピュータ、たとえばサーバによって提供された共用ネットワーク・リソースにアクセスするコンピュータである。図６の例では、コンピュータ１１０ａ、１１０ｂなどをクライアント・コンピュータと考えることができ、コンピュータ１０ａ、１０ｂなどをサーバと考えることができるが、状況に応じて、任意のコンピュータをクライアント、サーバ、または両方とみなすことができる。これらのコンピューティング・デバイスのどれもが、本発明のオブジェクト持続技法を関係させる形でデータを処理している可能性がある。
【００６２】
一般にサーバは、インターネットなど、遠隔またはローカル・ネットワークを介してアクセス可能な遠隔コンピュータ・システムである。クライアント・プロセスは第１のコンピュータ・システム内でアクティブとすることができ、サーバ・プロセスは第２のコンピュータ・システム内でアクティブとすることができ、通信媒体を介して互いに通信し、したがって分散機能を提供し、複数のクライアントがサーバの情報収集機能を利用することを可能にする。本発明の持続機構に応じて使用される任意のソフトウェア・オブジェクトは、複数のコンピューティング・デバイスを跨いで分散させることができる。
【００６３】
クライアントおよびサーバは、プロトコル・レイヤによって提供された機能を使用して互いに通信することができる。たとえば、ハイパー・テキスト転送プロトコル（ＨＴＴＰ）は、ワールド・ワイド・ウェブ（ＷＷＷ）すなわち「ウェブ」に使用される共通プロトコルである。一般に、インターネット・プロトコル（ＩＰ）アドレスなどコンピュータ・ネットワーク・アドレス、または、ユニバーサル・リソース・ロケータ（ＵＲＬ）など他の参照を使用し、サーバ・コンピュータまたはクライアント・コンピュータを互いに識別することができる。ネットワーク・アドレスは、ＵＲＬアドレスと称することができる。通信は、任意の使用可能な通信媒体を介して提供することができる。
【００６４】
したがって、図６は、本発明を使用することができる、ネットワーク／バスを介してサーバがクライアント・コンピュータと通信する例示的なネットワーク環境または分散環境を示す。ネットワーク／バス１４は、ＬＡＮ、ＷＡＮ、イントラネット、インターネット、または何らかの他のネットワーク媒体とすることができ、本発明に従って、可搬型コンピュータ、ハンドヘルド・コンピュータ、シン・クライアント、ネットワーク家電、またはＶＣＲ、ＴＶ、オーブン、照明、ヒータなど他のデバイスなど、いくつかのクライアントまたは遠隔コンピューティング・デバイス１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどを有する。したがって、本発明は、それに持続オブジェクトを維持することが望ましい任意のコンピューティング・デバイスに適用されることがあり得ることが企図されている。
【００６５】
通信ネットワーク／バス１４がインターネットであるネットワーク環境では、たとえば、サーバ１０ａ、１０ｂなどは、ＨＴＴＰなどいくつかの周知のプロトコルのどれかを介してクライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどが通信するサーバとすることができる。サーバ１０ａ、１０ｂなどはまた、分散コンピューティング環境に特徴的なものとすることができるように、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどとして働くことができる。
【００６６】
通信は、適切な場合、有線または無線とすることができる。クライアント・デバイス１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどは、通信ネットワーク／バス１４を介して通信してもしなくてもよく、独立した通信が関連付けられている可能性がある。たとえば、ＴＶまたはＶＣＲの場合には、その制御に対してネットワーク化された側面があることも、ないこともある。各クライアント・コンピュータ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなど、およびサーバ・コンピュータ１０ａ、１０ｂなどは、様々なアプリケーション・プログラム・モジュールまたはオブジェクト１３５を備えることができ、ファイルまたはデータ・ストリームを記憶することができる、あるいはファイルまたはデータ・ストリームの一部分をダウンロード、伝送、または移動させることができる様々なタイプのストレージ要素またはオブジェクトに対する接続またはアクセスを備えることができる。任意のコンピュータ１０ａ、１０ｂ、１１０ａ、１１０ｂなどは、本発明に従って処理されたデータを記憶するために、データベース、メモリ、または他のストレージ要素２０の維持および更新について責任を負うことがあり得る。したがって、本発明は、コンピュータ・ネットワーク／バス１４にアクセスし、それと対話することができるクライアント・コンピュータ１１０ａ、１１０ｂなどと、クライアント・コンピュータ１１０ａ、１１０ｂなどや他の同様のデバイス、およびデータベース２０と対話することができるサーバ・コンピュータ１０ａ、１０ｂなどとを有するコンピュータ・ネットワーク環境内で使用することができる。
【００６７】
図６と以下の考察は、本発明をそれに実装することができる好適なコンピューティング・デバイスについて簡潔に一般的に述べることが意図されている。たとえば、図６に示されているクライアント／サーバ・コンピュータまたはデバイスのどれもがこの形態を取ることができる。しかし、あらゆる種類のハンドヘルド型、可搬型その他のコンピューティング・デバイスおよびコンピューティング・オブジェクトを、すなわちコンピューティング環境内でデータを生成、処理、受信および／または送信することができるどれをも、本発明に使用することが企図されていることを理解されたい。汎用コンピュータについて以下で述べるが、これは一例にすぎず、本発明は、ネットワーク／バス相互運用性および対話を有するシン・クライアントに実装することができる。したがって、本発明は、ごくわずかの、または最小限のクライアント・リソースが関係するネットワーク・ホスト・サービスの環境、たとえば、クライアント・デバイスが、家電内に配置されたオブジェクトなどネットワーク／バスに対するインターフェースとして働くにすぎないネットワーク環境内で実装することができる。本質的には、データを記憶することができる、またはそこからデータを取り出す、または別のコンピュータに送信することができるどこでも、本発明のオブジェクト持続方法の動作にとって望ましい、あるいは好適な環境である。
【００６８】
必要とされてはいないが、本発明は、デバイスまたはオブジェクト用のサービスの開発者によって使用されるように、オペレーティング・システムを介して実装することができ、かつ／または、本発明に従って動作するアプリケーションまたはサーバ・ソフトウェア内に含むことができる。ソフトウェアについて、クライアント・ワークステーション、サーバ、または他のデバイスなど、１つまたは複数のコンピュータによって実行される、プログラム・モジュールなどコンピュータ実行可能命令の一般的な状況で述べることができる。一般に、プログラム・モジュールは、特定のタスクを実行する、あるいは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。一般に、プログラム・モジュールの機能は、望むように様々な実施形態で組み合わせる、または分散させることができる。さらに、本発明は、他のコンピュータ・システム構成およびプロトコルに実施することができる。本発明に使用するのに適している可能性がある他の周知のコンピューティング・システム、環境、および／または構成には、それだけには限らないが、パーソナル・コンピュータ（ＰＣ）、現金自動預け払い機、サーバ・コンピュータ、ハンドヘルドまたはラップトップ・デバイス、マルチ・プロセッサ・システム、マイクロ・プロセッサをベースとするシステム、プログラム可能な家庭用電化製品、ネットワークＰＣ、家電、照明、環境制御要素、ミニ・コンピュータ、メインフレーム・コンピュータなどが含まれる。
【００６９】
したがって、図７は、本発明を実装することができる好適なコンピューティング・システム環境１００の一例を示すが、上記で明らかにしたように、コンピューティング・システム環境１００は好適なコンピューティング環境の一例にすぎず、本発明の使用または機能の範囲についてどのような限定も示唆しないものとする。また、コンピューティング環境１００は、例示的な動作環境１００に示されている構成要素のいずれか１つまたは組合せに関してどのような依存性も要件も有すると解釈すべきでない。
【００７０】
図７を参照すると、本発明を実装するための例示的なシステムが、コンピュータ１１０の形態で汎用コンピューティング・デバイスを含んでいる。コンピュータ１１０の構成要素には、それだけには限らないが、処理装置１２０、システム・メモリ１３０、およびシステム・メモリを含む様々なシステム構成要素を処理装置１２０に結合するシステム・バス１２１が含まれる。システム・バス１２１は、メモリ・バスまたはメモリ・コントローラ、周辺機器バス、および様々なバス・アーキテクチャのいずれかを使用するローカル・バスを含むいくつかのタイプのバス構造のいずれかとすることができる。限定ではなく例を挙げると、そのようなアーキテクチャには、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカル・バス、および（メザニン・バスとしても知られる）ＰＣＩ（Peripheral Component Interconnect）バスが含まれる。
【００７１】
コンピュータ１１０は、一般に、様々なコンピュータ可読媒体を含む。コンピュータ可読媒体は、コンピュータ１１０によってアクセスすることができる任意の入手可能な媒体とすることができ、揮発性媒体と不揮発性媒体、取外し式媒体と非取外し式媒体を共に含む。限定ではなく例を挙げると、コンピュータ可読媒体は、コンピュータ記憶媒体と通信媒体を含むことができる。コンピュータ記憶媒体には、コンピュータ可読命令、データ構造、プログラム・モジュール、または他のデータなど、情報を記憶するための任意の方法または技術で実装される揮発性と不揮発性、取外し式と非取外し式の媒体が共に含まれる。コンピュータ記憶媒体には、それだけには限らないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリもしくは他のメモリ技術、ＣＤＲＯＭ、デジタル多用途ディスク（ＤＶＤ）もしくは他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または、所望の情報を記憶するために使用することができ、コンピュータ１１０によってアクセスすることができる任意の他の媒体が含まれる。通信媒体は、一般に、コンピュータ可読命令、データ構造、プログラム・モジュール、または他のデータを、搬送波または他の移送機構など変調データ信号に統合し、任意の情報送達媒体を含む。「変調データ信号」という用語は、情報を信号に符号化するようにその特性の１つまたは複数が設定された、または変化した信号を意味する。限定ではなく例を挙げると、通信媒体には、有線ネットワークまたは直接配線接続など有線媒体と、音響、ＲＦ、赤外線および他の無線媒体など無線媒体とが含まれる。上記のいずれかの組合せもまた、コンピュータ可読媒体の範囲内に含まれるべきである。
【００７２】
システム・メモリ１３０は、読出し専用メモリ（ＲＯＭ）１３１およびランダム・アクセス・メモリ（RAM）１３２など揮発性および／または不揮発性メモリの形態でコンピュータ記憶媒体を含む。起動中などにコンピュータ１１０内の要素間で情報を転送するのを助ける基本ルーチンを含む基本入出力システム（ＢＩＯＳ）１３３は、一般にＲＯＭ１３１内に記憶されている。一般にＲＡＭ１３２は、処理装置１２０によって直ちにアクセス可能な、および／または現在働きかけられているデータおよび／またはプログラム・モジュールを含む。限定ではなく例を挙げると、図７は、オペレーティング・システム１３４、アプリケーション・プログラム１３５、他のプログラム・モジュール１３６、プログラム・データ１３７を示す。
【００７３】
コンピュータ１１０はまた、他の取外し式／非取外し式、揮発性／不揮発性コンピュータ記憶媒体を含むことができる。例示にすぎないが、図８は、非取外し式の不揮発性磁気媒体との間で読出しまたは書込みをするハードディスク・ドライブ１４１、取外し式の不揮発性磁気ディスク１５２との間で読出しまたは書込みをする磁気ディスク・ドライブ１５１、ＣＤ−ＲＷ、ＤＶＤ−ＲＷ、または他の光媒体など取外し式の不揮発性光ディスク１５６との間で読出しまたは書込みをする光ディスク・ドライブ１５５を示す。例示的な動作環境内で使用することができる他の取外し式／非取外し式、揮発性／不揮発性コンピュータ記憶媒体には、それだけには限らないが、磁気テープ・カセット、フラッシュメモリカード、デジタル多用途ディスク、デジタル・ビデオ・テープ、固体ＲＡＭ、固体ＲＯＭなどが含まれる。一般にハードディスク・ドライブ１４１は、インターフェース１４０など非取外し式メモリ・インターフェースを介してシステム・バス１２１に接続され、磁気ディスク・ドライブ１５１および光ディスク・ドライブ１５５は、一般に、インターフェース１５０など取外し式メモリ・インターフェースによってシステム・バス１２１に接続される。
【００７４】
上記で論じ、図７に示されているドライブとその関連コンピュータ記憶媒体は、コンピュータ１１０のためのコンピュータ可読命令、データ構造、プログラム・モジュール、および他のデータを記憶する。たとえば、図７では、ハードディスク・ドライブ１４１が、オペレーティング・システム１４４、アプリケーション・プログラム１４５、他のプログラム・モジュール１４６、プログラム・データ１４７を記憶するものとして示されている。これらの構成要素は、オペレーティング・システム１３４、アプリケーション・プログラム１３５、他のプログラム・モジュール１３６、プログラム・データ１３７と同じとすることも異なるものとすることもできることに留意されたい。ここでは、オペレーティング・システム１４４、アプリケーション・プログラム１４５、他のプログラム・モジュール１４６、プログラム・データ１４７は、これらが最低でも異なるコピーであることを示すために異なる番号が与えられている。ユーザは、キーボード１６２や、マウス、トラックボール、またはタッチ・パッドなどポインティング・デバイス１６１など、入力デバイスを介してコンピュータ１１０にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラ・アンテナ、スキャナなどが含まれる。これらの、また他の入力デバイスは、システム・バス１２１に結合されているユーザ入力インターフェース１６０を介して処理装置１２０に接続されることがしばしばであるが、パラレル・ポート、ゲームポート、またはユニバーサル・シリアル・バス（ＵＳＢ）など、他のインターフェースおよびバス構造によって接続することができる。グラフィクス・インターフェース１８２もまた、システム・バス１２１に接続することができる。１つまたは複数のグラフィクス処理装置（ＧＰＵ）１８４は、グラフィクス・インターフェース１８２と通信することができる。また、モニタ１９１または他のタイプのディスプレイ・デバイスを、ビデオ・インターフェース１９０などのインターフェースを介してシステム・バス１２１に接続することができ、ビデオ・インターフェース１９０は、ビデオ・メモリ１８６と通信することができる。コンピュータはまた、モニタ１９１に加えて、スピーカ１９７やプリンタ１９６など他の周辺出力デバイスをも含むことができ、これらは、出力周辺機器インターフェース１９５などを介して接続することができる。
【００７５】
コンピュータ１１０は、遠隔コンピュータ１８０など、１つまたは複数の遠隔コンピュータに対する論理接続を使用してネットワーク環境または分散環境内で動作することができる。遠隔コンピュータ１８０は、パーソナル・コンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア・デバイスまたは他の共通ネットワーク・ノードとすることができ、図７には、メモリ記憶デバイス１８１だけが示されているが、一般に、コンピュータ１１０に関して上述した要素の多数または全部を含む。図７に示されている論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）１７１と広域ネットワーク（ＷＡＮ）１７３を含むが、他のネットワーク／バスを含むこともできる。そのようなネットワーク環境は、家庭、事務所、全社コンピュータ・ネットワーク、イントラネット、インターネットで普通である。
【００７６】
コンピュータ１１０は、ＬＡＮネットワーク環境内で使用されるとき、ネットワーク・インターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。コンピュータ１１０は一般に、ＷＡＮネットワーク環境内で使用されるとき、インターネットなどＷＡＮ１７３を介して通信を確立するためのモデム１７２または他の手段を含む。モデム１７２は、内部にあっても外部にあってもよく、ユーザ入力インターフェース１６０または他の適切な機構を介してシステム・バス１２１に接続することができる。ネットワーク環境では、コンピュータ１１０に関して示されたプログラム・モジュール、またはその一部分を、遠隔メモリ記憶装置内に記憶することができる。限定ではなく例を挙げると、図７は、メモリデバイス１８１に常駐するものとして遠隔アプリケーション・プログラム１８５を示す。図のネットワーク接続は例示的なものであり、コンピュータ間で通信リンクを確立する他の手段を使用することができることを理解されたい。
結論
ストレージ・プラットフォームにおけるロッキングとアイソレーションのためのシステムおよび方法について開示した。ファイル・システム・オペレーションのための共有モデルが、クエリ言語ステートメントのためのトランザクション／ロッキング・モデルと統合され、ストレージ・プラットフォームにおけるロッキングとアイソレーションのための全体的なフレームワークを提供する。さらに、ファイル・システム・オペレーションについてトランザクションのサポートが提供され、その結果、ファイル・システム・オペレーションをトランザクションのコンテキストで実行することができる。したがって、単一のトランザクションが、単一のファイル・システム・ステートメント、単一のクエリ言語ステートメント、複数のファイル・システム・ステートメント、複数のクエリ言語ステートメント、およびファイル・システム・ステートメントとクエリ言語ステートメントの組合せを含むことができる。さらに、非トランザクション型ファイル・システム・ステートメントについてサポートが提供され、その結果、ファイル・システム・ステートメントは、必ずしもトランザクションのコンテキストで実行されることを必要としない。
【００７７】
本発明について、様々な図の好ましい実施形態に関連して述べたが、本発明の同じ機能を実行するために、そこから逸脱することなしに他の同様な実施形態を使用し、または、修正および追加を上述の実施形態に加えることができることを理解されたい。したがって、本発明は、どの単一の実施形態にも限定すべきでなく、添付の特許請求の範囲による広さと範囲内で解釈すべきである。
【図面の簡単な説明】
【００７８】
【図１】本発明による、アイテム・インスタンスについてデータを含む例示的なデータベース・テーブルの図である。
【図２】本発明による例示的なストレージ・プラットフォーム環境のブロック図である。
【図３】本発明による、ファイル・システム・ステートメントをトランザクションのコンテキストで実行するための例示的な方法の流れ図である。
【図４】本発明による、非トランザクション型読取りファイル・システム・ステートメントのロッキングとアイソレーションのための例示的な方法の流れ図である。
【図５】本発明による、非トランザクション型書込みファイル・システム・ステートメントのロッキングとアイソレーションのための例示的な方法の流れ図である。
【図６】本発明を実装することができる様々なコンピューティング・デバイスを有する例示的なネットワーク環境を表すブロック図である。
【図７】本発明を実装することができる例示的なコンピューティング・デバイスを表すブロック図である。
【図１】
2007528555.tif 000003
【図２】
2007528555.tif 000004
【図３】
2007528555.tif 000005
【図４】
2007528555.tif 000006
【図５】
2007528555.tif 000007
【図６】
2007528555.tif 000008
【図７】
2007528555.tif 000009
【国際調査報告】
2007528555.tif 000010