JP5941461B2 - 共有データコレクション - Google Patents

共有データコレクション Download PDF

Info

Publication number
JP5941461B2
JP5941461B2 JP2013516603A JP2013516603A JP5941461B2 JP 5941461 B2 JP5941461 B2 JP 5941461B2 JP 2013516603 A JP2013516603 A JP 2013516603A JP 2013516603 A JP2013516603 A JP 2013516603A JP 5941461 B2 JP5941461 B2 JP 5941461B2
Authority
JP
Japan
Prior art keywords
collection
data collection
program
shared
subscriber
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
JP2013516603A
Other languages
English (en)
Other versions
JP2013529810A (ja
JP2013529810A5 (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 JP2013529810A publication Critical patent/JP2013529810A/ja
Publication of JP2013529810A5 publication Critical patent/JP2013529810A5/ja
Application granted granted Critical
Publication of JP5941461B2 publication Critical patent/JP5941461B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2315Optimistic concurrency control
    • 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
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/543User-generated data transfer, e.g. clipboards, dynamic data exchange [DDE], object linking and embedding [OLE]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • G06Q10/109Time management, e.g. calendars, reminders, meetings or time accounting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Between Computers (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Computer And Data Communications (AREA)

Description

本発明は、共有データコレクションに関する。
[0001]コレクションは、同時に操作されるべきデータアイテムの集まりである。コレクションのいくつかの例には、リスト、アレー、セット、バッグ、および他の様々なデータの集まりがある。プログラミングの黎明期には、プログラムは一般的に、互いに同時使用しないモノリシックのエンティティだった。したがってプログラムは、プログラマーが選んだ何らかの方法でコレクションを内部的に管理できた。しかし、現代のプログラミングでは、データの共有セットを操作することによって、同じプログラムの異なるインスタンス、または異なるプログラムが互いに同時使用することは、より一般的な慣行になった。
[0002]データを共有するために、プログラムが自身のメカニズムを実装することは可能であるが、それを行うことはプログラマーにとって一般的に面倒である。プログラマーは、共有メカニズムをプログラムの緊密に統合された部分として実装しなければならない可能性がある。たとえプログラマーが既存の共有メカニズムについてのコードを取得できても、そのメカニズムはしばしばプログラムの性質、および共有されているデータのタイプに特有のものである。また、他のプログラムが既存のプログラムとデータを共有したい場合、それらのプログラムを、同じ共有メカニズムが使用されるような方法で実装しなければならない。
[0003]プログラムがデータを共有できるようにすることは様々な問題を提示するが、コレクションの共有はさらなる問題を提示する。多くのタイプのコレクションにとって、コレクションの現在の状態は、コレクションのコンテンツによってだけでなく、それらのコンテンツが出現する順序によって定められる。たとえば、アレー{1、2、3、4、5}は、アレー{2、3、1、5、4}とは異なる。たとえそれらの2つのアレーが同じ基本要素(1から5までの数)を含んでいても、順序が異なるので、これらの2つのアレーは異なる状態を有している。コレクションの状態がいくつかのプログラムによって変更されうる場合、コレクションの状態、特に順序を維持することは、ある種の課題を提示する。
本発明は共有データコレクションを提供するものである。
[0004]共有コレクションの概念は、共有メカニズムをプログラマーにとって透過的にする方法で実装されうる。さらに、そのコレクションがいくつかの異なるエンティティによって操作されている場合、共有コレクションを実装するメカニズムは、コレクションのためにデータ収束を提供できる。
[0005]一例では、共有オブジェクトサーバーは、所与のどの時間にもコレクションの真の状態を維持することによって、コレクションの共有を管理する。コレクションにアクセスできるプログラムは、そのプログラムを実行している機械上の共有オブジェクトランタイムに接続しうる。共有コレクションにアクセスするプログラムは、そのコレクションを共有コレクションとして登録して、この登録はランタイムによって共有オブジェクトサーバーに通信されうる。コレクションにアクセスしたい他のプログラムも、そのコレクションを共有コレクションとして登録する。同様に、その登録がランタイムによって共有オブジェクトサーバーに通信される。さらに、プログラムはコレクションの変更通知に加入でき、加入要求はランタイムによって処理される。それぞれのプログラムは、コレクションのローカルコピーを維持する。コレクションの状態が何らかの方法で変更されると、変更が生じた機械上のランタイムが、その変更を共有オブジェクトサーバーに通信する。共有オブジェクトサーバーは、コレクションの真の状態をアップデートして、加入プログラムを実行している機械上の共有オブジェクトランタイムを通じてそのコレクションを登録した全てのプログラムに変更を通信する。次いで、これらのそれぞれのプログラムが、サーバーによって通信された状態変更に従ってコレクションのローカルコピーをアップデートする。コレクションに同時変更が生じた場合、共有オブジェクトサーバーは変更間のあらゆる衝突を解決して、コレクションの真の状態に決定論的に到達する。
[0006]他の例では、共有オブジェクトは、クライアント/サーバー方式ではなくピアツーピア方式で管理される。ピアツーピア実装形態では、共有コレクションへのそれぞれの加入者が、他の加入者に変更を通信できる。次いで、加入者が実行する機械上のランタイムは、あらゆる衝突を決定論的に解決しながら、彼らのローカルコピーを変更できる。
[0007]コレクションは、ほぼあらゆるプログラミング言語(たとえば、C、C++、Java(登録商標)、Visual Basic等)で実装されうる。共有コレクションの概念は広範なプログラミングモデルで実装されうるので、異なる言語で書かれたプログラムが同じ共有コレクションを操作できる。さらに、プログラマーは、プログラムが完全にローカルなコレクションを操作するのと同じ方法で、共有コレクションを操作するプログラムを書くことができる。したがって、プログラムは、新しいコレクションを登録するための、または既存のコレクションへの変更に加入するための指示を出す以外の任意の方法で、コレクションの共有性質を認識せずに共有コレクションを操作できる。このように、効果的なコレクションの共有は、プログラムおよびプログラマーにとって透過的に行われる。さらに、共有メカニズムはコレクション内のデータのタイプにとらわれる必要はなく、したがってあらゆるタイプのデータのコレクションを共有できる。
[0008]この概要は、以下の詳細な説明においてさらに説明する概念の選択を、簡単な形式で紹介するために提供するものである。この概要は、特許請求の範囲に記載された対象の主な特徴または基本的な特徴を識別することを意図するものではなく、特許請求の範囲に記載された対象の範囲を限定するために使用されることを意図するものでもない。
[0009]共有コレクションの例のブロック図である。 [0010]共有コレクションへのアクセスをプログラムが共有できる例示的シナリオのブロック図である。 [0011]コレクション共有のピアツーピア実装形態の例のブロック図である。 [0012]共有コレクションが使用されうる方法の例のブロック図である。 [0012]共有コレクションが使用されうる方法の例のブロック図である。 [0013]コレクションが共有されうる例示的処理の流れ図である。 [0014]本明細書に記載された対象の実装形態に関連して使用されうる例示的コンポーネントのブロック図である。
[0015]現代のコンピューティングでは、同じ基本データへのアクセスを共有することによって、プログラムはしばしば互いに同時使用する。プログラムがデータを共有する場合、プログラムは、データが共有されているという事実を認識する方法でしばしば実装される。すなわち、一般的にプログラムは、他のプログラム、または同じプログラムの他のインスタンスとデータを共有するメカニズムの実装形態を含む必要がある。共有するためのメカニズムは、しばしば共有されているデータの性質、およびプログラマーの設計選択に特有である。したがって、2つのプログラムがデータを共有したい場合、それぞれのプログラマーは通常特定の共有メカニズムに同意して、実装する必要がある。限定された形式のデータ共有を可能にする特定の一般化されたメカニズムがあるが、特定の状況にはあまり適さない。
[0016]あらゆる種類のデータの共有が様々な実装形態の問題を提示しているが、共有されるデータがコレクションである場合はさらなる問題が提示される。コレクションは、同時に操作されうるデータアイテムの集まりである。コレクションのいくつかの例には、リスト、アレー、セット、バッグ、および他の様々なデータの集まりがある。いくつかのタイプのコレクションは順序付けされる。すなわち、順序コレクションの現在の状態は、単にコレクションのコンテンツによってだけではなく、それらのコンテンツが出現する順序によって定義される。たとえば、{1、2、3、4、5}は、1から5までの全ての整数を含むデータのコレクションである。コレクションが順序付けられると、{1、2、3、4、5}と{2、3、1、5、4}とは、両方とも同じアイテムを含んではいるものの順序が異なるので、これらの2つの状態は異なる状態である。
[0017]同時に実行しているプログラム間で任意のタイプのデータが共有されると、データの2つの修正が衝突する可能性がある。たとえば、あるプログラムがデータを修正しようとし、他のプログラムが同時にそのデータを削除しようとする場合がある。しかし、このような衝突が生じて、共有されているデータがコレクションの一部である場合、さらなる困難な事態が生じる。あるプログラムは、コレクション内の2番目のアイテムの後に、あるアイテムの挿入を要求する場合がある。他のプログラムは、2番目のアイテムを削除して、それによって、挿入されたアイテムを2番目のアイテムにするよう要求する場合がある。これらの変更を処理して、コレクションの真の状態に到達するために、元のコレクション内のどのアイテムが現在2番目であるかを決定しなければならない。それぞれのプログラムは、他のプログラムが同じコレクションを操作していることに気付かない場合があるので、両方のプログラムはコレクション内の「2番目の」アイテムを参照しながら、コレクション内のどのアイテムが実際に2番目の順序であるかについて異なる理解を有している場合がある。
[0018]操作変換の分野は、コンピューティングにおいてデータの決定論的な順序付けを可能にするメカニズムに関係がある。これらのメカニズムのいくつかは、同時に操作されているファイル間の衝突を解決するために、たとえば、2人のユーザによって同時に編集されているテキストファイルに何の編集が生じたかを決定するために使用されうる。しかし、これらのタイプの技法は、一般に本明細書に記載されたコレクションの一般化された共有のタイプには適用されない。
[0019]本明細書に記載された対象は、データコレクションを共有するためのメカニズムを提供する。本明細書に記載された技法は、いくつかのプログラムおよび/または同じプログラムのいくつかのインスタンスがコレクションへのアクセスを共有できるようにする、一般化されたコレクション共有メカニズムを提供するために使用されうる。これらの技法により、異なるプログラミング言語でプログラムを実装できるようになる。この技法により、コレクションが、そのコレクションを使用している全てのプログラムに伝搬されうる特定の状態に決定論的に到達できるような方法で、順序付けされたデータのコレクションを複数のプログラムおよび/またはプログラムインスタンスによって同時に操作できるようになる。さらに、本明細書に記載された技法により、プログラマーは、プログラムが完全にローカルなコレクションを操作するのとほぼ同じ方法で、共有コレクションを操作するプログラムを書けるようになる。さらに、共有メカニズムは、コレクション内の基本的なデータのタイプにとらわれないように作成でき、したがって、あらゆる適切な種類のデータについて、同じ一般化された共有メカニズムを使用できるようになる。言い換えれば、本明細書に記載された様々な動作を、コレクション内のデータアイテムのコンテンツに関係なく、またそれらのアイテムのコンテンツの構造に関係なく実行できるようになる。
[0020]データを共有するプログラムは、単一の機械上で実行してもよく、ネットワークを通じて接続された、いくつかの機械上で実行してもよい。データの共有を容易にするために、プログラムを実行しているそれぞれの機械は共有オブジェクトランタイムを有することができる。共有オブジェクトランタイムは、共有コレクションを含む共有データオブジェクトの共有および同期の管理に役立つ場合がある。一例では、共有オブジェクトサーバーが共有コレクションの真の状態を維持する。機械上の共有コレクションに変更が行われると、その機械上のランタイムは共有オブジェクトサーバーにその変更を通知する。サーバーは、ローカル変更に応答して、コレクションの真の状態を変更できる。2つのプログラムが同時にコレクションに変更を行うと、共有オブジェクトサーバーは、真の状態に到達するために変更を解決でき、可能な限り、両方のプログラムが達成しようとしたコレクションの状態を反映できる。したがって、2つの異なるプログラムが、他の変更を知らずに同じコレクションをそれぞれ変更すると、サーバーはこれらの変更のうちの1つを実行してコレクションの新しい状態を作成でき、次いで、変更を行ったときにコレクションの新しい状態を知っていれば、もう1つのプログラムが行いたかった変更を反映するために(可能な限り)もう1つの変更を変換できる。サーバーは、様々な機械上のランタイムに変更(または、該当する場合は変換された変更)を通知して、そのコレクションに加入しているプログラムが、サーバーによって伝搬された変更に従ってそのローカルコピーをアップデートする。他の例では、コレクション共有はピアツーピアアーキテクチャに実装され、そのアーキテクチャでは、共有コレクションに加入するそれぞれのプログラムが、プログラムが行った変更を他のプログラムに通知して、他の加入者(または、それらの加入者が実行している機械上のランタイムコンポーネント)がサーバーの援助なしにそれらのローカルコピーを変更に同期させる。
[0021]プログラムがコレクションを作成すると、プログラムはコレクションを共有コレクションとして登録するための指示を出すことができる。この指示は、プログラムを実行している機械上のランタイムによって受信でき、ランタイムは共有オブジェクトサーバーに登録を報告できる。次いで、共有オブジェクトサーバーは、コレクションの最初の状態を表すコレクションのコピーを受信する。この時点から、コレクションを作成したプログラムは、ランタイムが共有オブジェクトサーバーへの(または、ピアツーピア実装形態では他の加入者への)変更の報告、および共有オブジェクトサーバーから受信した状態変更の同期を管理するので、コレクションが完全にローカルであった場合とほぼ同じ方法で、コレクションを操作できる。
[0022]あるプログラムが、他のプログラムによって作成された共有コレクションを使用したい場合、そのプログラムはそのコレクションを登録するための指示を出す。その指示は、ランタイムによって受信されて、共有オブジェクトサーバーに送信されうる。次いで、共有オブジェクトサーバーは、加入プログラムを実行している機械上のランタイムに、コレクションの状態へのあらゆる変更を通知することを知っている。プログラムがコレクションに加入すると、コレクションの現在の真の状態のコピーを受信でき、次いでローカルコレクションとして格納できる。次いで、加入プログラムは、コレクションがローカルであった場合とほぼ同じ方法で、共有コレクションを操作できる。このようにして、効果的なコレクションの共有は、そのコレクションを作成および登録するプログラムと、そのコレクションに加入するプログラムとの両方にとって、透過的に行われる。上述のように、システムは、コレクション内のデータの性質にとらわれる必要がないので、共有メカニズムはあらゆる種類の基本的なデータを含むコレクションと協働できる。
[0023]図1は、共有コレクション102の例を示している。共有コレクション102は、何らかの方法で相互に関連する、ならびにプログラム104、106、および108などの複数のプログラムによってアクセス(たとえば、読出しおよび書込み)されうる、データアイテムのセットを備えうる。プログラム104〜108は、同じプログラムの異なる実行インスタンス(たとえば、いくつかの別個の処理で実行している同じアプリケーション)でもよく、異なるプログラムでもよい。さらに、プログラム104〜108は全て同じ機械上で実行してもよく、異なる機械上で実行してもよい。どちらの場合でも、プログラム104〜108は、異なるプログラムでもよく、同じプログラムの別々の実行インスタンスでもよいという意味で、「別個の」ものとして記述できる。コレクション共有メカニズム110は、プログラム104〜108の間で共有コレクション102を共有することを容易にすることができる。コレクション共有メカニズム110の例示的実装形態は、以下で図2〜7に関連して説明する。
[0024]共有コレクション102は、共通の名前空間を共有するプログラムによって共有コレクション102が識別されうるようにする、名前112を有することができる。名前112の代用として(または、名前112に加えて)、共有コレクション102は、共有コレクション102と他の共有コレクションとを区別する識別子114を有することもできる。識別子114は、たとえば、まだ名前が割り当てられていないコレクションに適用されうるので、これらのコレクションは、「フレンドリーな」名前がコレクションに割り当てられる前にシステムによって識別されうる。
[0025]共有コレクション102は、複数のデータアイテムを有することができる。図1の例では、4つのデータアイテム116、118、120、および122が示されているが、コレクションはいくつのデータアイテムを有してもよい。それぞれのデータアイテムは、あらゆるタイプのデータを含みうる。共有コレクションに格納されうるデータのいくつかの例は、以下で図4および5に関連してより詳細に説明する。しかし、一般的な例として、コレクションに格納されうるいくつかのタイプのデータは、数または単語などの基本的なデータタイプ、またはやることリスト上のタスクを表す構造などのより複雑なプログラマー定義のデータタイプ、あるいはユーザインターフェースの要素である。本明細書に記載されたメカニズムは、データのタイプにとらわれる必要がないので、コレクション内の個々のデータアイテムは、基本的なデータタイプから、入り組んだスキーマを備える複雑なユーザ定義のデータタイプまでのいずれでもよい。
[0026]図1の例では、共有コレクション102は順序付けされたコレクションである、上述のように、順序付けされたコレクションは、コレクションの状態が、コレクション内のデータアイテムによってだけでなく、それらのデータアイテムの順序によって定義されるコレクションである。データアイテムの挿入または除去は順序付けされたコレクションの状態を変更するが、2つの既存のデータアイテム間の位置も変更する。したがって、共有コレクション102内のそれぞれのデータアイテムは順序位置を有する。順序位置124、126、128、および130は、それぞれデータアイテム116、118、120、および122に対応する。したがって、データアイテム116は1番目の位置にあり、データアイテム118は2番目の位置にあり、以下同様である。アイテムの順序数のうちのいずれかを変更する場合、この変更は、たとえアイテム自体には変更がなくても、共有コレクション102の状態における変更という結果になる。
[0027]共有コレクション102に実行されうる例示的操作には、交換操作132および削除操作134がある。交換操作132はコレクション内の2つ(またはより多く)のアイテムの順序位置を交換し、削除操作134はコレクション内のアイテムのうちの1つを除去する。また、挿入操作136を実行して新しいデータアイテム138をコレクションに追加することによってコレクションを修正できる。これらの操作については、後に以下の議論で言及する。
[0028]図2は、プログラムが共有コレクション102へのアクセスを共有できる例示的シナリオを示している。機械202は、プログラムを実行する機械である。機械202は、デスクトップまたはラップトップなどのパーソナルコンピューター、サーバーコンピューター、ハンドヘルドコンピューター、スマートフォン、セットトップボックスなどの、何らかの種類のコンピューティング機能を有するどのようなタイプの機械でもよい。図示された例では、機械202上で2つのプログラム204および206を実行しているが、機械上でいくつのプログラムを実行してもよい。
[0029]機械202はデータを格納でき、機械202に格納されるあるタイプのデータは共有コレクション102のローカルコピーである。図2の例では、共有コレクション102はプログラム204によって作成される。コレクションが作成された時点では、コレクションはプログラム204にとってローカルかつプライベートでよい。しかし、プログラム204は、他のプログラムが(可能であれば、他の機械上で実行するプログラムを含む)コレクション102へのアクセスを共有できるようにするために、共有するためのコレクションを登録したい場合がある。したがって、プログラム204は登録指示208を出す。登録指示208は、プログラム204が書かれた何らかのプログラミング言語を通じて出されてもよく、共有オブジェクトランタイム210によって受信されうる。たとえば、共有オブジェクトランタイム210は、プログラム204が共有オブジェクトランタイム210に登録指示(ならびに加入要求、および他のタイプの指示)を出せるようにする、アプリケーション・プログラミング・インターフェース(API)を提供できる。
[0030]登録指示208を受信すると、共有オブジェクトランタイム210は、共有コレクション102を共有オブジェクトサーバー212に登録できる。共有オブジェクトサーバー212は、共有コレクション102などの共有データオブジェクトの真の状態を維持して、また共有オブジェクトへの変更についての情報センターとして働くサーバーである。すなわち、共有オブジェクトサーバー212は、機械上で共有データが変更すると、およびその共有データの状態への変更を他の機械に伝搬すると、通知を受信する。共有コレクション102が共有オブジェクトサーバー212に登録されると、共有オブジェクトランタイム210は、共有コレクション102のコピーを提供できる。共有するために一旦コレクション102が登録されると、図2で共有オブジェクトサーバー212を表すボックス内部の「(真の状態)」で印をつけられたボックス内で示されるように、共有オブジェクトサーバー212はコレクション102の真の状態を維持する。(本明細書の記述を通じて、プログラムまたは加入者送信を、サーバーまたは他の加入者への送信登録または加入要求と呼ぶ場合がある点に留意されたい。これらのタイプの要求を送信するプログラムの動作は、プログラムが要求をランタイムに通信し、ランタイムがその要求をサーバー、あるいは他の加入者またはランタイムに通信する場合を含む。同様に、後述するように、加入者は状態変更をサーバーまたは他の加入者に通信できる。加入者が状態変更を通信する動作は、加入者の機械上のランタイムが通信を実行する場合を含む。)
[0031]共有するために共有コレクション102が登録されると、コレクションに加入することによってプログラム204以外のプログラムがそのコレクションにアクセスできる。コレクションに加入するために、プログラムは加入要求214を提出できる。いくつかのコレクションは、それらの作成者によって指定されたアクセス制御制限に従う場合がある。このようなアクセス制御制限は、共有コレクションにアクセスできるプログラムのセットおよび/またはユーザ、および/または機械を限定しうる。しかし、共有コレクション102にアクセス制限がない(または、アクセス制限があるが、共有コレクション102へのアクセスを求めている人は、そのコレクションにアクセスする許可を得る)と仮定すると、共有コレクション102の加入によって、加入者はそのコレクションを読み出す、および/または修正することができるようになる。
[0032]加入要求は、任意の機械の任意のプログラムから来る場合がある。たとえば、プログラム206は共有オブジェクトランタイム210を通じて加入要求を提出することによって、共有コレクション102に加入できる。プログラム206は、共有コレクション102の作成者(すなわち、プログラム204)と同じ機械202上にある点に留意されたい。しかし、加入プログラムは異なる機械上にある場合がある。たとえば、機械218上のプログラム216も、加入要求214を提出することによって共有コレクション102に加入する。プログラム216からの加入要求は、機械218用のランタイムである共有オブジェクトランタイム220を通じて提出される。(それぞれの機械は、それ自身の共有オブジェクトランタイムのインスタンスを有することができる。)さらに、共有コレクション102への加入要求は、機械222上、または他の任意の機械上で実行しているプログラムから来る場合もある。
[0033]プログラムが共有コレクション102に加入すると、そのプログラムは、共有コレクション102の現在の真の状態のコピーを受信できる。たとえば、機械218上のプログラム216は、共有コレクション102のコピーを受信して、そのコピーを、機械218を表す図1のボックス内の、機械218に格納できる(「(ローカルコピー)」とラベル付けされた共有コレクション102のインスタンスによって示されるように)。次いで、加入プログラムは、まるで完全にローカルなコレクションであるかのようにローカルコピーの読出しおよび書込みができる。プログラムを実行している機械上の共有オブジェクトランタイムのインスタンス(たとえば、プログラム216の場合は共有オブジェクトランタイム220)は、共有コレクション102のローカルコピーを監視して、プログラムが共有オブジェクトサーバー212に報告するべき変更を共有コレクションに行ったかどうかを決定できる。
[0034]共有コレクション102への任意の加入者が、共有コレクション102のローカルコピーへの変更を行う操作を実行すると、その加入者の機械上の共有オブジェクトランタイムが、その操作を共有オブジェクトサーバー212に報告する。次いで、共有オブジェクトサーバー212は、共有コレクション102の現在の真の状態をアップデートして、オブジェクトへの加入者(オブジェクトの作成者を含む)に状態変更を通知する。
[0035]共有オブジェクトサーバー212は、共有コレクション102の加入者間での状態情報の収集および伝搬を容易にする同期コンポーネント226を含むことができる。同期コンポーネント226が操作する方法は、実装形態に依存する場合がある。一例では、同期コンポーネントは、共有コレクション102のマスターコピーを真の状態で維持して、そのコレクションの状態が変化する時はいつでも共有コレクション102の新しいコピーを単に伝搬する。他の例では、同期コンポーネント226は、現在のバージョンに関連する共有コレクション102への変更のリストを維持して、それらの変更を様々なクライアントに伝搬する。次いで、それぞれのクライアントのランタイムは、共有コレクション102の真の状態を、そのローカル状態、および共有オブジェクトサーバー212から受信した変更に基づいて計算できる。共有オブジェクトサーバー212が全ての状態変更に応答して共有コレクション102の完全なコピーを伝搬しなくても、共有オブジェクトサーバー212は、共有コレクション102への同時変更を解決する方法を決定できるので、クライアント側のランタイムが変更の通知を受信すると、共有コレクション102の新しい状態を古い状態から計算できる。後述するように、同期コンポーネント226は必要に応じて変更を変換できるので、第1の加入者が第2の加入者の同時変更を知らずに行った変更を第1の加入者に送信でき、道理にかなう方法で適用でき、その結果、全ての加入者が共有コレクション102の同じ状態に収束する。
[0036]同期コンポーネント226によって実行されるある機能は、どちらのクライアントも他の変更を知らない2つのクライアントによってコレクションに行われた変更を適用する方法を決定するためのものである。この状況は、2つのクライアントが、コレクション内の同じアイテムに関係する変更をほぼ同時に行う場合に発生する場合があるので、それぞれのクライアントは他の変更の通知を受信する前に変更を行う。たとえば、コレクション内の最初の2つのアイテムがアルファおよびベータであると仮定する。AおよびBと呼ばれる2つのクライアントの両方が、ほぼ同時にコレクションに変更を行う。Aは新しいアイテム、ガンマをアルファの後の位置に追加したいが、Bはベータを削除したい。したがって、Aは順序位置2で新しいアイテムを追加する操作を実行し、Bは順序位置2でアイテムを削除する操作を実行する。Aの操作が最初に実行されると、両方の操作後の最終的な状態は、アルファおよびベータが位置1および2をそれぞれ占めることになる。Bの操作が最初に実行されると、両方の操作後の最終的な状態は、アルファおよびガンマが順序位置1および2をそれぞれ占めることになる。同期コンポーネント226は、この明らかな矛盾を以下の方法で解決できる。
[0037]この例のために、サーバーS、ならびにクライアントAおよびBを呼び出す。S、A、およびBは全て状態0から開始する。Aは操作Xを実行し、Bは操作Yを実行する。AもBも他の操作が実行されたことを知らないので、AおよびBはそれぞれ状態0で操作をSに報告する。すなわち、AおよびBはそれぞれ、コレクションが状態0で存在する時に、そのコレクションに操作を実行したことを報告する。ある操作を実行したので、次にAおよびBはそれぞれ状態を1にインクリメントする。しかしこれらの操作のうちの1つが最初にSに到達する。この例では、最初にXが到達したと仮定する。操作Xが、Sの現在の状態と一致する状態0で実行されたので、その操作がSに実行されて、変換されずにBに送信される。さらに、肯定応答がAに送信される。Sは現在状態1である。この時点で、BはSから操作Xを受信する。操作YはまだSによって確認されていないので、操作XがYに対して変換されて、コレクションに適用される。現在、Bは状態2である。操作YがSに到達すると、その操作は状態0で実行されたことを示す。0はもはやSの現在の状態ではないので、Sは、Yを実行した時にBは操作Xに気付かなかったと決定する。したがって、操作Yが操作Xに対して変換されて、Aに送信される。肯定応答がBに送信される。Sは現在状態2である。この時点で、Aは操作Yの変換されたバージョンを受信する。Aには未処理の操作はないので、変換されたYをさらに変換することなしに適用する。(すなわち、変換されたYは状態1に対して実行されていることを示す。Aはすでに状態1なので、Yをこれ以上変換する根拠はない。)Aは現在状態2である。さらに、AおよびBの両方でのコレクションのコピーは、現在同じデータを同じ順序で示す。
[0038]図2は、サーバーがコレクションの共有を管理する、例示的クライアント/サーバータイプ実装形態を示している。しかし、ピアツーピア実装形態も使用されうる。図3は、コレクション共有のピアツーピア実装形態の例を示している。
[0039]図3の例では、機械202、218、および222がコレクション102の共有に参加する(図2で参加するように)。たとえば、それぞれの機械は、共有コレクション102の加入者である1つまたは複数のプログラムを有することができる(共有コレクションの作成者は、「加入者」の概念に含まれる)。それぞれの機械は、共有オブジェクトランタイムのインスタンスを有する。すなわち、共有オブジェクトランタイム210、220、および302は、それぞれ機械202、218、および222上で動作する。ピアツーピア実装形態では、共有オブジェクトランタイムは、サーバーと通信するのではなく、直接相互に通信できる。さらに、共有オブジェクトランタイムは、入ってくる変更をサーバーによって実行させるのではなく、それらの変更の変換を担当してよい。したがって、異なるランタイムがコレクションへの衝突する変更を解決するための同じアルゴリズムを実装する限り、コレクションの現在の状態を決定論的に知ることができる。
[0040]たとえば機械202上で共有コレクション102が変更されると、機械202上の共有オブジェクトランタイム210が状態変更304の通知を、機械218上の共有オブジェクトランタイム220、および機械222上の共有オブジェクトランタイム302に送出する。それぞれの共有オブジェクトランタイムは、コレクション102の新しい状態に到達するために、共有コレクション102の現在の状態に状態変更304を適用する。2つの異なる機械から2つの異なる状態変更が同時に来る場合、共有オブジェクトランタイムは、どの状態変更が適用されるべきかを決定するために、衝突解決アルゴリズム(たとえば、同期コンポーネント226に関連して上述したアルゴリズム)を適用できる。上述のように、アルゴリズムは決定論的に作成されうるので、衝突する変更の同じセットを受信する任意の2つのランタイムは、同じ方法で衝突を解決して、それによってコレクションを様々な異なる機械上で同じ状態に変更することができる。
[0041]図4および5は、共有コレクションが使用されうる方法のいくつかの例を示している。図4および5における例は例示的なものであり、本明細書に記載された対象を限定するものではない。図4および5における例は、共有コレクションが使用されうる方法のいくつかの特定の例を与えるために提供されるに過ぎないが、共有コレクションが使用されうる他の数多くのコンテキストがあることが理解されよう。
[0042]図4は、共有コレクションとして実装されうる例示的タスクリストを示している。タスクリスト内のそれぞれのアイテムは、実行されるべきタスクでよい。図示されたタスクリストは4つの例示的アイテム402、404、406、および408を含み、それらは会社のために新しい商品を開発しているワーキンググループによって実行されるタスクでよい。タスクリストはコレクションとして実装でき、実装されるべきそれぞれのタスクはコレクション内のアイテムであり、これらのアイテムが実行されるべき順序を表すこれらのアイテム間で順序が定められる。ワーキンググループのメンバーは皆、タスクリストの制御を有することができる。たとえば、タスクリストは、グループのそれぞれのメンバーがインスタンスを実行している電子メールおよびカレンダープログラムを通じてアクセスされうる。したがって、グループの異なるメンバーが、リスト上でアイテムを追加または削除してもよく、既存のアイテムを再構成してもよい。したがって、プログラムのそれぞれのインスタンスは、タスクリストを表すコレクションへの加入者でよい。グループの任意のメンバーがプログラムのインスタンスを使用してタスクリストに変更を行うと、その変更は、上述の方法でプログラムの他のインスタンスに伝搬されうる。したがって、ある人はプログラムの第1のインスタンスを使用して、1番目および2番目のタスクの順序を交換することができ(数字410で示されるように)、他の人はプログラムの第2のインスタンスを使用して、3番目のタスクを削除できる(数字412で示されるように)。これらの変更を処理して、コレクションの新しい状態に到達できる。
[0043]図5は、コレクションとして実装されうる例示的ユーザインターフェースを示している。ユーザインターフェースは、たとえばデスクトップサイドバーでよく、そこでは図5に示される様々なデータアイテム(すなわち、データアイテム502 504、506、508、および510)は、コレクション内にアイテムが出現する順序に対応する何らかの垂直順序でサイドバー内に示されるべきウィジェットである。ウィジェットのリストはコレクションとして実装でき、異なるプログラムがコレクションへのアクセスを共有できる。たとえば、ユーザはニュースフィードの上に時計を置きたいと決定して、コレクション内の最初の2つの要素の順序を交換することができる(数字512で示されるように)。次いで、ユーザはサイドバー内のバグを情報技術管理者に報告できる。次いで、管理者は管理プログラムを使用して、サイドバーに接続できる。管理者は、たとえばフォトビューアにバグがあることを認識でき、そのウィジェットをサイドバーから削除できる(数字514で示されるように)。このようにして、2人が2つの異なるアプリケーションを使用して、コレクションとして実装されたユーザインターフェースを修正する。
[0044]図4および5の例では、図示されたコレクションは複雑なデータタイプを含みうる点に留意されたい。たとえば、図4のデータアイテムは、(要約、長い記述、納期、リマインド日等のためのフィールドを含みうる)タスクである。また、図5内のデータアイテムは、(アプリケーション名、ディスク上の位置、ランタイムパラメータ等のフィールドを含みうる)アプリケーションハンドルでよい。言い換えれば、これらの例は、共有コレクションにおいてあらゆるタイプのデータが使用されうること、および、コレクション共有メカニズムは、データの性質または構造に関係なく様々なタイプのデータを同じ方法で処理できることを示している。
[0045]図6は、コレクションが共有されうる例示的処理を示している。図6の説明に入る前に、図6の流れ図は、例として、図1〜5に示したコンポーネントを参照して説明されるが、図6の処理は任意のシステムにおいて実行でき、図1〜5に示したシナリオに限定されない点に留意されたい。さらに、図6の流れ図は、ブロックをつなぐ線によって示されるように特定の順序で処理の段階が実行される例を示しているが、この図に示される様々な段階は任意の順序で、あるいは任意の結合またはサブ結合で実行されうる。
[0046]602で、コレクションが作成される。たとえば、プログラムは、通常はローカルコレクションを作成するために使用されるメカニズムを使用することによって、コレクションを作成できる。コレクションは、リスト、アレーなどの任意のタイプのコレクションでよい。604で、コレクションは、共有するために登録されうる。たとえば、コレクションを作成するプログラムは指示を出すことができ、その指示はプログラムを実行している機械上の共有オブジェクトランタイムによって受信されうる。一例では、ランタイムは、プログラムが登録指示を出せるようにするAPIを公開するが、登録指示は他の方法でも出されうる。
[0047]共有するためにコレクションが登録された後、コレクションへの加入要求が受信されうる(606で)。たとえば、コレクションを作成したプログラムと同じ名前空間を共有する他のプログラムが、そのコレクションへの加入要求を出すことができる。これらの加入要求は、加入プログラムを実行している機械上の共有オブジェクトランタイムに出すことができる。一例では、加入要求はランタイムが公開したAPIを通じて出すことができる。本明細書に記載された対象のために、作成者は加入者のうちの1人と見なされる。(たとえ作成者が加入要求ではなく登録要求を出しても、共有オブジェクトの作成者は、加入者はコレクションにアクセスできるプログラムであるという意味で加入者である。)加入者は、コレクションの現在の状態を受信でき(608で)、コレクションのローカルコピーを格納できる。
[0048]いくつかの時点で、加入者がコレクションに変更を行う(610で)。例示的な変更には、挿入652、削除654、および移動656がある。挿入652は、コレクションの順序内の特定の場所で、新しいアイテムをコレクションに追加する。削除654は、コレクションから既存のアイテムを除去する。移動656は、コレクション内の2つ以上のアイテム間で順序を変更する。
[0049]加入者の機械上の共有オブジェクトランタイムによって変更が検出されると、共有オブジェクトランタイムが適用可能なエンティティに変更を通知して(612で)、これらの変更が、それらのエンティティによって受信される(614で)。どのエンティティが「適用可能なエンティティ」かは、実装形態に依存する場合がある。上述のように、たとえば、本明細書に記載された対象のクライアント/サーバー実装形態と、ピアツーピア実装形態との両方がある。クライアント/サーバー実装形態では、変更を検出するランタイムが、コレクションの真の状態を管理する共有オブジェクトサーバーに通知できる。ピアツーピア実装形態では、それぞれのランタイムが他のランタイムに直接通知する。
[0050]コレクションへの変更が受信されると、衝突する変更(たとえば、2つのクライアントがコレクションの同じ状態に操作を実行したことを示す変更)が決定論的な方法で解決されうる(616で)。たとえば、2つの加入者が、コレクション内の「2番目の」アイテムに影響を及ぼす変更を行った(たとえば、あるエンティティが1番目および2番目のエンティティの位置を交換して、他のエンティティが同時に2番目のエンティティを削除する)場合、コレクションの真の状態に到達するために、たとえば同期コンポーネント226(図2に示される)に関連して上述したアルゴリズムを使用して、これらの衝突する変更は解決されうる。衝突が解決される方法は、変更を行った加入者の目的を達成してもよく、達成しなくてもよいが、結果として得られる状態は明確に確定されうる。
[0051]クライアント/サーバー実装形態では、解決された変更が加入者に送信されうる(618で)。ピアツーピア実装形態では、加入者および/または加入者の機械上のランタイムが、他の加入者および/またはランタイムから変更情報を受信して、サーバーの援助なしに自身で衝突を解決する。決定論的な衝突解決処理によって、それぞれのクライアントが同じ方法で変更を解決できるようになるので、様々な加入者がコレクションの真の状態についての同じ結果に収束できる。(この場合もやはり、結果として得られる状態は明確に解決されうるが、結果として得られる状態は、変更を行った加入者の目的を達成してもよく、達成しなくてもよい。)
[0052]変更するための任意の既存の衝突が解決されると(および、クライアント/サーバー実装形態の場合は、その衝突解決の結果がサーバーから加入者に通信されると)、コレクションのローカルコピーを真の状態に沿って維持するために、それらのローカルコピーへの変更が行われうる(620で)。次いで、加入者はコレクションの読出しおよび書込みを続けることができる。
[0053]図7は、本明細書に記載された対象の態様が配置されうる例示的環境を示している。
[0054]コンピューター700は、1つまたは複数のプロセッサー702、および1つまたは複数のデータ記憶コンポーネント704を含む。プロセッサー702は、一般的に、パーソナルデスクトップまたはラップトップコンピューター、サーバー、ハンドヘルドコンピューター、あるいは他の種類のコンピューティングデバイスで見られるマイクロプロセッサーである。データ記憶コンポーネント704は、データを長期間または短期間格納できるコンポーネントである。データ記憶コンポーネント704の例には、ハードディスク、リムーバブルディスク(光ディスクおよび磁気ディスクを含む)、揮発性および不揮発性ランダムアクセスメモリー(RAM)、読出し専用メモリー(ROM)、フラッシュメモリー、磁気テープ等がある。データ記憶コンポーネントは、コンピューター可読記憶媒体の例である。コンピューター700は、ブラウン管(CRT)モニタ、液晶ディスプレイ(LCD)モニタ、または他の任意のタイプのモニタでよいディスプレイ712を備えうるか、それに関連付けられうる。
[0055]ソフトウェアは、データ記憶コンポーネント704に格納されて、1つまたは複数のプロセッサー702上で実行しうる。このようなソフトウェアの例には、図1〜6に関連して上述した機能のうちのいくつかまたは全てを実装できるコレクション共有ソフトウェア706があるが、任意のタイプのソフトウェアも使用されうる。ソフトウェア706は、たとえば、分散システム、別のファイル、別の機能、別のオブジェクト、コードの別の行等におけるコンポーネントでよい、1つまたは複数のコンポーネントを通じて実装されうる。プログラムが、ハードディスクに格納されて、RAMにロードされて、コンピューターのプロセッサーで実行されるコンピューター(たとえば、パーソナルコンピューター、サーバーコンピューター、ハンドヘルドコンピューター等)は図7に示されるシナリオの典型であるが、本明細書に記載された対象はこの例に限定されない。
[0056]本明細書に記載された対象は、データ記憶コンポーネント704のうちの1つまたは複数に格納されて、プロセッサー702のうちの1つまたは複数で実行するソフトウェアとして実装されうる。他の例としては、対象は、1つまたは複数のコンピューター可読記憶媒体に格納される指示として実装されうる。光ディスクまたは磁気ディスクなどの有形媒体は、記憶媒体の例である。指示は持続性媒体上に存在しうる。このような指示は、コンピューターまたは他の機械によって実行されると、方法の1つまたは複数の動作をコンピューターまたは他の機械に実行させることができる。動作を実行するための指示はある媒体に格納されてもよく、複数の媒体にわたって分散されてもよいので、全ての指示が同じ媒体上にあるかどうかに関わらず、1つまたは複数のコンピューター可読記憶媒体上に指示が集合的に出現しうる。
[0057]さらに、本明細書に記載された任意の動作(図示されているかどうかに関わらず)は、方法の一部として、プロセッサー(たとえば、1つまたは複数のプロセッサー702)によって実行されうる。したがって、本明細書に動作A、B、およびCが記載されている場合、A、B、およびCの動作を備える方法が実行されうる。さらに、本明細書に動作A、B、およびCが記載されている場合、プロセッサーを使用してA、B、およびCの動作を実行するステップを備える方法が実行されうる。
[0058]ある例示的環境では、コンピューター700は、ネットワーク708を通じて1つまたは複数の他のデバイスと通信可能なように接続されうる。構造の点でコンピューター700と類似してよいコンピューター710は、コンピューター700に接続されうるデバイスの例であるが、他のタイプのデバイスもそのように接続されうる。
[0059]対象を、構造的特徴および/または方法論的行為に特有の文言で説明してきたが、添付の特許請求の範囲に定められる対象は、上述の特定の特徴または行為に必ずしも限定されないことが理解されるべきである。むしろ、上述の特定の特徴および行為は、特許請求の範囲を実装する例示的形式として開示したに過ぎない。

Claims (10)

  1. データコレクションの登録を受信するステップであって、前記データコレクションが第1のプログラムによって作成され、前記登録が前記第1のプログラムを実行する機械上のオブジェクトランタイムコンポーネントから受信される、ステップと、
    前記第1のプログラムとは異なる第2のプログラムから前記データコレクションへの加入を受信するステップであって、前記データコレクションへの加入者のセットが存在し、加入者の前記セットが前記第1のプログラムおよび前記第2のプログラムを備える、ステップと、
    前記加入者のうちの第1の加入者が前記データコレクションの状態に変更を行う第1の操作を前記データコレクションに実行したという第1の通知を受信するステップであって、前記加入者のうちの前記第1の加入者は、前記加入者のうちの前記第1の加入者が書かれたプログラミング言語がローカルコレクションに対する操作を実行するために提供するメカニズムを使用することによって、前記データコレクションが前記第1の加入者に対して完全にローカルであるかのように前記第1の操作を実行する、ステップと、
    前記第1の操作に基づいて、前記加入者のうちの第2の加入者に、前記第2の加入者によって維持される共有コレクションのローカルコピーを更新させるために、前記状態の前記変更を前記第2の加入者に伝搬するステップと、
    前記第2の加入者が前記データコレクションに第2の操作を実行したという第2の通知を受信するステップであって、前記第2の操作が前記第1の操作とは異なる、ステップと、
    前記第2の操作を前記第1の操作に対して変換して、変換された前記第2の操作を前記第1の加入者に伝搬することによって、前記第1の操作と前記第2の操作との間の衝突を解決するステップと
    を備える動作を実行するようにプロセッサーを使用するステップ
    を備える、データコレクションの共有を容易にする方法。
  2. 前記第2の通知が、前記データコレクションのアイテムの順序位置を使用して前記第2の操作を記述し、前記順序位置が、前記第1の操作が前記第2の操作の前に実行されるか、または前記第2の操作の後に実行されるかによって異なるアイテムを参照する、請求項1に記載の方法。
  3. 前記伝搬するステップが、
    前記第1の操作を実行することによって得られる、前記データコレクションの状態の前記加入者のバージョンに関連する変更の記述を、前記加入者に通信するステップを備える、請求項1に記載の方法。
  4. 前記動作は、前記データコレクション内のアイテムのコンテンツの構造に関係なく実行される、請求項1に記載の方法。
  5. 前記第1の通知が、前記データコレクションに実行される操作のタイプ、操作されているアイテムの前記データコレクション内の位置、および前記データコレクションの状態を備える、請求項1に記載の方法。
  6. プロセッサーと、
    メモリーと、
    前記メモリーに格納されて前記プロセッサー上で実行するコレクション共有コンポーネントと
    を備え、
    前記コレクション共有コンポーネントが第1の機械上にデータコレクションを作成する第1のプログラムから登録要求を受信し、第2の機械上で実行する第2のプログラムから前記データコレクションへの加入要求を受信し、前記第1のプログラムが前記第2のプログラムとは異なり、前記第1の機械が前記第2の機械とは異なり、前記コレクション共有コンポーネントが、加入者のセットの第1のメンバーから、前記データコレクションの状態を変更する第1の操作が前記第1のメンバーによって実行されたという第1の通知を受信し、前記状態が変更されたという第2の通知を加入者の前記セットの第2のメンバーに伝搬し、前記第2の通知は、前記第2のメンバーに、前記第1の操作に基づいて、前記第2のメンバーによって維持される共有コレクションのローカルコピーを更新させ、加入者の前記セットが前記第1のプログラムおよび前記第2のプログラムを備え、前記第1のメンバーは、前記第1のメンバーが書かれたプログラミング言語がローカルコレクションに対する操作を実行するために提供するメカニズムを使用することによって、前記データコレクションに対して前記第1の操作を実行し、前記第1のメンバーは、前記データコレクションが完全にローカルなコレクションであるかのように前記第1の操作を実行し、
    前記コレクション共有コンポーネントが、前記第2のメンバーから、前記第2のメンバーが前記データコレクションに第2の操作を実行したという第3の通知を受信し、前記第2の操作を前記第1の操作に対して変換して、変換された前記第2の操作を前記第1のメンバーに伝搬することによって、前記第1の操作と前記第2の操作との間の衝突を解決し、前記第1の操作が前記第2の操作とは異なり、前記第1のメンバーが前記第2のメンバーとは異なる、データコレクションの共有を容易にするためのシステム。
  7. 前記第2の通知が、前記データコレクションのアイテムの順序位置を使用して前記第2の操作を記述し、前記順序位置が、前記第1の操作が前記第2の操作の前に実行されるか、または前記第2の操作の後に実行されるかによって異なるアイテムを参照する、請求項に記載のシステム。
  8. 前記第2の通知が、前記第1の操作を実行することによって得られる、前記データコレクションの状態の前記加入者のバージョンに関連する変更の記述を備える、請求項に記載のシステム。
  9. 前記コレクション共有コンポーネントが、前記データコレクション内のアイテムのコンテンツの構造に関係なく前記第2の通知を伝搬する、請求項に記載のシステム。
  10. 前記第1の通知が、前記データコレクションに実行される操作のタイプ、操作されているアイテムの前記データコレクション内の位置、および前記データコレクションの状態を備える、請求項に記載のシステム。
JP2013516603A 2010-06-23 2011-06-13 共有データコレクション Expired - Fee Related JP5941461B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/821,971 US9104715B2 (en) 2010-06-23 2010-06-23 Shared data collections
US12/821,971 2010-06-23
PCT/US2011/040235 WO2011163001A2 (en) 2010-06-23 2011-06-13 Shared data collections

Publications (3)

Publication Number Publication Date
JP2013529810A JP2013529810A (ja) 2013-07-22
JP2013529810A5 JP2013529810A5 (ja) 2014-06-26
JP5941461B2 true JP5941461B2 (ja) 2016-06-29

Family

ID=45353474

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013516603A Expired - Fee Related JP5941461B2 (ja) 2010-06-23 2011-06-13 共有データコレクション

Country Status (6)

Country Link
US (1) US9104715B2 (ja)
EP (1) EP2585955A4 (ja)
JP (1) JP5941461B2 (ja)
CN (1) CN103003815B (ja)
CA (1) CA2800916C (ja)
WO (1) WO2011163001A2 (ja)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10402485B2 (en) 2011-05-06 2019-09-03 David H. Sitrick Systems and methodologies providing controlled collaboration among a plurality of users
US11611595B2 (en) 2011-05-06 2023-03-21 David H. Sitrick Systems and methodologies providing collaboration among a plurality of computing appliances, utilizing a plurality of areas of memory to store user input as associated with an associated computing appliance providing the input
US9235867B2 (en) * 2012-06-04 2016-01-12 Microsoft Technology Licensing, Llc Concurrent media delivery
US9571563B2 (en) * 2012-08-23 2017-02-14 Telefonaktiebolaget Lm Ericsson (Publ) Handling a shared data object in a communication network
US20140068450A1 (en) * 2012-08-31 2014-03-06 Ebay Inc. Personalized Curation and Customized Social Interaction
US20140082473A1 (en) * 2012-09-14 2014-03-20 David H. Sitrick Systems And Methodologies Of Event Content Based Document Editing, Generating Of Respective Events Comprising Event Content, Then Defining A Selected Set Of Events, And Generating Of A Display Presentation Responsive To Processing Said Selected Set Of Events, For One To Multiple Users
US9372833B2 (en) 2012-09-14 2016-06-21 David H. Sitrick Systems and methodologies for document processing and interacting with a user, providing storing of events representative of document edits relative to a document; selection of a selected set of document edits; generating presentation data responsive to said selected set of documents edits and the stored events; and providing a display presentation responsive to the presentation data
US9251235B1 (en) * 2013-09-11 2016-02-02 Amazon Technologies, Inc. Log-based synchronization
US10956446B1 (en) 2013-09-11 2021-03-23 Amazon Technologies, Inc. Log-based synchronization with inferred context
US9946727B2 (en) * 2014-06-18 2018-04-17 International Business Machines Corporation Synchronizing user states across multiple clients of a NAS system
JP6298903B2 (ja) * 2015-01-30 2018-03-20 株式会社日立製作所 計算機システム、分散オブジェクト共有方法、エッジノード
US20160321226A1 (en) * 2015-05-01 2016-11-03 Microsoft Technology Licensing, Llc Insertion of unsaved content via content channel
US9948703B2 (en) * 2015-05-14 2018-04-17 Twilio, Inc. System and method for signaling through data storage
US20160344677A1 (en) 2015-05-22 2016-11-24 Microsoft Technology Licensing, Llc Unified messaging platform for providing interactive semantic objects
US10360287B2 (en) 2015-05-22 2019-07-23 Microsoft Technology Licensing, Llc Unified messaging platform and interface for providing user callouts
US10623423B1 (en) * 2019-06-06 2020-04-14 Sift Science, Inc. Systems and methods for intelligently implementing a machine learning-based digital threat mitigation service
US12093751B2 (en) * 2020-07-16 2024-09-17 T-Mobile Usa, Inc. Preserving eventually consistent distributed state of multi-layer applications

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5293600A (en) 1990-04-06 1994-03-08 International Business Machines Corporation Counter and flux bit locking for very fast shared serialization of shared data objects
US5546572A (en) * 1991-08-28 1996-08-13 Hitachi, Ltd. Method for retrieving database of image information
US5408470A (en) * 1993-10-14 1995-04-18 Intel Corporation Deferred synchronization of distributed objects
GB9604987D0 (en) 1996-03-08 1996-05-08 Ibm Data management system and method for replicated data
US6199116B1 (en) * 1996-05-24 2001-03-06 Microsoft Corporation Method and system for managing data while sharing application programs
US6128615A (en) 1997-06-17 2000-10-03 Compaq Computer Corporation Process-pair resource manager implementation of object bags
US6324587B1 (en) 1997-12-23 2001-11-27 Microsoft Corporation Method, computer program product, and data structure for publishing a data object over a store and forward transport
US6148301A (en) * 1998-07-02 2000-11-14 First Data Corporation Information distribution system
US6789252B1 (en) 1999-04-15 2004-09-07 Miles D. Burke Building business objects and business software applications using dynamic object definitions of ingrediential objects
US6529921B1 (en) 1999-06-29 2003-03-04 Microsoft Corporation Dynamic synchronization of tables
US6711595B1 (en) 2000-05-09 2004-03-23 Openwave Systems Inc. Method and apparatus for sharing standard template library objects among processes
US7197513B2 (en) * 2000-12-08 2007-03-27 Aol Llc Distributed image storage architecture
JP2003256461A (ja) * 2002-03-04 2003-09-12 Fuji Photo Film Co Ltd 画像検索方法および装置並びにプログラム
KR100483451B1 (ko) * 2002-05-27 2005-04-15 주식회사 아이큐브 컨텐츠 파일과 네비게이션 정보의 편집처리방법 및 그 방법에 의하여 정보가 기록된 기록매체
US7568151B2 (en) 2002-06-27 2009-07-28 Microsoft Corporation Notification of activity around documents
EP1443423A1 (en) 2003-01-28 2004-08-04 Bombardier Transportation (Technology) Germany GmbH Apparatus and method for data replication in a data network
US7577960B2 (en) 2003-06-19 2009-08-18 Microsoft Corporation System and method for managing cached objects using notifications bonds
US20050071195A1 (en) 2003-09-30 2005-03-31 Cassel David A. System and method of synchronizing data sets across distributed systems
US7467190B2 (en) * 2003-10-06 2008-12-16 Hitachi, Ltd. Method and apparatus for alert distribution and archive sharing
US20050218739A1 (en) * 2004-04-01 2005-10-06 Microsoft Corporation System and method for sharing objects between computers over a network
US7383291B2 (en) 2004-05-24 2008-06-03 Apple Inc. Method for sharing groups of objects
US7536517B2 (en) 2005-07-29 2009-05-19 Microsoft Corporation Direct-update software transactional memory
US20070078852A1 (en) 2005-10-04 2007-04-05 Microsoft Corporation Synchronizing shared resources in a collection
US20070174764A1 (en) * 2006-01-25 2007-07-26 Microsoft Corporation Data Collection
US7860825B2 (en) 2006-05-08 2010-12-28 Palm, Inc. Method for synchronizing software application and user data for asynchronous client-server and peer to peer computer networks
US20080059519A1 (en) 2006-09-02 2008-03-06 Tony Grifftih System, method, and apparatus for providing storage operations on an online computer system
CN101615203B (zh) 2009-07-23 2012-04-04 中兴通讯股份有限公司 并发控制方法及装置
US8719845B2 (en) 2010-05-19 2014-05-06 Microsoft Corporation Sharing and synchronization of objects

Also Published As

Publication number Publication date
CA2800916C (en) 2017-08-29
CN103003815B (zh) 2014-04-16
WO2011163001A3 (en) 2012-02-23
US9104715B2 (en) 2015-08-11
US20110320407A1 (en) 2011-12-29
WO2011163001A2 (en) 2011-12-29
EP2585955A2 (en) 2013-05-01
JP2013529810A (ja) 2013-07-22
CN103003815A (zh) 2013-03-27
EP2585955A4 (en) 2017-08-30
CA2800916A1 (en) 2011-12-29

Similar Documents

Publication Publication Date Title
JP5941461B2 (ja) 共有データコレクション
US10089488B2 (en) Systems, methods, and apparatuses for implementing cross-organizational data sharing
US10291704B2 (en) Networked solutions integration using a cloud business object broker
US8732668B2 (en) System and method of error handling in a platform as a service environment
US8719845B2 (en) Sharing and synchronization of objects
US8533230B2 (en) Expressing manageable resource topology graphs as dynamic stateful resources
US20080209390A1 (en) Pluggable model elements
JP2005259138A (ja) 非統合ツールの統合アーキテクチャ
JP2012527707A (ja) アプリケーションのコンポーネントをバージョン管理するシステム、方法及びコンピュータプログラムプロダクト
US8380787B2 (en) Federation of master data management systems
US11336588B2 (en) Metadata driven static determination of controller availability
CN110188114A (zh) 一种数据操作的优化方法、装置、系统、设备和存储介质
US9122559B2 (en) Extensible dependency management framework and method
US20200097266A1 (en) Saving a snippet of visual programming logic for reuse amongst programs created using an automation building tool
US7346910B1 (en) Administration of groups of computer programs, data processing systems, or system resources
US11899695B2 (en) Field extension hub for extension fields across a customer landscape
US7693807B2 (en) Mapping between anonymous modules in a network environment
Krizevnik et al. Improved SOA persistence architectural model
US8868578B2 (en) Building information technology services from a library of elements
US20240289390A1 (en) Message management using graph-based models
JP2005071158A (ja) ファイル排他制御方法
US20210004266A1 (en) Distributed System that Promotes Task-Machine Affinity
JP4628551B2 (ja) 動的インストールの方法及びコンピュータシステム
JP2009140443A (ja) ソフトウェア開発支援システム、排他制御方法およびプログラム
Beckner et al. Solution: Receiving 834 Data

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140507

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140507

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150105

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150304

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20150522

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150707

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151006

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20151204

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160330

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20160407

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160520

R150 Certificate of patent or registration of utility model

Ref document number: 5941461

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees