JP4583375B2 - 同期スキーマの実装のためのシステム - Google Patents

同期スキーマの実装のためのシステム Download PDF

Info

Publication number
JP4583375B2
JP4583375B2 JP2006523856A JP2006523856A JP4583375B2 JP 4583375 B2 JP4583375 B2 JP 4583375B2 JP 2006523856 A JP2006523856 A JP 2006523856A JP 2006523856 A JP2006523856 A JP 2006523856A JP 4583375 B2 JP4583375 B2 JP 4583375B2
Authority
JP
Japan
Prior art keywords
item
version
change unit
type
items
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006523856A
Other languages
English (en)
Other versions
JP2007503049A (ja
Inventor
シャー アシシュ
ノビク レブ
フーディス イリナ
タリアス トーマス
トンプソン ジェイ.パトリック
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US10/646,632 external-priority patent/US7529811B2/en
Priority claimed from PCT/US2003/026144 external-priority patent/WO2005029313A1/en
Priority claimed from US10/693,362 external-priority patent/US8166101B2/en
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2007503049A publication Critical patent/JP2007503049A/ja
Application granted granted Critical
Publication of JP4583375B2 publication Critical patent/JP4583375B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems
    • G06F16/1787Details of non-transparently synchronising file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases

Description

本発明は、一般には、情報の格納および取り出しの分野に関係し、より詳細には、コンピュータ化システムにおけるさまざまな型のデータの編成、検索、および共有のためのアクティブストレージプラットフォームに関係するとともに、データストアまたはその部分集合の複数のインスタンスの同期にも関係する。
(本出願は、参照によりその開示が本明細書に組み込まれている、2003年10月24日に出願した米国出願第10/693,362号明細書(整理番号MSFT−2846)、「SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A CORE SCHEMA FOR PROVIDING A TOP-LEVEL STRUCTURE FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という表題の2003年8月21日に出願した米国特許出願第10/646,632号明細書(整理番号MSFT−1751)、2003年8月21日に出願した国際出願PCT/US03/26144明細書の優先権を主張するものである。)
(本出願は、内容全体がこれにより本出願に組み込まれている(便宜上部分的に要約されている)、同一出願人による、「SYSTEMS AND METHODS FOR REPRESENTING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM BUT INDEPENDENT OF PHYSICAL REPRESENTATION」という表題の2003年8月21日に出願した米国特許出願第10/647,058号明細書(整理番号MSFT−1748)、「SYSTEMS AND METHODS FOR SEPARATING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM FROM THEIR PHYSICAL ORGANIZATION」という表題の2003年8月21日に出願した米国特許出願第10/646,941号明細書(整理番号MSFT−1749)、「SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A BASE SCHEMA FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という表題の2003年8月21日に出願した米国特許出願第10/646,940号明細書(整理番号MSFT−1750)、「SYSTEMS AND METHOD FOR REPRESENTING RELATIONSHIPS BETWEEN UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という表題の2003年8月21日に出願した米国特許出願第10/646,645号明細書(整理番号MSFT−1752)、「SYSTEMS AND METHODS FOR INTERFACING APPLICATION PROGRAMS WITH AN ITEM-BASED STORAGE PLATFORM」という表題の2003年8月21日に出願した、米国特許出願第10/646,575号明細書(整理番号MSFT−2733)、「STORAGE PLATFORM FOR ORGANIZING, SEARCHING, AND SHARING DATA」という表題の2003年8月21日に出願した、米国特許出願第10/646,646号明細書(整理番号MSFT−2734)、「SYSTEMS AND METHODS FOR DATA MODELING IN AN ITEM-BASED STORAGE PLATFORM」という表題の2003年8月21日に出願した、米国特許出願第10/646,580号明細書(整理番号MSFT−2735)、「SYSTEMS AND METHODS FOR THE IMPLEMENTATION OF A DIGlTAL IMAGES SCHEMA FOR ORGANIZING UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という表題の2003年10月24日に出願した米国特許出願第10/692,779号明細書(整理番号MSFT−2829)、「SYSTEMS AND METHODS FOR PROVIDING SYNCHRONIZATION SERVICES FOR UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という表題の2003年10月24日に出願した米国特許出願第10/692,515号明細書(整理番号MSFT−2844)、「SYSTEMS AND METHODS FOR PROVIDING RELATIONAL AND HIERARCHICAL SYNCHRONIZATION SERVICES FOR UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という表題の2003年10月24日に出願した米国特許出願第10/692,508号明細書(整理番号MSFT−2845)、および「SYSTEMS AND METHODS FOR EXTENSIONS AND INHERITANCE FOR UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という表題の2003年10月24日に出願した米国特許出願第10/693,574号明細書(整理番号MSFT−2847)で開示されている発明の主題と関連している。)
個々のディスク容量は、最近10年間では、年にほぼ70%の割合で増大してきている。ムーアの法則は、長年にわたって続いてきた中央演算処理装置(CPU)パワーの途方もない増大を正確に予測した。有線および無線技術は、驚異的な接続性および帯域幅をもたらした。現在のトレンドが続くと仮定すると、数年以内に、平均的なラップトップコンピュータでおおよそ1テラバイト(TB)のストレージを備え、数百万個のファイルを格納するようになり、500ギガバイト(GB)ドライブがあたりまえになることであろう。
消費者は、コンピュータを主に通信と個人情報の編成に使用しており、これは、従来のスケジュール管理(PIM)スタイルのデータであろうとデジタル音楽であるか写真などの媒体であるかに関係しない。デジタルコンテンツの量、および未加工のバイトを格納する能力は、途方もなく増大してきているが、消費者がこのようなデータの編成および統合に使用できる方法は追随できていない。知識労働者は、情報の管理および共有に膨大な時間を費やしており、ある調査では、知識労働者は非生産的情報関連の活動に全時間の15〜25%を費やしていると推測している。また他の調査では、標準的な知識労働者は情報の検索に毎日約2.5時間を費やしていると推測している。
開発者および情報技術(IT)部門は、人々、場所、時間、および出来事などを表す共通ストレージ抽象化用に自データストアを構築することに対し相当の時間と資金を投資している。この結果、作業を重複させるだけでなく、そのようなデータの共通検索または共有のためのメカニズムのない共通データの孤島をいくつも生み出している。今日、Microsoft Windows(登録商標)オペレーティングシステムが稼働するコンピュータ上にいったいいくつのアドレス帳が存在しうるか考えてみよう。電子メールクライアントおよびパーソナルファイナンスプログラムなどの多くのアプリケーションは、個々にアドレス帳を保存し、そのようなそれぞれのプログラムが個別に保持するアドレス帳データのアプリケーション間の共有はほとんどない。その結果、ファイナンスプログラム(Microsoft Moneyのようなプログラム)は、受取人のアドレスを電子メール連絡先フォルダ(Microsoft Outlookが備えているようなフォルダ)に保持されているアドレスと共有しない。実際、多くのユーザは、複数のデバイスを持ち、論理的に、そのパーソナルデータをそれら自体の間で同期させ、また携帯電話からMSNおよびAOLなどの商業サービスにいたるまで、様々な追加ソースにまたがって同期させなければならないが、共有されているドキュメントの協働は、電子メールメッセージにドキュメントを添付することにより大半が行われている、つまり、手作業で、しかも非効率的に行われている。
このようなコラボレーションの欠落の理由の1つは、コンピュータシステム内に情報を編成する伝統的なアプローチは、ファイル−フォルダ/ディレクトリベースのシステム(「ファイルシステム」)を使用し、複数のファイルを格納するために使用される記憶媒体の物理的編成の抽象化に基づいて複数のファイルをフォルダのディレクトリ階層に編成することを中心に機能していることである。1960年代に開発されたMulticsオペレーティングシステムは、初めてファイル、フォルダ、およびディレクトリを使用してオペレーティングシステムレベルでデータの格納可能単位を管理したことで高い評価を得ている。特に、Multicsはファイルの階層内で記号アドレスを使用し(それによってファイルパスという概念を導入)、ファイルの物理的アドレスはユーザ(アプリケーションおよびエンドユーザ)に対し透過的でなかった。このファイルシステムは、全体として、どの個別ファイルのファイル形式についても意識しておらず、ファイル間の関係は、オペレーティングシステムレベル(つまり、階層内のファイルの場所以外)で重要でないとみなされていた。Multicsの出現以来、格納可能なデータは、これまで、オペレーティングシステムレベルでファイル、フォルダ、およびディレクトリに編成されてきた。これらのファイルは、一般に、ファイルシステムにより保持されている特殊ファイルで具現化されたファイル階層自体(「ディレクトリ」)を含む。このディレクトリは、次に、ディレクトリ内の他のファイルおよび階層内のそのようなファイルのノード位置のすべてに対応するエントリのリストを保持する(ここでは、フォルダと呼ばれる)。このようなものは、約40年間最新であった。
しかし、コンピュータ物理的ストレージシステム内に置かれている情報の妥当な表現を実現しながら、それにもかかわらずファイルシステムは、その物理的ストレージシステムの抽象化であり、したがって、それらのファイルの利用にはユーザの操作内容(コンテキストを持つユニット、特徴、および他のユニットとの関係)とオペレーティングシステムが備える内容(ファイル、フォルダ、およびディレクトリ)との間のあるレベルの指示(解釈)を必要とする。したがって、ユーザ(アプリケーションおよび/またはエンドユーザ)には選択権がないが、そうすることが不効率であり、不整合であり、または他の何らかの形で望ましくない場合でも、情報のユニットをファイルシステム構造に強制する。さらに、既存のファイルシステムは、個別ファイルに格納されているデータの構造についてはほとんど関知せず、このため、情報のほとんどは、それらを書いたアプリケーションにしかアクセス(理解)できないファイル内にロックアップされたままとなる。その結果、情報の概要説明、および情報管理するためのメカニズムに対するこのような欠損により、個別の保管場所の間で共有するデータがほとんどないままデータの保管場所を作成することになる。例えば、多くのパーソナルコンピュータ(PC)ユーザは、ファイル編成はPCユーザにとってかなり難しい作業であるため、あるレベルで−例えば、Outlook Contacts、オンライン口座アドレス、Windows(登録商標)Address Book、Quicken Payees、およびインスタントメッセージング(IM)の仲間リスト−やり取りする人々に関する情報を格納する5つを超える異なるストアを持つ。ほとんどの既存のファイルシステムではファイルおよびフォルダの編成にネストされたフォルダメタファを使用しているため、ファイルの個数が増えると、柔軟で効率的な編成形式を維持するために要する労力は相当きついものとなる。このような状況では、単一ファイルの複数の分類があると非常に有益であるが、しかし、既存ファイルシステム内のハードまたはソフトリンクを使用することは厄介であり、維持も困難である。
過去には、ファイルシステムの欠点をなくそうとする試みが何回かあったがうまくいかなかった。それらの以前の試みのうちいくつかは、連想メモリを利用し、データを物理アドレスではなく内容でアクセスできるメカニズムを実現しようとした。しかし、連想メモリはキャッシュおよびメモリ管理ユニットなどのデバイスによる小規模な利用については有用であることが実証されたが、物理的記憶媒体などのデバイスでの大規模な利用は様々な理由からまだ可能でないため、こした努力は成功しておらず、したがって、このような解決策はただ単に存在していない。オブジェクト指向データベース(OODB)システムを使用した他の試みもなされているが、これらの試みは、強いデータベース特性とよい非ファイル表現を特徴としており、ファイル表現の取り扱いでは効果的でなく、ハードウェア/ソフトウェアインターフェースのシステムレベルでのファイルおよびフォルダベースの階層構造の速度、効率、および簡潔さを再現することも可能でない。SmallTalk(およびその派生言語)を使用する試みなどの他の取り組みは、ファイルおよび非ファイル表現の取り扱いではきわめて効果的であることが実証されたが、様々なデータファイルの間に存在する関係を効率よく編成し、利用するために必要なデータベース機能を欠いており、したがって、そのようなシステムの全体的効率は許容できないものであった。さらにBeOSを使用する他の試み(および他のそのようなオペレーティングシステム研究)は、必要なデータベース機能をいくつか備えておりファイルを適切に表現できるにもかかわらず、非ファイル表現を取り扱うのには不適当である−従来のファイルシステムの中心的な欠点と同じ欠点−ことを実証した。
データベース技術は、同様の難題が存在するもう1つの技術分野である。例えば、リレーショナルデータベースモデルは大きな商業的成功を収めたが、実際には、独立系ソフトウェアベンダ(ISV)は、一般に、リレーショナルデータベースのソフトウェア製品(Microsoft SQL Server)に用意されている機能のわずかな部分を利用している。その代わりに、そのような製品とのアプリケーションの相互作用のほとんどは、単純な「読み取る」と「書き込む」の形態である。これに対しすぐにわかる理由−プラットフォームまたはデータベースがわからないなど−が多数占めるが、気づかれないことが多い重要な理由の1つは、データベースは、必ずしも、大手ビジネスアプリケーションベンダが本当に必要とする的確な抽象化を行わないということである。例えば、現実世界には、「顧客」または「注文」(それら自身の中のアイテム、またそれら自身のアイテムとして注文の埋め込まれた「ラインアイテム」とともに)「アイテム」という概念があるが、リレーショナルデータベースはテーブルおよび行に関してしか認識しない。その結果、アプリケーションは、(例えば)アイテムレベルでの整合性、ロッキング、セキュリティ、および/またはトリガの側面を持つことが望ましいかもしれないが、一般的には、データベースはこれらの機能をテーブル/行のレベルでしか備えていない。これは、それぞれのアイテムがデータベースのあるテーブル内の単一行にマッピングされる場合にうまく機能する可能性があるが、複数のラインアイテムの注文の場合、アイテムが実際に複数のテーブルにマッピングされる理由があり得、それがその場合であれば、単純なリレーショナルデータベースシステムではまったく正しい抽象化を行わない。その結果、アプリケーションは、それらの基本的抽象化を実現するためにデータベースの上にロジックを構築しなければならない。つまり、基本的リレーショナルモデルは、基本的にリレーショナルモデルはアプリケーションとストレージシステムとの間のあるレベルの間接性を必要とするため、高水準のアプリケーションが容易に開発可能であるデータを格納するのに十分なプラットフォームを提供しない−データの意味構造は、いくつかの場合でのみアプリケーション内で可視とすることが可能である。いくつかのデータベースベンダが、高水準の機能をその製品に組み込んでいる−オブジェクトリレーショナル機能、新しい組織化可能モデルなどを備える−が、どれも、必要な種類の包括的ソリューションを実現していない、というのも、本当に包括的なソリューションとは、有用なドメイン抽象化(「Persons」、「Locations」、「Events」など)に対し両方とも有用なデータモデル抽象化(「Items」、「Extensions」、「Relationships」など)を実現するものだからである。
既存のデータストレージ(data storage)およびデータベース技術における前記の欠点に関して、コンピュータシステム内のデータのすべての型を編成し、検索し、共有する能力を高めた新しいストレージプラットフォーム−既存のファイルシステムおよびデータベースシステムを超えてデータプラットフォームを拡張し拡大する、すべての型のデータを格納するように設計されているストレージプラットフォーム−が必要である。本発明は、本明細書に参照により前の方に組み込まれている関連する発明とともに、この要求条件を満たす。
WinFS Sync Adapter API spec [SADP] WinFS Sync Controller API [SCTRL] spec
以下の概要では、参照により前の方で本明細書に組み込まれている関連する発明(「関連する発明」)の背景状況において説明されている発明の様々な態様の概要を述べる。この概要は、本発明の重要な態様のすべてを網羅的に説明することも、また本発明の範囲を定めることも意図していない。むしろ、この概要は、以下の詳細な説明および図面の導入部として使用されることを意図している。
本発明は、関連する発明とともに、トータルとして、データの編成、検索、および共有のためのストレージプラットフォームを対象とする。本発明のストレージプラットフォームは、既存のファイルシステムおよびデータベースシステムを超えるデータストレージの概念を拡張し、広げるものであり、構造化、非構造化、または半構造化データを含むすべての型のデータ用のストアとなるように設計されている。
本発明のストレージプラットフォームは、データベースエンジン上に実装されたデータストアを含む。データベースエンジンは、オブジェクトリレーショナルの拡張機能(object relational extensions)を備えるリレーショナルデータベースエンジンを含む。データストアは、データの編成、検索、共有、同期、およびセキュリティをサポートするデータモデルを実装する。特定の型のデータがスキーマ内に記述されており、プラットフォームは新しい型のデータ(本質的に、スキーマにより実現される基本型の子型)を定義するためスキーマの集合を拡張するメカニズムを備える。同期処理機能は、ユーザまたはシステム間のデータの共有を円滑にする。ファイルシステム風の機能が用意され、これにより、そのような従来のファイルシステムの制限のない既存のファイルシステムとのデータストアの相互運用性を実現できる。変更追跡メカニズムは、データストアに対する変更追跡の機能を備える。ストレージプラットフォームは、さらに、アプリケーションからストレージプラットフォームの前記の機能のすべてにアクセスし、スキーマで記述されているデータにアクセスするための一組のアプリケーションプログラムインターフェースを備える。
データストアにより実装されるデータモデルは、アイテム、要素、および関係に関してデータストレージのユニットを定義する。アイテムは、データストアに格納可能なデータの1つのユニットであり、1つまたは複数の要素および関係を含むことができる。要素は、1つまたは複数のフィールドを含む型のインスタンスである(ここではプロパティとも呼ばれる)。関係は、2つのアイテムの間のリンクである。(本明細書で使用されているように、これらの用語および他の特定の用語は、極めて密接に使用される他の用語から分けるため原文の英語では先頭文字が大文字にされている場合があるが、何であれ英語で先頭が大文字の用語は例えば「Item」とし、英語で大文字でないときの同じ用語、例えば、「item」は日本語に訳してアイテムとするが、区別する意図はなく、そのような区別は想定されるべきでも、暗黙のうちに含まれるべきでもない)。
コンピュータシステムは、さらに、それぞれのItemがハードウェア/ソフトウェアインターフェースシステムにより操作することができる情報の離散的格納可能ユニットを構成する複数のItems、前記Itemsに対する組織構造を構成する複数のItem Folders、およびそれぞれのItemが少なくとも1つのItem Folderに属し、複数のItem Foldersに属す場合もある、複数のItemsを操作するためのハードウェア/ソフトウェアインターフェースシステムを備える。
ItemまたはItemのプロパティ値のいくつかは、永続的ストアから派生されるのとは反対に動的に計算することができる。つまり、ハードウェア/ソフトウェアインターフェースシステムは、Itemを格納する必要はなく、Itemsの現在の集合を列挙する機能またはストレージプラットフォームの識別子(アプリケーションプログラミングインターフェースつまりAPIを説明するセッションでさらに詳しく説明する)が与えられた場合のItemを取り出す機能などのいくつかのオペレーションがサポートされる−例えば、Itemは、携帯電話の現在位置または温度センサ上の温度読み取り値とすることが可能である。ハードウェア/ソフトウェアインターフェースシステムは、複数のItemsを操作し、さらに、ハードウェア/ソフトウェアインターフェースシステムにより管理される複数のRelationshipsにより相互接続される複数のItemsを含むことができる。
コンピュータシステムのハードウェア/ソフトウェアインターフェースシステムは、さらに、前記ハードウェア/ソフトウェアインターフェースシステムが理解し、所定の予測可能な方法で直接処理することができるコアItemsの集合を定義するコアスキーマを備える。複数のItemsを操作するために、コンピュータシステムは、ハードウェア/ソフトウェアインターフェースシステムレベルで、前記複数のItemsと複数のRelationshipsとを相互接続し、前記Relationshipsを管理する。
ストレージプラットフォームのAPIは、ストレージプラットフォームスキーマの集合で定義されているそれぞれのアイテム、アイテム拡張、および関係に対するデータクラスを用意する。さらに、アプリケーションプログラミングインターフェースは、データクラスに対するビヘイビアの共通の集合を定義し、データクラスとともに、ストレージプラットフォームAPIの基本プログラミングモデルを提供するフレームワーククラスの集合を実現する。ストレージプラットフォームAPIは、アプリケーションプログラマを基礎のデータベースエンジンのクエリ言語の詳細から分離する形で、データストア内のアイテムの様々なプロパティに基づいてアプリケーションプログラマがクエリを形成するために使用できる簡略化されたクエリモデルを備える。ストレージプラットフォームAPIは、さらに、アプリケーションプログラムによりアイテムに加えられた変更を集めてから、それらをデータストアが実装されているデータベースエンジン(または何らかの種類のストレージエンジン)により要求される正しい更新に編成する。これにより、アプリケーションプログラマは、APIへのデータストア更新の複雑さを任せたまま、メモリ中のアイテムに変更を加えることができる。
本発明のストレージプラットフォームでは、共通のストレージ基盤および図式化されたデータを通じて、より効率的なアプリケーション開発を消費者、知識労働者、および企業向けに行うことができる。これは、データモデルに固有の機能を利用可能にするだけでなく、既存のファイルシステムおよびデータベースアクセス方法も包含し、拡張する機能豊富な拡張可能アプリケーションプログラミングインターフェースを備える。
相互関係のある発明のこの包括的構造の一部として(「発明を実施するための最良の形態」のセクションIIで詳しく説明する)、本発明は、特に、同期スキーマを対象とする(「発明を実施するための最良の形態」のセクションIIIで詳しく説明する)。本発明の他の特徴および利点は、本発明の詳細な説明および付属の図面から明白になるであろう。
前述の概要は、本発明の以下の詳細な説明とともに、付属の図面を参照しつつ読むとよく理解できる。本発明を例示する目的のために、図面には、本発明の様々な態様の実施例が示されているが、本発明は、開示されている特定の方法および手段に限定されない。図面は以下で説明される。
目次
I.はじめに
A.コンピューティング環境例
B.従来のファイルベースのストレージ
II.データの編成、検索、および共有のためのWINFSストレージプラットフォーム
A.用語
B.ストレージプラットフォームの概要
C.データモデル
1.Items
2.Itemの識別
3.Item FoldersおよびCategories
4.Schemas
a)Base Schema
b)Core Schema
5.関係
a)関係の宣言
b)保持関係
c)埋め込み関係
d)参照関係
e)規則と制約条件
f)関係の順序付け
6.拡張性
a)アイテム拡張
b)NestedElement型の拡張
D.データベースエンジン
1.UDTを使用したデータストアの実装
2.アイテムのマッピング
3.拡張マッピング
4.ネストされている要素のマッピング
5.オブジェクト識別
6.SQLオブジェクトの命名規則
7.列の命名規則
8.検索ビュー
a)アイテム
(1)マスターアイテム検索ビュー
(2)型付きアイテム検索ビュー
b)アイテム拡張
(1)マスター拡張検索ビュー
(2)型付き拡張検索ビュー
c)ネストされている要素
d)関係
(1)マスター関係検索ビュー
(2)関係インスタンス検索ビュー
9.更新
10.変更追跡&ツームストーン
a)変更追跡
(1)「マスター」検索ビューでの変更追跡
(2)「型付き」検索ビューでの変更追跡
b)ツームストーン
(1)アイテムツームストーン
(2)拡張ツームストーン
(3)関係ツームストーン
(4)ツームストーンのクリーンアップ
11.ヘルパAPIおよび関数
a)関数[System.Storage].GetItem
b)関数[System.Storage].GetExtension
c)関数[System.Storage].GetRelationship
12.メタデータ
a)スキーマメタデータ
b)インスタンスメタデータ
E.セキュリティ
F.通知および変更追跡
G.従来のファイルシステムの相互運用性
H.ストレージプラットフォームAPI
III.同期API
A.同期の概要
1.ストレージプラットフォームとストレージプラットフォームとの間の同期処理
a)同期(Sync)制御アプリケーション
b)スキーマ注釈
c)同期構成
(1)コミュニティフォルダ−マッピング
(2)プロファイル
(3)スケジュール
d)競合回避処理
(1)競合検出
(a)知識ベースの競合
(b)制約ベースの競合
(2)競合処理
(a)自動競合解決
(b)競合ログ作成
(c)競合の検査および解決
(d)レプリカの収束および競合解決の伝播
2.非ストレージプラットフォームデータストアの同期処理
a)同期サービス
(1)Change Enumeration
(2)Change Application
(3)Conflict Resolution
b)アダプタの実装
3.セキュリティ
4.管理可能性
B.同期処理APIの概要
1.一般的用語
2.同期処理APIの主要事項
C.同期処理APIサービス
1.変更列挙
2.変更適用
3.サンプルコード
4.API同期処理のメソッド
IV.結論
I.はじめに
本発明の主題は、法的要件を満たすように特異性とともに説明されている。しかし、説明自体は、本発明のスコープを制限することを意図されていない。むしろ、発明者は、主張されている主題は、他の現在または将来の技術とともに、本明細書で説明されている活動または要素と類似しているが異なるステップまたはステップの組合せを含むように、他の方法でも具現化されうることを考察した。さらに、「ステップ」という用語は、本明細書では、採用されている方法の異なる要素を暗示するために使用される場合があるが、この用語は、個々のステップの順序が明示的に説明されていない場合、かつ説明されている場合を除き、本明細書で開示されている様々なステップ間の特定の順序を暗示するものとして解釈すべきではない。
A.コンピューティング環境例
本発明の数多くの実施形態は、コンピュータ上で実行することができる。図1および以下の説明は、本発明を実施できる適当なコンピューティング環境について簡潔に述べた一般的な説明である。必要というわけではないが、本発明の様々な態様は、クライアントワークステーションまたはサーバなどのコンピュータにより実行される、プログラムモジュールなどの、コンピュータ実行可能命令の一般的文脈において説明することができる。一般に、プログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。さらに、本発明は、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な家電製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータなどを含む、他のコンピュータシステム構成を使用して実施できる。また、本発明は、通信ネットワークを通じてリンクされているリモート処理デバイスによりタスクが実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境では、プログラムモジュールは、ローカルおよびリモートの両方のメモリ記憶デバイス内に配置されうる。
図1に示されているように、汎用コンピューティングシステム例は、処理ユニット21、システムメモリ22、およびシステムメモリを含む様々なシステムコンポーネントを処理ユニット21に結合するシステムバス23を備える、従来のパーソナルコンピュータ20などを含む。システムバス23は、メモリバスまたはメモリコントローラ、周辺機器バス、および様々なバスアーキテクチャを使用するローカルバスを含む数種類のバス構造のうちのいずれでもよい。システムメモリは、読み取り専用メモリ(ROM)24およびランダムアクセスメモリ(RAM)25を含む。起動時などにパーソナルコンピュータ20内の要素間の情報伝送を助ける基本ルーチンを含む基本入出力システム26(BIOS)は、ROM 24に格納される。パーソナルコンピュータ20は、さらに、図に示されていないハードディスクへの読み書きを行うためのハードディスクドライブ27、取り外し可能磁気ディスク29への読み書きを行うための磁気ディスクドライブ28、およびCD−ROMまたはその他の光媒体などの取り外し可能光ディスク31への読み書きを行うための光ディスクドライブ30を備える。ハードディスクドライブ27、磁気ディスクドライブ28、および光ディスクドライブ30は、ハードディスクドライブインターフェース32、磁気ディスクドライブインターフェース33、および光ドライブインターフェース34によりそれぞれシステムバス23に接続される。ドライブおよび関連コンピュータ可読媒体は、パーソナルコンピュータ20用のコンピュータ可読命令、データ構造体、プログラムモジュール、およびその他のデータを格納する不揮発性記憶装置を実現する。本発明で説明されている環境例ではハードディスク、取り外し可能磁気ディスク29、および取り外し可能光ディスク31を採用しているが、当業者であれば、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)などのコンピュータからアクセス可能なデータを格納できる他のタイプのコンピュータ可読媒体もこの動作環境で使用できることを理解するであろう。同様に、この環境は、さらに、熱感知器およびセキュリティまたは火災警報装置などの多くのタイプの監視デバイス、およびその他の情報源を含むことができる。
オペレーティングシステム35、1つまたは複数のアプリケーションプログラム36、その他のプログラムモジュール37、およびプログラムデータ38を含む、多くのプログラムモジュールは、ハードディスク、磁気ディスク29、光ディスク31、ROM 24、またはRAM 25に格納されることができる。ユーザはキーボード40およびポインティングデバイス42などの入力デバイスを通じてパーソナルコンピュータ20にコマンドおよび情報を入力することができる。他の入力デバイス(図に示されていない)としては、マイク、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらの入力デバイスやその他の入力デバイスは、システムバスに結合されているシリアポートインターフェース46を介して処理ユニット21に接続されることが多いが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)などの他のインターフェースにより接続されることもできる。モニタ47またはその他の種類の表示デバイスも、ビデオアダプタ48などのインターフェースを介してシステムバス23に接続される。パーソナルコンピュータは、通常、モニタ47の他に、スピーカおよびプリンタなど、他の周辺出力装置(図に示されていない)を備える。図1のシステム例は、さらに、ホストアダプタ55、SCSI(Small Computer System Interface)バス56、およびSCSIバス56に接続された外部記憶デバイス62も含む。
パーソナルコンピュータ20は、リモートコンピュータ49などの1つまたは複数のリモートコンピュータへの論理接続を使用してネットワーク接続環境で動作することができる。リモートコンピュータ49は、他のパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイス、またはその他の共通ネットワークノードでもよく、通常は、パーソナルコンピュータ20に関係する上述の要素の多くまたはすべてを含むが、メモリ記憶デバイス50だけが図1に示されている。図1で説明されている論理接続は、ローカルエリアネットワーク(LAN)51とワイドエリアネットワーク(WAN)52を含む。このようなネットワーキング環境は、オフィス、企業全体にわたるコンピュータネットワーク、イントラネット、およびインターネットでは一般的である。
LANネットワーキング環境で使用される場合、パーソナルコンピュータ20は、ネットワークインターフェースまたはアダプタ53を介してLAN 51に接続される。WANネットワーキング環境で使用される場合、パーソナルコンピュータ20は、通常、モデム54またはインターネットなどのワイドエリアネットワーク52上で通信を確立するためのその他の手段を備える。モデム54は、内蔵でも外付けでもよいが、シリアルポートインターフェース46を介してシステムバス23に接続される。ネットワーク接続環境では、パーソナルコンピュータ20またはその一部に関して示されているプログラムモジュールは、リモートメモリ記憶デバイスに格納されうる。図に示されているネットワーク接続は実施例であり、コンピュータ間の通信リンクを確立するのに他の手段が使用可能であることは理解されるであろう。
図2のブロック図に例示されているように、コンピュータシステム200は、大まかに言って、ハードウェアコンポーネント202、ハードウェア/ソフトウェアインターフェースシステムコンポーネント204、およびアプリケーションプログラムコンポーネント206(本明細書では状況に応じて「ユーザコンポーネント」または「ソフトウェアコンポーネント」とも呼ぶ)の3つのコンポーネントグループに分けることができる。
コンピュータシステム200の様々な実施形態において、図1を再び参照すると、ハードウェアコンポーネント202は、中央演算処理装置(CPU)21、メモリ(ROM 24およびRAM 25の両方)、基本入出力システム(BIOS)26、およびとりわけキーボード40、マウス42、モニタ47、および/またはプリンタ(図に示されていない)などの様々な入出力(I/O)デバイスを備えることができる。ハードウェアコンポーネント202は、コンピュータシステム200用の基本的な物理的インフラストラクチャを備える。
アプリケーションプログラムコンポーネント206は、限定はしないが、コンパイラ、データベースシステム、ワードプロセッサ、ビジネスプログラム、ビデオゲームなどを含む、様々なソフトウェアプログラムを備える。アプリケーションプログラムは、様々なユーザ(マシン、他のコンピュータシステム、および/またはエンドユーザ)向けに問題を解決し、解決策を提供し、データを処理するためコンピュータ資源を利用するための手段を備える。
ハードウェア/ソフトウェアインターフェースシステムコンポーネント204は、それ自体、ほとんどの場合、シェルおよびカーネルを含むオペレーティングシステムを備える(および、いくつかの実施形態では、そのようなオペレーティングシステムのみで構成することができる)。「オペレーティングシステム」(OS)は、アプリケーションプログラムとコンピュータハードウェアとの間の媒介として動作する特別なプログラムである。ハードウェア/ソフトウェアインターフェースシステムコンポーネント204は、さらに、仮想マシンマネージャ(VMM)、共通言語ランタイム(CLR)またはその機能的等価物、Java(登録商標)仮想マシン(JVM)またはその機能的等価物、またはコンピュータシステム内のオペレーティングシステムの代わりとなる、またはそれへの追加となる他のそのようなソフトウェアコンポーネントを含むこともできる。ハードウェア/ソフトウェアインターフェースシステムの目的は、ユーザがアプリケーションプログラムを実行できるような環境を用意することである。ハードウェア/ソフトウェアインターフェースシステムの目標は、コンピュータシステムを使いやすくするだけでなく、コンピュータハードウェアを効率的な方法で利用できるようにすることである。
ハードウェア/ソフトウェアインターフェースシステムは、一般に、起動時にコンピュータシステムにロードされ、それ以降、コンピュータシステム内のすべてのアプリケーションプログラムを管理する。アプリケーションプログラムは、アプリケーションプログラムインターフェース(API)を介してサービスを要求することによりハードウェア/ソフトウェアインターフェースシステムとやり取りをする。一部のアプリケーションプログラムでは、エンドユーザはコマンド言語またはグラフィカルユーザインターフェース(GUI)などのユーザインターフェースを介してハードウェア/ソフトウェアインターフェースシステムとやり取りすることができる。
ハードウェア/ソフトウェアインターフェースシステムは、従来、アプリケーションに対し様々なサービスを実行するものである。複数のプログラムが同時に実行できるマルチタスクのハードウェア/ソフトウェアインターフェースシステムにおいて、ハードウェア/ソフトウェアインターフェースシステムは、どのアプリケーションをどのような順序で実行し、それぞれのアプリケーションについて次のアプリケーションに切り換えるまでにどれだけの時間を許すべきかを決定する。ハードウェア/ソフトウェアインターフェースシステムは、さらに、複数のアプリケーション間で内部メモリの共有を管理し、さらに、ハードディスク、プリンタ、およびダイアルアップポートなどの接続されているハードウェアデバイスへの入力およびそこからの出力を処理する。ハードウェア/ソフトウェアインターフェースシステムは、さらに、オペレーションのステータスおよび発生した可能性のあるエラーに関するメッセージをそれぞれのアプリケーション(および、場合によってはエンドユーザ)に送信する。ハードウェア/ソフトウェアインターフェースシステムは、さらに、バッチジョブ(例えば、印刷)の管理の負担を取り除き、開始アプリケーションがこのような作業から解放され、他の処理および/またはオペレーションを再開できるようにすることもできる。並列処理機能を備えることができるコンピュータでは、ハードウェア/ソフトウェアインターフェースシステムは、さらに、プログラムを分割して一度に複数のプロセッサ上で実行させることも管理する、
ハードウェア/ソフトウェアインターフェースシステムのシェル(本明細書では単に「シェル」と呼ぶ)は、ハードウェア/ソフトウェアインターフェースシステムとの対話型エンドユーザインターフェースである。(シェルは、「コマンドインタプリタ」と呼ばれたり、オペレーティングシステムでは、「オペレーティングシステムシェル」と呼ばれたりもする。)シェルは、アプリケーションプログラムおよび/またはエンドユーザにより直接アクセス可能なハードウェア/ソフトウェアインターフェースシステムの外側の層である。シェルとは対照的に、カーネルはハードウェアコンポーネントと直接やり取りするハードウェア/ソフトウェアインターフェースシステムの一番内側の層である。
本発明の多数の実施形態は、コンピュータ化システムに特によく適していると考えられるが、本明細書では、本発明をそのような実施形態に限定することを一切意図していない。それどころか、本明細書で使用されているように、「コンピュータシステム」という用語は、情報を格納し処理することができ、および/または格納されている情報を使用してデバイス自体のビヘイビアまたは実行を、そのようなデバイスがその性質上電子デバイスであろうと、機械デバイスであろうと、論理デバイスであろうと、仮想デバイスであろうと関係なく、制御できることができるありとあらゆるデバイスを包含することが意図されている。
B.従来のファイルベースのストレージ
ほとんどの今日のコンピュータシステムでは、「ファイル」は、ハードウェア/ソフトウェアインターフェースシステムだけでなくアプリケーションプログラム、データセットなどをも含むことができる格納可能な情報のユニットである。現代的なすべてのハードウェア/ソフトウェアインターフェースシステム(Windows(登録商標)、Unix(登録商標)、Linux、Mac OS、仮想マシンシステムなど)では、ファイルは、ハードウェア/ソフトウェアインターフェースシステムにより操作可能な情報(例えば、データ、プログラムなど)の基本的に離散的(格納可能および取り出し可能な)ユニットである。ファイルのグループは、「フォルダ」単位で一般的には編成される。Microsoft Windows(登録商標)、Macintosh OS、および他のハードウェア/ソフトウェアインターフェースシステムは、フォルダとは、取り出し可能、移動可能、そして単一の情報ユニットとして他の何らかの手段により操作できるファイルのコレクションである。これらのフォルダは、次に、「ディレクトリ」(以下で詳述する)と呼ばれるツリーベースの階層型配列で編成される。DOS、z/OS、およびほとんどのUnix(登録商標)ベースのオペレーティングシステムなど他のいくつかのハードウェア/インターフェースシステムでは、「ディレクトリ」および/または「フォルダ」という用語は交換して使用することができ、また以前のAppleコンピュータシステム(例えば、Apple IIe)ではディレクトリの代わりに「カタログ」という用語を使用していたが、本明細書で使用されているように、これらの用語はすべて、同義語であり交換可能であるとみなし、階層型情報記憶構造およびそのフォルダおよびファイルコンポーネントに対する他のすべての相当する用語および参照を含むことを意図している。
従来、ディレクトリ(別名、フォルダのディレクタ)は、ツリーベースの階層構造であり、ファイルは複数のフォルダにグループ化され、フォルダは、さらに、ディレクトリツリーを含む相対的ノード位置に応じて配列される。例えば、図2Aに例示されているように、DOSベースのファイルシステムのベースフォルダ(または「ルートディレクトリ」)212は、複数のフォルダ214を含むことができ、それぞれのフォルダは、さらに、追加フォルダ(その特定のフォルダの「サブフォルダ」として)216を含むことができ、それぞれ、さらに、追加フォルダ218を含むことができ、というように無限に続けることができる。これらのフォルダはそれぞれ、1つまたは複数のファイル220を保持できるが、ハードウェア/ソフトウェアインターフェースシステムレベルでは、フォルダ内の個々のファイルは、ツリー階層内のその位置以外共通するものは何も持たない。ファイルをフォルダ階層に編成するこのアプローチは、それらのファイルを格納するために使用される標準的な記憶媒体(例えば、ハードディスク、フロッピー(登録商標)ディスク、CD−ROMなど)の物理的構成を間接的に反映することは驚くことではない。
前記に加えて、それぞれのフォルダは、そのサブフォルダおよびそのファイル用のコンテナである−つまり、それぞれのフォルダはそのサブフォルダおよびファイルを所有するということである。例えば、フォルダがハードウェア/ソフトウェアインターフェースシステムにより削除されると、そのフォルダのサブフォルダおよびファイルも削除される(それぞれのサブフォルダの場合、さらにその所有するサブフォルダおよびファイルを再帰的に含む)。同様に、それぞれのファイルは、一般的に、1つのフォルダのみにより所有され、ファイルはコピーされ、そのコピーは異なるフォルダに配置されることができるが、ファイルのコピーはそれ自体、オリジナルとの直接の関連を持たない異なる、別のユニットである(例えば、オリジナルのファイルに変更を加えでも、ハードウェア/ソフトウェアインターフェースシステムレベルではそのコピーファイルに反映されない)。この点に関して、したがって、ファイルおよびフォルダは、本質的に特徴として「物理的」であるが、それは、フォルダは物理的コンテナのように取り扱われ、ファイルはそれらのコンテナ内の離散的な別々の物理的要素として取り扱われるからである。
II.データの編成、検索、および共有のためのWINFSストレージプラットフォーム
本発明は、本明細書の前の方で説明したように参照により組み込まれている関連する発明と組み合わせて、データの編成、検索、および共有のためのストレージプラットフォームを対象とするものである。本発明のストレージプラットフォームは、上述の種類の既存のファイルシステムおよびデータベースシステムを超えてデータプラットフォームの概念を拡張し、広げるものであり、Itemsと呼ばれるデータの新しい形態を含む、すべての型のデータ用のストアとなるように設計されている。
A.用語
本明細書で使用されているように、また請求項で使用されているように、以下の用語は以下の意味を持つ。
・ 「Item」は、単純ファイルとは異なり、ハードウェア/ソフトウェアインターフェースシステムシェルによりエンドユーザに対し公開されるすべてのオブジェクトにわたって一般的にサポートされるプロパティの基本集合を持つオブジェクトであるハードウェア/ソフトウェアインターフェースシステムにアクセスできる格納可能情報のユニットである。Itemsは、さらに、新しいプロパティおよび関係を導入することができる機能を含むすべてのItem型にわたって一般的にサポートされるプロパティおよび関係も有する(本明細書の後の方で詳述する)。
・ 「オペレーティングシステム」(OS)は、アプリケーションプログラムとコンピュータハードウェアとの間の媒介として動作する特別なプログラムである。オペレーティングシステムは、ほとんどの場合、シェルおよびカーネルを備える。
・ 「ハードウェア/ソフトウェアインターフェースシステム」は、コンピュータシステム上で実行されるコンピュータシステムおよびアプリケーションの基礎となるハードウェアコンポーネント間のインターフェースとして使用される、ソフトウェア、またはハードウェアとソフトウェアとの組合せである。ハードウェア/ソフトウェアインターフェースシステムは、通常、オペレーティングシステムを備える(いくつかの実施形態では、オペレーティングシステムのみからなる)。ハードウェア/ソフトウェアインターフェースシステムは、さらに、仮想マシンマネージャ(VMM)、共通言語ランタイム(CLR)またはその機能的等価物、Java(登録商標)仮想マシン(JVM)またはその機能的等価物、またはコンピュータシステム内のオペレーティングシステムの代わりとなる、またはそれへの追加となる他のそのようなソフトウェアコンポーネントを含むこともできる。ハードウェア/ソフトウェアインターフェースシステムの目的は、ユーザがアプリケーションプログラムを実行できるような環境を用意することである。ハードウェア/ソフトウェアインターフェースシステムの目標は、コンピュータシステムを使いやすくするだけでなく、コンピュータハードウェアを効率的な方法で利用できるようにすることである。
B.ストレージプラットフォームの概要
図3を参照すると、ストレージプラットフォーム300は、データベースエンジン314上に実装されたデータストア302を備える。一実施形態では、データベースエンジンは、オブジェクトリレーショナルの拡張機能を備えるリレーショナルデータベースエンジンを含む。一実施形態では、リレーショナルデータベースエンジン314は、Microsoft SQL Serverリレーショナルデータベースエンジンを含む。データストア302は、データの編成、検索、共有、同期、およびセキュリティをサポートするデータモデル304を実装する。データの特定の型は、スキーマ340などのスキーマで記述され、ストレージプラットフォーム300は、以下で詳しく説明するように、それらのスキーマを展開するとともに、それらのスキーマを拡張するためのツール346を備える。
データストア302内に実装された変更追跡メカニズム306は、データストアへの変更を追跡する機能を備える。データストア302は、さらに、セキュリティ機能308および格上げ/格下げ機能310も備え、両方とも以下で詳述する。データストア302は、さらに、一組のアプリケーションプログラミングインターフェース312を備え、データストア302の機能を他のストレージプラットフォームコンポーネントおよびそのストレージプラットフォームを利用するアプリケーションプログラム(例えば、アプリケーションプログラム350a、350b、および350c)に公開する。本発明のストレージプラットフォームは、さらに、アプリケーションプログラム350a、350b、および350cなどのアプリケーションプログラムでストレージプラットフォームの前記の機能すべてにアクセスし、スキーマで記述されたデータにアクセスできるようにするアプリケーションプログラミングインターフェース(API)322を備える。ストレージプラットフォームAPI 322は、アプリケーションプログラムにより、OLE DB API 324およびMicrosoft Windows(登録商標)Win32 API 326などの他のAPIと併用することができる。
本発明のストレージプラットフォーム300は、ユーザまたはシステム間でのデータの共有を円滑にする同期サービス330を含む、様々なサービス328をアプリケーションプログラムに提供することができる。例えば、同期サービス330では、データストア302と同じ形式を持つ他のデータストア340との相互運用性とともに、他の形式を持つデータストア342へのアクセスをも可能にすることができる。ストレージプラットフォーム300は、さらに、データストア302とWindows(登録商標)NTFSファイルシステム318などの既存のファイルシステムとデータストア302の相互運用を可能にするファイルシステムの機能をも備える。少なくとも一部の実施形態では、ストレージプラットフォーム320は、さらに、データへの操作を可能にし、また他のシステムとのやり取りを可能にするための追加機能をアプリケーションプログラミングに付加することもできる。これらの機能は、Info Agentサービス334および通知サービス332などの追加サービス328の形態だけでなく、他のユーティリティ336の形態で具現化することができる。
少なくとも一部の実施形態では、ストレージプラットフォームは、コンピュータシステムのハードウェア/ソフトウェアインターフェースシステム内に具現化されるか、またはそのなくてはならない一部を形成する。例えば、限定はしないが、本発明のストレージプラットフォームは、オペレーティングシステム、仮想マシンマネージャ(VMM)、共通言語ランタイム(CLR)またはその機能的等価物、またはJava(登録商標)仮想マシン(JVM)またはその機能的等価物で具現化されるか、またはそのなくてはならない一部を形成することができる。本発明のストレージプラットフォームでは、共通のストレージ基盤および図式化されたデータを通じて、より効率的なアプリケーション開発を消費者、知識労働者、および企業向けに行うことができる。これは、データモデルに固有の機能を利用可能にするだけでなく、既存のファイルシステムおよびデータベースアクセス方法も包含し、拡張する機能豊富な拡張可能プログラミングサーフェスエリアを提供する。
以下の説明では、また様々な図において、本発明のストレージプラットフォーム300は、「WinFS」と呼ぶことができる。しかし、この名称を使用してストレージプラットフォームを指すのは、説明の便宜上のことにすぎず、いかなる点でも限定することを意図されていない。
C.データモデル
本発明のストレージプラットフォーム300のデータストア302は、ストア内に置かれているデータの編成、検索、共有、同期、およびセキュリティをサポートするデータモデルを実装する。本発明のデータモデルでは、「Item」は、ストレージ情報の基本ニットである。このデータモデルは、以下で詳述するが、ItemsおよびItem拡張を宣言し、Items間の関係を確立し、Item FoldersとCategories内にItemsを編成するためのメカニズムを備える。
データモデルは、TypesとRelationshipsという2つのプリミティブなメカニズムに依存している。Typesは、Typeのインスタンスの形態を制御する形式を定める構造である。その形式は、Propertiesの順序集合として表される。Propertyは、与えられたTypeの値または値の集合に対する名前である。例えば、USPostalAddress型は、プロパティStreet、City、Zip、Stateを持つことができ、その中で、Street、City、Stateは型Stringであり、ZipはType Int32型である。Streetプロパティに対し住所は複数の値をとりうるので、Streetは、多値(つまり、値の集合)とすることができる。システムでは、他の型の構成で使用できるいくつかのプリミティブ型を定義している−これらは、String、Binary、Boolean、Int16、Int32、Int64、Single、Double、Byte、DateTime、Decimal、およびGUIDを含む。TypeのPropertiesは、プリミティブ型のどれかまたは(下記のいくつかの制約があるが)構成された型のどれかを使用して定義することができる。例えば、Properties CoordinateとAddressを持つLocation Typeが定義されうるが、Address Propertyは上述のようにType USPostalAddressである。Propertiesは、さらに、必須またはオプションとすることもできる。
Relationshipsは、2つの型のインスタンスの集合同士の間のマッピングとして宣言され、それを表すことができる。例えば、Person Typeとどの人々がどの場所に住んでいるかを定義するLivesAtと呼ばれるLocation Typeとの間のRelationshipを宣言することができる。Relationshipは、1つの名前、2つの終点、つまり、ソース終点とターゲット終点を持つ。Relationshipsは、さらに、プロパティの順序集合を持つこともできる。SourceとTargetの終点は両方ともNameとTypeを持つ。例えば、LivesAt RelationshipはType PersonのOccupantと呼ばれるSourceおよびType LocationのDwellingと呼ばれるTargetを持ち、さらに、居住者がその住居に住んでいた期間を示すプロパティStartDateおよびEndDateを持つ。Personは、長い期間にわたっては、複数の住居に住んでいる場合があり、また住居には複数の住人がいる場合もあり、したがってStartDateおよびEndDate情報を入れる場所として最も可能性の高いのは関係自体であることに注意されたい。
Relationshipsは、終点の型として与えられた型により制約されるインスタンス間のマッピングを定義する。例えば、LivesAt関係は、AutomobileがOccupantである関係とはなりえない、というのもAutomobileはPersonではないからである。
データモデルでは、型の間の子型−親型関係の定義を許容する。BaseType関係とも呼ばれる子型−親型関係は、Type AがType Bに対しBaseTypeならば、BのすべてのインスタンスはAのインスタンスでもあるという場合でなければならないように定義される。これを表現するもう1つの方法は、Bに適合するすべてのインスタンスがさらにAにも適合しなければならないとするものである。例えば、AがType StringのプロパティNameを持つが、BはType Int16のプロパティAgeを持つ場合、Bのインスタンスはどれも、NameとAgeの両方を持たなければならないという結果になる。型階層は、ルートに単一の親型のあるツリーと考えることができる。ルートからの分岐は、第1レベルの子型を定め、このレベルの分岐は、第2レベルの子型を定め、というように、それ自体子型を持たない一番左の子型へ進む。ツリーは、均一な深さとなるように制約されないが、循環を含むことはできない。与えられたTypeは、0個またはそれ以上の子型と0個または1個の親型を持つことができる。与えられたインスタンスは、その型の親型とともに高々1つの型に適合することができる。別の言い方をすると、ツリー内の任意のレベルで与えられたインスタンスについて、そのインスタンスはそのレベルで高々1つの子型に適合することができる。型は、型のインスタンスがさらに型の子型のインスタンスでもなければならない場合にAbstractであるという。
1.Items
Itemは、単純ファイルとは異なり、ストレージプラットフォームによりエンドユーザまたはアプリケーションプログラムに対し公開されるすべてのオブジェクトにわたって一般的にサポートされるプロパティの基本集合を持つオブジェクトである格納可能情報のユニットである。Itemsは、さらに、以下で説明するように、新しいプロパティおよび関係を導入することができる機能を含むすべてのItem型にわたって一般的にサポートされるプロパティおよび関係も有する。
Itemsは、コピー、削除、移動、開く、印刷、バックアップ、リストア、複製などの共通オペレーション用のオブジェクトである。Itemsは、格納し、取り出すことのできるユニットであり、ストレージプラットフォームにより操作される格納可能情報のすべての形態が、Items、Itemsのプロパティ、またはItems間のRelationshipsとして存在し、それぞれについては以下で説明される。
Itemsは、Contacts、People、Services、Locations、Documents(あらゆる種類の)などの現実世界の容易に理解できるデータのユニットを表すことを意図されている。図5Aは、Itemの構造を例示するブロック図である。Itemの未修飾の名前は「Location」である。Itemの修飾名は「Core.Location」であり、これは、このItem構造がCore Schema内のItemの特定の型として定義されることを示している。(Core Schemaは、本明細書の後の方で詳しく説明される。)
Location Itemは、EAddresses、MetropolitanRegion、Neighborhood、およびPostalAddressesを含む複数のプロパティを持つ。それぞれに対するプロパティの特定の型は、プロパティ名の直後に示され、コロン(「:」)でプロパティ名と区切られる。型名の右には、そのプロパティ型について許された値の個数があり、これは角括弧(「[ ]」)の間に示され、コロン(「:」)の右にあるアスタリスク(「」)は、未指定および/または無制限の数(「many」)を示す。コロンの右にある「1」は、高々1つの値がありえることを示す。コロンの左にあるゼロ(「0」)はプロパティがオプションであることを示す(値がまったくあり得ない)。コロンの左にある「1」は、少なくとも1つの値がなければならないことを示す(プロパティは必須である)。NeighborhoodおよびMetropolitanRegionは、両方とも、定義済みのデータ型または「単純型」(また、本明細書では大文字使用でないことにより表される)である、型「nvarchar」(または同等の型)である。しかし、EAddressesおよびPostalAddressesは、それぞれ型EAddressおよびPostalAddressの定義済み型または「複合型」(本明細書では大文字使用で表される)のプロパティである。複合型は、1つまたは複数の単純データ型および/または他の複合型から派生した型である。Itemのプロパティに対する複合型は、さらに、複合型の詳細はそのプロパティを定義するためにイミディエイトItem内にネストされるため「ネストされた要素」も構成し、それらの複合型に関係する情報は、(本明細書の後の方で説明するように、Itemの境界内の)それらのプロパティを持つItemとともに保持される。型付けのこれらの概念は、よく知られており、当業者であれば容易に理解することである。
図5Bは、複合プロパティ型PostalAddressおよびEAddressを例示するブロック図である。PostalAddressプロパティ型は、プロパティ型PostalAddressのItemが0または1つのCity値、0または1つのCountryCode値、0または1つのMailStop値、および任意の数(0から多数)のPostalAddressTypesなどを持つことを予想できるものとして定義する。このようにして、Item内の特定のプロパティに対するデータの形状がこれにより定義される。EAddressプロパティ型も、同様に、示されているとおりに定義される。このApplicationでオプションにより使用されるが、Location Item内の複合型を表すもう1つの方法は、Itemをそこにリストされているそれぞれの複合型の個々のプロパティで描画することである。図5Cは、複合型がさらに記述されるLocation Itemを例示するブロック図である。しかし、この図5C内のLocation Itemのこの代替え表現は図5Aに例示されているのとまったく同じItemに対するものであると理解すべきである。本発明のストレージプラットフォームでは、さらに、サブタイプ化も可能であり、それによって、一方のプロパティ型を他方の子型とすることができる(ただし、一方のプロパティ型は他方の親のプロパティ型のプロパティを継承する)。
プロパティおよびそのプロパティ型と似てはいるが異なる、Itemsは、本質的に、サブタイプ化の対象ともなりうる自Item Typesを表す。つまり、本発明のいくつかの実施形態におけるストレージプラットフォームでは、Itemを他のItemの子型とすることができるということである(それによって、一方のItemは他方の親Itemのプロパティを継承する)。さらに、本発明の様々な実施形態について、すべてのItemはBase Schemaに見られる第1の、基礎的なItem型である「Item」Item型の子型である。(Base Schemaは、さらに、本明細書の後の方で詳しく説明される。)図6Aは、Item、つまりこのInstanceのLocation ItemをBase SchemaにあるItem Item型の子型であるとして例示している。この図面では、矢印は、Location Item(他のすべてのItemsのように)はItem Item型の子型であることを示している。Item Item型は、他のすべてのItemsの派生元である基礎のItemとして、ItemIdおよび様々なタイムスタンプなどの重要なプロパティを多数持ち、それによって、オペレーティングシステムにおいて、すべてのItemsの標準プロパティを定義する。この図では、Item Item型のこれらのプロパティは、Locationにより継承され、それによって、Locationのプロパティになる。
Item Item型から継承されたLocation Itemでプロパティを表す他の方法は、そこにリストされている親Itemから各プロパティ型の個々のプロパティでLocationを描画することである。図6Bは、イミディエイトプロパティに加えて継承型が記述されるLocation Itemを例示するブロック図である。このItemは図5Aに例示されているのと同じItemであるが、この図では、Locationはそのプロパティのすべてとともに例示されており、両方ともイミディエイトであり−この図と図5Aの両方に示されている−継承される−この図に示されているが、図5Aには示されていない−ことに注意し、理解されたい(しかし、図5Aでは、Location ItemがItem Item型の子型であることを矢印で示すことによりそれらのプロパティが参照されている)。
Itemsは、スタンドアロンのオブジェクトであり、そのため、Itemを削除すると、それらのItemsのイミディエイトおよび継承プロパティもすべて削除される。同様に、Itemを取り出した場合に受け取る内容は、Itemおよびそのイミディエイトおよび継承プロパティのすべて(複合プロパティ型に関係する情報を含む)である。本発明のいくつかの実施形態では、特定のItemを取り出す際にプロパティの部分集合を要求することが可能であるが、そのような実施形態の多くの既定として、取り出したときにイミディエイトおよび継承プロパティのすべてをItemに供給する。さらに、Itemsのプロパティは、新しいプロパティをそのItemの型の既存のプロパティに追加することにより拡張することもできる。これらの「拡張」は、これ以降、Itemの本物のプロパティであり、そのItem型の子型は、自動的に、拡張プロパティを含むことができる。
Itemの「境界」は、そのプロパティ(複合プロパティ型、拡張などを含む)により表される。Itemの境界は、さらに、コピー、削除、移動、作成などのItemに対し実行されるオペレーションの限界も表す。例えば、本発明のいくつかの実施形態では、Itemがコピーされる場合、そのItemの境界内にあるものもすべてコピーされる。Item毎に、境界は以下を包含する。
・ ItemのItem TypeおよびItemが他のItemの子型の場合(すべてのItemsがBase Schema内の単一ItemおよびItem Typeから派生する本発明のいくつかの実施形態の場合のように)は、任意の適用可能な子型情報(つまり、親Item Typeに関係する情報)。コピー元のオリジナルのItemが他のItemの子型の場合、そのコピーも、その同じItemの子型ともなりうる。
・ もしあればItemの複合型プロパティおよび拡張。オリジナルのItemが複合型のプロパティ(ネイティブまたは拡張)を持つ場合、そのコピーも同じ複合型を持ちうる。
・ 「所有関係」に関するItemのレコード、つまり、現在のItem(「Owning Item」)によって所有される他のItems(「Target Items」)のItemの自リスト。これは、以下で詳しく説明する、Item Foldersに関して特に関連性があり、規則では、すべてのItemsは少なくとも1つのItem Folderに属していなければならないことを以下で規定している。さらに、埋め込まれているアイテム−以下でさらに詳しく説明する−に関しては、埋め込みアイテムは、コピー、削除などのオペレーションに対して埋め込まれているItemの一部と考えられる。
2.Itemの識別
Itemsは、ItemIDを持つ大域的アイテム空間(global items space)内で一意に識別される。Base.Item型は、ItemのIDを格納する型GUIDのItem IDフィールドを定義する。Itemは、データストア302内にちょうど1つのIDがなければならない。
アイテム参照は、Itemを特定し、識別するための情報を格納するデータ構造体である。データモデルでは、抽象型は、すべてのアイテム参照型の派生元のItemReferenceという名前を持つものとして定義される。ItemReference型は、Resolveという名前の仮想メソッドを定義する。Resolveメソッドは、ItemReferenceを解決して、Itemを返す。このメソッドは、参照が与えられているItemを取り出す関数を実装するItemReferenceの具体的な子型によりオーバーライドされる。Resolveメソッドは、ストレージプラットフォームAPI 322の一部として呼び出される。
ItemIDReferenceはItemReferenceの子型である。これは、LocatorおよびItemIDフィールドを定義する。Locatorフィールドではアイテム領域に名前を付ける(つまり、識別する)。これは、Locatorの値をアイテム領域に解決できるロケータ解決メソッドにより処理される。ItemIDフィールドは型ItemIDである。
ItemPathReferenceは、LocatorおよびPathフィールドを定義するItemReferenceの特殊化である。Locatorフィールドは、アイテム領域を識別する。これは、Locatorの値をアイテム領域に解決できるロケータ解決メソッドにより処理される。Pathフィールドは、Locatorにより与えられるアイテム領域をルートとするストレージプラットフォーム名前空間内の(相対)パスを含む。
この型の参照は、setオペレーションで使用することはできない。参照は、一般に、パス解決プロセスを通じて解決されなければならない。ストレージプラットフォームAPI 322のResolveメソッドは、この機能を備える。
上述の参照形態は、図11に例示されている参照型階層を通じて表される。これらの型から継承する追加参照型は、スキーマで定義することができる。それらは、ターゲットフィールドの型として関係宣言の中で使用することができる。
3.Item FoldersおよびCategories
以下で詳しく説明するが、Itemsのグループは、Item Folders(ファイルフォルダと混同すべきでない)と呼ばれる特別なItemsに編成されることができる。しかし、ほとんどのファイルシステムとは異なり、Itemは、複数のItem Folderに属すことができ、そのため、Itemが一方のItem Folderでアクセスされ改訂された場合、この改訂されたItemは、他方のItemフォルダから直接アクセスすることができる。本質的に、Itemへのアクセスは異なるItem Foldersから発生しうるが、実際にアクセスされる内容は、事実、まったく同じItemである。しかし、Item Folderは、必ずしも、そのメンバItemsのすべてを所有するわけではなく、または単に、他のフォルダとともにItemsを共同所有することができ、Item Folderを削除しても、その結果Itemの削除も必ずしも行われるわけではない。しかしながら、本発明のいくつかの実施形態では、Itemは、少なくとも1つのItem Folderに属していなければならず、したがって、特定のItemに対する単独のItem Folderが削除されると、ある実施形態では、Itemは自動的に削除されるか、または他の実施形態では、Itemは自動的に、既定のItem Folder(例えば、様々なファイル−フォルダベースのシステムで使用される類似名フォルダと概念上類似の「Trash Can」Item Folder)のメンバとなる。
また以下で詳述するが、Itemsは、さらに、(a)Item Type(またはTypes)、(b)特定のイミディエイトまたは継承プロパティ(または複数のプロパティ)、または(c)Itemプロパティに対応する特定の値(または複数の値)などの共通の記述されている特性に基づいてCategoriesに属している場合がある。例えば、個人連絡情報の特定のプロパティを含むItemは、自動的にContact Categoryに属すことがあり、そうすれば連絡先情報プロパティを含むItemも同様に、自動的にこのCategoryに属するのである。同様に、値「New York City」を持つ場所プロパティが設定されているItemであれば、自動的にNewYorkCity Categoryに属すことが可能である。
Categoriesは、Item Foldersは相互関連性のない(つまり、共通の記述された特性なしの)Itemsを含むことができるが、CategoryのそれぞれのItemは、そのCategoryについて記述された共通の型、プロパティ、または値(「共通性」)を持ち、Category内の他のItems同士の間の関係の基礎をなすのがこの共通性であるという点で、Item Foldersと概念上異なる。さらに、Itemの特定のFolderへの帰属関係はそのItemの特定の態様に基づいて強制的ではないが、いくつかの実施形態では、共通性がカテゴリについてCategoryに関係しているすべてのItemsは、ハードウェア/ソフトウェアインターフェースシステムレベルでCategoryのメンバに自動的になることが可能である。概念上、Categoriesは、帰属関係が特定のクエリの結果に基づく(データベースを背景とした場合のように)仮想Item Foldersと考えることもでき、また(Categoryの共通性により定義された)このクエリの条件を満たすItemsはCategoryの帰属関係を含むであろう。
図4は、Items、Item Folders、およびCategories間の構造的関係を例示する。複数のItems 402、404、406、408、410、412、414、416、418、および420は、様々なItem Folders 422、424、426、428、および430のメンバである。複数のItem Folderに属すItemsもあり、例えば、Item 402はItem Folders 422および424に属している。いくつかのItems、例えば、Item 402、404、406、408、410、および412は、1つまたは複数のCategories 432、434、および436のメンバでもあるが、別のときには、例えば、Items 414、416、418、および420はどのCategoriesにも属しえない(ただし、これはプロパティの所有が自動的にCategoryへの帰属を意味するいくつかの実施形態ではほとんどありえず、Itemは、そのような実施形態におけるカテゴリのメンバとならないためには完全に無特徴でなければならないであろう)。フォルダの階層構造と対照的に、CategoriesとItem Foldersは両方とも、図に示されているように有向グラフにより類似している。いずれにせよ、Items、Item Folders、およびCategoriesは、(異なるItem Typesであるにもかかわらず)すべてItemsである。
ファイル、フォルダ、およびディレクトリとは対照的に、本発明のItems、Item Folders、およびCategoriesについては、物理的コンテナに相当する概念がなく、したがって、Itemsはそのような複数の場所に存在する可能性があるため、本質的に「物理的」という特徴を持たない。Itemsが複数のItem Folderロケーションに存在できることとともに、Categoriesに編成されることにより、当業で現在利用できるレベルを超える、ハードウェア/ソフトウェアインターフェースレベルで、データ操作およびストレージ構造の機能が高められ、豊富になっている。
4.Schemas
a)Base Schema
Itemsの作成および使用に普遍的基盤を用意するため、本発明のストレージプラットフォームの様々な実施形態は、Itemsおよびプロパティの作成および編成に使用する概念フレームワークを確立するBase Schemaを備える。Base Schemaは、Itemsおよびプロパティのいくつかの特殊な型、および子型をさらに派生することができる派生元のこれらの特別な基礎型の特徴を定義する。このBase Schemaを使用することにより、プログラマは、Items(およびそれぞれの型)をプロパティ(およびそれぞれの型)から概念的に区別することができる。さらに、Base Schemaでは、すべてのItems(およびその対応するItem Types)がBase Schema内のこの基礎的Item(およびその対応するItem Type)から派生するときにすべてのItemsが所有することができるプロパティの基礎的集合を規定する。
図7に例示されているように、また本発明にいくつかの実施形態に関して、Base Schemaは、Item、Extension、およびPropertyBaseという3つの最上位タイプを定義する。図に示されているように、Item型は、この基礎的な「Item」Item型のプロパティにより定義される。対照的に、最上位レベルのプロパティ型「PropertyBase」は、定義済みプロパティを持たず、他のすべてのプロパティ型の派生元となる、すべての派生プロパティ型が相互に関係付けられる際の単なるアンカーにすぎない(単一のプロパティ型からふつうは派生する)。Extension型プロパティは、Itemが複数の拡張を持つ可能性があるときに、拡張でどのItemが拡張されるかとともに、一方の拡張を他方の拡張から区別するための識別を定義する。
ItemFolderは、Itemから継承されたプロパティに加えて、メンバ(もしあれば)へのリンクを確立するRelationshipを特徴とする、Item Item型の子型であるが、IdentityKeyとPropertyは両方ともPropertyBaseの子型である。すると、CategoryRefは、IdentityKeyの子型である。
b)Core Schema
本発明のストレージプラットフォームの様々な実施形態は、さらに、最上位レベルのItems型構造の概念フレームワークを提供するCore Schemaを含む。図8Aは、Core Schema内のItemsを例示するブロック図であり、図8Bは、Core Schema内のプロパティ型を例示するブロック図である。異なる拡張子(.com、.exe、.bat、.sysなど)を持つファイルとファイル−フォルダベースのシステムのそのような他の基準を持つファイルとの区別は、Core Schemaの関数に類似している。Core Schemaが、Itemベースのハードウェア/ソフトウェアインターフェースシステムでは、直接的に(Item型により)または間接的に(Item子型により)、すべてのItemsを、Itemベースのハードウェア/ソフトウェアインターフェースシステムが理解し、所定の予測可能な方法で処理できる1つまたは複数のCore Schema Item型に特徴付ける、コアItem型の集合を定義する。定義済みItem型は、Itemベースのハードウェア/ソフトウェアインターフェースシステム内の最も一般的なItemsを反映し、したがって、一定レベルの効率が、Core Schemaを含む定義済みItem型を認識するItemベースのハードウェア/ソフトウェアインターフェースシステムにより得られる。
いくつかの実施形態では、Core Schemaは拡張可能でない−つまり、Core Schemaの一部である特定の定義済み派生Item型を除き、追加Item型を直接、Base SchemaのItem型からサブタイプ化することはできない。後のすべてのItem型が必ずCore Schema Item型の子型であるため、Core Schemaへの拡張を禁止することにより(つまり、新しいItemsをCore Schemaに追加することを禁止することにより)、ストレージプラットフォームはCore Schema Item型の使用を指示する。この構造により、コアItem型の定義済み集合を持つ利点も維持しながら、追加Item型を定義する自由度も十分に高められる。
本発明の様々な実施形態について、図8Aを参照すると、Core Schemaによってサポートされている特定のItem型は以下のうちの1つまたは複数を含むことができる。
・ Categories:このItem Type(およびそれから派生した子型)のItemsは、Itemベースのハードウェア/ソフトウェアインターフェースシステムの有効なCategoriesを表す。
・ Commodities:価値ある識別可能なものであるItems。
・ Devices:情報処理機能をサポートする論理構造を備えるItems。
・ Documents:Itemベースのハードウェア/ソフトウェアインターフェースシステムにより解釈されないが、代わりにドキュメント型に対応するアプリケーションプログラムにより解釈されるコンテンツを持つItems。
・ Events:環境内で生じた何らかの出来事を記録するItems。
・ Locations:物理的場所を表すItems(例えば、地理的位置)。
・ Messages:2つ以上のプリンシパルの間の通信のItems(以下に定義する)。
・ Principals:ItemIdだけでなく少なくとも1つの決定的に証明可能なIDを持つItems(例えば、人、組織、グループ、世帯、機関、サービスなどの識別)。
・ Statements:限定はしないが、ポリシー、サブスクリプション、信用などを含む環境に関する特別な情報を持つItems。
同様に、図8Bを参照すると、Core Schemaによってサポートされている特定のプロパティ型は以下のうちの1つまたは複数を含むことができる。
・ Certificates(Base Schema内の基礎のPropertyBase型から派生)
・ Principal Identity Keys(Base Schema内のIdentityKey型から派生)
・ Postal Address(Base Schema内のProperty型から派生)
・ Rich Text(Base Schema内のProperty型から派生)
・ EAddress(Base Schema内のProperty型から派生)
・ IdentitySecurityPackage(Base Schema内のRelationship型から派生)
・ RoleOccupancy(Base Schema内のRelationship型から派生)
・ BasicPresence(Base Schema内のRelationship型から派生)
これらのItemsおよびPropertiesは、さらに、図8Aおよび図8Bで述べられているそれぞれのプロパティにより記述される。
5.関係
Relationshipsは、一方のItemがソースとして指定され、他方のItemがターゲットとして指定されている2項関係である。ソースItemおよびターゲットItemは、この関係によって関連付けられる。ソースItemは、一般に、関係の存続期間を制御する。つまり、ソースItemが削除される、それらのItem間の関係も削除されるということである。
Relationshipsは、包含関係Containmentと参照関係Referenceに分類される。包含関係は、ターゲットItemsの存続期間を制御するが、参照関係は、存続期間管理の意味を持たない。図12は、関係が分類される仕方を例示する。
Containment関係型は、さらに、保持関係Holdingと埋め込み関係Embeddingに分類される。Itemに対するすべての保持関係が削除されると、そのItemも削除される。保持関係は、参照カウントメカニズムを使ってターゲットの存続期間を制御する。埋め込み関係を使用すると、複合Itemsのモデル化が可能になり、これは排他的保持関係と考えることができる。Itemは、1つまたは複数の保持関係のターゲットとすることができるが、Itemは、ちょうど1つの埋め込み関係のターゲットとすることができる。埋め込み関係のターゲットであるItemは、他の保持または埋め込み関係のターゲットとすることはできない。
参照関係は、ターゲットItemの存続期間を制御しない。これらは、懸垂になっていることがある−ターゲットItemが存在しない場合がある。参照関係は、大域的Item名前空間(つまり、リモートデータストアを含む)内のどこかにあるItemsへの参照をモデル化するために使用できる。
Itemをフェッチしても、その関係を自動的にフェッチしない。アプリケーション側で、Itemの関係を明示的に要求しなければならない。さらに、関係を修正しても、ソースまたはターゲットItemは修正されず、同様に、関係を追加しても、ソース/ターゲットItemに影響は及ばない。
a)関係の宣言
明示的関係型は、以下の要素により定義される。
・ 関係名は、Name属性で指定される。
・ 関係型として、Holding、Embedding、Referenceのうちの1つ。これは、Type属性で指定される。
・ ソースおよびターゲット終点。それぞれの終点で、参照されているItemの名前および型を指定する。
・ ソース終点フィールドは、一般的に、型ItemID(宣言されない)であり、関係インスタンスと同じデータストア内のItemを参照しなければならない。
・ HoldingおよびEmbedding関係については、ターゲット終点フィールドは、型ItemIDReferenceでなければならず、関係インスタンスと同じストア内のItemを参照しなければならない。Reference関係については、ターゲット終点は任意のItemReference型でよく、他のストレージプラットフォームのデータストア内のItemsを参照することができる。
・ オプションにより、スカラーまたはPropertyBase型の1つまたは複数のフィールドを宣言することができる。これらのフィールドは、関係に関連付けられたデータを格納することができる。
・ 関係インスタンスは、大域的関係テーブルに格納される。
・ すべての関係インスタンスは、組合せ(ソースItemID、関係ID)により一意に識別される。関係IDは、その型に関係なく与えられたItemをソースとするすべての関係について、与えられたソースItemID内で一意である。
ソースItemは、関係の所有者である。所有者として指定されているItemは関係の存続期間を制御するが、関係自体はそれが関係するItemsとは別である。ストレージプラットフォームAPI 322は、Itemと関連する関係を公開するメカニズムを提供する。
関係宣言の一実施例を以下に示す。
Figure 0004583375
これは、Reference関係の一実施例である。この関係は、ソース参照によって参照された人のItemが存在しない場合には作成されることはできない。さらに、人のItemが削除された場合、人と組織との間の関係インスタンスが削除される。しかし、Organization Itemが削除された場合、関係は削除されず、懸垂になる。
b)保持関係
保持関係は、ターゲットItemの参照カウントベースの存続期間管理をモデル化するために使用される。
Itemは、Itemsとの0またはそれ以上の関係に対するソース終点とすることができる。埋め込まれたItemではないItemは、1つまたは複数の保持関係におけるターゲットとすることができる。
ターゲット終点参照型は、ItemIDReferenceでなければならず、また関係インスタンスと同じストア内のItemを参照しなければならない。
保持関係は、ターゲット終点の存続期間管理を強制する。保持関係インスタンスおよびそれがターゲットとしているItemの作成は、原子動作である。同じItemをターゲットとしている追加保持関係インスタンスの作成が可能である。与えられたItemをターゲット終点として持つ最後の保持関係インスタンスが削除されると、ターゲットItemも削除される。
関係宣言で指定されている終点Itemの型は、一般的に、関係のインスタンスが作成されるときに強制される。関係が確立された後では、終点Itemsの型は変更できない。
保持関係は、Item名前空間を形成する際に重要な役割を果たす。これらは、ソースItemに相対的にターゲットItemの名前を定義する「Name」プロパティを含む。この相対名は、与えられたItemから発したすべての保持関係について一意である。ルートItemから始まり与えられたItemに至るこの相対名の順序付けリストは、Itemに対する完全な名前を形成する。
保持関係は、非循環有向グラフ(DAG)を形成する。保持関係が作成されると、システムは、サイクルが作成されないことを保証し、したがって、Item名前空間がDAGを必ず形成する。
保持関係はターゲットItemの存続期間を制御するが、ターゲット終点Itemの動作整合性を制御しない。ターゲットItemは、保持関係を通じてそれを所有するItemから動作に関して独立している。保持関係のソースであるItemに対するCopy、Move、Backup、およびその他のオペレーションは、同じ関係のターゲットであるItemに影響を及ぼさない−例えば、つまり、Folder Itemをバックアップしても、すべてのItemsをフォルダ(FolderMember関係のターゲット)内に自動的にバックアップするわけではない。
以下は、保持関係の一実施例である。
Figure 0004583375
FolderMembers関係は、Folderの概念をItemsのジェネリックコレクションとして使用可能にする。
c)埋め込み関係
埋め込み関係は、ターゲットItemの存続期間の排他的制御という概念をモデル化する。これらは、複合Itemsの概念を有効にする。
埋め込み関係インスタンスおよびそれがターゲットとしているItemの作成は、原子動作である。Itemは、0またはそれ以上の埋め込み関係のソースとすることができる。しかし、Itemは、唯一の埋め込み関係のターゲットとすることができる。埋め込み関係のターゲットであるItemは、保持関係のターゲットとすることはできない。
ターゲット終点参照型は、ItemIDReferenceでなければならず、また関係インスタンスと同じデータストア内のItemを参照しなければならない。
関係宣言で指定されている終点Itemの型は、一般的に、関係のインスタンスが作成されるときに強制される。関係が確立された後では、終点Itemsの型は変更できない。
埋め込み関係は、ターゲット終点の動作整合性を制御する。例えば、Itemをシリアライズするオペレーションは、そのItemから発するすべての埋め込み関係だけでなくそのターゲットのすべてのシリアライズを含むことができ、Itemをコピーする、そのすべての埋め込まれているItemsもコピーする。
以下は、宣言例である。
Figure 0004583375
d)参照関係
参照関係は、参照するItemの存続期間を制御しない。さらには、参照関係は、ターゲットの存在を保証せず、また関係宣言で指定された通りにターゲットの型も保証しない。これは、参照関係が懸垂になる可能性のあることを意味している。また、参照関係は、他のデータストア内のItemsを参照することができる。参照関係は、Webページ内のリンクに類似の概念として考えることができる。
参照関係宣言の一例を以下に示す。
Figure 0004583375
参照型は、ターゲット終点において使用できる。参照関係に関わるItemsは、任意のItem型とすることができる。
参照関係は、Items間のほとんどの非存続期間管理関係をモデル化するために使用される。ターゲットの存在は強制されないなめ、参照関係は、疎結合関係をモデル化するために都合がよい。参照関係は、他のコンピュータ上のストアを含む他のデータストア内のItemsをターゲットとするために使用することができる。
e)規則と制約条件
以下の追加規則および制約条件を関係について適用する。
・ Itemは、(ちょうど1つの埋め込み関係)または(1つまたは複数の保持関係)のターゲットでなければならない。例外の1つは、ルートItemである。Itemは、0またはそれ以上の参照関係のターゲットとすることができる。
・ 埋め込み関係のターゲットであるItemは、保持関係のソースとすることはできない。これは、参照関係のソースとすることができる。
・ Itemは、ファイルから格上げされた場合保持関係のソースとすることはできない。これは、埋め込み関係および参照関係のソースとすることができる。
・ ファイルから格上げされたItemは、埋め込み関係のターゲットとすることはできない。
f)関係の順序付け
少なくとも一実施形態では、本発明のストレージプラットフォームは、関係の順序付けをサポートする。順序付けは、基本リレーショナル定義の中で「Order」という名前のプロパティを通じて実行される。Orderフィールド上には一意性制約条件はない。同じ「順序」プロパティ値を持つ関係の順序は保証されないが、低い「順序」の値を持つ関係の後、および高い「順序」フィールド値を持つ関係の前に、順序付けできることが保証される。
アプリケーションでは、組合せ(SourceItemID、RelationshipID、Order)の順序付けにより既定の順序で関係を取得することができる。与えられたItemから発するすべての関係インスタンスは、単一コレクションとして、そのコレクション内の関係の型と関係なく、順序付けされる。しかし、これは、与えられた型(例えば、FolderMembers)のすべての関係が、与えられたItemに対する関係コレクションの順序付き部分集合であることを保証する。
関係を操作するデータストアAPI 312は、関係の順序付けをサポートするオペレーションの集合を実装している。以下の用語は、オペレーションを説明する補助として導入される。
・ RelFirstは、順序値OrdFirstを持つ順序付きコレクション内の最初の関係である。
・ RelLastは、順序値OrdLastを持つ順序付きコレクション内の最後の関係である。
・ RelXは、順序値OrdXを持つコレクション内の与えられた関係である。
・ RelPrevは、順序値OrdPrevがOrdXよりも小さい、コレクション内のRelXとの最も近い関係である。
・ RelNextは、順序値OrdNextがOrdXよりも大きい、コレクション内のRelXとの最も近い関係である。
これらのオペレーションは、限定はしないが、以下のものを含む。
・ InsertBeforeFirst(SourceItemID,Relationship)は、関係を第1の関係としてコレクション内に挿入する。新しい関係の「Order」プロパティの値はOrdFirstよりも小さい場合がある。
・ InsertAfterLast(SourceItemID,Relationship)は、関係を最後の関係としてコレクション内に挿入する。新しい関係の「Order」プロパティの値はOrdLastよりも大きい場合がある。
・ InsertAt(SourceItemID,ord,Relationship)は、「Order」プロパティに対する指定された値を持つ関係を挿入する。
・ InsertBefore(SourceItemID,ord,Relationship)は、与えられた順序値を持つ関係の前に関係を挿入する。新しい関係には、OrdPrevとordの間の、しかもそれを含まない、「Order」値を割り当てることができる。
・ InsertAfter(SourceItemID,ord,Relationship)は、与えられた順序値を持つ関係の後に関係を挿入する。新しい関係には、ordとOrdNextの間の、しかもそれを含まない、「Order」値を割り当てることができる。
・ MoveBefore(SourceItemID,ord,RelationshipID)は、与えられた関係IDを持つ関係を指定された「Order」値を持つ関係の前に移動する。この関係には、OrdPrevとordの間の、しかもそれを含まない、新しい「Order」値を割り当てることができる。
・ MoveAfter(SourceItemID,ord,RelationshipID)は、与えられた関係IDを持つ関係を指定された「Order」値を持つ関係の後に移動する。この関係には、ordとOrdNextの間の、しかもそれを含まない、新しい順序値を割り当てることができる。
すでに述べたように、すべてのItemはItem Folderのメンバでなければならない。Relationshipsに関して、すべてのItemはItem Folderと関係を持っていなければならない。本発明のいくつかの実施形態では、Items間に存在するRelationshipsにより特定の関係が表される。
本発明の様々な実施形態で実装されているように、Relationshipは一方のItem(ソース)により他方のItem(ターゲット)に「拡張」される有向2項関係を実現する。Relationshipは、ソースItem(それを拡張したItem)により所有され、したがってRelationshipは、ソースが削除されると削除される(例えば、Relationshipは、ソースItemが削除されると削除される)。さらに、いくつかのインスタンスでは、Relationshipは、ターゲットItemの所有権を共有(共同所有)することができ、そのような所有権は、RelationshipのIsOwnedプロパティ(またはその等価物)内に反映されることが可能である(図7に、Relationshipプロパティ型について示されているように)。これらの実施形態では、新しいIsOwned Relationshipを作成すると、自動的にターゲットItemの参照カウントがインクリメントされ、そのようなRelationshipを削除すると、ターゲットItemの参照カウントがデクリメントされる。これらの特定の実施形態では、Itemsは、参照カウントが0よりも大きければ存在し続け、カウントが0になった場合に自動的に削除される。またも、Item Folderは、他のItemsとのRelationshipsの集合を持つ(または持つことができる)Itemであり、それらの他のItemsは、Item Folderの帰属関係を含む。Relationshipsの他の実際の実装も可能であり、本発明により本明細書で説明されている機能を実現することが予想される。
実際の実装に関係なく、Relationshipは、一方のオブジェクトから他方のオブジェクトへの選択可能な接続である。Itemが複数のItem Folderに属すことができることとともに、1つまたは複数のCategoriesに属すことができること、さらに、これらのItems、Folders、およびCategoriesがパブリックであるがプライベートであるかは、Itemベースの構造内で存在すること(または存在しないこと)に対し与えられた意味により決定される。これらの論理的Relationshipsは、本明細書で説明されている機能を実現するために特に採用されている、物理的実装に関係ない、Relationshipsの集合に割り当てられた意味である。論理的Relationshipsは、ItemとそのItem Folder(s)またはCategoriesとの間で確立されている(およびその逆に)が、それは、本質的にItem FoldersおよびCategoriesはそれぞれItemの特殊な型であるからである。したがって、Item FoldersおよびCategoriesは、他のItemと同じようにして作用−限定はしないが、コピー、電子メールメッセージへの追加、ドキュメントへの埋め込み、など−を受けることができ、Item FoldersおよびCategoriesに対して、他のItemsの場合と同じメカニズムを使用してシリアライズおよびデシリアライズ(インポートおよびエクスポート)を行うことができる。(例えば、XMLでは、すべてのItemsは、シリアライズ形式を持つことができ、この形式はItem Folders、Categories、およびItemsにも等しく適用される。)
前述のRelationshipsは、ItemとそれのItem Folder(s)と間の関係を表すが、ItemからItem Folderに、Item FolderからItemに、またはその両方に論理的に拡張することができる。論理的にItemからItem Folderに拡張するRelationshipは、Item FolderがそのItemに対しパブリックであることを表し、そのItemとの帰属関係情報を共有するが、逆に、ItemからItem Folderへの論理的Relationshipが存在しないことは、Item FolderがそのItemに対しプライベートであり、そのItemとの帰属関係情報を共有しない。同様に、Item FolderからItemに論理的に拡張するRelationshipは、ItemがそのItem Folderに対しパブリックであり共有可能であることを表すが、Item FolderからItemへの論理的Relationshipが存在しないことは、Itemがプライベートであり、非共有可能であることを表す。そのため、Item Folderが他のシステムにエクスポートされる場合、それは新しい文脈で共有される「パブリック」Itemsであり、ItemがそのItems Folders内で他の共有可能なItemsを検索する場合、それは、Itemにそれに属する共有可能Itemsに関する情報を供給する「パブリック」Item Foldersである。
図9は、Item Folder(これもまた、Item自体である)、そのメンバItems、およびItem FolderとそのメンバItemsとの間の相互接続Relationshipsを例示するブロック図である。Item Folder 900は、複数のItems 902、904、および906をメンバとして持つ。Item Folder 900は、Item 902がパブリックでありItem Folder 900、そのメンバ904および906、およびItem Folder 900にアクセスする可能性のある他のItem Folders、Categories、またはItems(図に示されていない)に対し共有可能であることを表す、それ自体からItem 902へのRelationship 912を持つ。しかし、Item Folder 900がItem 902に対しプライベートであり、Item 902と帰属関係情報を共有しないことを表す、Item 902からItem Folder 900へのRelationshipはない。他方、Item 904は、Item Folder 900がパブリックであり、Item 904と帰属関係情報を共有することを表す、それ自体からItem Folder 900へのRelationship 924を持つ。しかし、Item 904がプライベートであり、Item Folder 900、それの他のメンバ902および906、およびItem Folder 900にアクセスする可能性のある他のItem Folders、Categories、またはItems(図に示されていない)に対し共有可能でないことを表す、Item Folder 900からItem 904へのRelationshipはない。Items 902および904に対するそのRelationships(またはそれが存在しないこと)とは対照的に、Item Folder 900はそれ自体からItem 906へのRelationship 916を持ち、Item 906はItem Folder 900に戻るRelationship 926を持ち、これらは併せて、Item 906がパブリックであり、Item Folder 900、それのメンバ902および904、およびItem Folder 900にアクセスする可能性のある他のItem Folders、Categories、またはItems(図に示されていない)に対し共有可能であること、およびItem Folder 900がパブリックであり、Item 906と帰属関係情報を共有することを表す。
すでに説明したように、Item Folder内のItemsは、Item Foldersが「記述」されていないため共通性を共有する必要はない。他方、Categoriesは、そのメンバItemsのすべてに共通である共通性により記述される。したがって、Categoryの帰属関係は、本質的に、記述されている共通性を持つItemsに制限され、いくつかの実施形態では、Categoryの記述を満たすすべてのItemsは自動的にCategoryのメンバにされる。したがって、Item Foldersでは自明な型構造をその帰属関係により表すことができるが、Categoriesでは、帰属関係は定義済み共通性に基づくようにできる。
もちろん、Category記述は、その性質上論理的であり、したがって、Categoryは、型、プロパティ、および/または値の論理表現により記述することができる。例えば、Categoryの論理表現は、Itemsを含む帰属関係が2つのプロパティのうちの一方または両方を持つものとすることができる。Categoryに対するこれらの記述されたプロパティが「A」および「B」の場合、Categories帰属関係は、プロパティAを持つがBを持たないItems、プロパティBを持つがAを持たないItems、およびプロパティAおよびBの両方を持つItemsを含むことができる。プロパティのこの論理表現は、論理演算子「OR」により記述され、Categoryにより記述されるメンバの集合はプロパティA OR Bを持つItemsとなる。類似の論理オペランド(限定はしないが、「AND」、「XOR」、および「NOT」を単独で、または組み合わせて含む)も、カテゴリを記述するために使用することができることは、当業者であれば理解するであろう。
Item Folders(記述されていない)とCategories(記述されている)との区別にもかかわらず、Categories Relationship対ItemsとItems Relationship対Categoriesは、本発明の多くの実施形態におけるItem FoldersおよびItemsについて本明細書でこれまでに開示されたのと本質的に同じものである。
図10は、Category(またも、Item自体である)、そのメンバItems、およびCategoryとそのメンバItemsとの間の相互接続のRelationshipsを例示するブロック図である。Category 1000は、複数のItems 1002、1004、および1006をメンバとして持ち、それらはすべて、Category 1000により記述されているように(共通性記述1008’)共通のプロパティ、値、または型1008の何らかの組合せを共有する。Category 1000は、Item 1002がパブリックであり、Category 1000、そのメンバ1004および1006、およびCategory 1000にアクセスする可能性のある他のCategories、Item Folders、またはItems(図に示されていない)に対し共有可能であることを表す、それ自体からItem 1002へのRelationship 1012を持つ。しかし、Category 1000がItem 1002に対しプライベートであり、Item 1002と帰属関係情報を共有しないことを表す、Item 1002からCategory 1000へのRelationshipはない。他方、Item 1004は、Category 1000がパブリックであり、Item 1004と帰属関係情報を共有することを表す、それ自体からCategory 1000へのRelationship 1024を持つ。しかし、Item 1004がプライベートであり、Category 1000、それの他のメンバ1002および1006、およびCategory 1000にアクセスする可能性のある他のCategories、Item Folders、またはItems(図に示されていない)に対し共有可能でないことを表す、Category 1000からItem 1004へのRelationshipはない。Items 1002および1004に対するそのRelationships(またはそれが存在しないこと)とは対照的に、Category 1000はそれ自体からItem 1006へのRelationship 1016を持ち、Item 1006はCategory 1000に戻るRelationship 1026を持ち、これらは併せて、Item 1006がパブリックであり、Category 1000、それのItemメンバ1002および1004、およびCategory 1000にアクセスする可能性のある他のCategories、Item Folders、またはItems(図に示されていない)に対し共有可能であること、およびCategory 1000がパブリックであり、Item 1006と帰属関係情報を共有することを表す。
最後に、他のいくつかの実施形態では、CategoriesおよびItem Foldersは、それ自体Itemsであり、Itemsは互いとのRelationshipを、CategoriesはItem FoldersへのRelationship およびその逆を持ち、Categories、Item Folders、およびItemsはそれぞれ他のCategories、Item Folders、およびItemに対するRelationshipを持つことができる。しかし、様々な実施形態では、Item Folder構造および/またはCategory構造は、ハードウェア/ソフトウェアインターフェースシステムレベルでサイクルを含むことが禁止されている。Item FolderおよびCategory構造は、有効グラフに似ており、サイクルを禁止する実施形態は、グラフ理論の分野の数学的定義により、どのような経路も同じ頂点から始まり、終わるということのない有向グラフである、非循環有向グラフ(DAGs)に似ている。
6.拡張性
ストレージプラットフォームに対して、上述のように、スキーマの初期集合340を与えることが意図されている。しかし、それに加えて、少なくともいくつかの実施形態では、ストレージプラットフォームにより、独立系ソフトウェアベンダ(ISV)を含む顧客は、新しいスキーマ344(つまり、新しいItemおよびNested Element型)を作成することができる。このセクションでは、スキーマの初期集合340内で定義されているItem型およびNested Element型(または単純に、「Element」型)を拡張することによりそのようなスキーマを作成するためのメカニズムを取りあげる。
ItemおよびNested Element型の初期集合の拡張は、以下のように制約されるのが好ましい。
・ ISVは新しいItem型、つまり、子型Base.Itemを導入することが許される。
・ ISVは新しいNested Element型、つまり、子型Base.NestedElementを導入することが許される。
・ ISVは新しい拡張、つまり、子型Base.NestedElementを導入することが許される。
・ ISVは、ストレージプラットフォームのスキーマの初期集合340により定義されている型(Item、Nested Element、またはExtension型)をサブタイプ化することはできない。
ストレージプラットフォームスキーマの初期集合により定義されているItem型またはNested Element型はISVアプリケーションの要求条件に正確に一致しない場合があるので、ISV側で型をカスタマイズできるようにする必要がある。これは、Extensionsという概念で可能になる。Extensionsは、強く型付けされたインスタンスであるが、(a)それらは独立して存在することはできず、(b)ItemまたはNested Elementに付随しなければならない。
スキーマの拡張性の必要性に応える他に、Extensionsは、「多重型付け」問題を解消することも意図されている。いくつかの実施形態では、ストレージプラットフォームは、多重継承または重複子型をサポートしていない場合があるため、アプリケーション側でExtensionsを重複子型のインスタンスをモデル化する一手段として使用することができる(例えば、Documentは、法律文書であるとともにセキュリティに関する文書でもある)。
a)アイテム拡張
Item拡張を行うために、データモデルで、さらに、Base.Extensionという名前の抽象型を定義する。これは、拡張型の階層に対するルート型である。アプリケーションでは、Base.Extensionをサブタイプ化して、特定の拡張型を作成することができる。
Base.Extension型は、以下のようにBase schemaで定義される。
Figure 0004583375
ItemIDフィールドは、拡張子が関連付けられているアイテムのItemIDを含む。このItemIDを持つItemは存在していなければならない。拡張は、与えられたItemIDを持つアイテムが存在しない場合には、作成することができない。Itemが削除されると、同じItemIDを持つ拡張はすべて削除される。タプル(ItemID,ExtensionID)は拡張インスタンスを一意に識別する。
拡張型の構造は、アイテム型のものと類似している。
・ 拡張型はフィールドを持つ。
・ フィールドは、プリミティブまたはネスト要素型とすることができる。
・ 拡張型は、サブタイプ化することができる。
以下の制約が拡張型に対し適用される。
・ 拡張は、関係のソースおよびターゲットとすることはできない。
・ 拡張型インスタンスは、アイテムから独立しては存在し得ない。
・ 拡張型は、ストレージプラットフォームの型定義でのフィールド型として使用することはできない。
与えられたItem型に関連付けられる拡張の型には制約はない。どのような拡張型も、アイテム型の拡張に使用することができる。複数の拡張インスタンスがアイテムに付随する場合、それらは、構造とビヘイビアの両面で互いに独立している。
拡張インスタンスは、格納され、アイテムから別にアクセスされる。すべての拡張型インスタンスは大域的拡張ビューからアクセス可能である。関連するアイテムの型がどうであれ、与えられた拡張の型のすべてのインスタンスを返す効率的なクエリを作成することができる。ストレージプラットフォームAPIは、アイテム上の拡張の格納、取り出し、および修正を行うことができるプログラミングモデルを提供する。
拡張型は、ストレージプラットフォームの単一継承モデルを使用してサブタイプ化された型とすることができる。拡張型からの派生は、新しい拡張型を生み出す。拡張の構造またはビヘイビアは、アイテム型階層の構造またはビヘイビアをオーバーライドまたは置き換えることができない。Item型と同様に、Extension型インスタンスは、拡張型に関連付けられているビューを通じて直接アクセスされることが可能である。拡張のItemIDは、どのアイテムに属しているかを示し、これを使用して、大域的Itemビューから対応するItemオブジェクトを取り出すことができる。拡張は、動作整合性の目的のためにアイテムの一部と考えられる。ストレージプラットフォームが定義するCopy/Move、Backup/Restore、およびその他の共通オペレーションは、そのアイテムの一部として拡張上で動作することができる。
以下の例を考察する。Contact型は、Windows(登録商標)Type設定で定義される。
Figure 0004583375
CRMアプリケーション開発者は、CRMアプリケーション拡張をストレージプラットフォームに格納されている連絡先に付随させたい。アプリケーション開発者は、アプリケーション側で操作することができる追加データ構造を含むCRM拡張を定義する。
Figure 0004583375
HRアプリケーション開発者は、Contactに追加データを付随させたいとも考えている。このデータは、CRMアプリケーションデータと無関係である。ここでもまた、このアプリケーション開発者は拡張を作成することができる。
Figure 0004583375
CRMExtensionおよびHRExtensionは、Contactアイテムに付随させることができる2つの独立の拡張である。これらは、互いに独立に作成されアクセスされる。
上記の例では、CRMExtension型のフィールドおよびメソッドは、Contact階層のフィールドまたはメソッドをオーバーライドすることができない。CRMExtension型のインスタンスは、Contact以外のItem型に不随させることができる。
Contactアイテムが取り出される場合、そのアイテム拡張は自動的に取り出されはしない。Contactアイテムが与えられた場合、関連するアイテム拡張は、同じItemIdで拡張の大域的拡張ビューにクエリを実行することによりアクセスすることが可能である。
システム内のすべてのCRMExtension拡張は、どのアイテムに属しているか関係なく、CRMExtension型ビューを通じてアクセスすることができる。アイテムのすべてのアイテム拡張は、同じアイテムidを共有する。上記の例では、Contactアイテムインスタンスおよび付随するCRMExtensionおよびHRExtensionは同じItemIDをインスタンス化する。
以下のテーブルは、Item、Extension、およびNestedElement型同士の間の類似点と相違点をまとめたものである。
Figure 0004583375
b)NestedElement型の拡張
NestedElement型は、Item型と同じメカニズムで拡張されない。ネストされた要素の拡張は、ネストされた要素型のフィールドと同じメカニズムにより格納され、アクセスされる。
データモデルは、Elementという名前のネストされた要素型のルートを定義する。
Figure 0004583375
NestedElement型はこの型から継承する。NestedElement要素型は、さらに、Elementsの多重集合であるフィールドを定義する。
Figure 0004583375
NestedElement拡張は、以下の点でアイテム拡張と異なる。
・ ネストされた要素拡張は、拡張型ではない。それらは、Base.Extension型をルートとする拡張型階層に属さない。
・ ネストされた要素拡張は、アイテムの他のフィールドとともに格納され、大域的にはアクセス可能でない−与えられた拡張型のすべてのインスタンスを取り出すクエリを作成できない。
・ これらの拡張は、他のネストされた要素(アイテムの)が格納されるとの同じ方法で格納される。他のネストされた集合のように、NestedElement拡張はUDTに格納される。これらは、ネストされた要素型のExtensionsフィールドを通じてアクセス可能である。
・ 多値プロパティにアクセスするために使用されるコレクションインターフェースも、型拡張の集合についてアクセスおよび反復するために使用される。
以下のテーブルは、Item ExtensionsおよびNestedElement拡張のまとめと比較である。
Figure 0004583375
D.データベースエンジン
上述のように、データストアは、データベースエンジン上に実装される。本発明では、データベースエンジンは、オブジェクトリレーショナル拡張とともに、Microsoft SQL Serverエンジンなどの、SQLクエリ言語を実装するリレーショナルデータベースエンジンを含む。このセクションでは、データストアが実装するデータモデルのリレーショナルストアへのマッピングについて説明し、また本発明によるストレージプラットフォームクライアントによって消費される論理APIに関する情報も掲載する。しかし、異なるデータベースエンジンが使用される場合に、異なるマッピングを採用できることは理解される。実際、ストレージプラットフォームの概念データモデルをリレーショナルデータベースエンジン上に実装することに加えて、さらに、他のタイプのデータベース、例えば、オブジェクト指向およびXMLデータベース上に実装されることも可能である。
オブジェクト指向(OO)データベースシステムは、プログラミング言語オブジェクト(例えば、C++、Java(登録商標))に対する永続性およびトランザクションを提供する。ストレージプラットフォームにおける「アイテム」の概念は、オブジェクト指向システムにおける「Object」にうまくマッピングされるが、ただし、埋め込まれたコレクションはObjectsに追加されなければならないであろう。継承およびネストされた要素型のような他のストレージプラットフォームの型概念も、オブジェクト指向型システムをマッピングする。オブジェクト指向システムでは、通常、オブジェクト識別をすでにサポートしており、したがって、アイテム識別は、オブジェクト識別にマッピングすることができる。アイテムビヘイビア(オペレーション)は、オブジェクトメソッドにうまくマッピングされる。しかし、オブジェクト指向システムは、通常、組織機能を欠いており、検索能力が劣る。また、オブジェクト指向システムは、非構造化および半構造化データのサポートも行わない。本明細書で説明されている完全なストレージプラットフォームデータモデルをサポートするため、関係、フォルダ、および拡張などの概念は、オブジェクトデータモデルに追加される必要があるであろう。さらに、格上げ、同期、通知、およびセキュリティなどのメカニズムも、実装される必要があるであろう。
オブジェクト指向システムと同様に、XMLデータベースは、XSD(XMLスキーマ定義)に基づいており、単一継承ベースの型システムをサポートする。本発明のアイテム型システムは、XSD型モデルにマッピングされることも可能である。XSDは、さらに、ビヘイビアのサポートも行わない。アイテムに対するXSDは、アイテムビヘイビアにより増強されなければならないであろう。XMLデータベースでは、単一のXSDドキュメントを取り扱い、編成および広範な検索機能を欠いている。オブジェクト指向データベースの場合と同様、本明細書で説明されているデータモデルをサポートするため、関係、およびフォルダなどの他の概念は、そのようなXMLデータベースに組み込まれる必要があり、また、同期、通知、およびセキュリティなどのメカニズムも実装される必要がある。
以下のサブセクションに関して、開示されている一般的情報を利用しやすくするためいくつかの図が用意されており、図13は、通知メカニズムを例示する図である。図14は、2つのトランザクションが両方とも新しいレコードを同じB−Tree内に挿入する実施例を示す図である。図15は、データ変更検出プロセスを例示する図である。図16は、ディレクトリツリー例を示す図である。図17は、ディレクトリベースのファイルシステムの既存のフォルダがストレージプラットフォームのデータストアに移動される例を示す図である。
1.UDTを使用したデータストアの実装
本発明の実施形態では、一実施形態ではMicrosoft SQL Serverエンジンを含むリレーショナルデータベースエンジン314は、組み込みスカラー型をサポートする。組み込みスカラー型は「ネイティブ」と「単純」である。それらは、ユーザが独自の型を定義することはできないという点でネイティブであり、複合構造をカプセル化できないという点で単純である。ユーザ定義型(これ以降、UDT)は、複合構造型を定義することによりユーザが型システムを拡張できるようにすることによりネイティブのスカラー型システムの上の、またそれを超える、型拡張性のためのメカニズムを用意する。UDTは、ユーザにより定義された後、型システムにおいて組み込みスカラー型が使用できる場所であればどこででも使用することができる。
本発明の一態様によれば、ストレージプラットフォームスキーマは、データベースエンジンストア内のUDTクラスにマッピングされる。データストアItemsは、Base.Item型から派生するUDTクラスにマッピングされる。Itemsのように、ExtensionsもUDTクラスにマッピングされ、継承を使用する。ルートExtension型は、Base.Extensionであり、そこからすべてのExtension型が派生する。
UDTはCLRクラスである−これは状態(つまり、データフィールド)とビヘイビア(つまり、ルーチン)を持つ。UDTは、マネージド言語−C#、VB.NETなどを使用して定義される。UDTメソッドおよび演算子は、その型のインスタンスに対してT−SQLで呼び出すことができる。UDTは、1行の中の1列の型、T−SQLのルーチンのパラメータの型、またはT−SQLの変数の型とすることができる。
ストレージプラットフォームスキーマをUDTクラスにマッピングすることは、高水準でかなり容易である。一般に、ストレージプラットフォームSchemaは、CLR名前空間にマッピングされる。ストレージプラットフォームTypeは、CLRクラスにマッピングされる。CLRクラス継承は、ストレージプラットフォームType継承を反映し、ストレージプラットフォームPropertyは、CLRクラスプロパティにマッピングされる。
2.アイテムのマッピング
Itemsが大域的に検索可能であることが望ましく、継承および型代替可能性に対する本発明のリレーショナルデータベースでのサポートがあれば、データベースストア内のItemストレージの1つの可能な実装は、すべてのItemsを型Base.Itemの列を含む単一テーブルに格納することである。型代替可能性を使用すると、すべての型のItemsを格納することが可能になり、またYukonの「is of(Type)」演算子を使用してItem型と子型により検索をフィルタ処理することが可能になる。
しかし、本発明の実施形態においては、そのようなアプローチに関連するオーバーヘッドに関する心配から、Itemsは、最上位の型により分割され、それぞれの型の「族」のItemsが別々のテーブルに格納される。このパーティション分割スキームに従って、Base.Itemから直接継承するItem型毎に1つのテーブルが作成される。これらの下の型継承は、上述のように、型代替可能性を使用して適切な型族テーブルに格納される。Base.Itemからの継承の第1のレベルのみが特別に処理される。
すべてのItemsに対する大域的に検索可能なプロパティのコピーを格納するために「シャドウ」テーブルが使用される。このテーブルは、すべてのデータ変更が行われる際に使用される、ストレージプラットフォームAPIのUpdate()メソッドにより保持することができる。型族テーブルと異なり、大域的Itemテーブルは、完全なUDT Itemオブジェクトではなく、Itemの最上位スカラープロパティのみを含む。大域的Itemテーブルでは、ItemIDおよびTypeIDを公開することにより型族テーブルに格納されているItemオブジェクトにナビゲートすることができる。ItemIDは、一般に、データストア内のItemを一意に識別する。TypeIDは、ここでは説明しないメタデータを使用して、型名およびItemを含むビューにマッピングすることができる。ItemをそのItemIDにより見つけることはごくふつうのオペレーションといえるので、大域的Itemテーブルおよび他の何らかの手段の両方の文脈において、ItemのItemIDを指定するとItemオブジェクトを取り出すGetItem()関数が用意される。
アクセスを簡単に、実装の詳細をできる限り隠すために、Itemsのすべてのクエリは、上述のItemテーブル上に構築されたビューに対して行われるようにできる。特に、ビューは、該当する型族テーブルと突き合わせてItem型毎に作成されうる。これらの型ビューでは、子型を含む、関連付けられた型のすべてのItemsを選択することができる。便宜のため、UDTオブジェクトに加えて、それらのビューは、継承されたフィールドを含む、その型の最上位レベルのフィールドのすべてに対する列を公開することができる。
3.拡張マッピング
Extensionsは、Itemsに非常によく似ており、同じ要求条件のうちいくつかを持つ。継承をサポートする他のルート型として、Extensionsはストレージに対する同じ考慮事項とトレードオフの関係の多くの影響を受ける。このため、類似の型族マッピングは、単一テーブルアプローチではなく、むしろ、Extensionsに適用される。もちろん、他の実施形態では、単一テーブルアプローチを使用することが可能である。本発明の実施形態では、ExtensionはItemIDによりちょうど1つのItemに関連付けられ、Itemの文脈において一意であるExtensionIDを含む。Itemsの場合と同様に、ItemIDとExtensionIDのペアからなる、識別を与えられたExtensionを取り出す関数を用意することが可能である。Viewは、Extension型毎に作成され、Item型ビューに類似している。
4.ネストされている要素のマッピング
Nested Elementsは、深くネストされた構造を形成するためにItems、Extensions、Relationships、または他のNested Elements内に埋め込むことができる型である。ItemsおよびExtensionsのように、Nested Elementsは、UDTとして実装されるが、ItemsとExtensions内に格納される。したがって、Nested Elementsは、そのItemおよびExtensionコンテナものを超えるストレージマッピングを持たない。つまり、NestedElement型のインスタンスを直接格納するテーブルはシステムにはなく、Nested Elements専用のビューもない。
5.オブジェクト識別
データモデル内の各エンティティ、つまり、各Item、Extension、およびRelationshipは一意のキー値を持つ。Itemは、ItemIdにより一意に識別される。Extensionは、(ItemId,ExtensionId)の複合キーにより一意に識別される。Relationshipは、複合キー(ItemId,RelationshipId)により識別される。ItemId、ExtensionId、およびRelationshipIdはGUID値である。
6.SQLオブジェクトの命名規則
データストア内に作成されたすべてのオブジェクトは、ストレージプラットフォームスキーマ名から派生されたSQLスキーマ名で格納することができる。例えば、ストレージプラットフォームBaseスキーマ(「Base」と呼ばれることが多い)は、「[System.Storage].Item」などの「[System.Storage]」SQLスキーマで型を生成することができる。生成された名前は、命名の競合をなくすため、修飾子が先頭に付けられる。適切であれば、感嘆符(!)が、名前の各論理部分の仕切として使用される。以下のテーブルは、データストア内のオブジェクトに使用される命名規則の概要である。それぞれのスキーマ要素(Item、Extension、Relationship、およびView)は、データストア内のインスタンスにアクセスするために使用される装飾された命名規則とともに一覧にされている。
Figure 0004583375
7.列の命名規則
オブジェクトモデルをストアにマッピングする場合、アプリケーションオブジェクトとともに追加情報が格納されているため、命名競合が発生する可能性がある。命名競合を回避するため、すべての非型固有列(型宣言で名前付きPropertyに直接マッピングされない列)の先頭に、下線(_)文字を付ける。本発明の実施形態では、下線(_)文字は、識別子プロパティの先頭文字としては禁止されている。さらに、CLRとデータストアとの間の命名規則の統一のため、ストレージプラットフォームの型またはスキーマ要素(関係など)のすべてのプロパティは、先頭文字を大文字にしていなければならない。
8.検索ビュー
ビューは、格納されているコンテンツを検索するためストレージプラットフォームにより用意されている。SQLビューは、各ItemおよびExtension型に用意されている。さらに、ビューは、RelationshipsとViewsをサポートするためにも用意されている(Data Modelでの定義に従って)。ストレージプラットフォーム内のすべてのSQLビューおよび基礎のテーブルは読み取り専用である。データは、以下に詳述するように、ストレージプラットフォームAPIのUpdate()メソッドを使用して格納または変更することができる。
ストレージプラットフォームスキーマで明示的に定義されているそれぞれのビューは(スキーマデザイナにより定義され、ストレージプラットフォームにより自動的には生成されない)は、名前付きSQLビュー[<schema−name>].[View!<view−name>]によりアクセス可能である。例えば、スキーマ「AcmePublisher.Books」内の「BookSales」という名前のビューは、名前「[AcmePublisher.Books].[View!BookSales]」を使用するとアクセス可能である。ビューの出力形式はビュー毎に変更できるので(ビューを定義する当事者により与えられる任意のクエリにより定義される)、列は、スキーマビュー定義に基づいて直接マッピングされる。
ストレージプラットフォームのデータストア内のすべてのSQL検索ビューは、列に対し以下の順序付け規則を使用する。
・ ItemId、ElementId、RelationshipId、...などのビュー結果の(複数の)論理「key」列。
・ TypeIdなどの結果の型に関するメタデータ情報。
・ Create Version、Update Version、...などの変更追跡列。
・ (複数の)型特有の列(宣言された型のProperties)
・ 型特有のビュー(族ビュー)も、オブジェクトを返すオブジェクト列を含む。
各型族のメンバは、一連のItemビューを使用して検索可能であり、データストア内にItem型毎に1つのビューがある。図28は、Itemの検索ビューの概念を例示する図である。
a)アイテム
各Item検索ビューは、特定の型またはその子型のItemの各インスタンスに対する1つの行を含む。例えば、Documentに対するビューは、Document、LegaIDocument、およびReviewDocumentのインスタンスを返すことができる。この例では、Itemビューは、図29に示されているように概念化することができる。
(1)マスターアイテム検索ビュー
ストレージプラットフォームのデータストアのそれぞれのインスタンスは、マスターアイテムビューという特別なItemビューを定義する。このビューは、データストア内のそれぞれのItemに関する概要情報を示す。ビューは、Item型プロパティ毎に1つの列を示し、列は、変更追跡および同期情報を供給するために使用されるItemおよび複数の列の型を記述している。マスターアイテムビューは、名前「[System.Storage].[Master!Item]」を使用してデータストア内で識別される。
Figure 0004583375
(2)型付きアイテム検索ビュー
各Item型は、さらに、検索ビューを持つ。ルートItemビューに似ているが、このビューは、さらに、「_Item」列を介してItemオブジェクトにアクセスできる。各型付きアイテム検索ビューは、名前[schemaName].[itemTypeName]を使用してデータストア内で識別される。例えば、[AcmeCorp.Doc].[OfficeDoc]。
Figure 0004583375
b)アイテム拡張
WinFS Store内のすべてのItem Extensionsは、検索ビューを使用してアクセスすることもできる。
(1)マスター拡張検索ビュー
データストアのそれぞれのインスタンスは、マスター拡張ビューという特別なExtensionビューを定義する。このビューは、データストア内のそれぞれのExtensionに関する概要情報を示す。ビューは、Extensionプロパティ毎に1つの列を持ち、列は、変更追跡および同期情報を供給するために使用されるExtensionおよび複数の列の型を記述している。マスター拡張ビューは、名前「[System.Storage].[Master!Extension]」を使用してデータストア内で識別される。
Figure 0004583375
(2)型付き拡張検索ビュー
各Extension型は、さらに、検索ビューを持つ。マスター拡張ビューに似ているが、このビューは、さらに、「_Extension」列を介してItemオブジェクトにアクセスできる。各型付き拡張検索ビューは、名前[schemaName].[Extension!extensionTypeName]を使用してデータストア内で識別される。例えば、[AcmeCorp.Doc][Extension!OfficeDocExt]。
Figure 0004583375
c)ネストされている要素
すべてのネストされている要素は、Items、Extensions、またはRelationshipsインスタンス内に格納される。したがって、該当するItem、Extension、またはRelationship検察ビューにクエリを行うことで、これらはアクセスされる。
d)関係
上述のように、Relationshipsは、ストレージプラットフォームのデータストア内にItems間のリンキングの基本ユニットを形成する。
(1)マスター関係検索ビュー
それぞれのデータストアは、Master Relationship Viewを与える。このビューは、データストア内のすべての関係インスタンスに関する情報を示す。マスター関係ビューは、名前「[System.Storage].[Master!Relationship]」を使用してデータストア内で識別される。
Figure 0004583375
(2)関係インスタンス検索ビュー
それぞれの宣言されたRelationshipは、さらに、特定の関係のすべてのインスタンスを返す検索ビューを持つ。マスター関係ビューに似ているが、このビューは、さらに、関係データのプロパティ毎に名前付き列を示す。各関係インスタンス検索ビューは、名前[schemaName].[Relationship!relationshipName]を使用してデータストア内で識別される。例えば、[AcmeCorp.Doc].[Relationship!DocumentAuthor]。
Figure 0004583375
9.更新
ストレージプラットフォームのデータストア内のすべてのビューは読み取り専用である。データモデル要素(アイテム、拡張、または関係)の新しいインスタンスを作成する、または既存のインスタンスを更新するには、ストレージプラットフォームAPIのProcessOperationまたはProcessUpdategramメソッドが使用されなければならない。ProcessOperationメソッドは、実行されるアクションの詳細を決める「オペレーション」を消費するデータストアにより定義された単一のストアドプロシージャである。ProcessUpdategramメソッドは、実行されるアクションの集合の詳細を包括的に決める、「アップデートグラム」と呼ばれる、オペレーションの順序付き集合を受け取るストアドプロシージャである。
オペレーション形式は、拡張可能であり、スキーマ要素に対する様々なオペレーションを用意している。共通オペレーションとしては以下のものがある。
1.Itemオペレーション:
a.CreateItem(埋め込みまたは保持関係の文脈において新しいアイテムを作成する)
b.UpdateItem(既存のItemを更新する)
2.Relationshipオペレーション:
a.CreateRelationship(参照または保持関係のインスタンスを作成する)
b.UpdateRelationship(関係インスタンスを更新する)
c.DeleteRelationship(関係インスタンスを削除する)
3.Extensionオペレーション:
a.CreateExtension(既存のItemに拡張を追加する)
b.UpdateExtension(既存の拡張を更新する)
c.DeleteExtension(拡張を削除する)
10.変更追跡&ツームストーン
変更追跡およびツームストーンサービスは、以下で詳述するように、データストアにより提供される。このセクションでは、データストア内に公開された変更追跡情報の概要を述べる。
a)変更追跡
データストアによって与えられるそれぞれの検索ビューは、変更追跡情報を供給するために使用される列を含み、それらの列は、すべてのItem、Extension、およびRelationshipビュー間で共通である。ストレージプラットフォームのSchema Viewsは、スキーマデザイナにより明示的に定義され、変更追跡情報を自動的に供給することはしない−そのような情報は、ビュー自体が構築される検索ビューを通じて間接的に供給される。
データストア内の要素毎に、変更追跡情報は2つの場所−「マスター」要素ビューと「型付き」要素ビューから利用できる。例えば、AcmeCorp.Document.Document Item型に関する変更追跡情報は、マスターアイテムビュー「[System.Storage].[Master!Item]」および型付きアイテム検索ビュー[AcmeCorp.Document].[Document]から利用できる。
(1)「マスター」検索ビューでの変更追跡
マスター検索ビュー内の変更追跡情報は、要素の作成および更新バージョンに関する情報、要素を作成した同期パートナに関する情報、要素を最後に更新した同期パートナに関する情報、および作成および更新に関する各パートナからのバージョン番号を示す。同期関係にあるパートナ(後述)は、パートナキーにより識別される。型[System.Storage.Store].ChangeTrackingInfoの_ChangeTrackingInfoという名前の単一のUDTオブジェクトがこの情報のすべてを格納する。この型は、System.Storageスキーマで定義される。_ChangeTrackingInfoは、Item、Extension、およびRelationshipについてすべての大域的検索ビューで利用可能である。ChangeTrackingInfoの型定義は以下のとおりである。
Figure 0004583375
これらのプロパティは、以下の情報を含む。
Figure 0004583375
(2)「型付き」検索ビューでの変更追跡
大域的検索ビューと同じ情報を供給することに加えて、それぞれの型付き検索ビューは、同期トポロジ内の各要素の同期状態を記録した追加情報を供給する。
Figure 0004583375
b)ツームストーン
データストアは、Items、Extensions、およびRelationshipsのツームストーン情報を与える。ツームストーンビューは、ある場所にあるライブ状態のエンティティとツームストーン状態のエンティティ(live and tombstoned entities)(アイテム、拡張、および関係)の両方に関する情報を示す。アイテムおよび拡張ツームストーンビューは、対応するオブジェクトへのアクセスを行えないが、関係ツームストーンビューは、関係オブジェクトへのアクセスを行える(関係オブジェクトは、ツームストーン状態の関係の場合にはNULLである)。
(1)アイテムツームストーン
アイテムツームストーンは、ビュー[System.Storage].[Tombstone!Item]を介してシステムから取り出される。
Figure 0004583375
(2)拡張ツームストーン
拡張ツームストーンは、ビュー[System.Storage].[Tombstone!Extension]を使用してシステムから取り出される。拡張変更追跡情報は、ExtensionIdプロパティの追加を含むItemsについて与えられる情報と類似している。
Figure 0004583375
(3)関係ツームストーン
関係ツームストーンは、ビュー[System.Storage].[Tombstone!Relationship]を介してシステムから取り出される。関係ツームストーン情報は、Extensionsについて与えられる情報と類似している。しかし、追加情報は、関係インスタンスのターゲットItemRef上で与えられる。さらに、関係オブジェクトも選択される。
Figure 0004583375
(4)ツームストーンのクリーンアップ
ツームストーン情報の際限のない増殖を防ぐために、データストアは、ツームストーンのクリーンアップタスクを用意している。このタスクは、ツームストーン情報をいつ破棄できるかを決定する。このタスクは、ローカルの作成/更新バージョンに対する限界を計算し、その後、旧いすべてのツームストーンバージョンを破棄することによりツームストーン情報を切り詰める。
11.ヘルパAPIおよび関数
Baseマッピングは、さらに、多数のヘルパ関数も備える。これらの関数は、データモデルに対する共通のオペレーションを補助するために用意されている。
a)関数[System.Storage].GetItem
Figure 0004583375
b)関数[System.Storage].GetExtension
Figure 0004583375
c)関数[System.Storage].GetRelationship
Figure 0004583375
12.メタデータ
ストアで表されるメタデータは、インスタンスメタデータ(Itemの型など)および型メタデータの2種類がある。
a)スキーマメタデータ
スキーマメタデータは、MetaスキーマからのItem型のインスタンスとしてデータストア内に格納される。
b)インスタンスメタデータ
インスタンスメタデータは、Itemの型についてクエリを実行するためにアプリケーションによって使用され、これによりItemに関連付けられている拡張を見つける。Itemに対するItemIdが与えられれば、アプリケーションは、大域的アイテムビューにクエリを実行して、Itemの型を返し、この値を使用して、Meta.Typeビューにクエリを実行し、Itemの宣言された型に関する情報を返す。例えば、以下のようになる。
Figure 0004583375
E.セキュリティ
一般に、すべてのセキュリティ設定可能なオブジェクトは、図26に示されているアクセスマスク形式を使用してそのアクセス権をアレンジする。この形式では、下位16ビットはオブジェクト特有のアクセス権に、次の7ビットは標準アクセス権に使用され、これは、オブジェクトのほとんどの型に適用され、上位4ビットは各オブジェクト型で標準およびオブジェクト特有の権利の集合にマッピングできる汎用アクセス権を指定するために使用される。ACCESS_SYSTEM_SECURITYビットは、オブジェクトのSACLにアクセスする権利に対応する。
図26のアクセスマスク構造では、アイテム特有の権利は「Object Specific Rights」セクション(下位16ビット)に置かれる。本発明の実施形態では、ストレージプラットフォームは、セキュリティを管理する2組のAPI−Win32およびストレージプラットフォームAPI−を公開しているため、ファイルシステムオブジェクト特有の権利は、ストレージプラットフォームオブジェクト特有の権利の設計の動機付けをするために考慮されなければならない。
本発明のストレージプラットフォームのセキュリティモデルは、本明細書の前の方で参照により組み込まれている関連出願において詳しく説明されている。この点に関して、図27(パートa、b、およびc)は、セキュリティモデルの一実施形態による、既存のセキュリティ領域から切り出される新しいまったく同じように保護されているセキュリティ領域を示す図である。
F.通知および変更追跡
本発明の他の態様によれば、ストレージプラットフォームは、データ変更をアプリケーションで追跡できるようにする通知機能を備える。この機能は、主に、揮発性状態を維持するか、またはデータ変更イベントに関するビジネスロジックを実行するアプリケーション向けである。アプリケーションは、アイテム、アイテム拡張、およびアイテム関係に関する通知を登録する。通知は、データ変更がコミットされた後に非同期に送り出される。アプリケーション側では、アイテム、拡張、および関係型さらにオペレーションの種類により、通知をフィルタ処理することができる。
一実施形態により、ストレージプラットフォームAPI 322は、2種類のインターフェースを通知用に用意している。第1に、アプリケーションはアイテム、アイテム拡張、およびアイテム関係への変更によりトリガされた単純データ変更イベントを登録する。第2に、アプリケーションは、アイテム、アイテム拡張、およびアイテム間の関係の集まりを監視する「ウォッチャ」オブジェクトを作成する。ウォッチャオブジェクトの状態は、システム障害の後、またはシステムが長時間オフライン状態になってしまった後に、保存され、再作成されるようにできる。単一の通知で、複数の更新を反映する場合がある。
この機能に関する追加詳細は、本明細書の前の方で参照により組み込まれている関連出願で説明されている。
G.従来のファイルシステムの相互運用性
上述のように、本発明のストレージプラットフォームは、少なくとも一部の実施形態では、コンピュータシステムのハードウェア/ソフトウェアインターフェースシステムのなくてはならない一部として具現化されることを意図されている。例えば、本発明のストレージプラットフォームは、Microsoft Windows(登録商標)ファミリのオペレーティングシステムなどのオペレーティングシステムの重要な一部として具現化されることができる。そのようなキャパシティにおいて、ストレージプラットフォームAPIは、アプリケーションプログラムがオペレーティングシステムとやり取りするために使用するオペレーティングシステムAPIの一部となる。したがって、ストレージプラットフォームは、アプリケーションプログラムがオペレーティングシステムに関する情報を格納するために使用する手段となり、そのため、ストレージプラットフォームのItemベースのデータモデルは、そのようなオペレーティングシステムの従来のファイルシステムの代替えとなる。例えば、Microsoft Windows(登録商標)ファミリのオペレーティングシステムで具現化されているように、ストレージプラットフォームでは、そのオペレーティングシステムで実装されているNTFSファイルシステムを置き換えることも可能である。現在、アプリケーションプログラムは、Windows(登録商標)ファミリのオペレーティングシステムにより公開されているWin32 APIを通じてNTFSファイルシステムのサービスにアクセスしている。
しかし、NTFSファイルシステムを本発明のストレージプラットフォームで完全に置き換えるには、既存のWin32ベースのアプリケーションプログラムをコーディングし直す必要があること、またそのようなコーディングし直しは望ましくないことを理解すると、本発明のストレージプラットフォームでNTFSなどの既存のファイルシステムとの何らかの相互運用性を実現することが有益であろう。したがって、本発明の一実施形態では、ストレージプラットフォームにおいて、Win32プログラミングモデルに依存するアプリケーションプログラムはストレージプラットフォームのデータストアと従来のNTFSファイルシステムの両方の内容にアクセスすることができる。この目的のために、ストレージプラットフォームでは、簡単な相互運用性を高めるWin32の命名規則の上位集合となる命名規則を使用する。さらに、ストレージプラットフォームでは、Win32 APIを通じてストレージプラットフォームボリューム内に格納されているファイルおよびディレクトリのアクセスをサポートする。
この機能に関する追加詳細は、本明細書の前の方で参照により組み込まれている関連出願で説明されている。
H.ストレージプラットフォームAPI
ストレージプラットフォームは、アプリケーションプログラム側で上述のストレージプラットフォームの機能および能力にアクセスし、データストアに格納されているアイテムにアクセスするために使用できるAPIを備える。このセクションでは、本発明のストレージプラットフォームのストレージプラットフォームAPIの一実施形態について説明する。この機能に関する詳細は、本明細書の前の方で参照により組み込まれている関連出願で説明されているが、便宜のため以下にこの情報の一部をまとめた。
図18を参照すると、Containment Folderは他のItemsとの保持Relationshipsを含むアイテムであり、ファイルシステムのフォルダの共通概念の等価物である。それぞれのItemは少なくとも1つの包含フォルダ内に「含まれる」。
図19は、本発明の一実施形態による、ストレージプラットフォームAPIの基本アーキテクチャを例示する。ストレージプラットフォームAPIでは、SQLCIient 1900を使用してローカルデータストア302とやり取りし、またSQLClient 1900を使用してリモートデータストア(例えば、データストア340)とやり取りすることができる。ローカルストア302は、さらに、DQP(分散クエリプロセッサ)を使用するか、または後述のストレージプラットフォーム同期サービス(「Sync」)を通じて、リモートデータストア340ともやり取りできる。ストレージプラットフォームAPI 322は、さらに、データストア通知用のブリッジAPIとして機能し、上述のように、アプリケーションのサブスクリプションを通知エンジン332に受け渡し、通知をアプリケーション(例えば、アプリケーション350a、350b、または350c)にルーティングする。一実施形態では、ストレージプラットフォームAPI 322は、さらに、Microsoft ExchangeおよびADでデータにアクセスできるように制限された「プロバイダ」アーキテクチャを定義することもできる。
図20は、ストレージプラットフォームAPIの様々なコンポーネントを表す概略図である。ストレージプラットフォームAPIは、(1)ストレージプラットフォーム要素およびアイテム型を表す、データクラス2002、(2)オブジェクト永続性を管理し、サポートクラス2006を提供する、ランタイムフレームワーク2004、および(3)ストレージプラットフォームスキーマからCLRクラスを生成するために使用される、ツール2008の各コンポーネントからなる。
与えられたスキーマから生じるクラスの階層は、直接、そのスキーマ内の型の階層を反映する。例えば、図21Aおよび図21Bに示されているようなContactsスキーマで定義されているItem型を考察する。
図22は、動作中のランタイムフレームワークを例示している。ランタイムフレームワークは以下のように動作する。
1.アプリケーション350a、350b、または350cは、ストレージプラットフォーム内のアイテムにバインドする。
2.フレームワーク2004は、バインドされたアイテムに対応するItemContextオブジェクト2202を作成し、アプリケーションに返す。
3.アプリケーションは、このItemContext上でFindをサブミットして、Itemsのコレクションを取得し、返されるコレクションは、概念上オブジェクトグラフ2204となる(関係により)。
4.アプリケーションは、データを変更、削除、および挿入する。
5.アプリケーションは、Update()メソッドを呼び出して変更を保存する。
図23は、「FindAll」オペレーションの実行を例示する。
図24は、ストレージプラットフォームAPIクラスがストレージプラットフォームSchemaから生成されるプロセスを例示する。
図25は、File APIが基づくスキーマを例示している。ストレージプラットフォームAPIは、ファイルオブジェクトを取り扱うための名前空間を含む。この名前空間は、System.Storage.Filesと呼ばれる。System.Storage.Filesのクラスのデータメンバは、ストレージプラットフォームストアに格納されている情報を直接反映し、この情報は、ファイルシステムオブジェクトから「格上げ」されるか、またはWin32 APIを使用してネイティブな形で作成することができる。System.Storage.Files名前空間は、FileItemおよびDirectoryItemの2つのクラスを持つ。これらのクラスおよびそのメソッドのメンバは、図25のスキーマ図を見ると容易に推測できる。FileItemおよびDirectoryItemは、ストレージプラットフォームAPIからは読み取り専用である。それらを修正するためには、Win32 APIを使用するか、またはSystem.IOのクラスを使用する必要がある。
APIに関して、プログラミングインターフェース(またはより単純に、インターフェース)は、コードの1つまたは複数のセグメントがコードの1つまたは複数の他のセグメントにより提供される機能と通信またはアクセスできるようにするメカニズム、プロセス、プロトコルとしてみなすことができる。代替えとして、プログラミングインターフェースは、他の(複数の)コンポーネントの1つまたは複数のメカニズム、メソッド、関数呼び出し、モジュールなどに通信するように結合することができるシステムのコンポーネントの1つまたは複数のメカニズム、メソッド、関数呼び出し、モジュール、オブジェクトなどとみなすことができる。前文の「segment of code」という用語は、適用される用語、またはコードセグメントが別々にコンパイルされるかどうか、コードセグメントがソースコード、中間コード、またはオブジェクトコードとして供給されるかどうか、コードセグメントがランタイムシステムまたはプロセスで利用されるかどうか、それらが同じまたは異なるマシン上に配置されるか、または複数のマシンにまたがって分散されるかどうか、コードのセグメントにより表される機能がソフトウェアで全部実装されるのか、ハードウェアで全部実装されるのか、それともハードウェアとソフトウェアの組合せで実装されるのかに関係なく、1つまたは複数の命令またはコード行を含むことを意図しており、例えば、コードモジュール、オブジェクト、サブルーチン、関数などを含む。
概念上、プログラミングインターフェースは、図30Aまたは図30Bに示されているように、総称的に示すことができる。図30Aは、第1および第2のコードセグメントが通信に使用する情報伝達ルートとしてインターフェースInterface1を例示している。図30Bは、システムの第1および第2のコードセグメントが媒体Mを介して通信できるようにするインターフェースオブジェクトI1およびI2(第1および第2のコードセグメントの一部である場合もない場合もある)を含むものとしてインターフェースを例示している。図30Bを見ると、インターフェースオブジェクトI1およびI2は同じシステムの別のインターフェースとして考えることができ、またオブジェクトI1およびI2さらに媒体Mはそのインターフェースを含むものとして考えることもできる。図30Aおよび30Bは、双方向の流れおよびその流れのいずれかの側のインターフェースを示しているが、いくつかの実装では、一方向のみ情報の流れがある(または後述のようにまったく情報の流れがない)か、または片側にのみインターフェースオブジェクトがある場合がある。例えば、限定はしないが、アプリケーションプログラミングインターフェース(API)、エントリポイント、メソッド、関数、サブルーチン、リモートプロシージャ呼び出し、およびコンポーネントオブジェクトモデル(COM)インターフェースなどの用語は、プログラミングインターフェースの定義内に包含される。
このようなプログラミングインターフェースの複数の態様は、第1のコードセグメントが情報(「情報」は、最も広い意味で使用されており、データ、コマンド、要求などを含む)を第2のコードセグメントに送信するためのメソッド、第2のコードセグメントがその情報を受け取るためのメソッド、および情報の構造、系列、構文、編成、スキーマ、タイミング、および内容を含むことができる。この点に関して、基礎となる搬送媒体自体は、媒体が有線であろうと無線であろうと、両方の組合せであろうと、情報がインターフェースにより定義された方法で搬送される限り、そのインターフェースのオペレーションにとっては重要でないと考えられる。いくつかの状況では、情報は、従来の意味で一方向または双方向で受け渡されない場合があるが、それは、1つのコードセグメントが単に第2のコードセグメントにより実行される機能にアクセスする場合のように、情報転送が他のメカニズム(例えば、情報がコードセグメント間の情報の流れとは別のバッファ、ファイルなどに置かれる)を介するか、または存在しない場合があるからである。これらの態様のどれかまたは全部は、例えばコードセグメントが疎結合または密結合の構成のシステムの一部かどうかに応じて、与えられた状況では重要である場合もあり、そのため、このリストは説明を目的としているのであって、制限することを意図していないと考えるべきである。
プログラミングインターフェースのこの概念は、当業者には知られており、本発明の前述の詳細な説明から明らかである。しかし、プログラミングインターフェースを実装する方法は他にもあり、特に断らない限り、これらも、本明細書に付属する請求項により取り込まれることが意図されている。このような他の方法は、図30Aおよび30Bの簡略化した図よりも詳しい、または複雑なものとして現れる場合があるが、そうであっても、総体的に同じ結果が得られる類似の関数を実行する。そこで、プログラミングインターフェースのいくつかの説明的な他の実装について簡単に述べることにする。
因数分解:一方のコードセグメントから他方のコードセグメントへの通信は、通信を複数の離散的通信に分割することにより間接的に実行されるようにできる。これは、図31Aおよび31Bに概略が示されている。図に示されているように、いくつかのインターフェースは、機能の分割可能な集合に関して説明することができる。そこで、図30Aおよび30Bのインターフェース機能は、ちょうど24、つまり2×2×3×2と数学的に示すことができるのと同じ結果が得られるように因数分解することができる。したがって、図31Aに例示されているように、インターフェースInterface1により提供される関数を細分し、インターフェースの通信を複数のインターフェースInterface1A、Interface1B、Interface1Cに変換し、しかも同じ結果が得られるようにすることができる。図31Bに例示されているように、インターフェースI1により提供される関数を複数のインターフェースI1a、I1b、I1cに細分し、しかも同じ結果が得られるようにすることができる。同様に、第1のコードセグメントから情報を受け取る第2のコードセグメントのインターフェースI2は、複数のインターフェースI2a、I2b、I2cなどに因数分解することができる。因数分解の際に、第1のコードセグメントとともに含まれるインターフェースの個数は、第2のコードセグメントとともに含まれるインターフェースの個数と一致している必要はない。図31Aおよび31Bの場合のいずれも、インターフェースInterface1およびI1の機能の本質は、それぞれ、図30Aおよび30Bの場合と同じままである。インターフェースの因数分解は、さらに、結合的特性、可換特性、およびその他の数学的特性にも従い、因数分解は理解しにくい場合がある。例えば、オペレーションの順序は重要でない場合があり、そのため、インターフェースにより実行される関数は、コードまたはインターフェースの他の断片により、そのインターフェースに到達するいくらか前に実行されるか、またはシステムの別のコンポーネントにより実行されることができる。さらに、プログラミング技術の通常の技能を有する者であれば、同じ結果を出す異なる関数呼び出しを実行する方法として様々な方法があることを理解できるであろう。
再定義:場合によっては、意図した結果をそのまま達成しながら、プログラミングインターフェースのいくつかの態様(例えば、パラメータ)を無視、追加、または再定義することが可能な場合がある。これは、図32Aおよび32Bに例示されている。例えば、図30AのインターフェースInterface1が関数呼び出しSquare(input,precision,output)を含み、呼び出しは、3つのパラメータinput、precision、およびoutputを含み、第1のCode Segmentから第2のCode Segmentに発行されると仮定する。真ん中のパラメータprecisionが与えられたシナリオにおいて無関係であれば、図32Aに示されているように、ただ無視するか、さらには意味のない(この状況では)パラメータと置き換えることが可能である。また、関係のない追加パラメータを加えることも可能である。いずれにせよ、平方の機能は、第2のコードセグメントにより入力が平方された後、出力が返される限り、達成されうる。precisionは、コンピューティングシステムの何らかの下流または他の部分にとって意味のあるパラメータである可能性も十分ありえるが、平方を計算するという狭い目的についてはprecisionは不要であることがわかれば、置き換えるか、または無視することができる。例えば、有効な精度値を受け渡す代わりに、誕生日の日付など意味のない値を渡しても、結果に悪影響を及ぼさないであろう。同様に、図32Bに示されているように、インターフェースI1をインターフェースI1’で置き換えて、再定義して、そのインターフェースへのパラメータを無視するか、または追加する。インターフェースI2は、同様に、インターフェースI2’と再定義することができ、不要なパラメータ、または他のところで処理することができるパラメータを無視するように再定義することができる。ここでの要点は、場合によっては、プログラミングインターフェースは、ある目的には必要のない、パラメータなどの態様を含むことがあり、したがって、それらを無視または再定義するか、または他の目的のために他の場所で処理することができる。
インラインコーディング:また、間に入る「インターフェース」が形態を変更するように2つの別々のコードモジュールの機能の一部または全部をマージすることが可能な場合がある。例えば、図30Aおよび30Bの機能は、それぞれ、図33Aおよび33Bの機能に変換することができる。図33Aでは、図30Aの前の第1および第2のコードセグメントは、それらの両方を含む1つのモジュールにマージされる。この場合、コードセグメントは、そのまま、他のインターフェースと通信していることが可能であるが、インターフェースを、単一モジュールにより好適な形態に適合させることができる。そこで、例えば、形式的CallおよびReturnステートメントは、もはや、必要なくなるが、インターフェースInterface1による類似の処理または応答はいぜんとして有効である。同様に、図33Bに示されているように、図30BからのインターフェースI2の一部(または全部)を、インラインでインターフェースI1に書き込んで、インターフェースI1”を形成することができる。例示されているように、インターフェースI2はI2aとI2bに分割され、インターフェース部I2aは、インターフェースI1とインラインでコーディングされており、インターフェースI1”を形成する。具体的な例として、図30BのインターフェースI1は、インターフェースI2によって受け取られ、第2のコードセグメントにより(平方するために)入力とともに渡された値を処理した後、平方された結果を出力とともに戻す、関数呼び出しsquare(input,output)を実行すると考える。このよう場合、第2のコードセグメントによりされる処理(入力の平方)は、インターフェースを呼び出さずに、第1のコードセグメントにより実行することができる。
分離:一方のコードセグメントから他方のコードセグメントへの通信は、通信を複数の離散的通信に分割することにより間接的に実行されるようにできる。これは、図34Aおよび34Bに概略が示されている。図34Aに示されているように、ミドルウェアの1つまたは複数の断片((複数の)Divorce Interface。機能および/またはインターフェース関数をオリジナルのインターフェースから分離するので)が用意されており、これにより、別のインターフェース、この場合インターフェースInterface2A、Interface2B、およびInterface2Cに適合するように第1のインターフェースInterface1上の通信を変換する。これは、例えば、Interface1プロトコルに従ってオペレーティングシステムと通信するように設計されているアプリケーションのインストールベースがあるが、そのときに、オペレーティングシステムは異なるインターフェース、この場合、インターフェースInterface2A、Interface2B、およびInterface2Cを使用するように変更される場合に行うことが可能である。この要点は、第2のコードセグメントにより使用されるオリジナルのインターフェースが変更され、第1のコードセグメントにより使用されるインターフェースと互換性がとれなくなり、そのため、媒介を使用して旧インターフェースと新インターフェースとの互換性をとるという点である。同様に、図34Bに示されているように、第3のコードセグメントを、インターフェースI1からの通信を受け取るために分離インターフェースDI1とともに導入し、インターフェース機能を例えばDI2と連携するが、同じ機能的結果を供給するように再設計されたインターフェースI2aおよびI2bに送るために分離インターフェースDI2とともに導入することができる。同様に、DI1およびDI2は、同じまたは類似の機能的結果が得られるようにしながら、連携して動作し、図30BのインターフェースI1およびI2の機能を新しいオペレーティングシステムに翻訳することができる。
書き換え:さらに他の可能な変更形態として、コードを動的に書き換えることで、インターフェース機能を他の何かの機能で置き換えるが、ただし全体として同じ結果が得られるようにする方法がある。例えば、中間言語(例えば、Microsoft IL、Java(登録商標)ByteCodeなど)で書かれたコードセグメントを実行環境(.Netフレームワーク、Java(登録商標)ランタイム環境、または他の類似のランタイム型環境によって実現されるような)内のジャストインタイム(JIT)コンパイラまたはインタプリタに送るシステムもある。JITコンパイラは、第1のコードセグメントから第2のコードセグメントに通信を動的に変換する、つまり、第2のコードセグメント(オリジナルまたは異なる第2のコードセグメントのいずれか)が必要とするとおりにそれらを異なるインターフェースに適合させるように書くことができる。これは、図35Aおよび35Bに示されている。図35Aからわかるように、このアプローチは上述の分離シナリオに似ている。これは、例えば、アプリケーションのインストールベースがInterface1プロトコルに従ってオペレーティングシステムと通信するように設計されているが、そのときに、オペレーティングシステムは異なるインターフェースを使用するように変更される場合に行うことが可能である。JITコンパイラは、インストールベースのアプリケーションからオペレーティングシステムの新しいインターフェースへ通信をオンザフライで適合させる場合に使用することが可能である。図35Bに示されているように、(複数の)インターフェースを動的に書き換えるこのアプローチを適用することで、動的に因数分解するか、または他の何らかの手段により、(複数の)インターフェースも変更することができる。
他の実施形態を介してインターフェースと同じまたは類似の結果を得る上述のシナリオは、さらに、様々な方法で、直列に、および/または並列に、または他の介入コードを使用して、組み合わせることもできることに注意すべきである。こうして、上記の他の実施形態は、相互排他的ではなく、図30Aおよび30Bに示されている汎用シナリオと同じまたは同等のシナリオを生成するために混合し、照合し、組み合わせることができる。また、ほとんどのプログラミング構文の場合と同様、本明細書で説明できないが、それでも、本発明の精神および範囲により表される、インターフェースの同じまたは類似の機能を実現する他の類似の方法があることにも注意されたい、つまり、少なくとも一部は、インターフェースの値の基礎となるインターフェースによって表される機能および有効にされる有利な結果であることに注意されたい。
III.同期API
Itemベースのハードウェア/ソフトウェアインターフェースシステムにおいて同期に対するいくつかのアプローチが考えられる。セクションAでは、本発明のいくつかの実施形態を開示し、セクションBでは、同期に関してAPIの様々な実施形態に注目する。
A.同期の概要
本発明のいくつかの実施形態において、図3に関し、ストレージプラットフォームは、(i)ストレージプラットフォーム(それぞれ自データストア302を備える)の複数のインスタンスが柔軟な規則の集まりに従ってその内容の部分の同期をとれるようにし、(ii)本発明のストレージプラットフォームのデータストアと専用プロトコルを実装する他のデータソースとの同期をとるサードパーティ用のインフラストラクチャを備える同期サービス330を提供する。
ストレージプラットフォームとストレージプラットフォームとの間の同期は、参加「レプリカ」のグループのうちで実行される。例えば、図3を参照すると、おそらく異なるコンピュータシステム上で稼働しているであろう、ストレージプラットフォームの他のインスタンスの制御の下で、ストレージプラットフォーム300のデータストア302と他のリモートデータストア308との同期を与えることが望ましい場合がある。このグループの全体的な帰属関係は、必ずしも、与えられた時刻で与えられたレプリカに知られているわけではない。
異なるレプリカは、変更を独立して行うことができる(つまり、同時に)。同期処理のプロセスは、他のレプリカによって行われる変更をすべてのレプリカに気づかせることとして定義される。この同期機能は、本質的に、マルチマスターである。
本発明の同期機能では、レプリカは以下のようにできる。
・ 他のレプリカがどの変更を認識するかを決定する。
・ このレプリカが認識しない変更に関する情報を要求する。
・ 他のレプリカが認識しない変更に関する情報を伝達する。
・ 2つの変更がいつ互いに競合するかを決定する。
・ 変更をローカルで適用する。
・ 競合する解決を他のレプリカに伝達し、収束を保証する。
・ 競合する解決に対する指定されたポリシーに基づき競合状態を解決する。
1.ストレージプラットフォームとストレージプラットフォームとの間の同期処理
本発明のストレージプラットフォームの同期サービス330の主要な適用は、ストレージプラットフォームの複数のインスタンスの同期をとることである(それぞれ、自データストアを有する)。同期サービスは、ストレージプラットフォームのスキーマレベルで動作する(データベースエンジン314の基礎のテーブルではなく)。したがって、例えば、「Scopes」は、後述のように同期を定義するために使用される。
同期サービスは、「純変化」の原理に基づいて動作する。同期サービスでは、個別のオペレーションを(トランザクション複製などにより)記録し、送信するのではなく、それらのオペレーションの最終結果を送り、そのため、複数のオペレーションの結果を得られた単一の変更に統合することが多い。
同期サービスは、一般的にはトランザクション境界を尊重しない。つまり、単一のトランザクションでストレージプラットフォームのデータストアに2つの変更が加えられた場合、それらの変更が他のすべてのレプリカに最小単位として適用されることは保証されない−一方が他方なしで現れることがある。この原理の例外は、同じトランザクションで2つの変更が同じItemに加えられた場合に、それらの変更は送信され、他のレプリカに最小単位として適用されることが保証されるという点である。したがって、Itemsは、同期サービスの整合性ユニットである。
a)同期(Sync)制御アプリケーション
どのアプリケーションも、同期サービスに接続し、同期処理オペレーションを開始することができる。そのようなアプリケーションは、同期処理を実行するために必要なすべてのパラメータを用意する(以下のsyncプロファイルを参照)。このようなアプリケーションは、本明細書では、同期制御アプリケーション(SCA)と呼ばれる。
2つのストレージプラットフォームインスタンスの同期をとる場合、syncはSCAにより片方の側で開始される。そのSCAは、リモートパートナと同期することをローカル同期サービスに通知する。他方の側では、同期サービスは、発信側マシンから同期サービスにより送られるメッセージによって目覚める。これは、送信先マシン上に存在する永続的構成情報(以下のマッピングを参照)に基づいて応答する。同期サービスは、スケジュールに従って実行されるか、またはイベントに対する応答として実行されることが可能である。これらの場合に、スケジュールを実行する同期サービスがSCAとなる。
同期処理を有効にするには、2つのステップが実行される必要がある。第1に、スキーマデザイナが適切なsyncの意味でストレージプラットフォームスキーマに注釈を入れなければならない(後述のようにChange Unitsを指定する)。第2に、同期処理は、同期処理に関わるストレージプラットフォームのインスタンスを持つすべてのマシン上で適切に構成されなければならない(後述のように)。
b)スキーマ注釈
同期サービスの基本概念は、Change Unitの概念である。Change Unitは、ストレージプラットフォームにより個別に追跡されるスキーマ最小断片である。すべてのChange Unitについて、同期サービスは、最後のsync以降に変化したか、変化しなかったかを判別することができる。
スキーマでChange Unitsを指定することは、複数の目的に使用される。第1に、これは、同期サービスが回線上でどれだけ混雑しているかを判別する。Change Unit内で変更が加えられた場合、同期サービスはChange Unitのどの部分が変更されたかを認識していないので、Change Unit全体が他のレプリカに送信される。第2に、これは、競合検出の精度を決定する。2つの同時変更(これらの用語は、後のセクションで詳しく定義される)が同じChange Unitに対し加えられた場合、同期サービスは競合の通知を発し、その一方で、同時変更が異なるChange Unitsに加えられた場合、競合の通知は発せず、変更は自動的にマージされる。第3に、これは、システムによって保持されているメタデータの量を強く左右する。同期サービスのメタデータの多くは、Change Unit毎に保持され、そのため、Change Unitsを小さくすれば、syncのオーバーヘッドが大きくなる。
Change Unitsを定義するには、正しいトレードオフを見つける必要がある。そういうわけで、同期サービスを使用すると、スキーマデザイナはそのプロセスに関与することができる。
一実施形態では、同期サービスは、要素よりも大きなChange Unitsをサポートしていない。しかし、スキーマデザイナが要素よりも小さいChange Unitsを指定する能力−つまり、要素の複数の属性を1つの独立したChange Unitsにグループ化すること−はサポートしている。その実施形態では、これは、以下の構文を使用して行われる。
Figure 0004583375
c)同期構成
データの特定の部分の同期を維持したいストレージプラットフォームパートナのグループは、syncコミュニティと呼ばれる。コミュニティのメンバが同期を維持したい場合、必ずしも、まったく同じ方法でデータを表すわけではない、つまり、syncパートナは、同期処理しているデータを変換することができる。
ピアツーピアのシナリオでは、ピアがそのパートナのすべてについて変換マッピングを維持することは実際的ではない。そうする代わりに、同期サービスは、「コミュニティフォルダ」を定義するアプローチをとる。コミュニティフォルダは、すべてのコミュニティメンバが同期をとる仮想「共有フォルダ」を表す抽象化である。
この概念は、例を使うと最もよくわかる。Joeが複数のコンピュータのMy Documentsフォルダの同期をとりたい場合、Joeは、例えば、JoesDocumentsというコミュニティフォルダを定義する。次に、すべてのコンピュータ上で、Joeは仮想JoesDocumentsフォルダとローカルのMy Documentsフォルダとの間のマッピングを構成する。この時点以降、Joeのコンピュータが互いに同期した場合、そのローカルアイテムではなく、JoesDocuments内のドキュメントに関してやり取りすることになる。このようにして、すべてのJoeのコンピュータは相手が誰であるかを知らなくても互いに理解する−そのコミュニティフォルダが同期コミュニティの共通語となるのである。
同期サービスの構成は、(1)ローカルフォルダとコミュニティフォルダとの間のマッピングを定義するステップ、(2)何が同期されるか(例えば、同期する相手、送信すべき部分集合、および受信すべきもの)を決定するsyncプロファイルを定義するステップ、および(3)異なるsyncプロファイルが実行されるスケジュールを定義する、または手動で実行するステップの3つのステップからなる。
(1)コミュニティフォルダ−マッピング
コミュニティフォルダマッピングは、個々のマシン上にXML構成ファイルとして格納される。それぞれのマッピングは、以下のスキーマを持つ。
/mappings/communityFolder
この要素は、このマッピングの対象となるコミュニティフォルダの名前を指定する。名前はフォルダの構文規則に従う。
/mappings/localFolder
この要素は、このマッピングの変換先のローカルフォルダの名前を指定する。名前はフォルダの構文規則に従う。フォルダは、マッピングが有効であるためにすでに存在していなければならない。このフォルダ内のアイテムは、このマッピングに従って同期対象とみなされる。
/mappings/transformations
この要素は、アイテムをコミュニティフォルダからローカルフォルダに、またその逆方向に変換する方法を定義する。存在しない、または空の場合、変換は実行されない。特に、これは、IDがマッピングされないことを意味する。この構成は、主に、Folderのキャッシュを作成する際に使用される。
/mappings/transformations/mapIDs
この要素は、コミュニティIDを再利用するのではなく、新しく生成されたローカルIDがコミュニティフォルダからマッピングされたアイテムのすべてに割り当てられることを要求する。Sync Runtimeは、アイテムの往復変換を行うIDマッピングを保持する。
/mappings/transformations/localRoot
この要素は、コミュニティフォルダ内のすべてのルートアイテムが指定されたルートの子にされることを要求する。
/mappings/runAs
この要素は、このマッピングに対する要求が処理される際の権限を制御する。存在しない場合、送信者が想定される。
/mappings/runAs/sender
この要素が存在すると、このマッピングへのメッセージの送信者は、偽装され、要求はその信用証明書に従って処理されなければならない。
(2)プロファイル
同期プロファイルは、同期をキックオフするために必要なパラメータ一式である。これは、SCAにより、同期処理を開始するためSync Runtimeによって供給される。ストレージプラットフォームとストレージプラットフォームとの間の同期をとるための同期プロファイルは、以下の情報を含む。
・ Local Folder、変更の送り元および送り先として使用される。
・ 同期をとるRemote Folder名−このFolderは、上で定義されたとおりにマッピングを使用してリモートパートナからパブリッシュされなければならない。
・ Direction−同期サービスは、送信のみ、受信のみ、および送受信同期をサポートする。
・ Local Filter−リモートパートナに送信するローカル情報を選択する。ローカルフォルダに対するストレージプラットフォームクエリとして表される。
・ Remote Filter−リモートパートナから取り出すリモート情報を選択する−コミュニティフォルダに対するストレージプラットフォームクエリとして表される。
・ Transformations−ローカル形式のアイテムの変換方法を定義する。
・ ローカルセキュリティ−リモート終点から取り出された変更がリモート終点(偽装)の許可を得て適用するか、またはローカルで同期を開始したユーザの許可を得て適用するかを指定する。
・ 競合解決ポリシー−競合が拒絶されるか、ログに記録されるか、または自動的に解決されるかを指定する−後者の場合、使用する競合リゾルバとともにそれに対する構成パラメータを指定する。
同期サービスは、同期プロファイルの単純構築を可能にするランタイムCLRクラスを提供する。プロファイルは、さらに、格納を簡単に行えるようにXMLファイルとの間のシリアライズも行える(スケジュールと一緒であるのが多い)。しかし、すべてのプロファイルが格納されるストレージプラットフォーム内の標準的な場所はなく、SCAは、それを永続せずにその場でプロファイルを構築できるため願ってもないものである。同期を開始するためにローカルマッピングを用意する必要がないことに注意されたい。すべての同期情報は、プロファイル内に指定することができる。しかし、マッピングは、リモート側で開始された同期要求に応答するために必要である。
(3)スケジュール
一実施形態では、同期サービスは、それ専用のスケジューリングインフラストラクチャを用意しない。その代わりに、このタスクを実行するために他のコンポーネントに頼る−Microsoft Windows(登録商標)オペレーティングシステムに付属するWindows(登録商標)Schedulerを使用する。同期サービスは、SCAとして動作し、XMLファイルに保存されている同期プロファイルに基づいて同期をトリガするコマンドラインユーティリティを備える。このユーティリティを使用すると、スケジュールに従って、またはユーザがログオンまたはログオフするなどのイベントへの応答として同期処理を実行するようにWindows(登録商標)Schedulerを非常に簡単に構成できる。
d)競合回避処理
同期サービスにおける競合処理は、(1)変更適用時に実行される、競合検出−このステップでは、変更が安全に適用可能か判別する、(2)自動競合解決およびログ記録−このステップでは(競合が検出された直後に実行される)、競合を解決できるか自動競合リゾルバに問い合わせがゆき、できなればオプションで競合をログに記録できる、(3)競合検査および解決−このステップは、何らかの競合がログに記録されている場合に実行され、同期セッションの状況の外部で実行されるが、このときに、ログに記録された競合は解決され、ログから削除されるようにできる−の3つの段階に分けられる。
(1)競合検出
本発明の実施形態では、同期サービスは、知識ベースと制約ベースの2種類の競合を検出する。
(a)知識ベースの競合
知識ベースの競合は、2つのレプリカが同じChange Unitに対し独立の変更を加えたときに発生する。2つの変更は、それらがお互いについての知識なしで行われる場合に独立して呼び出される−つまり、第1のバージョンは、第2のバージョンについての知識の対象とならず、またその逆もいえる。同期サービスは、上述のように、レプリカの知識に基づいてそのようなすべての競合を自動的に検出する。
競合をChange Unitのバージョン履歴におけるフォークと考えると役立つことがある。Change Unitの存続期間中に競合が発生しない場合、そのバージョン履歴は単純連鎖−それぞれの変更は前の変更の後に発生する−である。知識ベースの競合の場合、2つの変更は並行して発生し、そのため、連鎖は分割され、バージョンツリーとなる。
(b)制約ベースの競合
いっしょに適用された場合に独立の変更が完全性制約に違反する場合がある。例えば、2つのレプリカが同じディレクトリ内に同じ名前を持つファイルを作成しようとすると、そのような競合が発生するおそれがある。
制約ベースの競合は、2つの独立した変更を伴うが(知識ベースの競合とまったく同様に)、同じChange Unitには影響を及ぼさない。むしろ、異なるChange Unitsに影響を及ぼすが、制約がそれらの間に存在する。
同期サービスは、変更適用時に制約違反を検出し、制約ベースの競合の通知を自動的に発する。制約ベースの競合を解決するには、通常、制約に違反しないような方法で変更を修正するカスタムコードを必要とするが、同期サービスは、そのようなことを行うための汎用メカニズムを備えていない。
(2)競合処理
競合が検出されると、同期サービスは、(1)変更を拒絶し、それを送信者に送り返すアクション、(2)競合を競合ログに記録するアクション、または(3)競合を自動的に解決するアクションのうちの1つ(同期プロファイル内の同期イニシエータにより選択される)を実行することができる。
変更が拒絶された場合、同期サービスは、変更がレプリカに到着しなかったかのように動作する。否定応答が発信者側に送り返される。この解決ポリシーは、主に、競合のログ記録が可能でないヘッドレスレプリカ(ファイルサーバなど)で使用することができる。その代わりに、そのようなレプリカは拒絶することにより競合を処理するように他のレプリカを強制する。
同期イニシエータは、同期プロファイルで競合解決を構成する。同期サービスは、以下のようにして単一プロファイル内の複数の競合リゾルバの組合せをサポートする−第1に、どれか1つが成功するまで次々に試みられる競合リゾルバのリストを指定し、第2に、競合リゾルバを競合のタイプに関連付ける、例えば、更新と更新との間の知識ベースの競合を1つのリゾルバに振り向け、他の競合をすべてログに振り向ける。
(a)自動競合解決
同期サービスは、多数の既定の競合リゾルバを備える。このリストは以下のものを含む。
・ local−wins:ローカルに格納されているデータとの競合がある場合に受け取った変更を破棄する。
・ remote−wins:受け取った変更との競合がある場合にローカルデータを破棄する。
・ last−writer−wins:変更のタイムスタンプに基づきChange Unitに従ってlocal−winsまたはremote−winsのいずれかを選択する(同期サービスは、一般に、クロック値に依存しないことに注意されたい。この競合リゾルバはその規則に対する唯一の例外である)。
・ Deterministic:すべてのレプリカ上で同じであることを保証される方法で勝利者を選択するが、他の方法では意味がない−同期サービスの一実施形態では、この機能を実装するためにパートナIDの辞書式比較を使用する。
さらに、ISVは、独自の競合リゾルバを実装し、インストールすることができる。カスタム競合リゾルバは、構成パラメータを受け付けることができ、そのようなパラメータは、同期プロファイルのConflict ResolutionセクションにあるSCAにより指定されなければならない。
競合リゾルバが競合を処理すると、これは、(競合変更の代わりに)実行される必要のあるオペレーションのリストをランタイムに返す。その後、同期サービスは、競合ハンドラ側で考慮していた内容を含むようにリモート知識を適切に調整してから、それらのオペレーションを適用する。
解決を適用している間に他の競合が検出される可能性がある。このような場合、新しい競合は、元の処理が再開する前に解決されなければならない。
競合をアイテムのバージョン履歴内の分岐として考えた場合、競合解決は、結合−2つの分岐を組み合わせて1つのポイントを形成すること−であるとみなすことができる。したがって、競合解決は、バージョン履歴をDAGに変える。
(b)競合ログ作成
本当に特別な種類の競合リゾルバとして、Conflict Loggerがある。同期サービスは、競合を型ConflictRecordのItemsとしてログに記録する。これらの記録は、競合が生じているアイテムに再び関係する(アイテム自体が削除されていない限り)。それぞれの競合記録は、競合を引き起こした受け取った変更、競合のタイプ、更新−更新、更新−削除、削除−更新、挿入−挿入、または制約、および受け取った変更のバージョンとそれを送信するレプリカの知識を含む。ログに記録された競合は、後述のように、検査および解決のために使用できる。
(c)競合の検査および解決
同期サービスは、アプリケーション側で競合ログを調べ、その中の競合の解決を提案するためのAPIを備えている。このAPIにより、アプリケーションは、すべての競合、または与えられたItemに関係する競合を列挙することができる。これにより、さらに、そのようなアプリケーションは、ログに記録された競合を解決するために、(1)remote wins−ログに記録された変更を受け入れ、競合しているローカルの変更を上書きする、(2)local wins−ログに記録された変更の競合部分を無視する、および(3)suggest new change−アプリケーションが、オプションにより、競合を解決するマージを提案する場合、の3つの方法のうちの1つを使用することができる。アプリケーションにより競合が解決された後、同期サービスはそれらをログから削除する。
(d)レプリカの収束および競合解決の伝播
複雑な同期シナリオでは、同じ競合が複数のレプリカで検出される場合がある。このような状況が生じた場合、(1)競合が一方のレプリカで解決され、その解決が他方のレプリカに送られるようにすることができるか、または(2)競合が両方のレプリカ上で自動的に解決されるか、または(3)競合が両方のレプリカで手動で解決される(競合検査APIを通じて)。
収束を保証するため、同期サービスは、競合解決を他のレプリカに転送する。競合を解決する変更がレプリカに届くと、同期サービスは、この更新により解決されるログに含まれる競合記録を自動的に見つけ出し、それらを削除する。この意味で、一方のレプリカでの競合解決は他方のすべてのレプリカ上でのバインディングになる。
同じ競合について異なるレプリカにより異なる勝利者が選択された場合、同期サービスは競合解決をバインドする原理を適用し、2つの解決のうちの1つを選び、自動的に他方を獲得する。勝利者は、いつでも同じ結果が得られるように保証される決定論的方法で選ばれる(一実施形態ではレプリカID辞書式比較を使用する)。
同じ競合について異なるレプリカにより異なる「新しい変更」が提案された場合、同期サービスは、この新しい競合を特別な競合として取り扱い、Conflict Loggerを使用して、それが他のレプリカに伝搬しないようにする。そのような状況は、一般に、手動による競合解決において生じる。
2.非ストレージプラットフォームデータストアの同期処理
本発明のストレージプラットフォームの他の態様によれば、ストレージプラットフォームは、ISVが、ストレージプラットフォームとMicrosoft Exchange、AD、Hotmailなどの従来システムとを同期させるSync Adaptersを実装するためのアーキテクチャを備える。Sync Adaptersは、後述のように、同期サービスにより提供される多くのSync Serviceを利用する。
その名にもかかわらず、Sync Adaptersは、何らかのストレージプラットフォームアーキテクチャにプラグインとして実装する必要はない。そうしたければ、「sync adapter」は、単に、変更列挙およびアプリケーションなどのサービスを取得するため同期サービスランタイムインターフェースを利用するアプリケーションとすることもできる。
与えられたバックエンドとの同期を他から構成し、実行することを簡単にするため、Sync Adapter作成者は、上述のように同期プロファイルが与えられた場合に同期処理を実行する標準のSync Adapterインターフェースを公開するよう奨励される。このプロファイルで、構成情報をアダプタに伝えるが、アダプタは、その一部をランタイムサービス(例えば、同期をとるFolder)を制御するSync Runtimeに受け渡す。
a)同期サービス
同期サービスは、多数の同期サービスをアダプタ作成者に提供する。このセッションの残り部分では、ストレージプラットフォームが同期処理を実行しているマシンを「クライアント」と呼び、アダプタの通信先の非ストレージプラットフォームバックエンドを「サーバ」と呼ぶと都合がよい。
(1)Change Enumeration
Change Enumerationを使用すると、同期サービスにより保持されている変更追跡データに基づき、同期処理アダプタは、データストアFolderに対しこのパートナとの同期が最後に試みられた以降に発生した変更を簡単に列挙することができる。
変更は、「アンカー」−最後の同期に関する情報を表す隠蔽型構造−という概念に基づいて列挙される。アンカーは、前のセクションで説明されているように、ストレージプラットフォームの知識という形をとる。変更列挙サービスを使用する同期処理アダプタは、「ストアドアンカー」(stored anchors)を使用するものと「サプライドアンカー」(supplied anchors)を使用するものという2つの広いカテゴリに分類される。
この区別は、最後の同期に関する情報が格納されている場所−クライアントか、それともサーバか−に基づく。アダプタはこの情報をクライアント上に格納するのが簡単である場合が多い−バックエンドは、この情報を簡単に格納できない場合が多い。その一方で、複数のクライアントが同じバックエンドと同期をとる場合、この情報をクライアント上に格納するのは不効率であり、場合によっては正しくない−場合によって一方のクライアントが他方のクライアントがすでにサーバにプッシュアップしている変更に気づかない。アダプタ側でサーバストアドアンカーを使用したい場合、そのアダプタは、変更列挙時にストレージプラットフォームへ送り返す必要がある。
ストレージプラットフォームがアンカー(ローカルストレージまたはリモートストレージのいずれかの)を保持するために、ストレージプラットフォームに対し、サーバ側で正常に適用された変更を認識させる必要がある。これらの変更およびこれらの変更のみをアンカーに含めることができる。変更列挙の際にSync Adaptersは、Acknowledgementインターフェースを使用して、正常に適用された変更を報告する。同期の終了時に、サプライドアンカーを使用するアダプタは、新しいアンカー(正常に適用された変更すべてを組み込んだ)を読み込み、それをバックエンドに送る必要がある。
多くの場合、Adaptersは、ストレージプラットフォームデータストア内に挿入するアイテムとともにアダプタ特有のデータを格納する必要がある。このようなデータの一般的な例として、リモートIDおよびリモートバージョン(タイムスタンプ)がある。同期サービスは、このデータを格納するメカニズムを備えており、Change Enumerationは、返される変更とともにこの付加データを受け取るためのメカニズムを備える。これにより、ほとんどの場合に、アダプタ側がデータベースに対し再度クエリを実行する必要がなくなる。
(2)Change Application
Change Applicationを使用すると、Sync Adapters側でバックエンドから受け取った変更をローカルストレージプラットフォームに適用することができる。アダプタは、変更をストレージプラットフォームスキーマに変換することが期待される。図24は、ストレージプラットフォームAPIクラスがストレージプラットフォームSchemaから生成されるプロセスを例示している。
変更適用の主な機能は、競合を自動的に検出することである。ストレージプラットフォームとストレージプラットフォームとの同期の場合のように、競合は、お互いについての知識なしで2つの重なり合う変更が行われることと定義される。アダプタは、Change Applicationを使用する場合、どの競合検出が実行されるかについてアンカーを指定しなければならない。Change Applicationは、アダプタの知識の対象とならない重なり合うローカル変更が検出された場合に競合の通知を発する。Change Enumerationと同様に、アダプタは、ストアドアンカーまたはサプライドアンカーのいずれかを使用することができる。Change Applicationでは、アダプタ特有のメタデータの効率的格納をサポートする。このようなデータは、アダプタにより、適用される変更に付随させることができ、また同期サービスにより格納することも可能である。データは、次の変更列挙のときに返すことができるであろう。
(3)Conflict Resolution
上述のConflict Resolutionメカニズム(ログ記録および自動解決オプション)も、同期処理アダプタで利用できる。同期処理アダプタは、変更を適用する場合に競合解決のポリシーを指定することができる。指定した場合、競合は、指定された競合ハンドラに受け渡され、解決されるようにできる(可能ならば)。競合をログに記録することもできる。アダプタは、ローカル変更をバックエンドに適用しようと試みる際に競合を検出する可能性がある。このような場合、アダプタは、それでも、Sync Runtimeにその競合を受け渡し、ポリシーに従って解決することができる。さらに、同期処理アダプタは、同期サービスにより検出された競合が処理のため送り返されるように要求することもできる。これは、バックエンドが競合を格納または解決することができる場合に便利である。
b)アダプタの実装
いくつかの「アダプタ」が単に、ランタイムインターフェースを使用するアプリケーションである場合には、アダプタ側で標準アダプターインターフェースを実装することが奨励される。それらのインターフェースを使用することにより、Sync Controlling Applicationsは、与えられた同期プロファイルに従ってアダプタが同期処理を実行するよう要求し、進行中の同期処理をキャンセルし、進行中の同期に関する進行中報告(完了率)を受け取ることができる。
3.セキュリティ
同期サービスは、ストレージプラットフォームにより実装されたセキュリティモデルに導入する物をできるだけ少なくしようとしている。同期処理のための新しい権利を定義するのではなく、既存の権利が使用される。特に、
・ データストアItemを読み込める人は誰でも、そのアイテムへの変更を列挙することができ、
・ データストアItemに書き込める人は誰でも、そのアイテムに変更を適用することができ、
・ データストアItemを拡張できる人は誰でも、そのアイテムに同期メタデータを関連付けることができるということである。
同期サービスでは、セキュリティで保護された著作権情報を保持しない。ユーザUによりレプリカAで変更が加えられ、レプリカBに転送された場合、変更が元々Aで(またはUにより)行われたという事実は失われる。Bがこの変更をレプリカCに転送した場合、これは、Aの権限ではなくBの権限の下で実行される。このため、レプリカがアイテムに対し独自の変更を加えることについて信頼されていない場合、他者により加えられた変更を転送することはできないという制限が生じる。
同期サービスは、開始されると、Sync Controlling Applicationによって実行される。同期サービスは、SCAの識別を偽装し、その識別の下ですべてのオペレーション(ローカルとをリモートの両方)を実行する。説明のため、ユーザUは、ローカル同期サービスに、ユーザUが読み取りアクセス権を持たないアイテムについてリモートストレージプラットフォームから変更を取り出させることはできないことを観察する。
4.管理可能性
レプリカの分散コミュニティの監視は複雑な問題である。同期サービスは、「スイープ」アルゴリズムを使用して、レプリカのステータスに関する情報を収集し分配することができる。スイープアルゴリズムの特性は、構成されたすべてのレプリカに関する情報は、最終的に回収されること、および失敗(非応答)レプリカが検出されることを保証する。
このコミュニティ規模の監視情報は、すべてのレプリカで利用可能になっている。監視ツールを、任意に選択されたレプリカで実行し、この監視情報を調べて、管理上の決定を下すことができる。構成変更は、影響を受けるレプリカにおいて直接行われなければならない。
B.同期処理APIの概要
分散化傾向を強めるデジタル世界において、個人とワークグループは、情報とデータを様々なデバイスおよび場所に格納することが多くなっている。これが、これらの独立した多くの場合本質的に異なるデータストアを常に、ユーザの介入を最小限に抑えて同期させることができるデータ同期サービスの開発の推進要因であった。
本発明の同期処理プラットフォームは、本明細書のセクションIIで説明されているリッチストレージプラットフォーム(別名「WinFS」)の一部であり、次の3つの主要な目標に取り組むものである。
・ アプリケーションおよびサービスが異なる「WinFS」ストア間のデータを効率よく同期させることができる。
・ 開発者が「WinFS」ストアと非「WinFS」ストアとの間のデータの同期をとるリッチソリューションを構築することができる。
・ 開発者に、同期処理ユーザエクスペリエンス(synchronization user experience)をカスタマイズするのに適したインターフェースを提供する。
1.一般的用語
本明細書では、以下に、このセクションのIII.Bの後の方の説明に関連するいくつかの他の精緻化された定義および重要概念を示す。
・ 同期レプリカ(Sync Replica):ほとんどのアプリケーションは、WinFSストア内のアイテムの与えられた部分集合に対する変更の追跡、列挙、および同期処理にしか注目していない。同期処理オペレーションに関わるアイテムの集合は、同期レプリカと呼ばれる。レプリカは、与えられたWinFS包含階層(通常は、Folderアイテムをルートとする)内に含まれるアイテムに関して定義される。すべての同期サービスは、与えられたレプリカのコンテキスト内で実行される。WinFS Syncが、レプリカを定義し、管理し、クリーンアップするためのメカニズムを提供する。レプリカはすべて、与えられたWinFSストア内で一意にそれを識別するGUID識別子を持つ。
・ 同期パートナ(Sync Partner):同期パートナは、WinFSアイテム、拡張、および関係に対する変更に影響を及ぼすことが可能なエンティティとして定義される。したがって、すべてのWinFSストアは、同期パートナと呼ぶことができる。非WinFSストアと同期をとる場合、外部データソース(EDS)も同期パートナと呼ばれる。すべてのパートナは、それを一意に識別するGUID識別子を持つ。
・ 同期コミュニティ(Sync Community):同期コミュニティは、ピアツーピア同期処理オペレーションを使用して同期が保持されるレプリカのコレクションとして定義される。これらのレプリカは、すべて、同じWinFSストア、異なるWinFSストア内にあるか、さらには、非WinFSストア上の仮想レプリカとしてさえ現れることができる。WinFS Syncでは、特にコミュニティ内の同期処理オペレーションのみがWinFS Syncサービス(WinFSアダプタ)を通じて行われる場合に、コミュニティの特定のトポロジを規定または指令しない。同期アダプタ(以下に定義されている)は、独自のトポロジ制約を導入することができる。
・ 変更追跡、変更ユニット、およびバージョン:WinFSストアはすべて、すべてのローカルのWinFS Items、Extensions、およびRelationshipsへの変更を追跡する。変更は、スキーマ内で定義されている変更ユニット精度のレベルで追跡される。Item、Extension、およびRelationship型の最上位レベルのフィールドは、スキーマデザイナにより複数の変更ユニットに細分されることが可能であり、最小精度が1つの最上位レベルのフィールドとなる。変更追跡のために、すべての変更ユニットに、同期パートナidとバージョン番号のペアであるVersionが割り当てられる(バージョン番号は、パートナ特有の単調増加番号である)。Versionsは、ローカルのストア内で変更が生じたり、他のレプリカから取得されるときに更新される。
・ 同期知識:知識は、いつでも与えられた同期レプリカの状態を表す、つまり、ローカルまたは他のレプリカからの与えられたレプリカが認識するすべての変更に関するメタデータをカプセル化する。WinFS Syncは、同期処理オペレーション間で同期レプリカにする知識を保持し、更新する。注意すべき重要なこととして、知識表現により、コミュニティ全体に関して解釈できるのであって、知識が格納されている特定のレプリカに関してだけではないことである。
・ 同期アダプタ:同期アダプタは、Sync Runtime APIを通じてWinFS Syncサービスにアクセスし、WinFSデータと非WinFSデータストアとの同期をとることができるマネージドコードアプリケーションである。シナリオの要求条件に応じて、WinFSデータのどの部分集合およびどのようなWinFSデータ型の同期をとるかは、アダプタ開発者次第である。アダプタは、EDSとの通信、WinFSスキーマとEDSサポートスキーマとの間の変換、独自構成およびメタデータの定義および管理を受け持つ。アダプタでは、WinFS Sync Adapter APIを実装して、WinFS Syncチームにより提供されるアダプタの共通構成および制御インフラストラクチャを利用するよう強く奨励される。詳細については、文献(例えば、非特許文献1および非特許文献2)を参照されたい。
WinFSデータと外部の非WinFSストアとの同期をとるが、WinFS形式で知識を出力または保持できないアダプタのために、WinFS Syncは、その後の変更列挙またはアプリケーションオペレーションに使用できるリモート知識を取得するサービスを提供する。バックエンドストアの能力に応じて、アダプタ側で、このリモート知識をバックエンドまたはローカルのWinFSストア上に格納したい場合がある。
簡単のため、同期「レプリカ」は、単一の論理的ロケーション内に存在する「WinFS」ストア内のデータの集合を表す構造であるが、非「WinFS」ストア上のデータは、「データソース」と呼ばれ、一般的にアダプタを使用する必要がある。
・ リモート知識:与えられた同期レプリカで他のレプリカから変更を取得したい場合、他のレプリカが変更を列挙する際に突き合わせるベースラインとして自分の持つ知識を提供する。同様に、与えられたレプリカ側で、他のレプリカに変更を送りたい場合に、競合の検出のためにリモートレプリカにより使用されることができるベースラインとして自分の持つ知識を提供する。同期変更の列挙および適用時に提供される他のレプリカに関する知識が、リモート知識と呼ばれる。
2.同期処理APIの主要事項
いくつかの実施形態では、同期APIは、同期構成APIと同期コントローラAPIの2つの部分に分けられる。同期構成APIを使用すると、アプリケーション側で、同期を構成し、2つのレプリカの間の特定の同期セッションのパラメータを指定することができる。与えられた同期セッションについて、構成パラメータは、同期をとるItemsの集合、同期のタイプ(一方向または両方向)、リモートデータソースに関する情報、および競合解決ポリシーを含む。同期コントローラAPIは、同期セッションを開始し、同期をキャンセルし、進行中の同期処理に関する進行状況およびエラー情報を受け取る。さらに、所定のスケジュールに従って同期処理を実行する必要のある特定の実施形態では、そのようなシステムは、スケジューリングをカスタマイズするためのスケジューリングメカニズムを備えることができる。
本発明のいくつかの実施形態では、「WinFS」データソースと非「WinFS」データソースとの間の情報の同期をとるために同期アダプタを採用する。アダプタの例として、「WinFS」連絡先フォルダと非WinFSメールボックスとの間のアドレス帳情報の同期をとるアダプタがある。これらの場合、アダプタ開発者は、「WinFS」スキーマと非「WinFS」データソーススキーマとの間のスキーマ変換コードを開発するため、「WinFS」同期プラットフォームにより提供される本明細書で説明されている「WinFS」同期処理コアサービスAPIを、サービスにアクセスするために使用することも可能である。さらに、アダプタ開発者は、非「WinFS」データソースの変更を伝達するためのプロトコルをサポートする。同期アダプタは、同期コントローラAPIを使用することにより呼び出され、制御され、このAPIを使用して進捗状況およびエラーを報告する。
しかし、本発明のいくつかの実施形態では、「WinFS」データストアと他の「WinFS」データストアとの同期をとるときに、「WinFS」−「WinFS」間同期サービスがハードウェア/ソフトウェアインターフェースシステム内に統合されていれば、同期アダプタは不要と考えられる。いずれにせよ、いくつかのそのような実施形態は、「WinFS」−「WinFS」と同期アダプタソリューションの両方に対する同期サービス群を提供し、これらは以下を含む。
・ 「WinFS」アイテム、拡張、および関係への変更の追跡。
・ 与えられた過去の状態以降の効率的なインクリメント的変更列挙のサポート。
・ 「WinFS」への外部変更の適用。
・ 変更適用時の競合処理。
図36を参照すると、これは、共通データストアの3つのインスタンスおよびそれらの同期をとるためのコンポーネントを例示している。第1のシステム3602は、利用できるように同期API 3652を公開する(3646)、WinFS−非WinFS同期のためのWinFS−WinFS同期サービス3622およびコア同期サービス3624を含むWinFSデータストア3612を備える。第1のシステム3602と同様に、第2のシステム3604は、利用できるように同期API 3652を公開する(3646)、WinFS−非WinFS同期のためのWinFS−WinFS同期サービス3632およびコア同期サービス3634を含むWinFSデータストア3614を備える。第1のシステム3602および第2のシステム3604は、それぞれのWinFS−WinFS同期サービス3622および3632を介して同期をとる(3642)。第3のシステム3606は、WinFSシステムではないが、WinFSレプリカとの同期コミュニティでデータソースを保持するためWinFS同期3666を使用するためのアプリケーションを備える。このアプリケーションは、WinFS Sync Config/Controlサービス3664を利用して、WinFS−WinFS同期サービス3622を介して(それ自身をWinFSデータストアとして仮想化できる場合)、または同期API 3652とインターフェースする(3648)同期アダプタ3662を介して、直接WinFSデータストア3612とインターフェースする(3644)ことができる。
この図に例示されているように、第1のシステム3602は、第2のシステム3604と第3のシステム3606の両方を認識し、直接同期をとる。しかし、第2のシステム3604も第3のシステム3606も、互いを認識せず、したがって、互いに直接変更を同期させないが、代わりに、一方のシステムに生じた変更は、第1のシステム3602を通じて伝搬しなければならない。
C.同期処理APIサービス
本発明のいくつかの実施形態は、変更列挙および変更適用という2つの基本サービスを含む同期サービスを対象とする。
1.変更列挙
本明細書の前の方で説明されているように、Change Enumerationを使用すると、同期処理アダプタは、同期サービスにより保持されている変更追跡データに基づき、このパートナとの同期が最後に試みられた以降に、データストアFolderに対し発生した変更を簡単に列挙することができる。変更列挙に関して、本発明のいくつかの実施形態は以下を対象とする。
・ 指定されたKnowledgeインスタンスに関して、与えられたレプリカ内のItems、Extensions、およびRelationshipsの変更の効率的列挙。
・ WinFSスキーマ内で指定された変更ユニット精度のレベルでの変更の列挙。
・ 複合アイテムに関して列挙された変更のグループ化。複合アイテムは、アイテム、そのすべての拡張、そのアイテムとのすべての保持関係、およびその埋め込まれたアイテムに対応するすべての複合アイテムからなる。アイテム間の参照関係の変更は、別々に列挙される。
・ 変更列挙に対するバッチ処理。バッチ処理の精度は、複合アイテムまたは関係変更(参照関係の)である。
・ 変更列挙時のレプリカ内のアイテムに対するフィルタの指定、例えば、レプリカは与えられたフォルダ内のすべてのアイテムからなるが、この特定の変更列挙については、アプリケーション側では、第1の名前が「A」で始まるすべてのContactアイテムに対する変更を列挙することのみを望む(このサポートはBマイルストーンの後に(post B−milestone)追加される)。
・ 個々の変更ユニット(または、アイテム、拡張、または関係全体)を知識の中で同期失敗として記録し、それらを次回に再列挙させることができる、列挙された変更に対するリモート知識の使用。
・ 変更列挙時に変更とともにメタデータを返すことによりWinFS同期メタデータを理解できる場合のある上級アダプタの使用。
2.変更適用
本明細書のはじめの方で説明されているように、変更適用では、同期アダプタは、ストレージプラットフォームスキーマに変更を変換することが予期されているため、そのバックエンドから受け取った変更をローカルストレージプラットフォームに適用できる。変更適用に関して、本発明のいくつかの実施形態は以下を対象とする。
・ WinFS変更メタデータへの対応する更新のある、他のレプリカ(または非WinFSストア)からのインクリメント的変更の適用。
・ 変更ユニットの精度での変更適用後の競合の検出。
・ 変更適用後に個々の変更ユニットレベルで生じる成功、失敗、および競合の報告であって、アプリケーション(アダプタおよび同期制御アプリケーションを含む)がその情報を進捗状況、エラー、およびステータス報告およびもしあればそのバックエンド状態の更新に使用できるようにする報告。
・ 次の変更列挙オペレーションでアプリケーションにより供給された変更の「反映」を防ぐために変更適用時にリモート知識を更新すること。
・ WinFS同期メタデータを変更とともに理解し提供することができる上級アダプタの使用。
3.サンプルコード
以下に、FOO同期アダプタが同期ランタイムとやり取りする方法を示すコードサンプルを掲載した(すべてのアダプタ特有の関数の先頭にはFOOが付いている)。
ItemContext ctx = new ItemContext ("\.\System\UserData\dshah\My Contacts", true);

//レプリカアイテムidとリモートパートナidをプロファイルから取得する。
//ほとんどのアダプタは、同期プロファイルからこの情報を取得する。

Guid replicaItemId = FOO_GetReplicaId();
Guid remotePartnerId = FOO_Get_RemotePartnerId();

//
//上記のようにstoredKnowledgeIdを使用してストア内に格納されている知識を検索する。
//
ReplicaKnowledge remoteKnowledge = ...;

//
//ReplicaSynchronizerを初期化する。
//
ctx.ReplicaSynchronizer = new ReplicaSynchronizer( replicaItemId, remotePartnerId);
ctx.ReplicaSynchronizer.RemoteKnowledge = remoteKnowledge; ChangeReader reader = ctx.ReplicaSynchronizer.GetChangeReader();

//
//変更を列挙し、それらを処理する。
//
bool bChangesToRead = true;
while (bChangesToRead)
{
ChangeCollection<object> changes = null;
bChangesToRead = reader.ReadChanges( 10, out changes);
foreach (object change in changes)
{
//列挙されているオブジェクトを処理し、アダプタは、それ自体の
//スキーマ変換およびIDマッピングを実行する。この目的のために
//Ctxから追加オブジェクトを取り出して、変更がリモートストアに
//適用された後のアダプタメタデータを修正することすらできる。
ChangeStatus status = FOOProcessAndApplyToRemoteStore(change);

//学習された知識をステータスで更新する
reader.AcknowledgeChange ( changeStatus);



remoteKnowledge = ctx.ReplicaSynchronizer.GetUpdatedRemoteKnowledge(); reader.Close();

//
//もしあれば更新された知識とアダプタメタデータを保存する。
//
ctx.Update();

//
//変更適用のサンプル、まず最初に、前のようにstoredKnowledgeId
//を使用してリモート知識を初期化する。
//
remoteKnowledge = ...;

ctx.ReplicaSynchronizer.ConflictPolicy = conflictPolicy;
ctx.ReplicaSynchronizer.RemotePartnerId = remotePartnerId;
ctx.ReplicaSynchronizer.RemoteKnowledge = remoteKnowledge;
ctx.ReplicaSynchronizer.ChangeStatusEvent += FOO_OnChangeStatusEvent;

//
//リモートストアから変更を取得する。アダプタは、ストアから
//バックエンド特有のメタデータを取り出す役割を持つ。これは
//レプリカ上の拡張とすることができる。
//

object remoteAnchor = FOO_GetRemoteAnchorFromStore();
FOO_RemoteChangeCollection remoteChanges = FOO_GetRemoteChanges(remoteAnchor);

//
//変更コレクションを充填する。
//
foreach( FOO_RemoteChange change in remoteChanges)
{
//IDマッピングを実行する役割を持つアダプタ
Guid localId = FOO_MapRemoteId(change);

//例えば、Personオブジェクトの同期をとることにする。
ItemSearcher searcher = Person.GetSearcher(ctx);
searcher.Filters.Add("PersonId=@localId");
searcher.Parameters["PersonId"] = localId;
Person person = searcher.FindOne();

//
//アダプタは、リモート変更をPersonオブジェクト上の修正に変換する
//このアダプタの一部として、変更をリモートオブジェクトのアイテム
//レベルのバックエンド特有のメタデータに加えることさえできる。
//
FOO_TransformRemoteToLocal ( remoteChange, person);


ctx.Update();

//
//新しいリモートアンカーを保存する(これは、レプリカ上の拡張とすることができる)
//
FOO_SaveRemoteAnchor();

//
//これは、リモート知識の同期がとれていないので、通常のWinFS API保存である。
//
remoteKnowledge = ctx.ReplicaSynchronizer.GetUpdatedRemoteKnowledge();
ctx.Update();
ctx.Close();

//
//アダプタは、アプリケーションステータスコールバックの処理をコールバックする
//
void FOO_OnEntitySaved( object sender, ChangeStatusEventArgs args)
{
remoteAnchor.AcceptChange( args.ChangeStatus);
}
4.API同期処理のメソッド
本発明の一実施形態では、WinFSストアと非WinFSストアとの間で同期をとることは、WinFSベースのハードウェア/ソフトウェアインターフェースシステムにより公開されている同期APIを介して可能である。
一実施形態では、すべての同期アダプタは、同期アダプタAPI、共通言語ランタイム(CLR)マネージドAPIを実装し、矛盾なく展開、初期化、および制御できるようにする必要がある。アダプタAPIは以下を備える。
・ ハードウェア/ソフトウェアインターフェースシステム同期フレームワークにアダプタを登録する標準メカニズム
・ アダプタがその機能およびアダプタを初期化するために必要な構成情報の型を宣言する標準メカニズム
・ 初期化情報をアダプタに受け渡す標準メカニズム
・ アダプタが進捗状況を、同期を呼び出すアプリケーションに送り返して報告するメカニズム
・ 同期処理時に発生したエラーを報告するメカニズム
・ 進行中の同期処理オペレーションのキャンセルを要求するメカニズム
シナリオの要求条件に応じて、アダプタには2つの潜在的プロセスモデルがある。アダプタは、それを呼び出すアプリケーションと同じプロセス空間内で、または独立のプロセスですべて自動的に実行することができる。アダプタは、別の自プロセスで実行するために、アダプタをインスタンス化するために使用される自ファクトリクラスを定義する。ファクトリは、呼び出し側アプリケーションと同じプロセスでアダプタのインスタンスを返すか、または異なるMicrosoft共通言語ランタイムアプリケーション領域またはプロセス内でアダプタのリモートインスタンスを返すことができる。同じプロセス内のアダプタをインスタンス化する既定のファクトリ実装が実現される。実際には、多くのアダプタが呼び出し側アプリケーションと同じプロセスで実行される。処理外モデルは、通常、以下の理由の1つまたは両方について必要である。
・ セキュリティ目的。アダプタは、特定のプロセスまたはサービスのプロセス空間内で実行されなければならない。
・ アダプタは、呼び出し側アプリケーションからの要求を処理する他に、他のソースからの要求−例えば、受け取ったネットワーク要求−を処理しなければならない。
図37を参照すると、本発明の一実施形態は、状態がどのように計算されるか、またはその関連するメタデータがどのように交換されるかを認識しない単純なアダプタを想定している。この実施形態では、同期処理は、同期をとりたいデータソースに関してレプリカにより行われるが、そのために、最初に、ステップ3702で、前記データソースと最後に同期した以降に発生した変更を決定し、その後、レプリカは現在の状態の情報に基づいてこの最後の同期以降に発生したインクリメント的変更を送り、この状態情報およびインクリメント的変更は、アダプタを介してデータソースに送られる。ステップ3704で、アダプタは、前のステップでレプリカから変更データを受け取った後、できる限り多くのデータに対する変更を実装し、どの変更が成功し、どの変更が失敗したかを追跡し、成功−失敗情報をWinFS(レプリカの)に送り返す。レプリカ(WinFS)のハードウェア/ソフトウェアインターフェースシステムは、ステップ3706で、レプリカから成功−失敗情報を受け取った後、データソースに対する新しい状態情報を計算し、この情報を将来そのレプリカで使用するため格納しておき、この新しい状態情報をデータソース、つまりアダプタに送り返して、格納し、アダプタによって後から使用できるようにする。
D.同期スキーマの追加態様
以下は、本発明の様々な態様に対する同期スキーマの追加(またはより具体的な)態様である。
・ それぞれのレプリカは、データストアの全体から取り出した定義済み同期部分集合−複数のインスタンスを持つスライス−である。
・ 競合解決ポリシーは、それぞれのレプリカ(およびアダプタ/データソースの組合せ)により処理される−つまり、それぞれのレプリカは、自基準と競合解決スキーマに基づいて競合を解決することができる。さらに、データストアのそれぞれのインスタンスの違いが生じ、その結果、将来さらに競合が生じるが、更新された状態情報に反映されるような競合のインクリメント的および順次的列挙は、その更新された状態情報を受け取る他のレプリカからは見えない。
・ 同期スキーマのルートには、一意的なIDを持つルートフォルダ(実際には、ルートItem)を定義するための基本型を持つレプリカ、それがメンバである同期コミュニティに対するID、および特定のレプリカに対し必要な、または望ましい何らかのフィルタおよびその他の要素がある。
・ それぞれのレプリカの「マッピング」は、レプリカ内に保持され、したがって、任意の特定のレプリカのマッピングは、そのようなレプリカが関知している他のレプリカに制限される。このマッピングは、同期コミュニティ全体の部分集合しか含まないが、前記レプリカに対する変更は、それでも、共通の共有レプリカを介して同期コミュニティ全体に伝搬する(ただし、特定のレプリカは、不明なレプリカと他のどのレプリカをふつうに共有しているかを認識しない)。さらに、それぞれのレプリカは、同じ同期コミュニティにおいて異なる同期パートナとの異なる同期ビヘイビアを許容するように複数のマッピングを備えることができる。

・ レプリカのマッピングは、コミュニティ識別および同期パートナのマッピング識別を含むだけでよく、このため、レプリカは、同期パートナレプリカの物理的位置を必ずしも知らなくてもパートナと同期をとることができる(したがって、同期パートナレプリカのセキュリティが向上する)。
・ 同期スキーマは、すべてのレプリカから利用できる複数の定義済み競合ハンドラとともに、ユーザ/開発者定義済みカスタム競合ハンドラの機能を含む。スキーマは、さらに、3つの特別な「競合リゾルバ」として、(a)例えば、(i)同じ変更ユニットが2つの場所で変更された場合の取り扱い方法、(ii)変更ユニットが一方の場所で変更され、他方の場所で削除される場合の取り扱い方法、および(iii)2つの異なる変更ユニットが2つの異なる場所で同じ名前を持つ場合の取り扱い方法に基づく異なる方法で異なる競合を解決する競合「フィルタ」、(b)リストの各要素で競合が正常に解決されるまで順番に試みる一連のアクションを指定する場合の競合「ハンドラリスト」、および(c)競合を追跡するが、ユーザ介入なしでアクションをさらに実行することはしない「何もしない」ログを含むこともできる。
・ レプリカの同期スキーマおよび使用により、真の分散型ピアツーピアマルチマスター同期コミュニティが使用可能になる。さらに、同期コミュニティタイプはないが、同期コミュニティは、単に、レプリカ自体のコミュニティフィールドの中の値としてだけ存在する。
・ すべてのレプリカは、インクリメント的変更列挙を追跡し、同期コミュニティで知られている他のレプリカに対する状態情報を格納するため自メタデータを持つ。
・ 変更ユニットは、自メタデータを持ち、これは、パートナキーとパートナ変更番号を含むバージョン番号、各変更ユニットのItem/Extension/Relationshipのバージョニング、同期コミュニティからレプリカが見た/受信した変更に関する知識、GUIDおよびローカルID構成、およびクリーンアップのため参照関係上に格納されているGUIDを含む。
IV.結論
これまでに例示したように、本発明は、データの編成、検索、および共有のためのストレージプラットフォームを対象とする。本発明のストレージプラットフォームは、既存のファイルシステムおよびデータベースシステムを超えるデータストレージの概念を拡張し、広げるものであり、リレーショナル(表形式)データ、XML、およびItemsと呼ばれる新しいデータ形態などの、構造化、非構造化、または半構造化データを含むすべての型のデータ用のストアとなるように設計されている。本発明のストレージプラットフォームでは、共通のストレージ基盤および図式化されたデータを通じて、より効率的なアプリケーション開発を消費者、知識労働者、および企業向けに行うことができる。これは、データモデルに固有の機能を利用可能にするだけでなく、既存のファイルシステムおよびデータベースアクセス方法も包含し、拡張する機能豊富な拡張可能アプリケーションプログラミングインターフェースを備える。本発明の広範な概念から逸脱することなく、上述の実施形態に対し変更を加えられることは理解される。したがって、本発明は、開示されている特定の実施形態に限定されず、付属の請求項の定義に従って本発明の精神および範囲内にあるすべての修正形態を対象とすることを意図されている。
上述の内容から明らかなように、本発明の様々なシステム、方法、および態様の全部または一部は、プログラムコード(つまり、命令)の形で具現化できる。このプログラムコードは、限定はしないが、フロッピー(登録商標)ディスケット、CD−ROM、CD−RW、DVD−ROM、DVD−RAM、磁気テープ、フラッシュメモリ、ハードディスクドライブ、またはその他のマシン可読記憶媒体を含む、磁気、電気、または光記憶媒体などのコンピュータ可読媒体上に格納することができ、プログラムコードがコンピュータまたはサーバなどのマシン内にロードされ実行されると、マシンは本発明を実践するための装置となる。本発明は、さらに、電気配線またはケーブル配線、光ファイバの使用、インターネットまたはイントラネットを含むネットワークなどの何らかの伝送媒体で、または他の形態の伝送を介して、伝送されるプログラムコードの形態で具現化されることも可能であり、プログラムコードがコンピュータなどのマシンにより受信され、読み込まれ、実行されると、マシンは本発明を実施するための装置となる。汎用プロセッサ上に実装された場合、プログラムコードはプロセッサとの組合せで、特定のロジック回路と類似の動作をする独自の装置を実現する。
本発明の複数の態様が組み込まれうるコンピュータシステムを表すブロック図である。 3つのコンポーネントグループであるハードウェアコンポーネント、ハードウェア/ソフトウェアインターフェースシステムコンポーネント、およびアプリケーションプログラムコンポーネントに分割されたコンピュータシステムを例示するブロック図である。 ファイルベースのオペレーティングシステムにおけるディレクトリ内の複数のフォルダにグループ化されているファイルの従来のツリーベースの階層構造を例示する図である。 ストレージプラットフォームを例示するブロック図である。 Items、Item Folders、およびCategories間の構造的関係を例示する図である。 Itemの構造を例示するブロック図である。 図5AのItemの複合プロパティ型を例示するブロック図である。 複合型がさらに記述されている(明示的にリストされている)「Location」Itemを例示するブロック図である。 Base SchemaにあるItemの子型としてItemを例示する図である。 継承型が明示的にリストされている(イミディエイトプロパティの他に)図6Aの子型Itemを例示するブロック図である。 2つの最上位レベルのクラス型を含むBase Schema、ItemおよびPropertyBase、およびそれから派生した追加Base Schema型を例示するブロック図である。 Core Schema内のItemを例示するブロック図である。 Core Schema内のプロパティ型を例示するブロック図である。 Item Folder、そのメンバItems、およびItem FolderとそのメンバItemsとの間の相互接続のRelationshipsを例示するブロック図である。 Category(またも、Item自体である)、そのメンバItems、およびCategoryとそのメンバItemsとの間の相互接続のRelationshipsを例示するブロック図である。 ストレージプラットフォームのデータモデルの参照型階層を例示する図である。 関係を分類する方法を例示する図である。 通知メカニズムを例示する図である。 2つのトランザクションが両方とも新しいレコードを同じB−Tree内に挿入する実施例を示す図である。 データ変更検出プロセスを例示する図である。 ディレクトリツリー例を例示する図である。 ディレクトリベースのファイルシステムの既存のフォルダがストレージプラットフォームのデータストアに移動される例を例示する図である。 Containment Foldersの概念を例示する図である。 ストレージプラットフォームAPIの基本アーキテクチャを例示する図である。 ストレージプラットフォームAPIスタックの様々なコンポーネントの概略を表す図である。 Contacts Itemスキーマ例の図である。 図21AのContacts Itemスキーマ例のElementsの図である。 ストレージプラットフォームAPIのランタイムフレームワークを例示する図である。 「FindAll」オペレーションの実行を例示する図である。 ストレージプラットフォームAPIクラスがストレージプラットフォームSchemaから生成されるプロセスを例示する図である。 File APIが基づくスキーマを例示する図である。 データセキュリティの目的のために使用されるアクセスマスク形式を例示する図である。 (パートa、b、およびc)既存のセキュリティ領域から切り出される新しいまったく同じように保護されているセキュリティ領域を示す図である。 Itemの検索ビューの概念を例示するブロック図である。 Item階層例を例示する図である。 第1および第2のコードセグメントが通信に使用する情報伝達ルートとしてインターフェースInterface1を例示する図である。 システムの第1および第2のコードセグメントが媒体Mを介して通信できるようにするインターフェースオブジェクトI1およびI2を含むものとしてインターフェースを例示する図である。 インターフェースInterface1により提供される機能を細分し、インターフェースの通信を複数のインターフェースInterface1A、Interface1B、Interface1Cに変換する方法を例示する図である。 インターフェースI1により提供される機能を複数のインターフェースI1a、I1b、I1cに細分する方法を例示する図である。 意味のないパラメータ精度を無視できる、または任意のパラメータで置き換えることができるシナリオを例示する図である。 パラメータを無視するか、またはインターフェースに追加するように定義される代替えインターフェースによりインターフェースが置き換えられるシナリオを例示する図である。 第1および第2のCode Segmentsがその両方を含むモジュールにマージされるシナリオを例示する図である。 インターフェースの一部または全部が他のインターフェースにインラインで書き込まれマージされたインターフェースを形成するシナリオを例示する図である。 ミドルウェアの1つまたは複数が第1のインターフェース上の通信を変換し、1つまたは複数の異なるインターフェースに適合するようにする方法を例示する図である。 一方のインターフェースから通信を受け取るが、機能を第2および第3のインターフェースに送信するようにコードセグメントをインターフェースとともに導入する方法を例示する図である。 ジャストインタイムコンパイラ(JIT)が一方のコードセグメントから他方のコードセグメントに通信を変換する方法を例示する図である。 1つまたは複数のインターフェースを動的に書き換えるJIT方法が適用され、インターフェースを動的に因数分解するか、または他の何らかの方法で変更することができることを例示する図である。 共通データストアの3つのインスタンスおよびそれらの同期をとるためのコンポーネントを例示する図である。 状態がどのように計算されるか、またはその関連するメタデータがどのように交換されるかを認識しない単純なアダプタを想定する本発明の一実施形態を例示する図である。

Claims (18)

  1. ハードウェア/ソフトウェアインターフェースシステム用ストレージプラットフォームの同期をとる方法であって、
    第1のリレーショナルデータベースを第1のコンピューティングシステムが格納するステップであって、前記第1のリレーショナルデータベースはアイテムのローカルバージョンおよびフォルダアイテムを含み、前記アイテムのローカルバージョンは変更ユニットおよび第1のバージョン番号を含み、前記フォルダアイテムはコミュニティフォルダへマッピングされる、格納するステップと、
    前記アイテムのローカルバージョンの変更ユニットにおける要素の値の変更毎に前記第1のバージョン番号を前記第1のコンピューティングシステムが1増加させるステップと、
    第2のコンピューティングシステムから前記アイテムのリモートバージョンを前記第1のコンピューティングシステムが受信するステップであって、前記第2のコンピューティングシステムは第2のリレーショナルデータベースを格納し、前記第2のリレーショナルデータベースは前記アイテムのリモートバージョンを含み、前記アイテムのリモートバージョンは変更ユニットおよび第2のバージョン番号を含み、前記第2のコンピューティングシステムは前記アイテムのリモートバージョンの変更ユニットにおける要素の値の変更毎に前記第2のバージョン番号を1増加させるよう構成される、受信するステップと、
    前記第2のバージョン番号が前記第1のバージョン番号よりも新しい場合、
    前記コミュニティフォルダからのアイテムのリモートバージョンをローカルバージョンへ前記第1のコンピューティングシステムが変換するステップと、
    前記アイテムのリモートバージョンの変換後、前記アイテムのローカルバージョンの変更ユニットにおける要素の値を前記アイテムのリモートバージョンの変更ユニットにおける要素の値により前記第1のコンピューティングシステムが取り替えるステップと
    を備えたことを特徴とする方法。
  2. 前記変更ユニットは、Itemであることを特徴とする請求項1に記載の方法。
  3. 前記変更ユニットは、Propertyであることを特徴とする請求項1に記載の方法。
  4. 前記変更ユニットは、Nested ElementのPropertyを含まないことを特徴とする請求項1に記載の方法。
  5. 前記ストレージプラットフォームの複数のインスタンスは、マルチマスター同期コミュニティを含むことを特徴とする請求項1に記載の方法。
  6. 前記アイテムのローカルバージョンの変更ユニットにおける要素の値と前記アイテムのリモートバージョンの変更ユニットにおける要素の値との間の競合を前記第1のコンピューティングシステムが検出するステップと、
    前記アイテムのローカルバージョンの変更ユニットにおける要素の値と前記アイテムのリモートバージョンの変更ユニットにおける要素の値との間の競合を前記第1のコンピューティングシステムが解決するステップと
    をさらに備えたことを特徴とする請求項1に記載の方法。
  7. ハードウェア/ソフトウェアインターフェースシステム用ストレージプラットフォームの同期をとるコンピューティングシステムであって、
    アイテムのローカルバージョンおよびフォルダアイテムを含む第1のリレーショナルデータベースであって、前記アイテムのローカルバージョンは変更ユニットおよび第1のバージョン番号を含み、前記フォルダアイテムはコミュニティフォルダへマッピングされる、第1のリレーショナルデータベースと、
    前記アイテムのローカルバージョンの変更ユニットにおける要素の値の変更毎に前記第1のバージョン番号を1増加させる手段と、
    のコンピューティングシステムから前記アイテムのリモートバージョンを受信する手段であって、前記別のコンピューティングシステムは第2のリレーショナルデータベースを格納し、前記第2のリレーショナルデータベースは前記アイテムのリモートバージョンを含み、前記アイテムのリモートバージョンは変更ユニットおよび第2のバージョン番号を含み、前記別のコンピューティングシステムは前記アイテムのリモートバージョンの変更ユニットにおける要素の値の変更毎に前記第2のバージョン番号を1増加させるよう構成される、受信する手段と、
    前記第2のバージョン番号が前記第1のバージョン番号よりも新しい場合、
    前記コミュニティフォルダからのアイテムのリモートバージョンをローカルバージョンへ変換する手段と、
    前記アイテムのリモートバージョンの変換後、前記アイテムのローカルバージョンの変更ユニットにおける要素の値を前記アイテムのリモートバージョンの変更ユニットにおける要素の値により取り替える手段と
    を備えたことを特徴とするシステム。
  8. 前記変更ユニットは、Itemであることを特徴とする請求項7に記載のシステム。
  9. 前記変更ユニットは、Propertyであることを特徴とする請求項7に記載のシステム。
  10. 前記変更ユニットは、Nested ElementのPropertyを含まないことを特徴とする請求項7に記載のシステム。
  11. 前記ストレージプラットフォームの複数のインスタンスは、マルチマスター同期コミュニティを含むことを特徴とする請求項7に記載のシステム。
  12. 前記アイテムのローカルバージョンの変更ユニットにおける要素の値と前記アイテムのリモートバージョンの変更ユニットにおける要素の値との間の競合を検出する手段と、
    前記アイテムのローカルバージョンの変更ユニットにおける要素の値と前記アイテムのリモートバージョンの変更ユニットにおける要素の値との間の競合を解決する手段と
    をさらに備えたことを特徴とする請求項7に記載のシステム。
  13. コンピュータに、ハードウェア/ソフトウェアインターフェースシステム用ストレージプラットフォームの同期を実行させるためのプログラムを記録したコンピュータ可読記録媒体であって、
    第1のリレーショナルデータベースを格納する手順であって、前記第1のリレーショナルデータベースはアイテムのローカルバージョンおよびフォルダアイテムを含み、前記アイテムのローカルバージョンは変更ユニットおよび第1のバージョン番号を含み、前記フォルダアイテムはコミュニティフォルダへマッピングされる、格納する手順と、
    前記アイテムのローカルバージョンの変更ユニットにおける要素の値の変更毎に前記第1のバージョン番号を1増加させる手順と、
    のコンピューティングシステムから前記アイテムのリモートバージョンを受信する手順であって、前記別のコンピューティングシステムは第2のリレーショナルデータベースを格納し、前記第2のリレーショナルデータベースは前記アイテムのリモートバージョンを含み、前記アイテムのリモートバージョンは変更ユニットおよび第2のバージョン番号を含み、前記別のコンピューティングシステムは前記アイテムのリモートバージョンの変更ユニットにおける要素の値の変更毎に前記第2のバージョン番号を1増加させるよう構成される、受信する手順と、
    前記第2のバージョン番号が前記第1のバージョン番号よりも新しい場合、
    前記コミュニティフォルダからのアイテムのリモートバージョンをローカルバージョンへ変換する手順と、
    前記アイテムのリモートバージョンの変換後、前記アイテムのローカルバージョンの変更ユニットにおける要素の値を前記アイテムのリモートバージョンの変更ユニットにおける要素の値により取り替える手順と
    を実行させるプログラムを記録したことを特徴とするコンピュータ可読記録媒体。
  14. 前記変更ユニットは、Itemであることを特徴とする請求項13に記載のコンピュータ可読記録媒体
  15. 前記変更ユニットは、Propertyであることを特徴とする請求項13に記載のコンピュータ可読記録媒体
  16. 前記変更ユニットは、Nested ElementのPropertyを含まないことを特徴とする請求項13に記載のコンピュータ可読記録媒体
  17. 前記ストレージプラットフォームの複数のインスタンスは、マルチマスター同期コミュニティを含むことを特徴とする請求項13に記載のコンピュータ可読記録媒体
  18. 前記第1のコンピューティングシステムによって、前記アイテムのローカルバージョンの変更ユニットにおける要素の値と前記アイテムのリモートバージョンの変更ユニットにおける要素の値との間の競合を検出する手段と、
    前記第1のコンピューティングシステムによって、前記アイテムのローカルバージョンの変更ユニットにおける要素の値と前記アイテムのリモートバージョンの変更ユニットにおける要素の値との間の競合を解決する手段と
    を実行させるプログラムをさらに記録したことを特徴とする請求項13に記載のコンピュータ可読記録媒体。
JP2006523856A 2003-08-21 2004-07-29 同期スキーマの実装のためのシステム Expired - Fee Related JP4583375B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US10/646,632 US7529811B2 (en) 2003-08-21 2003-08-21 Systems and methods for the implementation of a core schema for providing a top-level structure for organizing units of information manageable by a hardware/software interface system
PCT/US2003/026144 WO2005029313A1 (en) 2003-08-21 2003-08-21 Systems and methods for data modeling in an item-based storage platform
US10/693,362 US8166101B2 (en) 2003-08-21 2003-10-24 Systems and methods for the implementation of a synchronization schemas for units of information manageable by a hardware/software interface system
PCT/US2004/024287 WO2005024626A1 (en) 2003-08-21 2004-07-29 Systems for the implementation of a synchronization schemas

Publications (2)

Publication Number Publication Date
JP2007503049A JP2007503049A (ja) 2007-02-15
JP4583375B2 true JP4583375B2 (ja) 2010-11-17

Family

ID=34279605

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006523856A Expired - Fee Related JP4583375B2 (ja) 2003-08-21 2004-07-29 同期スキーマの実装のためのシステム

Country Status (5)

Country Link
EP (1) EP1573508A4 (ja)
JP (1) JP4583375B2 (ja)
KR (1) KR101109399B1 (ja)
CN (1) CN1739093B (ja)
WO (1) WO2005024626A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8166101B2 (en) 2003-08-21 2012-04-24 Microsoft Corporation Systems and methods for the implementation of a synchronization schemas for units of information manageable by a hardware/software interface system
US7590643B2 (en) 2003-08-21 2009-09-15 Microsoft Corporation Systems and methods for extensions and inheritance for units of information manageable by a hardware/software interface system
US8131739B2 (en) 2003-08-21 2012-03-06 Microsoft Corporation Systems and methods for interfacing application programs with an item-based storage platform
US8238696B2 (en) 2003-08-21 2012-08-07 Microsoft Corporation Systems and methods for the implementation of a digital images schema for organizing units of information manageable by a hardware/software interface system
US7805422B2 (en) 2005-02-28 2010-09-28 Microsoft Corporation Change notification query multiplexing
US7788163B2 (en) * 2005-03-11 2010-08-31 Chicago Mercantile Exchange Inc. System and method of utilizing a distributed order book in an electronic trade match engine
US7991740B2 (en) * 2008-03-04 2011-08-02 Apple Inc. Synchronization server process
WO2012047138A1 (en) * 2010-10-04 2012-04-12 Telefonaktiebolaget L M Ericsson (Publ) Data model pattern updating in a data collecting system
TWI497311B (zh) * 2013-03-28 2015-08-21 Quanta Comp Inc 跨裝置通訊傳輸系統及其方法
US9542467B2 (en) 2013-11-18 2017-01-10 International Business Machines Corporation Efficiently firing mapping and transform rules during bidirectional synchronization
US9367597B2 (en) 2013-11-18 2016-06-14 International Business Machines Corporation Automatically managing mapping and transform rules when synchronizing systems
US10402744B2 (en) 2013-11-18 2019-09-03 International Busniess Machines Corporation Automatically self-learning bidirectional synchronization of a source system and a target system
US10628424B2 (en) 2016-09-15 2020-04-21 Oracle International Corporation Graph generation for a distributed event processing system

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0752653B1 (en) * 1995-07-07 2003-01-15 Sun Microsystems, Inc. Method and system for synchronizing the execution of events during software testing
US5774717A (en) * 1995-12-15 1998-06-30 International Business Machines Corporation Method and article of manufacture for resynchronizing client/server file systems and resolving file system conflicts
US5893106A (en) 1997-07-11 1999-04-06 International Business Machines Corporation Object oriented server process framework with interdependent-object creation
US6553391B1 (en) * 2000-06-08 2003-04-22 International Business Machines Corporation System and method for replicating external files and database metadata pertaining thereto
JP2002149464A (ja) * 2000-08-17 2002-05-24 Fusionone Inc データ転送および同期システム用のベースローリングエンジン
DE60213419T2 (de) * 2001-03-16 2007-10-31 Novell, Inc., Provo Client-server-modell zur synchronisation von dateien
US7711771B2 (en) * 2001-05-25 2010-05-04 Oracle International Corporation Management and synchronization application for network file system
WO2003044698A1 (en) * 2001-11-15 2003-05-30 Visto Corporation System and methods for asychronous synchronization
GB0128243D0 (en) * 2001-11-26 2002-01-16 Cognima Ltd Cognima patent

Also Published As

Publication number Publication date
CN1739093B (zh) 2010-05-12
EP1573508A4 (en) 2006-04-26
CN1739093A (zh) 2006-02-22
KR20070083241A (ko) 2007-08-24
KR101109399B1 (ko) 2012-01-30
WO2005024626A1 (en) 2005-03-17
JP2007503049A (ja) 2007-02-15
EP1573508A1 (en) 2005-09-14

Similar Documents

Publication Publication Date Title
JP4583377B2 (ja) ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報のユニットに対する関係および階層の同期サービスを実現するシステムおよび方法
JP4583376B2 (ja) ハードウェア/ソフトウェアインタフェースシステムにより管理可能な情報のユニットに対する同期処理サービスを実現するシステムおよび方法
JP4738908B2 (ja) ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報の単位のピアツーピア同期化のための競合処理を提供するためのシステムおよび方法
US8166101B2 (en) Systems and methods for the implementation of a synchronization schemas for units of information manageable by a hardware/software interface system
US7743019B2 (en) Systems and methods for providing synchronization services for units of information manageable by a hardware/software interface system
JP4394643B2 (ja) アイテムベースのストレージプラットフォームにおけるデータモデリングのためのシステムおよび方法
US20050049994A1 (en) Systems and methods for the implementation of a base schema for organizing units of information manageable by a hardware/software interface system
JP2007521533A (ja) アプリケーションプログラムをアイテムベースのストレージプラットフォームとインターフェースするためのシステムおよび方法
JP4583375B2 (ja) 同期スキーマの実装のためのシステム
JP4580389B2 (ja) 仲介ファイルシステム共有または仲介デバイスを介してコンピュータシステムを同期させるためのシステムおよび方法
JP4580390B2 (ja) ハードウェア/ソフトウェアインターフェイスシステムによって管理可能な情報単位の拡張および継承のためのシステムおよび方法
JP4394644B2 (ja) データの編成、検索、および共有のためのストレージプラットフォーム
KR101109390B1 (ko) 하드웨어/소프트웨어 인터페이스 시스템에 의해 관리가능한 정보의 단위들에 대한 동기화 서비스를 제공하는시스템 및 방법
KR20060110733A (ko) 중간 파일 시스템 공유 또는 장치를 통해 컴퓨터 시스템을동기화하는 시스템 및 방법
NZ540221A (en) Systems and methods for extensions and inheritance for units of information manageable by a hardware/software interface system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070730

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100413

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100713

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100824

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100831

R150 Certificate of patent or registration of utility model

Ref document number: 4583375

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130910

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees