JP5967195B2 - 分散データ管理装置及び分散データ操作装置 - Google Patents

分散データ管理装置及び分散データ操作装置 Download PDF

Info

Publication number
JP5967195B2
JP5967195B2 JP2014515468A JP2014515468A JP5967195B2 JP 5967195 B2 JP5967195 B2 JP 5967195B2 JP 2014515468 A JP2014515468 A JP 2014515468A JP 2014515468 A JP2014515468 A JP 2014515468A JP 5967195 B2 JP5967195 B2 JP 5967195B2
Authority
JP
Japan
Prior art keywords
node
tree
data
identifier
value
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.)
Active
Application number
JP2014515468A
Other languages
English (en)
Other versions
JPWO2013171953A1 (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.)
NEC Corp
Original Assignee
NEC 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 NEC Corp filed Critical NEC Corp
Priority to JP2014515468A priority Critical patent/JP5967195B2/ja
Publication of JPWO2013171953A1 publication Critical patent/JPWO2013171953A1/ja
Application granted granted Critical
Publication of JP5967195B2 publication Critical patent/JP5967195B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • 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
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2272Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Landscapes

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

Description

本発明は、属性値順に順序付けられたデータの分散管理技術に関する。
アプリケーションプログラムやデータベースシステム等が利用する基本的なデータ構造として、キーから値を取得する連想配列、KeyValueストア、Map、ストレージエンジンと呼ばれる構造がある。更に、このようなデータ構造には、キーがその値で順序付けられて格納されるものと、順序付けられずに格納されるものがある。順序付けらない形態では、キーをHashした値に基づいてそのデータの格納先が決定される。一方、順序付けられた形態では、各格納先が担当する値域を値域データとしてそれぞれ持ち、その値域データとキーとからデータの格納先が決定される。
非特許文献1は、情報システムにおける値域管理方法の一例を提案する。非特許文献1の例では、Bigtableと呼ばれるシステムが、複数のデータを格納するタブレットサーバ、Bigtableマスター、集中型サーバであるChubby、メタデータ・タブレットサーバ、クライアントから構成される。各タブレットサーバは、或る連続した値域のデータをタブレットとしてそれぞれ格納する。Bigtableマスターは、タブレットがどのタブレットサーバに格納されているかをB+Treeにより管理し、そのB+Treeを構成する複数の部分木を複数のメタデータ・タブレットサーバに格納し、ルートに相当する部分木をChubbyに格納する。タブレットサーバが管理するタブレットが変更される場合には、その変更はマスターに通知される。このBigtableにアクセスするクライアントは、Chubbyにアクセスして前記B+Treeのルートを取得し、その部分木をメタデータ・タブレットサーバから取得し、これをキャッシュする。このキャッシュが有効である間、クライアントはキーの値に対応するタブレットサーバをローカルで特定することができる。タブレットサーバが担当するタブレットが変更されると、クライアント上のキャッシュは無効となるが、クライアントはキーの値に対応するタブレットサーバにアクセスして始めて、その無効を検知し、メタデータ・タブレットサーバに有効な情報を問い合わせる。
非特許文献2は、当該値域管理方法の他の例を提案する。非特許文献2の例では、Batonと呼ばれるシステムが、複数のP2P(Peer to Peer)ノードから構成される。各ノードは連続な値域のデータを格納する。各ノードは、他のノードとリンク関係を持ち、そのリンクの関係は全体で平衡木となる。各ノードは、その木構造における親ノードに当たるノードへのリンク、子ノードに当たるノードへのリンク、同一階層の隣接ノードへのリンクを持つ。同一階層の隣接ノードへのリンクについては、各リンク先に関する値域も管理する。或るノードは、或る値に対するアクセス要求を取得した場合、その値が同一階層の隣接ノードが担当する値域の中のどの値域に含まれるかを決定し、その決定されたノードに当該アクセス要求を転送する。転送先のノードで類似の処理を続けることで、その値に対応するデータを保持するノードが検出される。ノード間のリンク関係は、ノードの新規追加や離脱の際に、平衡木を保つように順次変更される。更に、格納されるデータの分布がノード間で均一でなくなり歪が発生すると、各ノードはデータの分布が均一化するように値域やリンク関係を変更する。
Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber, "Bigtable : A Distributed Storage System For Structured Data", Symposium on Operating Systems Design (SOSP) 2006, 2006/11/6-8. H.V. Jagadish, Beng Chin Ooi, Quang Hieu Vu, "BATON: A Balanced Tree Structure for Peer-to-Peer Networks", Very large data bases (VLDB) 2005, 2005/8/30-9/2.
しかしながら、上述の値域管理方法では、次のような問題点がある。
例えば、非特許文献1の方法では、データを格納するノードの値域に変更が発生した場合に、クライアントのデータアクセス時間が長くなってしまう。その理由は、クライアントがデータ格納ノードの値域の変更を検知するのは、クライアントがデータへのアクセスを実行した時であるからである。即ち、クライアントは、その検知後、メタデータサーバから新たな値域を取得し、データアクセスの再実行をすることになるため、その通信遅延がそのままデータアクセス時間としてかかってしまう。
これを解決するために、非特許文献1の方法に、クライアントが値域をメタデータサーバに定期的に問い合わせる構成を付加することが考えられる。しかしながら、このような構成によれば、システム内で共通の複数のメタデータサーバは、所定間隔で全クライアントからの要求を受けることになり、クライアント数の増加に伴い、メタデータサーバの負荷やシステム内の通信負荷が高くなり、ひいては、システム全体の性能が劣化することになる。
更に、例えば、非特許文献2の方法では、データアクセス要求がP2Pノードから他のノードに順次転送されることで、アクセス対象のデータを格納するノードが検出されるため、データアクセス処理に要する時間が長くなる傾向にある。また、非特許文献2の方法では、属性毎の値域又はノードの負荷に応じてノード間のリンク関係が更新されるため、システム内で扱う属性の数が増加するに伴い、P2Pノード間のリンク関係が増加し、結果、その管理及び更新に要する負荷が増加し、更に障害が発生し易い状況になりかねない。
本発明は、上述のような事情に鑑みてなされたものであり、属性値順に順序付けられたデータを分散管理するシステムにおいて、負荷を抑制しつつデータアクセス時間を低減させる分散データ管理技術を提供することにある。
本発明の各態様では、上述した課題を解決するために、それぞれ以下の構成を採用する。
第1の態様は、属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードを実現する分散データ管理装置に関する。第1態様に係る分散データ管理装置で実現される対象論理ノードは、リング構造を有する有限の識別子空間内で複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、複数の部分データの中の少なくとも1つを格納するデータ格納部と、対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、識別子空間内における対象ノード識別子との間の関係に応じて確立される対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、データ格納部に格納される部分データに対応する属性毎の値域境界値であって、属性毎の値域境界が識別子空間内において対象論理ノードと対象論理ノードと隣接する論理ノードとの間に位置する属性毎の値域境界値を格納する値域格納部と、アクセス要求に対応する部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、ポインタを選択するための値域を示す値とから形成される少なくとも1つのエントリを含む根ツリーノードを有するツリー構造データを格納するツリー格納部とを備える。
なお、本発明の他の態様としては、上述のような対象論理ノードをコンピュータに実現させるプログラムであってもよいし、このようなプログラムを記録したコンピュータが読み取り可能な記録媒体であってもよい。この記録媒体は、非一時的な有形の媒体を含む。
上記各態様によれば、属性値順に順序付けられたデータを分散管理するシステムにおいて、負荷を抑制しつつデータアクセス時間を低減させる分散データ管理技術を提供することができる。
上述した目的、およびその他の目的、特徴および利点は、以下に述べる好適な実施の形態、およびそれに付随する以下の図面によってさらに明らかになる。
第1実施形態における分散システムの構成例を概念的に示す図である。 第1実施形態におけるデータサーバの処理構成例を概念的に示す図である。 論理ノードのリンク関係の例を概念的に示す図である。 図3に示されるノードN(1)を基準としたリンク関係を概念的に示す図である。 IDリングと値域情報との関係を概念的に示す図である。 管理形態3における、図3及び図4のリンク例に基づくノードN(1)のツリー構造データの例を概念的に示す図である。 管理形態6における、図3及び図4のリンク例に基づくノードN(1)のツリー構造データの例を概念的に示す図である。 第1実施形態におけるツリー生成部の動作例を示すフローチャートである。 第1実施形態におけるツリー更新部及びバージョン比較部の動作例を示すフローチャートである。 第1実施形態におけるツリー探索部の動作例を示すフローチャートである。 第1実施形態におけるツリー探索部の、階層Lのツリーデータから宛先ノードを特定する動作の例を示すフローチャートである。 第2実施形態におけるデータサーバの処理構成例を概念的に示す図である。 第3実施形態における分散システムの構成例を概念的に示す図である。 第3実施形態におけるデータ操作クライアントの処理構成例を概念的に示す図である。 実施例1におけるIDリングと値域情報との関係を概念的に示す図である。 実施例1において生成されるリンク関係の一部を示す図である。 実施例1において各ノード11で生成されるツリー構造データの一部を示す図である。 実施例1における負荷分散の例を概念的に示す図である。 実施例1における負荷分散後のノード(980)のツリー構造データの例を概念的に示す図である。 実施例1におけるノード(413)のバージョン更新後のツリー構造データの例を概念的に示す図である。
以下、本発明の実施の形態について説明する。なお、以下に挙げる実施形態は例示であり、本発明は以下の実施形態の構成に限定されない。
本実施形態に係る分散データ管理装置は、属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードを実現する。本実施形態における当該対象論理ノードは、対象ノード識別子を格納するノード識別子格納部と、当該部分データを格納するデータ格納部と、対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、データ格納部に格納される部分データに対応する属性毎の値域境界値を格納する値域格納部と、当該リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、このポインタを選択するための値域を示す値とを含む少なくとも1つのエントリを含む根ツリーノードを有する属性毎のツリー構造データを格納するツリー格納部と、を備える。
ここで、論理ノードとは、タスク、プロセス、インスタンス等のようなソフトウェア要素であり、本実施形態に係る分散データ管理装置のようなコンピュータにより実現される。また、対象ノード識別子とは、リング構造を有する有限の識別子空間内で複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、対象論理ノードに割り当てられた識別子である。即ち、各論理ノードには、ユニークな識別子(以降、ノードID又はIDとも表記する)がそれぞれ割り当てられる。リング構造を有する有限の識別子空間とは、その空間内で最大の識別子の次に最小の識別子が続くように定義された識別子空間を意味する。
対象論理ノードは、識別子空間内における対象ノード識別子と他の識別子との間の関係に応じて他の論理ノード(上記リンク先論理ノード)との間にリンクを確立する。リンク確立とは、対象論理ノードが当該リンク先論理ノードと通信可能となることを意味し、例えば、相互にIP(Internet Protocol)アドレスを持ち合うことで実現される。なお、本実施形態は、当該リンクの実現手法を制限しない。
このように、本実施形態では、データを分散管理する複数の論理ノードにおいて、ノードIDに基づくトポロジが構築される。
一方、各論理ノードは、上述の値域格納部のように、格納する部分データに対応する値域情報をそれぞれ管理する。そして、属性毎の値域境界は、識別子空間内において隣接する論理ノード間に位置する。即ち、ノードID空間のリング構造に対応して、各論理ノードが担当する属性毎の値域が決定される。これにより、ノードID空間と同様に、属性毎の属性値空間は、循環順序(リング構造)を持つものとして管理され得る。これは、ノードID空間のリンクトポロジ上に、属性値空間の値域情報ビューを重畳させて管理する構成であるとも言える。この構成により、値域変更に対して、ノードID空間のリンクトポロジは変更することなく、それに重畳されている値域情報ビューのみの変更で対応することができる。
なお、値域格納部に格納される値域境界値は、対象論理ノードが格納する部分データの値域の起点であってもよいし、その値域の終点であってもよいし、その値域の始点と終点との組み合わせであってもよい。また、値域格納部には、対象論理ノードの値域境界値のみならず、対象論理ノードの隣接ノードが格納する部分データの値域境界値が格納されるようにしてもよい。
本実施形態では、対象論理ノードは、このような各論理ノードの値域が反映されたツリー構造データを格納し、このツリー構造データに格納されるツリーノードのエントリが参照されることにより、任意の属性値を含む部分データを格納する論理ノードが特定される。本実施形態では、上述したように、ツリー構造データに含まれる根ツリーノードのエントリには、当該リンク先論理ノードと対応付けられた子ツリーノードへのポインタが含まれる。
このように、本実施形態における当該ツリー構造データには、ノードIDに基づいて構築されるトポロジ上の論理ノード間のリンク関係が反映されるため、対象論理ノードは、ツリー構造データを探索しながら、リンク先論理ノードを即座に特定することができる。これにより、本実施形態によれば、リンク先論理ノードから値域情報を取得する形態や、リンク先論理ノードが有する値域情報を確認する形態等を実現し易くなる。このような形態にすれば、対象論理ノードは、特定サーバに値域変更を伺う必要がないため、特定サーバへの負荷集中を防ぐことができる。
また、本実施形態では、論理ノードは、上述のように、自身が格納するツリー構造データを参照することにより、所望の値域を格納する論理ノードを特定することができるため、データアクセス要求のノード間転送が不要となり、結果、データアクセス要求のノード間転送に伴うデータアクセス時間の増加を防ぐことができる。
以下、上述の実施形態について更に詳細を説明する。
[第1実施形態]
〔システム構成〕
図1は、第1実施形態における分散システム1の構成例を概念的に示す図である。第1実施形態における分散システム1は、複数のデータサーバ10等を有する。データサーバ10は相互にネットワーク9によって通信可能に接続される。データサーバ10は、上述の実施形態における分散データ管理装置に対応する。データサーバ10は、アプリケーションや他の端末からの要求に応じて、データサーバ10に格納されるデータにアクセスし、所望のデータを取得する。
データサーバ10は、いわゆるコンピュータであり、例えば、バス5で相互に接続される、CPU(Central Processing Unit)2、メモリ3、入出力インタフェース(I/F)4等を有する。メモリ3は、RAM(Random Access Memory)、ROM(Read Only Memory)、ハードディスク、可搬型記憶媒体等である。入出力I/F4は、ネットワーク9を介して他のデータサーバ10、データ操作クライアント50、他の端末等と通信を行う通信装置7等と接続される。入出力I/F4は、表示装置や入力装置等のようなユーザインタフェース装置と接続されてもよい。なお、本実施形態は、データサーバ10のハードウェア構成を限定しない。
〔装置構成〕
図2は、第1実施形態におけるデータサーバ10の処理構成例を概念的に示す図である。図2に示されるように、データサーバ10は、データ操作部12、ツリー探索部13、ツリー生成部14、ツリー更新部15、バージョン比較部16、1以上の論理ノード11等を有する。各論理ノードは、リンク生成部17、ノードID格納部18、リンクテーブル19、ツリー格納部20、データアクセス部21、データ格納部22、値域格納部23等をそれぞれ有する。
これら処理部は、メモリ3に格納されるプログラムがCPU2で実行されることにより実現される。そのプログラムは、例えば、CD(Compact Disc)、メモリカード等のような可搬型記録媒体やネットワーク上の他のコンピュータから入出力I/F4を介してインストールされ、メモリ3に格納される。なお、図2の例では、論理ノード11と、各処理部12から16とが、異なるソフトウェア要素であるように示されているが、各処理部12から16は論理ノード11毎に設けられてもよい。以降、論理ノード11は、単に、ノード11とも表記する。
〈論理ノード〉
以下、各ノード11が有する各処理部についてそれぞれ説明する。
ノードID格納部18は、上述の実施形態におけるノード識別子格納部に対応する。即ち、ノードID格納部18は、リング構造を有する有限のID空間内で、各ノード11に割り当てられるノードIDを格納する。ノードIDには、例えば、対応するサーバのIPアドレスのハッシュ値が用いられる。
リンクテーブル19は、上述の実施形態で説明されたように、ノード11と他のノードとのリンク関係を格納する。第1実施形態におけるリンクテーブル19は、他の各ノードについて、ノードID、そのノードに対応するIPアドレス、及び、自ノード11とのリンク関係をそれぞれ格納する。各ノードに対応するIPアドレスとは、各ノードと通信するために利用されるIPアドレスであり、例えば、各ノードが実現されているデータサーバ10のIPアドレスである。また、リンクテーブル19に格納されるリンク関係とは、自ノード11とリンクされているか否か、リンクされていればそのリンクを識別するための番号(リンクの順番等)等が含まれる。
リンク生成部17は、自ノード11のIDと、分散システム1中の任意の他のノードのIDとのID空間における距離に基づき、リンク関係を構築し、その内容をリンクテーブル19に反映させる。このリンク関係の構築(IDトポロジの構築)には、例えば、Chordアルゴリズムや、Koordeアルゴリズムなどが用いられる。なお、第1実施形態は、有限のID空間で、リング構造を持つようにトポロジが構築されるのであれば、IDトポロジの構築の手法を限定しない。
図3は、論理ノード11のリンク関係の例を概念的に示す図である。図4は、図3に示されるノードN(1)を基準としたリンク関係を概念的に示す図である。図3及び図4の例では、ノードN(1)が、ノードN(3)及びN(4)とリンクされており、ノードN(3)が、ノードN(5)、N(6)及びN(7)とリンクされており、ノードN(4)が、ノードN(7)及びN(8)とリンクされている。
一方で、図3の例に示されるように、ID空間はリング構造を持つ。以降、このリング構造はIDリングとも表記される。このIDリング上では、各ノード11にとって、自ノード11のIDより大きくかつ最も近いIDを持つノード11は、Successorノード又はSucノードと表記され、自ノード11のIDより小さくかつ最も近いIDを持つノード11は、Predecessorノード又はPredノードと表記される。そして、IDリングでは、ID空間内で最大値のノードIDを持つノード11が、ID空間内で最小値のノードIDを持つノード11をSucノードとし、ID空間内で最小値のノードIDを持つノード11が、ID空間内で最大値のノードIDを持つノード11をPredノードとする。なお、このようなIDリング上のリンク関係は、ノードIDの値により即座に特定可能であるため、リンクテーブル19に格納されなくてもよいし、上述のようなID空間上で隣接しないノード間の関係と共にリンクテーブル19に格納されてもよい。
以降、IDリング上で隣接するノード11は、Sucノード又はPredノードと表記され、IDリング上で隣接せずリンクが確立されているノード11が、リンク先ノードと表記される。また、図4に示されるように、或るノード11から、リンクを辿って他のノードに行き着くまでの間の距離をホップと表記する。即ち、或る対象ノード11と直接リンクされるノードは、対象ノード11の1ホップ目のリンク先ノードと表記され、その1ホップ目のリンク先ノードと直接リンクされるノードは、対象ノード11の2ホップ目のリンク先ノードと表記される。
データ格納部22は、上述の実施形態で説明されたように、属性値順に順序付けられたデータが分割された複数の部分データの一部の部分データを格納する。本実施形態で扱われるデータは、複数の列(属性)をそれぞれ含む複数の行(タプル)から構成されるデータである。但し、本実施形態は、データの形態を制限しない。例えば、格納される属性値は、複数の属性値を空間充填曲線処理により、1次元の値としたものであっても良い。また、例えば、本実施形態がデータストリームシステムやPublish/Subscribe(Pub/Sub)システムに適用される場合には、当該データは、データそのものではなく条件式等であってもよい。このようなシステムでは、データベースにてデータを探す条件として扱われる、検索するキーの値や範囲などが、検出対象のデータとなる。すなわち、検出したい温度の範囲を1つの条件式(Subscribe)として与えると、その範囲を(x0,x1)=(下限値,上限値)という2次元の値とし、これを1次元化して得られる値として格納する。複数の条件式が与えられると、各々の条件式を表す1次元値がシステムに複数格納される。ある属性値のデータがシステムに与えられ(Publish)、それを条件内に含むような条件式と対応する通知先に通知する(Notify)際には、x0が[−∞,属性値]の範囲に含まれ、かつx1が[属性値,∞]に含まれる多次元範囲を検索する。これは、先に格納された複数の条件式から、この多次元空間と対応する1次元範囲に含まれる条件式を検索することで実現できる。このように、本実施形態は、データ検索だけでなく、範囲を条件としたPub/Subにも同様に適用することができる。
データ格納部22に格納される部分データは、属性毎の値域をそれぞれ有する。
値域格納部23は、上述の実施形態で説明されたように、データを分割し合った他のノードとの間の属性毎の値域の境界値をメタデータとして格納する。或るノードと値域を分ける関係にある他のノードは、ID空間内において当該或るノードのIDと距離の最も近いIDを持つ隣接ノードである。上述したように、各ノードにおいて値域格納部23に格納される値域境界値には、様々な形態があり得る。例えば、自ノードが格納する部分データに対応する値域に関し、値域の始点が値域境界値として管理される形態(管理形態1)、値域の終点が値域境界値として管理される形態(管理形態2)、及び、始点及び終点の両方が管理される形態が有る(管理形態3)。更に、Sucノードが格納する部分データに対応する値域の始点及び終点の両方が管理される形態(管理形態4)、Predノードが格納する部分データに対応する値域の始点及び終点の両方が管理される形態(管理形態5)、自ノードとSucノードとに関する値域の始点及び終点の両方が管理される形態(管理形態6)、自ノードとPredノードとに関する値域の始点及び終点の両方が管理される形態等が考えられる(管理形態7)。
上記各管理形態は、システム要件により選択されることが望ましい。例えば、最も簡易な構成が望まれる場合には、上記管理形態1又は2が選択され得る。また、例えば、データの一貫性が要件とされるシステムでは、上記管理形態3、6又は7が選択され得る。このようなシステムでは、隣接ノード間で、値域境界値の同期が行われる。また、例えば、高い障害耐性が要件とされるシステムでは、自ノードのセカンダリノード(バックアップノード)として作用する隣接ノード(SucノードかPredノードか)に応じて、上記管理形態4、5、6又は7が選択され得る。このようなシステムでは、対象ノードの隣接ノード(Sucノード又はPredノード)が当該対象ノードの値域情報を管理する。本実施形態は、このような各ノードにおいて管理される値域情報の形態を制限しない。
図5は、IDリングと値域情報との関係を概念的に示す図である。図5の例において上記管理形態2が用いられる場合には、ノードN(0)は、隣接するノードN(1)との値域の境界に関し、値域境界値(25)を格納し、ノードN(1)は、隣接するノードN(2)との値域の境界に関し、値域境界値(32)を格納する。このように、値域情報の管理形態としてどのような管理形態が用いられたとしても、ID空間のリング構造に対応して、各ノードが担当する属性毎の値域が決定されるため、属性値空間は、ノードID空間と同様に、循環順序(リング構造)を持つものとして管理されることができる。
この循環順序によれば、或る属性において或る値域境界値を基準値(循環順序における始点)とした場合、その基準値からその属性値空間内の最大値までの間の任意の値が、その属性値空間内の最小値から基準値までの間の任意の値より小さくなる。図5の例における当該循環順序によれば、ノードN(6)からノードN(8)が担当する属性値の範囲を考えると、ノードN(6)が担当する値域境界値(175)を基準値とした場合、属性値(5)が、ノードN(6)が担当する値域境界値(175)よりも大きいと判断される。また、属性値(200)は、ノードN(6)が持つ値域境界値(175)より大きく、かつ、ノードN(7)が持つ値域境界値(3)よりも小さいと判断される。このような属性値空間における循環順序は、例えば、ツリー探索部13等により利用される。
データアクセス部21は、自ノード11へのデータアクセス要求を受け、その要求に含まれている属性値又は属性値の範囲が、値域格納部23に格納された自ノード11が担当する値域に含まれるか否かを判断する。データアクセス部21は、含まれない場合は、要求の発行者に無効を返し、含まれる属性値又は属性値の範囲が存在する場合は、データ格納部22への任意の処理を許可し、その結果を要求の発行者に返す。
ツリー格納部20は、上述の実施形態で説明されたように、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データを格納する。第1実施形態におけるツリー格納部20に格納されるツリー構造データは、複数階層を持ち、各階層についてツリーデータをそれぞれ持つ。以降、論理ノード11と区別するために、このツリー構造データを構成する要素としてのノードは、ツリーノードと表記される。また、ツリー構造データが持つ階層と区別するために、このツリー構造データに含まれる各階層の各ツリーデータが持つ階層は、段階と表記される。
ツリーノードは、存在する段階に応じて、根ツリーノード、枝ツリーノード、葉ツリーノードに区別される。根ノード及び枝ノードは、1段下のノード(子ツリーノード)へのポインタを含み、葉ノードは、データの格納先となる論理ノード11を特定し得るデータへのポインタを含む。各ツリーノードは、そのようなポインタと、そのようなポインタを選択する範囲を特定する値域情報とを含むエントリをそれぞれ有する。
第1実施形態におけるツリーノードは、Bツリー等のような既存のデータ検索のためのツリーデータ構造と同様なこのような構造に加えて、次のような特徴を持つ。具体的には、各ツリーデータの各根ツリーノードには、対象属性における全属性値を包含しない属性値の範囲が設定され得る。従来のツリーデータ構造は、1つのツリーデータにより構成されるため、根ツリーノードには、対象属性における全属性値を包含する属性値の範囲が設定される。一方、第1実施形態における各階層の各根ツリーノードは、対象属性における全属性値の範囲の一部をサポートし、全階層の全根ツリーノードにより、対象属性における全属性値の範囲をサポートする。
1階層目(階層0)のツリーデータは、自ノードが値域格納部23に持つ値域情報から生成される。よって、階層0のツリーデータの構成は、上述のような値域情報の管理形態に対応する。よって、例えば、上記管理形態6の階層0のツリーデータは、次のような3つのエントリを持つ根ツリーノードから形成される。この場合、根ツリーノードは、葉ツリーノードの位置付けも持つ。第1エントリには、自ノードが担当する値域の始点(自ノードのPredノードが担当する値域の終点)と、自ノードを特定し得るデータへのポインタとが含まれる。第2エントリには、自ノードが担当する値域の終点(自ノードのSucノードが担当する値域の始点)と、自ノードのSucノードを特定し得るデータへのポインタとが含まれる。第3エントリには、自ノードのSucノードが担当する値域の終点と、値無し(Null)とが含まれる。或るノードを特定し得るデータは、以降、ノード特定データと表記され、ノード特定データには、例えばノードIDが利用される。
2階層目(階層1)のツリーデータは、リンク先ノードが値域格納部23に持つ値域情報から生成される。よって、階層1のツリーデータの構成についても、上述のような値域情報の管理形態に対応する。例えば、上記管理形態4の階層1のツリーデータは、次のような複数エントリを有する。各エントリには、各リンク先ノードが担当する値域の終点とそのリンク先ノードのSucノードのノード特定データへのポインタとがそれぞれ設定され、最後のエントリの値域境界値には最後のリンク先ノードのSucノードが担当する値域の終点が設定され、ポインタには値無し(Null)が設定される。最後のリンク先ノードは、複数のリンク先ノードの中で最大ID値を持つリンク先ノードである。
階層L(Lは2以上の整数)のツリーデータは、Lホップ目の各リンク先ノードに関する情報から形成され、L段階構成を持つ。階層Lのツリーデータの根ツリーノードは、リンク先ノードと対応付けられた子ツリーノードへのポインタと、このポインタを選択するための値域を示す値とを含む少なくとも1つのエントリから構成される。ここで、子ツリーノードへのポインタとリンク先ノードとの対応付けの形態は、そのポインタから、対応するリンク先ノードのノード特定データ(例えば、ノードID)を取得できるのであれば、限定されない。階層Lの根ツリーノードより下段のツリーノードは、リンク先ノードにおける階層(L−1)のツリーデータから生成される。この生成手法については、後述する。
図6Aは、上記管理形態3における、図3及び図4のリンク例に基づくノードN(1)のツリー構造データの例を概念的に示す図である。図6Bは、上記管理形態6における、図3及び図4のリンク例に基づくノードN(1)のツリー構造データの例を概念的に示す図である。図6A及び図6Bにおける左側の三角形が各階層を示し、右側が各階層におけるツリーデータを示す。図6A及び図6Bの矢印はポインタを示し、その矢印の先がノード特定データを示す。また、N(x).sVは、ノードN(x)の値域始点を示し、N(x).eVは、ノードN(X)の値域終点を示す。図6A及び図6Bの例は、ノードN(1)により格納されるツリー構造データを示し、このツリー構造データは3つの階層のツリーデータを持つ。なお、図6A及び図6Bには、Nullが設定される部分は図示されていない。
以下、図6Aに示される各階層のツリーデータについて説明する。
階層0のツリーデータには、自ノードの値域始点(N(1).sV)及び自ノードの値域終点(N(1).eV)、並びに、自ノードのノード特定データへのポインタが設定されている。
階層1のツリーデータの各エントリには次のようなデータが設定されている。第1エントリの値域境界値には、リンク先ノードであるノードN(3)の値域始点(N(3).sV)が設定され、第1エントリのポインタには、そのノードN(3)のノード特定データへのポインタが設定されている。第2エントリの値域境界値には、リンク先ノードであるノードN(4)の値域始点(N(4).sV)が設定され、第2エントリのポインタには、そのノードN(4)のノード特定データへのポインタが設定されている。第3エントリの値域境界値には、そのノードN(4)の値域終点(N(4).eV)が設定され、第3エントリのポインタにはNullが設定されている。
階層2のツリーデータは、根ツリーノード及び2つの葉ツリーノードから構成され、根ツリーノードには、リンク先ノードであるノードN(3)及びN(4)に対応付けられた子ツリーノード(葉ツリーノード)への2つのポインタが含まれる。2つの葉ツリーノードは、ノードN(3)及びN(4)にリンクされる、ノードN(1)を基準とした2ホップ目のリンク先ノードであるノードN(5)からN(8)に格納された情報から形成される。本実施形態では、ノードN(3)に対応付けられたポインタが示す葉ツリーノードは、そのノードN(3)の階層1のツリーデータから生成され、ノードN(4)に対応付けられたポインタが示す葉ツリーノードは、そのノードN(4)の階層1のツリーデータから生成される。また、階層2の根ノードには、2ホップ目のノードN(5)からN(8)の値域を示すエントリが設定されている。
以下、図6Bに示される各階層のツリーデータについて説明する。図6Bの階層0のツリーデータには、図6Aの構成に加えて、自ノードN(1)のSucノードであるノードN(2)に関する、ノード特定データへのポインタと値域の終点とが設定される。階層1のツリーデータには、図6Aの構成に加えて、最後のリンク先ノードN(4)のSucノードであるノードN(5)に関する、ノード特定データへのポインタと値域の終点とが設定される。階層2のツリーデータには、図6の構成に加えて、2ホップ目の最後のリンク先ノードN(8)のSucノードであるノードN(9)に関する、ノード特定データへのポインタと値域の終点とが設定される。
このように、各階層のツリーデータは、各ノードにおける値域情報の管理形態に対応した形態で生成される。但し、階層0のツリーデータは、自ノードが値域格納部23に持つ値域情報から生成され、階層1のツリーデータは、リンク先ノードが値域格納部23に持つ値域情報から生成され、階層L(Lは1以上)のツリーデータは、リンク先ノードの階層(L−1)のツリーデータから生成される点において一貫している。また、ツリーデータの階層番号が小さい程、そのツリーデータに反映されている値域情報の鮮度は高くなる。
また、各ツリーデータの各ツリーノードには、バージョン情報が付加されている。このバージョン情報は、値域変更に応じて更新される。このバージョン情報は、バージョン比較部16等により利用される。
データ操作部12は、アプリケーションプログラムやユーザインタフェース装置からの入力等により取得された操作対象のデータの決定条件から、対象属性と、属性値又は属性値の範囲とを取得し、その属性値又は属性値の範囲に対応するノード11を検出し、そのノード11に対してデータアクセス処理を実行する。対応するノード11は、対象属性と、属性値又は属性値の範囲とをツリー探索部13に渡すことで、ツリー探索部13から取得される。データアクセスに失敗した場合には、データ操作部12は、再度、ツリー探索部13にデータアクセスの宛先のノードを問い合わせる。
ツリー探索部13は、データ操作部12から、対象属性と、属性値又は属性値の範囲とを取得すると、ツリー格納部20から任意のノードの指定された属性に関するツリー構造データを取得し、その中から、その属性値又は属性値の範囲に対応する部分データを格納するノード11を特定する。ツリー探索部13は、ノード11を特定できない場合やツリー構造データの或る階層のツリーデータが存在しない場合には、ツリー生成部14にツリーデータの生成を要求する。ツリー探索部13の詳細処理については動作例の項において詳述する。
ツリー生成部14は、上述したようなツリー構造データを生成する。対象ノード11における階層L(Lは2以上)のツリーデータを生成する際には、ツリー生成部14は、対象ノード11のリンクテーブル19からリンク先ノードの通信アドレスを取得し、その通信アドレスを用いてそのリンク先ノードから、そのリンク先ノードのツリー格納部20に格納される階層(L−1)のツリーデータを取得する。ツリー生成部14は、対象ノード11における階層1のツリーデータを生成する際には、そのリンク先ノードのツリー格納部20に格納される階層0のツリーデータを取得してもよいし、そのリンク先ノードの値域格納部23に格納される値域情報を取得してもよい。ツリー生成部14の詳細処理については動作例の項において詳述する。
ところで、各ノード11に割り当てられる各属性の値域は、各ノード11の負荷や、各ノード11に格納されるデータ量のバランス等により変更される。一方、各ノード11は、他のノードに関する値域情報についてもツリー格納部20に格納されるツリー構造データにより管理している。そこで、他のノードにおいて値域が変更されたにも関わらず、その値域変更が或るノード11の当該ツリー構造データに反映されていない状況が生じる。このような状況では、ツリー探索部13が、不適切なノード11、即ち、対象となる属性値又は属性値の範囲に対応する部分データを格納していないノード11を特定してしまう可能性がある。
このような状況を可能な限り低減させるために、ツリー更新部15は、各ノード11が格納するツリー構造データが最新の値域情報となっているか否かを任意のタイミングで確認し、古い値域情報となってしまっているツリーデータを最新の値域情報で更新する。具体的には、ツリー更新部15は、階層2以上の各階層のツリーデータについて、根ツリーノードに含まれるポインタに対応付けられたリンク先ノードに対して、そのポインタが指す子ツリーノードのバージョン情報が設定されたバージョン確認要求を送信する。ツリー更新部15は、そのリンク先ノードからの返信に含まれるツリーデータ及びバージョン情報により、バージョンが異なっている階層のツリーデータ及びそのバージョン情報を更新する。
ツリー更新部15は、データ操作部12により実行されるデータアクセス処理とは非同期に、所定の周期で、定期的に、当該バージョン確認及びツリー構造データの更新を実行することが望ましい。このようにすれば、値域変更の全ノードへの伝達時間を短縮することができ、ひいては、ツリー探索部13が、不適切なノード11を特定する状況を減らすことができるため、これによるデータアクセス時間の増加を抑えることができる。
バージョン比較部16は、他のノードから送られる、階層Lのツリーデータのためのバージョン確認要求に応じて、このバージョン確認要求に含まれるバージョン情報を、ノード11が持つ階層(L−1)のツリーデータのバージョン情報とそれぞれ比較する。バージョン比較部16は、バージョンが異なる階層(L−1)のツリーデータを各ツリーノードのバージョン情報と共にその要求元の他のノードへ返信する。
〔動作例〕
以下、第1実施形態におけるデータサーバ10の動作例について図7から図10を用いて説明する。なお、以下の説明では、各ノードにおける値域情報の管理形態として、上記管理形態6、即ち、自ノードとSucノードとに関する値域の始点及び終点の両方が管理される形態が用いられる。
図7は、第1実施形態におけるツリー生成部14の動作例を示すフローチャートである。ツリー生成部14は、任意のノード11(対象ノード11)生成対象の属性及び階層が指定された生成要求を受けると、生成対象の属性を特定し(S51)、指定された階層に応じて、次のように動作する(S52)。
ツリー生成部14は、指定された階層が0の場合、値域格納部23に格納される値域情報に基づいて、対象ノード11の階層0のツリーデータにおける根ツリーノードの各エントリを生成する。ツリー生成部14は、第1エントリには、対象ノード11の値域始点と、対象ノード11を特定し得るデータへのポインタとを設定する(S53)。
次に、ツリー生成部14は、対象ノード11の階層0のツリーデータにおける根ツリーノードの第2エントリを生成する(S54)。ツリー生成部14は、第2エントリには、対象ノード11のSucノードの値域始点と、対象ノード11のSucノードのノード特定データへのポインタとを設定する。
次に、ツリー生成部14は、対象ノード11の階層0のツリーデータにおける根ツリーノードの第3エントリを生成する(S55)。ツリー生成部14は、第3エントリには、対象ノード11のSucノードの値域終点と、値無し(Null)とを設定する。
ツリー生成部14は、指定された階層が1の場合、まず、リンクテーブル19を参照して対象ノード11のリンク先ノードmを特定する(S61)。複数のリンク先ノードが存在する場合には、その中の1つがリンク先ノードmとして特定される。mの初期値は1である。
ツリー生成部14は、階層1のツリーデータにおける根ツリーノードの第mエントリを生成する(S62)。ツリー生成部14は、第mエントリには、リンク先ノードmの値域起点と、そのリンク先ノードmのノード特定データへのポインタとを設定する。このとき、ツリー生成部14は、リンクテーブル19からリンク先ノードmの通信アドレスを取得し、この通信アドレスを用いて当該リンク先ノードmからその値域起点及びそのノード特定データを取得する。
ツリー生成部14は、全リンク先ノードについて上述の(S61)及び(S62)をそれぞれ実行する(S66)。
ツリー生成部14は、そのリンク先ノードmが最後のリンク先ノードであれば(S63;YES)、第(m+1)エントリを生成し(S64)、更に、第(m+2)エントリを生成する(S65)。具体的には、ツリー生成部14は、第(m+1)エントリには、リンク先ノードmの値域終点と、そのリンク先ノードmのSucノードのノード特定データへのポインタとを設定する(S64)。更に、ツリー生成部14は、第(m+2)エントリには、リンク先ノードmのSucノードの値域終点を設定する(S65)。上述の通り、リンク先ノードmの値域終点、リンク先ノードmのSucノードのノード特定データ、リンク先ノードmのSucノードの値域終点は、リンク先ノードmから取得される。ツリー生成部14は、最後のエントリのポインタには、値無し(Null)を設定する。
ツリー生成部14は、指定された階層がL(Lは2以上)の場合、上述の(S61)と同様に、対象ノード11のリンク先ノードmを特定する(S56)。続いて、ツリー生成部14は、そのリンク先ノードmに階層(L−1)のツリーデータを要求し、この要求に応じて、当該リンク先ノードmから階層(L−1)のツリーデータを取得する(S57)。このときも上述のように、リンク先ノードmの通信アドレスがリンクテーブル19から取得される。
ツリー生成部14は、取得されたツリーデータから、階層Lのツリーデータの根ツリーノードの或るポインタで特定されるツリーノード以下を生成する(S58)。即ち、ツリー生成部14は、その取得されたツリーデータに基づいて、2段目以降のツリーノードを生成する。取得されたツリーデータが2段のツリーノードから形成去れている場合には、ツリー生成部14は、根ツリーノードに、その2段のツリーデータを接続する。
続いて、ツリー生成部14は、階層Lのツリーデータの根ツリーノードの第mエントリを生成する(S59)。ツリー生成部14は、第mエントリには、取得されたツリーデータの根ツリーノードの第1エントリに設定されている値域境界値と、取得されたツリーデータの根ツリーノードから生成されたツリーデータへのポインタとを設定する。この時、第mエントリ以外のツリーと重複した情報は適宜削除しても良い。
ツリー生成部14は、全リンク先ノードについて上述の(S56)、(S57)、(S58)及び(S59)をそれぞれ実行する(S60)。ツリー生成部14は、階層Lのツリーデータの根ツリーノードの最後のリンクについては、ツリーデータの根ツリーノードの最後のエントリに設定されている値域終点と、ポインタが値無し(Null)であるエントリを設定する。
上述の図7の例では、階層1のツリーデータの生成工程と階層L(L≧2)のツリーデータの生成工程とを区別して表記されたが、階層1のツリーデータについても階層Lのツリーデータと同様の工程で生成されるようにしてもよい。この場合、工程(S52)では、階層が0か、L(L≧1)かが判定され、階層1が指定された場合には、工程(S56)以降が実行されるようにすればよい。
図8は、第1実施形態におけるツリー更新部15及びバージョン比較部16の動作例を示すフローチャートである。各ノード11(以下の説明では対象ノード11)は、所定タイミングで、ツリー更新部15に次のように動作させる。
ツリー更新部15は、まず、リンクテーブル19を参照して対象ノード11のリンク先ノードmを特定する(S70)。複数のリンク先ノードが存在する場合には、その中の1つがリンク先ノードmとして特定される。mの初期値は1である。
続いて、ツリー更新部15は、対象ノード11の階層2以上の各階層について、根ツリーノードに含まれるリンク先ノードmに対応付けられたポインタで特定されるツリーノードのバージョン情報をそれぞれ取得する(S71)。該当ポインタで特定される子ツリーノードが枝ツリーノードである場合、その子ツリーノード及びその配下の全ツリーノードのバージョン情報が取得されてもよい。
ツリー更新部15は、階層2以上の各階層について取得された各バージョン情報をそれぞれ含むバージョン確認要求をリンク先ノードmに送信する(S72)。このときも上述のように、リンク先ノードmの通信アドレスがリンクテーブル19から取得される。
リンク先ノードmは、このバージョン確認要求を受信すると(S81)、バージョン比較部16に次のように動作させる。バージョン比較部16は、バージョン確認要求に含まれる各階層nのバージョン情報を1段下の各階層(n−1)のバージョン情報とそれぞれ比較する(S82)。例えば、バージョン確認要求に含まれる階層2のバージョン情報は、リンク先ノードmの階層1のバージョン情報と比較され、バージョン確認要求に含まれる階層3のバージョン情報は、リンク先ノードmの階層2のバージョン情報と比較される。
バージョン比較部16は、上記比較(S82)の結果、バージョンが異なる階層におけるツリーデータ(バージョン情報を含む)を、リンク先ノードmが持つ値域情報(リンク先ノードmの階層0のツリーデータに相当)と共に、対象ノード11に返信する(S83)。ここで、バージョンが異なる階層のツリーデータが複数のツリーノードから形成されている場合には、それら複数のツリーノードに関するデータとバージョン情報が返信される。このとき、バージョン確認要求に含まれる階層nとリンク先ノードmの階層(n−1)との間でバージョンが異なる場合、階層nのツリーデータ及びバージョン情報として、リンク先ノードmの階層(n−1)のツリーデータ及びバージョン情報が返信に設定される。
対象ノード11は、この返信を受信すると(S73)、ツリー更新部15に次のように動作させる。まず、ツリー更新部15は、階層1のツリーデータに関し、リンク先ノードmが持つ値域情報に対応するエントリに設定される値域境界値と、返信に含まれるリンク先ノードmが持つ最新の値域情報とを比較する。ツリー更新部15は、それらが異なっていれば、当該エントリの値域境界値を最新の値域情報で更新し、階層1のツリーデータのバージョン情報を繰り上げる(S74)。
次に、ツリー更新部15は、その返信を参照して、バージョンが異なる階層が存在するか否かを判断する(S75)。
ツリー更新部15は、対象ノード11のバージョンが異なる階層における、リンク先ノードmに対応する部分ツリーデータを、その返信に含まれる新ツリーデータで更新する(S76)。例えば、ツリー更新部15は、階層2のバージョンが異なる場合には、対象ノード11の階層2のツリーデータの中の、根ツリーノードに含まれるリンク先ノードに対応するポインタで特定される子ツリーノード以下を、その返信に含まれるツリーデータで更新する。このとき、該当子ツリーノード以下の各ツリーノードのバージョン情報も更新される。また、階層2の根ツリーノードの、リンク先ノードに対応するエントリの値域境界値も更新される。
更に、ツリー更新部15は、バージョンが異なる階層の根ツリーノードのバージョン情報を繰り上げる(S77)。ツリー更新部15は、全リンク先ノードについて上述の(S70)から(S77)をそれぞれ実行する(S78)。
上述の図8では、対象ノード11の階層2以上の各階層を対象に処理される例が示されたが、階層1以上の各階層を対象に処理されるようにしてもよい。この場合には、工程(S71)では、ツリー更新部15は、対象ノード11の階層1以上の各階層について、根ツリーノードに含まれるリンク先ノードmに対応付けられたポインタで特定されるツリーノードのバージョン情報をそれぞれ取得するようにすればよい。工程(S83)では、バージョン比較部16は、リンク先ノードmの値域境界値を返信しなくてもよく、ツリー更新部15は、工程(S74)を実行しなくてもよい。
図9は、第1実施形態におけるツリー探索部13の動作例を示すフローチャートである。ツリー探索部13は、データ操作部12から、対象属性と、属性値又は属性値の範囲とを取得すると、任意のノード11(以降、対象ノード11と表記)のツリー格納部20から対象属性に関するツリー構造データを取得する(S90)。ツリー探索部13は、階層Lに初期値0を設定する(S91)。階層0は最下位階層であり、階層L(1以上)がそれより上段の階層である。
ツリー探索部13は、取得されたツリー構造データの中に、階層Lのツリーデータが存在するか否かを判定する(S92)。ツリー探索部13は、階層Lのツリーデータが存在しない場合(S92;NO)、ツリー生成部14に、対象ノード11の階層Lのツリーデータの作成を要求する(S93)。この要求に応じて、上述のように、対象ノード11の階層Lのツリーデータが生成される。
ツリー探索部13は、階層Lのツリーデータを取得し(S94)、その階層Lのツリーデータから、対象属性の属性値又は属性値の範囲に対応する値域を持つノード(宛先ノード)を特定する(S95)。この宛先ノードの特定処理の詳細については図10を用いて後述する。
ツリー探索部13は、宛先ノードの特定に成功すると(S96;YES)、宛先ノードに関する情報を出力する(S97)。この出力された情報に基づいて、データ操作部12が、その宛先ノードに、データアクセス要求を転送する。
一方で、宛先ノードの特定に失敗すると(S96;NO)、ツリー探索部13は、階層Lを1増加させ(L=L+1)(S98)、増加された階層Lに関し処理(S92)以降を実行する。以降、ツリー探索部13は、宛先ノードが特定されるまで、探索対象の階層を順次上げていく。なお、一つのデータサーバ10(物理サーバ)上に複数の仮想ノード(論理ノード11)を設ける場合には、一つの階層において全ての仮想ノードの宛先ノード特定に失敗すると、階層Lを1増加させるようにしてもよい。
図10は、第1実施形態におけるツリー探索部13の、階層Lのツリーデータから宛先ノードを特定する動作の例を示すフローチャートである。即ち、図10には、図9の(S95)の詳細動作が示される。まず、ツリー探索部13は、階層Lのツリーデータの根ツリーノードを特定する(S100)。まず、階層Lには初期値0(最上位層を示す)が設定される(S101)。
続いて、ツリー探索部13は、特定されたツリーノード(ここでは根ツリーノード)の第1エントリの値域境界値を基準値とした、対象属性の属性値空間における循環順序に基づいて、特定されたツリーノードの中から、対象属性の属性値又は属性値の範囲に対応する値域を包含するエントリを特定する(S102)。この循環順序は、上述した通り、IDリングに対応して属性値空間が持つリング構造と対応する。
ツリー探索部13は、その特定されたツリーノードからエントリを特定することができない場合には(S103;NO)、宛先ノードの特定失敗を決定する(S108)。一方で、ツリー探索部13は、エントリを特定することに成功した場合には(S103;YES)、特定されたエントリのポインタがノード特定データを指すか否かを判定する(S104)。
ツリー探索部13は、ノード特定データを指す場合には(S105;YES)、そのポインタが指すノード特定データを取得する(S107)。この処理が宛先ノードの特定に対応する。
ツリー探索部13は、ノード特定データを指さない場合(S105;NO)、即ち、そのポインタが子ツリーノードを指す場合には、そのポインタが指す子ツリーノードを特定する(S106)。ツリー探索部13は、この特定されたツリーノードに関し、(S102)以降を実行する。
〔第1実施形態の作用及び効果〕
上述したように、第1実施形態では、対象属性の属性値又は属性値の範囲に関するデータアクセス要求に応じて、ノード11は、自ノード11のツリー格納部20に格納されるツリー構造データを用いて、そのデータアクセス要求の対象となる部分データを格納する宛先ノードを特定する。これにより、第1実施形態によれば、データアクセス要求を或るノード11で特定された宛先ノードに直接に転送することができるため、データアクセス要求のノード間転送に伴うデータアクセス時間の増加を防ぐことができる。
更に、第1実施形態では、各ノード11が持つ、値域情報が反映されたツリー構造データは、各ノード11のリンク先ノードから取得されるツリーデータにより自動生成される。また、第1実施形態では、ツリー構造データに含まれる各ツリーノードにはそれぞれバージョン情報が付されており、各ノード11が、データアクセス処理のバックグラウンドにより、所定のタイミングで、このバージョン情報を用いて自身のツリー構造データのバージョン確認及び更新を行う。このとき、各ノード11は、値域変更を反映した最新のツリーデータをリンク先ノードから取得する。
このように、第1実施形態によれば、値域情報がノード11とリンク先ノードとの間でやりとりされるため、値域情報を集中管理するメタデータサーバ等のような特定サーバ群を設ける必要がなく、これにより、特定サーバ群への負荷集中を防ぐことができる。また、特定サーバ群を設けた場合、それらが単一障害点とならないようにシステムを堅牢化させて管理する必要が生じるところ、上述のような構成により、特定サーバ群を設けることに伴う、障害対策や運用保守の労力を低減させることができる。第1実施形態によれば、各ノード11で個別に生成される値域情報が何らかの理由で消失したとしても、リンク先ノードから再度取得することで復元可能であるため、各ノード11に関する障害対策や運用保守の労力も低減させることができる。
更に、第1実施形態では、各ノード11が、自律的にかつデータアクセス処理とは別に、値域情報(ツリー構造データ)を最新の状態に保つように動作するため、宛先ノードとして特定されたノード11に対象の属性値又は属性値の範囲に対応する部分データが格納されていないといったアクセスミスを減らすことができる。即ち、第1実施形態によれば、値域変更の全ノードへの伝達時間を短縮することでデータアクセス実行時のアクセスミスを減らすことができ、ひいては、データアクセス時間の増加を低減させることができる。
また、第1実施形態では、値域情報を反映するツリー構造データが、ノードIDのリンク関係と同様の構造を持つように形成され、値域情報(ツリー構造データ)のバージョン確認や取得は、各ノード11と各ノード11のリンク先ノードとの間で行われる。これにより、第1実施形態によれば、各ノード11にとって、所定時間にバージョン確認(値域変更確認)を行う回数は、各ノード11のリンク数となるため、各ノード11における値域変更確認のための負荷も抑制することができる。
また、第1実施形態では、各ノード11が所定時間毎にバージョン確認を行うだけでなく、データアクセスの実行時にツリー構造データの更新を行っても良い。データアクセスの実行時とは、ツリー構造データを参照して、あるキー値に対応するノードIDを取得し、そのノードにアクセス後に、既に値域が古くなっておりアクセスが無効と失敗した時である。この時、そのツリー構造データ内の値ツリーノードから葉ツリーノードへの経路と対応するリンクに関して、ツリー構造の更新を行うこともできる。
[第2実施形態]
第1実施形態では、ノードIDに基づくリンク関係の構築の手法は限定されていなかった。第2実施形態では、当該リンク関係の構築手法として新たな手法が適応され、これに関連するシステムパラメータの調整処理が加えられる。第2実施形態における分散システム1の構成は、第1実施形態と同様であり、データサーバ10の処理が第1実施形態と異なる。以下、第2実施形態におけるデータサーバ10について第1実施形態と異なる内容を中心に説明し、第1実施形態と同様の内容については適宜省略する。
〔装置構成〕
図11は、第2実施形態におけるデータサーバ10の処理構成例を概念的に示す図である。第2実施形態におけるデータサーバ10は、第1実施形態の構成に加えて、パラメータ設定部31を更に有する。
リンク生成部17は、新たなアルゴリズム(以降、拡張Koordeと表記する)により、ノードIDに基づくリンク関係を構築し、その内容をリンクテーブル19に反映させる。
周知のKoordeでは、各ノード11が、Sucノードと、各ノード11のIDをパラメータk(自然数)倍して得られる値に対するPredノードと、このPredノードから(k−1)個分のSucノードとそれぞれリンクを確立する。周知のKoordeでは、全ノード11のリンク先ノードの数が固定値kで決められていた。周知のKoordeは、de Bruijnグラフのノードでありつつ、そのIDがノードとして論理的に存在していないノードを不在ノード(Imaginary Note)とし、この不在ノードはそのPredノードが管理することとしており、必要となるリンク数の分布の期待値を取る。即ち、本発明が、de Bruijnグラフのノード間でホップするために必要なリンク数の分布を導出しているが、周知の手法は、当該分布の期待値のみをとって、リンク先ノード数を固定的にkとしていたと解釈できる。そのため、周知のKoordeでは、必要な次数(リンク先ノードの数)より余分な次数が存在する場合もあれば、必要な次数より少ない場合もあり、不足する場合は、Sucノードへのルーティング(転送)により補われていた。また、リンクのさせ方とは独立に、周知のKoordeは、k進数と対応する(logk)ビット数のシフト演算を行うため、kは2の指数乗に限られていた。
そこで、第2実施形態における拡張Koordeでは、各ノード11におけるリンク先ノードの数(次数)を確率的な次数とする。具体的には、拡張Koordeでは、各ノード11が、自ノードのIDをパラメータk(2以上の整数)倍などして得られる値に対するPredノードである第1リンク先ノードと、自ノードのSucノードのIDをパラメータk倍などして得られる値に対するPredノードである第2リンク先ノードと、IDリングにおいて第1リンク先ノードと第2リンク先ノードとの間に存在するリンク先ノードとに対してそれぞれリンクを確立する。これにより、拡張Koordeでは、各ノード11に対し決定されるリンク先ノードの数(次数)は、パラメータkで制御される確率分布となり、多くのノード11はパラメータkより小さい次数を持ち、一部のノード11はパラメータkより大きな次数を持つことになる。但し、次数の期待値はk+1となる。なお、上述の「IDをパラメータk倍などして得られる値」とは、説明の便宜のために、(ID×k)を2(ID空間のサイズ)で割った余りの意味を簡略化した表現である。他の箇所においても、「(ID×k)を2(ID空間のサイズ)で割った余り」の意味を示す表現として、「IDをパラメータk倍して得られる値」と簡略化される場合がある。
ツリー更新部15は、ポーリング間隔Tの値を保持しており、このポーリング間隔Tにより、当該バージョン確認を実行する。ポーリング間隔Tは、各ノードの次数に反比例する値であっても良く、システム全体に渡って同一の値でも良い。反比例する場合には、各ノードのポーリング負荷が均一になるというメリットがある。システム全体に渡って、同一の値である場合には、値域変更が起こってから、各ノードのツリーが本来の値域に反映されるまでの時間を一定以内に制約することができるようになる。
パラメータ設定部31は、或るノード11における値域の変更が分散システム1内の全ノード11に伝達されるまでの最大時間wmax、各ノード11により実行されるバージョン確認の単位時間負荷λ、実行時のツリー更新に関わるツリーの最大高さhmaxなどに対する、システム要求(制約)を満たすように、パラメータであるk及びTの少なくとも一方を設定する。システムの要求とは、或る値以下であるべきという上限値制約の設定や、なるべく小さい負荷にしたいといった最小化要求である。また、最大高さhmaxには、ツリーの高さ1段あたりにかかる1ホップの通信遅延及び処理時間(τ0と表記する)がシステム要求(制約)としてかかることになる。ここで、更新にかかる実行時の遅延は、(hmax×τ0)時間となり、τ0は、予め決められた値となる。単位時間負荷λは、例えば、各ノードが実行する1秒毎のバージョン確認回数を示す。以降、更新にかかる実行時の遅延を単に実行時遅延と表記し、ツリーの高さ1段あたりにかかる1ホップの通信遅延及び処理時間を1ホップ辺りの実行遅延と表記する。
パラメータk及びTの設定方式としては次のような各方式が考えられる。第1のパラメータ設定方式では、Tが全ノード11(ノード総数N)で同じであり、上記最大時間wmaxに対する制約時間wcが与えられると見なす。第2のパラメータ設定方式では、Tが全ノードで異なってもよく、単位時間負荷λに対する制約負荷λcに基づいてノード毎のポーリング間隔Tが決定される。パラメータ設定部31は決定されたポーリング間隔Tでツリー更新部15が保持する値を更新する。一方、第3のパラメータ設定方式では、ツリーの最大高さhmaxに対するツリーの高さ制約hcに基づいて、パラメータkを決定する。
なお、上記制約時間wc、上記制約負荷λc、及び、ツリーの高さ制約hcは、他の装置から通信装置7を介して取得されてもよいし、入出力I/F4に接続されるユーザインタフェース装置がユーザにより操作されることにより入力されてもよいし、可搬型の記憶媒体から入出力I/F4を介して取得されてもよい。
パラメータ設定部31は、第1のパラメータ設定方式では、取得された制約時間wcと、ノード11の総数Nと、リンク生成部17により用いられるパラメータkとを用いて、下記(式1)を満足するポーリング間隔Tを算出する。また、パラメータ設定部31は、第2のパラメータ設定方式では、取得された制約負荷λcと、リンク生成部17により取得される、そのノードのリンク先ノードの数(次数)Dを用いて、下記(式2)を満足するポーリング間隔Tを算出する。パラメータ設定部31は、第3のパラメータ設定方式では、取得されたツリーの高さ制約hcを用いて、下記(式3)によりパラメータkを設定する。なお、上述した1ホップ辺りの実行時遅延(τ0)と、実行時遅延の制約から、ツリーの高さ制約hcが算出されても良い。
Figure 0005967195
以降では、ポーリング間隔Tは、ノード全体に渡って同一の値である、又は、ノード毎に異なる場合には、上記(式2)で設定されたポーリング間隔の分布から得られる値であるとする。例えば、期待値は(1+k)/λcとなる。ここで、上記単位時間負荷λと、最大時間wmaxとは、各ノード11のポーリング間隔Tと、パラメータkに応じて変化する。上述のように出力次数の期待値はk+1であることから、単位時間負荷λは下記(式4)のように示すことができる。また、値域の変更が全てのノード11に行きわたるまでにかかる時間wの期待値は下記(式5)で示される。最大時間wmaxは、下記(式6)のように示すことが出来る。
Figure 0005967195
上記(式5)の右辺は、次のように導出される。即ち、各ノード11が実行する各バージョン確認が互いに同一かつ独立に一定のタイミングで行われ、それが(logN)段存在する場合、値域変更の伝搬に要する時間wは、(logN)個の一様分布U(0,T)に従う確率変数の和であるIrwin−Hall分布に従う。そして、上記(式5)の右辺は、その時間wの期待値から導出される。この分布の最大値として、上記(式6)が得られる。
〔第2実施形態の作用及び効果〕
第2実施形態では、各ノード11のリンク生成部17は、拡張Koordeアルゴリズムにより、各ノード11のリンク先ノードを決定する。拡張Koordeでは、上述したように、各ノード11におけるリンク先ノードの数(次数)が確率的に決定されるものとした。これにより、周知のKoordeでは、ノードIDがハッシュにより生成されることに起因する確率的な要素が、各ノード11のリンク数(定数)には表れず、Sucノードとそれ以外のノードとの間の利用割合に表れていたのに対して、拡張Koordeでは、各ノード11のリンク数が確率的になる。
従って、拡張Koordeを用いた第2実施形態では、特に同一のデータサーバ10に複数の仮想ノード(論理ノード11)を設定する場合、一つのデータサーバ10にはリンク数の多いノード11とリンク数の少ないノード11が存在することになり、各ノード11でのツリー構造データのバージョン確認の負荷に差が生じることになる。しかしながら、各データサーバ10に所定数のノード11を実現させることにより、リンク数の多いノード11とリンク数の少ないノード11が同一のデータサーバ10で実現される可能性が高まり、結果として、各データサーバ10のバージョン確認負荷を実質的に一定とすることができる。
また、周知のKoordeでは、一つのノードが他のノードにリンクする数(次数、特に出力次数)が一定であったが、一つのノードが他のノードからリンクされる数(入力次数)は、確率的でばらつきがあった。拡張Koordeでは、このばらつきが存在するものの、周知のKoordeよりもそのばらつきは小さく、負荷分散されやすい。出力次数のばらつきであれば、上述の第2のパラメータ設定方式に示されるように、ポーリング間隔Tなどの他の要因を考慮することにより負荷の均一化を図ることは可能である。しかしながら、「リンクされてしまう数」である入力次数は、上述のように負荷の均一化を図ることが難しいため、拡張Koordeのように、次数のばらつきが少ないことは望ましい性質である。
また、第2実施形態では、拡張Koordeで決定されたリンク関係に応じて、階層1以上のツリーデータが生成されるため、バージョン確認要求の送信先を、Sucノードを除外してリンク先ノードのみとすることができ、値域情報を反映するツリー構造データの管理を容易にすることができる。すなわち、各ノードからhホップ先のノード群へのパスをバランスした木構造とすることができる。
更に、第2実施形態では、値域変更の最大伝達時間wmax及びバージョン確認の単位時間負荷λに対する制約時間τc及び制約負荷λcといったシステム要求(制約)が与えられると、それらを実現するポーリング間隔Tが決定され、そのポーリング間隔Tにより、ツリー構造データのバージョン確認、即ち、値域変更確認が各ノード11で行われる。よって、第2実施形態によれば、各ノード11における値域情報のバージョン確認処理により、予期せぬ負荷が発生するのを防ぐことができる。
[第3実施形態]
上述の各実施形態では、部分データを格納するノード11を実現する各データサーバ10が上述のような処理を実行していたが、部分データを格納せずノード11を実現しない装置において、上述のような処理が実行されてもよい。第3実施形態における分散システム1は、部分データを格納せずノード11を実現しない装置として、データ操作クライアント50を更に有する。以下、第3実施形態の分散システム1について、第1実施形態と異なる内容を中心に説明し、第1実施形態と同じ内容については適宜省略する。
〔システム構成〕
図12は、第3実施形態における分散システム1の構成例を概念的に示す図である。第3実施形態における分散システム1は、第1実施形態の構成に加えて、複数のデータ操作クライアント(以降、単にクライアントとも表記する)50を更に有する。クライアント50は、ネットワーク9を介してデータサーバ10と通信可能に接続される。クライアント50は、データサーバ10と同様に、アプリケーションや他の端末からの要求に応じて、データサーバ10に格納されるデータにアクセスし、所望のデータを取得する。なお、クライアント50のハードウェア構成もデータサーバ10と同様であり、本実施形態は、クライアント50のハードウェア構成を限定しない。
〔装置構成〕
図13は、第3実施形態におけるデータ操作クライアント50の処理構成例を概念的に示す図である。図13に示されるように、クライアント50は、データ操作部12、ツリー探索部13、ツリー生成部14、ツリー更新部15、バージョン比較部16、リンク生成部17、リンクテーブル19、ツリー格納部20等を有する。これら各処理部は、基本的には、第1実施形態と同様である。
リンク生成部17は、複数のデータサーバ10で実現される複数のノード11の中の任意の1以上のノード11と、クライアント50とのリンク関係を構築し、このリンク関係をリンクテーブル19に反映する。全てのノードが、他の全ノードに関する値域を保持しているため、クライアント50は、任意の1つのノードのみのリンク関係を持つようにしてもよい。クライアント50は、各ノード11のノードIDで構築されるID空間には参加しない、即ち、各ノード11から自発的にアクセスされる対象ではないため、クライアント50におけるリンク関係の構築手法は何ら制限されない。
ツリー格納部20に格納されるツリー構造データは、クライアント50がIDリング上における隣接ノードを持たないため、階層0のツリーデータを持たない。階層1以上の各階層のツリーデータについては、第1実施形態と同様である。これにより、ツリー生成部14は、階層0のツリーデータを生成しないことを除き、第1実施形態と同様である。
〔第3実施形態の作用及び効果〕
このように、第3実施形態では、部分データを格納せずノード11を実現しないクライアント50において、第1実施形態と同様の処理が行われる。よって、第3実施形態におけるクライアント50がデータアクセス要求を取得した場合でも、第1実施形態と同様の作用及び効果を奏することができる。
以下に実施例を挙げ、上述の各実施形態を更に詳細に説明する。本発明は以下の各実施例から何ら制限を受けない。
上述の第1実施形態の分散システム1において拡張Koordeが利用される形態の例を実施例1として以下に説明する。実施例1では、ノードIDのID空間が持つ有限範囲は、[0,1024)であり、分散システム1内で9個のノード11が実現される。また、説明を簡単にするために、1つの属性に対する処理のみが説明される。以降、或るID値を持つノードをノード(ID値)と表記する。
図14は、実施例1におけるIDリングと値域情報との関係を概念的に示す図である。図14の例によれば、ノード(70)は(10,25]の値域を持ち、ノード(803)は(175,255]及び(0,3]の値域を持つ。
各ノード11のリンク生成部17は、拡張Koordeアルゴリズムにより、自ノード11のリンク先ノードを決定する。実施例1では、拡張Koordeアルゴリズムで利用されるパラメータkが2に設定される。
図15は、実施例1において生成されるリンク関係の一部を示す図である。ノード(413)は、上述の第1リンク先ノードとしてのノード(803)と、上述の第2リンク先ノードとしてのノード(70)と、IDリングにおいてそれらノードの間に存在する上述の第3リンク先ノードとしてのノード(980)とリンクを張る。ノード(803)は、ノード(413)のID(413)をパラメータk(2)倍して得られる値(826)に対するPredノードである。ノード(70)は、ノード(413)のSucノード(551)のID(551)をパラメータk(2)倍して得られる値(78=1102−1024)のPredノードである。
ノード(803)は、ノード(551)からノード(803)までの各ノードとリンクを持つ。ノード(551)は、ノード(803)のID(803)をパラメータk(2)倍して得られる値(582=1606−1024)のPredノードである。ノード(803)は、ノード(803)のSucノード(980)のID(980)をパラメータk(2)倍して得られる値(936=1960−1024)のPredノードである。なお、第2リンク先ノードとしてのノード(803)は、自ノードであるため、そのリンク情報は格納されない。ノード(551)は、ノード(70)とノード(129)とリンクを張る。また、ノード70は、ノード(129)とノード(250)とリンクを張る。
このようなリンク関係によれば、ノード(551)は、2ホップでノード(70)からノード(250)まで到達する。このようなリンク関係が、各ノード11のリンク生成部17により生成され、各ノード11のリンクテーブル19に格納される。
このようなリンク関係が構築されている状態で、データ操作部12が対象属性の属性値(35)へのデータアクセス要求を取得したと仮定して、以下、実施例1におけるツリー探索部13及びツリー生成部14の動作について図7、図9及び図10のフローチャートを参照しながら説明する。このとき、データ操作部12は、ツリー探索部13に対して、ノード(413)を対象ノードとして、その属性値(35)を含む部分データを格納するノード11を特定するように指示すると仮定する。
ツリー探索部13は、対象属性の属性値(35)を取得し(S90)、階層Lに初期値0を設定し(S91)、階層0のツリーデータが存在するか否かを判定する(S92)。ツリー探索部13は、階層0のツリーデータが存在しないため(S92;NO)、ツリー生成部14に、ノード(413)の階層0のツリーデータの生成を要求する(S93)。
ところで、実施例1では、各ノードにおける値域情報の管理形態として、上記管理形態6、即ち、自ノードとSucノードとに関する値域の始点及び終点の両方が管理される形態が用いられる。よって、このとき、ノード(413)は、値域格納部23に、自ノード(413)の値域の始点(53)及び終点(67)、並びに、Sucノード(551)の始点(67)及び終点(138)を持つ。
ツリー生成部14は、自ノード(413)の値域始点(53)及び値域終点(67)、Sucノード(551)の値域始点(67)及び値域終点(138)に基づいて、以下のような階層0のツリーデータを生成する(S53)。
第1エントリ:値域境界値(53)、ノード(413)に関するポインタ
第2エントリ:値域境界値(67)、ノード(551)に関するポインタ
第3エントリ:値域境界値(138)、Null
ツリー探索部13は、この階層0のツリーデータから、属性値(35)を包含する値域を持つ宛先ノードの特定を試みる(S95)。しかしながら、階層0のツリーデータが示す値域は、(53,138]であるため、属性値(35)は含まれない。よって、ツリー探索部13は、階層0のツリーデータでは宛先ノードの特定ができないため(S96;NO)、探索対象の階層Lを1段上げる(S98)。
ツリー探索部13は、階層1のツリーデータが存在しないため(S92;NO)、ツリー生成部14に、ノード(413)の階層1のツリーデータの生成を要求する(S93)。ツリー生成部14は、リンク先ノード(803)の値域始点(175)、リンク先ノード(980)の値域始点(3)、リンク先ノード(70)の値域始点(10)及び値域終点(25)、リンク先ノード(70)のSucノード(129)の値域終点(32)に基づいて、以下のような階層1のツリーデータを生成する(S62)。
第1エントリ:値域境界値(175)、ノード(803)に関するポインタ
第2エントリ:値域境界値(3)、ノード(980)に関するポインタ
第3エントリ:値域境界値(10)、ノード(70)に関するポインタ
第4エントリ:値域境界値(25)、ノード(129)に関するポインタ
第5エントリ:値域境界値(32)、Null
ツリー探索部13は、この階層1のツリーデータから、属性値(35)を包含する値域を持つ宛先ノードの特定を試みる(S95)。しかしながら、階層1のツリーデータが示す値域は、(175,32]であるため、属性値(35)は含まれない。よって、ツリー探索部13は、階層1のツリーデータでは宛先ノードの特定ができないため(S96;NO)、探索対象の階層Lを更に1段上げる(S98)。
ツリー探索部13は、階層2のツリーデータが存在しないため(S92;NO)、ツリー生成部14に、ノード(413)の階層2のツリーデータの生成を要求する(S93)。ツリー生成部14は、リンク先ノード(803、980及び70)から、階層1のツリーデータをそれぞれ取得し(S57)、取得されたツリーデータに基づいて、階層2のツリーデータを生成する(S58、S59)。これにより、階層2のツリーデータの根ツリーノードが次のように生成される。
第1エントリ:値域境界値(67)、子ツリーノードへのポインタ(リンク先ノード(803)に対応)
第2エントリ:値域境界値(175)、子ツリーノードへのポインタ(リンク先ノード(980)に対応)
第3エントリ:値域境界値(25)、子ツリーノードへのポインタ(リンク先ノード(70)に対応)
第4エントリ:値域境界値(67)、Null
ここで、階層2のツリーデータの根ツリーノードが示す値域(67,67]は、全値域をカバーしているため、属性値(53)を含む。この包含判定は、67を基準とした循環順序であり、(67,67]は(67,255]∪[0,67]と見なされ、属性値(35)はこれに含まれる。更に、ツリー探索部13は、(32,53]を値域とするエントリを特定し、そのエントリのポインタを辿り、根ツリーノードの一段下のツリーノードにて、ノード(250)のノード特定データへのポインタを特定する(S107)。
これにより、データ操作部12は、ツリー探索部13から取得されたノード(250)のノード特定データに基づいて、ノード(250)の通信アドレスを取得し、その通信アドレスを用いて、ノード(250)に属性値(35)のデータアクセス処理を行う。なお、このようにして生成されるツリー構造データが図16で示される。図16は、実施例1において各ノード11で生成されるツリー構造データの一部を示す図である。
次に、実施例1におけるツリー更新部15及びバージョン比較部16の動作例について図8を参照し説明する。ここでは、ノード(250)とノード(129)との間で負荷分散が行われ、図17に示されるように値域変更が行われたものと仮定する。図17は、実施例1における負荷分散の例を概念的に示す図である。この負荷分散により、ノード(129)は、値域(25,38]を持つ部分データを格納し、ノード(250)は、値域(38,53]を持つ部分データを格納する。なお、この負荷分散における負荷は、データ格納量であっても、データアクセス頻度であっても良い。また、データサーバ10辺りの負荷を指標として、論理ノード11辺りの負荷を均一化しても良い。
ここでは、ツリー更新部15及びバージョン比較部16の処理対象がノード(413)である場合を例に挙げる。このとき、ノード(413)は、図16に示されるようなツリー構造データを持つと仮定する。ツリー更新部15は、所定のタイミングで、次のようなバージョン確認処理を行う。
まず、ツリー更新部15は、ノード(413)のリンクテーブル19を参照することにより、ノード(413)のリンク先ノード(803、980、70)を認識し、その中の1つのリンク先ノード(803)を特定する(S70)。続いて、ツリー更新部15は、ノード(413)のツリー構造データ内の階層2の根ツリーノードに設定されているリンク先ノード(803)に対応するポインタで特定されるツリーノードのバージョン情報(バージョン1(ver.1))を取得する(S71)。ツリー更新部15は、階層2のバージョン情報(バージョン1)を含むバージョン確認要求をリンク先ノード(803)に送信する(S72)。
リンク先ノード(803)がそのバージョン確認要求を受信すると(S81)、バージョン比較部16が、それに含まれる階層2のバージョン情報(バージョン1)と、リンク先ノード(803)の階層1のバージョン情報(バージョン1)とを比較する(S82)。ここでは、バージョンは同一である。そこで、バージョン比較部16は、リンク先ノード(803)が持つ値域情報を含む返信を送る(S83)。実施例1における各ノードの値域情報管理形態(管理形態6)によれば、リンク先ノード(803)が持つ値域情報として、リンク先ノード(803)の値域始点(175)、リンク先ノード(803)のSucノード(980)の値域始点(3)及び値域終点(10)が返信される。
ツリー更新部15は、その返信を受けると(S73)、ノード(413)の階層1のツリーデータにおける、リンク先ノード(803)が持つ値域情報に対応する第1エントリから第3エントリに設定されている値域境界値(175、3及び10)と、その返信に含まれるリンク先ノード(803)が持つ最新の値域情報(175、3及び10)とを比較する。ここでは、両者は同一であり、値域変更されていないと判定される。
続いて、ツリー更新部15は、その返信を参照することにより、バージョンが異なる階層が存在するか否かを判定する(S75)。ここでは、バージョンが異なる階層が存在しないので(S75;NO)、ツリー更新部15は、次のリンク先ノード(980)を特定する(S70)。このとき、ノード(980)は、図18に示されるようなツリー構造データを持つと仮定する。
図18は、実施例1における負荷分散後のノード(980)のツリー構造データの例を概念的に示す図である。即ち、ノード(980)のリンク先ノード(129)の値域境界値が変更されているため、ノード(980)の階層1のツリーデータのバージョン情報が2に繰り上げられている。
ツリー更新部15は、リンク先ノード(980)に関しても同様に処理(S71)を実行し、階層2のバージョン情報(バージョン1)を含むバージョン確認要求をリンク先ノード(980)に送信する(S72)。
リンク先ノード(980)がそのバージョン確認要求を受信すると(S81)、バージョン比較部16が、それに含まれる階層2のバージョン情報(バージョン1)と、リンク先ノード(980)の階層1のバージョン情報(バージョン2)とを比較する(S82)。ここでは、バージョンが異なるため、バージョン比較部16は、リンク先ノード(980)の階層1のツリーデータ(バージョン情報含む)と、リンク先ノード(980)が持つ値域情報(3、10及び25)とを含む返信を送る(S83)。
ツリー更新部15は、その返信を受けると(S73)、ノード(413)の階層1のツリーデータにおける、リンク先ノード(980)が持つ値域情報に対応する第2エントリから第4エントリに設定されている値域境界値(3、10及び25)と、その返信に含まれるリンク先ノード(980)が持つ最新の値域情報(3、10及び25)とを比較する。ここでは、両者は同一であり、値域変更されていないと判定される。
続いて、ツリー更新部15は、その返信に基づき、階層2のバージョンが異なると判定し(S75;YES)、階層2の根ツリーノードに含まれる、リンク先ノード(980)に対応するポインタで特定されるツリーノードを、その返信に含まれる、リンク先ノード(980)の階層1のツリーデータで更新する(S76)。これにより、そのポインタで特定されるツリーノードのバージョン情報は2となる。なお、当該更新は、返信に含まれるツリーデータの複製であってもよいし、根ツリーノードに設定される値域境界値との関係で、返信に含まれるツリーデータ内の値域境界値情報が省かれてもよい。
更に、ツリー更新部15は、取得されたリンク先ノード(980)の階層1のツリーデータの先頭エントリの値域境界値(175)を、ノード(413)の階層2のツリーデータにおける、リンク先ノード(980)に対応付けられたポインタを含むエントリの値域境界値に設定し、階層2の根ツリーノードのバージョン情報を繰り上げる(S77)。続いて、ツリー更新部15は、次のリンク先ノード(70)を特定する(S70)。以降、リンク先ノード(70)についても同様のバージョン確認処理が実行される。
図19は、実施例1におけるノード(413)のバージョン更新後のツリー構造データの例を概念的に示す図である。図19に示されるように、階層2のツリーデータに関し、根ツリーノードのバージョン情報(Ver.3)、リンク先ノード(980)に対応付けられたポインタで特定される子ツリーノードのバージョン情報(Ver.2)、リンク先ノード(70)に対応付けられたポインタで特定される子ツリーノードのバージョン情報(Ver.2)及び値域境界値(38)がそれぞれ更新されている。また、ノード(413)以外で、ノード(980)へのリンクを有しているノードについても同様に処理され、それぞれ新たな値域情報が取得される。
なお、リンク先ノード(980)から取得されたツリーデータとリンク先ノード(70)から取得されたツリーデータとでは重複するエントリ(値域境界値(25、38及び53)を含む3つのエントリ)が存在するため、図19の例では、前のリンク先ノード(980)に対応付けられたポインタで特定される子ツリーノードからはその重複するエントリは排除されている。階層2以上のツリーデータの根ツリーノード以外のツリーノードは、返信に含まれるツリーデータの複製であってもよいし、このように冗長性を排除するためにそのツリーデータから変形されたものであってもよい。なお、このように、各枝(葉)ツリーノード間の冗長性を排除する場合、バージョン管理とツリーノード間の差分管理を対応づけておくことが望ましい。上述の例では、冗長なため削除されたエントリにおいて値域境界値の変更が発生していたが、リンク先ノード(980)に対応付けられたポインタで特定される子ツリーノードのバージョン情報が繰り上げられた。しかしながら、冗長なため削除されるエントリに対する更新(自分のSucと重複する箇所)については、バージョン情報を繰り上げないようにしてもよい。
次に、実施例2として、上述の第2実施形態で利用される、拡張Koorde及びパラメータについて説明する。
拡張Koordeの入力次数(indegree)、出力次数(outdegree)、及び、構築される木の高さ(又はホップ数)は、各ノードのSucノードまでの距離に関する確率変数に強く依存する。1つの物理サーバ(データサーバ10)辺りの仮想サーバ数(論理ノード11の数)をv、論理ノード11の総数をNとすると、隣接ノードまでの距離に対応する確率変数は幾何分布に従い、その仮想サーバ分vの和は、負の二項分布NB(v、p)に従う。また、或る範囲xに含まれるノード数は二項分布B(x、p)に従う。pは、N/2である。出力次数(δOUT)及び入力次数(δIN)は、下記(式X1)及び(式X2)で与えられる。
Figure 0005967195
ツリーの階層については、各ノードにて最も高いツリーの高さhmaxの上限の分布が容易に求まる。hmaxは、hホップ先のノード群がカバーするIDの範囲をrhとすると、rh>2を満たす最小の高さ(h)である。ノードとSucノードとの距離をrとすると、rhはrkよりも広いため、hmaxは、少なくともrk>2となる最小のh以下であり、これが上限hmaxとなる。この上限の確率分布は、f(h)=2/kとすると、上記(式X3)で与えられる。
ここで、或るノード11における値域の変更が分散システム1内の全ノード11に伝達されるまでの最大時間wmaxの制約(制約時間wc)及び実行時遅延の上限制約を設定した上で、各ノード11により実行されるバージョン確認の単位時間負荷λを最小化することを考える。ここでは、ラグランジュ乗数法による最適化を行う。ラグランジュ乗数をλとλとすると、KKT(Karush-Kuhn-Tucker)条件は、λ≧0、(wc−TlogN)≧0、λ(wc−TlogN)=0、及び、λ≧0、(hc−logN)≧0、λ(hc−logN)=0となる。hcとは、上述のとおり、ツリーの高さ制約hcである。これら条件を制約とし、下記(式X4)のラグランジュ関数を最小化する。
Figure 0005967195
上記(式X4)をポーリング間隔Tで偏微分すると、下記(式X5)が得られる。
Figure 0005967195
ここで、λ=0とすると、T>0及びk>0よりT→∞で上述の単位時間負荷λは最小となるが、これには、制約時間wcがwc>∞である必要があり、現実的でない。よって、KKT条件からwc=TlogNである。最適点では上記(式X5)が0であるため、下記(式X6)が得られる。
Figure 0005967195
一方、上記(式X4)をkで偏微分して、上記(式X6)を用いると、下記(式X7)が得られる。
Figure 0005967195
ここで、(hc−logN)>0である場合を考える(条件(i)と表記)。この時、KKT条件よりλ=0であり、上記(式X8)を0とするkは、logk=(1+k)/kを満たすk*であり、k*=3.59...である。kのこの値を用いると、条件(i)は、hc>0.78logNを満たす場合と対応する。例えば、N=1000の場合、設定されたhcがおよそ5.4以上の場合と対応する。この時、ポーリング間隔Tは、下記(式X9)により設定される。
Figure 0005967195
上記条件(i)以外の場合、hc=logNであることから、パラメータkは、Nの(1/hc)乗で、ポーリング間隔Tは、T=wc/hcで決定される。なお、de Bruijn graphでの2ビットシフトと対応することから、k*は便宜的にk=4とするのが好ましい。
各ノード11は、リンクを構築する際に、与えられたツリーの高さ制約hc2を用いて、少なくともpredノード(km)からpredノード(km+kρ)までのノードとリンクするようにしても良い。ρは、以下の(式X10)で示される。このようにすることで、全てのノード間でのホップ数の上限(直径)をhc2以下に抑える事が出来る。なお、kmとは、「km mod 2」を簡略化した表記である。
Figure 0005967195
[変形例]
上述の各実施形態及び各変形例におけるバージョン確認処理では、対象ノードのリンク先ノード側でバージョン情報の比較が行われ(図8のS82)、バージョンが異なる階層のツリーデータがそのリンク先ノードから対象ノードへ返信されていた(図8のS83)。このような構成は、リンク先ノードから対象ノードへ階層2以降の全ツリーデータが送られ、対象ノード側でバージョン情報の比較が行われるようにされてもよい。
[補足]
上述の拡張Koordeアルゴリズムは、上述のような各実施形態及び各実施例で示されるような態様以外に適用されても効果的である。例えば、当該拡張Koordeアルゴリズムは、属性値が順序付けられていないデータ構造におけるDHT(Distributed Hash Table)に適用されてもよい。この場合、次のような実施態様が考えられる。
データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードを実現する分散データ管理装置であって、
前記対象論理ノードは、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも1つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を格納するリンクテーブルと、
を備える分散データ管理装置。
データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードであって、リング構造を有する有限の識別子空間内で該複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、該対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、該複数の部分データの中の少なくとも1つを格納するデータ格納部とを有する該対象論理ノードを実現するコンピュータが、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を生成する、
分散データ管理方法。
上述の各実施形態及び各変形例は、内容が相反しない範囲で組み合わせることができる。また、上述の説明で用いた複数のフローチャートでは、複数のステップ(処理)が順番に記載されているが、本実施形態で実行される処理ステップの実行順序は、その記載の順番に制限されない。本実施形態では、図示される処理ステップの順番を内容的に支障のない範囲で変更することができる。
上記の各実施形態及び各変形例の一部又は全部は、以下の付記のようにも特定され得る。但し、各実施形態及び各変形例が以下の記載に限定されるものではない。
(付記1)
属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードを実現する分散データ管理装置であって、
前記対象論理ノードは、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも1つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記識別子空間内における前記対象ノード識別子との間の関係に応じて確立される前記対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、
前記データ格納部に格納される前記部分データに対応する属性毎の値域境界値であって、該属性毎の該値域境界が前記識別子空間内において前記対象論理ノードと前記対象論理ノードと隣接する論理ノードとの間に位置する該属性毎の該値域境界値を格納する値域格納部と、
アクセス要求に対応する前記部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、前記リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、該ポインタを選択するための値域を示す値とから形成される少なくとも1つのエントリを含む根ツリーノードを有するツリー構造データを格納するツリー格納部と、
を備える分散データ管理装置。
(付記2)
前記対象論理ノードは、
前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードからツリーデータを取得し、該取得されたツリーデータから前記根ツリーノードより下段の少なくとも1つのツリーノードを生成するツリー生成部を更に備える付記1に記載の分散データ管理装置。
(付記3)
前記ツリー格納部に格納される前記ツリー構造データは、複数階層を持ち、各階層にツリーデータをそれぞれ持ち、第1階層のツリーデータは、前記リンク先論理ノードが前記値域格納部に格納する値域情報に対応するエントリを有し、前記第1階層より上位の階層L(Lは2以上)のツリーデータは、前記根ツリーノードを含み、
前記ツリー生成部は、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードから、前記リンク先論理ノードに格納される階層(L−1)のツリーデータを取得し、取得された階層(L−1)のツリーデータから、前記階層Lのツリーデータの中の前記リンク先論理ノードに対応する部分ツリーデータを生成する、
付記2に記載の分散データ管理装置。
(付記4)
前記ツリー格納部に格納される前記各ツリーデータを構成する各ツリーノードは、バージョン情報をそれぞれ含み、
前記対象論理ノードは、
前記階層Lの前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードに対して、該ポインタが指す子ツリーノードのバージョン情報が設定されたバージョン確認要求を送信し、該バージョン確認要求に対する該リンク先論理ノードからの返信に含まれるツリーデータ及びバージョン情報により、各ツリーノード及び各ツリーノードのバージョン情報を更新するツリー更新部と、
他の論理ノードから前記バージョン確認要求を受信し、該バージョン確認要求に含まれる前記階層Lに関するバージョン情報を、前記対象論理ノードが持つ階層(L−1)のツリーデータのバージョン情報とそれぞれ比較し、バージョンが異なる階層(L−1)のツリーデータをバージョン情報と共に該他の論理ノードへ返信するバージョン比較部と、
を更に備える付記3に記載の分散データ管理装置。
(付記5)
前記対象論理ノードが、
探索対象属性に関する前記ツリー構造データに含まれるツリーノードの第1エントリが示す値域境界値を該探索対象属性の属性値空間内の基準値とし、該基準値から該属性値空間内の最大値までの間の任意の値が、該属性値空間内の最小値から該基準値までの間の任意の値より小さくなる場合を含む、該属性値空間の循環順序に基づく包含判定により、前記ツリー構造データから探索対象の属性値を値域に含むエントリを特定するツリー探索部を更に備える付記4に記載の分散データ管理装置。
(付記6)
前記各階層の根ツリーノードには、前記属性値空間における全属性値を包含しない値域がそれぞれ設定され、
前記ツリー探索部は、或る階層の前記ツリーデータから、前記探索対象属性値を値域に含むエントリを特定できない場合には、1段上の階層のツリーデータの探索を試み、該1段上の階層のツリーデータが存在しない場合には、前記ツリー生成部に、該1段上の階層のツリーデータの生成を依頼する、
付記5に記載の分散データ管理装置。
(付記7)
前記リンクテーブルに格納される前記リンク情報は、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含む、
付記1から6のいずれか1つに記載の分散データ管理装置。
(付記8)
前記リンクテーブルは、前記対象論理ノードから、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードへの複数リンクを含むリンク情報を格納し、
前記ツリー更新部は、前記バージョン確認要求をポーリング間隔Tで送信し、
前記対象論理ノードは、
前記複数の論理ノードの少なくとも1つにおける値域の変更が前記複数の論理ノードの全てに伝達されるまでの最大時間に対するシステム制約時間wc、又は、前記各論理ノードが前記バージョン確認要求を送信する単位時間負荷に対するシステム制約負荷λcを取得し、取得されたシステム制約時間wc又は取得されたシステム制約負荷λc、及び、前記論理ノードの総数N又は前記対象論理ノードのリンク先ノードの数Dを、下記(式1)又は下記(式2)に適用することにより、前記ポーリング間隔Tを算出するパラメータ設定部、
を更に備える付記4から6のいずれか1つに記載の分散データ管理装置。
Figure 0005967195
kは前記パラメータkを示す。
(付記9)
前記パラメータkが4に設定される付記7又は8に記載の分散データ管理装置。
(付記10)
アクセス要求に対応する部分データを格納しており、付記6に記載の分散データ管理装置で実現される前記対象論理ノードを該アクセス要求の宛先として特定する分散データ操作装置であって、
前記対象論理ノードを含む複数のリンク先論理ノードと通信可能となるリンク情報を格納するリンクテーブルと、
前記ツリー格納部と、
前記ツリー更新部と、
前記ツリー探索部と、
を備える分散データ操作装置。
(付記11)
属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードをコンピュータに実現させるプログラムであって、
前記対象論理ノードが、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも1つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記識別子空間内における前記対象ノード識別子との間の関係に応じて確立される前記対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、
前記データ格納部に格納される前記部分データに対応する属性毎の値域境界値であって、該属性毎の該値域境界が前記識別子空間内において前記対象論理ノードと前記対象論理ノードと隣接する論理ノードとの間に位置する該属性毎の該値域境界値を格納する値域格納部と、
アクセス要求に対応する前記部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、前記リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、該ポインタを選択するための値域を示す値とから形成される少なくとも1つのエントリを含む根ツリーノードを有するツリー構造データを格納するツリー格納部と、
を備えるプログラム。
(付記12)
前記対象論理ノードが、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードからツリーデータを取得し、該取得されたツリーデータから前記根ツリーノードより下段の少なくとも1つのツリーノードを生成するツリー生成部を更に備える付記11に記載のプログラム。
(付記13)
前記ツリー格納部に格納される前記ツリー構造データは、複数階層を持ち、各階層にツリーデータをそれぞれ持ち、第1階層のツリーデータは、前記リンク先論理ノードが前記値域格納部に格納する値域情報に対応するエントリを有し、前記第1階層より上位の階層L(Lは2以上)のツリーデータは、前記根ツリーノードを含み、
前記ツリー生成部は、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードから、前記リンク先論理ノードに格納される階層(L−1)のツリーデータを取得し、取得された階層(L−1)のツリーデータから、前記階層Lのツリーデータの中の前記リンク先論理ノードに対応する部分ツリーデータを生成する、
付記12に記載のプログラム。
(付記14)
前記ツリー格納部に格納される前記各ツリーデータを構成する各ツリーノードは、バージョン情報をそれぞれ含み、
前記対象論理ノードは、
前記階層Lの前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードに対して、該ポインタが指す子ツリーノードのバージョン情報が設定されたバージョン確認要求を送信し、該バージョン確認要求に対する該リンク先論理ノードからの返信に含まれるツリーデータ及びバージョン情報により、各ツリーノード及び各ツリーノードのバージョン情報を更新するツリー更新部と、
他の論理ノードから前記バージョン確認要求を受信し、該バージョン確認要求に含まれる前記階層Lに関するバージョン情報を、前記対象論理ノードが持つ階層(L−1)のツリーデータのバージョン情報とそれぞれ比較し、バージョンが異なる階層(L−1)のツリーデータをバージョン情報と共に該他の論理ノードへ返信するバージョン比較部と、
を更に備える付記13に記載のプログラム。
(付記15)
前記対象論理ノードが、
探索対象属性に関する前記ツリー構造データに含まれるツリーノードの第1エントリが示す値域境界値を該探索対象属性の属性値空間内の基準値とし、該基準値から該属性値空間内の最大値までの間の任意の値が、該属性値空間内の最小値から該基準値までの間の任意の値より小さくなる場合を含む、該属性値空間の循環順序に基づく包含判定により、前記ツリー構造データから探索対象の属性値を値域に含むエントリを特定するツリー探索部を更に備える付記14に記載のプログラム。
(付記16)
前記各階層の根ツリーノードには、前記属性値空間における全属性値を包含しない値域がそれぞれ設定され、
前記ツリー探索部は、或る階層の前記ツリーデータから、前記探索対象属性値を値域に含むエントリを特定できない場合には、1段上の階層のツリーデータの探索を試み、該1段上の階層のツリーデータが存在しない場合には、前記ツリー生成部に、該1段上の階層のツリーデータの生成を依頼する、
付記15に記載のプログラム。
(付記17)
前記リンクテーブルに格納される前記リンク情報は、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含む、
付記11から16のいずれか1つに記載のプログラム。
(付記18)
前記リンクテーブルは、前記対象論理ノードから、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードへの複数リンクを含むリンク情報を格納し、
前記ツリー更新部は、前記バージョン確認要求をポーリング間隔Tで送信し、
前記対象論理ノードは、
前記複数の論理ノードの少なくとも1つにおける値域の変更が前記複数の論理ノードの全てに伝達されるまでの最大時間に対するシステム制約時間wc、又は、前記各論理ノードが前記バージョン確認要求を送信する単位時間負荷に対するシステム制約負荷λcを取得し、取得されたシステム制約時間wc又は取得されたシステム制約負荷λc、及び、前記論理ノードの総数N又は前記対象論理ノードのリンク先ノードの数Dを、下記(式1)又は下記(式2)に適用することにより、前記ポーリング間隔Tを算出するパラメータ設定部、
を更に備える付記14に記載のプログラム。
Figure 0005967195
kは前記パラメータkを示す。
(付記19)
前記パラメータkが4に設定される付記17又は18に記載のプログラム。
(付記20)
データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードを実現する分散データ管理装置であって、
前記対象論理ノードは、
リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
前記複数の部分データの中の少なくとも1つを格納するデータ格納部と、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を格納するリンクテーブルと、
を備える分散データ管理装置。
(付記21)
データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードであって、リング構造を有する有限の識別子空間内で該複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、該対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、該複数の部分データの中の少なくとも1つを格納するデータ格納部とを有する該対象論理ノードを実現するコンピュータが、
前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を生成する、
分散データ管理方法。
(付記22)
付記11から19のいずれか1つに記載のプログラムをコンピュータに読み取り可能に記録する記録媒体。
この出願は、2012年5月15日に出願された日本出願特願2012−111189号を基礎とする優先権を主張し、その開示の全てをここに取り込む。

Claims (21)

  1. 属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードを実現する分散データ管理装置であって、
    前記対象論理ノードは、
    リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
    前記複数の部分データの中の少なくとも1つを格納するデータ格納部と、
    前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記識別子空間内における前記対象ノード識別子との間の関係に応じて確立される前記対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、
    前記データ格納部に格納される前記部分データに対応する属性毎の値域境界値であって、該属性毎の該値域境界が前記識別子空間内において前記対象論理ノードと前記対象論理ノードと隣接する論理ノードとの間に位置する該属性毎の該値域境界値を格納する値域格納部と、
    アクセス要求に対応する前記部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、前記リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、該ポインタを選択するための値域を示す値とから形成される少なくとも1つのエントリを含む根ツリーノードを有するツリー構造データを格納するツリー格納部と、
    を備える分散データ管理装置。
  2. 前記対象論理ノードは、
    前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードからツリーデータを取得し、該取得されたツリーデータから前記根ツリーノードより下段の少なくとも1つのツリーノードを生成するツリー生成部を更に備える請求項1に記載の分散データ管理装置。
  3. 前記ツリー格納部に格納される前記ツリー構造データは、複数階層を持ち、各階層にツリーデータをそれぞれ持ち、第1階層のツリーデータは、前記リンク先論理ノードが前記値域格納部に格納する値域情報に対応するエントリを有し、前記第1階層より上位の階層L(Lは2以上)のツリーデータは、前記根ツリーノードを含み、
    前記ツリー生成部は、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードから、前記リンク先論理ノードに格納される階層(L−1)のツリーデータを取得し、取得された階層(L−1)のツリーデータから、前記階層Lのツリーデータの中の前記リンク先論理ノードに対応する部分ツリーデータを生成する、
    請求項2に記載の分散データ管理装置。
  4. 前記ツリー格納部に格納される前記各ツリーデータを構成する各ツリーノードは、バージョン情報をそれぞれ含み、
    前記対象論理ノードは、
    前記階層Lの前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードに対して、該ポインタが指す子ツリーノードのバージョン情報が設定されたバージョン確認要求を送信し、該バージョン確認要求に対する該リンク先論理ノードからの返信に含まれるツリーデータ及びバージョン情報により、各ツリーノード及び各ツリーノードのバージョン情報を更新するツリー更新部と、
    他の論理ノードから前記バージョン確認要求を受信し、該バージョン確認要求に含まれる前記階層Lに関するバージョン情報を、前記対象論理ノードが持つ階層(L−1)のツリーデータのバージョン情報とそれぞれ比較し、バージョンが異なる階層(L−1)のツリーデータをバージョン情報と共に該他の論理ノードへ返信するバージョン比較部と、
    を更に備える請求項3に記載の分散データ管理装置。
  5. 前記対象論理ノードが、
    探索対象属性に関する前記ツリー構造データに含まれるツリーノードの第1エントリが示す値域境界値を該探索対象属性の属性値空間内の基準値とし、該基準値から該属性値空間内の最大値までの間の任意の値が、該属性値空間内の最小値から該基準値までの間の任意の値より小さくなる場合を含む、該属性値空間の循環順序に基づく包含判定により、前記ツリー構造データから探索対象の属性値を値域に含むエントリを特定するツリー探索部を更に備える請求項4に記載の分散データ管理装置。
  6. 前記各階層の根ツリーノードには、前記属性値空間における全属性値を包含しない値域がそれぞれ設定され、
    前記ツリー探索部は、或る階層の前記ツリーデータから、前記探索対象属性値を値域に含むエントリを特定できない場合には、1段上の階層のツリーデータの探索を試み、該1段上の階層のツリーデータが存在しない場合には、前記ツリー生成部に、該1段上の階層のツリーデータの生成を依頼する、
    請求項5に記載の分散データ管理装置。
  7. 前記リンクテーブルに格納される前記リンク情報は、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含む、
    請求項1から6のいずれか1項に記載の分散データ管理装置。
  8. 前記リンクテーブルは、前記対象論理ノードから、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードへの複数リンクを含むリンク情報を格納し、
    前記ツリー更新部は、前記バージョン確認要求をポーリング間隔Tで送信し、
    前記対象論理ノードは、
    前記複数の論理ノードの少なくとも1つにおける値域の変更が前記複数の論理ノードの全てに伝達されるまでの最大時間に対するシステム制約時間wc、又は、前記各論理ノードが前記バージョン確認要求を送信する単位時間負荷に対するシステム制約負荷λcを取得し、取得されたシステム制約時間wc又は取得されたシステム制約負荷λc、及び、前記論理ノードの総数N又は前記対象論理ノードのリンク先ノードの数Dを、下記(式1)又は下記(式2)に適用することにより、前記ポーリング間隔Tを算出するパラメータ設定部、
    を更に備える請求項4から6のいずれか1項に記載の分散データ管理装置。
    Figure 0005967195
    kは前記パラメータkを示す。
  9. 前記パラメータkが4に設定される請求項7又は8に記載の分散データ管理装置。
  10. アクセス要求に対応する部分データを格納しており、請求項6に記載の分散データ管理装置で実現される前記対象論理ノードを該アクセス要求の宛先として特定する分散データ操作装置であって、
    前記対象論理ノードを含む複数のリンク先論理ノードと通信可能となるリンク情報を格納するリンクテーブルと、
    前記ツリー格納部と、
    前記ツリー更新部と、
    前記ツリー探索部と、
    を備える分散データ操作装置。
  11. 属性値順に順序付けられたデータが分割された複数の部分データであって属性毎の値域をそれぞれ有する複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードをコンピュータに実現させるプログラムであって、
    前記対象論理ノードが、
    リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
    前記複数の部分データの中の少なくとも1つを格納するデータ格納部と、
    前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記識別子空間内における前記対象ノード識別子との間の関係に応じて確立される前記対象論理ノードとリンク先論理ノードとの間のリンク情報を格納するリンクテーブルと、
    前記データ格納部に格納される前記部分データに対応する属性毎の値域境界値であって、該属性毎の該値域境界が前記識別子空間内において前記対象論理ノードと前記対象論理ノードと隣接する論理ノードとの間に位置する該属性毎の該値域境界値を格納する値域格納部と、
    アクセス要求に対応する前記部分データを格納する論理ノードを特定するための、値域をそれぞれ示す複数のツリーノードから構成される属性毎のツリー構造データであって、前記リンク先論理ノードと対応付けられた子ツリーノードへのポインタと、該ポインタを選択するための値域を示す値とから形成される少なくとも1つのエントリを含む根ツリーノードを有するツリー構造データを格納するツリー格納部と、
    を備えるプログラム。
  12. 前記対象論理ノードが、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードからツリーデータを取得し、該取得されたツリーデータから前記根ツリーノードより下段の少なくとも1つのツリーノードを生成するツリー生成部を更に備える請求項11に記載のプログラム。
  13. 前記ツリー格納部に格納される前記ツリー構造データは、複数階層を持ち、各階層にツリーデータをそれぞれ持ち、第1階層のツリーデータは、前記リンク先論理ノードが前記値域格納部に格納する値域情報に対応するエントリを有し、前記第1階層より上位の階層L(Lは2以上)のツリーデータは、前記根ツリーノードを含み、
    前記ツリー生成部は、前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードから、前記リンク先論理ノードに格納される階層(L−1)のツリーデータを取得し、取得された階層(L−1)のツリーデータから、前記階層Lのツリーデータの中の前記リンク先論理ノードに対応する部分ツリーデータを生成する、
    請求項12に記載のプログラム。
  14. 前記ツリー格納部に格納される前記各ツリーデータを構成する各ツリーノードは、バージョン情報をそれぞれ含み、
    前記対象論理ノードは、
    前記階層Lの前記根ツリーノードに含まれる前記ポインタに対応付けられた前記リンク先論理ノードに対して、該ポインタが指す子ツリーノードのバージョン情報が設定されたバージョン確認要求を送信し、該バージョン確認要求に対する該リンク先論理ノードからの返信に含まれるツリーデータ及びバージョン情報により、各ツリーノード及び各ツリーノードのバージョン情報を更新するツリー更新部と、
    他の論理ノードから前記バージョン確認要求を受信し、該バージョン確認要求に含まれる前記階層Lに関するバージョン情報を、前記対象論理ノードが持つ階層(L−1)のツリーデータのバージョン情報とそれぞれ比較し、バージョンが異なる階層(L−1)のツリーデータをバージョン情報と共に該他の論理ノードへ返信するバージョン比較部と、
    を更に備える請求項13に記載のプログラム。
  15. 前記対象論理ノードが、
    探索対象属性に関する前記ツリー構造データに含まれるツリーノードの第1エントリが示す値域境界値を該探索対象属性の属性値空間内の基準値とし、該基準値から該属性値空間内の最大値までの間の任意の値が、該属性値空間内の最小値から該基準値までの間の任意の値より小さくなる場合を含む、該属性値空間の循環順序に基づく包含判定により、前記ツリー構造データから探索対象の属性値を値域に含むエントリを特定するツリー探索部を更に備える請求項14に記載のプログラム。
  16. 前記各階層の根ツリーノードには、前記属性値空間における全属性値を包含しない値域がそれぞれ設定され、
    前記ツリー探索部は、或る階層の前記ツリーデータから、前記探索対象属性値を値域に含むエントリを特定できない場合には、1段上の階層のツリーデータの探索を試み、該1段上の階層のツリーデータが存在しない場合には、前記ツリー生成部に、該1段上の階層のツリーデータの生成を依頼する、
    請求項15に記載のプログラム。
  17. 前記リンクテーブルに格納される前記リンク情報は、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含む、
    請求項11から16のいずれか1項に記載のプログラム。
  18. 前記リンクテーブルは、前記対象論理ノードから、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードへの複数リンクを含むリンク情報を格納し、
    前記ツリー更新部は、前記バージョン確認要求をポーリング間隔Tで送信し、
    前記対象論理ノードは、
    前記複数の論理ノードの少なくとも1つにおける値域の変更が前記複数の論理ノードの全てに伝達されるまでの最大時間に対するシステム制約時間wc、又は、前記各論理ノードが前記バージョン確認要求を送信する単位時間負荷に対するシステム制約負荷λcを取得し、取得されたシステム制約時間wc又は取得されたシステム制約負荷λc、及び、前記論理ノードの総数N又は前記対象論理ノードのリンク先ノードの数Dを、下記(式1)又は下記(式2)に適用することにより、前記ポーリング間隔Tを算出するパラメータ設定部、
    を更に備える請求項14に記載のプログラム。
    Figure 0005967195
    kは前記パラメータkを示す。
  19. 前記パラメータkが4に設定される請求項17又は18に記載のプログラム。
  20. データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードを実現する分散データ管理装置であって、
    前記対象論理ノードは、
    リング構造を有する有限の識別子空間内で前記複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、前記対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、
    前記複数の部分データの中の少なくとも1つを格納するデータ格納部と、
    前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を格納するリンクテーブルと、
    を備える分散データ管理装置。
  21. データが分割された複数の部分データを格納する複数の論理ノードの中の少なくとも1つの対象論理ノードであって、リング構造を有する有限の識別子空間内で該複数の論理ノードに一意にそれぞれ割り当てられる複数の識別子の中の、該対象論理ノードに割り当てられた識別子を対象ノード識別子として格納するノード識別子格納部と、該複数の部分データの中の少なくとも1つを格納するデータ格納部とを有する該対象論理ノードを実現するコンピュータが、
    前記対象論理ノードと他の論理ノードとの間の通信可能な関係を示すリンク情報であって、前記対象ノード識別子をパラメータk(kは自然数)倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第1リンク先論理ノード、前記対象ノード識別子よりも大きくかつ直近の識別子を持つ後継論理ノードの識別子を該パラメータk倍して得られる値、又は、該値より小さくかつ該値の直近の識別子を持つ第2リンク先論理ノード、及び、前記識別子空間における該第1リンク先論理ノードの識別子と該第2リンク先論理ノードの識別子との間の識別子を持つ少なくとも1つの第3リンク先論理ノードと、前記対象論理ノードとの間の複数リンクを含むリンク情報を生成する、
    分散データ管理方法。
JP2014515468A 2012-05-15 2013-03-15 分散データ管理装置及び分散データ操作装置 Active JP5967195B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2014515468A JP5967195B2 (ja) 2012-05-15 2013-03-15 分散データ管理装置及び分散データ操作装置

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2012111189 2012-05-15
JP2012111189 2012-05-15
JP2014515468A JP5967195B2 (ja) 2012-05-15 2013-03-15 分散データ管理装置及び分散データ操作装置
PCT/JP2013/001768 WO2013171953A1 (ja) 2012-05-15 2013-03-15 分散データ管理装置及び分散データ操作装置

Publications (2)

Publication Number Publication Date
JPWO2013171953A1 JPWO2013171953A1 (ja) 2016-01-12
JP5967195B2 true JP5967195B2 (ja) 2016-08-10

Family

ID=49583386

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014515468A Active JP5967195B2 (ja) 2012-05-15 2013-03-15 分散データ管理装置及び分散データ操作装置

Country Status (5)

Country Link
US (1) US10073857B2 (ja)
EP (1) EP2851803A4 (ja)
JP (1) JP5967195B2 (ja)
CN (1) CN104487951B (ja)
WO (1) WO2013171953A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140188451A1 (en) * 2011-08-01 2014-07-03 Nec Corporation Distributed processing management server, distributed system and distributed processing management method
CN106484321A (zh) * 2016-09-08 2017-03-08 华为数字技术(成都)有限公司 一种数据存储方法及数据中心
CN107229429B (zh) * 2017-06-27 2020-06-16 苏州浪潮智能科技有限公司 一种存储空间管理方法及装置
CN107665241B (zh) * 2017-09-07 2020-09-29 北京京东尚科信息技术有限公司 一种实时数据多维度去重方法和装置
CN108536447B (zh) * 2018-04-11 2021-07-16 上海掌门科技有限公司 运维管理方法
US11119679B2 (en) * 2019-08-02 2021-09-14 Micron Technology, Inc. Storing data based on a probability of a data graph
US11474866B2 (en) * 2019-09-11 2022-10-18 International Business Machines Corporation Tree style memory zone traversal
JP7239433B2 (ja) * 2019-10-02 2023-03-14 ヤフー株式会社 情報処理装置、情報処理方法、及び情報処理プログラム
US11507541B2 (en) * 2020-01-21 2022-11-22 Microsoft Technology Licensing, Llc Method to model server-client sync conflicts using version trees
CN113032401B (zh) * 2021-03-31 2023-09-08 合安科技技术有限公司 基于异形结构树的大数据处理方法、装置及相关设备
US11494366B1 (en) * 2021-05-25 2022-11-08 Oracle International Corporation Change data capture on no-master data stores

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2117846C (en) * 1993-10-20 2001-02-20 Allen Reiter Computer method and storage structure for storing and accessing multidimensional data
EP1206065A4 (en) * 2000-06-21 2006-10-18 Sony Corp APPARATUS AND METHOD FOR RECORDING / REPRODUCING INFORMATION
US7519574B2 (en) * 2003-08-25 2009-04-14 International Business Machines Corporation Associating information related to components in structured documents stored in their native format in a database
JP3923931B2 (ja) * 2003-09-16 2007-06-06 株式会社野村総合研究所 論理ネットワークへの参加要求方法、参加受付方法、メッセージ送信方法、参加要求プログラム、参加受付プログラム、メッセージ送信プログラム、参加要求装置、参加受付装置、及びメッセージ送信装置
JP4353827B2 (ja) * 2004-02-26 2009-10-28 株式会社野村総合研究所 マルチキャストルーティング情報送信方法、及びマルチキャストルーティング情報送信プログラム
KR101095377B1 (ko) 2004-06-03 2011-12-16 가부시키가이샤 터보 데이터 라보라토리 배열의 생성방법, 정보처리장치, 및, 프로그램
KR20070101288A (ko) 2005-01-25 2007-10-16 가부시키가이샤 터보 데이터 라보라토리 트리의 검색, 집계, 소트 방법, 정보 처리 장치, 및 트리의검색, 집계, 소트 프로그램
WO2007024918A2 (en) 2005-08-23 2007-03-01 Matsushita Electric Industrial Co., Ltd. System and method for service discovery in a computer network using dynamic proxy and data dissemination
WO2007030742A2 (en) * 2005-09-08 2007-03-15 Matsushita Electric Industrial Co., Ltd. Parallelizing peer-to-peer overlays using multi-destination routing
US20100281165A1 (en) 2006-11-14 2010-11-04 Christoph Gerdes Method for the load distribution in a peer-to-peer-overlay network
JP2008234563A (ja) 2007-03-23 2008-10-02 Nec Corp オーバレイ管理装置、オーバレイ管理システム、オーバレイ管理方法およびオーバレイ管理用プログラム
JP4277918B2 (ja) * 2007-04-13 2009-06-10 日本電気株式会社 データ検索装置、データ検索方法およびデータ検索用プログラム
US8250116B2 (en) * 2008-12-31 2012-08-21 Unisys Corporation KStore data simulator directives and values processor process and files

