JP2010122724A - データ共有プログラム,データ共有方法及びデータ共有装置 - Google Patents

データ共有プログラム,データ共有方法及びデータ共有装置 Download PDF

Info

Publication number
JP2010122724A
JP2010122724A JP2008293217A JP2008293217A JP2010122724A JP 2010122724 A JP2010122724 A JP 2010122724A JP 2008293217 A JP2008293217 A JP 2008293217A JP 2008293217 A JP2008293217 A JP 2008293217A JP 2010122724 A JP2010122724 A JP 2010122724A
Authority
JP
Japan
Prior art keywords
node
shared data
value
update
registered
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.)
Granted
Application number
JP2008293217A
Other languages
English (en)
Other versions
JP5251446B2 (ja
Inventor
Nobutaka Imamura
信貴 今村
Yuichi Tsuchimoto
裕一 槌本
Toshihiro Shimizu
智弘 清水
Hiromichi Kobashi
博道 小橋
Yoshio Murata
美穂 村田
Soichi Shigeta
聡一 繁田
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2008293217A priority Critical patent/JP5251446B2/ja
Priority to US12/613,086 priority patent/US9026556B2/en
Publication of JP2010122724A publication Critical patent/JP2010122724A/ja
Application granted granted Critical
Publication of JP5251446B2 publication Critical patent/JP5251446B2/ja
Active 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/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】共有データを使用することによるユーザアプリケーションの処理遅延を回避しつつ、ノード間で正常にデータを共有する。
【解決手段】ネットワークに接続された複数のノードが、各ノード間で共通して使用する共有データにアクセスしつつユーザアプリケーション10の処理を連携して行うシステムにおいて次の機構を実現する。即ち、ユーザアプリケーション10の処理過程において必ずしも即時に同期を取る必要のない共有データについては、各ノードのローカルインスタンス処理部20において夫々保持する。そして、ユーザアプリケーション10の処理過程では、各ノードは、自ノードのローカルインスタンス処理部20において夫々保持する共有データにアクセスする。さらに、各ノードに設定された共有データ同士は、ネットワーク層処理部30を介し、ユーザアプリケーション10の処理から独立させて夫々同期をとる。
【選択図】 図1

Description

本発明は、ネットワーク接続された複数ノード間においてデータを共有する技術に関する。
ネットワークを介して複数のノードが接続された分散環境が構築されたコンピュータシステムにおいては、ノード間でデータを共有し、その共有データに対して複数のノードからアクセスすることが一般的に行われる。かかる共有データを用いた処理として基本的なものとしては、例えば、1つのノードで共有データを生成してこれに書き込みをし、他ノードでこれを読みだす処理(配布)がある。また、かかる書き込み及び読み出しをノード間において夫々相互に行う処理(受け渡し)がある。さらに、各ノードにおけるユーザアプリケーションの演算結果を、その値に応じて共有データに順次反映させる処理(集約)等がある。
そして、データの共有は、あるノードに存在するデータに対して、そのノードにネットワーク接続された他ノードからのアクセスを許容することによって実現される。この方法によるデータの共有は、ソフトウェア部品(オブジェクト)をネットワーク上の複数のノードに配置し、それらのオブジェクトに対して他ノードからアクセスしつつノード全体を連携動作させる分散オブジェクト技術においても用いられる。また、データの共有を実現する他の方法として、各ノードが備えるメモリ空間をソフトウェアにより仮想的に1つの共有メモリ領域とみなすソフトウェア分散共有メモリ(Software Distributed Shared Memory)の技術も用いられる。
しかしながら、他ノードに存在する共有データへアクセスを行う場合、ネットワークを経由したリモートアクセスとなるため、ローカルデータに対するアクセスと比較すると長い時間を要する。また、共有データに対しては、上述の例のように、配布や受け渡し、集約等の処理が行われ、複数のノードから書き込み及び読み出しがなされる。このため、その内容の整合性を保つべく、排他制御が必要となる。しかし、ソフトウェア分散共有メモリを適用している場合には、排他制御の手順が非常に複雑であるため、排他制御処理そのものに時間を要する。さらに、いずれの方法においても、共有データに対し他ノードによりロックがかけられている場合には、その共有データに対するアクセスは待機しなければならない。
このように、ユーザアプリケーションの処理において、共有データへのアクセスを行うと、リモートアクセスに起因する処理遅延及び排他制御に起因する処理遅延が生じ、処理性能が低下してしまうという問題が生じていた。そして、かかる共有データへのアクセスに伴う処理の遅延は、複数のノードに並列処理を行わせることによって仮想的に1つの高性能なコンピュータを構築して高速な処理を実現するクラスタやグリッド等においては、特にその処理性能の低下に重大な影響をもたらしていた。
そこで、少なくとも他ノードによる排他制御により共有データへの書き込みができない状態を回避するべく、次のような技術が提案されている。即ち、予め共有データを各ノードで夫々保持しておき、各ノードでは、夫々自ノードで保持する共有データに書き込みをする。そして、書き込みをしたときには、直ちに他ノードの共有データに対し同期を取る。しかし、かかる技術によれば、排他制御に起因する書き込みの待機は回避できるものの、上述のように、他ノードの共有データとの不整合を防ぐため、自ノードの共有データへの書き込み後、直ちに他ノードの共有データに対し同期を取る必要があることに変わりはない。このため、リモートアクセスによるユーザアプリケーションの処理遅延の問題は結局回避できない。
特開2007−58769号公報
以上のような問題点に鑑み、共有データを各ノードで夫々保持する一方、その同期処理を、ユーザアプリケーションの処理から独立させ、且つ、共有データ内容に不整合が生じないようにして行うことで、共有データを使用することによるユーザアプリケーションの処理遅延を回避しつつ、ノード間で正常にデータを共有することを目的とする。
開示のシステムでは、ネットワーク接続された複数のノードの各々で実行されるユーザアプリケーションが、ノード間で共通して使用する共有データにアクセスしつつ連携して処理を行うシステムにおいて、各ノードで次の機構を実現する。即ち、自ノードのユーザアプリケーションから、共有データの値及び共有データの更新における演算内容として関数が定義された更新関数が指定された新規共有データの登録依頼を受け付けたときに、その共有データの値及び更新関数を自ノードの記憶装置に登録する。ここで、この更新関数としては、演算結果が可換且つ冪等である関数を定義する。そして、自ノードのユーザアプリケーションから共有データに対する参照依頼を受け付けたときには、自ノードに登録された共有データの値を返す。一方、自ノードのユーザアプリケーションから共有データに対する更新依頼を更新値とともに受け付けたときには、更新関数による演算結果に応じて自ノードに登録された共有データの値を更新し、更新完了の通知を返す。また、自ノードに登録された共有データの値を更新したときに、自ノードのユーザアプリケーションに対する更新完了の通知とは非同期に、その更新値を他ノードに登録された共有データの値に反映させる反映依頼を、他ノードに対して送信する。一方、他ノードに登録された共有データの値が当該他ノードにおいて更新され、その更新値を自ノードに登録された共有データの値に反映させる反映依頼を当該他ノードから受信したときには、更新関数による演算結果に応じて、当該他ノードにおける更新値を、自ノードに登録された共有データに反映させる。
開示のシステムによれば、ネットワーク接続された各ノードにおいて、夫々共有データの値を保持している。そして、ユーザアプリケーションにより、共有データに対する参照依頼及び更新依頼のいずれがなされた場合であっても、そのアクセスは、自ノードで保持する共有データに対して行う。その一方で、各ノードで保持する共有データへの更新の反映は、ユーザアプリケーションの処理とは非同期に行われる。また、この共有データへの更新の反映は、演算結果が可換且つ冪等である更新関数による演算結果に応じて行われる。このため、共有データへのリモートアクセス及び共有データの排他処理に伴うユーザアプリケーションの処理遅延を回避し、且つ、ノード間の共有データに不整合を発生させることなく、データの共有を実現できる。
以下、分散環境におけるデータ共有機構の一実施例について説明する。
図1は、本実施例において、データ共有機構が適用されるシステムの全体構成図である。本システムでは、複数のノードがネットワークを介して相互に接続されている。各ノードは、少なくともCPU及び記憶装置を含んで構成されたコンピュータである。そして、これらのノードでは、他ノードとの間でデータを共有し、その共有データにアクセスしつつ連携して処理を行うユーザアプリケーションの処理を実行するユーザアプリケーション処理部10が夫々動作している。また、各ノードでは、共有データを保持するローカルインスタンス処理部20及び各ノードで保持する共有データに関する情報を他ノードとの間で送受信するネットワーク層処理部30を含んで構成される。なお、図1ではノードA〜ノードEの5つのノードが図示されているが、本システムを構成するノードの数及び接続形態はこれに限られない。
次に、ノードの構成について、図2を用いてさらに説明する。
ユーザアプリケーション処理部10は、上述のように、共有データを用いつつ他ノードとの間で連携して処理を行うものである。そして、共有データに対してアクセスをするときには、ローカルインスタンス処理部20に対し、アクセス依頼を送信する。ここで、アクセスには、参照処理及び更新処理を含む。このとき、アクセスする対象は自ノードのローカルインスタンス処理部20で保持する共有データであり、他ノードで保持する共有データにはアクセスしない。
ローカルインスタンス処理部20は、ローカルインスタンスマップ20Aを備え、これに共有データの値を保持する。ローカルインスタンスマップ20Aは、図3に示すように、共有データを一意に識別するためのキー,共有データの値,共有データを更新する処理が定義された更新関数,データをメモリ上の形式からネットワーク上の形式に変換するシリアライズ関数及びネットワーク上の形式からメモリ上の形式に変換するデシリアライズ関数を含んで構成される。なお、各ノードのユーザアプリケーション処理部10では、少なくとも、ある共有データに対応するキー及びその共有データに対応する更新関数の情報が共有されている。そして、ローカルインスタンス処理部20は、ユーザアプリケーション処理部10から共有データへのアクセス依頼を受信したときに、このローカルインスタンスマップ20Aに登録された共有データに対してアクセスを行う。また、ローカルインスタンス処理部20では、ローカルインスタンスマップ20Aの共有データを更新したときには、ネットワーク層処理部30に対し、他ノードのローカルインスタンスマップ20Aに登録された共有データへの反映依頼を送信させる依頼を送る。一方、他ノードのローカルインスタンスマップ20Aに登録された共有データが更新されたことがネットワーク層処理部30を介して通知されたときには、その更新をローカルインスタンスマップ20Aの共有データに反映させる。
ここで、更新関数としては、更新順序が異なっていても同一の結果になる可換の性質を有するとともに、同じ更新を繰り返しても同一の結果になる冪等の性質を有するものを設定する。かかる可換且つ冪等の性質を有する更新関数の具体例としては、最大数を求める関数(Max())や、最小数を求める関数(Min())等が該当する。かかる更新関数が共有データに対応付けられ、単に共有データの値を上書きするのではなく、この更新関数に基づいて共有データの値の更新が行われることで、次のような利点がある。即ち、各ノードにおいて夫々共有データの更新がなされ、その後の共有データの同期処理において更新が反映される順序がノード間で異なったとしても、ノード間で共有データの不整合(ここでは、同期を取った後における各ノード間の不整合を意味する)が生じることがない。このため、他ノードの共有データに対して更新を反映させるときに、対象となる全ノードに排他制御をかけ、更新順序を厳守しつつ即時に同期を取らなくても、ノード間における共有データの不整合を回避することができる。
また、かかる更新関数には、ノードのシステム環境により予め定義された関数に限らず、ユーザアプリケーションにおいて演算内容を任意に定義可能な、いわゆるユーザ定義関数を適用可能である。このユーザ定義関数を用いれば、例えば、データに対して複数の更新が一連のトランザクションとして一体不可分に行われるアトミックな更新処理を、任意に定義することができる。
ネットワーク層処理部30は、図4に示すような、キー及びそのキーに対応する共有データを使用するノードが対応付けられたネットワーク層マップ30Aを備える。そして、自ノードのローカルインスタンスマップ20Aの共有データの値が更新され、他ノードへの反映依頼を受け取ったときは、ネットワーク層マップ30Aに基づいて、その共有データにアクセスを行っている他ノードを特定し、反映依頼を送信する。一方、他ノードでローカルインスタンスマップ20Aの共有データの値が更新されたときには、その反映依頼を受信して、自ノードのローカルインスタンス処理部20に通知する。また、ネットワーク層処理部30は、図5に示すような、自ノードからアクセスを行う対象となるノードが設定されたノード設定ファイル30Bを備える。このノード設定ファイル30には、ネットワークに接続された全ての他ノードのうち、共有データの同期を取るべき隣接ノードのみを適宜設定することができる。そして、自ノードが起動されたときには、ネットワーク層マップ30Aにおいて、自ノードで使用している共有データを同じく使用している他ノードが漏れなく登録されているかの確認を行う。
なお、これらのローカルインスタンス処理部20及びネットワーク層処理部30は、各ノードにおいて、オペレーティングシステム上で動作するミドルウェアとして実装するか、または、ユーザアプリケーション処理部10にリンクするライブラリとして実装する。また、ローカルインスタンスマップ20A,ネットワーク層マップ30A及びノード設定ファイル30Bは、各ノードの記憶装置(例えばメモリやハードディスク等)に格納されている。
また、ローカルインスタンス処理部20により、第1の登録ステップ,第1の登録手段,参照ステップ,参照手段,更新ステップ及び更新手段が、ローカルインスタンス処理部20及びネットワーク層処理部30の連携により、依頼ステップ,依頼手段,反映ステップ,反映手段,起動ステップ及び再依頼ステップが、ネットワーク層処理部30により、第2の登録ステップが夫々実現される。
次に、ローカルインスタンス処理部20において実行される処理について、フローチャートを用いて説明する。
図6は、ユーザアプリケーション処理部10から、新たな共有データの登録依頼があったときに実行される処理を示す。
ステップ1(図では「S1」と略記する。以下同様)では、ユーザアプリケーション処理部10より、キー,共有データの初期値,更新関数,シリアライズ関数及びデシリアライズ関数を受信する。ステップ2では、受信したキーが、既にローカルインスタンスマップ20Aに登録されているか否かを判定する。受信したキーが登録されていなければ、ステップ3に進み、受信した情報をローカルインスタンスマップ20Aに登録し、登録が完了したことをユーザアプリケーション処理部10に通知する。一方、受信したキーが登録されていれば、ステップ4に進み、ユーザアプリケーション処理部10に対し、キーが重複している旨のエラーを返す。そして、ステップ5では、新規共有データを登録したことを、ネットワーク層処理部30に対して通知するとともに、他ノードにおいてキー「X」の共有データを使用しているかの確認依頼の送信を依頼する。なお、この通知がなされると、ネットワーク層処理部30では、後述する図13の処理を開始する。
図7は、ユーザアプリケーション処理部10から、共有データの参照依頼があったときに実行される処理を示す。
ステップ11では、ユーザアプリケーション処理部10から、キーを引数に共有データの参照依頼を受信する。そして、ステップ12では、ローカルインスタンスマップ20Aを参照し、受信した引数のキーに対応する共有データの値をユーザアプリケーション処理部10に返す。
図8は、ユーザアプリケーション処理部10から、共有データの更新依頼があったときに実行される処理を示す。
ステップ21では、ユーザアプリケーション処理部10から、キー及び共有データの更新値を引数として共有データの更新依頼を受信する。ステップ22では、引数のキーがローカルインスタンスマップ20Aに存在するか否かを判定する。キーが存在すれば、ステップ23に進み、更新値を、キーに対応する更新関数により演算し、その演算結果とローカルインスタンスマップ20Aに登録されている共有データの値とを比較する。一方、ステップ22でキーが存在しなければ、ステップ24に進み、ユーザアプリケーション処理部10に対して更新対象がないことを通知するエラーを返し、処理を終了する。さらに、ステップ25では、ステップ23による比較の結果、更新を実行するか否かを判定する。そして、更新値のほうがローカルインスタンスマップ20Aに登録された値よりも適切であり、更新を実行するときには、ステップ26に進み、ローカルインスタンスマップ20Aに登録されたデータを更新値で更新し、更新が成功したことをユーザアプリケーション処理部10に返す。そして、ステップ27において、ネットワーク層処理部30に対し、ローカルインスタンスマップ20Aの共有データの値を更新したことを通知するとともに、更新対象の共有データを使用している他ノードに対し、更新値の反映依頼を送信するように依頼する。また、ステップ25において、更新値とローカルインスタンスマップ20Aに登録された値とが同値のときには、ステップ28に進み、更新を実行せずに無視をする。さらに、ステップ25において、ローカルインスタンスマップ20Aに登録された値のほうが更新値よりも適切であり、更新を実行しないときには、ステップ29に進み、更新が失敗したことをユーザアプリケーション処理部10に返す。
なお、更新関数による演算結果に応じた更新処理の具体例として、更新対象の共有データに対応付けられた更新関数が、最大値を求める「Max()」の場合を用いて説明する。この場合、更新値のほうがローカルインスタンスマップ20Aに登録された共有データの値よりも大きければ、ローカルインスタンスマップ20Aに登録された共有データよりも更新値のほうが適切であるため、更新を実行する。また、更新値とローカルインスタンスマップ20Aに登録された共有データの値が同値のときは、更新依頼を無視する。さらに、更新値のほうがローカルインスタンスマップ20Aに登録された共有データの値よりも小さければ、更新をせず、更新が失敗したことをユーザアプリケーション処理部10に対して返す。
図9は、他ノードにおいて共有データの更新があり、その更新を反映させる反映依頼があったときに実行される処理を示す。なお、この場合、他ノードから反映依頼を直接受信するのはネットワーク層処理部30であり、ローカルインスタンス処理部20では、このネットワーク層処理部30を介して反映依頼を受け取ることとなる。
ステップ31では、ネットワーク層処理部30から、キー及び共有データの更新値を引数として、共有データの更新の反映依頼を受信する。ステップ32では、引数のキーがローカルインスタンスマップ20Aに存在するか否かを判定する。キーが存在すれば、ステップ33に進み、更新値を、キーに対応する更新関数により演算し、その演算結果とローカルインスタンスマップ20Aに登録されている共有データの値とを比較する。一方、ステップ32でキーが存在しなければ、ネットワーク層処理部30に対して更新対象がないことを通知するエラーを返し、処理を終了する。そして、ステップ34では、ステップ33による比較の結果、更新を実行するか否かを判定する。そして、更新値のほうがローカルインスタンスマップ20Aに登録された値よりも適切であり、更新を実行するときには、ステップ35に進み、ローカルインスタンスマップ20Aに登録された共有データを更新し、共有データが更新されたことを通知するイベントをユーザアプリケーション処理部10に発行する。さらに、ステップ36において、反映依頼の送信元ノード以外で更新対象の共有データにアクセスしているノードに対し、更新内容を反映させる反映依頼を送信するよう、ネットワーク層処理部30に対し依頼する。また、ステップ37において、更新値とローカルインスタンスマップ20Aに登録された値とが同値のときには、更新を実行せずに無視をする。さらに、ステップ38において、更新値のほうがローカルインスタンスマップ20Aに登録された値よりも適切であり、更新を実行しないときには、反映依頼の送信元のノードに対し、ローカルインスタンスマップ20Aに登録された値を反映させる反映依頼を送信するよう、ネットワーク層処理部30に対し依頼する。なお、このステップ38の処理が行われる状況としては、他ノードが起動された場合であって、その起動されたノードが動作していない間にさらに共有データの更新が進んでいたときに、起動されたノードに最新の更新値を反映させる必要がある状況が考えられる。そして、この更新依頼がなされた後、ネットワーク層処理部30では、図16に示す処理が実行される。
図10は、ユーザアプリケーション処理部10から共有データの削除依頼があったときに実行される処理を示す。
ステップ41では、ユーザアプリケーション処理部10から、キーを引数として共有データの削除依頼を受け付ける。ステップ42では、ローカルインスタンスマップ20Aから、引数のキーに対応するデータを削除する。ステップ43では、ネットワーク層処理部30に対し、キーを引数として、削除依頼を送信する。
次に、ネットワーク層処理部30において実行される処理について説明する。
図11は、ノードを起動したときに実行される処理を示す。
ステップ51では、ノード設定ファイル30Bを参照して、アクセス対象となる他ノードを特定し、特定したノードの夫々に対して接続する。ステップ52では、接続したノードの夫々のネットワーク層マップ30Aから、各ノードに登録されている共有データのキーをノードごとに取得(受信)する。そして、ステップ53では、キー及びそのキーが登録されているノードを対応付けたリストを作成する。ステップ54では、ローカルインスタンス処理部20に対し、自ノードのキーを問い合わせ、ローカルインスタンスマップ20Aに登録された自ノードのキー情報を取得し、そのリストを作成する。そして、ステップ55では、自ノードのキーのリストを、ステップ51で接続した他ノード全てに送信する。ステップ56では、ステップ53で作成した他ノードのキーのリストから、自ノードに登録されているキーと一致するキーを検索する。そして、ステップ57では、ステップ56における検索の結果、自ノードに登録されているキーと一致するものが存在すれば、ステップ58において、その一致するキーが登録された他ノードにおいて登録された共有データの値との間で同期を取る。具体的には、ローカルインスタンス処理部20から、ローカルインスタンスマップ20Aの共有データの更新が通知されたときに実行される処理(後述の図14に示す処理)に移行する。一方、自ノードに登録されているキーと一致するものが存在しなければ、処理を終了する。
図12は、他ノードが起動されたときに実行される処理を示す。なお、このとき、当該他ノードでは、上述の図11の処理が実行されている。
ステップ61では、起動された他ノードからの接続を受ける。ステップ62では、ローカルインスタンス処理部20に対して自ノードのキーを問い合わせ、ローカルインスタンスマップ20Aに登録された自ノードのキー情報を取得してリストを作成する。ステップ63では、作成した自ノードのキーのリストを起動された他ノードに送信する。ステップ64では、起動された他ノードから、そのローカルインスタンスマップ20Aに登録されているキーのリストを受信する。ステップ65では、ネットワーク層マップ30Aを参照し、起動された他ノードに登録されているキーが登録されていれば、そのキーに対応するノードに、起動された他ノードを追加させて反映する。
図13は、ローカルインスタンス処理部20から、新規共有データの登録が通知されたときに実行される処理を示す。なお、この処理は、上述の図6に示す、ローカルインスタンス処理部20における処理のステップ5の後に実行される。
ステップ71では、ローカルインスタンス処理部20から、キーを引数として、ローカルインスタンスマップ20Aに共有データを登録したことの通知及び他ノードにおける当該共有データの使用の確認依頼を送信する依頼を受け付ける。ステップ72では、ノード設定ファイル30Bを参照して、アクセス対象となる他ノードを特定して接続し、接続した全ノードに対して、引数のキーが登録されているかの確認依頼を送信する。なお、このとき、確認依頼を受信した他ノードでは、ローカルインスタンスマップ20Aに設定されたキー情報を取得し、これを返信する。ステップ73では、確認依頼に対する他ノードからの返信に基づいて、他ノードに引数のキーが登録されているか否かを判定する。そして、キーが登録されていれば、ステップ74に進み、キー及びそのキーが登録されているノードを対応付けてネットワーク層マップ30Aに登録する一方、キーが存在しなければ、処理を終了する。さらに、ステップ75では、その一致するキーが登録された他ノードにおいて登録された共有データの値との間で同期を取る。具体的には、キーが登録されているノードに登録された共有データの値を更新値とし、キー及びその更新値を新たな引数として、ローカルインスタンス処理部20に対し、反映依頼を送信する。なお、この反映依頼を受信したローカルインスタンス処理部20では、図9に示す処理を実行する。
図14は、ローカルインスタンスマップ20Aの共有データを更新したことの通知及び他ノードへその更新を反映させる反映依頼が受信されたときに実行される処理を示す。なお、この処理は、上述の図8に示す、ローカルインスタンス処理部20における処理のステップ27の後に実行される。
ステップ81では、ローカルインスタンス処理部20から、キー及び共有データの更新値を引数として、ローカルインスタンスマップ20Aの共有データを更新したことの通知及び他ノードへその更新を反映させる反映依頼を送信する依頼を受信する。ステップ82では、ネットワーク層マップ30Aを参照し、引数のキーが登録された他ノードを検索する。ステップ83では、ステップ82の検索の結果、引数のキーが登録された他ノードが存在するか否かを判定する。そして、引数のキーが登録された他ノードが存在するときには、ステップ84に進み、当該他ノードに対し、キー及び更新値を引数として、その更新値を当該他ノードのローカルインスタンスマップ20Aの共有データの値に反映させる反映依頼を送信する。一方、引数のキーが登録された他ノードが存在しないときには、処理を終了する。
図15は、他ノードで共有データの更新がなされ、その更新を自ノードに反映させるべく他ノードから更新の反映依頼を受信したときであって、自ノードのデータに更新を反映させたときに、更新依頼の送信元のノード以外の他ノードに対して更新の反映依頼を送る処理を示す。なお、この処理は、上述の図9に示す、ローカルインスタンス処理部20における処理のステップ36の後に実行される。
ステップ91では、ローカルインスタンス処理部20から、キー,共有データの更新値及び更新の反映依頼の送信元ノードを引数として、反映依頼を送信する依頼を受信する。ステップ92では、ネットワーク層マップ30Aを参照し、引数のキーが登録された他ノードを検索する。ステップ93では、ステップ92の検索において、引数のキーが登録された他ノードが存在するか否かを判定し、存在すれば、ステップ94に進み、そのノード(但し、更新依頼の送信元ノードを除く)に対し、反映依頼を送信する。一方、引数のキーが登録された他ノードが存在しなければ、処理を終了する。
図16は、他ノードで共有データの更新がなされ、その更新を自ノードに反映させるべく当該他ノードから更新の反映依頼を受信したときであって、自ノードのローカルインスタンスマップ20Aの共有データの値を更新しなかったときに、反映依頼の送信元ノードに対し、自ノードのローカルインスタンスマップ20Aの共有データの値の反映依頼を送る処理を示す。なお、この処理は、上述の図9に示す、ローカルインスタンス処理部20における処理のステップ38の後に実行される。
ステップ101では、ローカルインスタンス処理部20から、キー,共有データの更新値及び反映依頼の送信元ノードを引数として、ローカルインスタンスマップ20Aに登録された共有データの値の反映依頼を送信する依頼を受信する。ステップ102では、送信元ノードに対し、反映依頼を送信する。
図17は、他ノードで共有データの更新がなされ、その更新を自ノードに反映させるべく他ノードから更新の反映依頼を受信したときの処理を示す。
ステップ111では、共有データの更新がなされた他ノードから、キー及び共有データの更新値を引数として更新の反映依頼を受信する。ステップ112では、ネットワーク層マップ30Aを参照し、反映依頼の送信元ノードを検索する。ステップ113では、ステップ112の検索において、反映依頼の送信元ノードがネットワーク層マップ30Aに存在するか否かを判定する。そして、反映依頼の送信元ノードがネットワーク層マップ30Aに存在しなければ、ステップ114に進み、反映依頼の送信元ノードを引数のキーに対応させてネットワーク層マップ30Aに登録する。一方、ステップ113で送信元ノードがネットワーク層マップ30Aに存在すれば、ステップ115に進む。ステップ115では、キー及び更新値を新たな引数として、ローカルインスタンス処理部20に対し、更新の反映依頼を送信する。なお、この反映依頼を受信したローカルインスタンス処理部20では、図9に示す処理を実行する。
図18は、ローカルインスタンス処理部20から、ローカルインスタンスマップ20Aの共有データの削除が通知されたときに実行される処理を示す。
ステップ121では、ローカルインスタンス処理部20から、キーを引数として、ローカルインスタンスマップ20Aのデータを削除したことの通知を受信する。ステップ122では、ネットワーク層マップ30Aから、引数のキーが登録されたノードを検索する。そして、ステップ123では、ステップ122の検索において、引数のキーが登録されたノードが存在するか否かを判定する。そして、引数のキーが登録されたノードが存在すれば、ステップ124に進み、そのノードに自ノードの削除依頼を送る一方、存在しなければ、処理を終了する。ステップ125では、自ノードのネットワーク層マップ30Aから、キー及びノードの組を削除する。
ここで、本システムにおける処理シーケンスについて、具体例を用いて説明する。なお、以下の具体例においては、少なくともノードA及びノードBがネットワークに接続されているものとする。そして、ノードAのネットワーク層処理部30が備えるノード設定ファイル30BにはノードBが、ノードBのネットワーク層処理部30が備えるノード設定ファイル30BにはノードAが、夫々設定されているものとする。
[具体例1:ノード間におけるデータ配布]
具体例1では、次のことを実現させる。
(A)前準備
A−1:ノードAでキー「X」の共有データを登録する
A−2:ノードBでキー「X」の共有データを登録する
(B)データ転送
B−1:ノードAでキー「X」の共有データの値を「YYY」で更新する
B−2:ノードBでキー「X」の共有データの値を参照する
(C)後処理
C−1:ノードAでキー「X」の共有データを削除する
C−2:ノードBでキー「X」の共有データを削除する
図19は、ノードAでキー「X」のデータを登録する処理シーケンスを示す(A−1)。なお、以下の説明における(1)〜(7)は、図19における(1)〜(7)に対応している(他の処理シーケンスにおいても同様)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20に対し、新規共有データの登録依頼を送信する。このとき、キーが「X」,共有データの初期値が「null」,更新関数が「update()」(シリアライズ関数及びデシリアライズ関数については省略)で登録依頼がなされるとする。
(2−a)ノードAのローカルインスタンス処理部20では、登録依頼がなされた共有データの情報をローカルインスタンスマップ20Aに登録し、ユーザアプリケーション処理部10に対し、登録が完了したことを通知する。
(2−b)ノードAのローカルインスタンス処理部20から、ノードAのネットワーク層処理部30に対し、キー「X」の新規の共有データを登録したことを通知するとともに、他ノードにおけるキー「X」の共有データの使用の確認依頼を送信する。
(3)ノードAのネットワーク層処理部30から、ノードBのネットワーク層処理部30に対し、キー「X」が登録されているかの確認依頼を送信する。
(4)ノードBのネットワーク層処理部30から、さらに、ノードBのローカルインスタンス処理部20に対し、ローカルインスタンスマップ20Aにおいてキー「X」が登録されているかを問い合わせる。なお、ノードBのローカルインスタンスマップ20Aでは、この時点でキー「X」が登録されていないものとする。
(5)ノードBのローカルインスタンス処理部20から、ノードBのネットワーク層処理部30に対し、キー「X」が登録されていないことを返す。
(6)ノードBのネットワーク層処理部30から、ノードAのネットワーク層処理部30に対し、ノードBにキー「X」が登録されていないことを返す。ここで、ノードAでは、キー「X」の共有データが登録されている他ノードが存在しないため、処理を終了する。
図20は、ノードBでキー「X」の共有データを登録する処理シーケンスを示す(A−2)。
(1)ノードBのユーザアプリケーション処理部10から、ノードBのローカルインスタンス処理部20に対し、新たな共有データの登録依頼を送信する。このとき、キーが「X」,共有データの初期値が「null」,更新関数が「update()」で登録依頼がなされるとする。
(2−a)ノードBのローカルインスタンス処理部20では、登録依頼がなされた共有データをローカルインスタンスマップ20Aに登録し、ユーザアプリケーション処理部10に対し、登録が完了したことを返す。
(2−b)ノードBのローカルインスタンス処理部20から、ノードBのネットワーク層処理部30に対し、キー「X」の新規の共有データを登録したことを通知するとともに、他ノードにおいてキー「X」の共有データにアクセスしているかの確認依頼を送信する。
(3)ノードBのネットワーク層処理部30から、ノードAのネットワーク層処理部30に対し、キー「X」が登録されているかの確認依頼を送信する。
(4)ノードAのネットワーク層処理部30から、さらに、ノードAのローカルインスタンス処理部20に対し、ローカルインスタンスマップ20Aにおいてキー「X」が登録されているかを問い合わせる。なお、ノードAのローカルインスタンスマップ20Aでは、上述の(A−1)の処理により、キー「X」が登録されている。
(5)ノードAのローカルインスタンス処理部20から、ノードAのネットワーク層処理部30に対し、キー「X」が登録されていることを返す。このとき、ノードAのローカルインスタンス処理部20に登録された、キー「X」の共有データの値「null」もあわせて返される。また、ノードAのネットワーク層処理部30では、ネットワーク層マップ30Aに対し、キー「X」の共有データが登録されているノードとしてノードBを登録する。
(6)ノードAのネットワーク層処理部30から、ノードBのネットワーク層処理部30に対し、ノードAにキー「X」が登録されていること及びキー「X」の共有データの値「null」が返される。このとき、ノードBのネットワーク層処理部30では、ネットワーク層マップ30Aに対し、キー「X」の共有データが登録されているノードとしてノードAを登録する。
(7)ノードBのローカルインスタンス処理部20から、ノードBのネットワーク層処理部30に対し、キー「X」及びキー「X」の共有データの値「null」で、ローカルインスタンス処理部20に対し、反映依頼を送信する。
(8)ノードBのローカルインスタンス処理部20では、ローカルインスタンスマップ20Aにおけるキー「X」のデータと更新値とがともに「null」であるため、更新を反映させずに処理を終了する。なお、このように更新を反映せず、また、更新依頼の送信元ノードであるノードA以外で、キー「X」の共有データにアクセスしているノードが存在しないため、ここでノードBのネットワーク層処理部30から他ノードにさらに反映依頼を送信することはない。
図21は、ノードAでキー「X」の共有データの値を「YYY」で更新する処理シーケンスを示す(B−1)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20に対し、キーが「X」の共有データを「YYY」で更新する更新依頼を送信する。
(2−a)ノードAのローカルインスタンス処理部20では、ローカルインスタンスマップ20Aにおけるキー「X」の共有データを「YYY」に更新し、ユーザアプリケーション処理部10に対し、更新が成功したことを返す。
(2−b)ノードAのローカルインスタンス処理部20から、ノードAのネットワーク層処理部30に対し、他ノードにおけるキー「X」の共有データに更新を反映させるように反映依頼を送信する依頼をする。
(3)ノードAのネットワーク層処理部30から、ネットワーク層マップ30Aにキー「X」の共有データを使用しているノードとして登録されているノードBのネットワーク層処理部30に対し、キー「X」の共有データに更新を反映させるように反映依頼を送信する。
(4)ノードBのネットワーク層処理部30から、さらに、ノードBのローカルインスタンス処理部20に対し、ローカルインスタンスマップ20Aにおけるキー「X」の共有データへの反映依頼を送信する。
(5−a)ノードBのローカルインスタンス処理部20では、ローカルインスタンスマップ20Aにおけるキー「X」のデータを「YYY」に更新し、ネットワーク層処理部30に対し、更新が成功したことを返す。なお、反映依頼の送信元ノードであるノードA以外で、キー「X」の共有データにアクセスしているノードが存在しないため、ここでノードBのネットワーク層処理部30から他ノードにさらに反映依頼を送信することはない。
(5−b)ノードBのローカルインスタンス処理部20から、ノードBのユーザアプリケーション処理部10に対し、ローカルインスタンスマップ20Aのキー「X」の共有データが更新されたことを通知するイベントを発行する。
図22は、ノードBでキー「X」の共有データの値を参照する処理シーケンスを示す(B−2)。
(1)ノードBのユーザアプリケーション処理部10から、ノードBのローカルインスタンス処理部20に対し、キー「X」の共有データの参照依頼を送信する。
(2)ノードBのローカルインスタンス処理部20では、ローカルインスタンスマップ20Aのキー「X」の共有データの値である「YYY」を、ユーザアプリケーション処理部10に返す。
図23は、ノードAでキー「X」の共有データを削除する処理シーケンスを示す(C−1)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20に対し、キー「X」の共有データの削除依頼を送信する。
(2−a)ノードAのローカルインスタンス処理部20では、ローカルインスタンスマップ20Aから、キー「X」のデータを削除し、ユーザアプリケーション処理部10に対し、削除が完了したことを通知する。
(2−b)ノードAのローカルインスタンス処理部20から、ノードAのネットワーク層処理部30に対し、ネットワーク層マップ30から、キー「X」のデータを削除させる削除依頼を送る。
(3)ノードAのネットワーク層処理部30では、ネットワーク層マップ30から、キー「X」のデータを削除するとともに、ネットワーク層マップ30Aにキー「X」の共有データを使用しているノードとして登録されているノードBのネットワーク層処理部30に対し、キー「X」の削除依頼を送信する。これに従い、ノードBのネットワーク層処理部30では、ネットワーク層マップ30Aのキー「X」に対応するノードから、ノードAを削除する。
図24は、ノードBでキー「X」の共有データを削除する処理シーケンスを示す(C−2)。
(1)ノードBのユーザアプリケーション処理部10から、ノードBのローカルインスタンス処理部20に対し、キーが「X」のデータの削除依頼を送る。
(2−a)ノードBのローカルインスタンス処理部20では、キーが「X」のデータを削除し、ユーザアプリケーション処理部10に対し、削除が完了したことを通知する。
(2−b)ノードBのローカルインスタンス処理部20から、ノードBのネットワーク層処理部30に対し、ネットワーク層マップ30から、キー「X」のデータを削除させる削除依頼を送る。そして、ノードBのネットワーク層処理部30では、ネットワーク層マップ30から、キー「X」のデータを削除する。なお、この削除の時点で、ネットワーク層マップ30において、キー「X」にアクセスしているノードは登録されていないため、他ノードに削除依頼を送信することはない。
[具体例2:ノード間における集約処理]
具体例2では、次のことを実現させる。
(A)前準備
A−1 ノードAでキー「M」の共有データを登録する
A−2 ノードBでキー「M」の共有データを登録する
(B)集約処理
B−1 ノードAでキー「M」の共有データの値を「13」で更新する
B−2 ノードBでキー「M」の共有データの値を「9」で更新する
B−3 ノードBでキー「M」の共有データを参照する
(C)後処理
C−1 ノードAでキー「M」の共有データを削除する
C−2 ノードBでキー「M」の共有データを削除する
図25は、ノードAでキー「M」の共有データを登録する処理シーケンスを示す(A−1)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20に対し、新規共有データの登録依頼を送る。このとき、キーが「M」,共有データの初期値が「null」,更新関数が、集約処理として最大値を求める「max()」で登録依頼がなされるとする。ここで、(2)〜(6)については、上述の具体例1におけるA−1の処理と同様であるため、説明を省略する。
図26は、ノードBでキー「M」の共有データを登録する処理シーケンスを示す(A−2)。
(1)ノードBのユーザアプリケーション処理部10から、ノードBのローカルインスタンス処理部20に対し、新たな共有データの登録依頼を送る。このとき、キーが「X」,共有データの初期値が「null」,更新関数が「max()」で登録依頼がなされるとする。ここで、(2)〜(8)については、上述の具体例1におけるA−2の処理と同様であるため、説明を省略する。
図27は、ノードAでキー「M」の共有データの値を「13」で更新する処理シーケンスを示す(B−1)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20に対し、キーが「M」の共有データを「13」で更新する更新依頼を送る。
(2−a)ノードAのローカルインスタンス処理部20では、ローカルインスタンスマップ20Aのキー「M」の共有データを「13」に更新し、ユーザアプリケーション処理部10に対し、更新が成功したことを返す。
(2−b)ノードAのローカルインスタンス処理部20から、ノードAのネットワーク層処理部30に対し、他ノードにおけるキー「M」の共有データに更新を反映させるように反映依頼を送る。
(3)ノードAのネットワーク層処理部30から、ネットワーク層マップ30Aにキー「M」の共有データを使用しているノードとして登録されているノードBのネットワーク層処理部30に対し、キー「M」の共有データに対する更新の反映依頼が送信される。
(4)ノードBのネットワーク層処理部30から、さらに、ノードBのローカルインスタンス処理部20に対し、ローカルインスタンスマップ20Aにおけるキー「M」の共有データに対する更新の反映依頼を送信する。
(5−a)ノードBのローカルインスタンスでは、ローカルインスタンスマップ20Aにおけるキー「M」のデータがこの時点で「null」であり、更新関数「max()」に基づいて演算して比較すると、「null」よりも更新値である「13」のほうが大きいため、「13」で更新する。そして、ネットワーク層処理部30に対し、更新が成功したことを返す。なお、更新依頼の送信元ノードであるノードA以外で、キー「M」の共有データにアクセスしているノードが存在しないため、ここでノードBのネットワーク層処理部30から他ノードにさらに更新の反映依頼を送信することはない。
(5−b)ノードBのローカルインスタンス処理部20から、ノードBのユーザアプリケーション処理部10に対し、ローカルインスタンスマップ20Aのキー「M」のデータが更新されたことを通知するイベントを発行する。
図28は、ノードBでキー「M」の共有データの値を「9」で更新する処理シーケンスを示す(B−2)。
(1)ノードBのユーザアプリケーション処理部10から、ノードBのローカルインスタンス処理部20に対し、キーが「M」のデータを「9」で更新する更新依頼を送る。
(2)ノードBのローカルインスタンス処理部20では、キー「M」の更新関数「max()」に基づいて演算して比較すると、ローカルインスタンスマップ20Aに登録されたキー「M」のデータが「13」である一方、更新値が「9」であって「13」より小さいため、更新を行わない。そして、ユーザアプリケーション処理部10に対し、更新が失敗したことを返す。
図29は、ノードAでキー「M」の共有データの値を参照する処理シーケンスを示す(B−3)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20に対し、キーが「M」のデータの参照依頼を送信する。
(2)ノードAのローカルインスタンス処理部20では、ローカルインスタンスマップ20Aにおけるキー「M」の共有データの値である「13」を、ユーザアプリケーション処理部10に返す。
図30は、ノードAでキー「M」の共有データを削除する処理シーケンスを示す(C−1)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20に対し、キーが「M」のデータの削除依頼を送る。また、(2)〜(3)については、上述の具体例1におけるC−1の処理と同様であるため、説明を省略する。
図31は、ノードBでキー「M」の共有データを削除する処理シーケンスを示す(C−2)。
(1)ノードBのユーザアプリケーション処理部10から、ノードBのローカルインスタンス処理部20に対し、キーが「M」のデータの削除依頼を送る。また、(2)については、上述の具体例1におけるC−2の処理と同様であるため、説明を省略する。
[具体例3:ノード間における同期待ち合わせ処理]
具体例3では、次のことを実現させる。
(A)前準備
A−1 ノードAでキー「S」の共有データを登録する
A−2 ノードBでキー「S」の共有データを登録する
(B)集約処理
B−1 ノードAでキー「S」の共有データの値に「A」を加えて更新する
B−2 ノードBでキー「S」の共有データの値に「B」を加えて更新する
B−3 ノードAでキー「S」の共有データを参照する
B−4 ノードBでキー「S」の共有データを参照する
(C)後処理
C−1 ノードAでキー「S」の共有データを削除する
C−2 ノードBでキー「S」の共有データを削除する
図32は、ノードAでキー「S」の共有データを登録する処理シーケンスを示す(A−1)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20に対し、新たな共有データの登録依頼を送る。このとき、キーが「S」,共有データの初期値が「null」,更新関数が、集合に新たな要素を加える「add()」で登録依頼がなされるとする。ここで、(2)〜(6)については、上述の具体例1におけるA−1の処理と同様であるため、説明を省略する。
図33は、ノードBでキー「S」の共有データを登録する処理シーケンスを示す(A−2)。
(1)ノードBのユーザアプリケーション処理部10から、ノードBのローカルインスタンス処理部20に対し、新たな共有データの登録依頼を送る。このとき、ノードAと同様に、キーが「S」,共有データの初期値が「null」,更新関数が「add()」で登録依頼がなされる。また、(2)〜(8)については、上述の具体例1におけるA−2の処理と同様であるため、説明を省略する。
図34は、ノードAでキー「S」の共有データの値である集合に、要素「A」を加える処理シーケンスを示す(B−1)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20に対し、キーが「S」の共有データに「A」を加えて更新する更新依頼を送る。
(2−a)ノードAのローカルインスタンス処理部20では、ローカルインスタンスマップ20Aにおけるキー「S」の共有データの値である集合に「A」を加えて更新する。その結果、ノードAのローカルインスタンスマップ20Aにおけるキー「S」のデータは、{A}となる。そして、ユーザアプリケーション処理部10に対し、更新が成功したことを返す。
(2−b)ノードAのローカルインスタンス処理部20から、ノードAのネットワーク層処理部30に対し、他ノードにおけるキー「S」の共有データに更新を反映させるように反映依頼を送る。
(3)ノードAのネットワーク層処理部30から、ネットワーク層マップ30Aにキー「S」の共有データを使用しているノードとして登録されているノードBのネットワーク層処理部30に対し、キー「S」の共有データに更新を反映させるように反映依頼を送信する。
(4)ノードBのネットワーク層処理部30から、さらに、ノードBのローカルインスタンス処理部20に対し、ローカルインスタンスマップ20Aにおけるキー「S」の共有データに対する更新の反映依頼が送られる。
(5−a)ノードBのローカルインスタンス処理部20では、更新関数「add()」に基づき、ローカルインスタンスマップ20Aにおけるキー「S」の共有データに「A」を加えて更新する。その結果、ノードBのローカルインスタンスマップ20Aにおけるキー「S」のデータは、{A}となる。そして、ネットワーク層処理部30に対し、更新が成功したことを返す。なお、更新依頼の送信元ノードであるノードA以外で、キー「X」の共有データにアクセスしているノードが存在しないため、ここでノードBのネットワーク層処理部30から他ノードにさらに反映依頼を送信することはない。
(5−b)ノードBのローカルインスタンス処理部20から、ノードAのユーザアプリケーション処理部10に対し、ローカルインスタンスマップ20Aのキー「S」のデータが更新されたことを通知するイベントを発行する。
図35は、ノードBでキー「S」の共有データの値である集合に要素「B」を加える処理シーケンスを示す(B−2)。
(1)ノードBのユーザアプリケーション処理部10から、ノードBのローカルインスタンス処理部20に対し、キーが「S」の共有データに「B」を加えて更新する更新依頼を送る。
(2−a)ノードBのローカルインスタンス処理部10では、ローカルインスタンスマップ20Aにおけるキー「S」のデータである集合に「B」を加えて更新する。その結果、ノードBのローカルインスタンスマップ20Aにおけるキー「S」のデータは、{A,B}となる。そして、ユーザアプリケーション処理部10に対し、更新が成功したことを返す。
(2−b)ノードBのローカルインスタンス処理部20から、ノードBのネットワーク層処理部30に対し、他ノードにおけるキー「S」の共有データに対し更新を反映させるように反映依頼を送る。
(3)ノードBのネットワーク層処理部30から、ネットワーク層マップ30Aにキー「S」の共有データにアクセスしているノードとして登録されているノードAのネットワーク層処理部30に対し、キー「S」の共有データに対する更新の反映依頼を送信する。
(4)ノードAのネットワーク層処理部30から、さらに、ノードAのローカルインスタンス処理部20に対し、ローカルインスタンスマップ20Aにおけるキー「S」の共有データに対する更新の反映依頼を送る。
(5−a)ノードAのローカルインスタンス処理部20では、更新関数「add()」に基づき、ローカルインスタンスマップ20Aにおけるキー「S」の共有データに「B」を加えて更新する。その結果、ノードAのローカルインスタンスマップ20Aにおけるキー「S」のデータも、{A,B}となる。そして、ネットワーク層処理部30に対し、更新が成功したことを返す。
(5−b)ノードAのローカルインスタンス処理部20から、ノードAのユーザアプリケーション処理部10に対し、ローカルインスタンスマップ20Aのキー「S」のデータが更新されたことを通知するイベントを送信する。
図36は、ノードAでキー「S」の共有データの値を参照する処理シーケンスを示す(B−3)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20に対し、キーが「S」のデータの参照依頼を送る。
(2)ノードAのローカルインスタンス処理部20では、ローカルインスタンスマップ20Aにおける更新依頼がなされたキー「S」のデータの値である{A,B}を、ユーザアプリケーション処理部10に返す。
図37は、ノードBでキー「S」の共有データの値を参照する処理シーケンスを示す(B−4)。
(1)ノードBのユーザアプリケーション処理部10から、ノードBのローカルインスタンス処理部20に対し、キーが「S」のデータの参照依頼を送る。
(2)ノードBのローカルインスタンス処理部20では、ローカルインスタンスマップ20Aにおける更新依頼がなされたキー「S」の共有データの値である{A,B}を、ユーザアプリケーション処理部10に返す。
図38は、ノードAでキー「S」の共有データを削除する処理シーケンスを示す(C−1)。
(1)ノードAのユーザアプリケーション処理部10から、ノードAのローカルインスタンス処理部20Aに対し、キーが「S」の共有データの削除依頼を送る。また、(2)〜(3)については、上述の具体例1におけるC−1の処理と同様であるため、説明を省略する。
図39は、ノードAでキー「S」の共有データを削除する処理シーケンスを示す(C−2)。
(1)ノードBのユーザアプリケーションから、ノードBのローカルインスタンス処理部20に対し、キーが「S」の共有データの削除依頼を送る。また、(2)については、上述の具体例1におけるC−2の処理と同様であるため、説明を省略する。
かかる本システムにおけるデータ共有機構によれば、各ノードのローカルインスタンス処理部20において、夫々共有データの値を保持している。さらに、ユーザアプリケーション処理部10により、共有データの値に対する参照依頼及び更新依頼のいずれがなされた場合であっても、そのアクセスは、自ノードのローカルインスタンス処理部20に対して行う。なお、このとき、当該共有データにアクセスするノードは自ノードだけであるため、他ノードとの間での排他制御は必要ない。そして、ローカルインスタンス処理部20で保持する共有データへのアクセスが完了した時点で、共有データへのアクセスが完了したことがユーザアプリケーション処理部10に対して通知される。その一方で、ローカルインスタンス処理部20及びネットワーク層処理部30により、ユーザアプリケーション処理部10による処理とは独立して(非同期に)、他ノードの共有データの値を更新する。このため、本システムでは、ユーザアプリケーション処理部10の処理過程において、共有データへのアクセスが高速なローカルアクセスのみとなるとともに、他ノードの共有データへの同期処理も排他制御も行わない。したがって、他ノードの共有データにリモートアクセスを行うこと及び同期処理や排他制御を行うことによるユーザアプリケーション処理部10の処理遅延を回避することができる。
ここで、本システムでは、ローカルインスタンス処理部20で保持する各共有データに、更新関数を対応付けている。そして、あるノードにおける共有データに対する更新値を他ノードに反映させるときに、単に他ノードの共有データを上書きするのではなく、更新関数による演算結果に応じて更新を行う。さらに、この更新関数による演算結果は、可換で冪等である。このため、ユーザアプリケーション処理部10により、複数のノードで夫々共有データの更新が行われた場合であっても、その更新順序を厳守して排他制御をしつつ他ノードの共有データに対し即時に同期を取る必要がない。同期先のノードによって共有データの更新順序が逆転したとしても、各ノード間において共有データの値に不整合が生じることがないからである。
また、ローカルインスタンスマップ20Aに対し新規に共有データを登録するときや、ノードを起動するときに、ネットワークに接続された全ノードのうち、ノード設定ファイル30Bに設定されたノードに限り、ネットワーク層マップ30Aに登録がされる。そして、その共有データに対する更新の反映も、ノード設定ファイル30Bに設定されたノードに限られる。このため、ノード設定ファイル30Bへの設定内容次第で、共有データの同期処理を行うノードの範囲を変更することができる。
そして、本システムでは、他ノードのローカルインスタンスマップ20Aの共有データが更新され、その更新の反映依頼を受信してこれを自ノードのローカルインスタンスマップ20Aの共有データに反映させたときに、次の処理を行っている。即ち、自ノードのネットワーク層マップ30Aに登録された他ノードのうち、反映依頼の送信元ノード以外の他ノードに対して、さらにその更新の反映依頼を送信している。こうすることにより、反映依頼の送信元ノードでは共有データの同期処理を行う対象として設定されていないノードであっても、自ノードにおいて共有データの同期処理を行う対象として設定されていれば、同期処理を行うことができる。そして、この処理が各ノードで繰り返されることにより、同期処理を行うノードの範囲が段階的に広がっていく。
なお、ユーザアプリケーション処理部10で使用する共有データが1つであれば、上述の処理並びにローカルインスタンスマップ20A及びネットワーク層マップ30Aにおいて、キーを用いなくてもよい。
また、ネットワークに接続された全ノードにおいて共有データが使用され、全ノードとの間で共有データの同期処理を行う場合には、ノード設定ファイル30Bは無くてもよい。さらに、ネットワーク層マップ30Aについても、ネットワークに接続された全ノードにおいて全ての共有データが使用され、全ノードとの間で全ての共有データの同期処理を行う場合であって、且つネットワークに接続された他ノードが識別できているときには、これが無くてもデータ共有機構は実現可能である。
さらに、各ノードでアクセスしている共有データの情報を、任意のタイミングで、ノード間で交換してもよい。そのようにすれば、共有データにアクセスしているノード間において、より確実に更新を反映させて同期を取ることができる
また、上述のローカルインスタンス処理部20及びネットワーク層処理部30による処理のほかに、必要に応じて、共有データにアクセスしている全てのノードにおいて、共有データの値の同期を取ってもよい。かかる同期は、アプリケーションにおいて、共有データにアクセスしている全ノードにおいてその値が一致していなければ次の処理に進めない場合や、ユーザアプリケーションの処理が終了するとき等に必要に応じて取ればよい。そして、各ノードにより行われた更新が他ノードに反映されていることを確認する方法としては、次のようなものがある。即ち、共有データの更新ごとに、一意に識別するIDを振っておく。さらに、更新が反映されているかを確認するメッセージを、IDごとに各ノードが他の全てのノードに送信する。そして、全てのノードから更新が反映されている応答を受信したことをもって、共有データの値の同期が取れていることを確認する。また、全てのノードの共有データが一致していることを確認する方法としては、チェックサム等を用いてもよい。
ここで、一般に、複数のノードを用い、分散コンピューティングを適用して処理を行う例として、いわゆる配送問題や最適配置問題、巡回セールスマン問題等の組合せ最適化問題の求解がある。そして、組合せ最適化問題の求解においては、冗長な探索を回避して処理を高速化するべく、並列分枝限定法が適用される。この並列分枝限定法を分散コンピューティングで行う場合、演算対象となる値の範囲を分割し、分割された範囲内において演算を行う複数の子問題を生成して各ノードで分散処理させる。そして、各ノードでは、子問題の処理結果として、暫定解が夫々算出され、最終的に、全ノードで算出された暫定解のうち、目標とする解に最も近いものが採用される。ここで、処理の過程において、各ノードで算出された暫定解のうち、最終的な解に近いもの又はその評価値を、子問題を処理するノード間において共有することで、それ以降の子問題の処理において不要な探索を回避する枝刈りを行うことができる。例えば、複数の都市及びその各都市間の距離が与えられ、その都市の全てを巡って出発地点に戻るための移動距離が最短のルートを探索する巡回セールスマン問題の求解では、次のことが可能である。即ち、子問題を処理する各ノードで夫々ルートを探索した結果、あるノードにおいて、移動距離が100キロメートルのルートが暫定解として得られたとする。そして、その移動距離が、その時点で各ノードで得られた子問題における暫定解の移動距離のうち最短である場合、その100キロメートルという値を評価値としてノード間で共有する。そうすれば、それ以降の各ノードにおけるルート探索において、移動距離が100キロメートルを超えたときには、少なくともそのルートは最終的な目標とする解になり得ないことが明らかとなるため、その処理を中断し、不要な演算を省くことができる。
そして、かかる枝刈りのためにノード間において共有するデータは、処理過程において必ずしも即時に同期を取る必要がない。このデータにおいて即時に同期が取れていなくても、不要な演算の一部を省くことができないだけで、最終的な処理結果に誤りが生じることはないからである。そして、かかる分散コンピューティングで並列処理を行う場合、共有データの同期をとることと、その同期を取ることにより処理に遅延が発生することと、を対比すれば、処理における遅延の発生を回避することを優先させる必要がある。本システムにおけるデータ共有機構は、上述のように、共有データの同期処理を、ユーザアプリケーションの処理から独立させて非同期に行うため、ユーザアプリケーションの処理に遅延を発生させない。このため、このような枝刈りに用いるデータを共有するのに有効である。
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)ネットワーク接続された複数のノードの各々で実行されるユーザアプリケーションが、ノード間で共通して使用する共有データにアクセスしつつ連携して処理を行うシステムにおいて、各ノードで夫々実行されるデータ共有プログラムであって、自ノードのユーザアプリケーションから、共有データの値、及び演算結果が可換且つ冪等である関数がその共有データの更新における演算内容として定義された更新関数が指定された、新規共有データの登録依頼を受け付けたときに、その共有データの値及び更新関数を自ノードの記憶装置に登録する第1の登録ステップと、自ノードのユーザアプリケーションから共有データに対する参照依頼を受け付けたときに、自ノードに登録された共有データの値を、自ノードのユーザアプリケーションに対して返す参照ステップと、自ノードのユーザアプリケーションから、共有データに対する更新依頼を更新値とともに受け付けたときに、前記更新関数による演算結果に応じて、自ノードに登録された共有データの値を更新値で更新し、更新完了の通知を自ノードのユーザアプリケーションに対して返す更新ステップと、自ノードに登録された共有データの値を更新したときに、自ノードのユーザアプリケーションに対する更新完了の通知とは非同期に、その更新値を他ノードに登録された共有データの値に反映させる反映依頼を、他ノードに対して送信する依頼ステップと、他ノードに登録された共有データの値が当該他ノードにおいて更新され、その更新値を自ノードに登録された共有データの値に反映させる反映依頼を当該他ノードから受信したときに、前記更新関数による演算結果に応じて、当該他ノードにおける更新値を、自ノードに登録された共有データに反映させる反映ステップと、を実行することを特徴とするデータ共有プログラム。
(付記2)前記更新関数には、ユーザアプリケーションにおいて演算内容を任意に定義可能なユーザ定義関数を用いることができることを特徴とする付記1記載のデータ共有プログラム。
(付記3)全ての他ノードのうち、自ノードとの間で共有データの値の同期を取る対象とする他ノードを特定する情報を自ノードの記憶装置に登録する第2の登録ステップをさらに含み、前記依頼ステップは、前記登録された他ノードに対してのみ、更新値を反映させる依頼を送信することを特徴とする付記1又は付記2に記載のデータ共有プログラム。
(付記4)前記反映ステップにより、他ノードにおける更新値を自ノードに登録された共有データの値に反映させたときに、反映依頼の送信元であるノード以外の他ノードに対し、その更新値をさらに反映させる依頼を送信する再依頼ステップをさらに実行することを特徴とする付記1〜付記3のいずれか1つに記載のデータ共有プログラム。
(付記5)前記反映ステップにより、他ノードにおける更新値を自ノードに登録された共有データの値に反映させたときに、自ノードで動作するユーザアプリケーションに対し、自ノードに登録された共有データの値が更新されたことを通知するイベントを発行することを特徴とする付記1〜付記4のいずれか1つに記載のデータ共有プログラム。
(付記6)自ノードを起動したときに、自ノードに登録された共有データの値と、他ノードに登録された共有データの値と、の同期を取る起動ステップをさらに含むことを特徴とする付記1〜付記5のいずれか1つに記載のデータ共有プログラム。
(付記7)自ノードのユーザアプリケーションから、共有データの削除依頼があったときに、自ノードに登録された共有データの値及び更新関数を削除する削除ステップをさらに含むことを特徴とする付記1〜付記6のいずれか1つに記載のデータ共有プログラム。
(付記8)少なくとも、前記登録ステップ,前記参照ステップ,前記更新ステップ,前記依頼ステップ及び前記反映ステップは、オペレーティングシステム上で動作するミドルウェア又はユーザアプリケーションにリンクするライブラリにおいて実現されることを特徴とする付記1〜付記7のいずれか1つに記載のデータ共有プログラム。
(付記9)ネットワーク接続された複数のノードの各々で実行されるユーザアプリケーションが、ノード間で共通して使用する共有データにアクセスしつつ連携して処理を行うシステムにおいて、各ノードで夫々実行されるデータ共有方法であって、自ノードのユーザアプリケーションから、共有データの値、及び演算結果が可換且つ冪等である関数がその共有データの更新における演算内容として定義された更新関数が指定された、新規共有データの登録依頼を受け付けたときに、その共有データの値及び更新関数を自ノードの記憶装置に登録する第1の登録ステップと、自ノードのユーザアプリケーションから共有データに対する参照依頼を受け付けたときに、自ノードに登録された共有データの値を、自ノードのユーザアプリケーションに対して返す参照ステップと、自ノードのユーザアプリケーションから、共有データに対する更新依頼を更新値とともに受け付けたときに、前記更新関数による演算結果に応じて、自ノードに登録された共有データの値を更新値で更新し、更新完了の通知を自ノードのユーザアプリケーションに対して返す更新ステップと、自ノードに登録された共有データの値を更新したときに、自ノードのユーザアプリケーションに対する更新完了の通知とは非同期に、その更新値を他ノードに登録された共有データの値に反映させる反映依頼を、他ノードに対して送信する依頼ステップと、他ノードに登録された共有データの値が当該他ノードにおいて更新され、その更新値を自ノードに登録された共有データの値に反映させる反映依頼を当該他ノードから受信したときに、前記更新関数による演算結果に応じて、当該他ノードにおける更新値を、自ノードに登録された共有データに反映させる反映ステップと、を実行することを特徴とするデータ共有方法。
(付記10)ネットワーク接続された複数のノードの各々で実行されるユーザアプリケーションが、ノード間で共通して使用する共有データにアクセスしつつ連携して処理を行うシステムにおいて、各ノードに設けられるデータ共有装置であって、自ノードのユーザアプリケーションから、共有データの値、及び演算結果が可換且つ冪等である関数がその共有データの更新における演算内容として定義された更新関数が指定された、新規共有データの登録依頼を受け付けたときに、その共有データの値及び更新関数を自ノードの記憶装置に登録する第1の登録手段と、自ノードのユーザアプリケーションから共有データに対する参照依頼を受け付けたときに、自ノードに登録された共有データの値を、自ノードのユーザアプリケーションに対して返す参照手段と、自ノードのユーザアプリケーションから、共有データに対する更新依頼を更新値とともに受け付けたときに、前記更新関数による演算結果に応じて、自ノードに登録された共有データの値を更新値で更新し、更新完了の通知を自ノードのユーザアプリケーションに対して返す更新手段と、自ノードに登録された共有データの値を更新したときに、自ノードのユーザアプリケーションに対する更新完了の通知とは非同期に、その更新値を他ノードに登録された共有データの値に反映させる反映依頼を、他ノードに対して送信する依頼手段と、他ノードに登録された共有データの値が当該他ノードにおいて更新され、その更新値を自ノードに登録された共有データの値に反映させる反映依頼を当該他ノードから受信したときに、前記更新関数による演算結果に応じて、当該他ノードにおける更新値を、自ノードに登録された共有データに反映させる反映手段と、を含んで構成されたことを特徴とするデータ共有装置。
データ共有機構が適用されるシステムの全体構成の説明図 ノードの構成の説明図 ローカルインスタンスマップの説明図 ネットワーク層マップの説明図 ノード設定ファイルの説明図 ローカルインスタンス処理部による処理(共有データの登録依頼時)のフローチャート ローカルインスタンス処理部による処理(共有データの参照依頼時)のフローチャート ローカルインスタンス処理部による処理(共有データの更新依頼時)のフローチャート ローカルインスタンス処理部による処理(他ノードにおける更新の反映依頼時)のフローチャート ローカルインスタンス処理部による処理(共有データの削除依頼時)のフローチャート ネットワーク層処理部による処理(自ノード起動時)のフローチャート ネットワーク層処理部による処理(他ノード起動時)のフローチャート ネットワーク層処理部による処理(共有データの登録依頼時)のフローチャート ネットワーク層処理部による処理(共有データの更新依頼時)のフローチャート ネットワーク層処理部による処理(他ノードにおける更新の反映依頼時)のフローチャート ネットワーク層処理部による処理(他ノードにおける更新の反映依頼時)のフローチャート ネットワーク層処理部による処理(他ノードにおける更新の反映依頼時)のフローチャート ネットワーク層処理部による処理(共有データの削除依頼時)のフローチャート ノード間におけるデータ配布の例の処理シーケンス図(A−1) ノード間におけるデータ配布の例の処理シーケンス図(A−2) ノード間におけるデータ配布の例の処理シーケンス図(B−1) ノード間におけるデータ配布の例の処理シーケンス図(B−2) ノード間におけるデータ配布の例の処理シーケンス図(C−1) ノード間におけるデータ配布の例の処理シーケンス図(C−2) ノード間における集約処理の処理シーケンス図(A−1) ノード間における集約処理の処理シーケンス図(A−2) ノード間における集約処理の処理シーケンス図(B−1) ノード間における集約処理の処理シーケンス図(B−2) ノード間における集約処理の処理シーケンス図(B−3) ノード間における集約処理の処理シーケンス図(C−1) ノード間における集約処理の処理シーケンス図(C−2) ノード間における同期待ち合わせ処理の処理シーケンス図(A−1) ノード間における同期待ち合わせ処理の処理シーケンス図(A−2) ノード間における同期待ち合わせ処理の処理シーケンス図(B−1) ノード間における同期待ち合わせ処理の処理シーケンス図(B−2) ノード間における同期待ち合わせ処理の処理シーケンス図(B−3) ノード間における同期待ち合わせ処理の処理シーケンス図(B−4) ノード間における同期待ち合わせ処理の処理シーケンス図(C−1) ノード間における同期待ち合わせ処理の処理シーケンス図(C−2)
符号の説明
10 ユーザアプリケーション
20 ローカルインスタンス処理部
20A ローカルインスタンスマップ
30 ネットワーク層処理部
30A ネットワーク層マップ
30B ノード設定ファイル

