JP4738908B2 - ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報の単位のピアツーピア同期化のための競合処理を提供するためのシステムおよび方法 - Google Patents

ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報の単位のピアツーピア同期化のための競合処理を提供するためのシステムおよび方法 Download PDF

Info

Publication number
JP4738908B2
JP4738908B2 JP2005175754A JP2005175754A JP4738908B2 JP 4738908 B2 JP4738908 B2 JP 4738908B2 JP 2005175754 A JP2005175754 A JP 2005175754A JP 2005175754 A JP2005175754 A JP 2005175754A JP 4738908 B2 JP4738908 B2 JP 4738908B2
Authority
JP
Japan
Prior art keywords
item
conflict
change
data
unit
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
JP2005175754A
Other languages
English (en)
Other versions
JP2006018821A (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
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2006018821A publication Critical patent/JP2006018821A/ja
Application granted granted Critical
Publication of JP4738908B2 publication Critical patent/JP4738908B2/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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/08Protocols for interworking; Protocol conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • 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/18File system types
    • G06F16/182Distributed file systems
    • G06F16/1834Distributed file systems implemented based on peer-to-peer networks, e.g. gnutella
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • H04L67/30Profiles
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/40Network security protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
    • H04L69/322Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
    • H04L69/329Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the application layer [OSI layer 7]
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users

Description

本出願は一般に情報のストレージおよび検索の分野、ならびに、異なるタイプのデータをコンピュータ化されたシステムにおいて編成、検索および共有するためのアクティブストレージプラットフォームに関する。具体的には、本発明は、データプラットフォームの複数のインスタンスの間のデータのピアツーピア同期化のための競合処理に関する。
個々のディスク容量は、過去10年間で1年あたりほぼ70%増大してきた。ムーアの法則は、長年にわたって起こっている、中央処理装置(CPU)能力における途方もなく大きい進歩を正確に予測した。有線および無線技術は、途方もなく大きい接続性および帯域幅を提供している。現在の傾向が継続すると仮定すると、数年以内に、平均的なラップトップコンピュータは約1テラバイト(TB)のストレージを保有するようになり、何百万のファイルを含むようになり、500ギガバイト(GB)のドライブが一般的となるであろう。
米国特許出願第10/646646号 米国特許出願第10/646646号
消費者は自分のコンピュータを、従来の個人情報マネージャ(PIM)スタイルのデータであるか、デジタル音楽または写真などのメディアであるかにかかわらず、主に通信および個人情報の編成のために使用する。デジタルコンテンツの量、および生のバイトを格納する能力は、大いに増大しているが、消費者がこのデータを編成および単一化するために使用可能な方法は、この増大についてきていない。知識労働者は情報の管理および共有に莫大な量の時間を費やしており、ある調査では、知識労働者は15〜25%の時間を非生産的情報関連のアクティビティに費やすと推定する。他の調査では、通常の知識労働者は1日につき約2.5時間を情報の検索に費やすと推定する。
開発者および情報技術(IT)部門は、著しい量の時間および費用を、人々、場所、時間およびイベントのような物を表現するための共通ストレージ抽象化のための、それら独自のデータストアの構築に投資する。これは重複した作業をもたらす結果となるだけでなく、そのデータを共通して検索または共有するためのメカニズムのない、共通データのアイランドをも作り出す。まさに、どれだけの数のアドレス帳が今日、Microsoft Windows(登録商標)オペレーティングシステムを実行するコンピュータ上に存在する可能性があるかを考慮されたい。電子メールクライアントおよびパーソナルファイナンスプログラムなど、多数のアプリケーションは個々のアドレス帳を保持しており、アプリケーション間で、このような各プログラムが個々に維持するアドレス帳データの共有はほとんどない。したがって、ファイナンスプログラム(Microsoft Moneyなど)は、受取人のためのアドレスを、電子メール連絡先フォルダ(Microsoft Outlook内のフォルダなど)内で維持されたアドレスと共有しない。実際に、多数のユーザは複数のデバイスを有し、論理的にはそれらの個人データをそれらのデバイスの間で、および、携帯電話からMSNおよびAOLなどの商業サービスまでを含む幅広い種類の追加のソースにわたって同期化するべきであり、それにもかかわらず、共有ドキュメントのコラボレーションは主として、ドキュメントを電子メールメッセージに添付することによって、すなわち、手動および非効率的に達成される。
このコラボレーションの欠乏の1つの理由は、コンピュータシステム内の情報の編成に対する従来の手法が、ファイルフォルダおよびディレクトリベースのシステム(「ファイルシステム」)の使用を中心として、複数のファイルをフォルダのディレクトリ階層に、これらのファイルを格納するために使用されたストレージメディアの物理的編成の抽象化に基づいて編成してきたことである。Multicsオペレーティングシステムは1960年代に開発され、オペレーティングシステムレベルでデータの格納可能単位を管理するためのファイル、フォルダおよびディレクトリの使用を開拓したことで功績があると考えることができる。具体的には、Multicsは記号アドレスをファイルの階層内で使用し(それにより、ファイルパスのアイデアを導入し)、ファイルの物理アドレスはユーザ(アプリケーションおよびエンドユーザ)に透過的ではなかった。このファイルシステムはまったく、いかなる個々のファイルのファイルフォーマットにも無関心であり、複数のファイルの間のリレーションシップは、オペレーティングシステムレベル(すなわち、階層内のファイルのロケーション以外)で無関係と見なされた。Multicsの出現以来、格納可能データはファイル、フォルダおよびディレクトリへ、オペレーティングシステムレベルで編成されてきた。これらのファイルは一般にファイル階層自体(「ディレクトリ」)を含み、ディレクトリはファイルシステムによって維持された特殊ファイル内で実施される。このディレクトリは、ディレクトリ内の他のファイルのすべてに対応するエントリのリスト、および、階層内のこのようなファイルのノードのロケーションを維持する(本明細書でフォルダと称する)。このような物は、約40年間にわたって現況技術であった。
しかし、コンピュータの物理的ストレージシステム内に存在する情報の妥当な表現を提供するが、ファイルシステムはそれにもかかわらず、その物理ストレージシステムの抽象化であり、したがって、ファイルの利用には、ユーザが操作する物(コンテキスト、特徴および他の単位とのリレーションシップを有する単位)と、オペレーティングシステムが提供する物(ファイル、フォルダおよびディレクトリ)の間であるレベルの間接化(解釈)が必要である。したがって、ユーザ(アプリケーションおよび/またはエンドユーザ)には、そうすることが非効率的であり、矛盾しており、そうでない場合は望ましくない場合でも、情報の単位をファイルシステム構造に強いる以外の選択肢はない。また、既存のファイルシステムは、個々のファイル内に格納されたデータの構造についてほとんど知らず、このため、大部分の情報はファイル内でロックされたままであり、それらの情報を書き込んだアプリケーションにとってのみアクセスする(および理解可能である)ことが可能である。したがって、この情報の概略記述、および、情報を管理するためのメカニズムの欠如は、個々のサイロ間のデータ共有がほとんどない、データのサイロの作成につながる。例えば、多数のパーソナルコンピュータ(PC)ユーザは、あるレベル、例えば、Outlook Contacts、オンラインアカウントアドレス、Windows(登録商標)Address Book、Quicken Payees、およびインスタントメッセージング(IM)バディリストで、対話する相手の人々についての情報を含む、5つ以上の異なるストアを有し、これは、ファイルの編成がこれらのPCユーザに対して著しい課題を提示するからである。大部分の既存のファイルシステムは、ネストされたフォルダのメタファを、ファイルおよびフォルダの編成のために利用するので、ファイルの数が増すにつれて、柔軟性があり効率的である編成スキームを維持するために必要な取り組みは極めて困難になる。このような状況で、単一のファイルの複数の分類を有することは大変有用となるが、既存のファイルシステムにおけるハードまたはソフトリンクの使用は、維持することが煩わしく困難である。
ファイルシステムの欠点に対処するためのいくつかの不成功な試みが過去に行われている。これらの以前の試みのいくつかは、コンテンツアドレス可能メモリを使用して、それにより物理アドレスではなくコンテンツによってデータにアクセスすることができるメカニズムを提供することに関係した。しかし、これらの取り組みは不成功であることが判明しており、これは、コンテンツアドレス可能メモリがキャッシュおよびメモリ管理ユニットなどのデバイスによる小規模の使用に有用であることは判明しているが、物理ストレージメディアなどのデバイス向けの大規模の使用は、様々な理由のためにまだ可能となっておらず、したがって、このような解決法は単に存在しないからである。オブジェクト指向データベース(OODB)システムを使用した他の試みが行われているが、これらの試みは、強力なデータベース特性および十分な非ファイル表現を特徴とするが、ファイル表現の処理において有効ではなく、ハードウェア/ソフトウェアインターフェースシステムレベルで階層構造に基づいたファイルおよびフォルダの速度、効率および単純さを複製することはできなかった。SmallTalk(および他の派生物)を使用するために試みられた物など、他の取り組みは、ファイルおよび非ファイル表現の処理で大変有効であるが、様々なデータファイルの間に存在するリレーションシップを効率的に編成および利用するために必要なデータベース機能が不足していることが判明しており、したがってこのようなシステムの全体の効率は受け入れ不可能であった。BeOS(および他のこのようなオペレーティングシステム研究)を使用するためのさらに他の試みは、いくつかの必要なデータベース機能を提供しながらファイルを適切に表現することができるにもかかわらず、非ファイル表現の処理、すなわち、従来のファイルシステムの同じ中心となる欠点に対して不適切であることが判明した。
データベース技術は、類似の課題が存在する当技術分野のもう1つのエリアである。例えば、リレーショナルデータベースモデルは大きい商業的成功となっているが、実際には、独立系ソフトウェアベンダー(ISV)は一般に、リレーショナルデータベースソフトウェア製品(Microsoft SQL Serverなど)で使用可能な機能性のごく一部を用いる。その代わりに、アプリケーションによるこのような製品との対話の大部分は、単純な「gets」および「puts」の形態である。プラットフォームまたはデータベースに寛容であるなど、このためのいくつかの容易に明らかな理由はあるが、しばしば気付かれずに終わる1つの重要な理由は、データベースが必ずしも、主要なビジネスアプリケーションベンダーが本当に必要とする正確な抽象化を提供するとは限らないことである。例えば、現実の世界は「顧客」または「注文」など、「アイテム」の概念を(それら自体においてそれら自体のアイテムとして、注文の埋め込まれた「ラインアイテム」と共に)有するが、リレーショナルデータベースはテーブルおよび行に関してのみ物を言う。したがって、アプリケーションは(2、3例を挙げると)アイテムレベルで整合性、ロック、セキュリティおよび/またはトリガの態様を有することを望む場合があるが、一般にデータベースはこれらの機能をテーブル/行レベルでのみ提供する。これは、各アイテムがデータベース内のあるテーブル内の単一の行にマップされる場合、うまく機能する可能性があるが、複数のラインアイテムを有する注文の場合、1つのアイテムが実際には複数のテーブルにマップされる理由がある可能性があり、その場合、単純なリレーショナルデータベースシステムはあまり正しい抽象化を提供しない。したがって、アプリケーションはロジックをデータベースの最上部で構築して、これらの基本的な抽象化を提供しなければならない。すなわち、基本リレーショナルモデルは、その上でより高いレベルのアプリケーションを容易に開発することができる、データのストレージのための十分なプラットフォームを提供せず、これは、基本リレーショナルモデルがアプリケーションとストレージシステムの間にあるレベルの間接化を必要とし、データの意味構造が場合によってはアプリケーション内でのみ可視である可能性があるからである。いくつかのデータベースベンダーは、オブジェクトリレーショナル機能、新しい組織モデルなど、より高いレベルの機能性を自社製品に組み込んでいるが、いずれもまだ、必要とされた包括的な解決法の種類を提供しておらず、真に包括的な解決法は、両方の有用なデータモデル抽象化(「Items」、「Extensions」、「Relationships」など)を有用なドメイン抽象化(「Persons」、「Locations」、「Events」など)のために提供する解決法である。
既存のデータストレージおよびデータベース技術における前述の欠陥に鑑みて、コンピュータシステム内ですべてのタイプのデータを編成、検索および共有するための、改善された能力を提供する新しいストレージプラットフォーム、すなわち、既存のファイルシステムおよびデータベースシステムを超えてデータプラットフォームを拡張および拡大し、すべてのタイプのデータのためのストアとなるように設計されるストレージプラットフォームの必要性がある。
ある開示された発明はこの必要性を満たす(例えば、2003年8月21日出願の「STORAGE PLATFORM FOR ORGANIZING, SEARCHING, AND SHARING DATA」という名称の特許文献1参照。)。このストレージプラットフォームのための同期化サービスはさらに開示された発明において提供される(例えば、2003年10月24日出願の「SYSTEMS AND METHODS FOR PROVIDING RELATIONAL AND HIERARCHICAL SYNCHRONIZATION SERVICES FOR UNITS OF INFORMATION MANAGEABLE BY A HARDWARE/SOFTWARE INTERFACE SYSTEM」という名称の特許文献2参照。)。本発明の目的は、開示されたストレージプラットフォームにおける開示された同期化サービスのため、ならびに、主張されたシステムおよび方法を適用することができる他の同期化サービスおよび/または他のストレージプラットフォームための、競合(conflict)処理のためのシステムおよび方法を提供するにある。
以下の本発明の概要は、以下の詳細な説明および図への導入としての機能を果たすように意図される。
関連発明は集合的に、既存のファイルシステムおよびデータベースシステムを超えてデータストレージの概念を拡張および拡大する、データを編成、検索および共有するためのストレージプラットフォームを対象とする。このストレージプラットフォームは、構造化、非構造化、または半構造化データを含む、すべてのタイプのデータのためのストアとなるように設計される。
ストレージプラットフォームは、データベースエンジン上で実装されたデータストアを備える。データベースエンジンは、オブジェクトリレーショナルエクステンションを有するリレーショナルデータベースエンジンを備える。データストアは、データの編成、検索、共有、同期化およびセキュリティをサポートするデータモデルを実装する。特定のタイプのデータがスキーマにおいて記述され、プラットフォームは、新しいタイプのデータ(本質的に、スキーマによって提供された基本タイプのサブタイプ)を定義するようにスキーマのセットを拡張するためのメカニズムを提供する。同期化機能は、ユーザまたはシステムの間のデータの共有を実施する。ファイルシステム同様の機能が提供され、この機能により、既存のファイルシステムとのデータストアの相互運用性が可能となるが、このような従来のファイルシステムの制限はない。変更追跡メカニズムは、データストアへの変更を追跡する能力を提供する。ストレージプラットフォームはさらにアプリケーションプログラムインターフェースのセットを備え、これによりアプリケーションは、ストレージプラットフォームの前述の機能のすべてにアクセスすること、および、スキーマ内に記述されたデータにアクセスすることが可能となる。
データストアによって実装されたデータモデルは、データストレージの単位を、アイテム、要素およびリレーションシップに関して定義する。アイテムは、データストア内に格納可能なデータの単位であり、1つまたは複数の要素およびリレーションシップを備えることができる。要素は、1つまたは複数のフィールドを備えるタイプのインスタンスである(本明細書でプロパティとも称する)。リレーションシップは、2つのアイテムの間のリンクである。(本明細書で使用される場合、これらおよび他の特定の用語を、近接して使用された他の用語からそれらを並置するために、大文字で書く場合があるが、大文字で書かれた用語、例えば「Item」と、同じ用語が大文字で書かれない場合、例えば「item」の間で区別するいかなる意図もなく、このような区別は仮定または暗示されるべきではない。)
コンピュータシステムはさらに複数のアイテムを備え、各アイテムは、ハードウェア/ソフトウェアインターフェースシステムによって操作することができる情報の離散的格納可能単位を構成し、さらに、前記アイテムのための組織構造を構成する複数のアイテムフォルダ、および、複数のアイテムを操作するためのハードウェア/ソフトウェアインターフェースシステムを備え、各アイテムは少なくとも1つのアイテムフォルタに属し、複数のアイテムフォルダに属することができる。
アイテム、または、アイテムのプロパティ値のいくつかを、永続的ストアから導出される物とは対照的に、動的に計算することができる。すなわち、ハードウェア/ソフトウェアインターフェースシステムは、アイテムが格納されることを必要とせず、ストレージプラットフォームの、アイテムの現在のセットをエニュメレートする能力、または、その識別子が与えられたアイテムを検索する能力(アプリケーションプログラミングインターフェースまたはAPIを説明するセクションでより十分に後述する)など、あるオペレーションがサポートされ、例えば、あるアイテムは携帯電話の現在のロケーションであってもよく、温度センサー上の温度読み取りであってもよい。ハードウェア/ソフトウェアインターフェースシステムは複数のアイテムを操作することができ、さらに、ハードウェア/ソフトウェアインターフェースシステムによって管理された複数のリレーションシップによって相互接続されたアイテムを備えることができる。
コンピュータシステムのためのハードウェア/ソフトウェアインターフェースシステムはさらに、前記ハードウェア/ソフトウェアインターフェースシステムが理解し、所定の予測可能な方法で直接処理することができる、コアアイテムのセットを定義するためのコアスキーマを備える。複数のアイテムを操作するため、コンピュータシステムは前記アイテムを複数のリレーションシップと相互接続し、前記リレーションシップをハードウェア/ソフトウェアインターフェースシステムレベルで管理する。
ストレージプラットフォームのAPIは、ストレージプラットフォームスキーマのセットにおいて定義された、各アイテム、アイテムエクステンションおよびリレーションシップのためのデータクラスを提供する。加えて、アプリケーションプログラミングインターフェースはフレームワーククラスのセットを提供し、フレームワーククラスのセットは、データクラスのためのビヘイビアの共通セットを定義し、データクラスと共に、ストレージプラットフォームAPIのための基本プログラミングモデルを提供する。ストレージプラットフォームAPIは簡易クエリモデルを提供し、簡易クエリモデルは、アプリケーションプログラマを基礎となるデータベースエンジンのクエリ言語の詳細から分離する方法で、アプリケーションプログラマがクエリをデータストア内のアイテムの様々なプロパティに基づいて形成すること可能にする。ストレージプラットフォームAPIはまた、アプリケーションプログラムによって行われたアイテムへの変更を収集し、次いでこれらの変更を、その上でデータストアが実装されるデータベースエンジン(またはいずれかの種類のストレージエンジン)によって必要とされた正しいアップデートに編成する。これにより、アプリケーションプログラマは、データストアアップデートの複雑さをAPIに任せながら、メモリ内のアイテムに変更を行うことができる。
その共通ストレージ基盤およびスキーマ化されたデータを通じて、本発明のストレージプラットフォームは、消費者、知識労働者および企業のためのより効率的なアプリケーション開発を可能にする。本発明のストレージプラットフォームは、そのデータモデル内に固有の機能を使用可能にするだけでなく、既存のファイルシステムおよびデータベースアクセス方法を包含および拡張する、豊富で拡張可能なアプリケーションプログラミングインターフェースを提供する。
この相互に関係する発明の包括的な構造(詳細な説明のセクションIIで詳細に説明)の一部として、関連発明のいくつかは特に同期API(詳細な説明のセクションIIIで詳細に説明)を対象とし、これはストレージプラットフォームの幅広い同期化機能を記述した。本発明のいくつかの実施形態にこれらの同期化機能が組み込まれて、ピアツーピア同期化中に競合が生じる場合に競合を処理するようになることを予想されたい。
競合を正確および効率的に処理する能力は、よい有用性を保持しながらデータ損失を最小限にし、同期化中のユーザの介入の必要性を低減する。詳細な説明のセクションIVは、それだけに限定されないが、関連発明の同期化システムまたはストレージプラットフォームを含む、ピアツーピア同期化システムにおける競合を処理するためのシステムおよび方法を対象とする、本発明の様々な実施形態の詳細な説明である。様々な実施形態は、(a)競合処理のための共通拡張可能スキーマを確立すること、および(b)競合が検出されてから解決され最終的に除去されるまで進行する場合に競合を表現する状態を追跡することによって、ピアツーピア同期化システム内で発生する競合を表現するための解決法を提供する。いくつかの実施形態の重要な特徴には、競合がこれらの前述の状態を通じて進行する場合に競合を追跡する能力、ならびに、解決された競合の自動クリーンアップを実行する能力が含まれる。ある実施形態には、古くなった競合(古くなっている変化を表現する競合)を検出する能力、および、このような競合を排除するための対応する能力が含まれる。他の実施形態は、競合を同期的に自動的に解決するための競合解決ポリシーの使用を対象とする。最後だが重要でないということではなく、ある実施形態にはまた、ユーザによって後に解決するためにログされている競合をプログラム的に解決する能力(ユーザインターフェースによって、ユーザ対象の競合解決を実行するために使用することができる)もが含まれる可能性がある。
本発明の具体的な特徴および利点は単独で、および関連発明と共に、以下の本発明の詳細な説明および添付の図面から明らかになるであろう。
前述の概要、ならびに以下の本発明の詳細な説明は、添付の図面と共に読まれる場合によりよく理解される。本発明を例示するため、図面において本発明の様々な態様の例示的実施形態を示すが、本発明は開示された特定の方法および手段に限定されない。図面においては以下の通りである。
I.序論
本発明の主題を、法的要件を満たすための特定性を有して説明する。しかし、説明自体は本特許の範囲を限定するように意図されない。むしろ、発明者は、主張された主題もまた他の方法で、他の現在および将来の技術と共に、異なるステップ、または本書で説明するステップに類似のステップの組合せを含むように実施される可能性もあることを企図している。また、「ステップ」という用語は本明細書で、使用された方法の異なる要素を暗示するために使用される場合があるが、この用語は、個々のステップの順序が明示的に説明される場合を除いて、本明細書で開示された様々なステップの間のいかなる特定の順序をも暗示するように解釈されるべきではない。
A.例示的コンピューティング環境
本発明の多数の実施形態はコンピュータ上で実行することができる。図1および以下の考察は、本発明を実施することができる適切なコンピューティング環境の簡単な全体的説明を提供するように意図される。必要ではないが、本発明の様々な態様を一般に、クライアントワークステーションまたはサーバなどのコンピュータによって実行される、プログラムモジュールなどのコンピュータ実行可能命令に関連して説明することができる。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらは特定のタスクを実行するか、あるいは特定の抽象データタイプを実装する。また、本発明を他のコンピュータシステム構成により実施することができ、これらの構成にはハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラマブルなコンシューマエレクトロニクス、ネットワークPC、ミニコンピュータ、メインフレームコンピュータなどが含まれる。本発明をまた分散コンピューティング環境において実施することもでき、この環境ではタスクが、通信ネットワークを通じてリンクされるリモート処理デバイスによって実行される。分散コンピューティング環境では、プログラムモジュールが、ローカルおよびリモートのメモリストレージデバイス内に位置することができる。
図1のように、例示的汎用コンピューティングシステムには従来のパーソナルコンピュータ20などが含まれ、パーソナルコンピュータ20には、処理装置21、システムメモリ22、および、システムメモリを含む様々なシステムコンポーネントを処理装置21に結合するシステムバス23が含まれる。システムバス23を、いくつかのタイプのバス構造のいずれにすることもでき、これらのバス構造には、様々なバスアーキテクチャのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスが含まれる。システムメモリには、読み取り専用メモリ(ROM)24およびランダムアクセスメモリ(RAM)25が含まれる。基本入出力システム26(BIOS)は、起動中など、パーソナルコンピュータ20内の複数の要素の間で情報を転送する助けとなる基本ルーチンを含み、ROM24に格納される。パーソナルコンピュータ20にはさらに、図示しないハードディスクに対する読み書きを行うためのハードディスクドライブ27、リムーバブ磁気ディスク29に対する読み書きを行うための磁気ディスクドライブ28、および、CD−ROMまたは他の光メディアなど、リムーバブル光ディスク31に対する読み書きを行うための光ディスクドライブ30が含まれる可能性がある。ハードディスクドライブ27、磁気ディスクドライブ28、および光ディスクドライブ30はシステムバス23に、それぞれハードディスクドライブインターフェース32、磁気ディスクドライブインターフェース33、および光ドライブインターフェース34によって接続される。これらのドライブおよびそれらの関連付けられたコンピュータ可読メディアは、パーソナルコンピュータ20のためのコンピュータ可読命令、データ構造、プログラムモジュールおよび他のデータの不揮発性ストレージを提供する。本明細書で説明した例示的環境は、ハードディスク、リムーバブル磁気ディスク29およびリムーバブル光ディスク31を使用するが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)など、コンピュータによってアクセス可能であるデータを格納することができる他のタイプのコンピュータ可読メディアもまた例示的オペレーティング環境内で使用することができることは、当業者には理解されよう。同様に、例示的環境にはまた、熱感知器およびセキュリティまたは火災警報システムなど、多数のタイプのモニタリングデバイスおよび他の情報のソースが含まれる場合もある。
いくつかのプログラムモジュールをハードディスク、磁気ディスク29、光ディスク31、ROM24またはRAM25上で格納することができ、これらのプログラムモジュールには、オペレーティングシステム35、1つまたは複数のアプリケーションプログラム36、他のプログラムモジュール37およびプログラムデータ38が含まれる。ユーザはコマンドおよび情報をパーソナルコンピュータ20へ、キーボード40およびポインティングデバイス42など、入力デバイスを通じて入力することができる。他の入力デバイス(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどが含まれる可能性がある。これらおよび他の入力デバイスはしばしば処理装置21へ、システムバスに結合されるシリアルポートインターフェース46を通じて接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス(USB)など、他のインターフェースによって接続することができる。モニタ47または他のタイプの表示デバイスもまたシステムバス23へ、ビデオアダプタ48などのインターフェースを介して接続される。モニタ47に加えて、パーソナルコンピュータには通常、スピーカおよびプリンタなど、他の周辺出力デバイス(図示せず)が含まれる。図1の例示的システムにはまた、ホストアダプタ55、Small Computer System Interface(SCSI)バス56、および、SCSIバス56に接続された外部ストレージデバイス62もが含まれる。
パーソナルコンピュータ20はネットワーク環境において、リモートコンピュータ49など、1つまたは複数のリモートコンピュータへの論理接続を使用して動作することができる。リモートコンピュータ49は、別のパーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ピアデバイスまたは他の共通ネットワークノードにすることができ、通常は、パーソナルコンピュータ20に関連して上述した要素の多数またはすべてを含むが、メモリストレージデバイス50のみが図1に例示される。図1に示す論理接続には、ローカルエリアネットワーク(LAN)51およびワイドエリアネットワーク(WAN)52が含まれる。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネットおよびインターネットにおいて一般的である。
LANネットワーキング環境において使用する場合、パーソナルコンピュータ20はLAN51へ、ネットワークインターフェースまたはアダプタ53を通じて接続される。WANネットワーキング環境において使用する場合、パーソナルコンピュータ20には通常、モデム54、または、インターネットなどのワイドエリアネットワーク52を介して通信を確立するための他の手段が含まれる。モデム54は内部であっても外部であってもよく、システムバス23へ、シリアルポートインターフェース46を介して接続される。ネットワーク環境では、パーソナルコンピュータ20に関連して示したプログラムモジュールまたはその一部を、リモートメモリストレージデバイスに格納することができる。図示のネットワーク接続は例示的であり、複数のコンピュータの間で通信リンクを確立する他の手段を使用することができることは理解されよう。
図2のブロック図に例示するように、コンピュータシステム200を大まかに3つのコンポーネントグループ、すなわち、ハードウェアコンポーネント202、ハードウェア/ソフトウェアインターフェースシステムコンポーネント204、および、アプリケーションプログラムコンポーネント206(本明細書のある文脈では「ユーザコンポーネント」または「ソフトウェアコンポーネント」とも称する)に分割することができる。
コンピュータシステム200の様々な実施形態では、図1に戻って参照すると、ハードウェアコンポーネント202はとりわけ、中央処理装置(CPU)21、メモリ(ROM24およびRAM25の両方)、基本入出力システム(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/DOSおよび大部分のUnix(登録商標)ベースのオペレーティングシステムなど、ある他のハードウェア/ソフトウェアインターフェースシステムでは、「ディレクトリ」および/または「フォルダ」という用語は交換可能であり、初期のAppleコンピュータシステム(例えば、Apple IIe)はディレクトリの代わりに「カタログ」という用語を使用したが、本明細書で使用される場合、これらのすべての用語は同義語および交換可能であると見なされ、階層的情報ストレージ構造ならびにそれらのフォルダおよびファイルコンポーネントについてのすべての他の等価語、およびそれらへの参照をさらに含むように意図される。
従来、ディレクトリ(別名、フォルダのディレクトリ)はツリーベースの階層構造であり、ファイルはフォルダにグループ化され、フォルダは、ディレクトリツリーを備える相対的なノードのロケーションに従って構成される。例えば、図2Aに例示するように、DOSベースのファイルシステムのベースフォルダ(または「ルートディレクトリ」)212は、複数のフォルダ214を備えることができ、これらの各フォルダはさらに追加のフォルダ216を(その特定のフォルダの「サブフォルダ」として)備えることができ、これらの各々もまた追加のフォルダ218を無限に備えることができる。これらの各フォルダは1つまたは複数のファイル220を有することができるが、ハードウェア/ソフトウェアインターフェースシステムのレベルで、フォルダ内の個々のファイルは、ツリー階層内のそれらの位置以外、共通の何物をも有していない。当然のことながら、ファイルをフォルダ階層に編成するこの手法は、これらのファイルを格納するために使用された通常のストレージメディア(例えば、ハードディスク、フロッピー(登録商標)ディスク、CD−ROMなど)の物理的編成を間接的に反映する。
前述に加えて、各フォルダは、そのサブフォルダおよびそのファイルのためのコンテナであり、すなわち、各フォルダはそのサブフォルダおよびファイルを所有する。例えば、フォルダがハードウェア/ソフトウェアインターフェースシステムによって削除される場合、そのフォルダのサブフォルダおよびファイルもまた削除される(各サブフォルダの場合、さらにそれ自体のサブフォルダおよびファイルを再帰的に含む)。同様に、各ファイルは一般にただ1つのフォルダによって所有され、ファイルをコピーすることができ、コピーは異なるフォルダ内に位置することができるが、ファイルのコピー自体は、元のファイルとの直接接続を有していない、異なる分離した単位である(例えば、元のファイルへの変更は、ハードウェア/ソフトウェアインターフェースシステムのレベルでコピーファイルにミラーリングされない)。これについて、ファイルおよびフォルダはしたがって、特徴的に性質において「物理的」であり、これは、フォルダが物理的コンテナのように処理され、ファイルがこれらのコンテナの内側で、離散的で分離した物理的要素として処理されるからである。
II.データを編成、検索および共有するためのWINFSストレージプラットフォーム
本発明は、本明細書で前述したように参照により組み込まれた関連発明と組み合わせて、データを編成、検索および共有するためのストレージプラットフォームを対象とする。本発明のストレージプラットフォームは、上述の既存のファイルシステムおよびデータベースシステムの種類を超えてデータプラットフォームを拡張および拡大し、アイテムと呼ばれる新しい形式のデータを含む、すべてのタイプのデータのためのストアとなるように設計される。
A.用語集
本明細書および特許請求の範囲で使用される場合、以下の用語は以下の意味を有する。
・「アイテム」は、ハードウェア/ソフトウェアインターフェースシステムにとってアクセス可能な格納可能情報の単位であり、単純なファイルとは異なり、ハードウェア/ソフトウェアインターフェースシステムシェルによってエンドユーザにエクスポーズされたすべてのオブジェクトにわたって共通してサポートされる、プロパティの基本セットを有するオブジェクトである。アイテムはまた、新しいプロパティおよびリレーションシップが導入されることを可能にする特徴を含むすべてのアイテムタイプにわたって共通してサポートされる、プロパティおよびリレーションシップをも有する(本明細書で以下で詳細に論じる)。
・「オペレーティングシステム」(OS)は、アプリケーションプログラムとコンピュータハードウェアの間の仲介の機能を果たす、特殊なプログラムである。オペレーティングシステムは、大抵の場合、シェルおよびカーネルを備える。
・「ハードウェア/ソフトウェアインターフェースシステム」は、ソフトウェア、または、ハードウェアおよびソフトウェアの組合せであり、コンピュータシステムの基礎となるハードウェアコンポーネントと、コンピュータシステム上で実行するアプリケーションの間のインターフェースとしての機能を果たす。ハードウェア/ソフトウェアインターフェースシステムは通常、オペレーティングシステムを備える(いくつかの実施形態では、オペレーティングシステムのみからなる場合がある)。ハードウェア/ソフトウェアインターフェースシステムはまた、仮想マシンマネージャ(VMM)、共通言語ランタイム(CLR)もしくはその機能的同等物、Java(登録商標)仮想マシン(JVM)もしくはその機能的同等物、または他のこのようなソフトウェアコンポーネントを、コンピュータシステム内でオペレーティングシステムの代わりに、あるいはそれに加えて備えることもできる。ハードウェア/ソフトウェアインターフェースシステムの目的は、ユーザがアプリケーションプログラムを実行することができる環境を提供することである。いかなるハードウェア/ソフトウェアインターフェースシステムの目標も、コンピュータシステムを使いやすくすること、ならびに、コンピュータハードウェアを効率的な方法で利用することである。
B.ストレージプラットフォーム概観
図3を参照すると、ストレージプラットフォーム300は、データベースエンジン314上で実装されたデータストア302を備える。一実施形態では、データベースエンジンは、オブジェクトリレーショナルエクステンションを有するリレーショナルデータベースエンジンを備える。一実施形態では、リレーショナルデータベースエンジン314は、Microsoft SQL Serverリレーショナルデータベースエンジンを備える。データストア302は、データの編成、検索、共有、同期化およびセキュリティをサポートするデータモデル304を実装する。特定のタイプのデータは、スキーマ304などのスキーマ内に記述され、ストレージプラットフォーム300は、これらのスキーマを配置するため、ならびに、これらのスキーマを拡張するためのツール346を提供し、これを以下でより十分に説明する。
変更追跡メカニズム306はデータストア302内で実装され、データストアへの変更を追跡する能力を提供する。データストア302はまた、セキュリティ機能308およびプロモーション/デモーション機能310をも提供し、両方の機能を以下でより十分に論じる。データストア302はまた、データストア302の機能を、ストレージプラットフォームを利用する他のストレージプラットフォームコンポーネントおよびアプリケーションプログラム(例えば、アプリケーションプログラム350a、350bおよび350c)にエクスポーズするための、アプリケーションプログラミングインターフェースのセット312をも提供する。本発明のストレージプラットフォームはさらにアプリケーションプログラミングインターフェース(API)322を備え、これにより、アプリケーションプログラム350a、350bおよび350cなど、アプリケーションプログラムがストレージプラットフォームの前述の機能のすべてにアクセスすること、および、スキーマ内で記述されたデータにアクセスすることが可能となる。ストレージプラットフォームAPI322をアプリケーションプログラムによって、OLE DB API324およびMicrosoft Windows(登録商標)Win32 API326など、他のAPIと組み合わせて使用することができる。
本発明のストレージプラットフォーム300は様々なサービス328をアプリケーションプログラムに提供することができ、これらのサービスには、ユーザまたはシステムの間のデータの共有を実施する同期化サービス330が含まれる。例えば、同期化サービス330は、データストア302と同じフォーマットを有する他のデータストア340との相互運用性、ならびに、他のフォーマットを有するデータストア342へのアクセスを可能にすることができる。ストレージプラットフォーム300はまた、Windows(登録商標)NTFSファイルシステム318など、既存のファイルシステムとの、データストア302の相互運用性を可能にする、ファイルシステム機能をも提供する。少なくともいくつかの実施形態では、ストレージプラットフォーム300はまたアプリケーションプログラムに、データが他のシステム上で動作されることを可能にするため、および他のシステムとの対話を可能にするための追加の機能を提供することもできる。これらの機能を、情報エージェントサービス334および通知サービス332など、追加のサービス328の形態において、ならびに他のユーティリティ336の形態において実施することができる。
少なくともいくつかの実施形態では、ストレージプラットフォームは、コンピュータシステムのハードウェア/ソフトウェアインターフェースシステムにおいて実施され、あるいはその一体部分を形成する。例えば、限定なく、本発明のストレージプラットフォームは、オペレーティングシステム、仮想マシンマネージャ(VMM)、共通言語ランタイム(CLR)もしくはその機能的同等物、または、Java(登録商標)仮想マシン(JVM)もしくはその機能的同等物において実施される場合があり、あるいはその一体部分を形成する場合がある。その共通のストレージ基盤、および、スキーマ化されたデータを通じて、本発明のストレージプラットフォームは、消費者、知識労働者および企業のためのより効率的なアプリケーション開発を可能にする。本発明のストレージプラットフォームは、そのデータモデル内に固有の機能を使用可能にするだけでなく、既存のファイルシステムおよびデータベースアクセス方法を包含および拡張する、豊富で拡張可能なプログラミングのサーフェスエリアを提供する。
以下の説明において、および様々な図面において、本発明のストレージプラットフォーム300を「WinFS」と称する場合がある。しかし、この名称を使用してストレージプラットフォームを指すことは、説明の便宜上のためのみであり、決して限定するように意図されない。
C.データモデル
本発明のストレージプラットフォーム300のデータストア302は、ストア内に存在するデータの編成、検索、共有、同期化およびセキュリティをサポートするデータモデルを実装する。本発明のデータモデルでは、「アイテム」はストレージ情報の基本的単位である。データモデルは、アイテムおよびアイテムエクステンションを宣言するため、および、複数のアイテムの間のリレーションシップを確立するため、および、アイテムをアイテムフォルダ内およびカテゴリ内に編成するためのメカニズムを提供し、これを以下でより十分に説明する。
データモデルは2つの基本的メカニズムであるタイプおよびリレーションシップに依拠する。タイプは、タイプのインスタンスの形態を管理するフォーマットを提供する構造である。フォーマットは、プロパティの順序付きセットとして表現される。プロパティは、所与のタイプの値または値のセットのための名前である。例えば、USPostalAddressタイプは、プロパティStreet、City、Zip、Stateを有する可能性があり、Street、CityおよびStateはStringのタイプであり、ZipはタイプInt32である。Streetを多値(すなわち、値のセット)にして、アドレスがStreetプロパティのための複数の値を有することを可能にすることができる。システムは、他のタイプの構成において使用することができるある基本的タイプを定義し、これらのタイプには、String、Binary、Boolean、Int16、Int32、Int64、Single、Double、Byte、DataTime、DecimalおよびGUIDが含まれる。タイプのプロパティを、基本的タイプのいずれか、または、(以下に示すいくつかの制限を有して)構築されたタイプのいずれかを使用して、定義することができる。例えば、プロパティのCoordinateおよびAddressを有したLocationタイプを定義することができ、Addressプロパティは、上述のタイプUSPostalAddressである。プロパティはまた必須であってもオプショナルであってもよい。
リレーションシップを宣言することができ、リレーションシップは2つのタイプのインスタンスのセットの間のマッピングを表現することができる。例えば、Personタイプと、LivesAtと呼ばれるLocationタイプの間で宣言されたリレーションシップがある可能性があり、このリレーションシップはどの人がどのロケーションに住むかを定義する。リレーションシップは名前、2つのエンドポイント、すなわち、ソースエンドポイントおよびターゲットエンドポイントを有する。リレーションシップはまた、プロパティの順序付きセットを有することもできる。ソースおよびターゲットエンドポイントは、名前およびタイプを有する。例えば、LivesAtリレーションシップは、タイプPersonのOccupantと呼ばれるソース、および、タイプLocationのDwellingと呼ばれるターゲットを有し、加えて、居住者が住居に住んだ期間を示すプロパティStartDateおよびEndDateを有する。Personは経時的に複数の住居に住む可能性があり、住居は複数の居住者を有する可能性があり、そのため、StartDateおよびEndDate情報を置くための最も可能性の高い場所は、リレーションシップ自体の上であることに留意されたい。
リレーションシップは、エンドポイントタイプとして与えられたタイプによって制約される複数のインスタンスの間のマッピングを定義する。例えば、LivesAtリレーションシップを、AutomobileがOccupantであるリレーションシップにすることはできず、これはAutomobileがPersonではないからである。
データモデルは、複数のタイプの間のサブタイプ−スーパータイプリレーションシップの定義を可能にする。サブタイプ−スーパータイプリレーションシップはまたBaseTypeリレーションシップとしても知られ、タイプAがタイプBのためのBaseTypeである場合、BのあらゆるインスタンスもまたAのインスタンスである場合でなければならないような方法で、定義される。これを別の表現にすると、Bに適合するあらゆるインスタンスはまたAにも適合しなければならないということである。例えば、AがタイプStringのプロパティNameを有するが、BはタイプInt16のプロパティAgeを有する場合、これは、BのいかなるインスタンスもNameおよびAgeを有していなければならないということになる。タイプ階層を、単一のスーパータイプをルートで有するツリーとして想定することができる。ルートからのブランチは第1のレベルのサブタイプを提供し、このレベルのブランチは第2のレベルのサブタイプを提供するなど、最もリーフのサブタイプまで提供し、最もリーフのサブタイプ自体はいかなるサブタイプも有していない。ツリーは、一様の深度であるように制約されないが、いかなるサイクルをも含むことはできない。所与のタイプは、ゼロまたは多数のサブタイプおよびゼロまたは1つのスーパータイプを有することができる。所与のインスタンスは、多くても1つのタイプに、そのタイプのスーパータイプと共に適合することができる。別の言い方をすれば、ツリー内のいずれかのレベルでの所与のインスタンスについて、インスタンスはそのレベルの多くても1つのサブタイプに適合することができる。タイプのインスタンスがまたタイプのサブタイプのインスタンスでもなければならない場合、タイプはAbstractであると呼ばれる。
1.アイテム
アイテムは格納可能な情報の単位であり、単純なファイルとは異なり、ストレージプラットフォームによってエンドユーザまたはアプリケーションプログラムにエクスポーズされたすべてのオブジェクトにわたって共通してサポートされる、プロパティの基本セットを有するオブジェクトである。アイテムはまた、新しいプロパティおよびリレーションシップが導入されることを可能にする特徴を含むすべてのアイテムタイプにわたって共通してサポートされる、プロパティおよびリレーションシップをも有し、これを以下で論じる。
アイテムは、コピー、削除、移動、開く、印刷、バックアップ、リストア、レプリケートなど、共通オペレーションのためのオブジェクトである。アイテムは、格納および検索することができる単位であり、ストレージプラットフォームによって操作された格納可能な情報のすべての形態はアイテム、アイテムのプロパティ、または複数のアイテムの間のリレーションシップとして存在し、その各々を本明細書で以下でより詳細に論じる。
アイテムは、(すべての様々な種類の)Contacts、People、Services、Locations、Documentsなどのようなデータの、現実世界の容易に理解可能な単位を表現するように意図される。図5Aは、アイテムの構造を例示するブロック図である。アイテムの非修飾名は「Location」である。アイテムの修飾名は「Core.Location」であり、このアイテム構造がCoreスキーマ内のアイテムの特定のタイプとして定義されることを示す。(Coreスキーマを本明細書で以下でより詳細に論じる。)
Locationアイテムは、EAddresses、MetropolitanRegion、NeighborhoodおよびPostalAddressesを含む、複数のプロパティを有する。各々のためのプロパティの特定のタイプは、プロパティ名の直後に示され、プロパティ名からコロン(「:」)によって区切られる。タイプ名の右側に、そのプロパティタイプのために許可された値の数が角括弧(「[]」)の間で示され、コロン(「:」)の右側のアスタリスク(「*」)は、規定されていない、および/または、無制限の数(「多数」)を示す。コロンの右側の「1」は、多くても1つの値がある可能性があることを示す。コロンの左側のゼロ(「0」)は、プロパティがオプショナルである(値がまったくない場合がある)ことを示す。コロンの左側の「1」は、少なくとも1つの値がなければならない(このプロパティが必要とされる)ことを示す。NeighborhoodおよびMetropolitanRegionは共にタイプ「nvarchar」(または同等物)であり、事前定義されたデータタイプまたは「単純タイプ」である(本明細書では大文字化の欠如によって示す)。しかし、EAddressesおよびPostalAddressesは、それぞれタイプEAddressおよびPostalAddressの定義済みタイプのプロパティまたは「複合タイプ」(本明細書では大文字化によって示す)である。複合タイプは、1つまたは複数の単純データタイプから、および/または、他の複合タイプから派生されるタイプである。複合タイプの詳細が直接のアイテムにネストされてそのプロパティが定義されるので、アイテムのプロパティのための複合タイプもまた「ネストされた要素」を構成し、これらの複合タイプに関係する情報は、これらのプロパティを有するアイテムと共に(本明細書で以下で論じるように、アイテムの境界内で)維持される。これらのタイプ定義(typing)の概念は周知であり、当業者には容易に理解される。
図5Bは、複合プロパティタイプPostalAddressおよびEAddressを例示するブロック図である。PostalAddressプロパティタイプは、プロパティタイプPostalAddressのアイテムがゼロまたは1つのCity値、ゼロまたは1つのCountryCode値、ゼロまたは1つのMailStop値、およびいずれかの数(ゼロから多数)のPostalAddressTypesその他などを有するように予想することができると定義する。このように、アイテム内の特定のプロパティのためのデータの形状はこれによって定義される。EAddressプロパティタイプは同様に図示のように定義される。本明細書でこの適用をオプショナルで使用したが、Locationアイテム内の複合タイプを表現するもう1つの方法は、その中にリストされた各複合タイプの個々のプロパティと共にアイテムを描くことである。図5Cは、その複合タイプがさらに記述されるLocationアイテムを例示するブロック図である。しかし、この図5CのLocationアイテムのこの代替表現は、図5Aに例示したまったく同じアイテムのためであることを理解されたい。本発明のストレージプラットフォームはまたサブタイプ定義(subtyping)も可能にし、それによりあるプロパティタイプを別のプロパティタイプのサブタイプにすることができる(あるプロパティタイプは別の、親プロパティタイプのプロパティを継承する)。
プロパティおよびそれらのプロパティタイプと類似しているが異なるように、アイテムはそれら自体のアイテムタイプを本質的に表現し、このアイテムタイプもまたサブタイプ定義の対象になる可能性がある。すなわち、本発明のいくつかの実施形態のストレージプラットフォームは、アイテムを別のアイテムのサブタイプにすることを可能にする(それにより、あるアイテムは、他の親アイテムのプロパティを継承する)。また、本発明の様々な実施形態では、あらゆるアイテムは「Item」アイテムタイプのサブタイプであり、「Item」はベーススキーマ内で発見される第1の基本的アイテムタイプである。(ベーススキーマもまた本明細書で以下で詳細に論じる。)図6Aは、アイテムである、このインスタンスにおけるLocationアイテムを、ベーススキーマ内で発見されるItemアイテムタイプのサブタイプとして例示する。この図では、矢印は、Locationアイテムは(他のすべてのアイテムと同様に)Itemアイテムタイプのサブタイプであることを示す。Itemアイテムタイプは、他のすべてのアイテムがそれから派生される基本的アイテムとして、ItemIdなど、いくつかの重要なプロパティおよび様々なタイムスタンプを有し、それにより、オペレーティングシステム内のすべてのアイテムの標準プロパティを定義する。この図では、ItemアイテムタイプのこれらのプロパティはLocationによって継承され、それによりLocationのプロパティとなる。
Itemアイテムタイプから継承されたLocationアイテムのプロパティを表現するもう1つの方法は、その中にリストされた親アイテムからの各プロパティタイプの個々のプロパティと共にLocationを描くことである。図6Bは、その継承されたタイプがその直接のプロパティに加えて記述されるLocationアイテムを例示するブロック図である。このアイテムは、図5Aに例示された同じアイテムであるが、この図ではLocationはそのプロパティのすべて、すなわち、この図および図5Aに示す直接のプロパティ、およびこの図に示すが図5Aには示さない継承されたプロパティと共に例示される(しかし、図5Aではこれらのプロパティは、矢印により、LocationアイテムがItemアイテムタイプのサブタイプであることを示すことによって、参照される)ことに留意され、理解されたい。
アイテムはスタンドアロンオブジェクトであり、したがって、アイテムを削除する場合、アイテムの直接および継承プロパティのすべても削除される。同様に、アイテムを検索する場合、受信される物は、アイテムおよびその直接および継承プロパティ(その複合プロパティタイプに関係する情報を含む)のすべてである。本発明のある実施形態は、特定のアイテムを検索する場合にプロパティのサブセットを要求することを可能にする場合があるが、多数のこのような実施形態の初期設定は、検索される場合にアイテムをその直接および継承プロパティのすべてと共に提供することである。また、アイテムのプロパティをまた、新しいプロパティをそのアイテムのタイプの既存のプロパティに追加することによって、拡張することもできる。これらの「エクステンション」はその後、アイテムの真正なプロパティであり、そのアイテムタイプのサブタイプは自動的にエクステンションプロパティを含むことができる。
アイテムの「境界」はそのプロパティ(複合プロパティタイプ、エクステンションなどを含む)によって表現される。アイテムの境界はまた、コピー、削除、移動、作成など、アイテムにおいて実行されるオペレーションの制限も表現する。例えば、本発明のいくつかの実施形態では、アイテムがコピーされる場合、そのアイテムの境界内のすべての物もコピーされる。各アイテムについて、境界は以下を包含する。
・アイテムのItemタイプ、および、アイテムが別のアイテムのサブタイプである(すべてのアイテムは単一のアイテムおよびベーススキーマのItemタイプから派生される、本発明のいくつかの実施形態の場合のように)場合、いずれかの適用可能なサブタイプ情報(すなわち、親アイテムタイプに関係する情報)。コピーされる元のアイテムが別のアイテムのサブタイプである場合、このコピーもまたその同じアイテムのサブタイプである場合がある。
・ある場合、アイテムの複合タイププロパティおよびエクステンション。元のアイテムが複合タイプ(ネイティブまたは拡張された)のプロパティを有する場合、このコピーもまたその同じ複合タイプを有する場合がある。
・「所有権リレーションシップ」上のアイテムのレコード、すなわち、他の何のアイテム(「ターゲットアイテム」)が現在のアイテム(「所有側アイテム」)によって所有されるかのアイテム自体のリスト。これは特に、以下でより十分に論じるアイテムフォルダ、および、すべてのアイテムは少なくとも1つのアイテムフォルダに属していなければならないという後述のルールについて関連がある。また、以下でより十分に論じる埋め込みアイテムについては、埋め込みアイテムは、その中に埋め込みアイテムがコピー、削除などのオペレーションのために埋め込まれるアイテムの一部であると見なされる。
2.アイテム識別
アイテムはItemIDにより、グローバルアイテムスペース内で一意に識別される。Base.Itemタイプは、そのアイテムのための識別を格納するタイプGUIDのフィールドItemIDを定義する。アイテムは、データストア302内で厳密に1つの識別を有していなければならない。
アイテム参照は、アイテムを位置付けおよび識別するための情報を含むデータ構造である。データモデルでは、抽象タイプは、そこからすべてのアイテム参照タイプが派生する、ItemReferenceという名前で定義される。ItemReferenceタイプは、Resolveという名前の仮想メソッドを定義する。Resolveメソッドは、ItemReferenceを解決し、アイテムを戻す。このメソッドはItemReferenceの具象サブタイプによってオーバーライドされ、ItemReferenceの具象サブタイプは、参照が与えられたアイテムを検索するファンクションを実装する。Resolveメソッドは、ストレージプラットフォームAPI322の一部として呼び出される。
ItemIDReferenceはItemReferenceのサブタイプである。これはLocatorおよびItemIDフィールドを定義する。Locatorフィールドはアイテムドメインを名前付け(すなわち、識別)する。これは、Locatorの値をアイテムドメインへ解決することができるロケータ解決メソッドによって処理される。ItemIDフィールドはタイプItemIDである。
ItemPathReferenceはItemReferenceの特殊化であり、LocatorおよびPathフィールドを定義する。Locatorフィールドはアイテムドメインを識別する。これは、Locatorの値をアイテムドメインへ解決することができるロケータ解決メソッドによって処理される。Pathフィールドは、Locatorによって提供されたアイテムドメインでルートとされたストレージプラットフォームネームスペース内の(相対)パスを含む。
このタイプの参照をsetオペレーション内で使用することはできない。参照は一般にパス解決プロセスを通じて解決されなければならない。ストレージプラットフォームAPI322のResolveメソッドは、この機能性を提供する。
上述の参照の形態は、図11に例示した参照タイプ階層を通じて表現される。これらのタイプから継承する追加の参照タイプを、スキーマ内で定義することができる。これらをリレーションシップ宣言においてターゲットフィールドのタイプとして使用することができる。
3.アイテムフォルダおよびカテゴリ
以下でより十分に論じるように、アイテムのグループを、アイテムフォルダ(ファイルフォルダと混同されるべきではない)と呼ばれる特殊アイテムに編成することができる。しかし、大部分のファイルシステムとは異なり、アイテムは複数のアイテムフォルダに属することができ、アイテムがあるアイテムフォルダ内でアクセスされて訂正される場合、この訂正されたアイテムに別のアイテムフォルダから直接アクセスすることができるようになる。本質的に、アイテムへのアクセスは異なるアイテムフォルダから発生する可能性があるが、実際にアクセスされているのは実はまったく同じアイテムである。しかし、アイテムフォルダは必ずしもそのメンバアイテムのすべてを所有するとは限らず、または、単に他のフォルダと共にアイテムを共同所有することができ、あるアイテムフォルダの削除は必ずしもアイテムの削除の結果になるとは限らないようになる。それにもかかわらず、本発明のいくつかの実施形態では、アイテムは少なくとも1つのアイテムフォルダに属していなければならず、特定のアイテムのためのただ1つのアイテムフォルダが削除される場合、いくつかの実施形態では、そのアイテムは自動的に削除されるか、または代替実施形態では、アイテムは自動的にデフォルトのアイテムフォルダ(例えば、様々なファイルおよびフォルダベースのシステムで使用される類似の名前のフォルダに概念的に類似する「ごみ箱」アイテムフォルダ)のメンバとなるようになる。
同じく以下でより十分に論じるように、アイテムはまた共通の記述された特性に基づいたカテゴリにも属することができ、カテゴリは、(a)アイテムタイプ(またはタイプ)、(b)特定の直接または継承プロパティ(または複数のプロパティ)、または(c)アイテムプロパティに対応する特定の値(または複数の値)などである。例えば、個人連絡情報のための特定のプロパティを備えるアイテムは自動的にContactカテゴリに属する可能性があり、連絡情報プロパティを有するいかなるアイテムも、同様に自動的にこのカテゴリに属するようになる。同様に、「New York City」の値を有するロケーションプロパティを有するいかなるアイテムも、自動的にNewYorkCityカテゴリに属する可能性がある。
カテゴリはアイテムフォルダとは概念的に異なり、アイテムフォルダは、相関されない(すなわち、共通の記述された特性がない)複数のアイテムを備える可能性があるのに対して、カテゴリ内の各アイテムは、そのカテゴリについて記述される共通のタイプ、プロパティまたは値(「共通性」)を有し、そのアイテムとカテゴリ内の他のアイテムとのリレーションシップ、およびカテゴリ内他のアイテムの間のリレーションシップの基礎を形成するのはこの共通性である。また、特定のフォルダ内のアイテムのメンバシップはそのアイテムのいずれかの特定のアスペクトに基づいて強制的ではないのに対して、ある実施形態では、あるカテゴリにカテゴリ的に関係する共通性を有するすべてのアイテムは自動的にハードウェア/ソフトウェアインターフェースシステムレベルでそのカテゴリのメンバとなる可能性がある。概念上、カテゴリをまた、そのメンバシップが特定のクエリ(データベースのコンテキスト内など)の結果に基づく仮想アイテムフォルダと見なすこともでき、このクエリ(カテゴリの共通性によって定義される)の条件を満たすアイテムはしたがってカテゴリのメンバシップを備えるようになる。
図4は、アイテム、アイテムフォルダおよびカテゴリの間の構造リレーションシップを例示する。複数のアイテム402、404、406、408、410、412、414、416、418および420は、様々なアイテムフォルダ422、424、426、428および430のメンバである。いくつかのアイテムは複数のアイテムフォルダに属することができ、例えば、アイテム402はアイテムフォルダ422および424に属する。いくつかのアイテム、例えばアイテム402、404、406、408、410および412はまた、1つまたは複数のカテゴリ432、434および436のメンバでもあるが、他の時間、例えばアイテム414、416、418および420は、どのカテゴリにも属さない場合がある(これは、いかなるプロパティの所有も自動的にカテゴリ内のメンバシップを暗黙指定するある実施形態では概して可能性が低く、したがって、アイテムは、このような実施形態ではいかなるカテゴリのメンバでないようにするために完全に特徴がないようでなければならない)。フォルダの階層構造と対照的に、カテゴリおよびアイテムフォルダは、図示の有向グラフにより類似の構造を有する。いずれにしても、アイテム、アイテムフォルダおよびカテゴリは、(異なるアイテムタイプにもかかわらず)すべてアイテムである。
ファイル、フォルダおよびディレクトリとは対照的に、本発明のアイテム、アイテムフォルダおよびカテゴリは物理的コンテナの概念的同等物を有していないので、性質において特徴的に「物理的」ではなく、したがって、アイテムは複数のこのようなロケーション内に存在することができるからである。アイテムが複数のアイテムフォルダのロケーション内に存在し、ならびにカテゴリに編成されるための能力は、当技術分野で現在使用可能な機能を超えた、ハードウェア/ソフトウェアインターフェースレベルでの強化され、豊富にされた程度のデータ操作およびストレージ構造機能を提供する。
4.スキーマ
a)ベーススキーマ
アイテムの作成および使用のための汎用の基礎を提供するために、本発明のストレージプラットフォームの様々な実施形態は、アイテムおよびプロパティを作成および編成するための概念的フレームワークを確立するベーススキーマを備える。ベーススキーマはある特殊なタイプのアイテムおよびプロパティ、および、それからサブタイプをさらに導出することができるこれらの特殊な基礎タイプの特徴を定義する。このベーススキーマの使用により、プログラマはアイテム(およびそれらの各タイプ)をプロパティ(およびそれらの各タイプ)から概念的に区別することができる。また、ベーススキーマは、すべてのアイテムが所有することができるプロパティの基礎セットを示し、これは、すべてのアイテム(およびそれらの対応するアイテムタイプ)はベーススキーマ(およびその対応するアイテムタイプ)内のこの基礎アイテムから導出されるからである。
図7に例示するように、また、本発明のいくつかの実施形態に関して、ベーススキーマは3つのトップレベルタイプであるItem、ExtensionおよびPropertyBaseを定義する。図のように、Itemタイプは、この基礎の「Item」アイテムタイプのプロパティによって定義される。対照的に、トップレベルプロパティタイプ「PropertyBase」は事前定義されたプロパティを有しておらず、それからすべての他のプロパティタイプが派生され、それを通じてすべての派生されたプロパティタイプが相関される(単一のプロパティタイプから共通して派生される)、アンカーに過ぎない。Extensionタイププロパティは、どのアイテムをエクステンションが拡張するか、ならびに、アイテムが複数のエクステンションを有する可能性がある場合にあるエクステンションを別のエクステンションから区別するための識別を定義する。
ItemFolderは、Itemから継承されたプロパティに加えて、そのメンバ(ある場合)へのリンクを確立するためのリレーションシップを特徴付ける、Itemアイテムタイプのサブタイプであるのに対して、IdentityKeyおよびPropertyはPropertyBaseのサブタイプである。CategoryRefは、IdentityKeyのサブタイプである。
b)コアスキーマ
本発明のストレージプラットフォームの様々な実施形態はさらに、トップレベルアイテムタイプ構造のための概念的フレームワークを提供するコアスキーマを備える。図8Aは、コアスキーマ内のアイテムを例示するブロック図であり、図8Bは、コアスキーマ内のプロパティタイプを例示するブロック図である。ファイルおよびフォルダベースのシステムにおける、異なる拡張子(*.com、*.exe、*.bat、*.sysなど)を有するファイルと他のこのような基準の間でなされる区別は、コアスキーマのファンクションに類似している。アイテムベースのハードウェア/ソフトウェアインターフェースシステムでは、コアスキーマはコアアイテムタイプのセットを定義し、このセットは直接的(アイテムタイプによる)または間接的(アイテムサブタイプによる)にすべてのアイテムを、アイテムベースのハードウェア/ソフトウェアインターフェースシステムが理解して所定の予測可能な方法で直接処理することができる1つまたは複数のコアスキーマアイテムタイプに特徴付ける。事前定義されたアイテムタイプは、アイテムベースのハードウェア/ソフトウェアインターフェースシステム内の最も共通のアイテムを反映し、したがって、アイテムベースのハードウェア/ソフトウェアインターフェースシステムが、コアスキーマを備えるこれらの事前定義されたアイテムタイプを理解することによって、あるレベルの効率が得られる。
ある実施形態では、コアスキーマは拡張可能ではなく、すなわち、追加のアイテムタイプをベーススキーマ内のアイテムタイプから直接サブタイプ定義することはできず、ただし、コアスキーマの一部である特定の事前定義された派生アイテムタイプを除く。コアスキーマへのエステンションを防止することによって(すなわち、コアスキーマへの新しいアイテムの追加を防止することによって)、ストレージプラットフォームはコアスキーマアイテムタイプの使用を命令し、これはあらゆる後続のアイテムタイプが必ずコアスキーマアイテムタイプのサブタイプであるからである。この構造は、事前定義されたセットのコアアイテムタイプを有する利点をも保持しながら、追加のアイテムタイプの定義において妥当な程度の柔軟性を可能にする。
本発明の様々な実施形態では、また図8Aを参照すると、コアスキーマによってサポートされた特定のアイテムタイプには、以下の1つまたは複数が含まれる可能性がある。
・Category:このアイテムタイプのアイテム(およびそれから派生されたサブタイプ)は、アイテムベースのハードウェア/ソフトウェアインターフェースシステムにおいて有効なカテゴリを表現する。
・Commodity:値の識別可能な物であるアイテム。
・Device:情報処理機能をサポートする論理構造を有するアイテム。
・Document:アイテムベースのハードウェア/ソフトウェアインターフェースシステムによって解釈されないが、その代わりにドキュメントタイプに対応するアプリケーションプログラムによって解釈される、コンテンツを有するアイテム。
・Event:環境内のあるオカレンス(occurrence)を記録するアイテム。
・Location:物理ロケーション(例えば、地理的ロケーション)を表現するアイテム。
・Message:2つ以上のプリンシパル(以下で定義)の間の通信のアイテム。
・Principal:ItemIdの他に、少なくとも1つの決定的に証明可能な識別を有するアイテム(例えば、人、組織、グループ、世帯、権限、サービスなどの識別)。
・Statement:ポリシー、購読、クレデンシャルなどを限定なしに含む、環境に関する特殊情報を有するアイテム。
同様に、図8Bを参照すると、コアスキーマによってサポートされた特定のプロパティタイプには、以下の1つまたは複数が含まれる可能性がある。
・Certificate(ベーススキーマの基礎的なPropertyBaseタイプから派生される)。
・Principal Identity Key(ベーススキーマのIdentityKeyタイプから派生される)。
・Postal Address(ベーススキーマのPropertyタイプから派生される)。
・Rich Text(ベーススキーマのPropertyタイプから派生される)。
・EAddress(ベーススキーマのPropertyタイプから派生される)。
・IdentitySecurityPackage(ベーススキーマのRelationshipタイプから派生される)。
・RoleOccupancy(ベーススキーマのRelationshipタイプから派生される)。
・BasicPresence(ベーススキーマのRelationshipタイプから派生される)。
これらのアイテムおよびプロパティはさらに、図8Aおよび図8Bに示すそれらの各プロパティによって記述される。
5.リレーションシップ
リレーションシップは、一方のアイテムがソースとして指定され、他方のアイテムがターゲットとして指定される、2項リレーションシップである。ソースアイテムおよびターゲットアイテムはリレーションシップによって関係付けられる。ソースアイテムは一般にリレーションシップのライフタイムをコントロールする。すなわち、ソースアイテムが削除される場合、これらのアイテムの間のリレーションシップも削除される。
リレーションシップは、包含および参照リレーションシップに分類される。包含リレーションシップはターゲットアイテムのライフタイムをコントロールするが、参照リレーションシップはいかなるライフタイム管理セマンティクスも提供しない。図12は、リレーションシップが分類される方法を例示する。
包含リレーションシップタイプはさらに保留および埋め込みリレーションシップに分類される。あるアイテムへのすべての保留リレーションシップが除去される場合、このアイテムは削除される。保留リレーションシップはターゲットのライフタイムを、参照カウントメカニズムを通じてコントロールする。埋め込みリレーションシップは、複合アイテムのモデリングを可能にし、排他的な保留リレーションシップと見なすことができる。アイテムを1つまたは複数の保留リレーションシップのターゲットにすることができるが、アイテムを厳密に1つの埋め込みリレーションシップのターゲットにすることができる。埋め込みリレーションシップのターゲットであるアイテムを、いかなる他の保留または埋め込みリレーションシップのターゲットにすることもできない。
参照リレーションシップは、ターゲットアイテムのライフタイムをコントロールしない。これらのリレーションシップはダングリングである可能性があり、ターゲットアイテムは存在しない可能性がある。参照リレーションシップを使用して、グローバルなアイテムネームスペース(すなわち、リモートデータストアを含む)内のいかなる場所のアイテムへの参照もモデリングすることができる。
アイテムのフェッチは自動的にそのリレーションシップをフェッチしない。アプリケーションは明示的にアイテムのリレーションシップを要求しなければならない。加えて、リレーションシップの修正は、ソースまたはターゲットアイテムを修正せず、同様に、リレーションシップの追加はソース/ターゲットアイテムに影響を及ぼさない。
リレーションシップ宣言
明示的リレーションシップタイプは以下の要素により定義される。
・リレーションシップ名はName属性内で規定される。
・保留、埋め込み、参照のうち1つであるリレーションタイプ。これはType属性内で規定される。
・ソースおよびターゲットエンドポイント。各エンドポイントは、参照されたアイテムの名前およびタイプを規定する。
・ソースエンドポイントフィールドは一般にタイプItemID(宣言されない)であり、リレーションシップインスタンスと同じデータストア内のアイテムを参照しなければならない。
・保留および埋め込みリレーションシップでは、ターゲットエンドポイントフィールドはタイプItemIDReferenceでなければならず、リレーションシップインスタンスと同じデータストア内のアイテムを参照しなければならない。参照リレーションシップでは、ターゲットエンドポイントはいずれかのItemRerefenceタイプにすることができ、他のストレージプラットフォームデータストア内のアイテムを参照することができる。
・オプショナルで、スカラまたはPropertyBaseタイプの1つまたは複数のフィールドを宣言することができる。これらのフィールドは、リレーションシップに関連付けられたデータを含むことができる。
・リレーションシップインスタンスはグローバルリレーションシップテーブル内に格納される。
・あらゆるリレーションシップインスタンスは組合せ(ソースItemID、リレーションシップID)によって一意に識別される。リレーションシップIDは、それらのタイプにかかわらず、所与のアイテム内で供給されたすべてのリレーションシップのための所与のソースItemID内で一意である。
ソースアイテムはリレーションシップの所有者である。所有者として指定されたアイテムはリレーションシップのライフタイムをコントロールするが、リレーションシップ自体は、それが関係するアイテムから分離している。ストレージプラットフォームAPI322は、アイテムに関連付けられたリレーションシップをエクスポーズするためのメカニズムを提供する。
これはリレーションシップ宣言の一実施例である。
Figure 0004738908
これは、参照リレーションシップの一実施例である。ソース参照によって参照されるpersonアイテムが存在しない場合、このリレーションシップを作成することはできない。また、personアイテムが削除される場合、personとorganizationの間のリレーションシップインスタンスは削除される。しかし、Organizationアイテムが削除される場合、リレーションシップは削除されず、それはダングリングである。
保留リレーションシップ
保留リレーションシップは、ターゲットアイテムのライフタイム管理に基づいて参照カウントをモデリングするために使用される。
アイテムを、アイテムへのゼロまたは複数のリレーションシップのためのソースエンドポイントにすることができる。埋め込みアイテムではないアイテムを、1つまたは複数の保留リレーションシップ内のターゲットにすることができる。
ターゲットエンドポイント参照タイプはItemIDReferenceでなければならず、リレーションシップインスタンスと同じストア内のアイテムを参照しなければならない。
保留リレーションシップは、ターゲットエンドポイントのライフタイム管理を実施する。保留リレーションシップインスタンス、および、それがターゲットにしているアイテムの作成は、アトミックオペレーションである。同じアイテムをターゲットにする追加の保留リレーションシップインスタンスを作成することができる。所与のアイテムをターゲットエンドポイントとして有する最後の保留リレーションシップインスタンスが削除される場合、ターゲットアイテムも削除される。
リレーションシップ宣言で規定されたエンドポイントアイテムのタイプは一般に、リレーションシップのインスタンスが作成される場合に実施されるようになる。エンドポイントアイテムのタイプを、リレーションシップが確立された後に変更することはできない。
保留リレーションシップは、アイテムネームスペースの形成において重要な役割を果たす。保留リレーションシップは、ソースアイテムに対してターゲットアイテムの名前を定義する「Name」プロパティを含む。この相対名は、所与のアイテムから供給されたすべての保留リレーションシップについて一意である。ルートアイテムから開始して所与のアイテムまでのこの相対名の順序付きリストは、アイテムへのフルネームを形成する。
保留リレーションシップは非循環有向グラフ(DAG)を形成する。保留リレーションシップが作成される場合、システムは、周期が作成されないことを保証し、したがって、アイテムネームスペースがDAGを形成することを保証する。
保留リレーションシップはターゲットアイテムのライフタイムをコントロールするが、ターゲットエンドポイントアイテムのオペレーショナルな一貫性をコントロールしない。ターゲットアイテムは、保留リレーションシップを通じてそれを所有するアイテムから、オペレーション上は独立している。保留リレーションシップのソースであるアイテムにおけるCopy、Move、Backupおよび他のオペレーションは、同じリレーションシップのターゲットであるアイテムに影響を及ぼさず、例えばすなわち、フォルダアイテムをバックアップしても、そのフォルダ内のすべてのアイテム(FolderMemberリレーションシップのターゲット)を自動的にバックアップしない。
以下は保留リレーションシップの一実施例である。
Figure 0004738908
FolderMembersリレーションシップは、アイテムの汎用コレクションとしてのフォルダの概念を可能にする。
埋め込みリレーションシップ
埋め込みリレーションシップは、ターゲットアイテムのライフタイムの排他的コントロールの概念をモデリングする。このリレーションシップは、複合アイテムの概念を可能にする。
埋め込みリレーションシップインスタンス、および、それがターゲットにしているアイテムの作成は、アトミックオペレーションである。アイテムを、ゼロまたは複数の埋め込みリレーションシップのソースにすることができる。しかし、アイテムを、ただ1つの埋め込みリレーションシップのターゲットにすることができる。埋め込みリレーションシップのターゲットであるアイテムを、保留リレーションシップ内のターゲットにすることはできない。
ターゲットエンドポイント参照タイプはItemIDReferenceでなければならず、リレーションシップインスタンスと同じデータストア内のアイテムを参照しなければならない。
リレーションシップ宣言で規定されたエンドポイントアイテムのタイプは一般に、リレーションシップのインスタンスが作成される場合に実施されるようになる。エンドポイントアイテムのタイプを、リレーションシップが確立された後に変更することはできない。
埋め込みリレーションシップは、ターゲットエンドポイントのオペレーショナルな一貫性をコントロールする。例えば、アイテムの直列化のオペレーションは、そのアイテムならびにそれらのターゲットのすべてから供給するすべての埋め込みリレーションシップの直列化を含むことができ、アイテムをコピーすることはまたそのすべての埋め込みアイテムをもコピーする。
以下は一実施例の宣言である。
Figure 0004738908
参照リレーションシップ
参照リレーションシップは、それが参照するアイテムのライフタイムをコントロールしない。さらに、参照リレーションシップは、ターゲットの存在を保証せず、リレーションシップ宣言で規定されたターゲットのタイプも保証しない。これは、参照リレーションシップがダングリングになる可能性があることを意味する。また、参照リレーションシップは他のデータストア内のアイテムを参照することができる。参照リレーションシップを、ウェブページ内のリンクに類似した概念と見なすことができる。
以下は参照リレーションシップ宣言の一実施例である。
Figure 0004738908
いかなる参照タイプもターゲットポイントにおいて許可される。参照リレーションシップに参加するアイテムは、いかなるアイテムタイプであってもよい。
参照リレーションシップは、複数のアイテムの間の非ライフタイム管理リレーションシップをモデリングするために使用される。ターゲットの存在が実施されないので、参照リレーションシップは、疎結合リレーションシップをモデリングするために好都合である。参照リレーションシップを、他のコンピュータ上のストアを含む他のデータストア内のアイテムをターゲットにするために使用することができる。
ルールおよび制約
以下の追加のルールおよび制約がリレーションシップに対して適用される。
・アイテムは(厳密に1つの埋め込みリレーションシップ)または(1つまたは複数の保留リレーションシップ)のターゲットでなければならない。1つの例外はルートアイテムである。アイテムをゼロまたは複数の参照リレーションシップのターゲットにすることができる。
・埋め込みリレーションシップのターゲットであるアイテムを、保留リレーションシップのソースにすることはできない。このアイテムを参照リレーションシップのソースにすることができる。
・アイテムがファイルからプロモートされる場合、このアイテムを保留リレーションシップのソースにすることはできない。このアイテムを埋め込みリレーションシップおよび参照リレーションシップのソースにすることができる。
・ファイルからプロモートされるアイテムを、埋め込みリレーションシップのターゲットにすることはできない。
リレーションシップの順序付け
少なくとも1つの実施形態では、本発明のストレージプラットフォームは、リレーションシップの順序付けをサポートする。この順序付けは、ベースリレーションシップ定義内の「Order」という名前のプロパティを通じて達成される。Orderフィールド上に一意性の制約はない。同じ「order」プロパティ値を有するリレーションシップの順序は保証されないが、これらのリレーションシップを、より低い「order」値を有するリレーションシップの後、および、より高い「order」フィールド値を有するリレーションシップの前に順序付けすることができることが保証される。
アプリケーションは、組合せ(SourceItemID、RelationshipID、Order)において順序付けることによって、デフォルト順序におけるリレーションシップを得ることができる。所与のアイテムから供給されたすべてのリレーションシップインスタンスは、コレクション内のリレーションシップのタイプにかかわらず、単一のコレクションとして順序付けされる。これはしかし、所与のタイプ(例えば、FolderMembers)のすべてのリレーションシップが所与のアイテムのためのリレーションシップコレクションの順序付きサブセットであることを保証する。
リレーションシップを操作するためのデータストアAPI312は、リレーションシップの順序付けをサポートするオペレーションのセットを実装する。以下の用語は、これらのオペレーションを説明する助けとなるために導入される。
・RelFirstは、順序付きコレクション内で順序値OrdFirstを有する最初のリレーションシップである。
・RelLastは、順序付きコレクション内で順序値OrdLastを有する最後のリレーションシップである。
・RelXは、コレクション内で順序値OrdXを有する所与のリレーションシップである。
・RelPrevは、コレクション内で、OrdXより小さい順序値OrdPrevを有する、RelXに最も近いリレーションシップである。
・RelNextは、コレクション内で、OrdXより大きい順序値OrdNextを有する、RelXに最も近いリレーションシップである。
これらのオペレーションには、制限なしに以下が含まれる。
・InsertBeforeFirst(SourceItemID、Relationship)は、リレーションシップをコレクション内の最初のリレーションシップとして挿入する。新しいリレーションシップの「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の間である新しい順序値を割り当てることができる。
前述のように、あらゆるアイテムはアイテムフォルダのメンバでなければならない。リレーションシップに関して、あらゆるアイテムはアイテムフォルダとのリレーションシップを有していなければならない。本発明のいくつかの実施形態では、あるリレーションシップは、複数のアイテムの間に存在するリレーションシップによって表現される。
本発明の様々な実施形態について実装されるように、リレーションシップは、あるアイテム(ソース)によって別のアイテム(ターゲット)に「拡張」される、有向の2項リレーションシップを提供する。リレーションシップはソースアイテム(それを拡張したアイテム)によって所有され、したがってリレーションシップは、ソースが除去される場合に除去される(例えば、リレーションシップは、ソースアイテムが削除される場合、削除される)。また、ある場合では、リレーションシップは(共同所有)ターゲットアイテムの所有権を共有することができ、このような所有権は、リレーションシップのIsOwnedプロパティ(またはその同等物)内で反映される可能性がある(図7のように、Relationshipプロパティタイプについて)。これらの実施形態では、新しいIsOwnedリレーションシップの作成は自動的にターゲットアイテムにおける参照カウントを増分し、このようなリレーションシップの削除はターゲットアイテムにおける参照カウントを減分することができる。これらの特定の実施形態では、アイテムは、ゼロより大きい参照カウントを有する場合に存在し続け、カウントがゼロに達する場合に自動的に削除される。この場合も、アイテムフォルダは、他のアイテムへのリレーションシップのセットを有する(または、有することができる)アイテムであり、これらの他のアイテムは、アイテムフォルダのメンバシップを備える。リレーションシップの他の実際の実装は、本明細書で説明する機能性を達成するために本発明によって可能であり、予想される。
実際の実装にかかわらず、リレーションシップはあるオブジェクトから別のオブジェクトへの選択可能な接続である。アイテムが複数のアイテムフォルダに、ならびに、1つまたは複数のカテゴリに属するための能力、および、これらのアイテム、フォルダおよびカテゴリがパブリックであるかプライベートであるかは、アイテムベースの構造内の存在(またはその欠如)に与えられた意味によって決定される。これらの論理的リレーションシップは、本明細書で説明する機能性を達成するために特に使用される物理的実装にかかわらず、リレーションシップのセットに割り当てられた意味である。論理的リレーションシップは、アイテムとそのアイテムフォルダまたはカテゴリ(およびその逆)の間で確立され、これは本質的に、アイテムフォルダおよびカテゴリはそれぞれアイテムの特殊タイプであるからである。したがって、アイテムフォルダおよびカテゴリを他のいかなるアイテムとも同じように操作することができ、すなわち、限定なしに、コピー、電子メールメッセージに追加、ドキュメントに埋め込むことなどができ、アイテムフォルダおよびカテゴリを、他のアイテム用と同じメカニズムを使用して直列化および非直列化(インポートおよびエクスポート)することができる。(例えば、XMLでは、すべてのアイテムは直列化フォーマットを有することができ、このフォーマットはアイテムフォルダ、カテゴリおよびアイテムに等しく適用される)。
前述の関係は、アイテムとそのアイテムフォルダの間の関係を表現し、論理的にアイテムからアイテムフォルダへ、アイテムフォルダからアイテムへ、またはその両方に拡張することができる。アイテムからアイテムフォルダへ論理的に拡張するリレーションシップは、アイテムフォルダがそのアイテムに対してパブリックであり、そのメンバシップ情報をそのアイテムと共有することを示し、反対に、アイテムからアイテムフォルダへの論理的リレーションシップの欠如は、アイテムフォルダがそのアイテムに対してプライベートであり、そのメンバシップ情報をそのアイテムと共有しないことを示す。同様に、アイテムフォルダからアイテムへ論理的に拡張するリレーションシップは、アイテムがそのアイテムフォルダに対してパブリックおよび共有可能であることを示すのに対して、アイテムフォルダからアイテムへの論理的リレーションシップの欠如は、アイテムがプライベートおよび非共有可能であることを示す。したがって、アイテムフォルダが別のシステムにエクスポートされる場合、新しいコンテキストにおいて共有されるのは「パブリック」アイテムであり、アイテムがそのアイテムフォルダを他の共有可能なアイテムについて検索する場合、それに属する共有可能なアイテムに関する情報をアイテムに提供するのは、「パブリック」アイテムフォルダである。
図9は、アイテムフォルダ(この場合もアイテム自体である)、そのメンバアイテム、およびアイテムフォルダとそのメンバアイテムの間の相互接続リレーションシップを例示するブロック図である。アイテムフォルダ900は、メンバとして複数のアイテム902、904および906を有する。アイテムフォルダ900は、それ自体からアイテム902へのリレーションシップ912を有し、これはアイテム902が、アイテムフォルダ900、そのメンバ904および906、ならびに、アイテムフォルダ900にアクセスすることができる他のいかなるアイテムフォルダ、カテゴリまたはアイテム(図示せず)に対してもパブリックおよび共有可能であることを示す。しかし、アイテム902からアイテムフォルダ900へのリレーションシップはなく、これは、アイテムフォルダ900がアイテム902に対してプライベートであり、そのメンバシップ情報をアイテム902と共有しないことを示す。アイテム904は、他方では、それ自体からアイテムフォルダ900へのリレーションシップ924を有し、これはアイテムフォルダ900がパブリックであり、そのメンバシップ情報をアイテム904と共有することを示す。しかし、アイテムフォルダ900からアイテム904へのリレーションシップはなく、これは、アイテム904がアイテムフォルダ900、その他のメンバ902および906、ならびに、アイテムフォルダ900にアクセスすることができる他のいかなるアイテムフォルダ、カテゴリまたはアイテム(図示せず)に対してもプライベートであり、共有可能でないことを示す。アイテム902および904へのそのリレーションシップ(またはその欠如)とは対照的に、アイテムフォルダ900はそれ自体からアイテム906へのリレーションシップ916を有し、アイテム906はアイテムフォルダ900に戻るリレーションシップ926を有し、これは共に、アイテム906がアイテムフォルダ900、そのメンバ902および904、ならびに、アイテムフォルダ900にアクセスすることができる他のいかなるアイテムフォルダ、カテゴリまたはアイテム(図示せず)に対してもパブリックおよび共有可能であること、および、アイテムフォルダ900がパブリックであり、そのメンバシップ情報をアイテム906と共有することを示す。
前述のように、アイテムフォルダ内のアイテムは共通性を共有する必要はなく、これはアイテムフォルダが「記述」されないからである。カテゴリは、他方では、そのメンバアイテムのすべてに共通である共通性によって記述される。したがって、カテゴリのメンバシップは本質的に、記述された共通性を有するアイテムに制限され、ある実施形態では、カテゴリの記述を満たすすべてのアイテムは自動的にそのカテゴリのメンバにされる。このように、アイテムフォルダはトリビアルなタイプ構造をそれらのメンバシップによって表現することを可能にするのに対して、カテゴリは、定義された共通性に基づいたメンバシップを可能にする。
言うまでもなく、カテゴリ記述は性質において論理的であり、したがってカテゴリをいかなる論理表現のタイプ、プロパティおよび/または値によっても記述することができる。例えば、カテゴリのための論理表現をそのメンバシップにして、2つのプロパティの一方または両方を有するアイテムを備えるようにすることができる。カテゴリについて記述されたこれらのプロパティが「A」および「B」である場合、カテゴリメンバシップは、プロパティAを有するがBを有していないアイテム、プロパティBを有するがAを有していないアイテム、および、プロパティAおよびBを共に有するアイテムを備えることができる。このプロパティの論理表現は論理演算子「OR」によって記述され、カテゴリによって記述されたメンバのセットは、プロパティA OR Bを有するアイテムである。類似の論理オペランド(制限なしに「AND」、「XOR」および「NOT」を単独または組合せで含む)もまた、カテゴリを記述するために使用することができ、これは当業者には理解されよう。
アイテムフォルダ(記述されない)とカテゴリ(記述される)の間の区別にもかかわらず、アイテムへのカテゴリリレーションシップ、およびカテゴリへのアイテムリレーションシップは本質的に、本明細書で本発明の多数の実施形態におけるアイテムフォルダおよびアイテムについて上記で開示した物と同様である。
図10は、カテゴリ(この場合もアイテム自体である)、そのメンバアイテム、およびカテゴリとそのメンバアイテムの間の相互接続リレーションシップを例示するブロック図である。カテゴリ1000は、メンバとして複数のアイテム1002、1004および1006を有し、そのすべては、カテゴリ1000によって記述された共通プロパティ、値またはタイプのある組合せ1008(共通性記述1008’)を共有する。カテゴリ1000は、それ自体からアイテム1002へのリレーションシップ1012を有し、これはアイテム1002が、カテゴリ1000、そのメンバ1004および1006、ならびに、カテゴリ1000にアクセスすることができる他のいかなるカテゴリ、アイテムフォルダまたはアイテム(図示せず)に対してもパブリックおよび共有可能であることを示す。しかし、アイテム1002からカテゴリ1000へのリレーションシップはなく、これは、カテゴリ1000がアイテム1002に対してプライベートであり、そのメンバシップ情報をアイテム1002と共有しないことを示す。アイテム1004は、他方では、それ自体からカテゴリ1000へのリレーションシップ1024を有し、これはカテゴリ1000がパブリックであり、そのメンバシップ情報をアイテム1004と共有することを示す。しかし、カテゴリ1000からアイテム1004に拡張されたリレーションシップはなく、これは、アイテム1004がカテゴリ1000、その他のメンバ1002および1006、ならびに、カテゴリ1000にアクセスすることができる他のいかなるカテゴリ、アイテムフォルダまたはアイテム(図示せず)に対してもプライベートであり、共有可能でないことを示す。アイテム1002および1004へのそのリレーションシップ(またはその欠如)とは対照的に、カテゴリ1000はそれ自体からアイテム1006へのリレーションシップ1016を有し、アイテム1006はカテゴリ1000に戻るリレーションシップ1026を有し、これは共に、アイテム1006がカテゴリ1000、そのアイテムメンバ1002および1004、ならびに、カテゴリ1000にアクセスすることができる他のいかなるカテゴリ、アイテムフォルダまたはアイテム(図示せず)に対してもパブリックおよび共有可能であること、および、カテゴリ1000がパブリックであり、そのメンバシップ情報をアイテム1006と共有することを示す。
最後に、カテゴリおよびアイテムフォルダはそれら自体がアイテムであり、アイテムは互いにリレーションシップすることができるので、カテゴリはアイテムフォルダにリレーションシップすることができ、その逆も可能であり、ある代替実施形態では、カテゴリ、アイテムフォルダおよびアイテムはそれぞれ他のカテゴリ、アイテムフォルダおよびアイテムにリレーションシップすることができる。しかし、様々な実施形態では、アイテムフォルダ構造および/またはカテゴリ構造は、ハードウェア/ソフトウェアインターフェースシステムレベルでは、サイクルを含むことを禁止される。アイテムフォルダおよびカテゴリ構造が有向グラフに類似しているところでは、サイクルを禁止する実施形態は非循環有向グラフ(DAG)に類似しており、このグラフは、グラフ理論の技術分野における数学的定義によって、パスが同じ頂点で開始および終了しない有向グラフである。
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がタイプをカスタマイズすることを許可することが必要である。これは、エクステンションの概念により可能にされる。エクステンションは強く型付け(typing)されたインスタンスであるが、(a)エクステンションは独立して存在することはできず、(b)エクステンションはアイテムまたはネストされた要素にアタッチされなければならない。
スキーマ拡張可能性の必要性に対処することに加えて、エクステンションはまた、「マルチタイプ定義(multi−typing)」の問題に対処するようにも意図される。いくつかの実施形態では、ストレージプラットフォームは複数の継承またはサブタイプのオーバーラップをサポートしない場合があるので、アプリケーションはエクステンションを、タイプインスタンスのオーバーラップをモデリングするための方法として使用することができる(例えば、Documentは法的ドキュメントならびにセキュアドキュメントである)。
アイテムエクステンション
アイテム拡張可能性を提供するために、データモデルはさらに、Base.Extensionという名前の抽象タイプを定義する。これは、エクステンションタイプの階層のためのルートタイプである。アプリケーションはBase.Extensionをサブタイプ定義して、特定のエクステンションタイプを作成することができる。
Base.Extensionタイプは、ベーススキーマ内で以下のように定義される。
Figure 0004738908
ItemIDフィールドは、エクステンションが関連付けられるアイテムのItemIDを含む。このItemIDを有するアイテムが存在しなければならない。所与のItemIDを有するアイテムが存在しない場合、エクステンションを作成することはできない。アイテムが削除される場合、同じItemIDを有するすべてのエクステンションは削除される。タプル(ItemID、ExtensionID)はエクステンションインスタンスを一意に識別する。
エクステンションタイプの構造は、以下のようにアイテムタイプの構造に類似している。
・エクステンションタイプはフィールドを有する。
・フィールドは、プリミティブまたはネストされた要素のタイプにすることができる。
・エクステンションタイプをサブタイプ定義することができる。
以下の制限はエクスションタイプに適用される。
・エクステンションをリレーションシップのソースおよびターゲットにすることはできない。
・エクステンションタイプインスタンスはアイテムから独立して存在することはできない。
・エクステンションタイプを、ストレージプラットフォームタイプ定義内でフィールドタイプとして使用することはできない。
所与のアイテムタイプに関連付けることができるエクステンションのタイプに対する制約はない。いかなるエクステンションタイプがいかなるアイテムタイプを拡張することも許可される。複数のエクステンションインスタンスが1つのアイテムにアタッチされる場合、これらのエクステンションインスタンスは構造およびビヘイビアにおいて互いに独立している。
エクステンションインスタンスは、アイテムとは分離して格納およびアクセスされる。すべてのエクステンションタイプインスタンスは、グローバルエクステンションビューからアクセス可能である。それらが関連付けられるアイテムが何のタイプかにかかわらず、所与のタイプのエクステンションのすべてのインスタンスを戻す、効率的なクエリを作成することができる。ストレージプラットフォームAPIは、アイテムにおいてエクステンションを格納、検索および修正することができる、プログラミングモデルを提供する。
エクステンションタイプを、ストレージプラットフォームの単一の継承モデルを使用してサブタイプ定義されたタイプにすることができる。エクステンションタイプから派生することは、新しいエクステンションタイプを作成する。エクステンションの構造またはビヘイビアは、アイテムタイプ階層の構造またはビヘイビアをオーバーライドまたは置換することはできない。アイテムタイプに類似して、エクステンションタイプインスタンスには、エクステンションタイプに関連付けられたビューを通じて直接アクセスすることができる。エクステンションのItemIDは、それらがどのアイテムに属するかを示し、対応するアイテムオブジェクトをグローバルアイテムビューから検索するために使用することができる。エクステンションは、オペレーショナルな一貫性のためにアイテムの一部と見なされる。Copy/Move、Backup/Restore、および、ストレージプラットフォームが定義する他の共通オペレーションは、アイテムの一部としてエクステンションに操作を加えることができる。
以下の実施例を考察する。ContactタイプはWindows(登録商標)Typeセット内で定義される。
Figure 0004738908
あるCRMアプリケーション開発者は、CRMアプリケーションエクステンションを、ストレージプラットフォーム内に格納された連絡先にアタッチすることを望む。このアプリケーション開発者は、アプリケーションが操作することができる追加のデータ構造を含むであろうCRMエクステンションを定義するようになる。
Figure 0004738908
あるHRアプリケーション開発者もまた、追加のデータをContactにアタッチすることを望む場合がある。このデータはCRMアプリケーションデータから独立している。この場合も、このアプリケーション開発者はエクステンションを作成することができる。
Figure 0004738908
CRMExtensionおよびHRExtensionは、Contactアイテムにアタッチすることができる2つの独立したエクステンションである。これらのエクステンションは、互いに独立して作成およびアクセスされる。
上記の実施例では、CEMExtensionタイプのフィールドおよびメソッドは、Contact階層のフィールドまたはメソッドをオーバーライドすることはできない。CRMExtensionタイプのインスタンスをContact以外のアイテムタイプにアタッチすることができることに留意されたい。
Contactアイテムが検索される場合、そのアイテムエクステンションは自動的に検索されない。Contactアイテムが与えられると、その関係付けられたアイテムエクステンションには、同じItemIdを有するエクステンションについてグローバルエクステンションビューをクエリすることによってアクセスすることができる。
システム内のすべてのCRMExtensionエクステンションに、それらがどのアイテムに属するかにかかわらず、CRMExtensionタイプビューを通じてアクセスすることができる。アイテムのすべてのアイテムエクステンションは、同じアイテムidを共有する。上記の実施例では、ContactアイテムインスタンスならびにアタッチされたCRMExtensionおよびHRExtensionは、同じItemIDを有する。
以下の表は、Item、ExtensionおよびNestedElementタイプの間の類似性および違いを要約する。
Figure 0004738908
NestedElementタイプの拡張
ネストされた要素タイプは、アイテムタイプと同じメカニズムにより拡張されない。ネストされた要素のエクステンションは、ネストされた要素タイプのフィールドと同じメカニズムにより格納およびアクセスされる。
データモデルは、Elementという名称のネストされた要素タイプのためのルートを定義する。
Figure 0004738908
NestedElementタイプはこのタイプから継承する。NestedElement要素タイプは加えて、Elementのマルチセットであるフィールドを定義する。
Figure 0004738908
NestedElementエクステンションは、以下のようにアイテムエクステンションとは異なる。
・ネストされた要素エクステンションはエクステンションタイプではない。これらのエクステンションは、Base.Extensionタイプ内でルートされるエクステンションタイプ階層に属していない。
・ネストされた要素エクステンションは、アイテムの他のフィールドと共に格納され、グローバルにアクセス可能ではなく、所与のエクステンションタイプのすべてのインスタンスを検索するクエリを作成することはできない。
・これらのエクステンションは、(そのアイテムの)他のネストされた要素が格納される方法と同じ方法で格納される。他のネストされたセットと同様に、NestedElementエクステンションはUDTにおいて格納される。これらは、ネストされた要素タイプのExtensionsフィールドを通じてアクセス可能である。
・多値プロパティにアクセスするために使用されるコレクションインターフェースはまた、タイプエクステンションのセットを介してアクセスおよび反復するためにも使用される。
以下の表は、ItemエクステンションおよびNestedElementエクステンションを要約し比較する。
Figure 0004738908
D.データベースエンジン
上述のように、データストアはデータベースエンジン上で実装される。本発明では、データベースエンジンは、Microsoft SQL Serverエンジンなど、SQLクエリ言語を実装するリレーショナルデータベースエンジンを、オブジェクトリレーショナルエクステンションと共に備える。このセクションでは、データストアが実装するデータモデルの、リレーショナルストアへのマッピングを説明し、本実施形態による、ストレージプラットフォームクライアントによって消費される論理APIについての情報を提供する。しかし、異なるデータベースエンジンが使用される場合、異なるマッピングを使用することができることは理解されよう。実際に、ストレージプラットフォームの概念データモデルをリレーショナルデータベースエンジン上に実装することに加えて、例えばオブジェクト指向およびXMLデータベースなど、他のタイプのデータベース上でも実装することができる。
オブジェクト指向(OO)データベースシステムは、プログラミング言語オブジェクト(例えば、C++、Java(登録商標))のための永続性およびトランザクションを提供する。「アイテム」のストレージプラットフォーム概念は、オブジェクト指向システムの「オブジェクト」に十分にマップするが、埋め込みコレクションはオブジェクトに追加されなければならなくなる。継承およびネストされた要素タイプのように、他のストレージプラットフォームタイプの概念もまた、オブジェクト指向タイプのシステムをマップする。オブジェクト指向システムは通常すでにオブジェクト識別をサポートし、よって、アイテム識別をオブジェクト識別にマップさせることができる。アイテムのビヘイビア(オペレーション)はオブジェクトのメソッドに十分にマップする。しかし、オブジェクト指向システムは通常、編成機能が欠けており、検索において不十分である。また、オブジェクト指向システムは、非構造化および半構造化データのためのサポートを提供しない。本明細書で説明する完全なストレージプラットフォームデータモデルをサポートするため、リレーションシップ、フォルダおよびエクステンションのような概念が、オブジェクトデータモデルに追加されることが必要となる。加えて、プロモーション、同期化、通知およびセキュリティのようなメカニズムが実装されることが必要となる。
オブジェクト指向システムに類似して、XMLデータベースは、XSD(XMLスキーマ定義)に基づいて、単一の継承ベースのタイプシステムをサポートする。本発明のアイテムタイプシステムをXSDタイプモデルにマップさせることができる。XSDはまた、ビヘイビアのためのサポートを提供しない。アイテムのためのXSDは、アイテムビヘイビアにより増補されなければならなくなる。XMLデータベースは単一のXSDドキュメントを処理し、編成および幅広い検索機能に欠けている。オブジェクト指向データベースと同様に、本明細書で説明するデータモデルをサポートするため、リレーションシップのような他の概念、およびフォルダがこのようなXMLデータベースに組み込まれることが必要となり、また、同期化、通知およびセキュリティのようなメカニズムもまた実装されることが必要となる。
以下のサブセクションに関して、開示された全体的な情報を実施するために少数の例示が提供され、図13は通知メカニズムを例示する図である。図14は、2つのトランザクションが共に新しいレコードを同じBツリーに挿入中である、一実施例を例示する図である。図15は、データ変更検出プロセスを例示する。図16は、例示的ディレクトリツリーを例示する。図17は、ディレクトリベースのファイルシステムの既存のフォルダがストレージプラットフォームデータストアに移動される、一実施例を示す。
1.UDTを使用したデータストア実装
この実施形態では、一実施形態ではMicrosoft SQL Serverエンジンを備えるリレーショナルデータベースエンジン314は、組み込みスカラ型をサポートする。組み込みスカラ型は「ネイティブ」および「単純」である。組み込みスカラ型は、ユーザがそれら自体のタイプを定義することができないという意味でネイティブであり、複合構造をカプセル化することができない点で単純である。ユーザ定義タイプ(以下、UDT)は、ユーザが複合の構造化タイプを定義することによってタイプシステムを拡張できるようにすることによって、ネイティブのスカラ型システム以上のタイプ拡張性のためのメカニズムを提供する。ユーザによって定義された後、UDTを、タイプシステム内で組み込みスカラ型が使用される可能性のあるいかなる所で使用することもできる。
本発明の一態様によれば、ストレージプラットフォームスキーマはデータベースエンジンストア内のUDTクラスにマップされる。データストアアイテムは、Base.Itemタイプから派生するUDTクラスにマップされる。アイテムと同様に、エクステンションもまたUDTクラスにマップされ、継承を使用する。ルートのExtensionタイプはBase.Extensionであり、そこからすべてのExtensionタイプが派生される。
UDTはCLRクラスであり、状態(すなわち、データフィールド)およびビヘイビア(すなわち、ルーチン)を有する。UDTは、管理された言語、すなわちC#、VB.NETなどのいずれかを使用して定義される。UDTメソッドおよびオペレータをT−SQL内で、そのタイプのインスタンスに対して呼び出すことができる。UDTを、行内の列のタイプ、T−SQL内のルーチンのパラメータのタイプ、または、T−SQL内の変数のタイプにすることができる。
UDTクラスへのストレージプラットフォームスキーマのマッピングは、高レベルで極めて直接的である。一般に、ストレージプラットフォームのスキーマはCLRネームスペースにマップされる。ストレージプラットフォームのタイプはCLRクラスにマップされる。CLRクラス継承は、ストレージプラットフォームのタイプ継承をミラーリングし、ストレージプラットフォームプロパティはCLRクラスプロパティにマップされる。
2.アイテムマッピング
アイテムがグローバルに検索可能であることが望ましいこと、および、継承およびタイプ置換可能性のためのこの実施形態のリレーショナルデータベースにおけるサポートが与えられると、データベースストアにおけるアイテム格納のための1つの可能な実施態様は、タイプBase.Itemの列を有する単一のテーブル内にすべてのアイテムを格納することになる。タイプ置換可能性を使用すると、すべてのタイプのアイテムを格納することができ、検索をアイテムタイプおよびサブタイプによって、Yukonの「is of(タイプ)」演算子を使用してフィルタリングすることができる。
しかし、このような手法に関連付けられたオーバーヘッドについての懸念により、この実施形態では、アイテムはトップレベルタイプによって分割され、各タイプ「ファミリ」のアイテムは別々のテーブル内に格納されるようになる。このパーティショニングスキームの下で、テーブルが、Base.Itemから直接継承する各アイテムタイプについて作成される。これらの下で継承するタイプは、上述のようにタイプ置換可能性を使用して適切なタイプファミリテーブル内に格納される。Base.Itemからの継承の最初のレベルのみが特別に扱われる。
「シャドー」テーブルは、すべてのアイテムのためのグローバルに検索可能なプロパティのコピーを格納するために使用される。このテーブルを、ストレージプラットフォームAPIのUpdate()メソッドによって維持することができ、これを通じてすべてのデータ変更が行われる。タイプファミリテーブルとは異なり、このグローバルアイテムテーブルは、アイテムのトップレベルスカラプロパティのみを含み、完全なUDTアイテムオブジェクトは含まない。グローバルアイテムテーブルは、タイプファミリテーブル内に格納されたアイテムオブジェクトへのナビゲーションを、ItemIDおよびTypeIDをエクスポーズすることによって可能にする。ItemIDは一般に、データストア内のアイテムを一意に識別するようになる。TypeIDを、ここでは説明しないメタデータを使用して、タイプ名、およびアイテムを含むビューにマップすることができる。アイテムをそのItemIDによって発見することは、グローバルアイテムテーブルのコンテキストおよびそうでない場合の両方で、共通のオペレーションである場合があるので、GetItem()ファンクションが、アイテムのItemIDが与えられたアイテムオブジェクトを検索するために提供される。
好都合なアクセスのため、および、可能な範囲内で実装詳細を隠すために、アイテムのすべてのクエリを、上述のアイテムテーブル上に構築されたビューに対するようにすることができる。具体的には、ビューを各アイテムタイプについて、適切なタイプファミリテーブルに対して作成することができる。これらのタイプビューは、サブタイプを含む、関連付けられたタイプのすべてのアイテムを選択することができる。便宜上、UDTオブジェクトに加えて、ビューは、継承されたフィールドを含む、そのタイプのトップレベルフィールドのすべてのための列をエクスポーズすることができる。
3.エクステンションのマッピング
エクステンションはアイテムに大変類似しており、同じ要件のいくつかを有する。継承をサポートするもう1つのルートタイプとして、エクステンションは、ストレージにおける同じ考慮事項およびトレードオフの多数を受ける。このため、類似のタイプのファミリマッピングは、単一テーブル手法ではなくエクステンションに適用される。言うまでもなく、他の実施形態では、単一テーブル手法を使用することができる。この実施形態では、エクステンションは、ItemIDによって厳密に1つのアイテムに関連付けられ、アイテムのコンテキストにおいて一意であるExtensionIDを含む。アイテムと同様に、その識別が与えられたエクステンションを検索するためにファンクションが提供される場合があり、この識別はItemIDおよびExtensionIDのペアからなる。アイテムタイプビューに類似して、ビューが各エクステンションタイプについて作成される。
4.ネストされた要素のマッピング
ネストされた要素は、アイテム、エクステンション、リレーションシップ、または他のネストされた要素に埋め込んで、深くネストされた構造を形成することができるタイプである。アイテムおよびエクステンションのように、ネストされた要素はUDTとして実装されるが、アイテムおよびエクステンション内に格納される。したがって、ネストされた要素はそれらのアイテムおよびエクステンションコンテナのストレージマッピングを越えたストレージマッピングは有していない。すなわち、システム内にNestedElementタイプのインスタンスを直接格納するテーブルはなく、ネストされた要素に特に専用のビューはない。
5.オブジェクト識別
データモデル内の各エンティティ、すなわち、各アイテム、エクステンションおよびリレーションシップは、一意のキー値を有する。アイテムはそのItemIDによって一意に識別される。エクステンションは、(ItemID、ExtensionId)の複合キーによって一意に識別される。リレーションシップは、複合キー(ItemID、RelationshipId)によって識別される。ItemId、ExtensionIdおよびRelationshipIdは、GUID値である。
6.SQLオブジェクトの名前付け
データストア内で作成されたすべてのオブジェクトを、ストレージプラットフォームスキーマ名から派生されたSQLスキーマ名において格納することができる。例えば、ストレージプラットフォームのベーススキーマ(しばしば「ベース」と呼ばれる)は、「[System.Storage].Item」など、「[System.Storage]」SQLスキーマ内でタイプを作成することができる。生成された名前に、修飾子によってプレフィックスが付けられて、名前付けの競合が排除される。適切な場合には、感嘆符文字(!)が名前の各論理部のためのセパレータとして使用される。以下の表は、データストア内のオブジェクトについて使用される名前付け規則を概説する。各スキーマ要素(アイテム、エクステンション、リレーションシップおよびビュー)は、データストア内のインスタンスにアクセスするために使用された、修飾された名前付け規則と共にリストされる。
Figure 0004738908
7.列の名前付け
いかなるオブジェクトモデルをストアにマップする場合にも、名前付けの衝突の可能性は、アプリケーションオブジェクトと共に格納された追加の情報により発生する。名前付けの衝突を回避するために、すべてのタイプ固有でない列(タイプ宣言内で名前付きプロパティに直接マップしない列)には、下線(_)文字でプレフィックスが付けられる。この実施形態では、下線(_)文字は、いかなる識別子プロパティの開始文字としても許可されない。さらに、CLRとデータストアの間の名前付けを単一化するために、ストレージプラットフォームタイプまたはスキーマ要素のすべてのプロパティ(リレーションシップなど)は、最初の文字を大文字で有するべきである。
8.検索ビュー
ビューは、格納されたコンテンツを検索するためにストレージプラットフォームによって提供される。SQLビューは、各アイテムおよびエクステンションタイプについて提供される。さらに、ビューは、リレーションシップおよびビュー(データモデルによって定義される)をサポートするために提供される。ストレージプラットフォーム内のすべてのSQLビューおよび下にあるテーブルは、読み取り専用である。データを、ストレージプラットフォームAPIのUpdate()メソッドを使用して格納または変更することができ、これを以下でより十分に説明する。
ストレージプラットフォームスキーマ内で明示的に定義された各ビュー(スキーマデザイナによって定義され、ストレージプラットフォームによって自動的に生成されない)には、名前付きSQLビュー[<スキーマ名>].[View!<ビュー名>]によってアクセス可能である。例えば、スキーマ「AcmePublisher.Books」内の「BookSales」という名前のビューは、名前「[AcmePublisher.Books].[View!BookSales]」を使用してアクセス可能となる。ビューの出力フォーマットはビュー毎にカスタムである(ビューを定義するパーティによって提供された任意のクエリによって定義される)ので、列はスキーマビュー定義に基づいて直接マップされる。
ストレージプラットフォームデータストア内のすべてのSQL検索ビューは、列について以下の順序付け規則を使用する。
・ItemId、ElementId、RelationshipIdなど、ビュー結果の論理「キー」列。
・TypeIdなど、結果のタイプについてのメタデータ情報。
・CreateVersion、UpdateVersionなど、変更追跡列。
・タイプ固有の列(宣言されたタイプのプロパティ)。
・タイプ固有のビュー(ファミリビュー)もまた、オブジェクトを戻すオブジェクト列を含む。
各タイプファミリのメンバは、一連のアイテムビューを使用して検索可能であり、データストア内にアイテムタイプにつき1つのビューがある。図28は、アイテム検索ビューの概念を例示する図である。
アイテム
各アイテム検索ビューは、固有のタイプまたはそのサブタイプのアイテムの各インスタンスのための行を含む。例えば、Documentのためのビューは、Document、LegalDocumentおよびReviewDocumentのインスタンスを戻すことができる。この例を考えると、アイテムビューを図29のように概念化することができる。
(1)マスタアイテム検索ビュー
ストレージプラットフォームデータストアの各インスタンスは、マスタアイテムビューと呼ばれる特殊アイテムビューを定義する。このビューは、データストア内の各アイテムについての概要情報を提供する。このビューは、アイテムタイププロパティにつき1つの列、アイテムのタイプを記述した列、ならびに、変更追跡および同期情報を提供するために使用されるいくつかの列を提供する。マスタアイテムビューはデータストア内で、名前「[System.Storage].[Master!Item]」を使用して識別される。
Figure 0004738908
(2)型付けアイテム検索ビュー
各アイテムタイプはまた検索ビューをも有する。ルートのアイテムビューに類似するが、このビューはまた「_Item」列を介してアイテムオブジェクトへのアクセスをも提供する。各型付けアイテム検索ビューはデータストア内で、名前[schemaName].[itemTypeName]を使用して識別される。例えば、[AcmeCorp.Doc].[OfficeDoc]である。
Figure 0004738908
9.アイテムエクステンション
WinFS Storeにおけるすべてのアイテムエクステンションはまた、検索ビューを使用してもアクセス可能である。
(1)マスタエクステンション検索ビュー
データストアの各インスタンスは、マスタエクステンションビューと呼ばれる特殊エクステンションビューを定義する。このビューは、データストア内の各エクステンションについての概要情報を提供する。このビューは、エクステンションプロパティにつき1つの列、エクステンションのタイプを記述する列、ならびに、変更追跡および同期情報を提供するために使用されるいくつかの列を有する。マスタエクステンションビューはデータストア内で、名前「[System.Storage].[Master!Extension]」を使用して識別される。
Figure 0004738908
10.
(1)型付けエクステンション検索ビュー
各エクステンションタイプはまた検索ビューをも有する。マスタエクステンションビューに類似するが、このビューはまた_Extension列を介してアイテムオブジェクトへのアクセスをも提供する。各型付けエクステンション検索ビューはデータストア内で、名前[schemaName].[Extension!extensionTypeName]を使用して識別される。例えば、[AcmeCorp.Doc].[Extension!OfficeDocExt]である。
Figure 0004738908
ネストされた要素
すべてのネストされた要素は、アイテム、エクステンションまたはリレーションシップインスタンス内に格納される。したがって、これらの要素は、適切なアイテム、エクステンションまたはリレーションシップ検索ビューをクエリすることによってアクセスされる。
リレーションシップ
上述のように、リレーションシップは、ストレージプラットフォームデータストア内の複数のアイテムの間でリンクする基本単位を形成する。
(2)マスタリレーションシップ検索ビュー
各データストアは、マスタリレーションシップビューを提供する。このビューは、データストア内のすべてのリレーションシップインスタンスについての情報を提供する。マスタリレーションシップビューはデータストア内で、名前「[System.Storage].[Master!Relationship]」を使用して識別される。
Figure 0004738908
(3)リレーションシップインスタンス検索ビュー
各宣言されたリレーションシップはまた、特定のリレーションシップのすべてのインスタンスを戻す検索ビューをも有する。マスタリレーションシップビューに類似するが、このビューはまた、リレーションシップデータの各プロパティのための名前付き列をも提供する。各リレーションシップインスタンス検索ビューはデータストア内で、名前[schemaName].[Relationship!relationshipName]を使用して識別される。例えば、[AcmeCorp.Doc].[Relationship!DocumentAuthor]である。
Figure 0004738908
11.アップデート
ストレージプラットフォームデータストア内のすべてのビューは、読み取り専用である。データモデル要素(アイテム、エクステンションまたはリレーションシップ)の新しいインスタンスを作成するため、または、既存のインスタンスをアップデートするために、ストレージプラットフォームAPIのProcessOperationまたはProcessUpdategramメソッドが使用されなければならない。ProcessOperationメソッドは、データストアによって定義された単一のストアドプロシージャであり、実行されるアクションを詳述する「オペレーション」を消費する。ProcessUpdategramメソッドは、「updategram」として知られる、実行されるアクションのセットを集合的に詳述するオペレーションの順序付きセットを取る、ストアドプロシージャである。
オペレーションのフォーマットは拡張可能であり、スキーマ要素を介して様々なオペレーションを提供する。いくつかの共通オペレーションには以下が含まれる。
1.アイテムオペレーション
a.CreateItem(新しいアイテムを、埋め込みまたは保留リレーションシップのコンテキストで作成する)
b.UpdateItem(既存のアイテムをアップデートする)
2.リレーションシップオペレーション
a.CreateRelationship(参照または保留リレーションシップのインスタンスを作成する)
b.UpdateRelationship(リレーションシップインスタンスをアップデートする)
c.DeleteRelationship(リレーションシップインスタンスを除去する)
3.エクステンションオペレーション
a.CreateExtension(エクステンションを既存のアイテムに追加する)
b.UpdateExtension(既存のエクステンションをアップデートする)
c.DeleteExtension(エクステンションを削除する)
12.変更追跡および廃棄(Tombstones)
変更追跡および廃棄サービスはデータストアによって提供され、これを以下でより十分に論じる。このセクションは、データストア内でエクスポーズされた変更追跡情報の概要を提供する。
変更追跡
データストアによって提供された各検索ビューは、変更追跡情報を提供するために使用された列を含み、これらの列はすべてのアイテム、エクステンションおよびリレーションシップビューにわたって共通である。ストレージプラットフォームのスキーマビューは、スキーマデザイナによって明示的に定義され、変更追跡情報を自動的に提供せず、このような情報は、それにおいてビュー自体が構築される検索ビューを通じて間接的に提供される。
データストア内の各要素について、変更追跡情報は2つの場所、すなわち、「マスタ」要素ビューおよび「型付け」要素ビューから入手可能である。例えば、AcmeCorp.Document.Documentアイテムタイプについての変更追跡情報は、マスタアイテムビュー「[System.Storage].[Master!Item]」および型付けアイテム検索ビュー[AcmeCorp.Document].[Document]から入手可能である。
(1)「マスタ」検索ビューにおける変更追跡
マスタ検索ビューにおける変更追跡情報は、要素の作成およびアップデートバージョンについての情報、どの同期パートナーが要素を作成したか、どの同期パートナーが最後に要素をアップデートしたか、ならびに、作成およびアップデートのための各パートナーからのバージョン番号についての情報を提供する。同期関係におけるパートナー(後述)は、パートナーキーによって識別される。タイプ[System.Storage.Store].ChangeTrackingInfoの_ChangeTrackingInfoという名前の単一のUDTオブジェクトは、すべてのこの情報を含む。タイプはSystem.Storageスキーマ内で定義される。_ChangeTrackingInfoは、アイテム、エクステンションおよびリレーションシップのためのすべてのグローバル検索ビューで使用可能である。ChangeTrackingInfoのタイプ定義は以下の通りである。
Figure 0004738908
これらのプロパティは以下の情報を含む。
Figure 0004738908
(2)「型付け」検索ビューにおける変更追跡
グローバル検索ビューと同じ情報を提供することに加えて、各型付け検索ビューは、同期トポロジにおける各要素の同期状態を記録する追加の情報を提供する。
Figure 0004738908
廃棄
データストアは、アイテム、エクステンションおよびリレーションシップのための廃棄情報を提供する。廃棄ビューは、ライブおよび廃棄されたエンティティ(アイテム、エクステンションおよびリレーションシップ)についての情報を1つの場所で提供する。アイテムおよびエクステンション廃棄ビューは、対応するオブジェクトへのアクセスを提供しないが、リレーションシップ廃棄ビューは、リレーションシップオブジェクトへのアクセスを提供する(廃棄されたリレーションシップの場合、リレーションシップオブジェクトはNULLである)。
(1)アイテム廃棄
アイテム廃棄はシステムから、ビュー[System.Storage].[Tombstone!Item]を介して検索される。
Figure 0004738908
(2)エクステンション廃棄
エクステンション廃棄はシステムから、ビュー[System.Storage].[Tombstone!Extension]を介して検索される。エクステンション変更追跡情報は、ExtensionIdプロパティを追加して、アイテムについて提供された情報に類似している。
Figure 0004738908
(3)リレーションシップ廃棄
リレーションシップ廃棄はシステムから、ビュー[System.Storage].[Tombstone!Relationship]を介して検索される。リレーションシップ廃棄情報は、エクステンションについて提供された情報に類似している。しかし、リレーションシップインスタンスのターゲットItemRefについての追加の情報が提供される。加えて、リレーションシップオブジェクトもまた選択される。
Figure 0004738908
(4)廃棄クリーンアップ
廃棄情報の限りない増大を防止するため、データストアは廃棄クリーンアップタスクを提供する。このタスクは、廃棄情報を廃棄することができる場合を決定する。このタスクはローカル作成/アップデートバージョンにおける境界を計算し、次いで、すべてのより以前の廃棄バージョンを廃棄することによって廃棄情報を切り捨てる。
13.ヘルパーAPIおよびファンクション
ベースマッピングはまたいくつかのヘルパーファンクションをも提供する、これらのファンクションは、データモデル上の共通オペレーションを助けるために供給される。
ファンクション[System.Storage].GetItem
//ItemIdが与えられたアイテムオブジェクトを戻す
//
Item GetItem (ItemId ItemId)
ファンクション[System.Storage].GetExtension
//ItemIdおよびExtensionIdが与えられたエクステンションオブジェクトを戻す
//
Extension GetExtension (ItemId ItemId, ExtensionId ExtensionId)
ファンクション[System.Storage].GetRelationship
//ItemIdおよびRelationshipIdが与えられたリレーションシップオブジェクトを戻す
//
Relationship GetRelationship (ItemId ItemId, RelationshipId RelationshipId)
14.メタデータ
ストア内に表現された2つのタイプのメタデータ、すなわち、インスタンスメタデータ(アイテムのタイプなど)およびタイプメタデータがある。
スキーマメタデータ
スキーマメタデータはデータストア内で、メタスキーマからのアイテムタイプのインスタンスとして格納される。
インスタンスメタデータ
インスタンスメタデータは、アプリケーションによってアイテムのタイプについてクエリするために使用され、アイテムに関連付けられたエクステンションを発見する。アイテムのためのItemIdが与えられると、アプリケーションはグローバルアイテムビューをクエリして、アイテムのタイプを戻し、この値を使用してMeta.Typeビューをクエリして、アイテムの宣言されたタイプについての情報を戻す。例えば、以下の通りである。
//所与のアイテムインスタンスについてのメタデータアイテムオブジェクトを戻す
//
SELECT m._Item AS metadataInfoObj
FROM [System.Storage].[ITEM] i INNER JOIN [Meta].[Type] m ON i._TypeId = m.ItemId
WHERE i.ItemId = @ItemId
E.セキュリティ
一般に、すべての保護可能なオブジェクトはそれらのアクセス権を、図26に示すアクセスマスクフォーマットを使用して構成する。このフォーマットでは、下位の16ビットはオブジェクト固有のアクセス権のためであり、次の7ビットは、オブジェクトの大部分のタイプに適用される標準アクセス権のためであり、高位の4ビットは、各オブジェクトが標準およびオブジェクト固有の権利のセットにマップすることができる、汎用アクセス権を規定するために使用される。ACCESS_SYSTEM_SECURITYビットは、オブジェクトのSACLにアクセスするための権利に対応する。
図26のアクセスマスク構造では、アイテム固有の権利は、オブジェクト固有の権利のセクション(下位16ビット)に配置される。この実施形態では、ストレージプラットフォームはセキュリティを管理するために2つのセットのAPI、すなわち、Win32およびストレージプラットフォームAPIをエクスポーズするので、ファイルシステムオブジェクト固有の権利は、ストレージプラットフォームオブジェクト固有の権利の設計を促すために考慮されなければならない。
本発明のストレージプラットフォームのためのセキュリティモデルは、本明細書で以前に参照により組み込まれた関連出願で十分に説明される。これについて、図27(パートa、bおよびc)は、セキュリティモデルの一実施形態により、新しい等しく保護されたセキュリティ領域が既存のセキュリティ領域から切り開かれることを示す図である。
F.通知および変更追跡
本発明のもう1つの態様によれば、ストレージプラットフォームは、アプリケーションがデータ変更を追跡できるようにする通知機能を提供する。この機能は主として、揮発性状態を維持し、あるいはデータ変更イベントにおいてビジネスロジックを実行するアプリケーションのために意図される。アプリケーションは、アイテム、アイテムエクステンションおよびアイテムリレーションシップについての通知のために登録する。通知は、データ変更がコミットされた後、非同期的に配信される。アプリケーションは通知をアイテム、エクステンションおよびリレーションシップタイプ、ならびにオペレーションのタイプによってフィルタリングすることができる。
一実施形態によれば、ストレージプラットフォームAPI322は通知用の2種類のインターフェースを提供する。第1に、アプリケーションは、アイテム、アイテムエクステンションおよびアイテムリレーションシップへの変更によってトリガされた単純なデータ変更イベントのために登録する。第2に、アプリケーションは、アイテム、アイテムエクステンション、および、アイテムの間のリレーションシップのセットを監視するための「ウォッチャー」オブジェクトを作成する。ウォッチャーオブジェクトの状態を保存し、システム障害の後、または、システムが延長された期間にわたってオフラインになっていた後に再作成することができる。単一の通知は複数のアップデートを反映することができる。
この機能性についての追加の詳細は、本明細書で以前に参照により組み込まれた関連出願で見ることができる。
G.従来のファイルシステムの相互運用性
上述のように、本発明のストレージプラットフォームは、少なくともいくつかの実施形態では、コンピュータシステムのハードウェア/ソフトウェアインターフェースシステムの一体部分として実施されるように意図される。例えば、本発明のストレージプラットフォームを、Microsoft Windows(登録商標)ファミリのオペレーティングシステムなど、オペレーティングシステムの一体部分として実施することができる。その能力において、ストレージプラットフォームAPIは、オペレーティングシステムAPIの一部となり、これを通じてアプリケーションプログラムはオペレーティングシステムと対話する。このように、ストレージプラットフォームは、それを通じてアプリケーションプログラムが情報をオペレーティングシステム上に格納する手段となり、ストレージプラットフォームのアイテムベースのデータモデルはしたがって、このようなオペレーティングシステム従来のファイルシステムに取って代わる。例えば、Microsoft Windows(登録商標)ファミリのオペレーティングシステムで実施される場合、ストレージプラットフォームは、そのオペレーティングシステムで実装されたNTFSファイルシステムに取って代わる可能性がある。現在、アプリケーションプログラムはNTFSファイルシステムのサービスに、Windows(登録商標)ファミリのオペレーティングシステムによってエクスポーズされたWin32 APIを通じてアクセスする。
しかし、完全にNTFSファイルシステムを本発明のストレージプラットフォームで置き換えるには、既存のWin32ベースのアプリケーションプログラムの記録が必要となること、および、このような記録は望ましくない場合があることを認識すると、本発明のストレージプラットフォームが、NTFSなど既存のファイルシステムとのある相互運用性を提供することが有益となる。本発明の一実施形態では、したがって、ストレージプラットフォームは、Win32プログラミングモデルに依拠するアプリケーションプログラムが、ストレージプラットフォームのデータストアならびに従来のNTFSファイルシステムの両方のコンテンツにアクセスできるようにする。このために、ストレージプラットフォームは、Win32名前付け規則のスーパーセットである名前付け規則を使用して、容易な相互運用性を実施する。さらに、ストレージプラットフォームは、Win32 APIを通じて、ストレージプラットフォームボリューム内に格納されたファイルおよびディレクトリにアクセスすることをサポートする。
この機能性についての追加の詳細は、本明細書で以前に参照により組み込まれた関連出願で見ることができる。
H.ストレージプラットフォームAPI
ストレージプラットフォームはAPIを備え、APIは、アプリケーションプログラムが上述のストレージプラットフォームの特徴および機能にアクセスすること、およびデータストア内に格納されたアイテムにアクセスすることを可能にする。このセクションでは、本発明のストレージプラットフォームのストレージプラットフォームAPIの一実施形態を説明する。この機能性についての詳細は、本明細書で以前に参照により組み込まれた関連出願で見ることができ、この情報のいくつかを便宜上、以下に要約する。
図18を参照すると、包含フォルダは、他のアイテムへの保留リレーションシップを含むアイテムであり、ファイルシステムフォルダの共通概念に相当する物である。各アイテムは少なくとも1つの包含フォルダ内に「包含」される。
図19は、この実施形態によるストレージプラットフォームAPIの基本アーキテクチャを例示する。ストレージプラットフォームAPIは、SQLクライアント1900を使用してローカルデータストア302と通信し、またSQLクライアント1900を使用してリモートデータストア(例えば、データストア340)と通信することもできる。ローカルストア302もまたリモートデータストア340と、DQP(分散クエリプロセッサ)を使用して、あるいは、後述のストレージプラットフォーム同期化サービス(「Sync」)を通じて通信することができる。ストレージプラットフォームAPI322はまた、データストア通知のためのブリッジAPIとしての機能も果たし、アプリケーションの購読を通知エンジン332に渡し、上述にもあるように通知をアプリケーション(例えば、アプリケーション350a、350bまたは350c)にルーティングする。一実施形態では、ストレージプラットフォームAPI322はまた制限された「プロバイダ」アーキテクチャを定義し、Microsoft ExchangeおよびADにおけるデータにアクセスできるようにすることもできる。
図20は、ストレージプラットフォームAPIの様々なコンポーネントを概略的に表現する。ストレージプラットフォームAPIは以下のコンポーネントからなり、すなわち、(1)ストレージプラットフォーム要素およびアイテムタイプを表現するデータクラス2002、(2)オブジェクト永続性を管理し、サポートクラス2006を提供するランタイムフレームワーク2004、および(3)CLRクラスをストレージプラットフォームスキーマから生成するために使用されるツール2008である。
所与のスキーマから生じるクラスの階層は、そのスキーマ内のタイプの階層を直接反映する。一例として、図21Aおよび図21Bに示すようなContactsスキーマ内で定義されたアイテムタイプを考察されたい。
図22は、オペレーション中のランタイムフレームワークを例示する図である。ランタイムフレームワークは以下のように動作する。
1.アプリケーション350a、350bまたは350cは、ストレージプラットフォーム内のアイテムにバインドする。
2.フレームワーク2004は、バインドされたアイテムに対応するItemContextオブジェクト2202を作成し、これをアプリケーションに戻す。
3.アプリケーションはFindをこのItemContext上でサブミットして、アイテムのコレクションを得る。戻されたコレクションは概念的にオブジェクトグラフ2204である(リレーションシップによる)。
4.アプリケーションはデータを変更、削除および挿入する。
5.アプリケーションは、Update()メソッドをコールすることによって、変更を保存する。
図23は、「FindAll」オペレーションの実行を例示する。
図24は、ストレージプラットフォームAPIクラスがストレージプラットフォームスキーマから生成されるプロセスを例示する。
図25は、ファイルAPIがそれに基づくスキーマを例示する。ストレージプラットフォームAPIには、ファイルオブジェクトを処理するためのネームスペースが含まれる。このネームスペースは、System.Storage.Filesと呼ばれる。System.Storage.Files内のクラスのデータメンバは、ストレージプラットフォームストア内に格納された情報を直接反映し、この情報はファイルシステムオブジェクトから「プロモート」されるか、あるいは、Win32 APIを使用してネイティブで作成することができる。System.Storage.Filesネームスペースには2つのクラス、すなわちFileItemおよびDirectoryItemがある。これらのクラスのメンバおよびそのメソッドを、図25のスキーマ図を見ることによって容易に推測することができる。FileItemおよびDirectoryItemは、ストレージプラットフォームAPIから読み取り専用である。これらを修正するためには、Win32 APIまたはSystem.IO内のクラスを使用しなければならない。
APIについては、プログラミングインターフェース(またはより単純には、インターフェース)を、コードの1つまたは複数のセグメントが、コードの1つまたは複数の他のセグメントによって提供された機能性と通信すること、またはその機能性にアクセスすることを可能にするための、いかなるメカニズム、プロセス、プロトコルと見なすこともできる。代替として、プログラミングインターフェースを、他のコンポーネントの1つまたは複数のメカニズム、メソッド、ファンクションコール、モジュールなどに通信的に結合することができるシステムのコンポーネントの、1つまたは複数のメカニズム、メソッド、ファンクションコール、モジュール、オブジェクトなどと見なすことができる。前文の「コードのセグメント」という用語は、適用された専門用語にかかわらず、または、コードセグメントが別々にコンパイルされるかどうかにかかわらず、または、コードセグメントがソースとして提供されるか、中間物として提供されるか、オブジェクトコードとして提供されるかにかかわらず、コードセグメトがランタイムシステムで利用されるか、プロセスで使用されるかにかかわらず、これらが同じマシン上に位置するか、異なるマシン上に位置するか、複数のマシンにわたって分散されるかにかかわらず、または、コードのセグメントによって表現された機能性が全体としてソフトウェアで実装されるか、全体としてハードウェアで実装されるか、ハードウェアおよびソフトウェアの組合せで実装されるかにかかわらず、1つまたは複数の命令またはコードの行を含むように意図され、例えば、コードモジュール、オブジェクト、サブルーチン、ファンクションなどを含む。
概念上、プログラミングインターフェースを一般的に図30Aまたは図30Bのように見なすことができる。図30Aはインターフェースであるインターフェース1を、それを通じて第1および第2のコードセグメントが通信するコンジットとして例示する。図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に例示するように、インターフェースであるインターフェース1によって提供されたファンクションを細分して、インターフェースの通信を複数のインターフェースであるインターフェース1A、インターフェース1B、インターフェース1Cなどに変換し、同じ結果を達成することができる。図31Bに例示するように、インターフェースI1によって提供されたファンクションを、複数のインターフェースI1a、I1b、I1cなどに細分し、同じ結果を達成することができる。同様に、情報を第1のコードセグメントから受信する第2のコードセグメントのインターフェースI2を、複数のインターフェースI2a、I2b、I2cなどにファクタリングすることができる。ファクタリングする場合、第1のコードセグメントと共に含まれたインターフェースの数は、第2のコードセグメントと共に含まれたインターフェースの数と一致する必要はない。図31Aおよび31Bの場合のいずれでも、インターフェースであるインターフェース1およびI1の機能的な精神は、それぞれ図30Aおよび30Bと同じままで残る。インターフェースのファクタリングはまた、連想、通信および他の数学的プロパティにも従うことができ、ファクタリングを認識することが困難な場合があるようにすることもできる。例えば、オペレーションの順序付けは重要でない場合があり、したがって、あるインターフェースによって実行されるファンクションを、そのインターフェースに達するより前に、コードまたはインターフェースの別の部分によってうまく実行することができ、あるいは、システムの別のコンポーネントによって実行することができる。また、同じ結果を達成する、異なるファンクションコールを行う様々な方法があることは、当業者には理解されよう。
再定義:いくつかの場合、なお所期の結果を実施しながら、プログラミングインターフェースのあるアスペクト(例えば、パラメータ)を無視、追加または再定義することが可能である場合がある。これを図32Aおよび32Bに例示する。例えば、図30Aのインターフェースであるインターフェース1がファンクションコールSquare(入力、精度、出力)を含むと仮定し、これは、3つのパラメータである入力、精度および出力を含むコールであり、第1のコードセグメントから第2のコードセグメントに発行される。図32Aのように、中央のパラメータである精度が所与のシナリオにおいて関係がない場合、このパラメータをちょうどよく無視することができ、あるいは(この状況では)無意味なパラメータで置き換えることもできる。関係のない追加のパラメータを追加することもできる。いずれの場合にも、入力が第2のコードセグメントによって二乗された後で出力が戻される限り、二乗の機能性を達成することができる。精度は、あるダウンストリームまたはコンピューティングシステムの他の部分にとって有意味パラメータとなる場合が十分にあるが、精度が二乗を計算する狭い目的には必要でないと認識された後、置換または無視される場合がある。例えば、有効な精度の値を渡すのではなく、誕生日などの無意味な値を、結果に悪影響を及ぼすことなく渡すことができる。同様に、図32Bに示すように、インターフェースI1はインターフェースI1’によって置き換えられ、インターフェースに対してパラメータを無視または追加するように再定義される。インターフェースI2は同様にインターフェースI2’として再定義され、不要なパラメータ、または他のどこかで処理される可能性のあるパラメータを無視するように再定義される場合がある。ここでのポイントは、いくつかの場合にプログラミングインターフェースには、パラメータなど、ある目的のために必要とされないアスペクトが含まれる場合があり、そのためこれらのアスペクトは無視または再定義されるか、あるいは他のどこかで他の目的のために処理される場合があることである。
インラインコーディング:2つの別々のコードモジュールの機能性のいくつかまたはすべてをマージして、それらの間の「インターフェース」が形態を変更するようにすることが実行可能である場合もある。例えば、図30Aおよび30Bの機能性を、図33Aおよび図33Bの機能性にそれぞれ変換することができる。図33Aで、図30Aの以前の第1および第2のコードセグメントは、それらの両方を含む1つのモジュールにマージされる。この場合、これらのコードセグメントはなお互いに通信中であることが可能であるが、インターフェースを、単一のモジュールにより適切である形態に適合させることができる。したがって、例えば、形式的なCallおよびReturnステートメントはもはや必要でない可能性があるが、インターフェースであるインターフェース1による類似の処理または応答はなお実施されることが可能である。同様に、図33Bのように、図30BからのインターフェースI2の一部(またはすべて)をインターフェースI1にインラインで書き込んで、インターフェースI1”を形成することができる。例示のように、インターフェースI2はI2aおよびI2bに分割され、インターフェース部I2aはインラインでインターフェースI1と共にコーディングされて、インターフェースI1”が形成されている。具体的な例では、図30BからのインターフェースI1がファンクションコールsquare(入力、出力)を実行し、これがインターフェースI2によって受信され、インターフェースI2は、入力により渡された値を第2のコードセグメントによって処理(してこれを二乗)した後、二乗された結果を出力により戻すことを考えてみる。このような場合、第2のコードセグメントによって実行された処理(入力を二乗すること)を、第1のコードセグメントによって、インターフェースへのコールなしに実行することができる。
分離(Divorce):あるコードセグメントから別ンコードセグメントの通信を、この通信を複数の離散的通信に分割することによって間接的に実施することができる。これを図34Aおよび34Bに概略的に示す。図34Aのように、1つまたは複数のミドルウェア(分離インターフェース、機能性および/またはインターフェースファンクションを元のインターフェースから分離させるため)が提供されて、第1のインターフェースであるインターフェース1における通信が変換されて、これらが異なるインターフェース、この場合はインターフェースであるインターフェース2A、インターフェース2Bおよびインターフェース2Cに適合される。これは例えば、インターフェース1プロトコルに従って、例えばオペレーティングシステムと通信するように設計されたアプリケーションのインストールされたベースがあるところで行われる場合があるが、次いでオペレーティングシステムは、異なるインターフェース、この場合はインターフェースであるインターフェース2A、インターフェース2Bおよびインターフェース2Cを使用するように変更される。ポイントは、第2のコードセグメントによって使用された元のインターフェースが変更されて、もはや、第1のコードセグメントによって使用されたインターフェースと互換性がないようになり、そのため、古いインターフェースおよび新インターフェースが互換性を有するようにするために中間物が使用されることである。同様に、図34Bのように、第3のコードセグメントを分離インターフェースDI1により導入して、インターフェースI1からの通信を受信することができ、分離インターフェースDI2により、インターフェース機能性を、例えば、DI2と共に動作するように再設計されたインターフェースI2aおよびI2bへ送信することができるが、同じ機能的結果を提供することができる。同様に、DI1およびDI2は共に図30BのインターフェースI1およびI2の機能性を新しいオペレーティングシステムに変換するように動作することができるが、同じまたは類似の機能的結果を提供することができる。
書き換え:さらにもう1つの可能な変形形態は、コードを動的に書き換えて、インターフェース機能性を、他の物だが同じ全体的な結果を達成する物で置き換えることである。例えば、中間言語(例えば、Microsoft IL、Java(登録商標)ByteCodeなど)で表現されたコードセグメントが、実行環境(.Netフレームワーク、Java(登録商標)ランタイム環境、または他の類似のランタイムタイプの環境によって提供された実行環境など)内で、ジャストインタイム(JIT)コンパイラまたはインタプリタに提供されるシステムがある場合がある。JITコンパイラを、第1のコードセグメントから第2のコードセグメントへの通信を動的に変換するように、すなわち、これらの通信を、第2のコードセグメント(元の、または異なる第2のコードセグメントのいずれか)によって必要とされる可能性のある異なるインターフェースに適合させるように、書くことができる。これを図35Aおよび35Bに示す。図35Aを見るとわかるように、この手法は、上述の分離シナリオに類似している。これは例えば、アプリケーションのインストールされたベースがインターフェース1プロトコルに従ってオペレーティングシステムと通信するように設計されるところで行われる場合があるが、次いでオペレーティングシステムは、異なるインターフェースを使用するように変更される。JITコンパイラを使用して、インストールベースのアプリケーションからのオンザフライの通信を、オペレーティングシステムの新しいインターフェースに適合させることができる。図35Bに示すように、インターフェースを動的に書き換えるこの手法を、インターフェースを動的にファクタリングするように、またはそうでない場合は変更するように適用させることもできる。
代替実施形態を介してあるインターフェースと同じまたは類似の結果を達成するための上述のシナリオをまた様々な方法で、直列および/または並列に、または他の介入コードと共に組み合わせることもできることに留意されたい。このように、上記で提示された代替実施形態は相互排他的ではなく、これらの代替実施形態を混合、マッチおよび組み合わせて、図30Aおよび30Bに提示された汎用シナリオと同じかあるいはそれに相当するシナリオを作成することができる。また、大部分のプログラミング構造と同様に、本明細書で説明されない可能性のあるインターフェースの同じまたは類似の機能性を達成する他の類似の方法があるが、それにもかかわらず、これらの他の類似の方法は、本発明の精神および範囲によって表現されることにも留意されたい。すなわち、インターフェースの価値の基礎となる物は、少なくとも部分的には、インターフェースによって表された機能性、および、インターフェースによって可能にされた有利な結果であることに留意されたい。
III.同期API
同期へのいくつかの手法が、アイテムベースのハードウェア/ソフトウェアインターフェースシステムにおいて可能である。
A.同期化の概観
本発明のいくつかの実施形態では、また図3については、ストレージプラットフォームは同期化サービス330を提供し、このサービスは、(i)ストレージプラットフォームの複数のインスタンスが(それぞれそれ自体のデータストア302と共に)柔軟なセットのルールに従ってそれらのコンテンツの部分を同期化することを可能にし、(ii)サードパーティが本発明のストレージプラットフォームのデータストアを、メーカ独自のプロトコルを実装する他のデータソースと同期化させるためのインフラストラクチャを提供する。
ストレージプラットフォームとストレージプラットフォームの同期化は、「レプリカ」に参加するグループの間で発生する。例えば、図3を参照すると、ストレージプラットフォーム300のデータストア302と別のリモートデータストア338の間の同期化を、場合によっては異なるコンピュータシステム上で実行するストレージプラットフォームの別のインスタンスのコントロール下で提供することが望ましい場合がある。このグループの全体のメンバシップは必ずしも、いかなる所与の時間にいかなる所与のレプリカにも知られるとは限らない。
異なるレプリカは独立して(すなわち、同時に)変更を行うことができる。同期化のプロセスは、他のレプリカによって行われた変更をあらゆるレプリカに認識させることとして定義される。この同期化機能は本質的にマルチマスタ(すなわち、ピアツーピア)である。
本発明の同期化機能により、レプリカは以下を行うことができる。
・どの変更を別のレプリカが認識するかを決定すること。
・このレプリカが認識しない変更についての情報を要求すること。
・他のレプリカが認識しない変更についての情報を搬送すること。
・2つの変更が互いに競合する場合を決定すること。
・変更をローカルで適用すること。
・競合解決を他のレプリカに搬送して収束を保証すること。
・競合を、競合解決のための規定されたポリシーに基づいて解決すること。
1.ストレージプラットフォームとストレージプラットフォームの同期化
本発明のストレージプラットフォームの同期化サービス330の主な応用例は、ストレージプラットフォームの複数のインスタンスを(それぞれそれ自体のデータストアと共に)同期化することである。同期化サービスは、ストレージプラットフォームスキーマ(データベースエンジン314の下にあるテーブルではない)のレベルで動作する。したがって、例えば、「Scopes」は、後述のように同期化を定義するために使用される。
同期化サービスは「純変化」(net changes)の原則に基づいて動作する。個々のオペレーションを記録および送信すること(トランザクショナルレプリケーションによるなど)ではなく、同期化サービスはこれらのオペレーションの最終結果を送信し、したがってしばしば、複数のオペレーションの結果を単一の結果の変更に統合する。
同期化サービスは一般に、トランザクション境界を尊重しない。すなわち、2つの変更がストレージプラットフォームデータストアに対して単一のトランザクションにおいて行われる場合、これらの変更がすべての他のレプリカにアトミックに適用される保証はなく、一方は現れるが他方はない場合がある。この原理の例外は、2つの変更が同じアイテムに対して同じトランザクションにおいて行われる場合、これらの変更は他のレプリカにアトミックに送信および適用されるように保証されることである。このように、アイテムは同期化サービスの一貫性単位である。
同期化(Sync)コントロールアプリケーション
いかなるアプリケーションも同期化サービスに接続し、syncオペレーションを開始することができる。このようなアプリケーションは、同期化を実行するために必要とされたパラメータのすべてを提供する(以下のsyncプロファイルを参照)。このようなアプリケーションを本明細書でSyncコントロールアプリケーション(SCA)と称する。
2つのストレージプラットフォームインスタンスを同期化する場合、syncは一方の側でSCAによって開始される。そのSCAはローカル同期化サービスに通知して、リモートパートナーと同期化する。他方の側では、同期化サービスは、同期化サービスによって発信側マシンから送信されたメッセージによってアウェイクされる。これは、宛先マシン上に存在する永続的構成情報(以下のマッピングを参照)に基づいて応答する。同期化サービスをスケジュール通りに、またはイベントに応答して実行させることができる。これらの場合、スケジュールを実施する同期化サービスはSCAとなる。
同期化を可能にするため、2つのステップを取る必要がある。第1に、スキーマデザイナはストレージプラットフォームスキーマに、適切なsyncセマンティクスにより注釈を付けなければならない(後述のように変更単位を指定する)。第2に、同期化は、同期化に参加することになっているストレージプラットフォームのインスタンスを有するマシンのすべてにおいて適切に構成されなければならない(後述の通り)。
スキーマのアノテーション
同期化サービスの基本的概念は、変更単位の概念である。変更単位は、ストレージプラットフォームによって個別に追跡されるスキーマの最小部分である。あらゆる変更単位について、同期化サービスは、変更単位が前回のsync以来変化したか、変化しなかったかを判定することができる場合がある。
変更単位をスキーマにおいて指定することは、いくつかの目的にかなう。最初に、同期化サービスがオンザワイヤでどれだけチャッティ(chatty)であるかを決定する。変更が変更単位の内側で行われる場合、変更単位の全体が他のレプリカに送信され、これは、同期化サービスが、変更単位のどの部分が変更されたかを知らないからである。第2に、競合検出の細分性を決定する。2つの同時変更(これらの用語を詳細に後続のセクションで定義する)が同じ変更単位に行われる場合、同期化サービスは競合を引き起こし、他方では、同時変更が異なる変更単位に行われる場合、競合は引き起こされず、これらの変更は自動的にマージされる。第3に、システムによって保持されたメタデータの量に強く影響を与える。同期化サービスメタデータの多くは変更単位毎に保持され、したがって、変更単位をより小さくすることで、syncのオーバーヘッドが増す。
変更単位の定義には、正しいトレードオフを発見することが必要である。そのため、同期化サービスは、スキーマデザイナがプロセスに参加することを可能にする。
一実施形態では、同期化サービスは、要素より大きい変更単位をサポートしない。しかし、同期化サービスは、スキーマデザイナが要素より小さい変更単位を規定する、すなわち、1つの要素の複数の属性を別の変更単位にグループ化するための能力をサポートする。その実施形態では、これは以下の構文を使用して実施される。
Figure 0004738908
Sync構成
それらのデータのある部分を同期して保持することを望むストレージプラットフォームパートナーのグループを、syncコミュニティと称する。コミュニティのメンバは同期した状態であることを望むが、これらのメンバは必ずしもデータをまったく同じ方法で表現するとは限らず、すなわち、syncパートナーは、それらが同期中であるデータを変換する場合がある。
ピアツーピアのシナリオでは、ピアがそれらのパートナーのすべてのための変換マッピングを維持することは、非現実的である。その代わりに、同期化サービスは「コミュニティフォルダ」を定義する手法を取る。コミュニティフォルダは、それと共にすべてのコミュニティメンバが同期中である仮想「共有フォルダ」を表す抽象化である。
この考えは一例によって最良に例示される。Joeが自分のいくつかのコンピュータのMy Documentsフォルダを同期して保持することを望む場合、Joeは、たとえばJoesDocumentsと呼ばれるコミュニティフォルダを定義する。次いで、あらゆるコンピュータ上で、Joeは、仮想JoesDocumentsフォルダとローカルのMy Documentsフォルダの間のマッピングを構成する。この点から先は、Joeのコンピュータが互いに同期化し、それらのローカルアイテムではなくJoesDocuments内のドキュメントに関して通信する。このように、すべてのJoeのコンピュータは、他のコンピュータが何者であるかを知る必要なしに互いを理解し、コミュニティフォルダはsyncコミュニティの共通語となる。
同期化サービスの構成は3つのステップからなり、すなわち(1)ローカルフォルダとコミュニティフォルダの間のマッピングを定義すること、(2)何が同期化されるか(例えば、何者と同期化するか、および、どのサブセットが送信され、どれが受信されるべきであるか)を決定するsyncプロファイルを定義すること、および(3)どの異なるsyncプロファイルが実行するべきであるかについてのスケジュールを定義すること、またはそれらを手動で実行することである。
(1)コミュニティフォルダ−マッピング
コミュニティフォルダマッピングは、XML構成ファイルとして個々のマシン上に格納される。各マッピングは以下のスキーマを有する。
/mappings/communityFolder
この要素は、このマッピングが対象とするコミュニティフォルダを名前付けする。名前はフォルダの構文規則に従う。
/mappings/localFolder
この要素は、マッピングが変換される先のローカルフォルダを名前付けする。名前はフォルダの構文規則に従う。フォルダは、マッピングが有効となるためにすでに存在していなければならない。このフォルダ内のアイテムは、このマッピング毎の同期化について考慮される。
/mappings/transformations
この要素は、アイテムをコミュニティフォルダからローカルフォルダに、およびその逆に変換する方法を定義する。不在または空である場合、変換は実行されない。具体的には、これはIDがマップされないことを意味する。この構成は主として、フォルダのキャッシュを作成するために有用である。
/mappings/transformations/mapIDs
この要素は、コミュニティIDを再利用するのではなく、新たに生成されたローカルIDが、コミュニティフォルダからマップされたアイテムのすべてに割り当てられることを要求する。Syncランタイムは、アイテムを前後に変換するためにIDマッピングを維持するようになる。
/mappings/transformations/localRoot
この要素は、コミュニティフォルダ内のすべてのルートアイテムが、特定されたルートの子にされることを要求する。
/mappings/runAs
この要素は、誰の権限の下でこのマッピングに対する要求が処理されるかをコントロールする。不在の場合、senderが仮定される。
/mappings/runAs/sender
この要素の存在は、このマッピングへのメッセージの送信者が成りすまされなければならず、要求がその者のクレデンシャルの下で処理されなければならないことを示す。
(2)プロファイル
Syncプロファイルは、同期化を開始するために必要とされたパラメータの全体セットである。SyncプロファイルはSCAによってSyncランタイムに、syncを開始するために供給される。ストレージプラットフォームとストレージプラットフォームの同期化のためのSyncプロファイルは、以下の情報を含む。
・変更のためのソースおよび宛先としての機能を果たすためのローカルフォルダ。
・共に同期化するためのリモートフォルダ名であり、このフォルダはリモートパートナーから、上記で定義されたマッピングを介してパブリッシュされなければならない。
・方向−同期化サービスは送信のみ、受信のみ、および送受信syncをサポートする。
・ローカルフィルタ−何のローカル情報をリモートパートナーに送信するかを選択する。ローカルフォルダを介したストレージプラットフォームクエリとして表現される。
・リモートフィルタ−何のリモート情報をリモートパートナーから検索するかを選択し、コミュニティフォルダを介したストレージプラットフォームクエリとして表現される。
・変換−アイテムをローカルフォーマットへ、およびそれから変換する方法を定義する。
・ローカルセキュリティ−リモートエンドポイントから検索された変更がリモートエンドポイント(成りすまされた)の許可の下で適用されるか、syncをローカルで開始するユーザの許可の下で適用されるかを規定する。
・競合解決ポリシー−競合が拒否されるべきか、ログされるべきか、自動的に解決されるべきかを規定し、後者の場合、どの競合リゾルバを使用するか、ならびにそのための構成パラメータを規定する。
同期化サービスは、Syncプロファイルの単純な構築を可能にするランタイムCLRクラスを提供する。プロファイルをまた、(しばしばスケジュールと並行して)容易な格納のためにXMLファイルへ、またはそれから直列化することもできる。しかし、ストレージプラットフォーム内に、すべてのプロファイルが格納される標準の場所はなく、SCAは、それを持続することもなく直ちにプロファイルを自由に構築してよい。syncを開始するためにローカルマッピングを有する必要はないことに留意されたい。すべてのsync情報をプロファイル内で規定することができる。しかし、マッピングは、リモート側によって開始されたsync要求に応答するために必要とされる。
(3)スケジュール
一実施形態では、同期化サービスはそれ自体のスケジューリングインフラストラクチャを提供しない。その代わりに、同期化サービスは、別のコンポーネントに依拠してこのタスクを実行し、このコンポーネントはMicrosoft Windows(登録商標)オペレーティングシステムにより使用可能なWindows(登録商標)Schedulerである。同期化サービスにはコマンドラインユーティリティが含まれ、このユーティリティはSCAの機能を果たし、XMLファイル内に保存されたsyncプロファイルに基づいて同期化をトリガする。このユーティリティにより、Windows(登録商標)Schedulerを、スケジュール通りに、またはユーザのログオンもしくはログオフなどのイベントに応答して同期化を実行するように構成することが、大変容易になる。
競合処理
同期化サービスにおける競合処理は3つの段階に分割され、すなわち(1)変更適用時間で発生する競合検出−このステップは、変更を安全に適用することができるかどうかを判定する、(2)自動競合解決およびロギング−このステップ(競合が検出された直後に起こる)中に、自動競合リゾルバ(または「競合ハンドラ」)は、競合を解決することができるかどうかを確かめるために調べられ、そうでない場合、競合をオプショナルでログすることができる、および(3)競合検査および解決−このステップは、いくつかの競合がログされている場合に起こり、syncセッションのコンテキストの外側で発生し、この時間に、ログされた競合を解決してログから除去することができる。本発明の様々な実施形態は競合処理を対象とし、これを以下のセクションIVでより詳細に論じる。
2.非ストレージプラットフォームデータストアへの同期化
本発明のストレージプラットフォームのもう1つの態様によれば、ストレージプラットフォームは、ISVがSyncアダプタを実装するためのアーキテクチャを提供し、Syncアダプタは、ストレージプラットフォームがMicrosoft Exchange、AD、Hotmailなどのレガシーシステムに同期化できるようにする。Syncアダプタは、後述のように、同期化サービスによって提供された多数のSyncサービスから利益を得る。
その名前にもかかわらず、Syncアダプタは、プラグインとしてあるストレージプラットフォームアーキテクチャに実装される必要はない。望まれる場合、「syncアダプタ」を単に、同期化サービスランタイムインターフェースを利用して変更エニュメレーションおよび適用などのサービスを得る、いかなるアプリケーションにすることもできる。
他者が所与のバックエンドへの同期化を構成および実行することをより単純にするために、Syncアダプタライタは、上述のようにSyncプロファイルが与えられたsyncを実行する、標準のSyncアダプタインターフェースをエクスポーズすることが推奨される。プロファイルは構成情報をアダプタに提供し、そのいくつかをアダプタはSyncランタイムに渡してランタイムサービスをコントロールする(例えば、同期化するためのフォルダ)。
Syncサービス
同期化サービスはいくつかのsyncサービスをアダプタライタに提供する。このセクションの残りでは、その上でストレージプラットフォームが「クライアント」として同期化を実行中であるマシン、および、アダプタが「サーバ」として通信中である非ストレージプラットフォームバックエンドに言及することが好都合である。
(1)変更エニュメレーション
同期化サービスによって維持された変更追跡データに基づいて、変更エニュメレーションは、syncアダプタが、前回このパートナーとの同期化が試みられて以来、データストアフォルダに発生している変更を、容易にエニュメレートすることを可能にする。
変更は、「アンカー」の概念に基づいてエニュメレートされ、アンカーは、最後の同期化についての情報を表現する不透明な構造である。アンカーは、先のセクションで説明する、ストレージプラットフォームのナレッジの形態を取る。変更エニュメレーションサービスを利用するSyncアダプタは、2つの幅広いカテゴリに入り、すなわち、「格納されたアンカー」を使用するアダプタに対して「供給されたアンカー」を使用するアダプタである。
この区別は、最後のsyncについての情報がどこに、クライアント上に格納されるか、サーバ上に格納されるかに基づく。アダプタがこの情報をクライアント上に格納することはしばしばより容易であり、バックエンドはしばしばこの情報を好都合に格納することはできない。他方では、複数のクライアントが同じバックエンドに同期化する場合、この情報をクライアント上に格納することは非効率的であり、いくつかの場合には不正確であり、これは、あるクライアントを、他のクライアントがすでにサーバにプッシュしている変更を認識しないようにさせる。アダプタが、サーバに格納されたアンカーを使用することを望む場合、アダプタはこのアンカーを、変更エニュメレーションの時間にストレージプラットフォームに戻すように供給する必要がある。
ストレージプラットフォームがアンカーを(ローカルまたはリモートストレージのために)維持するために、ストレージプラットフォームは、サーバで適用が成功された変更を認識するようにされる必要がある。これらおよびこれらの変更のみをアンカーに含めることができる。変更エニュメレーション中に、Syncアダプタは肯定応答インターフェースを使用して、どの変更の適用が成功されたかをレポートする。同期化の終了で、供給されたアンカーを使用するアダプタは新しいアンカー(適用が成功された変更のすべてを組み込む)を読み取り、それらのバックエンドに送信しなければならない。
しばしば、アダプタは、アダプタ固有のデータを、ストレージプラットフォームデータストアに挿入するアイテムと共に格納する必要がある。このようなデータの共通の例は、リモートIDおよびリモートバージョン(タイムスタンプ)である。同期化サービスは、このデータを格納するためのメカニズムを提供し、変更エニュメレーションは、この余分のデータを、戻される変更と共に受信するためのメカニズムを提供する。これにより、大抵の場合、アダプタがデータベースを再クエリする必要はなくなる。
(2)変更適用
変更適用は、Syncアダプタが、それらのバックエンドから受信された変更をローカルストレージプラットフォームに適用することを可能にする。アダプタは、ストレージプラットフォームスキーマへの変更を変換すると期待される。図24は、ストレージプラットフォームAPIクラスがストレージプラットフォームスキーマから生成されるプロセスを例示する。
変更適用の主なファンクションは、自動的に競合を検出することである。ストレージプラットフォームとストレージプラットフォームのsyncの場合のように、競合は2つのオーバーラップする変更が、互いのナレッジなしに行われることとして定義される。アダプタが変更適用を使用する場合、アダプタは、それについて競合検出が実行されるアンカーを特定しなければならない。アダプタのナレッジによってカバーされないオーバーラップするローカル変更が検出される場合、変更適用は競合を引き起こす。変更エニュメレーションに類似して、アダプタは、格納されたアンカーまたは供給されたアンカーを使用することができる。変更適用は、アダプタ固有のメタデータの効率的な格納をサポートする。このようなデータをアダプタによって、適用される変更にアタッチすることができ、同期化サービスによって格納される場合がある。データは次の変更エニュメレーションにおいて戻される場合がある。
(3)競合解決
セクションIVで後述する競合解決メカニズム(ロギングおよび自動解決オプションを含む)も、syncアダプタにとって使用可能である。Syncアダプタは、変更を適用する場合、競合解決のためのポリシーを規定することができる。規定される場合、競合を、規定された競合ハンドラ上に渡し、(可能な場合は)解決することができる。競合をまたログすることもできる。ローカル変更をバックグラウンドに適用しようと試みる場合、アダプタが競合を検出する場合があることは可能である。このような場合、アダプタはなお競合をSyncランタイム上に渡して、ポリシーに従って解決させることができる。加えて、Syncアダプタは、同期化サービスによって検出されたいかなる競合も、処理のためにSyncアダプタに戻すように送信されることを要求する場合がある。これは、バックエンドが競合を格納または解決することができる場合に特に好都合である。
アダプタ実装
いくつかの「アダプタ」は単に、ランタイムインターフェースを利用するアプリケーションであるが、アダプタは標準アダプタインターフェースを実装することが推奨される。これらのインターフェースにより、Syncコントロールアプリケーションは、アダプタが所与のSyncプロファイルに従って同期化を実行することを要求すること、進行中の同期化をキャンセルすること、および、進行中のsyncについての進行レポート(完成率)を受信することが可能となる。
3.セキュリティ
同期化サービスは、可能な限りわずかな物を、ストレージプラットフォームによって実装されたセキュリティモデルに導入するように努める。同期化のための新しい権利を定義するのではなく、既存の権利が使用される。具体的には以下の通りである。
・データストアアイテムを読むことができるいかなる者も、そのアイテムへの変更をエニュメレートすることができる。
・データストアアイテムに書き込むことができるいかなる者も、変更をそのアイテムに適用することができる。
・データストアアイテムを拡張することができるいかなる者も、syncメタデータをそのアイテムに関連付けることができる。
同期化サービスは、安全なアンカーシップ情報を維持しない。変更がレプリカAでユーザUによって行われ、レプリカBに転送される場合、変更が最初にAで(またはUによって)行われたという事実は失われる。Bがこの変更をレプリカCに転送する場合、これはAの権限ではなくBの権限の下で行われる。これは以下の制限につながる。すなわち、レプリカがそれ自体の変更をアイテムに行うために信頼されない場合、レプリカは他者によって行われた変更を転送することはできない。
同期化サービスが開始される場合、Syncコントロールアプリケーションによって行われる。同期化サービスはSCAの識別に成りすまし、すべてのオペレーションをその識別の下で(ローカルおよびリモートで)実行する。例えば、ユーザUが、ローカル同期化サービスに、ユーザUが読み取りアクセスを有していないアイテムに対するリモートストレージプラットフォームからの変更を検索させることはできないことを認められたい。
4.管理可能性
レプリカの分散コミュニティを監視することは複雑な問題である。同期化サービスは「スイープ」アルゴリズムを使用して、レプリカの状況についての情報を収集および配信することができる。スイープアルゴリズムのプロパティは、すべての構成されたレプリカについての情報が最終的に収集されること、および、障害のある(非反応)レプリカが検出されることを保証する。
このコミュニティ全体のモニタリング情報は、あらゆるレプリカで使用可能にされる。モニタリングツールを、任意に選択されたレプリカで実行して、このモニタリング情報を検査し、管理的決定を行うことができる。いかなる構成変更も、影響を受けるレプリカに直接行われなければならない。
B.同期化API概観
ますます分散されるデジタル世界では、個人およびワークグループはしばしば情報およびデータを様々な異なるデバイスおよびロケーションに格納する。これは、これらの別々の、しばしば異種のデータストアにおける情報を常に、最小限のユーザ介入により同期化させて保持することができる、データ同期化サービスの開発を促している。
本発明の同期化プラットフォームは、本明細書のセクションIIで説明した豊富なストレージプラットフォーム(別名「WinFS」)の一部であり、以下の3つの主な目的に対処する。
・アプリケーションおよびサービスが、異なる「WinFS」ストアの間でデータを効率的に同期化することを可能にすること。
・開発者が、「WinFS」および非「WinFS」ストアの間でデータを同期化するための豊富な解決法を構築することを可能にすること。
・開発者に、同期化ユーザ体験をカスタマイズするための適切なインターフェースを提供すること。
1.一般的な専門用語
本明細書の以下は、本明細書のこのセクションIII.Bの後の考察に関する、いくつかのさらに微細な定義および重要な概念である。
Syncレプリカ:大部分のアプリケーションは、WinFSストア内の所与のアイテムのサブセットに対する変更を追跡、エニュメレートおよび同期化することにのみ関心を有する。同期化オペレーションに参加するアイテムのセットは、同期化レプリカと称される。レプリカは、所与のWinFS包含階層(通常はフォルダアイテムでルートとされる)内に含まれたアイテムに関して定義される。すべての同期化サービスは、所与のレプリカのコンテキスト内で実行される。WinFS Syncは、レプリカを定義、管理およびクリーンアップするためのメカニズムを提供する。あらゆるレプリカは、所与のWinFSストア内でレプリカを一意に識別するGUID識別子を有する。
Syncパートナー:syncパートナーは、WinFSアイテム、エクステンションおよびリレーションシップにおける変更に影響を及ぼすことができるエンティティとして定義される。したがって、あらゆるWinFSストアをsyncパートナーと称することができる。非WinFSストアと同期化する場合、外部データソース(EDS)もまたsyncパートナーと称される。あらゆるパートナーは、それを一意に識別するGUID識別子を有する。
Syncコミュニティ:同期コミュニティは、ピアツーピア同期化オペレーションによって同期して保持される複数のレプリカのコレクションとして定義される。これらのレプリカはすべて同じWinFSストア内、異なるWinFSストア内にある場合があり、あるいはそれら自体を非WinFSストアにおける仮想レプリカとして明示する場合もある。WinFS syncは、コミュニティのためのいかなる特定のトポロジも規定または命令せず、これは特に、コミュニティ内のsyncオペレーションのみがWinFS Syncサービス(WinFSアダプタ)を通る場合にそうである。同期化アダプタ(以下で定義)はそれら自体のトポロジ制限を導入することができる。
変更追跡、変更単位およびバージョン:あらゆるWinFSストアは、すべてのローカルのWinFSアイテム、エクステンションおよびリレーションシップへの変更を追跡する。変更は、スキーマ内で定義された変更単位細分性のレベルで追跡される。いかなるアイテム、エクステンションおよびリレーションシップタイプのトップレベルフィールドも、スキーマデザイナによって変更単位に細分することができ、最小の細分性は1つのトップレベルフィールドになる。変更追跡のために、あらゆる変更単位にバージョンが割り当てられ、バージョンは、syncパートナーidおよびバージョン番号のペアである(バージョン番号はパートナー固有の単調増加の数である)。バージョンは、変更がストア内でローカルに発生する場合、または変更が他のレプリカから得られる場合、アップデートされる。
Syncナレッジ:ナレッジは、いずれかの時間での所与のsyncレプリカの状態を表現し、すなわち、ローカルでも他のレプリカからでも、所与のレプリカが認識するすべての変更についてのメタデータをカプセル化する。WinFS syncは、syncレプリカについてのナレッジをsyncオペレーションにわたって維持およびアップデートする。留意するべき重要なことは、ナレッジ表現が、ナレッジが格納される特定のレプリカに対してだけでなく、コミュニティ全体に対して解釈されることを可能にすることである。
Syncアダプタ:同期化アダプタは、SyncランタイムAPIを通じてWinFS Syncサービスにアクセスする、管理されたコードアプリケーションであり、WinFSデータの、非WinFSデータストアへの同期化を可能にする。シナリオの要件に応じて、どのWinFSデータのサブセットおよび何のWinFSデータタイプを同期化するかについては、アダプタ開発者次第である。アダプタはEDSとの通信を担い、WinFSスキーマとEDSによりサポートされたスキーマとの間で変換し、それ自体の構成およびメタデータを定義および管理する。アダプタは、WinFS SyncアダプタAPIを実装して、WinFS Syncチームによって提供されたアダプタのための共通の構成およびコントロールインフラストラクチャを活用することが強く推奨される。より詳細については、WinFS SyncアダプタAPI仕様[SADP]およびWinFS SyncコントローラAPI[SCTRL]仕様を参照されたい。
WinFSデータを外部の非WinFSストアに同期化し、WinFSフォーマットにおけるナレッジを作成または維持することができないアダプタでは、WinFS Syncは、後続の変更エニュメレーションまたは適用オペレーションのために使用することができるリモートナレッジを得るためのサービスを提供する。バックエンドストアの機能に応じて、アダプタはこのリモートナレッジをバックエンド上またはローカルWinFSストア上に格納することを望むことができる。
簡単にするために、同期化「レプリカ」は、単一の論理ロケーション内に存在する「WinFS」ストア内のデータのセットを表現する構造であるのに対して、非「WinFS」ストア上のデータは「データストア」と呼ばれ、一般にアダプタの使用を必要とする。
リモートナレッジ:所与のsyncレプリカは、別のレプリカから変更を得ることを望む場合、それ自体のナレッジをベースラインとして提供し、このベースラインに対して他のレプリカは変更をエニュメレートする。同様に、所与のレプリカは、変更を別のレプリカに送信することを望む場合、それ自体のナレッジをベースラインとして提供し、このベースラインをリモートレプリカによって、競合を検出するために使用することができる。sync変更エニュメレーションおよび適用中に提供される他のレプリカについてのこのナレッジは、リモートナレッジと称される。
2.同期化APIプリンシパル
ある実施形態では、同期化APIは2つの部分、すなわち、同期化構成APIおよび同期化コントローラAPIに分かれる。同期化構成APIは、アプリケーションが同期化を構成すること、および、2つのレプリカの間の特定の同期化セッションのためのパラメータを規定することを可能にする。所与の同期化セッションでは、構成パラメータには、同期化されるアイテムのセット、同期化のタイプ(一方向または双方向)、リモートデータソースについての情報、および競合解決ポリシーが含まれる。同期化コントローラAPIは同期化セッションを開始し、同期化をキャンセルし、進行中の同期化についての進行およびエラー情報を受信する。また、同期化が所定のスケジュール通りに実行される必要がある特定の実施形態では、このようなシステムには、スケジューリングをカスタマイズするためのスケジューリングメカニズムが含まれる場合がある。
本発明のいくつかの実施形態は、「WinFS」と非「WinFS」データソースの間で情報を同期化するための同期化アダプタを使用する。アダプタの例には、「WinFS」のcontactsフォルダと非WinFSのmailboxの間でアドレス帳情報を同期化するアダプタが含まれる。これらの例では、アダプタ開発者は、「WinFS」スキーマと非「WinFS」データソーススキーマの間のスキーマ変換コードを開発するために、「WinFS」同期化プラットフォームによって提供されたサービスにアクセスするために、本明細書で説明する「WinFS」同期化コアサービスAPIを使用することができる。加えて、アダプタ開発者は、非「WinFS」データソースと変更を通信するためのプロトコルサポートを提供する。同期化アダプタは、同期化コントローラAPIを使用することによって呼び出され、コントロールされ、このAPIを使用して進行およびエラーをレポートする。
しかし、本発明のある実施形態では、「WinFS」データストアを別の「WinFS」データストアと同期化する場合、「WinFS」と「WinFS」の同期化サービスがハードウェア/ソフトウェアインターフェースシステム内で統合される場合、同期化アダプタは不要である場合がある。いずれにしても、いくつかのこのような実施形態は、「WinFS」と「WinFS」、および同期化アダプタ解決のための同期化サービスのセットを提供し、このサービスには以下が含まれる。
・「WinFS」アイテム、エクステンションおよびリレーションシップへの変更の追跡。
・所与の過去の状態以来の効率的な増分変更エニュメレーションのためのサポート。
・「WinFS」への外部変更の適用。
・変更適用中の競合処理。
図36を参照して、共通データストアの3つのインスタンスおよびそれらを同期化するためのコンポーネントを例示する。第1のシステム3602はWinFSデータストア3612を有し、WinFSデータストア3612は、WinFS−WinFS Syncサービス3622およびコアSyncサービス3624を備え、コアSyncサービス3624はWinFSと非WinFS同期化用であり、3646でSync API3652を利用のためにエクスポーズする。第1のシステム3602と同様に、第2のシステム3604はWinFSデータストア3614を有し、WinFSデータストア3614は、WinFS−WinFS Syncサービス3632およびコアSyncサービス3634を備え、コアSyncサービス3634はWinFSと非WinFS同期化用であり、3646’でSync API3652を利用のためにエクスポーズする。第1のシステム3602および第2のシステム3604は3642で、それらの各WinFS−WinFS Syncサービス3622および3632を介して同期化する。第3のシステム3606はWinFSシステムではなく、WinFS Syncを使用するためのアプリケーション3666を有して、WinFSレプリカとのsyncコミュニティ内のデータソースを維持する。このアプリケーションは、WinFS Sync構成/コントロールサービス3664を利用して、WinFS−WinFS Synchサービス3622を介して(WinFS−WinFS Syncサービス3622がそのようにそれ自体をWinFSデータストアとして仮想化することができる場合)、3644でWinFSデータストア3612と直接インターフェースするか、あるいは、3648でSync API3652とインターフェースするSyncアダプタ3662を介して、インターフェースすることができる。
この図に例示するように、第1のシステム3602は、第2のシステム3604および第3のシステム3606を認識し、これらと直接同期化する。しかし、第2のシステム3604も第3のシステム3606も互いを認識せず、したがって、それらの変更を直接互いに同期化しないが、その代わりに、1つのシステム上で発生する変更は第1のシステム3602を通じて伝搬しなければならない。
C.同期化APIサービス
本発明のいくつかの実施形態は、2つの基本的サービスである変更エニュメレーションおよび変更適用を備える同期化サービスを対象とする。
1.変更エニュメレーション
本明細書で以前に論じたように、変更エニュメレーションは、syncアダプタが、前回このパートナーとの同期化が試みられて以来、データストアフォルダに発生している変更を、同期化サービスによって維持された変更追跡データに基づいて、容易にエニュメレートすることを可能にする。変更エニュメレーションに関して、本発明のいくつかの実施形態は以下を対象とする。
・特定されたナレッジインスタンスに対する、所与のレプリカにおけるアイテム、エクステンションおよびリレーションシップへの変更の効率的なエニュメレーション。
・WinFSスキーマ内で規定された変更単位細分性のレベルでの変更のエニュメレーション。
・複合アイテムに関する、エニュメレートされた変更のグループ化。複合アイテムは、アイテム、すべてのそのエクステンション、アイテムへのすべての保留リレーションシップ、および、その埋め込みアイテムに対応するすべての複合アイテムからなる。複数のアイテムの間の参照リレーションシップへの変更は別々にエニュメレートされる。
・変更エニュメレーションにおけるバッチ。バッチの細分性は、複合アイテムまたはリレーションシップ変更である(参照リレーションシップに関して)。
・変更エニュメレーション中のレプリカにおけるアイテム上のフィルタの仕様、例えば、レプリカは所与のフォルダ内のすべてのアイテムからなるが、この特定の変更エニュメレーションでは、アプリケーションは、ファーストネームが「A」で開始するすべてのContactアイテムへの変更のみをエニュメレートすることを望む。(このサポートにはB後のマイルストン(post b−milestone)が追加される)。
・個々の変更単位(または、アイテム、エニュメレーションもしくはリレーションシップ全体)を同期化に失敗したとしてナレッジ内で記録して、これらの変更単位を次回に再エニュメレートさせるようにするための能力と共に、エニュメレートされた変更についてのリモートナレッジを使用すること。
・変更エニュメレーション中にメタデータを変更と共に戻すことによって、WinFS Syncメタデータを理解することができる可能性のある高度なアダプタの使用。
2.変更適用
本明細書で以前に論じたように、変更適用によってSyncアダプタが、それらのバックエンドから受信された変更をローカルストレージプラットフォームに適用することを可能にし、これはアダプタがストレージプラットフォームスキーマへの変更を変換すると期待されるからである。変更適用に関して、本発明のいくつかの実施形態は以下を対象とする。
・他のレプリカ(または非WinFSストア)からの、対応するアップデートによる、WinFS変更メタデータへの増分変更の適用。
・変更単位細分性での変更適用における競合の検出。
・変更適用における個々の変更単位レベルでの成功、失敗および競合をレポートして、アプリケーション(アダプタおよびsyncコントロールアプリケーションを含む)がその情報を進行、エラーおよび状況レポートのために、ならびに、それらのバックエンド状態がある場合にアップデートするために使用することができるようにすること。
・変更適用中にリモートナレッジをアップデートして、次の変更エニュメレーションオペレーション中に、アプリケーションにより供給された変更の「反映」を防止するようにすること。
・WinFS Syncメタデータを変更と共に理解および提供することができる、高度のアダプタの使用。
3.サンプルコード
以下は、FOO SyncアダプタがSyncランタイムと対話することができる方法についてのコードサンプルである(すべてのアダプタ固有のファンクションには、プレフィックスFOOが付けられる)。
ItemContext ctx = new ItemContext ("\.\System\UserData\dshah\My Contacts",true);

//レプリカアイテムidおよびリモートパートナーidをプロファイルから得る。
//大部分のアダプタはこの情報をsyncプロファイルから得るようになる。

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();
readre.Close();

//
//アップデートされたナレッジ、およびある場合はアダプタメタデータを保存する。
//
ctx.Update();

//
//変更適用のためにサンプリングし、最初にリモートナレッジを、前のようなstoredKnowledgeIdを使用して初期化する。
//
remoteKnowledge = ...;

ctx.ReplicaSynchronizer.ConflictPolicy = conflictPolicy;
ctx.ReplicaSynchronizer.RemotePartnerId = remotePartnerId;
ctx.ReplicaSynchronizer.RemoteKnowledge = remoteKnowledge;
ctx.ReplicaSynchronizer.ChangesStatusEvent += 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を介して実施され、可能である。
一実施形態では、すべての同期化アダプタは、共通言語ランタイム(CLR)により管理されたAPIである同期化アダプタAPIを実装することが必要とされ、これらのアダプタを一貫して配置、初期化およびコントロールすることができるようにする。アダプタAPIは以下を提供する。
・アダプタをハードウェア/ソフトウェアインターフェースシステム同期化フレームワークに登録するための標準メカニズム。
・アダプタがそれらの機能、および、アダプタを初期化するために必要とされた構成情報のタイプを宣言するための、標準メカニズム。
・初期化情報をアダプタに渡すための標準メカニズム。
・アダプタが進行状況を、同期化を呼び出すアプリケーションに戻すようにレポートするためのメカニズム。
・同期化中に発生するいかなるエラーをもレポートするためのメカニズム。
・進行中の同期化オペレーションのキャンセルを要求するためのメカニズム。
シナリオの要件に応じて、アダプタのための2つの潜在的なプロセスモデルがある。アダプタは、アダプタを呼び出すアプリケーションと同じプロセススペース内で、または、別のプロセス内でそれだけで実行することができる。それ自体の別のプロセス内で実行するには、アダプタはそれ自体のファクトリクラスを定義し、このクラスはアダプタをインスタンス化するために使用される。ファクトリは、呼び出し側アプリケーションと同じプロセス内でアダプタのインスタンスを戻すことができ、あるいは、異なるMicrosoft共通言語ランタイムアプリケーションドメインまたはプロセス内でアダプタのリモートインスタンスを戻すことができる。デフォルトファクトリ実装が提供され、これは同じプロセス内でアダプタをインスタンス化する。実際には、多数のアダプタが呼び出し側アプリケーションと同じプロセス内で実行するようになる。プロセス外のモデルは通常、以下の理由の一方または両方のために必要とされる。
・セキュリティの目的。アダプタはあるプロセスまたはサービスのプロセススペース内で実行しなければならない。
・アダプタは、呼び出し側アプリケーションからの要求の処理に加えて、他のソースからの要求、例えば、入力ネットワーク要求を処理しなければならない。
図37を参照すると、本発明の一実施形態は、状態がどのように計算されるか、またはその関連付けられたメタデータがどのように交換されるかを認識しない、単純なアダプタを仮定する。この実施形態では、同期化はレプリカによって、それと共にレプリカが同期化することを望むデータソースに関して達成され、これは最初にステップ3702で、最後に前記データストアと同期化して以来どの変更が発生しているかを決定することによって行い、次いでレプリカは、この最後の同期化以来発生している増分変更を、その現在の状態情報に基づいて送信し、この現在の状態情報および増分変更はアダプタを介してデータソースへ向けられる。ステップ3704で、アダプタは、前のステップで変更データをレプリカから受信すると、データソースへのできるだけ多くの変更を実施し、どの変更が成功し、どれが失敗するかを追跡し、成功および失敗情報を(レプリカの)WinFSに戻すように送信する。レプリカ(WinFS)のハードウェア/ソフトウェアインターフェースシステムはステップ3706で、成功および失敗情報をレプリカから受信すると、次いでデータソースについての新しい状態情報を計算し、この情報をそのレプリカによる将来の使用のために格納し、この新しい状態情報をデータソースへ、すなわちアダプタへ、アダプタによる格納および後続の使用のために送信する。
D.同期化階層
本明細書で以前に論じたように、各レプリカ(ならびに、データソースおよび/またはアダプタ)は、その変更の増分および順次エニュメレーションを維持し、このような各変更には、対応する増分および順次変更番号が割り当てられる(すなわち、最初の変更は1であり、2番目の変更は2であり、3番目の変更は3である、など)。また、各レプリカは、そのsyncコミュニティ内の他の既知のレプリカ(syncパートナー)についての状態情報も維持し、これは、レプリカがどの変更をこれらの他のレプリカから受信しているかを追跡するためである。第2のレプリカから来た、第1のレプリカに適用された最後の変更の変更番号を知ることによって、第1のレプリカは次いでこの番号をその後に使用して、この最後に適用された変更の番号より大きい変更のみを要求、受信または処理することができる。図38A〜Dは、この順次変更エニュメレーション方法を使用して、変更がどのように追跡、エニュメレートおよび同期化されるかを例示する。
図38Aでは、syncパートナーAおよびBは、共通のsyncコミュニティ内のレプリカであり、それらの現在状態において示され、この状態は、変更がまだ行われていないので、各レプリカについてゼロの変更番号と同じであり、例えば、各レプリカについてそれぞれA0およびB0である。(この実施形態では、一意の変更番号が、初期状態を反映するために使用される。)各レプリカは、それ自体の状態を認識し、そのsyncパートナーの状態を追跡し、ここで示すようにこの情報をその「ベクトル」内に反映させる(ベクトルは、例示するように、最初にレプリカ自体の状態と、続いてそのパートナーの各々の最後の既知の状態を、最後の同期化またはこの場合は初期化に基づいてリストする)。レプリカAのための初期ベクトルは「[A0,B0]」であり、レプリカBのための初期ベクトルは「[B0,A0]」であり、これら2つのレプリカは現在完全に同期している。
図38Bで、レプリカAは変更を行い、その変更に一意の増分変更番号A1を割り当てる(この変更番号は、レプリカ自体のための一意の識別「A」、ならびに、そのレプリカにおける変更のための一意の増分された番号「1」を備える)。レプリカBは、他方では、2つの変更を行い、それらの変更に一意の増分変更番号B1およびB2をそれぞれ割り当てる。この時点で、次の同期化に先立って、これらのレプリカは現在同期しておらず、レプリカAのためのベクトルは現在[A1,B0]であり、レプリカBのためのベクトルは[B2,A0]である(この場合も、既知の最後の変化を反映する)。
図38Cで、レプリカAは、レプリカBにその現在のベクトルを送信して変更を要求すること(ステップ1)によって、レプリカBと同期化する。レプリカBは、レプリカAのベクトルを受信し、変更B1およびB2を両方ともレプリカAに送信するために必要とする計算を行い、したがってそのように行うために進む(ステップ2)。レプリカAは、B1およびB2として識別された、レプリカBの変更(変更単位)を受信し、これらの変更を適用し、それ自体のベクトルを[A1,B2]にアップデートする(ステップ3)。
図38Dに例示する代替実施形態では、レプリカBは、レプリカAへの正しい変更を計算および送信する(ステップ2)と共に、また、レプリカAのベクトルに基づいて、レプリカBが有していない変更がレプリカAに行われていると判定し、したがって、レプリカBもまたそれ自体のベクトルおよび変更のための要求をレプリカAに送信する(ステップ2’)。次いで、レプリカAがレプリカBの変更を受信し、これらの変更を適用し、それ自体のベクトルを[A1,B2]にアップデートする場合(ステップ3の間)、レプリカAはまたその変更のどれをレプリカBに送信するかを計算し、これらも送信する(ステップ3’)。レプリカBはこの情報を受信すると、変更を行い、そのベクトルを[B2,A1]にアップデートする(ステップ4)。
前述の実施例に関して、競合がいくつか状況で生じる場合があることが可能である。例えば、A1およびB2は同じ変更単位に行われている場合があり、あるいは、A1は、B2が修正中であった同じ変更単位への削除である場合がある。これらの競合のいくつかを、本明細書で以前に論じた競合解決オプションを使用して解決することができるが、ある競合は特に困難な課題を提供し、これらの課題およびそれらの解決法を本明細書で以下に、この実施例を踏まえて論じる。
1.以前の「範囲外」変更の同期化
本発明のある実施形態では、レプリカの範囲が静的でない場合がある。したがって、レプリカAは、その範囲内であるアイテムとその範囲内でないアイテムの間の新しい関係を作成する変更により、その範囲を効果的に増すことができる。しかし、範囲外であるアイテムのための変更単位がレプリカAおよびBの間で同期化されていない(それらのレプリカのための同期化の範囲外であったため)と仮定すると、同期化の不整合が、その特定のアイテムのためのバージョンパスに関して発生する可能性がある。この問題の解決法は、レプリカAがレプリカBに、範囲外のアイテムに行われたすべての変更を、レプリカAにおいて範囲内アイテムと範囲外アイテムの間の関係を作成する特定の変更と共に送信することである。
2.親子順序逆転(Disordering)の同期化
本発明のある実施形態では、同期化について、親アイテムが常に子アイテムより前に送信されることが一般原則である(例えば、子であるアイテムKが、親であるアイテムJに埋め込まれる場合、アイテムKを、アイテムJが送信される前に送信することはできない)。しかし、レプリカAでは、同期化の間で、アイテムJおよびKが変更されるが、子アイテムKが親アイテムJよりも低いソート番号を有し(例えば、その識別番号の順次的先行に基づく)、したがって、通常は先に送信されるようになることが可能である。本発明の様々な実施形態における同期化のためのこの問題の1つの解決法は、これらの変更を2つのグループ、すなわちアイテムKに行われた変更のみを反映するグループ、および、アイテムJに行われた変更のみを反映する第2のグループに分割し、これらのグループを正しい順序で送信する(すなわち、子アイテムKのための変更のグループを、親アイテムJのための変更のグループを送信した後に送信する)ことである。
3.廃棄伝搬
本明細書で以前に論じたように、廃棄は、同期化のために、削除された変更単位にマークを付けるために使用される。しかし、同期化はsyncコミュニティ内の複数のベクトルについて非同期であるので、これらの廃棄はデータプラットフォーム全体にわたって伝搬しなければならない。問題は、廃棄伝搬の責任を負うことなく、レプリカAはアイテムを作成し、レプリカBとのsync中にそのアイテムをレプリカBに送信することができることである。レプリカAは次いでこのアイテムを削除する場合があり、レプリカCとのsync中に、送信する物がない(アイテムが削除されたので)ためにこのアイテムに関して何も送信しないようになる。次いで、レプリカBおよびレプリカCがsyncしようと試みる場合、レプリカCはレプリカBから、Bの上で永続するこのアイテムを受信するようになる。
本発明の様々な実施形態でのこの問題の解決法は、レプリカAが、削除されたアイテムに廃棄によりマークを付けることである。次いで、レプリカAがアイテムを削除する場合、レプリカCとのsync中に、レプリカAは廃棄をレプリカBに送信する。レプリカBおよびレプリカCがsyncしようと試みる場合、レプリカBはこの廃棄も受信し、このアイテムは直ちに完全にsyncコミュニティから排除される。
4.ルート廃棄伝搬
P1で、アイテムXが複数の埋め込みアイテムA、B、C、DおよびEを有する場合、P1が最初にこれらの子アイテムを、第2に親アイテムXを、同期化の間で削除する場合(すなわち、6つの変更としてdel A、del B、del C、del D、del Eおよびdel X)、興味深いシナリオが生じ、これは、P1が単に親Xを削除した場合(1つの変更)に同じ最終結果が起こっていたであろうからであり、この場合、埋め込みアイテムも自動的に削除されるようになる。これに関して、本発明のいくつかの実施形態は、同期化の上で、Xを削除することが実際には6つの別々の削除イベントに相当する物となることを認識することによって、効率を得て、このようにP1はP2に、Xの削除に対応する変更単位のみを送信し、この削除が必然的にP2内のXの埋め込みアイテムに伝搬することを可能にするようになる。
5.リレーションシップ名のスワッピング
前述のように、リレーションシップは名前を有し、したがって、1つのレプリカ(P1)が、2つのリレーションシップ(R1およびR2)のための名前を、一時名前要素(X)の使用を通じてスワップすることが可能であり、すなわち、R1の名前がXにコピーされ、R2の名前が次いでR1にコピーされ、次いでXはR2にコピーされ、最後にXが削除される。しかし、パートナーレプリカ(P2)は、一時名前要素Xについて知らないので、同期化中にエラーが発生するようになり、これは、R1が新しい名前を有することを認識すると、P2によりこの名前を変更するための試みは、R1およびR2の両方で同じ名前を使用するためにエラーの結果となるからである。本発明の様々な実施形態でのこの問題の1つの解決法は、P2が、この同じ名前エラーを受信または認識すると、可能性のある名前スワップシナリオを仮定し、自動的にそれ自体の一時名前要素(Y)を作成することであり、後続の変更が実際に、R2の名前をXにおける名前に変更することを含む場合、P2はスワップを完了する(そうでない場合、このシナリオを通常の競合イベントとして生成する)。
6.参照リレーションシップ
レプリカP1(WinFSシステム上で実行する)とデータソースP2(非WinFSシステム上で実行中である)の間の同期化では、ダングリングリレーションシップ(WinFSによってサポートされる)が非WinFSシステムによってサポートされないコンテキストにおいて、問題が生じる。この問題は、2つのアイテムAおよびBがP1においてリレーションシップRを有し、P1がこれらのアイテムをA(変更単位P1−21として)、次いでR(変更単位P1−22として)、次いでB(変更単位P1−23として)の順序で作成する場合に生じる。Rが作成される(P1−22)場合、Rはダングリングリレーションシップであり、そのためP2がこれらの変更を順番に適用する場合、許されないダングリングリレーションシップエラーの結果となる。本発明のいくつかの実施形態でのこの問題の解決法は、その代わりに、すべての他の変更がP1からP2に送信された後で、すべての参照リレーションシップ(例えば、R)が送信されるように、これらの変更を再順序付けすることであり、このようにこの問題は、最初にアイテムAおよびBを作成すること、および次いでこれらのアイテムをRにより互いに関係付けることによって、完全に回避される。
E.SYNCスキーマの追加の態様
以下は、本発明の様々な実施形態のための同期化スキーマの追加の(またはより特定の)態様である。
・各レプリカは、データストアの全体からのデータの定義された同期化サブセットであり、複数のインスタンスを有するデータのスライスである。
・syncスキーマのルートは、一意のIDを有するルートフォルダ(実際にはルートアイテム)を定義するためのベースタイプを有するレプリカであり、一意のIDは、それがメンバであるsyncコミュニティのためのIDであり、どんなフィルタおよび他の要素でも、特定のレプリカのために必要または望ましい。
・各レプリカの「マッピング」はレプリカ内で維持され、したがって、いかなる特定のレプリカのためのマッピングも、このようなレプリカが知っている他のレプリカに制限される。このマッピングはsyncコミュニティ全体のサブセットのみを備える場合があるが、前記レプリカへの変更はなおsyncコミュニティ全体に、(いずれかの特定のレプリカが、どの他のレプリカを未知のレプリカと共通して共有中であるかを認識しないとしても)共通して共有されたレプリカを介して伝搬するようになる。
・syncスキーマおよびレプリカの使用は、真の分散ピアツーピアのマルチマスタ同期コミュニティを可能にする。また、syncコミュニティタイプはないが、syncコミュニティは単に、レプリカ自体のコミュニティフィールド内の値として存在する。
・あらゆるレプリカは、増分変更エニュメレーションを追跡するため、および、syncコミュニティ内で知られる他のレプリカについての状態情報を格納するための、それ自体のメタデータを有する。
・変更単位はそれら自体のメタデータを有し、このメタデータは、パートナーキーに加えてパートナー変更番号を備えるバージョン、各変更単位のためのアイテム/エクステンション/リレーションシップのバージョン管理、レプリカがsyncコミュニティから見ている/受信している変更に関するナレッジ、GUIDおよびローカルID構成、ならびに、クリーンアップのために参照リレーションシップ上に格納されたGUIDを備える。
IV.同期化−競合処理
本明細書で前述したように、同期化サービスにおける競合処理は3つの段階に分割され、すなわち(1)変更適用時間で発生する競合検出−このステップは、変更を安全に適用することができるかどうかを判定する、(2)自動競合解決およびロギング−このステップ(競合が検出された直後に起こる)中に、自動競合ハンドラは、競合を解決することができるかどうかを確かめるために調べられ、そうでない場合、競合をオプショナルでログすることができる、および(3)競合検査および解決−このステップは、いくつかの競合がログされている場合に起こり、syncセッションのコンテキストの外側で発生し、この時間に、ログされた競合を解決することができ、ログから除去することができる。
A.競合処理スキーマ
本発明の様々な実施形態は特に、ピアツーピア同期化システムで発生する競合のための競合処理(本明細書で上述した同期化システム用など)を対象とする。競合を正確および効率的に処理するための能力は、よい有用性を保持しながらデータ損失を最小限にし、同期化中のユーザ介入の必要性を低減する。本発明のいくつかの実施形態は、以下の競合処理要素のうち1つまたは複数を備える競合処理スキーマを対象とし、これらの要素は(a)競合のスキーマ化された表現、(b)競合の検出、(c)永続的ストアへの競合のロギング、(d)柔軟性があり構成可能な競合解決ポリシーによる競合の自動解決、(e)競合をフィルタリングおよび解決するための作成可能および拡張可能な競合ハンドラ、(f)古くなった競合の自動検出および除去、ならびに(g)プログラム的な競合解決である。また、競合処理スキーマとは分離して、これらの各競合処理要素はそれ自体で本発明の追加の実施形態を表す。
1.競合タイプ
一般に、競合は、同期化オペレーション中にデータを同期化することができないこと(「変更適用障害」)がある場合は常に生じる。これらの障害は様々な理由のために発生する場合があるが、一般に競合を、制約競合およびナレッジ競合の2つのカテゴリに分けることができる。
ナレッジベースの競合
ナレッジベースの競合は、2つのレプリカが独立した変更を同じ変更単位に行う場合に発生する。2つの変更は、互いのナレッジなしに行われる場合、独立してコールされ、すなわち、第1のバージョンは第2のナレッジによってカバーされず、その逆も同様である。同期化サービスはすべてのこのような競合を、上述のレプリカのナレッジに基づいて自動的に検出し、これらの競合を、本明細書で以下に説明するように処理する。ナレッジ競合のいくつかの特定のタイプには、アップデート−削除、削除−アップデート、およびアップデート−アップデート競合が含まれる(各名前は、ローカルアクションおよびリモートアクションを順番に指し、例えば、アップデート−削除競合は、同じデータに対するローカルアップデートとリモート削除による)。
競合を変更単位のバージョン履歴におけるフォークとして考えることは有用であることがある。競合が変更単位のライフ内で発生しない場合、そのバージョン履歴は単純なチェーンであり、各変更は前の変更の後に発生する。ナレッジベースの競合の場合、2つの変更は並行して発生し、チェーンを分割させ、バージョンツリーにさせる。
要約すると、ナレッジ競合は、ナレッジおよびバージョン処理の結果として発生する。ナレッジ競合は、データベース内に格納された情報への競合するバージョンを有する変更が適用される場合、WinFS同期化によって作成される。これらの競合は、競合する変更情報、ならびにバージョン情報を含む必要がある。ナレッジ競合のための大部分の要件は、制約競合のための要件でもある。しかし、ナレッジ競合を、syncバージョンおよびナレッジのみに基づいて検出することができる。
制約ベースの競合
複数の独立した変更が共に適用される場合、完全性制約に違反する場合がある。例えば、2つのレプリカがファイルを同じ名前で同じディレクトリ内に作成することで、このような競合を発生させる可能性があり、システム内の制約(フォルダ内の一意のアイテム名の実施など)は、このタイプの制約ベースの競合を起こす。
一般に制約ベースの競合は、まさにナレッジベースの競合の場合のように、2つの独立した変更を含むが、制約ベースの競合が備える変更は、同じ変更単位に影響を与えないが、その代わりに、それらの間に存在する制約により異なる変更単位に影響を与える。制約ベースの競合は単一の変更の結果生じる場合があり、これは、一方が制約を有し、他方が制約を有していない、2つの異なるシステムの間で同期化する場合などである。例えば、システムが、最大ファイル名が8文字の長さであるという制約を有する場合、および、そのシステムが、このような制約を有していない別のシステムからの、ファイルへの変更を受信し、この変更がファイル名を8文字より長くすることである場合、制約競合の結果となる(単一のマシン上の単一の変更から発生した)。
制約競合の特定のタイプには、限定なしに以下が含まれる。
・挿入−挿入競合:これは、2つの同期化パートナーがそれぞれ、同じ名前を有するファイルなど、同じ論理識別子を有するオブジェクトを作成する場合に発生する。
・親なし競合:これは、作成される入力オブジェクトの親が存在しない場合に発生する。一例は、ファイルがその親フォルダの前に受信される場合である。
・未定義タイプ競合:これは、入力オブジェクトのスキーマがインストールされず、オブジェクトの作成が妨げられる場合に発生する。
要約すると、制約競合は、様々な理由のために変更を適用する際の障害によって引き起こされる。このような障害は、最終的な収束の結果となる解決の形態において、または、ユーザ対話を通じて最終的な解決のためにログすることができる場合、これらの障害を有意味的に処理することができる場合に、制約競合と称される。レポートされる以外に有意味的に処理することができない障害は単に、変更適用エラーと呼ばれる。ある実施形態では、すべての変更適用障害がエラーとして扱われ、すなわち、認識された制約競合はない。また、ある実施形態では、送信同期化中に発生するすべての競合は無視され、これは、ナレッジ競合が次の受信同期化で再提示されると予想されるからである。(非収束につながる他の障害もまた無視される場合がある。)
2.競合検出
同期化サービスは、制約違反を変更適用時間に検出し、制約ベースの競合を自動的に引き起こす。制約ベースの競合の解決には通常、制約に違反しないような方法で変更を修正するカスタムコードが必要となり、同期化サービスは、それを行うための汎用メカニズムを提供してもしなくてもよい。
本発明の様々な実施形態では、ローカルのナレッジがリモートバージョンを認識するかどうか、およびその逆であるかどうかをチェックすることによって、競合が変更単位毎に検出される。ナレッジベースの競合では、以下の4つの競合検出シナリオがある。
1.リモートバージョンを認識するローカルナレッジ、ローカルバージョンを認識しないリモートナレッジ。これは、入力変更が古くなっており、したがって廃棄されることを意味する。
2.リモートバージョンを認識しないローカルナレッジ、ローカルバージョンを認識するリモートナレッジ。これは、入力変更がローカルバージョンよりも最近であり、したがって受け入れられることを意味する。
3.リモートバージョンを認識するローカルナレッジ、ローカルバージョンを認識するリモートナレッジ。これは、両方のバージョンが等しい場合にのみ発生する可能性があり、そのため変更は適用されない。
4.リモートバージョンを認識しないローカルナレッジ、ローカルバージョンを認識しないリモートナレッジ。これは、ローカルおよびリモートバージョンが競合しており、そのため競合が引き起こされることを意味する。
3.競合処理
競合は、送信または受信同期化のいずれかの間に発生する場合があるが、一方向の同期化オペレーション内の両方のパートナーが類似(2つの類似に構成されたWinFSストアなど)である場合、これらのシナリオは対称的であり、自動的に競合を同期的に解決すること、または、競合を非同期的解決のためにログすること(自動または手動)によって、受信側で最も容易に処理することができる。
言うまでもなく、WinFS−非WinFS同期化における場合など、送信側パートナーが競合を処理する必要のある場合がある状況がある。このような場合、制約競合は、後続の受信同期化において送信側パートナーに戻らない可能性がある。さらに、受信側パートナーは競合ログを有していない場合があり、あるいは、管理を容易にするために送信側の競合ログを使用する必要がある場合がある。このような場合、変更を完全に拒否して、送信側に強制的に競合を解決させることができる(本明細書で以下に論じる)。
Sync開始側は、競合解決をそれらのSyncプロファイル内に構成する。同期化サービスは、複数の競合ハンドラを単一のプロファイル内で結合することをサポートする。競合処理メカニズムは拡張可能であるので、複数の競合ハンドラを結合するためのいくつかの方法がある。1つの特定の方法は、競合ハンドラの1つが成功するまで、次々に試行される競合ハンドラのリストを規定することを含む(本明細書で以下に説明する)。もう1つの方法は、競合ハンドラを競合タイプに関連付けることを含み、例えば、アップデート−アップデートのナレッジベースの競合をある競合ハンドラに向けて送り、他のすべての競合をログに向けて送るなどである。
競合が検出される場合、同期化サービスは3つのアクション、すなわち(1)変更を拒否すること、(2)競合を自動的に解決すること、または(3)競合を競合ログにログすることのうち、1つを取ることができる(sync開始側によってSyncプロファイル内で選択される)。
変更の拒否
変更が拒否される場合、同期化サービスは、変更がレプリカに到着しなかったかのように動作し、否定応答を発信側に戻すように送信する。この解決ポリシーは主として、競合のロギングが実行可能でないヘッドレスレプリカ(ファイルサーバなど)において有用である。その代わりに、このようなレプリカはこれらの変更を拒否することによって、他者に強制的に競合を処理させる。
自動競合解決
自動競合解決は、規定されたポリシーに従って同期的に競合を解決するプロセスである。WinFS同期化オペレーションでは、ポリシーを、送信オペレーションおよび受信オペレーションに対して独立して規定することができる。自動競合解決ポリシーは、同期化プロファイルを介して規定される。引き起こされる競合は、プロファイル内で規定されたトップレベルの競合ハンドラに渡される。この競合ハンドラは競合を解決し、ログし、または競合を別の競合ハンドラへ、競合処理パイプラインに沿ったさらなる処理のために渡すことができる。
図39Aは、本発明のいくつかの実施形態のための競合処理パイプラインを例示する。この図では、競合が発生する場合、競合ハンドラリスト(または「リスト」)3910は競合アイテム3902を受信し、競合をパイプラインの第1のパス上で第1のハンドラ3912に渡し、この場合、ハンドラ3912はフィルタである。フィルタ3912はゲートキーパーであり、競合3902を評価し、これを次のハンドラ3914に渡すか、あるいはリスト3910に戻すように拒否し、次いでリスト3910はこれをフィルタ3912に戻すように渡し、フィルタ3912はこれをパイプライン内の次のパス上の第1のハンドラ3922に渡す。競合3902が第1のフィルタ3912によって、この場合はリゾルバである第2のハンドラ3914に渡される場合、競合は、可能である場合はリゾルバ3914によって解決され、あるいは可能でない場合は競合は拒否されて第1のハンドラ3912に戻され、リスト3910に戻され、次いでパイプライン内の次のパス上でリゾルバ3922に渡される。次いで競合は、(a)パイプライン内のハンドラのうち1つによって解決されるまで、(b)例えばロガー3936など、「ロガー」として知られる特殊な競合ハンドラによって、明示的に競合ログへログされるまで(すなわち、競合がフィルタ3934を通過する場合)、または(c)完全にパイプラインの外に戻すように渡され、デフォルトにより競合ログ(破線でロガー3944として論理的に図示)に送信されるまで、パイプライン中を進行し続ける。
図39Bは、図39Aに例示されたパイプラインの論理的トラバーサルを例示する流れ図である。図39Bで、また図39Aをも参照すると、ステップ3950で、競合3902はパイプラインに、競合ハンドラリスト3910で入り、ステップ3952で、最初にフィルタ3912に送信される。ステップ3954で、競合3902がこのフィルタ3912を通過する場合、ステップ3956で、競合3902はリゾルバ3914に進行し、ステップ3958で、リゾルバ3914は競合3902を解決しようと試みる。成功する場合、ステップ3998でプロセスが戻り、そうでない場合はステップ3960で、競合はリゾルバ3922に進行し、ステップ3962で、リゾルバ3922は競合3902を解決しようと試みる。成功する場合、ステップ3998でプロセスが戻り、そうでない場合はステップ3964で、競合はリスト3932に進行し、そこからステップ3966でフィルタ3934に進行し、ステップ3968で、競合3902がこのフィルタ3934を通過する場合、ステップ3970で、競合3902はロガー3936によって競合ログ(図示せず)にログされ、ステップ3998でプロセスが戻り、そうでない場合はステップ3972で、競合3902はフィルタ3938に送信され、ステップ3974で、競合3902がこのフィルタ3938を通過する場合、ステップ3976で競合3902はリゾルバ3940に進行し、ステップ3978で、リゾルバ3940は競合3902を解決しようと試みる。成功する場合、ステップ3998でプロセスが戻り、そうでない場合はステップ3980で、競合はリゾルバ3942に進行し、ステップ3982で、リゾルバ3942は競合3902を解決しようと試みる。成功する場合、ステップ3998でプロセスが戻り、そうでない場合はステップ3984で、競合3902はロガー3944によって競合ログ(図示せず)にログされ、ステップ3998でプロセスが戻る。
図39Aおよび39Bに示さないが、連続競合リゾルバのパスもまた構築することができ、競合をあるリゾルバで解決できない場合、その競合が次のリゾルバに渡され、次のリゾルバが次いで競合を解決しようと試みるなどとなることに留意されたい。競合が未解決で残る場合、次のパスに進行するためにその競合がパスを後退してリストに渡されるのは、パスの最後のみである。同様に、リストのためのパスのすべてが使い尽くされており、競合が未解決で残った後、次いでリストは、次のリストに到達するまでそのパスを後退して競合を渡すなどとなる。
また、パイプラインが必ずしもリストで開始しなければならないとは限らず、それどころか、例えばフィルタなど、いかなるタイプの競合ハンドラで開始することもできることにも留意されたい。しかし、それにもかかわらず、競合がパスを後退してパイプライン内で第1の競合ハンドラに渡され、その競合ハンドラが試行するための追加のパスを有していない場合(すべてのパスが試行されていない競合ハンドラリストの場合のみとなる)、競合はパイプラインの外に通過して、自動的にデフォルトにより競合ログにログされる。
ConflictHandlerタイプは、競合ハンドラのためのベースタイプであり、競合ハンドラリスト、競合ログおよび競合フィルタ、ならびに他のタイプの競合ハンドラが含まれる。加えて、同期化サービスはまたいくつかのデフォルト競合ハンドラをも提供することができ、これらのハンドラには以下が含まれるがそれだけに限定されない。
・ローカル勝利:ローカルに格納されたデータを、入力データを超える勝者として選択することによって、競合を解決する。
・リモート勝利:入力データを、ローカルに格納されたデータを超える勝者として選択することによって、競合を解決する。
・最終書き込み側勝利:ローカル勝利またはリモート勝利のいずれかを変更単位毎に、変更単位のタイムスタンプに基づいて選択する(同期化サービスは一般にクロック値には依拠せず、この競合リゾルバはそのルールの唯一の例外であることに留意されたい)。
・決定性:すべてのレプリカ上で同じであるが、そうでない場合は有意味であることが保証される方法で勝者を選択し、同期化サービスの一実施形態は、パートナーIDの辞書式比較を使用してこの機能を実施することができる。
たとえば、競合ハンドラは以下のように、アップデート−削除競合に対しては、ローカル勝利の解決が適用されるべきであること、および、他のすべての競合に対しては、最終書き込み側勝利の解決が適用されるべきであることを規定することができる。
Figure 0004738908
言うまでもなく、競合ハンドラが特定されない場合、または、特定された競合ハンドラのいずれによっても競合が処理されない場合、競合は競合ログに配置される。ある実施形態では、競合ログもまた競合ハンドラである。
本発明の様々な実施形態では、ISVはそれら自体の競合ハンドラを実装およびインストールすることができる。カスタム競合ハンドラは構成パラメータを受け入れることができるが、このようなパラメータはSyncプロファイルの競合解決セクション内でSCAによって規定されなければならない。
競合リゾルバが競合を処理する場合、(競合する変更の代わりに)実行される必要があるオペレーションのリストをランタイムに戻す。次いで、同期化サービスはこれらのオペレーションを適用し、競合ハンドラが何を検討したかを含むために、適切に調整されたリモートナレッジを有する。
解決を適用中に、もう1つの競合が検出されることが可能である。このような場合、最初の処理が再開する前に、新しい競合が解決またはログされなければならない。
競合をアイテムのバージョン履歴内のブランチとして考える場合、競合解決を、2つのブランチを結合して単一のポイントを形成する結合と見なすことができる。したがって、競合解決は、バージョン履歴を非循環有向グラフ(DAG)にする。
競合ロギング
いくつかのレポートされた競合は、自動競合解決を使用して同期的に解決される可能性があるが、他のレポートされた競合は、後のプログラム的解決のためにログされる場合がある。競合ロギングは、競合解決プロセスが非同期的に進行することを可能にし、すなわち、競合は検出される時間に解決される必要はないが、将来の解決のためにログされる場合がある。例えば、競合ビューアアプリケーションは、ユーザがログされた競合を事後に検査して手動で解決することを、可能にすることができる。
本発明のいくつかの実施形態では、非常に特殊な種類の競合ハンドラは、競合ロガー(またはより単純に「ロガー」)である。同期化サービスは競合を競合ログ内に、タイプConflictRecordのアイテムとして(または、代替実施形態では、単にタイプConflictとして)ログする。これらのレコードは、競合内にあるアイテムに戻るように関係付けられる(アイテム自体が削除されてしまうまで)。ある実施形態では、各競合レコードは、競合を引き起こした入力変更、競合のタイプ(例えば、アップデート−アップデート、アップデート−削除、削除−アップデート、挿入−挿入、または制約)、ならびに、入力変更のバージョン、およびそれを送信するレプリカのナレッジを含む。本発明のある代替実施形態では、このような各競合アイテムは、競合する変更データおよびメタデータ、競合の記述、ならびに、変更適用側情報、エンリストメントデータおよびリモートパートナー名などの他のコンテキスト情報を含む。加えて、変更データは、変更を適用するために使用することができるフォーマット内で格納される。さらに、本発明の様々な実施形態では、競合から派生された各タイプは、競合のそのタイプに関する新しいフィールドを追加することができる。例えば、InsertInsertConflictタイプは、一意性制約が違反されることを引き起こしたアイテムのアイテムIDを追加する。
本発明のいくつかの実施形態では、ログされる競合アイテムはまたターゲットアイテムのコピーを、競合アイテムへのエクステンションとして、または単に、それと競合アイテム自体の間で定義されたリレーションシップと共に同じく競合ログ内に格納された別のアイテムとして、あるいは代替として、競合アイテム自体の一部(プロパティ値のペアのセットなど)として含むようにもなる。競合ログ(永続的データストア上で保持される)内の競合アイテムの一部として、あるいはそれと共に格納されるこのターゲットアイテムは、まず第1に競合を起こした特定の変更を反映するようになる。図40は、一実施例のcontactアイテムを使用したこの手法を例示するブロック図である。この実施例では、contactアイテム4002(「ターゲットアイテム」)は名前フィールド4004を備え、このフィールドは、最後に同期化が成功した時点で最初に「John」に設定される。このフィールド4004は次いで、ローカルシステムによってローカルで「Bob」に変更される。後続の同期化中に、この同じフィールド4004を「Jane」に変更しようとする試みは競合の結果となり、これはローカルシステムが、「Bob」または「Jane」のどちらの名前変更が適用されるべきであるかを確認することができないからであり、次いで、ローカル変更(「Bob」)が保持され、競合4006は競合ログ4008内に、競合につながった変更(「Jane」)の適用を反映するcontactアイテムのコピー4002’と共にログされる。このように、競合ログは、競合を起こした完全ターゲットアイテムを備え、この特定のターゲットアイテムは、競合につながったアイテムにおいて行われるように試みられた変更を反映するように、アップデートされる。
競合を競合ログに追加するために、ログは最初に検索されて、同じ変更単位上に他の競合があるかどうかが判定される。同じ変更単位上にいずれかの既存の競合がある場合、これらの競合は可能な除去のために検査される。既存の競合は、その変更認識が新しい競合の変更認識によって包含される場合、除去される。他方では、新しい競合の変更認識が既存のログされた競合の変更認識によって包含される場合、新しい競合が廃棄され、逆もまた同じである(すなわち、競合は、その認識がストアの認識によって包含される場合に古くされ、これは、その認識が競合の認識を包含する変更をストアが受信し、適用に成功する場合などである)。2つの変更認識のいずれもが他方を包含しない第3の場合、新しい競合はログに追加され、同じ変更単位に対応する両方の競合は、後に手動または自動で解決されるまで、ログ内に存在する。
競合の検査および解決
同期化サービスは、アプリケーションが競合ログを検査し、その中の競合の解決を提案するためのAPIを提供する。このAPIは、アプリケーションがすべての競合または所与のアイテムに関係付けられた競合をエニュメレートすることを可能にする。このAPIはまた、このようなアプリケーションが、ログされた競合を以下の3つの方法のうち1つで解決することも可能にし、すなわち(1)リモート勝利−ログされた変更を受け入れ、競合するローカル変更を上書きすること、(2)ローカル勝利−ログされた変更の競合部分を無視すること、および(3)新しい変更の提案−アプリケーションが、その意見において、競合を解決するマージを提案することである。競合がアプリケーションによって解決された後、同期化サービスは競合をログから除去する。
レプリカの収束および競合解決の伝搬
複雑な同期化シナリオでは、同じ競合が複数のレプリカで検出される可能性がある。これが起こる場合、いくつかのことが発生する可能性があり、すなわち(1)競合をあるレプリカ上で解決することができ、この解決を他のレプリカに送信することができる、(2)競合が両方のレプリカ上で自動的に解決される、または(3)競合が両方のレプリカ上で手動で解決される(競合検査APIを通じて)。
収束を保証するため、同期化サービスは競合解決を他のレプリカに転送する。競合を解決する変更がレプリカに到着する場合、同期化サービスは自動的に、ログ内でこのアップデートによって解決されるいかなる競合レコードをも発見し、これらの競合レコードを排除する。この意味で、1つのレプリカでの競合解決は、他のすべてのレプリカにおいてバインディングである。
異なる勝者が異なるレプリカによって同じ競合に対して選択される場合、同期化サービスは競合解決をバインディングする原理を適用し、2つの解決のうち一方を、他の解決を超えて勝利するように自動的に選択する。勝者は、常に同じ結果を生じることが保証される決定的な方法で選択される(一実施形態はレプリカIDの辞書式比較を使用する)。
異なる「新しい変更」が異なるレプリカによって同じ競合に対して提案される場合、同期化サービスはこの新しい競合を特殊な競合として扱い、競合ロガーを使用して、競合が他のレプリカに伝搬しないようにする。このような状況は一般に、手動の競合解決により起こる。
B.競合処理スキーマの追加の態様
以下は、本発明の様々な実施形態のための競合処理スキーマの追加(またはより特定)の態様である。
・競合解決ポリシーは各レプリカ(およびアダプタ/データソースの組合せ)によって個別に処理され、すなわち、各レプリカは競合をそれ自体の基準および競合解決スキーマに基づいて解決することができる。また、データストアの各インスタンスにおける違いが追加の将来の競合の結果となり、これにつながる可能性があるが、アップデートされた状態情報において反映される競合の増分および順次エニュメレーションは、アップデートされた状態情報を受信する他のレプリカにとって不可視である。
・syncスキーマには、すべてのレプリカにとって使用可能な複数の事前定義された競合ハンドラ、ならびに、ユーザ/開発者により定義されたカスタム競合ハンドラのための能力の両方が含まれる。スキーマはまた3つの特殊な「競合ハンドラ」をも備えることができ、すなわち(a)例えば(i)同じ変更単位が2つの場所で変更した場合の処理方法、(ii)変更単位が1つの場所で変更されるが別の場所で削除される場合の処理方法、および(iii)2つの異なる変更単位が同じ名前を2つの異なるロケーション内で有する場合の処理方法に基づいて、異なる競合を異なる方法で解決する競合「フィルタ」、(b)リストの各要素が、競合がうまく解決されるまで順番に試みるための一連のアクションを規定する、競合「ハンドラリスト」、および(c)競合を追跡するが、ユーザ介入なしにさらなるアクションを取らない、「何もしない」ログである。
V.結論
前述が例示するように、本発明は、データを編成、検索および共有するためのストレージプラットフォームを対象とする。本発明のストレージプラットフォームは、既存のファイルシステムおよびデータベースシステムを超えてデータストレージの概念を拡張および拡大し、リレーショナル(テーブル)データ、XML、および、アイテムと呼ばれる新しい形式のデータなど、構造化、非構造化、または半構造化データを含む、すべてのタイプのデータのためのストアとなるように設計される。その共通ストレージ基盤およびスキーマ化されたデータを通じて、本発明のストレージプラットフォームは、消費者、知識労働者および企業のためのより効率的なアプリケーション開発を可能にする。本発明のストレージプラットフォームは、そのデータモデル内に固有の機能を使用可能にするだけでなく、既存のファイルシステムおよびデータベースアクセス方法の包含および拡張をも行う、豊富で拡張可能なアプリケーションプログラミングインターフェースを提供する。その幅広い発明の概念から逸脱することなく、上述の実施形態に変更を行うことができることを理解されたい。したがって、本発明は、開示された特定の実施形態に限定されないが、付属の特許請求の範囲によって定義されるような本発明の精神および範囲内であるすべての修正を包含するように意図される。
上記から明らかであるように、本発明の様々なシステム、方法および態様の全部または一部を、プログラムコード(すなわち、命令)の形態において実施することができる。このプログラムコードをコンピュータ可読メディア上に格納することができ、コンピュータ可読メディアは、磁気、電気、または光ストレージメディアなどであり、限定なしに、フロピーディスク、CD−ROM、CD−RW、DVD−ROM、DVD−RAM、磁気テープ、フラッシュメモリ、ハードディスクドライブ、または他のいかなるマシン可読ストレージメディアもが含まれ、プログラムコードがコンピュータまたはサーバなどのマシンによってロードおよび実行される場合、マシンは本発明を実施するための装置となる。本発明はまた、電気配線またはケーブリングを介して、光ファイバーを通じて、インターネットまたはイントラネットを含むネットワークを介して、あるいは、他のいかなる形態の伝送をも介してなど、ある伝送メディアを介して送信されるプログラムコードの形態においても実施することができ、プログラムコードが、コンピュータなどのマシンによって受信され、ロードされ、実行される場合、マシンは本発明を実施するための装置となる。汎用プロセッサ上で実装される場合、プログラムコードはプロセッサと結合して、特定の論理回路と同じように動作する一意の装置を提供する。
本発明の態様を組み込むことができるコンピュータシステムを表すブロック図である。 3つのコンポーネントグループ、すなわち、ハードウェアコンポーネント、ハードウェア/ソフトウェアインターフェースシステムコンポーネント、およびアプリケーションプログラムコンポーネントに分割された、コンピュータシステムを例示するブロック図である。 ファイルベースのオペレーティングシステム内のディレクトリ内のフォルダにグループ化されたファイルのための従来のツリーベースの階層構造を例示する図である。 ストレージプラットフォームを例示するブロック図である。 アイテム、アイテムフォルダおよびカテゴリの間の構造リレーションシップを例示する図である。 アイテムの構造を例示するブロック図である。 図5Aのアイテムの複合プロパティタイプを例示するブロック図である。 「Location」アイテムを例示するブロック図であり、その複合タイプがさらに説明される(明示的にリストされる)図である。 アイテムを、ベーススキーマ内で発見されたアイテムのサブタイプとして例示する図である。 図6Aのサブタイプアイテムを例示するブロック図であり、その継承タイプが(その中間プロパティに加えて)明示的にリストされる図である。 その2つのトップレベルクラスタイプであるItemおよびPropertyBase、ならびに、それらから派生された追加のベーススキーマタイプを含む、ベーススキーマを例示するブロック図である。 コアスキーマ内のアイテムを例示するブロック図である。 コアスキーマ内のプロパティタイプを例示するブロック図である。 アイテムフォルダ、そのメンバアイテム、および、アイテムフォルダとそのメンバアイテムの間の相互接続リレーションシップを例示するブロック図である。 カテゴリ(これもまたアイテム自体である)、そのメンバアイテム、および、カテゴリとそのメンバアイテムの間の相互接続リレーションシップを例示するブロック図である。 ストレージプラットフォームのデータモデルの参照タイプ階層を例示する図である。 どのようにリレーションシップが分類されるかを例示する図である。 通知メカニズムを例示する図である。 2つのトランザクションが共に新しいレコードを同じBツリーに挿入中である、一実施例を例示する図である。 データ変更検出プロセスを例示する図である。 例示的ディレクトリツリーを例示する図である。 ディレクトリベースのファイルシステムの既存のフォルダがストレージプラットフォームデータストアに移動される、一実施例を示す図である。 包含フォルダの概念を例示する図である。 ストレージプラットフォームAPIの基本アーキテクチャを例示する図である。 ストレージプラットフォームAPIスタックの様々なコンポーネントを概略的に表現する図である。 例示的Contactアイテムスキーマの図表現の図である。 図21Aの例示的Contactアイテムスキーマのための要素の図表現の図である。 ストレージプラットフォームAPIのランタイムフレームワークを例示する図である。 「FindAll」オペレーションの実行を例示する図である。 ストレージプラットフォームAPIクラスがストレージプラットフォームスキーマから生成されるプロセスを例示する図である。 ファイルAPIがそれに基づくスキーマを例示する図である。 データセキュリティのために使用されたアクセスマスクフォーマットを例示する図である。 新しい等しく保護されたセキュリティ領域が既存のセキュリティ領域から切り開かれることを示す(パートa、bおよびc)の図である。 アイテム検索ビューの概念を例示する図である。 例示的アイテム階層を例示する図である。 インターフェースであるインターフェース1を、それを通じて第1および第2のコードセグメントが通信するコンジットとして例示する図である。 インターフェースを、システムの第1および第2のコードセグメントがメディアMを介して通信することを可能にする、インターフェースオブジェクトI1およびI2を備えるとして例示する図である。 インターフェースであるインターフェース1によって提供されたファンクションをどのように細分して、インターフェースの通信を複数のインターフェースであるインターフェース1A、インターフェース1B、インターフェース1Cに変換することができるかを例示する図である。 インターフェースI1によって提供されたファンクションをどのように複数のインターフェースI1a、I1b、I1cに細分することができるかを例示する図である。 無意味なパラメータ精度を無視するか、あるいは任意のパラメータにより置き換えることができるシナリオを例示する図である。 インターフェースが、パラメータを無視またはインターフェースに追加するように定義される代替インターフェースによって置き換えられるシナリオを例示する図である。 第1および第2のコードセグメントが、それらを両方とも含むモジュールにマージされるシナリオを例示する図である。 1つのインターフェースの一部または全部をインラインで別のインターフェースに書き込んで、マージされたインターフェースを形成することができるシナリオを例示する図である。 1つまたは複数のミドルウェアがどのように第1のインターフェース上の通信を変換して、それらを1つまたは複数の異なるインターフェースに適合させることができるかを例示する図である。 1つのインターフェースからの通信を受信するが、機能性を第2および第3のインターフェースに送信するために、どのようにコードセグメントをインターフェースにより導入することができるかを例示する図である。 ジャストインタイムコンパイラ(JIT)がどのようにあるコードセグメントから別のコードセグメントへ通信を変換することができるかを例示する図である。 1つまたは複数のインターフェースを動的に書き換えるJITメソッドをどのように、前記インターフェースを動的にファクタリングまたはそうでない場合は変更するように適用することができるかを例示する図である。 共通データストアの3つのインスタンスおよびそれらを同期化するためのコンポーネントを例示する図である。 どのように状態が計算されるか、またはその関連付けられたメタデータが交換されるかに気付かない単純なアダプタを仮定する、本発明の一実施形態を例示する図である。 例外およびそれに対する解決法を強調するために、順次変更エニュメレーション方法を使用して、変更がどのように追跡、エニュメレートおよび同期化されるかを例示する図である。 例外およびそれに対する解決法を強調するために、順次変更エニュメレーション方法を使用して、変更がどのように追跡、エニュメレートおよび同期化されるかを例示する図である。 例外およびそれに対する解決法を強調するために、順次変更エニュメレーション方法を使用して、変更がどのように追跡、エニュメレートおよび同期化されるかを例示する図である。 例外およびそれに対する解決法を強調するために、順次変更エニュメレーション方法を使用して、変更がどのように追跡、エニュメレートおよび同期化されるかを例示する図である。 本発明のいくつかの実施形態のための競合処理パイプラインを例示する図である。 図39Aに例示されたパイプラインの論理的トラバーサルを例示する流れ図である。 本発明のいくつかの実施形態のための、競合アイテムがターゲットアイテムのコピーと共にログされる一実施例を例示するブロック図である。
符号の説明
20 コンピュータ
21 処理装置
22 システムメモリ
23 システムバス
27 ハードドライブ
28 フロッピー(登録商標)ドライブ
29 リムーバブルストレージ
30 光ドライブ
32 ハードディスクドライブI/F
33 磁気ディスクドライブI/F
34 光ドライブI/F
36 アプリケーションプログラム
36’ アプリケーション
37 他のプログラム
38 プログラムデータ
40 キーボード
42 マウス
46 シリアルポートI/F
47 モニタ
48 ビデオアダプタ
49 リモートコンピュータ
50 フロッピー(登録商標)ドライブ
53 ネットワークI/F
54 モデム
55 ホストアダプタ
56 SCSIバス
62 ストレージデバイス

Claims (24)

  1. ピアツーピア同期化システムにおける競合を処理するための方法であって、
    前記ピアツーピア同期化システムが、データの変更に関する前記競合を検出するステップであって、前記競合は、同期化オペレーション中にデータストア内に格納可能なデータの単位であるアイテムに関するデータの変更を適用することができない場合に生じる、ステップと、
    前記ピアツーピア同期化システムが、第1の競合アイテムを作成するステップであって、前記第1の競合アイテムは、特定のデータの単位に対する変更に関係し、前記変更がなされた前記特定のデータの単位は、特定の変更単位を定める、ステップと、
    前記ピアツーピア同期化システムが、前記第1の競合アイテムを永続的データストアにログするステップであって、前記第1の競合アイテムは、前記特定のデータの単位に対する変更に関連する情報を備える、ステップとを備え、
    前記ログするステップは、
    前記永続的データストアを検索し、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがあるかどうかを判定するステップと、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、前記先在の競合アイテムのデータの単位に対する変更が前記第1の競合アイテムの前記データの単位に対する変更によって包含される場合に前記先在の競合アイテムを除去するステップと、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、前記第1の競合アイテムのデータの単位に対する変更が前記先在の競合アイテムの前記データの単位に対する変更によって包含される場合に前記第1の競合アイテムを除去するステップと、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、および、前記第1の競合アイテムの前記データの単位に対する変更が前記先在の競合アイテムの前記データの単位に対する変更によって包含されない場合、および、前記先在の競合アイテムの前記データの単位に対する変更が前記第1の競合アイテムの前記データの単位に対する変更によって包含されない場合、前記先在の競合アイテムを前記永続的データストア内で保持し、前記第1の競合アイテムを前記永続的データストアに追加するステップと
    を備えることを特徴とする方法。
  2. 前記ピアツーピア同期化システムが、少なくとも1つの競合ハンドラが規定された競合解決ポリシーに従って前記競合を自動的に解決するステップであって、前記競合ハンドラは、前記競合を評価して前記競合を所定の競合ハンドラに渡すかどうかを判定するフィルタ、前記競合の解決を試みるリゾルバ、及び前記第1の競合アイテムを前記永続的データストア内にログするロガーからなるグループのうちの1つであるステップをさらに備えることを特徴とする請求項1に記載の方法。
  3. 前記競合ハンドラはアイテムであり、拡張可能であり、前記競合ハンドラのグループは作成可能および拡張可能であることを特徴とする請求項2に記載の方法。
  4. 前記競合解決ポリシーは、競合処理パイプラインを備える少なくとも2つの競合ハンドラが規定されていることを特徴とする請求項3に記載の方法。
  5. 前記ピアツーピア同期化システムが、前記データストア内の古くなった競合アイテムの除去を含む、古くなった競合の自動検出および除去するステップをさらに備えることを特徴とする請求項2に記載の方法。
  6. ターゲットアイテムのコピーは、前記競合を起こす前記変更を反映することを特徴とする請求項に記載の方法。
  7. ピアツーピア同期化システムにおける競合を処理するためのシステムであって、
    データの変更に関する前記競合を検出するためのサブシステムであって、前記競合は、同期化オペレーション中にデータストア内に格納可能なデータの単位であるアイテムに関するデータの変更を適用することができない場合に生じる、サブシステムと、
    第1の競合アイテムを作成するためのサブシステムであって、前記第1の競合アイテムは、特定のデータの単位に対する変更に関係し、前記変更がなされた前記特定のデータの単位は、特定の変更単位を定める、サブシステムと、
    前記第1の競合アイテムを永続的データストアにログするためのサブシステムであって、前記第1の競合アイテムは、前記特定のデータの単位に対する変更に関連する情報を備える、サブシステムと、
    前記競合を解決するためのサブシステムとを備え、
    前記ログするためのサブシステムは、
    前記永続的データストアを検索し、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがあるかどうかを判定するためのサブシステムと、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、前記先在の競合アイテムのデータの単位に対する変更が前記第1の競合アイテムの前記データの単位に対する変更によって包含される場合に前記先在の競合アイテムを除去するためのサブシステムと、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、前記第1の競合アイテムのデータの単位に対する変更が前記先在の競合アイテムの前記データの単位に対する変更によって包含される場合に前記第1の競合アイテムを除去するためのサブシステムと、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、および、前記第1の競合アイテムの前記データの単位に対する変更が前記先在の競合アイテムの前記データの単位に対する変更によって包含されない場合、および、前記先在の競合アイテムの前記データの単位に対する変更が前記第1の競合アイテムの前記データの単位に対する変更によって包含されない場合、前記先在の競合アイテムを前記永続的データストア内で保持し、前記第1の競合アイテムを前記永続的データストアに追加するためのサブシステムと
    を備えることを特徴とするシステム。
  8. 少なくとも1つの競合ハンドラが規定された競合解決ポリシーに従って前記競合を自動的に解決するためのサブシステムであって、前記競合ハンドラは、前記競合を評価して前記競合を所定の競合ハンドラに渡すかどうかを判定するフィルタ、前記競合の解決を試みるリゾルバ、及び前記第1の競合アイテムを前記永続的データストア内にログするロガーからなるグループのうちの1つであるサブシステムと
    をさらに備えることを特徴とする請求項に記載のシステム。
  9. 拡張可能な競合ハンドラと、
    作成可能および拡張可能な競合ハンドラのグループと
    をさらに備えることを特徴とする請求項に記載のシステム。
  10. 競合処理パイプラインをさらに備え、前記競合処理パイプラインは少なくとも2つの競合ハンドラを備えることを特徴とする請求項に記載のシステム。
  11. 前記データストア内の古くなった競合アイテムの除去を含む、古くなった競合の自動検出および除去のためのサブシステムをさらに備えることを特徴とする請求項に記載のシステム。
  12. ターゲットアイテムのコピーを、前記競合を起こす前記変更を反映するように修正するためのサブシステムをさらに備えることを特徴とする請求項に記載のシステム。
  13. ピアツーピア同期化システムにおける競合を処理するための方法を実行するためのコンピュータ可読命令を格納したコンピュータ可読記録媒体であって、
    前記ピアツーピア同期化システムが、データの変更に関する前記競合を検出するステップであって、前記競合は、同期化オペレーション中にデータストア内に格納可能なデータの単位であるアイテムに関するデータの変更を適用することができない場合に生じる、ステップと、
    前記ピアツーピア同期化システムが、第1の競合アイテムを作成するステップであって、前記第1の競合アイテムは、特定のデータの単位に対する変更に関係し、前記変更がなされた前記特定のデータの単位は、特定の変更単位を定める、ステップと、
    前記ピアツーピア同期化システムが、前記第1の競合アイテムを永続的データストアにログするステップであって、前記第1の競合アイテムは、前記特定のデータの単位に対する変更に関連する情報を備える、ステップとを備え、
    前記ログするステップは、
    前記永続的データストアを検索し、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがあるかどうかを判定するステップと、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、前記先在の競合アイテムのデータの単位に対する変更が前記第1の競合アイテムの前記データの単位に対する変更によって包含される場合に前記先在の競合アイテムを除去するステップと、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、前記第1の競合アイテムのデータの単位に対する変更が前記先在の競合アイテムの前記データの単位に対する変更によって包含される場合に前記第1の競合アイテムを除去するステップと、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、および、前記第1の競合アイテムの前記データの単位に対する変更が前記先在の競合アイテムの前記データの単位に対する変更によって包含されない場合、および、前記先在の競合アイテムの前記データの単位に対する変更が前記第1の競合アイテムの前記データの単位に対する変更によって包含されない場合、前記先在の競合アイテムを前記永続的データストア内で保持し、前記第1の競合アイテムを前記永続的データストアに追加するステップと
    を備える方法実行するためのコンピュータ可読命令を格納したことを特徴とするコンピュータ可読記録媒体
  14. 前記方法は、前記ピアツーピア同期化システムが、少なくとも1つの競合ハンドラが規定された競合解決ポリシーに従って前記競合を自動的に解決するステップであって、前記競合ハンドラは、前記競合を評価して前記競合を所定の競合ハンドラに渡すかどうかを判定するフィルタ、前記競合の解決を試みるリゾルバ、及び前記第1の競合アイテムを前記永続的データストア内にログするロガーからなるグループのうちの1つであるステップをさらに備えることを特徴とする請求項13に記載のコンピュータ可読記録媒体
  15. 前記競合ハンドラはアイテムであり、拡張可能であり、
    前記競合ハンドラのグループは作成可能および拡張可能であることを特徴とする請求項14に記載のコンピュータ可読記録媒体
  16. 前記競合解決ポリシーは、競合処理パイプラインを備える少なくとも2つの競合ハンドラが規定されていることを特徴とする請求項15に記載のコンピュータ可読記録媒体
  17. 前記方法は、前記ピアツーピア同期化システムが、前記データストア内の古くなった競合アイテムの除去を含む、古くなった競合の自動検出および除去するステップをさらに備えることを特徴とする請求項14に記載のコンピュータ可読記録媒体
  18. ターゲットアイテムのコピーは、前記競合を起こす前記変更を反映することを特徴とする請求項13に記載のコンピュータ可読記録媒体
  19. ピアツーピア同期化システムにおける競合を処理するためのハードウェアコントロールデバイスであって、
    データの変更に関する前記競合を検出する手段であって、前記競合は、同期化オペレーション中にデータストア内に格納可能なデータの単位であるアイテムに関するデータの変更を適用することができない場合に生じる、手段と、
    第1の競合アイテムを作成する手段であって、前記第1の競合アイテムは、特定のデータの単位に対する変更に関係し、前記変更がなされた前記特定のデータの単位は、特定の変更単位を定める、手段と、
    前記第1の競合アイテムを永続的データストアにログする手段であって、前記第1の競合アイテムは、前記特定のデータの単位に対する変更に関連する情報を備える、手段とを備え、
    前記ログする手段は、
    前記永続的データストアを検索し、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがあるかどうかを判定する手段と、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、前記先在の競合アイテムのデータの単位に対する変更が前記第1の競合アイテムの前記データの単位に対する変更によって包含される場合に前記先在の競合アイテムを除去する手段と、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、前記第1の競合アイテムのデータの単位に対する変更が前記先在の競合アイテムの前記データの単位に対する変更によって包含される場合に前記第1の競合アイテムを除去する手段と、
    前記永続的データストア内に、前記第1の競合アイテムと同じ特定の変更単位についてすでに存在する先在の競合アイテムがある場合、および、前記第1の競合アイテムの前記データの単位に対する変更が前記先在の競合アイテムの前記データの単位に対する変更によって包含されない場合、および、前記先在の競合アイテムの前記データの単位に対する変更が前記第1の競合アイテムの前記データの単位に対する変更によって包含されない場合、前記先在の競合アイテムを前記永続的データストア内で保持し、前記第1の競合アイテムを前記永続的データストアに追加する手段と
    を備えることを特徴とするハードウェアコントロールデバイス。
  20. 少なくとも1つの競合ハンドラが規定された競合解決ポリシーに従って前記競合を自動的に解決する手段であって、前記競合ハンドラは、前記競合を評価して前記競合を所定の競合ハンドラに渡すかどうかを判定するフィルタ、前記競合の解決を試みるリゾルバ、及び前記第1の競合アイテムを前記永続的データストア内にログするロガーからなるグループのうちの1つである手段と
    をさらに備えることを特徴とする請求項19に記載のハードウェアコントロールデバイス。
  21. 前記競合ハンドラを拡張可能アイテムとする手段と、
    前記競合ハンドラのグループを作成可能および拡張可能とする手段と
    をさらに備えることを特徴とする請求項20に記載のハードウェアコントロールデバイス。
  22. 前記競合解決ポリシーは、競合処理パイプラインを備える少なくとも2つの競合ハンドラが規定されていることを特徴とする請求項20に記載のハードウェアコントロールデバイス。
  23. 前記データストア内の古くなった競合アイテムの除去を含む、古くなった競合の自動検出および除去の手段をさらに備えることを特徴とする請求項19に記載のハードウェアコントロールデバイス。
  24. ターゲットアイテムのコピーは、前記競合を起こす前記変更を反映する、手段をさらに備えることを特徴とする請求項19に記載のハードウェアコントロールデバイス。
JP2005175754A 2004-06-30 2005-06-15 ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報の単位のピアツーピア同期化のための競合処理を提供するためのシステムおよび方法 Expired - Fee Related JP4738908B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/883,621 2004-06-30
US10/883,621 US7512638B2 (en) 2003-08-21 2004-06-30 Systems and methods for providing conflict handling for peer-to-peer synchronization of units of information manageable by a hardware/software interface system

Publications (2)

Publication Number Publication Date
JP2006018821A JP2006018821A (ja) 2006-01-19
JP4738908B2 true JP4738908B2 (ja) 2011-08-03

Family

ID=35159817

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005175754A Expired - Fee Related JP4738908B2 (ja) 2004-06-30 2005-06-15 ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報の単位のピアツーピア同期化のための競合処理を提供するためのシステムおよび方法

Country Status (4)

Country Link
US (1) US7512638B2 (ja)
EP (1) EP1612702A1 (ja)
JP (1) JP4738908B2 (ja)
KR (1) KR101041319B1 (ja)

Families Citing this family (144)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9134989B2 (en) 2002-01-31 2015-09-15 Qualcomm Incorporated System and method for updating dataset versions resident on a wireless device
US20040068724A1 (en) * 2002-08-30 2004-04-08 Gardner Richard Wayne Server processing for updating dataset versions resident on a wireless device
US7565419B1 (en) * 2002-11-22 2009-07-21 Symantec Operating Corporation Conflict resolution in a peer to peer network
US9092286B2 (en) * 2002-12-20 2015-07-28 Qualcomm Incorporated System to automatically process components on a device
US7756825B2 (en) * 2003-07-31 2010-07-13 Microsoft Corporation Synchronization peer participant model
US7440985B2 (en) * 2003-07-31 2008-10-21 Microsoft Corporation Filtered replication of data stores
US7401104B2 (en) * 2003-08-21 2008-07-15 Microsoft Corporation Systems and methods for synchronizing computer systems through an intermediary file system share or device
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
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
US8626146B2 (en) 2003-10-29 2014-01-07 Qualcomm Incorporated Method, software and apparatus for performing actions on a wireless device using action lists and versioning
US7778962B2 (en) * 2004-04-30 2010-08-17 Microsoft Corporation Client store synchronization through intermediary store change packets
US20070271317A1 (en) * 2004-08-16 2007-11-22 Beinsync Ltd. System and Method for the Synchronization of Data Across Multiple Computing Devices
US8996486B2 (en) * 2004-12-15 2015-03-31 Applied Invention, Llc Data store with lock-free stateless paging capability
US8275804B2 (en) 2004-12-15 2012-09-25 Applied Minds, Llc Distributed data store with a designated master to ensure consistency
US7774308B2 (en) * 2004-12-15 2010-08-10 Applied Minds, Inc. Anti-item for deletion of content in a distributed datastore
US11321408B2 (en) 2004-12-15 2022-05-03 Applied Invention, Llc Data store with lock-free stateless paging capacity
US7392263B2 (en) * 2005-02-28 2008-06-24 Microsoft Corporation File system represented inside a database
US7685561B2 (en) * 2005-02-28 2010-03-23 Microsoft Corporation Storage API for a common data platform
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
US7620668B2 (en) * 2005-05-06 2009-11-17 Microsoft Corporation Authoritative and non-authoritative restore
KR100725393B1 (ko) * 2005-05-19 2007-06-07 삼성전자주식회사 자바 가상 머신에서 바이트 코드의 수행 시간을 줄이는시스템 및 방법
US8495015B2 (en) * 2005-06-21 2013-07-23 Apple Inc. Peer-to-peer syncing in a decentralized environment
US7523146B2 (en) 2005-06-21 2009-04-21 Apple Inc. Apparatus and method for peer-to-peer N-way synchronization in a decentralized environment
US20070014277A1 (en) * 2005-07-14 2007-01-18 Yahoo! Inc. Content router repository
US20070038703A1 (en) * 2005-07-14 2007-02-15 Yahoo! Inc. Content router gateway
US20070014307A1 (en) * 2005-07-14 2007-01-18 Yahoo! Inc. Content router forwarding
US7849199B2 (en) * 2005-07-14 2010-12-07 Yahoo ! Inc. Content router
US7623515B2 (en) * 2005-07-14 2009-11-24 Yahoo! Inc. Content router notification
US7631045B2 (en) * 2005-07-14 2009-12-08 Yahoo! Inc. Content router asynchronous exchange
US7962585B2 (en) * 2005-08-15 2011-06-14 Microsoft Corporation Partial item change tracking and synchronization
US8065680B2 (en) * 2005-11-15 2011-11-22 Yahoo! Inc. Data gateway for jobs management based on a persistent job table and a server table
US8291101B1 (en) * 2005-12-08 2012-10-16 Juniper Networks, Inc. Synchronization of mutually shared data stored on network devices
US20070192080A1 (en) * 2006-01-31 2007-08-16 Carpenter Bryan F Data tree structure for automatic retention of context information
US7606838B2 (en) * 2006-02-22 2009-10-20 Microsoft Corporation Distributed conflict resolution for replicated databases
WO2007113836A2 (en) * 2006-04-03 2007-10-11 Beinsync Ltd. Peer to peer syncronization system and method
US7890646B2 (en) * 2006-04-27 2011-02-15 Microsoft Corporation Synchronization orchestration
US7792792B2 (en) * 2006-05-22 2010-09-07 Microsoft Corporation Synchronizing structured web site contents
US7925781B1 (en) * 2006-05-26 2011-04-12 The Hong Kong University Of Science And Technology Distributed storage to support user interactivity in peer-to-peer video streaming
US7769727B2 (en) * 2006-05-31 2010-08-03 Microsoft Corporation Resolving update-delete conflicts
US7805408B2 (en) * 2006-06-09 2010-09-28 Microsoft Corporation Unified mechanism for presenting and resolving grouped synchronization conflicts
US8024762B2 (en) * 2006-06-13 2011-09-20 Time Warner Cable Inc. Methods and apparatus for providing virtual content over a network
US7539827B2 (en) * 2006-07-19 2009-05-26 Microsoft Corporation Synchronization of change-tracked data store with data store having limited or no change tracking
US20080103977A1 (en) * 2006-10-31 2008-05-01 Microsoft Corporation Digital rights management for distributed devices
US20080104206A1 (en) * 2006-10-31 2008-05-01 Microsoft Corporation Efficient knowledge representation in data synchronization systems
US8515912B2 (en) 2010-07-15 2013-08-20 Palantir Technologies, Inc. Sharing and deconflicting data changes in a multimaster database system
US7778282B2 (en) * 2006-12-18 2010-08-17 Microsoft Corporation Propagation of conflict knowledge
US7657769B2 (en) * 2007-01-08 2010-02-02 Marcy M Scott N-way synchronization of data
US7620659B2 (en) * 2007-02-09 2009-11-17 Microsoft Corporation Efficient knowledge representation in data synchronization systems
BRPI0812543A2 (pt) * 2007-06-19 2015-09-29 Qualcomm Inc métodos e aparelho para sincronização de conjunto de dados em um ambiente sem fio
US20090024558A1 (en) * 2007-07-16 2009-01-22 Sap Ag Methods and systems for storing and retrieving rejected data
US20090083441A1 (en) * 2007-09-24 2009-03-26 Microsoft Corporation Synchronization of web service endpoints in a multi-master synchronization environment
US9135321B2 (en) * 2008-02-06 2015-09-15 Microsoft Technology Licensing, Llc Synchronization infrastructure for networked devices, applications and services in a loosely coupled multi-master synchronization environment
US7979393B2 (en) * 2008-02-22 2011-07-12 Microsoft Corporation Multiphase topology-wide code modifications for peer-to-peer systems
US20090315766A1 (en) 2008-06-19 2009-12-24 Microsoft Corporation Source switching for devices supporting dynamic direction information
US8700301B2 (en) 2008-06-19 2014-04-15 Microsoft Corporation Mobile computing devices, architecture and user interfaces based on dynamic direction information
US20090319166A1 (en) * 2008-06-20 2009-12-24 Microsoft Corporation Mobile computing services based on devices with dynamic direction information
US20090315775A1 (en) * 2008-06-20 2009-12-24 Microsoft Corporation Mobile computing services based on devices with dynamic direction information
US8467991B2 (en) * 2008-06-20 2013-06-18 Microsoft Corporation Data services based on gesture and location information of device
US8090681B2 (en) * 2008-06-26 2012-01-03 Microsoft Corporation Resolving conflicts in content management systems
US9477727B2 (en) * 2008-08-01 2016-10-25 Sybase, Inc. Abstracting data for use by a mobile device having occasional connectivity
US10303787B2 (en) 2008-10-21 2019-05-28 Microsoft Technology Licensing, Llc Forgetting items with knowledge based synchronization
US8412676B2 (en) * 2008-10-21 2013-04-02 Microsoft Corporation Forgetting items with knowledge based synchronization
US20100228612A1 (en) * 2009-03-09 2010-09-09 Microsoft Corporation Device transaction model and services based on directional information of device
EP2528303B1 (en) * 2009-04-08 2014-07-02 BlackBerry Limited System and method for sharing data in a group of mobile devices
US8254890B2 (en) 2009-04-08 2012-08-28 Research In Motion Limited System and method for managing items in a list shared by a group of mobile devices
US9065868B2 (en) * 2009-04-08 2015-06-23 Blackberry Limited System and method for sharing data in a group of mobile devices
US9917702B2 (en) * 2009-04-08 2018-03-13 Blackberry Limited System and method for managing items in a list shared by a group of mobile devices
US20100332324A1 (en) * 2009-06-25 2010-12-30 Microsoft Corporation Portal services based on interactions with points of interest discovered via directional device information
US8473543B2 (en) 2009-07-06 2013-06-25 Microsoft Corporation Automatic conflict resolution when synchronizing data objects between two or more devices
US8872767B2 (en) 2009-07-07 2014-10-28 Microsoft Corporation System and method for converting gestures into digital graffiti
GB2468742B (en) * 2009-12-22 2011-01-12 Celona Technologies Ltd Error prevention for data replication
US8788458B2 (en) 2009-12-30 2014-07-22 Sybase, Inc. Data caching for mobile applications
US8909662B2 (en) * 2009-12-30 2014-12-09 Sybase, Inc. Message based mobile object with native PIM integration
US9336291B2 (en) 2009-12-30 2016-05-10 Sybase, Inc. Message based synchronization for mobile business objects
US8572022B2 (en) * 2010-03-02 2013-10-29 Microsoft Corporation Automatic synchronization conflict resolution
US20110282850A1 (en) * 2010-05-11 2011-11-17 Microsoft Corporation Concurrently Accessing Data
US9436502B2 (en) 2010-12-10 2016-09-06 Microsoft Technology Licensing, Llc Eventually consistent storage and transactions in cloud based environment
US9009726B2 (en) * 2010-12-10 2015-04-14 Microsoft Technology Licensing, Llc Deterministic sharing of data among concurrent tasks using pre-defined deterministic conflict resolution policies
US10102242B2 (en) 2010-12-21 2018-10-16 Sybase, Inc. Bulk initial download of mobile databases
US9110807B2 (en) 2012-05-23 2015-08-18 Sybase, Inc. Cache conflict detection
US8874682B2 (en) 2012-05-23 2014-10-28 Sybase, Inc. Composite graph cache management
US9779260B1 (en) 2012-06-11 2017-10-03 Dell Software Inc. Aggregation and classification of secure data
US9081975B2 (en) 2012-10-22 2015-07-14 Palantir Technologies, Inc. Sharing information between nexuses that use different classification schemes for information access control
US9501761B2 (en) 2012-11-05 2016-11-22 Palantir Technologies, Inc. System and method for sharing investigation results
CN103873495B (zh) * 2012-12-10 2019-01-15 联想(北京)有限公司 文件同步的方法和使用该方法的电子设备
US10182054B2 (en) 2013-03-14 2019-01-15 Open Text Sa Ulc Systems, methods and computer program products for information integration across disparate information systems
US9898537B2 (en) 2013-03-14 2018-02-20 Open Text Sa Ulc Systems, methods and computer program products for information management across disparate information systems
US10073956B2 (en) 2013-03-14 2018-09-11 Open Text Sa Ulc Integration services systems, methods and computer program products for ECM-independent ETL tools
KR101310070B1 (ko) 2013-06-26 2013-09-24 (주)지란지교소프트 프로그램간의 충돌을 예방하는 방법 및 그 방법이 기록된 기록매체
US9053165B2 (en) 2013-07-08 2015-06-09 Dropbox, Inc. Structured content item synchronization
US9626176B2 (en) 2013-09-13 2017-04-18 Microsoft Technology Licensing, Llc Update installer with technical impact analysis
US9665359B2 (en) * 2013-09-13 2017-05-30 Microsoft Technology Licensing, Llc Automatically resolving conflicts after installation of selected updates in a computer system
US10026064B2 (en) 2013-09-13 2018-07-17 Microsoft Technology Licensing, Llc Automatically recommending updates based on stored lifecycle information
US9830142B2 (en) 2013-09-13 2017-11-28 Microsoft Technology Licensing, Llc Automatic installation of selected updates in multiple environments
US9569070B1 (en) * 2013-11-11 2017-02-14 Palantir Technologies, Inc. Assisting in deconflicting concurrency conflicts
US20150161123A1 (en) * 2013-12-09 2015-06-11 Microsoft Corporation Techniques to diagnose live services
US9262344B2 (en) 2013-12-17 2016-02-16 International Business Machines Corporation Local locking in a bi-directional synchronous mirroring environment
US10091287B2 (en) 2014-04-08 2018-10-02 Dropbox, Inc. Determining presence in an application accessing shared and synchronized content
US9998555B2 (en) 2014-04-08 2018-06-12 Dropbox, Inc. Displaying presence in an application accessing shared and synchronized content
US10270871B2 (en) 2014-04-08 2019-04-23 Dropbox, Inc. Browser display of native application presence and interaction data
US10171579B2 (en) 2014-04-08 2019-01-01 Dropbox, Inc. Managing presence among devices accessing shared and synchronized content
US9853863B1 (en) 2014-10-08 2017-12-26 Servicenow, Inc. Collision detection using state management of configuration items
US10769826B2 (en) 2014-12-31 2020-09-08 Servicenow, Inc. Visual task board visualization
US11579774B2 (en) 2015-01-20 2023-02-14 Ultrata, Llc Object memory data flow triggers
WO2016118630A1 (en) 2015-01-20 2016-07-28 Ultrata Llc Utilization of a distributed index to provide object memory fabric coherency
US10411951B2 (en) 2015-02-10 2019-09-10 Hewlett Packard Enterprise Development Lp Network policy conflict detection and resolution
US10326748B1 (en) 2015-02-25 2019-06-18 Quest Software Inc. Systems and methods for event-based authentication
US9846528B2 (en) 2015-03-02 2017-12-19 Dropbox, Inc. Native application collaboration
US10417613B1 (en) 2015-03-17 2019-09-17 Quest Software Inc. Systems and methods of patternizing logged user-initiated events for scheduling functions
IN2015CH01317A (ja) * 2015-03-18 2015-04-10 Wipro Ltd
US9990506B1 (en) 2015-03-30 2018-06-05 Quest Software Inc. Systems and methods of securing network-accessible peripheral devices
US9852147B2 (en) 2015-04-01 2017-12-26 Dropbox, Inc. Selective synchronization and distributed content item block caching for multi-premises hosting of digital content items
US9922201B2 (en) 2015-04-01 2018-03-20 Dropbox, Inc. Nested namespaces for selective content sharing
US10963430B2 (en) 2015-04-01 2021-03-30 Dropbox, Inc. Shared workspaces with selective content item synchronization
US9842220B1 (en) 2015-04-10 2017-12-12 Dell Software Inc. Systems and methods of secure self-service access to content
US11468101B2 (en) * 2015-05-29 2022-10-11 Kuni Ahi LLC Context-rich key framework implementations for global concept management
US10698628B2 (en) 2015-06-09 2020-06-30 Ultrata, Llc Infinite memory fabric hardware implementation with memory
US9886210B2 (en) 2015-06-09 2018-02-06 Ultrata, Llc Infinite memory fabric hardware implementation with router
US9971542B2 (en) 2015-06-09 2018-05-15 Ultrata, Llc Infinite memory fabric streams and APIs
US10536352B1 (en) * 2015-08-05 2020-01-14 Quest Software Inc. Systems and methods for tuning cross-platform data collection
US10218588B1 (en) 2015-10-05 2019-02-26 Quest Software Inc. Systems and methods for multi-stream performance patternization and optimization of virtual meetings
US10157358B1 (en) 2015-10-05 2018-12-18 Quest Software Inc. Systems and methods for multi-stream performance patternization and interval-based prediction
US10691718B2 (en) 2015-10-29 2020-06-23 Dropbox, Inc. Synchronization protocol for multi-premises hosting of digital content items
US9571573B1 (en) 2015-10-29 2017-02-14 Dropbox, Inc. Peer-to-peer synchronization protocol for multi-premises hosting of digital content items
CA3006773A1 (en) 2015-12-08 2017-06-15 Ultrata, Llc Memory fabric software implementation
US10248337B2 (en) 2015-12-08 2019-04-02 Ultrata, Llc Object memory interfaces across shared links
CN108885607B (zh) 2015-12-08 2022-04-12 乌尔特拉塔有限责任公司 使用容错对象的存储器结构操作和一致性
US10241676B2 (en) 2015-12-08 2019-03-26 Ultrata, Llc Memory fabric software implementation
US10248933B2 (en) 2015-12-29 2019-04-02 Dropbox, Inc. Content item activity feed for presenting events associated with content items
US10620811B2 (en) 2015-12-30 2020-04-14 Dropbox, Inc. Native application collaboration
US9537952B1 (en) 2016-01-29 2017-01-03 Dropbox, Inc. Apparent cloud access for hosted content items
US10142391B1 (en) 2016-03-25 2018-11-27 Quest Software Inc. Systems and methods of diagnosing down-layer performance problems via multi-stream performance patternization
US10382502B2 (en) 2016-04-04 2019-08-13 Dropbox, Inc. Change comments for synchronized content items
US10635559B2 (en) 2016-11-29 2020-04-28 International Business Machines Corporation Maintaining data integrity over multiple applications
US20180173778A1 (en) * 2016-12-16 2018-06-21 Linkedin Corporation Database uniqueness constraints
JP2018125728A (ja) * 2017-02-01 2018-08-09 富士ゼロックス株式会社 情報処理装置及びプログラム
US20190239037A1 (en) * 2018-02-01 2019-08-01 Blackberry Limited System and method for managing items in a list shared by a group of mobile devices
US10769172B2 (en) 2018-03-28 2020-09-08 Hewlett Packard Enterprise Development Lp Globalized object names in a global namespace
US11086757B1 (en) * 2019-06-12 2021-08-10 Express Scripts Strategic Development, Inc. Systems and methods for providing stable deployments to mainframe environments
US11720347B1 (en) 2019-06-12 2023-08-08 Express Scripts Strategic Development, Inc. Systems and methods for providing stable deployments to mainframe environments
US11321159B2 (en) 2019-07-03 2022-05-03 Red Hat, Inc. Interchangeable plugins for detecting conflicts between server-side data and client-side data
US11290531B2 (en) 2019-12-04 2022-03-29 Dropbox, Inc. Immediate cloud content item creation from local file system interface
US11803571B2 (en) 2021-02-04 2023-10-31 Hewlett Packard Enterprise Development Lp Transfer of synchronous and asynchronous replication
US20230259505A1 (en) * 2022-01-26 2023-08-17 Oracle International Corporation Future transaction processing

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US198891A (en) * 1878-01-01 Improvement in injectors
US91702A (en) * 1869-06-22 Improvement in velocipede
US152422A (en) * 1874-06-23 Improvement in machines for cutting cork
US5900870A (en) * 1989-06-30 1999-05-04 Massachusetts Institute Of Technology Object-oriented computer user interface
US6078925A (en) * 1995-05-01 2000-06-20 International Business Machines Corporation Computer program product for database relational extenders
US5806074A (en) * 1996-03-19 1998-09-08 Oracle Corporation Configurable conflict resolution in a computer implemented distributed database
US6112024A (en) * 1996-10-02 2000-08-29 Sybase, Inc. Development system providing methods for managing different versions of objects with a meta model
US6240414B1 (en) * 1997-09-28 2001-05-29 Eisolutions, Inc. Method of resolving data conflicts in a shared data environment
US6108004A (en) * 1997-10-21 2000-08-22 International Business Machines Corporation GUI guide for data mining
US6263342B1 (en) * 1998-04-01 2001-07-17 International Business Machines Corp. Federated searching of heterogeneous datastores using a federated datastore object
US6317754B1 (en) * 1998-07-03 2001-11-13 Mitsubishi Electric Research Laboratories, Inc System for user control of version /Synchronization in mobile computing
US6519597B1 (en) * 1998-10-08 2003-02-11 International Business Machines Corporation Method and apparatus for indexing structured documents with rich data types
US6338056B1 (en) * 1998-12-14 2002-01-08 International Business Machines Corporation Relational database extender that supports user-defined index types and user-defined search
US6199195B1 (en) * 1999-07-08 2001-03-06 Science Application International Corporation Automatically generated objects within extensible object frameworks and links to enterprise resources
US6393434B1 (en) * 1999-09-14 2002-05-21 International Business Machines Corporation Method and system for synchronizing data using fine-grained synchronization plans
US6370541B1 (en) * 1999-09-21 2002-04-09 International Business Machines Corporation Design and implementation of a client/server framework for federated multi-search and update across heterogeneous datastores
US6556983B1 (en) * 2000-01-12 2003-04-29 Microsoft Corporation Methods and apparatus for finding semantic information, such as usage logs, similar to a query using a pattern lattice data space
US6820088B1 (en) 2000-04-10 2004-11-16 Research In Motion Limited System and method for synchronizing data records between multiple databases
US6999956B2 (en) 2000-11-16 2006-02-14 Ward Mullins Dynamic object-driven database manipulation and mapping system
US6892210B1 (en) * 2000-12-29 2005-05-10 Worldsync, Inc. Database management and synchronization across a peer-to-peer network
EP1410202B1 (en) 2001-03-16 2006-07-26 Novell, Inc. Client-server model for synchronization of files
KR100445194B1 (ko) * 2001-03-23 2004-08-18 주식회사 알티베이스 데이터베이스 이중화 방법
US6877111B2 (en) 2001-03-26 2005-04-05 Sun Microsystems, Inc. Method and apparatus for managing replicated and migration capable session state for a Java platform
US6920452B2 (en) * 2001-04-26 2005-07-19 International Business Machines Corporation Sound pattern feedback for informational events during typing
US6697818B2 (en) 2001-06-14 2004-02-24 International Business Machines Corporation Methods and apparatus for constructing and implementing a universal extension module for processing objects in a database
US6772178B2 (en) * 2001-07-27 2004-08-03 Sun Microsystems, Inc. Method and apparatus for managing remote data replication in a distributed computer system
US7089298B2 (en) * 2001-08-20 2006-08-08 Nokia Corporation Naming distribution method for ad hoc networks
US6983293B2 (en) * 2002-07-24 2006-01-03 International Business Machines Corporation Mid-tier-based conflict resolution method and system usable for message synchronization and replication
US7146385B1 (en) * 2004-03-04 2006-12-05 Sun Microsystems, Inc. System and method for application-transparent synchronization with a persistent data store

Also Published As

Publication number Publication date
KR20060047761A (ko) 2006-05-18
US20050044187A1 (en) 2005-02-24
EP1612702A1 (en) 2006-01-04
JP2006018821A (ja) 2006-01-19
KR101041319B1 (ko) 2011-06-14
US7512638B2 (en) 2009-03-31

Similar Documents

Publication Publication Date Title
JP4738908B2 (ja) ハードウェア/ソフトウェアインターフェースシステムにより管理可能な情報の単位のピアツーピア同期化のための競合処理を提供するためのシステムおよび方法
JP4583377B2 (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
US7401104B2 (en) Systems and methods for synchronizing computer systems through an intermediary file system share or device
JP4583376B2 (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
EP1620781A2 (en) Systems and methods for the implementation of a digital images schema for organizing units of information manageable by a hardware/software interface system
JP4580389B2 (ja) 仲介ファイルシステム共有または仲介デバイスを介してコンピュータシステムを同期させるためのシステムおよび方法
JP4583375B2 (ja) 同期スキーマの実装のためのシステム
JP4580390B2 (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: 20080613

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100914

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101214

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: 20110422

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: 20110427

R150 Certificate of patent or registration of utility model

Ref document number: 4738908

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: 20140513

Year of fee payment: 3

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

LAPS Cancellation because of no payment of annual fees