Also Published As

Publication number Publication date
US20150120649A1 (en) 2015-04-30
JPWO2013171953A1 (ja) 2016-01-12
US10073857B2 (en) 2018-09-11
CN104487951A (zh) 2015-04-01
EP2851803A4 (en) 2016-01-13
WO2013171953A1 (ja) 2013-11-21
EP2851803A1 (en) 2015-03-25
CN104487951B (zh) 2017-09-22

Similar Documents

Publication Publication Date Title
JP5967195B2 (ja) 分散データ管理装置及び分散データ操作装置
JP6119421B2 (ja) エンコードされたトリプルを格納するデータベース、制御部、方法及びシステム
US7664742B2 (en) Index data structure for a peer-to-peer network
JP6094487B2 (ja) 情報システム、管理装置、データ処理方法、データ構造、プログラム、および記録媒体
Wang et al. Indexing multi-dimensional data in a cloud system
JP5090450B2 (ja) 階層に編成され、ネットワークを介してリンクされた複数のノードに保管された複製データを更新するための方法、プログラム、およびコンピュータ可読媒体
US20100161657A1 (en) Metadata server and metadata management method
CN103455531B (zh) 一种支持高维数据实时有偏查询的并行索引方法
US8296420B2 (en) Method and apparatus for constructing a DHT-based global namespace
CN105357247B (zh) 基于分层云对等网络的多维属性云资源区间查找方法
US20140244794A1 (en) Information System, Method and Program for Managing the Same, Method and Program for Processing Data, and Data Structure
Choi et al. Dynamic hybrid replication effectively combining tree and grid topology
Kumar et al. M-Grid: a distributed framework for multidimensional indexing and querying of location based data
JP7202558B1 (ja) ヒューマンサイバーフィジカル融合環境におけるデジタルオブジェクトアクセス方法及びシステム
Aebeloe et al. Decentralized indexing over a network of RDF peers
Hassanzadeh-Nazarabadi et al. Laras: Locality aware replication algorithm for the skip graph
US20060209717A1 (en) Distributed storing of network position information for nodes
Qi et al. A balanced strategy to improve data invulnerability in structured P2P system
JP6182861B2 (ja) 情報処理装置、情報処理端末、情報検索プログラム及び情報検索方法
Gao et al. Indexing multi-dimensional data in modular data centers
Dewan et al. Julunga: A new large-scale distributed read-write file storage system for cloud computing environments
Fujita Similarity search in interplanetary file system with the aid of locality sensitive hash
CN117478304B (zh) 区块链管理方法、系统和计算机设备
Malkov et al. An overlay network for distributed exact and range search in one-dimensional space
CN117440003A (zh) 一种无中心的分布式存储方法及系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160217

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160620

R150 Certificate of patent or registration of utility model

Ref document number: 5967195

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150