Claims (7)

  1. ネットワーク接続された複数のノードの各々で実行されるユーザアプリケーションが、ノード間で共通して使用する共有データにアクセスしつつ連携して処理を行うシステムにおいて、各ノードで夫々実行されるデータ共有プログラムであって、
    自ノードのユーザアプリケーションから、共有データの値、及び演算結果が可換且つ冪等である関数がその共有データの更新における演算内容として定義された更新関数が指定された、新規共有データの登録依頼を受け付けたときに、その共有データの値及び更新関数を自ノードの記憶装置に登録する第1の登録ステップと、
    自ノードのユーザアプリケーションから共有データに対する参照依頼を受け付けたときに、自ノードに登録された共有データの値を、自ノードのユーザアプリケーションに対して返す参照ステップと、
    自ノードのユーザアプリケーションから、共有データに対する更新依頼を更新値とともに受け付けたときに、前記更新関数による演算結果に応じて、自ノードに登録された共有データの値を更新値で更新し、更新完了の通知を自ノードのユーザアプリケーションに対して返す更新ステップと、
    自ノードに登録された共有データの値を更新したときに、自ノードのユーザアプリケーションに対する更新完了の通知とは非同期に、その更新値を他ノードに登録された共有データの値に反映させる反映依頼を、他ノードに対して送信する依頼ステップと、
    他ノードに登録された共有データの値が当該他ノードにおいて更新され、その更新値を自ノードに登録された共有データの値に反映させる反映依頼を当該他ノードから受信したときに、前記更新関数による演算結果に応じて、当該他ノードにおける更新値を、自ノードに登録された共有データに反映させる反映ステップと、
    を実行することを特徴とするデータ共有プログラム。
  2. 前記更新関数には、ユーザアプリケーションにおいて演算内容を任意に定義可能なユーザ定義関数を用いることができることを特徴とする請求項1記載のデータ共有プログラム。
  3. 全ての他ノードのうち、自ノードとの間で共有データの値の同期を取る対象とする他ノードを特定する情報を自ノードの記憶装置に登録する第2の登録ステップをさらに含み、
    前記依頼ステップは、前記登録された他ノードに対してのみ、更新値を反映させる依頼を送信することを特徴とする請求項1又は請求項2に記載のデータ共有プログラム。
  4. 前記反映ステップにより、他ノードにおける更新値を自ノードに登録された共有データの値に反映させたときに、反映依頼の送信元であるノード以外の他ノードに対し、その更新値をさらに反映させる依頼を送信する再依頼ステップをさらに実行することを特徴とする請求項1〜請求項3のいずれか1つに記載のデータ共有プログラム。
  5. 前記反映ステップにより、他ノードにおける更新値を自ノードに登録された共有データの値に反映させたときに、自ノードで動作するユーザアプリケーションに対し、自ノードに登録された共有データの値が更新されたことを通知するイベントを発行することを特徴とする請求項1〜請求項4のいずれか1つに記載のデータ共有プログラム。
  6. ネットワーク接続された複数のノードの各々で実行されるユーザアプリケーションが、ノード間で共通して使用する共有データにアクセスしつつ連携して処理を行うシステムにおいて、各ノードで夫々実行されるデータ共有方法であって、
    自ノードのユーザアプリケーションから、共有データの値、及び演算結果が可換且つ冪等である関数がその共有データの更新における演算内容として定義された更新関数が指定された、新規共有データの登録依頼を受け付けたときに、その共有データの値及び更新関数を自ノードの記憶装置に登録する登録ステップと、
    自ノードのユーザアプリケーションから共有データに対する参照依頼を受け付けたときに、自ノードに登録された共有データの値を、自ノードのユーザアプリケーションに対して返す参照ステップと、
    自ノードのユーザアプリケーションから、共有データに対する更新依頼を更新値とともに受け付けたときに、前記更新関数による演算結果に応じて、自ノードに登録された共有データの値を更新値で更新し、更新完了の通知を自ノードのユーザアプリケーションに対して返す更新ステップと、
    自ノードに登録された共有データの値を更新したときに、自ノードのユーザアプリケーションに対する更新完了の通知とは非同期に、その更新値を他ノードに登録された共有データの値に反映させる反映依頼を、他ノードに対して送信する依頼ステップと、
    他ノードに登録された共有データの値が当該他ノードにおいて更新され、その更新値を自ノードに登録された共有データの値に反映させる反映依頼を当該他ノードから受信したときに、前記更新関数による演算結果に応じて、当該他ノードにおける更新値を、自ノードに登録された共有データに反映させる反映ステップと、
    を実行することを特徴とするデータ共有方法。
  7. ネットワーク接続された複数のノードの各々で実行されるユーザアプリケーションが、ノード間で共通して使用する共有データにアクセスしつつ連携して処理を行うシステムにおいて、各ノードに設けられるデータ共有装置であって、
    自ノードのユーザアプリケーションから、共有データの値、及び演算結果が可換且つ冪等である関数がその共有データの更新における演算内容として定義された更新関数が指定された、新規共有データの登録依頼を受け付けたときに、その共有データの値及び更新関数を自ノードの記憶装置に登録する登録手段と、
    自ノードのユーザアプリケーションから共有データに対する参照依頼を受け付けたときに、自ノードに登録された共有データの値を、自ノードのユーザアプリケーションに対して返す参照手段と、
    自ノードのユーザアプリケーションから、共有データに対する更新依頼を更新値とともに受け付けたときに、前記更新関数による演算結果に応じて、自ノードに登録された共有データの値を更新値で更新し、更新完了の通知を自ノードのユーザアプリケーションに対して返す更新手段と、
    自ノードに登録された共有データの値を更新したときに、自ノードのユーザアプリケーションに対する更新完了の通知とは非同期に、その更新値を他ノードに登録された共有データの値に反映させる反映依頼を、他ノードに対して送信する依頼手段と、
    他ノードに登録された共有データの値が当該他ノードにおいて更新され、その更新値を自ノードに登録された共有データの値に反映させる反映依頼を当該他ノードから受信したときに、前記更新関数による演算結果に応じて、当該他ノードにおける更新値を、自ノードに登録された共有データに反映させる反映手段と、
    を含んで構成されたことを特徴とするデータ共有装置。
JP2008293217A 2008-11-17 2008-11-17 データ共有プログラム,データ共有方法及びデータ共有装置 Active JP5251446B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008293217A JP5251446B2 (ja) 2008-11-17 2008-11-17 データ共有プログラム,データ共有方法及びデータ共有装置
US12/613,086 US9026556B2 (en) 2008-11-17 2009-11-05 Computer-readable medium storing data sharing program, data sharing method, and data sharing processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008293217A JP5251446B2 (ja) 2008-11-17 2008-11-17 データ共有プログラム,データ共有方法及びデータ共有装置

Publications (2)

Publication Number Publication Date
JP2010122724A true JP2010122724A (ja) 2010-06-03
JP5251446B2 JP5251446B2 (ja) 2013-07-31

Family

ID=42172758

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008293217A Active JP5251446B2 (ja) 2008-11-17 2008-11-17 データ共有プログラム,データ共有方法及びデータ共有装置

Country Status (2)

Country Link
US (1) US9026556B2 (ja)
JP (1) JP5251446B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013031286A1 (ja) * 2011-09-02 2013-03-07 株式会社日立製作所 データ共有装置およびデータ共有方法
JP2015005260A (ja) * 2013-06-24 2015-01-08 日本電信電話株式会社 データ処理装置、データ処理方法及びデータ処理プログラム

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8707082B1 (en) * 2009-10-29 2014-04-22 Symantec Corporation Method and system for enhanced granularity in fencing operations
US8799922B2 (en) * 2010-05-25 2014-08-05 Microsoft Corporation Programming model for collaborative distributed systems
US8621260B1 (en) 2010-10-29 2013-12-31 Symantec Corporation Site-level sub-cluster dependencies
US9524324B1 (en) * 2012-12-26 2016-12-20 Emc Corporation Framework for performing updates of globally shared data in a multiprocessor environment
US9971826B1 (en) * 2016-09-14 2018-05-15 SyncRTC Inc. Methods and apparatus for a distributed shared memory for device synchronization

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004519040A (ja) * 2000-11-02 2004-06-24 サイトリックス システムズ, インコーポレイテッド 部分的ページ再生成に影響を与えるページ生成コードを強化する方法および装置
JP2006126972A (ja) * 2004-10-26 2006-05-18 Denso It Laboratory Inc データ共有方法及びデータ共有システム並びにエージェントプログラム
WO2008005078A1 (en) * 2006-06-30 2008-01-10 Microsoft Corporation Inter-proximity communication within a rendezvous federation
JP2008072430A (ja) * 2006-09-14 2008-03-27 Hitachi Ltd センサノードに接続されるセンサネットサーバ
WO2008110461A1 (en) * 2007-03-09 2008-09-18 Telefonaktiebolaget Lm Ericsson (Publ) System, method, and network node for checking the consistency of node relationship information in the nodes of a strongly connected network

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6199116B1 (en) * 1996-05-24 2001-03-06 Microsoft Corporation Method and system for managing data while sharing application programs
JP4309629B2 (ja) * 2002-09-13 2009-08-05 株式会社日立製作所 ネットワークシステム
JP2007058769A (ja) 2005-08-26 2007-03-08 Canon Inc 分散データベースの同期方法
GB0600348D0 (en) * 2006-01-10 2006-02-15 Ibm Updating of data processing and communication devices

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004519040A (ja) * 2000-11-02 2004-06-24 サイトリックス システムズ, インコーポレイテッド 部分的ページ再生成に影響を与えるページ生成コードを強化する方法および装置
JP2006126972A (ja) * 2004-10-26 2006-05-18 Denso It Laboratory Inc データ共有方法及びデータ共有システム並びにエージェントプログラム
WO2008005078A1 (en) * 2006-06-30 2008-01-10 Microsoft Corporation Inter-proximity communication within a rendezvous federation
JP2008072430A (ja) * 2006-09-14 2008-03-27 Hitachi Ltd センサノードに接続されるセンサネットサーバ
WO2008110461A1 (en) * 2007-03-09 2008-09-18 Telefonaktiebolaget Lm Ericsson (Publ) System, method, and network node for checking the consistency of node relationship information in the nodes of a strongly connected network

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6013013069; Giuseppe DeCandia: 'Dynamo: amazon's highly available key-value store' SOSP '07 Proceedings of twenty-first ACM SIGOPS symposium on Operating systems principles , Pages 205-220, ACM *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013031286A1 (ja) * 2011-09-02 2013-03-07 株式会社日立製作所 データ共有装置およびデータ共有方法
JP2015005260A (ja) * 2013-06-24 2015-01-08 日本電信電話株式会社 データ処理装置、データ処理方法及びデータ処理プログラム

Also Published As

Publication number Publication date
US9026556B2 (en) 2015-05-05
US20100125550A1 (en) 2010-05-20
JP5251446B2 (ja) 2013-07-31

Similar Documents

Publication Publication Date Title
US10831720B2 (en) Cloud storage distributed file system
JP5251446B2 (ja) データ共有プログラム,データ共有方法及びデータ共有装置
WO2019231689A1 (en) Multi-protocol cloud storage for big data and analytics
JP4612715B2 (ja) 情報処理システム、データ更新方法およびデータ更新プログラム
US20190370365A1 (en) Distributed transactions in cloud storage with hierarchical namespace
EP3058690B1 (en) System and method for creating a distributed transaction manager supporting repeatable read isolation level in a mpp database
JP3779263B2 (ja) 共同作業システムのためのコンフリクトの解決
US9063908B2 (en) Rapid recovery from loss of storage device cache
US7693882B2 (en) Replicating data across the nodes in a cluster environment
US11297031B2 (en) Hierarchical namespace service with distributed name resolution caching and synchronization
EP3811596A1 (en) Hierarchical namespace with strong consistency and horizontal scalability
JP2019519025A (ja) 分散システムにおける範囲の分割および移動
US20130085988A1 (en) Recording medium, node, and distributed database system
JP5721056B2 (ja) トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム
US8019729B2 (en) System and method for updating file
WO2016101759A1 (zh) 一种数据路由方法、数据管理装置和分布式存储系统
US20160034191A1 (en) Grid oriented distributed parallel computing platform
JP5331050B2 (ja) データ同期システム、データ同期方法、情報処理装置、情報処理方法、およびプログラム
JP2010277467A (ja) 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム
WO2012056734A1 (ja) データベースの管理方法
JP2008046700A (ja) ディレクトリ分散型記憶装置及びデータ処理要求移譲プログラム
JP6264872B2 (ja) トランザクション処理システム
US8812660B2 (en) Workflow processes and systems
CN112328637A (zh) 高速分布式数据缓存方法、装置、计算机设备及存储介质
JP2000284998A (ja) データ更新制御システム、データ更新制御方法、その方法を実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110808

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130308

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130401

R150 Certificate of patent or registration of utility model

Ref document number: 5251446

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

Year of fee payment: 3