ディレクトリ更新方法及びディレクトリ更新プログラム、並びに、木構造型データ記憶装置
【課題】 Fat−Btree構造におけるデータ更新時に、効率的に木構造の更新を行うディレクトリ分散型記憶装置を提供する。
【解決手段】 ディレクトリ分散型記憶装置1は、エントリ数が予め定めた制限未満である最も下位のノードを探索する第1フェーズ実行手段631と、そのノード以下のノードに対して排他ラッチを設定し、葉ノード31の更新に伴い分割対象となる親ノードに排他ラッチが設定されている場合に葉ノード31を更新し、分割対象となる親ノードに排他ラッチが設定されていない場合に排他ラッチの範囲を拡大する第2フェーズ実行手段632とを備えることを特徴とする。
【解決手段】 ディレクトリ分散型記憶装置1は、エントリ数が予め定めた制限未満である最も下位のノードを探索する第1フェーズ実行手段631と、そのノード以下のノードに対して排他ラッチを設定し、葉ノード31の更新に伴い分割対象となる親ノードに排他ラッチが設定されている場合に葉ノード31を更新し、分割対象となる親ノードに排他ラッチが設定されていない場合に排他ラッチの範囲を拡大する第2フェーズ実行手段632とを備えることを特徴とする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴う際のディレクトリ更新を効率的に行うディレクトリ更新方法及びディレクトリ更新プログラム、並びに、木構造型データ記憶装置に関する。
【背景技術】
【0002】
近年、並列に配置された計算機(PE:Processing Element)上にデータベース等のデータを分散して記憶することで、データにアクセスする際の負荷分散と並行性動作とを実現したシステムが存在する。
このようなシステムにおいては、アクセス集中による負荷の偏りが存在する場合、その負荷の大きいPEがボトルネックとなり、システム全体の処理能力が低下してしまう。そこで、各PEに負荷を均等に分配するためのディレクトリ構造と、そのディレクトリ構造における並行性制御とが提案されている(例えば、非特許文献1参照)。
ここで、図13を参照して、従来の並列計算機におけるディレクトリ構造について、その概要を説明する。図13は、従来の並列計算機におけるディレクトリ構造の一例であるFat−Btree構造を示す図である。
【0003】
(Fat−Btree構造)
図13に示すように、Fat−Btree構造は、データを示す葉ノードNlを各計算機PEに均等に分配している。また、Fat−Btree構造は、葉ノードNl以外のインデックスを示すインデックスノードNiとして、各計算機PEに配置されている葉ノードNlへのアクセスパスとなるインデックスノードNiのみを各計算機PEに分配している。
なお、各インデックスノードNiに登録(エントリ)される下位層のインデックスノードの数と、葉ノードNlに登録されるデータ(データページ)の数とは、予め定められた数に制限されている。この制限された数を超過する場合は、各ノードは分割され、木構造が更新(SMO:Structure Modification Operation)されることになる。これによって、あるアクセスパスに対して負荷が集中することを回避している。
【0004】
このように、葉ノードNl及びインデックスノードNiを分配することで、各計算機PEの記憶部に記憶されるのは、全体の木構造に対して、ルートノードNiRから、均等に分配された葉ノードNlまでの部分木となる。すなわち、計算機PE1には部分木R1が、計算機PE2には部分木R2が、計算機PE3には部分木R3が、計算機PE4には部分木R4がそれぞれ記憶されることになる。
これによって、各計算機PEに対するアクセスの分散が行われる。また、各計算機PEでは、記憶している葉ノードNlの探索に必要のないインデックスノードNiを保持していないため、高速に葉ノードNlにアクセスすることができる。
【0005】
(並行性制御)
次に、従来の並列計算機における並行性制御について説明する。図13で説明したFat−Btree構造では、木構造の一貫性を保証するため、並行性制御が必須である。この並行性制御においては、アクセスパスに対して、他のプロセスからのアクセスを制御するロックが用いられる。このロックには、以下の表1に示す5種類(IS,IX,S,SIX,X)のモードがある。
【0006】
【表1】
【0007】
表1中、“○”印は、同時に複数のロックを設定できることを示している。
なお、以下では、IS、IX、S、SIX及びXの各モードのロックをそれぞれ、ISロック(インテント共有ロック)、IXロック(インテント排他ロック)、Sロック(共有ロック)、SIXロック(インテント排他付き共有ロック)及びXロック(排他ロック)と呼ぶ。
ここで、ISロック(インテント共有ロック)は、下位層の一部のリソースにSロックを設定し、そのリソースを読み取るプロセスの意思を示すものである。また、IXロック(インテント排他ロック)は、下位層の一部のリソースにXロックを設定し、そのリソースを変更するプロセスの意思を示すものである。また、Sロック(共有ロック)は、リソースを読み取り専用とする旨を示すものである。また、SIXロック(インテント排他付き共有ロック)は、リソースの同時読み取りを許可し、下位層のリソースにIXロックを設定し、プロセスがそのリソースを変更する意図を示すものである。さらに、Xロック(排他ロック)は、他のプロセスからの読み取り、変更を禁止する旨を示すものである。
【0008】
ただし、一般には、これらのロックには、デッドロック検出機能を持たない高速かつ単純なラッチが用いられる。このラッチは、セマフォの一種であって、以下、前記した各ロックをラッチにより実現した場合を、特に、ISラッチ(インテント共有ラッチ)、IXラッチ(インテント排他ラッチ)、Sラッチ(共有ラッチ)、SIXラッチ(インテント排他付き共有ラッチ)、及び、Xラッチ(排他ラッチ)と呼ぶ。
【0009】
次に、図13を参照して、前記した表1の5種類のロック(ラッチ)を用いた、並行性制御方式の一例であるINC−OPT(INCremental OPTimistic)方式について説明する。
(INC−OPT方式の参照時のプロトコル)
まず、INC−OPT方式におけるデータの参照時のプロトコルについて説明する。INC−OPT方式における、データである葉ノードNlの検索は、以下の〔R−1〕〜〔R−3〕の手順により行われる。
〔R−1〕ルートノードNiRにISラッチを設定する。
〔R−2〕上位層のノード(親ノード)に設定されて下位層のノード(子ノード)のポインタを取得し、子ノードにラッチ(ISラッチ)を設定し、親ノードのラッチを解放する動作を葉ノードNlまで繰り返す(以下、この動作をラッチカップリングという)。
〔R−3〕葉ノードNlにSラッチを設定する。
これによって、葉ノードNlを読み出す(参照する)ことが可能になる。
【0010】
(INC−OPT方式の更新時のプロトコル)
次に、INC−OPT方式におけるデータの更新時のプロトコルについて説明する。INC−OPT方式における、葉ノードNlの更新は、以下の〔W−1〕、〔W−2〕の2つのフェーズで行われる。
〔W−1(第1フェーズ)〕ルートノードNiRから葉ノードNlまで、IXラッチカップリングによりIXラッチを設定し、最下層の葉ノードNlにXラッチを設定する。ここで、葉ノードNlを更新する際に、予め定められたデータ(データページ)の数を超過することで、木構造に変化(SMO)が発生する場合は、葉ノードNlのXラッチを解放し、第2フェーズに移行する。なお、SMOが発生しない場合は、そのまま葉ノードNlを更新し動作を終了する。
〔W−2(第2フェーズ)〕葉ノードNlとその親ノードに対してXラッチを設定する。もし、葉ノードNlを分割することで、親ノードもエントリ数の制限を超過する場合は、さらに上位(親)のノードにXラッチの範囲を拡大していく。そして、親ノードの分割が必要でなくなった段階で、葉ノードNlの更新(SMOを含む)を行う。
以上の動作によって、INC−OPT方式は、Fat−Btree構造を維持したまま、データ(葉ノード)の参照、更新が可能になる。
【非特許文献1】宮崎純,横田治夫,「並列ディレクトリ構造Fat−Btreeの並行性制御とその評価」,情報処理学会研究会報告,データベースシステムDBS−124−69,pp.37−44,情報処理学会,Jul.2001
【発明の開示】
【発明が解決しようとする課題】
【0011】
しかし、前記したINC−OPT方式では、データの更新時のプロトコルにおいて、SMOが発生する場合、第2フェーズを処理するための動作(リスタート)を複数回行う必要がある。例えば、ルートノードまで更新が及ぶ場合、木構造の木の高さと同じフェーズ数分のリスタートが必要となり、あるプロセスからの更新命令に対する応答時間を増加させてしまうという問題がある。
さらに、上位層において、複数回Xラッチを設定することになり、他のプロセスからの読み取り、変更を禁止する期間が増大し、システム全体のスループットが低下してしまうという問題がある。
【0012】
本発明は、以上のような問題点に鑑みてなされたものであり、従来のINC−OPT方式に比べて、リスタート回数を少なく抑え、SMOに要するXラッチの獲得時間を短くするディレクトリ更新方法及びディレクトリ更新プログラム、並びに、木構造型データ記憶装置を提供することを目的とする。
【課題を解決するための手段】
【0013】
本発明は、前記目的を達成するために創案されたものであり、まず、請求項1に記載のディレクトリ更新方法は、木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴う際のディレクトリ更新方法であって、第1フェーズ実行ステップと、第2フェーズ実行ステップとを含む手順とした。
【0014】
この手順において、ディレクトリ更新方法は、第1フェーズ実行ステップとして、最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、エントリ数が予め定めた制限未満(非フルエントリ)である最も下位のノード(非フルエントリノード)を探索する。そして、ディレクトリ更新方法は、葉ノードに対して、他のプロセスからの読み取り、変更を禁止する排他ロックを設定し、葉ノードのエントリ数が予め定めた制限未満である場合には、その葉ノードを更新する。一方、ディレクトリ更新方法は、エントリ数が予め定めた制限を超過する場合には、葉ノードを更新(分割)することで、その親ノードのエントリ数に影響を及ぼすことになるため、ここでは一旦葉ノードの排他ロックを解放し、次の第2フェーズ実行ステップに移行する。
【0015】
そして、ディレクトリ更新方法は、第2フェーズ実行ステップとして、第1フェーズ実行ステップで探索された非フルエントリノード以下のノードに対してXロック(排他ロック)を設定する。そして、ディレクトリ更新方法は、葉ノードの更新に伴い分割対象となる親ノードにXロックが設定されている場合に、葉ノードを更新し、その葉ノードの更新により分割対象となる親ノードにXロックが設定されていない場合に、非フルエントリノードよりもさらに上位の非フルエントリノードを探索し、その探索された非フルエントリノードより下位のノードに排他ロックの範囲を拡大する。これによって、ディレクトリ更新方法は、動作をリスタートさせて第2フェーズ実行ステップに移行した場合に、非フルエントリノード以下のノードに対して一度にXロックを設定するため、葉ノードから順次上位のノードにXロックを設定する場合に比べ、第2フェーズ実行ステップをリスタートする回数を減らすことができる。
なお、ここで、排他ロックには、デッドロック検出機能を持たない高速かつ単純なラッチ(排他ラッチ)を用いることが望ましい。
【0016】
また、請求項2に記載のディレクトリ更新方法は、木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴う際のディレクトリ更新方法であって、最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行ステップと、前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行ステップとを含むこととした。
さらに、第2フェーズ実行ステップが、排他ロック設定ステップと、排他ロック有効判定ステップと、ノード更新ステップとをさらに含み、前記排他ロック有効判定ステップで木構造の変化に関連するノードに対して排他ロックが設定されていないと判定された場合に、前記第2フェーズ実行ステップを繰り返す手順とした。
【0017】
この手順によれば、ディレクトリ更新方法は、第1フェーズ実行ステップで、ルートノードから更新対象となる葉ノードまでの経路において、Xロック(排他ロック)を設定する旨を示すIXロック(インテント排他ロック)を下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索する。このように、IXロックを順次設定することで、他のプロセスが葉ノードに対してXロックを設定することを防止し、当該プロセスが確実に葉ノードに対してXロックを設定することが可能になる。
なお、ディレクトリ更新方法は、第1フェーズ実行ステップで、第1の非フルエントリノードを探索するとともに、葉ノードに対して排他ロックを設定し、葉ノードのエントリ数が予め定めた制限未満である場合に葉ノードの更新を行い、エントリ数が予め定めた制限を超過する場合に葉ノードの更新を行わずに排他ロックを解放する。これによって、葉ノードのエントリ数が予め定めた制限未満である場合には、第1フェーズ実行ステップで動作が終了することになる。
【0018】
そして、ディレクトリ更新方法は、第2フェーズ実行ステップで、ルートノードから第1の非フルエントリノードの親ノードまでの経路において、Xロック(排他ロック)を設定する旨を示すIXロック(インテント排他ロック)を下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する。
さらに、ディレクトリ更新方法は、第2フェーズ実行ステップにおいて、第2の非フルエントリノードの探索と並行し、排他ロック設定ステップで、第1の非フルエントリノードから葉ノードまでの経路において、各ノードにXロック(排他ロック)を設定する。そして、排他ロック有効判定ステップで、排他ロック設定ステップで設定したXロックが、葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する。すなわち、葉ノードを分割することで影響を受ける親ノードに対してXロックが設定されているかどうかを判定する。
【0019】
そして、木構造の更新に関連するノードに対してXロックが設定されていると判定された場合、ディレクトリ更新方法は、ノード更新ステップで葉ノードの更新を行う。一方、木構造の変化に関連するノードに対してXロックが設定されていないと判定された場合、ディレクトリ更新方法は、第2の非フルエントリノードを第1の非フルエントリノードとして、第2フェーズ実行ステップを繰り返す。
これによって、ディレクトリ更新方法は、動作をリスタートさせて第2フェーズ実行ステップに移行した場合に、非フルエントリノードより下位のノードに対して一度にXロックを設定するため、葉ノードから順次上位のノードにXロックを設定する場合に比べ、第2フェーズ実行ステップをリスタートする回数を減らすことができる。
なお、ここで、排他ロック及びインテント排他ロックには、デッドロック検出機能を持たない高速かつ単純なラッチ(排他ラッチ及びインテント排他ラッチ)を用いることが望ましい。
【0020】
さらに、請求項3に記載のディレクトリ更新プログラムは、木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴うディレクトリの更新を行うために、コンピュータを、最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行手段、前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに、前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行手段として機能させる構成とした。
さらに、第2フェーズ実行手段が、排他ロック設定手段と、排他ロック有効判定手段と、ノード更新手段と、ノード再設定手段とを備える構成とした。
【0021】
かかる構成によれば、ディレクトリ更新プログラムは、第1フェーズ実行手段によって、ルートノードから更新対象となる葉ノードまでの経路において、Xロック(排他ロック)を設定する旨を示すIXロック(インテント排他ロック)を下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索する。
なお、ディレクトリ更新プログラムは、第1フェーズ実行手段で、第1の非フルエントリノードを探索するとともに、葉ノードに対して排他ロックを設定し、葉ノードのエントリ数が予め定めた制限未満である場合に葉ノードの更新を行い、エントリ数が予め定めた制限を超過する場合に葉ノードの更新を行わずに排他ロックを解放する。
【0022】
そして、ディレクトリ更新プログラムは、第2フェーズ実行手段によって、ルートノードから第1の非フルエントリノードの親ノードまでの経路において、Xロック(排他ロック)を設定する旨を示すIXロック(インテント排他ロック)を下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する。
さらに、ディレクトリ更新プログラムは、排他ロック設定手段によって、第1の非フルエントリノードから葉ノードまでの経路において、各ノードにXロックを設定し、排他ロック有効判定手段によって、排他ロック設定手段で設定したXロックが、葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する。
【0023】
そして、木構造の変化に関連するノードに対してXロックが設定されていると判定された場合、ディレクトリ更新プログラムは、ノード更新手段によって、葉ノードの更新を行う。
一方、木構造の変化に関連するノードに対してXロックが設定されていないと判定された場合、ディレクトリ更新プログラムは、ノード再設定手段によって、第2の非フルエントリノードを第1の非フルエントリノードとして設定する。これによって、Xロックの範囲が拡大されることになる。
なお、ここで、排他ロック及びインテント排他ロックには、デッドロック検出機能を持たない高速かつ単純なラッチ(排他ラッチ及びインテント排他ラッチ)を用いることが望ましい。
【0024】
また、請求項4に記載の木構造型データ記憶装置は、木構造における各ノードのエントリ数を制限したディレクトリ構造によって、データを記憶する木構造型データ記憶装置において、最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行手段と、前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行手段とを備える構成とした。
さらに、第2フェーズ実行手段が、排他ロック設定手段と、排他ロック有効判定手段と、ノード更新手段と、ノード再設定手段とを備える構成とした。
【0025】
かかる構成によれば、木構造型データ記憶装置は、第1フェーズ実行手段によって、ルートノードから更新対象となる葉ノードまでの経路において、Xロックを設定する旨を示すIXロックを下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索する。
なお、木構造型データ記憶装置は、第1フェーズ実行手段で、第1の非フルエントリノードを探索するとともに、葉ノードに対して排他ロックを設定し、葉ノードのエントリ数が予め定めた制限未満である場合に葉ノードの更新を行い、エントリ数が予め定めた制限を超過する場合に葉ノードの更新を行わずに排他ロックを解放する。
【0026】
そして、木構造型データ記憶装置は、第2フェーズ実行手段によって、ルートノードから第1の非フルエントリノードの親ノードまでの経路において、Xロックを設定する旨を示すIXロックを下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する。
さらに、木構造型データ記憶装置は、排他ロック設定手段によって、第1の非フルエントリノードから葉ノードまでの経路において、各ノードにXロックを設定し、排他ロック有効判定手段によって、排他ロック設定手段で設定したXロックが、葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する。
そして、木構造の変化に関連するノードに対してXロックが設定されていると判定された場合、ディレクトリ分散型記憶装置は、ノード更新手段によって、葉ノードの更新を行う。
一方、木構造の変化に関連するノードに対してXロックが設定されていないと判定された場合、木構造型データ記憶装置は、ノード再設定手段によって、第2の非フルエントリノードを第1の非フルエントリノードとして設定する。
なお、ここで、Xロック(排他ロック)及びIXロック(インテント排他ロック)には、デッドロック検出機能を持たない高速かつ単純なラッチ(排他ラッチ及びインテント排他ラッチ)を用いることが望ましい。
【発明の効果】
【0027】
本発明によれば、更新対象となる葉ノードを更新することでディレクトリ構造の木構造に変化が発生する場合、葉ノードから順次親ノードに排他ロック(排他ラッチ)を設定する手順を行わず、エントリ数が予め定めた制限未満である最も下位のノード以降に対して排他ロック(排他ラッチ)を設定する。これによって、葉ノードから順次排他ロック(排他ラッチ)の範囲を拡大させるINC−OPT方式に比べ、リスタートの回数を減らすことができ、ディレクトリ構造の変更に伴う時間を減らすことができる。
【0028】
さらに、本発明によれば、リスタート回数を減らすことで、排他ロック(排他ラッチ)を設定している時間を減らすことができるため、他のプロセスからの葉ノードに対するアクセスに対する応答性を高めることができる。また、ディレクトリ構造を分散して記憶するシステムの場合、システム全体のスループットを改善することができる。
【発明を実施するための最良の形態】
【0029】
[ディレクトリ分散型記憶装置(木構造型データ記憶装置)の構成]
まず、図1を参照して、ディレクトリ分散型記憶装置の構成について説明する。図1は、本発明に係る木構造型データ記憶装置の最良の形態であるディレクトリ分散型記憶装置の構成を示すブロック図である。
図1に示したディレクトリ分散型記憶装置1は、ネットワークNに接続された他のディレクトリ分散型記憶装置(図示せず)と協働し、データベース等のデータを分散して記憶するものである。このディレクトリ分散型記憶装置1は、図13で説明したFat−Btree構造のディレクトリ構造によってデータを記憶管理する計算機PEに相当する。
ここでは、ディレクトリ分散型記憶装置1は、通信制御部2と、記憶部3と、制御部4とを備えている。また、ここでは、ロック制御として、デッドロック検出機能を持たないラッチを用いることとする。
【0030】
通信制御部2は、ネットワークNを介して、クライアントコンピュータ(図示せず)や他のディレクトリ分散型記憶装置(図示せず)と、データや制御情報(ノード情報を含む)の送受信を行うものである。例えば、通信制御部2は、TCP/IP(Transmission Control Protocol/Internet Protocol)の通信プロトコルによってデータ等の送受信を行う通信ボードである。
【0031】
記憶部3は、データベース等のデータや、ディレクトリ構造を特定するノード情報等を記憶しておくもので、一般的なハードディスク等の記憶装置である。この記憶部3には、データ31と、ノード情報32と、エントリ制限情報33とを記憶している。
【0032】
データ31は、Fat−Btree構造における葉ノードであって、データの実体である。このデータ31は、記憶領域の予め定められたページ単位で管理され、所定のページ数(後記するエントリ制限情報33に含まれる)を超過する場合は分割される。
【0033】
ノード情報32は、Fat−Btree構造のデータ構造を示す情報である。ここでは、ノード情報32は、Fat−Btree構造のルートノードから、この記憶部3に記憶されているデータ(葉ノード)31までのアクセスパスを示している。
さらに、ノード情報32は、各ノードにどのプロセスから、どのロック(ラッチ)が設定されているかを示す情報を含んでいる。
【0034】
エントリ制限情報33は、Fat−Btree構造において、ノードに登録される子ノードの数の最大値や、葉ノードとして登録できるデータ(データページ)の数の最大値を示している。このエントリ制限情報33は、後記する制御部4によって参照され、データの更新に伴う木構造の変化(SMO)が発生するか否かを判定するために用いられる。
【0035】
制御部4は、ディレクトリ分散型記憶装置1全体の動作を制御するものであって、一般的なコンピュータにおけるCPU(Central Processing Unit:中央処理装置)に相当するものである。ここでは、制御部4は、データ操作手段5と、データ管理手段6と、制御情報送受信手段7とを備えている。
【0036】
データ操作手段5は、通信制御部2を介して、データの送受信操作を行うものである。ここでは、データ操作手段5は、データ送受信手段51と、データ参照手段52と、データ更新手段53とを備えている。
【0037】
データ送受信手段51は、データ管理手段6のデータ操作制御手段61から制御情報として通知されるデータの送信元(例えば、クライアントコンピュータ等)から、通信制御部2を介してデータを受信したり、データ操作制御手段61から制御情報として通知されるデータの送信先(例えば、クライアントコンピュータ等)に、通信制御部2を介してデータを送信したりするものである。
このデータ送受信手段51は、データ参照手段52から出力されるデータを、通信制御部2を介して送信し、通信制御部2を介して受信したデータをデータ更新手段53に出力する。
【0038】
データ参照手段52は、記憶部3に記憶されているデータ31を読み出すものである。このデータ参照手段52は、データ管理手段6のデータ操作制御手段61から通知される制御情報(記憶元のアドレス等)に基づいて、データ31を記憶部3から読み出す。このデータ参照手段52で読み出されたデータ31は、データ送受信手段51に出力される。
【0039】
データ更新手段53は、データ送受信手段51で受信したデータを、記憶部3に書き込むものである。このデータ更新手段53は、データ管理手段6のデータ操作制御手段61から通知される制御情報(記憶先のアドレス等)に基づいて、データを記憶部3に書き込む。なお、データ更新手段53は、データ操作制御手段61から通知される制御情報(記憶先のアドレス等)に基づいて、指示されたデータ31を記憶部3から削除する動作も行うものとする。
【0040】
データ管理手段6は、記憶部3に記憶されているノード情報32とエントリ制限情報33とに基づいて、記憶部3に記憶されるデータ31を階層構造で管理するものである。また、このデータ管理手段6は、Fat−Btree構造(図13参照)のディレクトリ構造によりデータ31を管理するものとする。ここでは、データ管理手段6は、データ操作制御手段61と、データ参照制御手段62と、データ更新制御手段63とを備えている。
【0041】
データ操作制御手段61は、図示していないクライアントコンピュータ等から送信される制御情報を、後記する制御情報送受信手段7を介して受信することで、その制御情報で示されるデータの操作を行うものでもある。
ここで、制御情報とは、データを制御する情報である。例えば、データを記憶する旨を示すデータ記憶指示、データを送信する旨を示すデータ送信指示、データを削除する旨を示すデータ削除指示等、あるいはこれらの指示に対する応答等である。
【0042】
例えば、制御情報が、データを記憶する旨を示すデータ記憶指示である場合、データ操作制御手段61は、その旨をデータ更新手段53に通知する。また、制御情報が、データを送信する旨を示すデータ送信指示である場合、データ操作制御手段61は、その旨をデータ参照手段52に通知する。また、制御情報が、データを削除する旨を示すデータ削除指示である場合、データ操作制御手段61は、その旨をデータ更新手段53に通知する。また、データ操作制御手段61は、これらの操作指示(データ記憶指示、データ送信指示、データ削除指示)の操作結果を制御情報送受信手段7に対して応答として出力する。
【0043】
なお、データ操作制御手段61は、データ操作が、データの参照を行うものである場合は、その旨を後記するデータ参照制御手段62に通知し、他のプロセスに対する排他制御を行うものとする。また、データ操作制御手段61は、データ操作が、データの更新を行うものである場合は、その旨を後記するデータ更新制御手段63に通知し、他のプロセスに対する排他制御や、木構造の変更(SMO)を行う。
【0044】
データ参照制御手段62は、データの読み出し等である参照系の操作において、他のプロセスに対する排他制御を行うものである。例えば、データ参照制御手段62は、ルートノードにISラッチ(表1参照)を設定し、親ノードに設定されている子ノードのポインタを取得し、子ノードにラッチ(ISラッチ)を設定し、親ノードのラッチを解放する動作をデータ(葉ノード)31まで繰り返す。そして、データ(葉ノード)31にSラッチを(表1参照)設定することで、データ(葉ノード)31の参照(読み出し)を可能にする。
【0045】
データ更新制御手段63は、データの追加、更新等の更新系の操作において、他のプロセスに対する排他制御や、木構造の変更(SMO)を行うものである。ここでは、データ更新制御手段63は、第1フェーズ実行手段631と、第2フェーズ実行手段632とを備えている。
【0046】
第1フェーズ実行手段631は、第1フェーズとして、エントリ数が予め定めた制限未満である最も下位のノード(第1の非フルエントリノード)を探索するとともに、データ(葉ノード)31の更新を行うものである。ここでは、第1フェーズ実行手段631は、第1非フルエントリノード探索手段631aと、葉ノードラッチ設定手段631bと、ノード更新手段631cとを備えている。
【0047】
第1非フルエントリノード探索手段631aは、ルートノードから更新対象となるデータ(葉ノード)31までの経路において、Xラッチ(排他ラッチ:表1参照)を設定する旨を示すIXラッチ(インテント排他ラッチ:表1参照)を下位層に対して設定し、その上位層に対するIXラッチの設定を解放する手順を下位層に向かって繰り返すラッチカップリングを行いながら、エントリ数が予め定めた制限未満である最も下位のノード(第1の非フルエントリノード)を探索するものである。ここでは、第1非フルエントリノード探索手段631aは、SMOが発生しない最下層のノードをルートノードから順次探索し、そのノードのルートノードからの木の高さを保持しておく。
【0048】
葉ノードラッチ設定手段631bは、更新対象となるデータ(葉ノード)31に対してXラッチを設定するものである。これによって、他のプロセスに対して、更新対象となるデータ(葉ノード)31の読み取り、変更を禁止することができる。
【0049】
ノード更新手段631cは、葉ノードラッチ設定手段631bによってXラッチが設定された、更新対象となるデータ(葉ノード)31を更新するものである。なお、ノード更新手段631cは、記憶部3のノード情報32とエントリ制限情報33とを参照し、データ31を追加、更新する際に、エントリ数が超過する場合に、データ(葉ノード)31の分割や、その親ノードの分割といった木構造に変化を及ぼす操作(SMO)が発生する場合は、データ(葉ノード)31を更新せず、データ31に対するXラッチを解放する。そして、第2フェーズ実行手段632に、第1非フルエントリノード探索手段631aで探索された第1の非フルエントリノードの位置(その親ノードのルートノードからの木の高さ)を通知する。
このように、第1フェーズ実行手段631は、SMOが発生しない場合は、第1フェーズ実行手段631でデータ(葉ノード)31の更新を完了するが、SMOが発生する場合は、第2フェーズ実行手段632に処理を移行する。
【0050】
第2フェーズ実行手段632は、第2フェーズとして、第1フェーズ実行手段631で探索された第1の非フルエントリノードより上位のノードで、エントリ数が予め定めた制限未満である最も下位のノード(第2の非フルエントリノード)を探索するとともに、データ(葉ノード)31の更新を行うものである。ここでは、第2フェーズ実行手段632は、第2非フルエントリノード探索手段632aと、子ノードラッチ設定手段632bと、ラッチ有効判定手段632cと、ノード更新手段632dと、ノード再設定手段632eとを備えている。
【0051】
第2非フルエントリノード探索手段632aは、ルートノードから、第1の非フルエントリノードの親ノードまでの経路において、IXラッチカップリングを行いながら、エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索するものである。
【0052】
子ノードラッチ設定手段(排他ロック設定手段)632bは、第2非フルエントリノード探索手段632aで探索された第2の非フルエントリノードより下位層の子ノード(葉ノードを含む)に対して、Xラッチを設定するものである。
【0053】
ラッチ有効判定手段(排他ロック有効判定手段)632cは、子ノードラッチ設定手段632bで設定したXラッチが、データ(葉ノード)31の更新に伴う木構造の変化(SMO)に関連するノードに対して設定されているかどうかを判定するものである。すなわち、このラッチ有効判定手段632cは、ノードの分割が発生するすべてのノードにXラッチが設定されており、かつ、その親ノードにXラッチが設定されているかどうかを判定する。このように、ノードの分割が発生するすべてのノードと、その親ノードにXラッチが設定されていれば、他のプロセスからの影響を受けることなく、木構造の変更が可能になる。
【0054】
ノード更新手段632dは、ラッチ有効判定手段632cで木構造の変化に関連するノードに対してXラッチが設定されていると判定された場合に、データ(葉ノード)31の更新を行うものである。すなわち、このノード更新手段632dは、データ(葉ノード)31の更新を行う際に、データ31の分割を行う。また、その親ノード(インデックスノード)で分割が必要な場合は、順次上位の親ノードに遡って分割を行う。これによって、データ(葉ノード)31に対するアクセスの均等化が図られることになる。
【0055】
ノード再設定手段632eは、ラッチ有効判定手段632cで木構造の変化に関連するノードに対してXラッチが設定されていないと判定された場合に、第2の非フルエントリノードを第1の非フルエントリノードとして再設定するものである。すなわち、第2の非フルエントリノードのルートノードからの木の高さを保持し直す。なお、このとき、ノード再設定手段632eは、すべてのXラッチを解放する。
そして、ノード再設定手段632eは、第2非フルエントリノード探索手段632aに制御を移行させる。
【0056】
このように、データ更新制御手段63を構成することで、データ更新制御手段63は、データ(葉ノード)31の更新を、以下の〔第1フェーズ〕、〔第2フェーズ〕の2つのフェーズで行うことになる。
【0057】
〔第1フェーズ〕ルートノードから葉ノードまで、IXラッチカップリングによりIXラッチを設定し、最下層の葉ノードにXラッチを設定する。また、フルエントリでないインデックスノード(第1の非フルエントリノード)が存在したら、そのノードの位置(ルートノードからの高さ)を保持(マーク)する。マークするノードの位置は、非フルエントリノードが存在する度に逐次更新される。もし、SMOが発生しない場合は、葉ノードを更新して終了する。もし、SMOが発生する場合は、葉ノードのXラッチを解放し、第2フェーズに移行する。
【0058】
〔第2フェーズ〕ルートノードから、第1フェーズでマークした第1の非フルエントリノードの親ノードまで、順次IXラッチカップリングによりIXラッチを設定し、第1の非フルエントリノード以下のノードにXラッチを設定する。もし、設定したXラッチの範囲が、SMOを行うために十分な範囲に設定されていなければ、マークの位置によるXラッチの範囲を変化させ、SMOを行うために十分な範囲となった段階で、葉ノードを更新して終了する。
なお、本方式は、第1フェーズにおいて、フルエントリでないインデックスノード(第1の非フルエントリノード)の位置(ルートノードからの高さ)を保持(マーク)しておくため、MARK−OPT(MARKing OPTimistic)方式と呼ぶこととする。
【0059】
制御情報送受信手段7は、通信制御部2を介して、図示していないクライアントコンピュータ等と制御情報の送受信を行うものである。ここでは、制御情報送受信手段7は、クライアントコンピュータ等から受信した制御情報をデータ操作制御手段61に出力し、データ操作制御手段61から出力された制御信号をクライアントコンピュータ等に送信する。
【0060】
以上、説明したように、ディレクトリ分散型記憶装置1を構成することで、第2フェーズでは、第1フェーズでマークした第1の非フルエントリノードの親ノードまでIXラッチカップリングを行い、第1の非フルエントリノード以下のノードにXラッチを設定するため、Xラッチの範囲を葉ノードから順次拡げていく従来のINC−OPT方式に比べて、リスタートを行う回数を減らすことができる。
また、ここでは、ディレクトリ(ノード情報)とデータ(葉ノード)とを複数のディレクトリ分散型記憶装置で分散して記憶する形態としたが、本発明は、この形態に限定されるものではない。例えば、1つの記憶装置(木構造型データ記憶装置)のみに、すべてのノード情報と葉ノードとを記憶し、各ノードのエントリ数を制限したディレクトリ構造を形成している場合であっても、本発明に係るディレクトリ更新を行うことは可能である。この場合であっても、INC−OPT方式に比べて、リスタートを行う回数を減らすことができ、SMOに要するXラッチの獲得時間を短くすることができる。ただし、システム全体のスループットを向上させるには、複数の木構造型データ記憶装置(ディレクトリ分散型記憶装置)で、ディレクトリ(ノード情報)とデータ(葉ノード)とを分散するほうが望ましいと言える。
なお、ディレクトリ分散型記憶装置1の制御部4は、一般的なコンピュータにプログラムを実行させ、コンピュータ内の演算装置や記憶装置を動作させることにより実現することができる。ここで実現されるディレクトリの更新を行うディレクトリ更新プログラムは、通信回線を介して配布することも可能であるし、CD−ROM等の記録媒体に書き込んで配布することも可能である。
【0061】
[ディレクトリ分散型記憶装置の動作]
次に、図2及び図3を参照(適宜図1参照)して、ディレクトリ分散型記憶装置の動作について説明する。なお、ここでは、ディレクトリ分散型記憶装置1のデータ更新制御手段63において行われる、本発明に係るディレクトリ更新方法(MARK−OPT方式)について、詳細に説明を行うことにする。図2は、MARK−OPT方式の第1フェーズの動作を示すフローチャートである。図3は、MARK−OPT方式の第2フェーズの動作を示すフローチャートである。
【0062】
《MARK−OPT方式》
(第1フェーズ;第1フェーズ実行ステップ)
ディレクトリ分散型記憶装置1は、第1フェーズ実行手段631において、以下の手順で第1フェーズの動作(図2参照)を実行する。
まず、ディレクトリ分散型記憶装置1は、第1非フルエントリノード探索手段631aによって、初期値として、エントリ数が制限を超過していないノードの階層番号を示す変数〔マーク用階層番号(n)〕に、木構造の木の高さを示すツリー高“H”を設定する(ステップS1)。さらに、ディレクトリ分散型記憶装置1は、初期値として、親ノードを識別するための変数(Parent)に“null”、子ノードを識別するための変数(Child)にルートノードを示す識別子“ROOT”を設定し、ループに使用するインデックス用階層番号(h)と非フルエントリノードの位置を示すマーク値(m)とにそれぞれ“1”を設定する(ステップS2)。
【0063】
そして、ディレクトリ分散型記憶装置1は、インデックス用階層番号(h)が、マーク用階層番号(n)に達していないかどうかを判定し(ステップS3)、達した場合(ステップS3でNo)、ステップS8に進む。
一方、インデックス用階層番号(h)が、マーク用階層番号(n)に達していない場合(ステップS3でYes)、ディレクトリ分散型記憶装置1は、第1非フルエントリノード探索手段631aによって、子ノード(Child)にIXラッチを設定し、親ノード(Parent)に設定されているラッチを解放する(ステップS4)。ただし、最初は親ノード(Parent)には、IXラッチが設定されていないため、ステップS4のラッチの解放は、ラッチが設定されている場合にのみなされる。
続けて、ディレクトリ分散型記憶装置1は、第1非フルエントリノード探索手段631aによって、記憶部3のノード情報32及びエントリ制限情報33を参照することで、子ノード(Child)のエントリ数が最大(フルエントリ)となっているかどうかを判定する(ステップS5)。ここで、子ノード(Child)がフルエントリの場合(ステップS5でYes)、ステップS7に進む。
【0064】
一方、子ノード(Child)がフルエントリでない場合(ステップS5でNo)、マーク値(m)に現在の階層番号であるインデックス用階層番号(h)を設定し、非フルエントリノードの位置を保持(マーク)しておく(ステップS6)。
そして、ディレクトリ分散型記憶装置1は、現在の子ノード直下のノードを新しい子ノード(新子ノード)として決定し、親ノード(Parent)に子ノード(Child)、子ノード(Child)に新子ノード(NewChild)を設定し直す。さらに、インデックス用階層番号(h)に“1”を加算することで、1つ下の階層に制御対象を移動する(ステップS7)。そして、ステップS3に戻る。
【0065】
このステップS3からステップS7までのループによって、ルートノードから、葉ノードの親ノードに対してIXラッチカップリングが行われることになる。
そして、ディレクトリ分散型記憶装置1は、葉ノードラッチ設定手段631bによって、子ノード(この段階では葉ノード)に対してXラッチを設定し、その親ノードのラッチを解放する(ステップS8)。
【0066】
ここで、ディレクトリ分散型記憶装置1は、ノード更新手段631cによって、記憶部3のノード情報32及びエントリ制限情報33を参照することで、子ノード(葉ノード)のエントリ数が最大(フルエントリ)となっているかどうかを判定する(ステップS9)。ここで、葉ノードがフルエントリでない場合(ステップS9でNo)、ノード更新手段631cが葉ノードの更新操作を実行し(ステップS10)、すべてのラッチを解放し(ステップS11)、動作を終了する。
一方、葉ノードがフルエントリの場合(ステップS9でYes)、ディレクトリ分散型記憶装置1は、すべてのラッチを解放し(ステップS12)、マーク用階層番号(n)に、マーク値(m)を設定し(ステップS13)、第2フェーズに移行する。
【0067】
(第2フェーズ;第2フェーズ実行ステップ)
次に、ディレクトリ分散型記憶装置1は、第2フェーズ実行手段632において、以下の手順で第2フェーズの動作(図3参照)を実行する。
まず、ディレクトリ分散型記憶装置1は、第2非フルエントリノード探索手段632aによって、ルートノードからマーク用階層番号(n)で示される非フルエントリノードの親ノードまで、IXラッチカップリングを行う(ステップS20〜ステップS25)。なお、このステップS20〜ステップS25までの動作は、図2で説明したステップS2〜ステップS7までの動作と同一であるため説明を省略する。
【0068】
そして、ディレクトリ分散型記憶装置1は、ステップS25(ステップS7)まででIXラッチカップリングされたノードの子ノード、すなわち、マーク用階層番号(n)で示される非フルエントリノードと、そのコピー(複製)にXラッチを設定し、親ノードのIXラッチを解放する(ステップS26)。ここで、コピー(複製)とは、図13で説明した計算機PE間で、同一のインデックスノードNiをコピーしてそれぞれのPEで保有している場合、そのPE毎のインデックスノードNiを指す。
さらに、ディレクトリ分散型記憶装置1は、現在の子ノード直下のノードを新しい子ノード(新子ノード)として決定し、親ノード(Parent)に子ノード(Child)、子ノード(Child)に新子ノード(NewChild)を設定し直す。さらに、インデックス用階層番号(h)に“1”を加算することで、1つ下の階層に制御対象を移動する(ステップS27)。
【0069】
そして、ディレクトリ分散型記憶装置1は、インデックス用階層番号(h)が、ツリー高“H”に達していないかどうかを判定し(ステップS28)、達した場合(ステップS28でNo)は、ステップS31に進む。
一方、インデックス用階層番号(h)が、ツリー高“H”を超えていない場合(ステップS28でYes)、ディレクトリ分散型記憶装置1は、子ノードラッチ設定手段632bによって、子ノードとそのコピー(複製)にXラッチを設定する(ステップS29;排他ロック設定ステップ)。
続けて、ディレクトリ分散型記憶装置1は、子ノードラッチ設定手段632bによって、現在の子ノード直下のノードを新しい子ノード(新子ノード)として決定し、親ノード(Parent)に子ノード(Child)、子ノード(Child)に新子ノード(NewChild)を設定し直す。さらに、インデックス用階層番号(h)に“1”を加算することで、1つ下の階層に制御対象を移動する(ステップS30)。そして、ステップS28に戻る。
このステップS28からステップS30までのループによって、ステップS27で設定された子ノード以下のノードにXラッチが設定されることになる。
【0070】
そして、ディレクトリ分散型記憶装置1は、ラッチ有効判定手段632cによって、Xラッチが、データ(葉ノード)31の更新に伴う木構造の変化(SMO)に関連するノードに対してなされているかどうかを判定する(ステップS31;排他ロック有効判定ステップ)。ここで、XラッチがSMOを行うためには不十分である場合(ステップS31でNo)、すべてのラッチを解放し(ステップS32)、マーク用階層番号(n)に、マーク値(m)を設定し(ステップS33;ノード再設定ステップ)、ステップS20に戻る(リスタートする)。すなわち、Xラッチの範囲を拡げる動作を実行する。
一方、XラッチがSMOを行うために十分な設定がなされている場合(ステップS31でYes)、ノード更新手段632dが葉ノード及びそれに関連するノードの更新操作(SMO)を実行し(ステップS34;ノード更新ステップ)、すべてのラッチを解放し(ステップS35)、動作を終了する。
【0071】
以上のMARK−OPT方式による第1フェーズ(図2参照)及び第2フェーズ(図3参照)の動作によって、ディレクトリ分散型記憶装置1は、第1フェーズによってマークされたノードによって、Xラッチの設定範囲を定めることができ、葉ノードから順次Xラッチの範囲を拡大していくINC−OPT方式に比べ、第2フェーズを再実行するリスタートの回数を減らすことができる。
なお、ディレクトリ更新方法は、第1フェーズ及び第2フェーズで説明した各ステップにより、ディレクトリを更新する方法であって、ディレクトリ更新プログラムは、この第1フェーズ及び第2フェーズで説明した各ステップをコンピュータに実行させるためのプログラムである。
【0072】
以上、本発明に係るディレクトリ分散型記憶装置1の動作として、MARK−OPT方式の動作について説明したが、本発明はこれに限定されるものではない。例えば、このMARK−OPT方式は、他のプロセスの動作によって、途中で木構造に変化があった場合でも処理に変更はないが、その木構造の変化によって処理を変えることとしてもよい。以下、MARK−OPT方式を拡張したINC−MARK−OPT方式、2P−INT−MARK−OPT方式及び2P−REP−MARK−OPT方式について説明を行う。
【0073】
《INC−MARK−OPT方式》
まず、図4を参照して、INC−MARK−OPT(INCremental MARKing OPTimistic)方式について説明する。図4は、INC−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。なお、INC−MARK−OPT方式の第1フェーズは、図2で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0074】
このINC−MARK−OPT方式は、第2フェーズにおいて、木の構造が変化したと判断された場合にリスタートを行う方式である。
図4に示すように、INC−MARK−OPT方式は、MARK−OPT方式の第2フェーズにおけるステップS26とステップS27の間に、ステップS261a〜ステップS261cを追加している。他のステップについては、図3で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0075】
すなわち、INC−MARK−OPT方式は、ステップS26で親ノードのIXラッチを解放した段階で、記憶部3のノード情報32及びエントリ制限情報33を参照することで、子ノード(Child)のエントリ数が最大(フルエントリ)となっているかどうかを判定する(ステップS261a)。ここで、子ノード(Child)がフルエントリの場合(ステップS261aでYes)、すべてのラッチを解放し(ステップS261b)、マーク用階層番号(n)に、マーク値(m)を設定し(ステップS261c)、ステップS20に戻る(リスタートする)。一方、子ノード(Child)がフルエントリでない場合(ステップS261aでNo)は、MARK−OPT方式と同様にステップS27以降の動作を実行する。
【0076】
このように、INC−MARK−OPT方式は、木の構造が変化したと判断された段階で直ちにリスタートを行うため、SMOの範囲が拡大している場合には、MARK−OPT方式より不必要なXラッチを減らすことができる。
【0077】
《2P−INT−MARK−OPT方式》
次に、図5を参照して、2P−INT−MARK−OPT(2-Phase INTegrated MARKing OPTimistic)方式について説明する。図5は、2P−INT−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。なお、2P−INT−MARK−OPT方式の第1フェーズは、図2で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0078】
この2P−INT−MARK−OPT方式は、第2フェーズにおいて、木の構造が変化したと判断された場合に、そのノード以下のノードに対してIXラッチカップリングを行う方式である。
図5に示すように、2P−INT−MARK−OPT方式は、MARK−OPT方式の第2フェーズにおけるステップS26とステップS27の間に、ステップS261a及びステップS261dを追加している。他のステップについては、図3で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0079】
すなわち、2P−INT−MARK−OPT方式は、ステップS26で親ノードのIXラッチを解放した段階で、記憶部3のノード情報32及びエントリ制限情報33を参照することで、子ノード(Child)のエントリ数が最大(フルエントリ)となっているかどうかを判定する(ステップS261a)。ここで、子ノード(Child)がフルエントリの場合(ステップS261aでYes)、マーク用階層番号(n)に、現在の階層番号であるインデックス用階層番号(h)を設定し(ステップS261d)、第1フェーズ(図2)のステップS7に戻る。一方、子ノード(Child)がフルエントリでない場合(ステップS261aでNo)は、MARK−OPT方式と同様にステップS27以降の動作を実行する。
【0080】
このように、2P−INT−MARK−OPT方式は、木の構造が変化したと判断されてもリスタートを行わず、第1フェーズに切り替えて処理を行う。これによって、2P−INT−MARK−OPT方式は、INC−MARK−OPT方式よりもリスタート回数を少なくし、MARK−OPT方式より不必要なXラッチを減らすことができる。
【0081】
《2P−REP−MARK−OPT方式》
次に、図6を参照して、2P−REP−MARK−OPT(2-Phase REPetitive MARKing OPTimistic)方式について説明する。図6は、2P−REP−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。なお、2P−REP−MARK−OPT方式の第1フェーズは、図2で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0082】
この2P−REP−MARK−OPT方式は、第2フェーズにおいて、木の構造が変化したと判断された場合に、リスタートを行う方式である。なお、INC−MARK−OPT方式との違いは、リスタート後は第1フェーズに戻って処理を行うことである。
図6に示すように、2P−REP−MARK−OPT方式は、MARK−OPT方式の第2フェーズにおけるステップS26とステップS27の間に、ステップS261a及びステップS261bを追加している。他のステップについては、図3で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0083】
すなわち、2P−REP−MARK−OPT方式は、ステップS26で親ノードのIXラッチを解放した段階で、記憶部3のノード情報32及びエントリ制限情報33を参照することで、子ノード(Child)のエントリ数が最大(フルエントリ)となっているかどうかを判定する(ステップS261a)。ここで、子ノード(Child)がフルエントリの場合(ステップS261aでYes)、すべてのラッチを解放し(ステップS261b)、第1フェーズ(図2)のステップS1に戻る。一方、子ノード(Child)がフルエントリでない場合(ステップS261aでNo)は、MARK−OPT方式と同様にステップS27以降の動作を実行する。
【0084】
このように、2P−REP−MARK−OPT方式は、木の構造が変化したと判断された段階で直ちにリスタートし、第1フェーズに戻って処理を行うため、リスタート回数は、MARK−OPT方式に比べて多くなるが、不必要なXラッチの設定を最も少なくすることができる。
【0085】
[ディレクトリ更新動作の具体例]
次に、ディレクトリ分散型記憶装置1(図1参照)におけるディレクトリ更新の動作について、具体例を示して説明する。ここでは、一例として、図7に示すようなディレクトリ更新が行われる例について説明する。図7(a)は、ディレクトリ更新前のディレクトリ構造を示し、図7(b)は、データ追加に伴うディレクト更新後のディレクト構造を示している。
【0086】
図7(a)に示すように、ディレクトリ更新前は、D1−D2−D3−D4−D5−D6の各ノードの階層によって、データ31として葉ノードD6が記憶部3に記憶されている。なお、ここでは、インデックスノード及び葉ノードのエントリ数の最大値(制限値)を“3”とする。すなわち、インデックスノードD2、D5は、子ノードがフルエントリ状態であるフルエントリインデックスノードとなっており、葉ノードD6は、データがフルエントリ状態であるフルエントリ葉ノードとなっているものとする。
【0087】
この図7(a)の状態において、葉ノードD6にデータを追加すると、図7(b)に示すように、葉ノードD6は葉ノードD61、D62に分割され、その親ノードであるインデックスノードD5は、エントリ数の最大数を超過するため、インデックスノードD51、D52に分割されることになる。
この例に基づいて、前記したMARK−OPT方式、INC−MARK−OPT方式、2P−INT−MARK−OPT方式及び2P−REP−MARK−OPT方式の各方式の動作について具体的に説明する。
【0088】
《MARK−OPT方式》
まず、図8及び図9を参照して、MARK−OPT方式の動作を具体的に説明する。図8及び図9は、MARK−OPT方式のラッチ状態を模式的に示す模式図である。なお、図中変数「n」、「h」及び「m」は、図2及び図3のフローチャートに用いたマーク用階層番号、インデックス用階層番号及びマーク値をそれぞれ示している。
【0089】
図8(a)に示すように、MARK−OPT方式は、第1フェーズで、IXラッチカップリングによって、状態P1から状態P9として、ルートノードD1から葉ノードD6の親ノード(インデックスノードD5)まで、順次IXラッチを設定する。また、IXラッチ設定中に、フルエントリとなっていないインデックスノードを探索し、マーク値(m)にその状態におけるマーク用階層番号(h)の値を設定する。ここでは、状態P1において、マーク値(m)に“1”を設定し、状態P5において、マーク値(m)に“3”を設定し、状態P7において、マーク値(m)に“4”を設定する。そして、状態P10に示すように、葉ノードD6にXラッチを設定し、状態P11に示すように親ノードのIXラッチを解放する。この状態では、葉ノードD6を更新するためのXラッチが不十分(インデックスノードD4及びD5にXラッチの設定が必要)であるため、状態P12に示すように葉ノードD6のXラッチを解放し第2フェーズの動作(リスタート)を行う。
【0090】
続けて、図8(b)に示すように、MARK−OPT方式は、第2フェーズで、IXラッチカップリングによって、状態P13から状態P17として、ルートノードD1から、第1フェーズでマークしたマーク値(m:ここでは“4”)のノードの親ノード(インデックスノードD3)まで、順次IXラッチを設定する。そして、親ノード(インデックスノードD3)以下の子ノードにXラッチを設定する。そして、状態P20に示すように、インデックスノードD4〜D6にXラッチを設定した段階で、葉ノードD6の更新を行う。そして、葉ノードD6の更新(及びインデックスノードD5の分割)後、全ラッチを解放し動作を終了する。
なお、この図8(b)は、処理中に上位ノードで更新操作(SMO)が発生しなかった場合の動作を示している。この処理中に上位ノードで更新操作(SMO)が発生した場合の動作については、図9を参照して説明を行う。
【0091】
図9(a)は、上位ノードで更新操作(SMO)が発生した場合におけるリスタートの1回目の動作を示し、図9(b)は、リスタートの2回目の動作を示している。なお、図9では、他のプロセスの動作によりSMOが発生し、インデックスノードD4がフルエントリインデックスノードになった例を示している。
【0092】
図9(a)に示すように、MARK−OPT方式は、第2フェーズのリスタート1回目で、IXラッチカップリングによって、状態P21から状態P25として、ルートノードD1から、第1フェーズでマークしたマーク値(m:ここでは“4”)のノードの親ノード(インデックスノードD3)まで、順次IXラッチを設定する。また、IXラッチ設定中に、フルエントリとなっていないインデックスノードを探索し、マーク値(m)にその状態におけるマーク用階層番号(h)の値を設定する。ここでは、状態P21において、マーク値(m)に“1”を設定し、状態P25において、マーク値(m)に“3”を設定する。
そして、親ノード(インデックスノードD3)以下の子ノードにXラッチを設定する。この状態では、葉ノードD6を更新するためのXラッチが不十分(インデックスノードD3〜D5にXラッチの設定が必要)であるため、状態P29に示すようにすべてのラッチを解放し、第2フェーズの動作(リスタート2回目)を行う。
【0093】
続けて、図9(b)に示しように、MARK−OPT方式は、第2フェーズのリスタート2回目で、IXラッチカップリングによって、状態P30から状態P32として、ルートノードD1から、第2フェーズのリスタート1回目でマークしたマーク値(m:ここでは“3”)のノードの親ノード(インデックスノードD2)まで、順次IXラッチを設定する。そして、親ノード(インデックスノードD2)以下の子ノードにXラッチを設定する。そして、状態P37に示すように、インデックスノードD3〜D6にXラッチを設定した段階で、葉ノードD6の更新を行う。そして、葉ノードD6の更新(及びインデックスノードD4及びD5の分割)後、全ラッチを解放し動作を終了する。
【0094】
《INC−MARK−OPT方式》
次に、図10を参照して、INC−MARK−OPT方式の動作を具体的に説明する。図10は、INC−MARK−OPT方式のラッチ状態を模式的に示す模式図である。なお、INC−MARK−OPT方式の第1フェーズ及びSMOが発生しなかった場合の第2フェーズの動作は、図8で説明したMARK−OPT方式の動作と同じであるため説明を省略する。
ここでは、図10(a)に示すように、他のプロセスの動作によりSMOが発生し、インデックスノードD4がフルエントリインデックスノードになった例を示している。
【0095】
ここで、INC−MARK−OPT方式は、第2フェーズのリスタート1回目で、IXラッチカップリングによって、状態P41から状態P45として、ルートノードD1から、第1フェーズでマークしたマーク値(m:ここでは“4”)のノードの親ノード(インデックスノードD3)まで、順次IXラッチを設定する。また、IXラッチ設定中に、フルエントリとなっていないインデックスノードを探索し、マーク値(m)にその状態におけるマーク用階層番号(h)の値を設定する。ここでは、状態P41において、マーク値(m)に“1”を設定し、状態P45において、マーク値(m)に“3”を設定する。
【0096】
そして、INC−MARK−OPT方式は、子ノード(インデックスノードD4)にXラッチを設定し、親ノード(インデックスノードD3)のIXラッチを解放した状態P47において、すでに葉ノードD6を更新するためのXラッチが不十分(インデックスノードD3〜D5にXラッチの設定が必要)であると判断する。そこで、状態P48に示すようにすべてのラッチを解放し、第2フェーズの動作(リスタート2回目)を行う。
なお、第2フェーズのリスタート2回目の動作は、図9(b)の動作と同じになるため説明を省略する。
【0097】
《2P−INT−MARK−OPT方式》
次に、図11を参照して、2P−INT−MARK−OPT方式の動作を具体的に説明する。図11は、2P−INT−MARK−OPT方式のラッチ状態を模式的に示す模式図である。なお、2P−INT−MARK−OPT方式の第1フェーズ及びSMOが発生しなかった場合の第2フェーズの動作は、図8で説明したMARK−OPT方式の動作と同じであるため説明を省略する。
ここでも、図10(a)と同様に、他のプロセスの動作によりSMOが発生し、インデックスノードD4がフルエントリインデックスノードになったものとしている。
【0098】
ここで、2P−INT−MARK−OPT方式は、第2フェーズのリスタート1回目で、状態P61から状態P67に遷移する。なお、この状態P61〜状態P67は、図10(a)の状態P41〜状態P47と同じ状態である。
そして、2P−INT−MARK−OPT方式は、状態P67において、すでに葉ノードD6を更新するためのXラッチが不十分(インデックスノードD3〜D5にXラッチの設定が必要)であると判断し、第1フェーズの途中(ステップS7:図2参照)にフェーズを切り替えて動作を継続する。
【0099】
そして、2P−INT−MARK−OPT方式は、マーク用階層番号(h)に対応するインデックスノードより下位のインデックスノード(D5以下)に対してIXラッチカップリングを行う。そして、状態P71に示すように、葉ノードD6にXラッチを設定し、状態P72に示すように親ノードのIXラッチを解放する。この状態では、葉ノードD6を更新するためのXラッチが不十分(インデックスノードD3〜D5にXラッチの設定が必要)であるため、状態P73に示すように葉ノードD6のXラッチを解放し第2フェーズの動作(リスタート2回目)を行う。
なお、第2フェーズのリスタート2回目の動作は、図9(b)の動作と同じになるため説明を省略する。
【0100】
《2P−REP−MARK−OPT方式》
次に、図12を参照して、2P−REP−MARK−OPT方式の動作を具体的に説明する。図12は、2P−REP−MARK−OPT方式のラッチ状態を模式的に示す模式図である。なお、2P−REP−MARK−OPT方式の第1フェーズ及びSMOが発生しなかった場合の第2フェーズの動作は、図8で説明したMARK−OPT方式の動作と同じであるため説明を省略する。
ここでも、図10(a)と同様に、他のプロセスの動作によりSMOが発生し、インデックスノードD4がフルエントリインデックスノードになったものとしている。
【0101】
ここで、2P−REP−MARK−OPT方式は、第2フェーズのリスタート1回目で、状態P81から状態P88に遷移する。なお、この状態P81〜状態P88は、図10(a)の状態P41〜状態P48と同じ状態である。そして、2P−REP−MARK−OPT方式は、状態P88以降、第1フェーズに戻って動作を再開(リスタート2回目)する。
【0102】
そして、2P−REP−MARK−OPT方式は、図12(b)に示すように、第1フェーズを実行し、IXラッチカップリングによって、状態P89から状態P97に示すように、ルートノードD1から葉ノードD6の親ノード(インデックスノードD5)まで、順次IXラッチを設定する。また、IXラッチ設定中に、フルエントリとなっていないインデックスノードを探索し、マーク値(m)にその状態におけるマーク用階層番号(h)の値を設定する。ここでは、状態P89において、マーク値(m)に“1”を設定し、状態P93において、マーク値(m)に“3”を設定する。そして、状態P98に示すように、葉ノードD6にXラッチを設定し、状態P99に示すように親ノードのIXラッチを解放する。この状態では、葉ノードD6を更新するためのXラッチが不十分(インデックスノードD3〜D5にXラッチの設定が必要)であるため、状態P100に示すように葉ノードD6のXラッチを解放し第2フェーズの動作(リスタート3回目)を行う。
なお、第2フェーズのリスタート3回目の動作は、図9(b)の動作と同じになるため説明を省略する。
【0103】
以上説明したように、MARK−OPT方式、INC−MARK−OPT方式、2P−INT−MARK−OPT方式及び2P−REP−MARK−OPT方式は、第1フェーズによってマークされたノードによってXラッチの設定範囲を定めるため、葉ノードから順次Xラッチの範囲を拡大していくINC−OPT方式に比べ、リスタートの回数を減らすことができる。
【図面の簡単な説明】
【0104】
【図1】本発明に係るディレクトリ分散型記憶装置(木構造型データ記憶装置)の構成を示すブロック図である。
【図2】MARK−OPT方式の第1フェーズの動作を示すフローチャートである。
【図3】MARK−OPT方式の第2フェーズの動作を示すフローチャートである。
【図4】INC−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。
【図5】2P−INT−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。
【図6】2P−REP−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。
【図7】ディレクトリの更新例を示す図であって、(a)は更新前、(b)は更新後の状態を示す。
【図8】MARK−OPT方式のラッチ状態(第1フェーズ及び第2フェーズ)を模式的に示す模式図である。
【図9】MARK−OPT方式のラッチ状態(第2フェーズ:リスタート1回目及び2回目)を模式的に示す模式図である。
【図10】INC−MARK−OPT方式のラッチ状態(第2フェーズ)を模式的に示す模式図である。
【図11】2P−INT−MARK−OPT方式のラッチ状態(第2フェーズ)を模式的に示す模式図である。
【図12】2P−REP−MARK−OPT方式のラッチ状態(第2フェーズ)を模式的に示す模式図である。
【図13】従来の並列計算機におけるディレクトリ構造の一例であるFat−Btree構造を示す図である。
【符号の説明】
【0105】
1 ディレクトリ分散型記憶装置(木構造型データ記憶装置)
2 通信制御部
3 記憶部
4 制御部
5 データ操作手段
51 データ送受信手段
52 データ参照手段
53 データ更新手段
6 データ管理手段
61 データ操作制御手段
62 データ参照制御手段
63 データ更新制御手段
631 第1フェーズ実行手段
631a 第1非フルエントリノード探索手段
631b 葉ノードラッチ設定手段
631c ノード更新手段
632 第2フェーズ実行手段
632a 第2非フルエントリノード探索手段
632b 子ノードラッチ設定手段(排他ロック設定手段)
632c ラッチ有効判定手段(排他ロック有効判定手段)
632d ノード更新手段
632e ノード再設定手段
7 制御情報送受信手段
【技術分野】
【0001】
本発明は、木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴う際のディレクトリ更新を効率的に行うディレクトリ更新方法及びディレクトリ更新プログラム、並びに、木構造型データ記憶装置に関する。
【背景技術】
【0002】
近年、並列に配置された計算機(PE:Processing Element)上にデータベース等のデータを分散して記憶することで、データにアクセスする際の負荷分散と並行性動作とを実現したシステムが存在する。
このようなシステムにおいては、アクセス集中による負荷の偏りが存在する場合、その負荷の大きいPEがボトルネックとなり、システム全体の処理能力が低下してしまう。そこで、各PEに負荷を均等に分配するためのディレクトリ構造と、そのディレクトリ構造における並行性制御とが提案されている(例えば、非特許文献1参照)。
ここで、図13を参照して、従来の並列計算機におけるディレクトリ構造について、その概要を説明する。図13は、従来の並列計算機におけるディレクトリ構造の一例であるFat−Btree構造を示す図である。
【0003】
(Fat−Btree構造)
図13に示すように、Fat−Btree構造は、データを示す葉ノードNlを各計算機PEに均等に分配している。また、Fat−Btree構造は、葉ノードNl以外のインデックスを示すインデックスノードNiとして、各計算機PEに配置されている葉ノードNlへのアクセスパスとなるインデックスノードNiのみを各計算機PEに分配している。
なお、各インデックスノードNiに登録(エントリ)される下位層のインデックスノードの数と、葉ノードNlに登録されるデータ(データページ)の数とは、予め定められた数に制限されている。この制限された数を超過する場合は、各ノードは分割され、木構造が更新(SMO:Structure Modification Operation)されることになる。これによって、あるアクセスパスに対して負荷が集中することを回避している。
【0004】
このように、葉ノードNl及びインデックスノードNiを分配することで、各計算機PEの記憶部に記憶されるのは、全体の木構造に対して、ルートノードNiRから、均等に分配された葉ノードNlまでの部分木となる。すなわち、計算機PE1には部分木R1が、計算機PE2には部分木R2が、計算機PE3には部分木R3が、計算機PE4には部分木R4がそれぞれ記憶されることになる。
これによって、各計算機PEに対するアクセスの分散が行われる。また、各計算機PEでは、記憶している葉ノードNlの探索に必要のないインデックスノードNiを保持していないため、高速に葉ノードNlにアクセスすることができる。
【0005】
(並行性制御)
次に、従来の並列計算機における並行性制御について説明する。図13で説明したFat−Btree構造では、木構造の一貫性を保証するため、並行性制御が必須である。この並行性制御においては、アクセスパスに対して、他のプロセスからのアクセスを制御するロックが用いられる。このロックには、以下の表1に示す5種類(IS,IX,S,SIX,X)のモードがある。
【0006】
【表1】
【0007】
表1中、“○”印は、同時に複数のロックを設定できることを示している。
なお、以下では、IS、IX、S、SIX及びXの各モードのロックをそれぞれ、ISロック(インテント共有ロック)、IXロック(インテント排他ロック)、Sロック(共有ロック)、SIXロック(インテント排他付き共有ロック)及びXロック(排他ロック)と呼ぶ。
ここで、ISロック(インテント共有ロック)は、下位層の一部のリソースにSロックを設定し、そのリソースを読み取るプロセスの意思を示すものである。また、IXロック(インテント排他ロック)は、下位層の一部のリソースにXロックを設定し、そのリソースを変更するプロセスの意思を示すものである。また、Sロック(共有ロック)は、リソースを読み取り専用とする旨を示すものである。また、SIXロック(インテント排他付き共有ロック)は、リソースの同時読み取りを許可し、下位層のリソースにIXロックを設定し、プロセスがそのリソースを変更する意図を示すものである。さらに、Xロック(排他ロック)は、他のプロセスからの読み取り、変更を禁止する旨を示すものである。
【0008】
ただし、一般には、これらのロックには、デッドロック検出機能を持たない高速かつ単純なラッチが用いられる。このラッチは、セマフォの一種であって、以下、前記した各ロックをラッチにより実現した場合を、特に、ISラッチ(インテント共有ラッチ)、IXラッチ(インテント排他ラッチ)、Sラッチ(共有ラッチ)、SIXラッチ(インテント排他付き共有ラッチ)、及び、Xラッチ(排他ラッチ)と呼ぶ。
【0009】
次に、図13を参照して、前記した表1の5種類のロック(ラッチ)を用いた、並行性制御方式の一例であるINC−OPT(INCremental OPTimistic)方式について説明する。
(INC−OPT方式の参照時のプロトコル)
まず、INC−OPT方式におけるデータの参照時のプロトコルについて説明する。INC−OPT方式における、データである葉ノードNlの検索は、以下の〔R−1〕〜〔R−3〕の手順により行われる。
〔R−1〕ルートノードNiRにISラッチを設定する。
〔R−2〕上位層のノード(親ノード)に設定されて下位層のノード(子ノード)のポインタを取得し、子ノードにラッチ(ISラッチ)を設定し、親ノードのラッチを解放する動作を葉ノードNlまで繰り返す(以下、この動作をラッチカップリングという)。
〔R−3〕葉ノードNlにSラッチを設定する。
これによって、葉ノードNlを読み出す(参照する)ことが可能になる。
【0010】
(INC−OPT方式の更新時のプロトコル)
次に、INC−OPT方式におけるデータの更新時のプロトコルについて説明する。INC−OPT方式における、葉ノードNlの更新は、以下の〔W−1〕、〔W−2〕の2つのフェーズで行われる。
〔W−1(第1フェーズ)〕ルートノードNiRから葉ノードNlまで、IXラッチカップリングによりIXラッチを設定し、最下層の葉ノードNlにXラッチを設定する。ここで、葉ノードNlを更新する際に、予め定められたデータ(データページ)の数を超過することで、木構造に変化(SMO)が発生する場合は、葉ノードNlのXラッチを解放し、第2フェーズに移行する。なお、SMOが発生しない場合は、そのまま葉ノードNlを更新し動作を終了する。
〔W−2(第2フェーズ)〕葉ノードNlとその親ノードに対してXラッチを設定する。もし、葉ノードNlを分割することで、親ノードもエントリ数の制限を超過する場合は、さらに上位(親)のノードにXラッチの範囲を拡大していく。そして、親ノードの分割が必要でなくなった段階で、葉ノードNlの更新(SMOを含む)を行う。
以上の動作によって、INC−OPT方式は、Fat−Btree構造を維持したまま、データ(葉ノード)の参照、更新が可能になる。
【非特許文献1】宮崎純,横田治夫,「並列ディレクトリ構造Fat−Btreeの並行性制御とその評価」,情報処理学会研究会報告,データベースシステムDBS−124−69,pp.37−44,情報処理学会,Jul.2001
【発明の開示】
【発明が解決しようとする課題】
【0011】
しかし、前記したINC−OPT方式では、データの更新時のプロトコルにおいて、SMOが発生する場合、第2フェーズを処理するための動作(リスタート)を複数回行う必要がある。例えば、ルートノードまで更新が及ぶ場合、木構造の木の高さと同じフェーズ数分のリスタートが必要となり、あるプロセスからの更新命令に対する応答時間を増加させてしまうという問題がある。
さらに、上位層において、複数回Xラッチを設定することになり、他のプロセスからの読み取り、変更を禁止する期間が増大し、システム全体のスループットが低下してしまうという問題がある。
【0012】
本発明は、以上のような問題点に鑑みてなされたものであり、従来のINC−OPT方式に比べて、リスタート回数を少なく抑え、SMOに要するXラッチの獲得時間を短くするディレクトリ更新方法及びディレクトリ更新プログラム、並びに、木構造型データ記憶装置を提供することを目的とする。
【課題を解決するための手段】
【0013】
本発明は、前記目的を達成するために創案されたものであり、まず、請求項1に記載のディレクトリ更新方法は、木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴う際のディレクトリ更新方法であって、第1フェーズ実行ステップと、第2フェーズ実行ステップとを含む手順とした。
【0014】
この手順において、ディレクトリ更新方法は、第1フェーズ実行ステップとして、最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、エントリ数が予め定めた制限未満(非フルエントリ)である最も下位のノード(非フルエントリノード)を探索する。そして、ディレクトリ更新方法は、葉ノードに対して、他のプロセスからの読み取り、変更を禁止する排他ロックを設定し、葉ノードのエントリ数が予め定めた制限未満である場合には、その葉ノードを更新する。一方、ディレクトリ更新方法は、エントリ数が予め定めた制限を超過する場合には、葉ノードを更新(分割)することで、その親ノードのエントリ数に影響を及ぼすことになるため、ここでは一旦葉ノードの排他ロックを解放し、次の第2フェーズ実行ステップに移行する。
【0015】
そして、ディレクトリ更新方法は、第2フェーズ実行ステップとして、第1フェーズ実行ステップで探索された非フルエントリノード以下のノードに対してXロック(排他ロック)を設定する。そして、ディレクトリ更新方法は、葉ノードの更新に伴い分割対象となる親ノードにXロックが設定されている場合に、葉ノードを更新し、その葉ノードの更新により分割対象となる親ノードにXロックが設定されていない場合に、非フルエントリノードよりもさらに上位の非フルエントリノードを探索し、その探索された非フルエントリノードより下位のノードに排他ロックの範囲を拡大する。これによって、ディレクトリ更新方法は、動作をリスタートさせて第2フェーズ実行ステップに移行した場合に、非フルエントリノード以下のノードに対して一度にXロックを設定するため、葉ノードから順次上位のノードにXロックを設定する場合に比べ、第2フェーズ実行ステップをリスタートする回数を減らすことができる。
なお、ここで、排他ロックには、デッドロック検出機能を持たない高速かつ単純なラッチ(排他ラッチ)を用いることが望ましい。
【0016】
また、請求項2に記載のディレクトリ更新方法は、木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴う際のディレクトリ更新方法であって、最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行ステップと、前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行ステップとを含むこととした。
さらに、第2フェーズ実行ステップが、排他ロック設定ステップと、排他ロック有効判定ステップと、ノード更新ステップとをさらに含み、前記排他ロック有効判定ステップで木構造の変化に関連するノードに対して排他ロックが設定されていないと判定された場合に、前記第2フェーズ実行ステップを繰り返す手順とした。
【0017】
この手順によれば、ディレクトリ更新方法は、第1フェーズ実行ステップで、ルートノードから更新対象となる葉ノードまでの経路において、Xロック(排他ロック)を設定する旨を示すIXロック(インテント排他ロック)を下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索する。このように、IXロックを順次設定することで、他のプロセスが葉ノードに対してXロックを設定することを防止し、当該プロセスが確実に葉ノードに対してXロックを設定することが可能になる。
なお、ディレクトリ更新方法は、第1フェーズ実行ステップで、第1の非フルエントリノードを探索するとともに、葉ノードに対して排他ロックを設定し、葉ノードのエントリ数が予め定めた制限未満である場合に葉ノードの更新を行い、エントリ数が予め定めた制限を超過する場合に葉ノードの更新を行わずに排他ロックを解放する。これによって、葉ノードのエントリ数が予め定めた制限未満である場合には、第1フェーズ実行ステップで動作が終了することになる。
【0018】
そして、ディレクトリ更新方法は、第2フェーズ実行ステップで、ルートノードから第1の非フルエントリノードの親ノードまでの経路において、Xロック(排他ロック)を設定する旨を示すIXロック(インテント排他ロック)を下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する。
さらに、ディレクトリ更新方法は、第2フェーズ実行ステップにおいて、第2の非フルエントリノードの探索と並行し、排他ロック設定ステップで、第1の非フルエントリノードから葉ノードまでの経路において、各ノードにXロック(排他ロック)を設定する。そして、排他ロック有効判定ステップで、排他ロック設定ステップで設定したXロックが、葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する。すなわち、葉ノードを分割することで影響を受ける親ノードに対してXロックが設定されているかどうかを判定する。
【0019】
そして、木構造の更新に関連するノードに対してXロックが設定されていると判定された場合、ディレクトリ更新方法は、ノード更新ステップで葉ノードの更新を行う。一方、木構造の変化に関連するノードに対してXロックが設定されていないと判定された場合、ディレクトリ更新方法は、第2の非フルエントリノードを第1の非フルエントリノードとして、第2フェーズ実行ステップを繰り返す。
これによって、ディレクトリ更新方法は、動作をリスタートさせて第2フェーズ実行ステップに移行した場合に、非フルエントリノードより下位のノードに対して一度にXロックを設定するため、葉ノードから順次上位のノードにXロックを設定する場合に比べ、第2フェーズ実行ステップをリスタートする回数を減らすことができる。
なお、ここで、排他ロック及びインテント排他ロックには、デッドロック検出機能を持たない高速かつ単純なラッチ(排他ラッチ及びインテント排他ラッチ)を用いることが望ましい。
【0020】
さらに、請求項3に記載のディレクトリ更新プログラムは、木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴うディレクトリの更新を行うために、コンピュータを、最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行手段、前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに、前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行手段として機能させる構成とした。
さらに、第2フェーズ実行手段が、排他ロック設定手段と、排他ロック有効判定手段と、ノード更新手段と、ノード再設定手段とを備える構成とした。
【0021】
かかる構成によれば、ディレクトリ更新プログラムは、第1フェーズ実行手段によって、ルートノードから更新対象となる葉ノードまでの経路において、Xロック(排他ロック)を設定する旨を示すIXロック(インテント排他ロック)を下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索する。
なお、ディレクトリ更新プログラムは、第1フェーズ実行手段で、第1の非フルエントリノードを探索するとともに、葉ノードに対して排他ロックを設定し、葉ノードのエントリ数が予め定めた制限未満である場合に葉ノードの更新を行い、エントリ数が予め定めた制限を超過する場合に葉ノードの更新を行わずに排他ロックを解放する。
【0022】
そして、ディレクトリ更新プログラムは、第2フェーズ実行手段によって、ルートノードから第1の非フルエントリノードの親ノードまでの経路において、Xロック(排他ロック)を設定する旨を示すIXロック(インテント排他ロック)を下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する。
さらに、ディレクトリ更新プログラムは、排他ロック設定手段によって、第1の非フルエントリノードから葉ノードまでの経路において、各ノードにXロックを設定し、排他ロック有効判定手段によって、排他ロック設定手段で設定したXロックが、葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する。
【0023】
そして、木構造の変化に関連するノードに対してXロックが設定されていると判定された場合、ディレクトリ更新プログラムは、ノード更新手段によって、葉ノードの更新を行う。
一方、木構造の変化に関連するノードに対してXロックが設定されていないと判定された場合、ディレクトリ更新プログラムは、ノード再設定手段によって、第2の非フルエントリノードを第1の非フルエントリノードとして設定する。これによって、Xロックの範囲が拡大されることになる。
なお、ここで、排他ロック及びインテント排他ロックには、デッドロック検出機能を持たない高速かつ単純なラッチ(排他ラッチ及びインテント排他ラッチ)を用いることが望ましい。
【0024】
また、請求項4に記載の木構造型データ記憶装置は、木構造における各ノードのエントリ数を制限したディレクトリ構造によって、データを記憶する木構造型データ記憶装置において、最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行手段と、前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行手段とを備える構成とした。
さらに、第2フェーズ実行手段が、排他ロック設定手段と、排他ロック有効判定手段と、ノード更新手段と、ノード再設定手段とを備える構成とした。
【0025】
かかる構成によれば、木構造型データ記憶装置は、第1フェーズ実行手段によって、ルートノードから更新対象となる葉ノードまでの経路において、Xロックを設定する旨を示すIXロックを下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索する。
なお、木構造型データ記憶装置は、第1フェーズ実行手段で、第1の非フルエントリノードを探索するとともに、葉ノードに対して排他ロックを設定し、葉ノードのエントリ数が予め定めた制限未満である場合に葉ノードの更新を行い、エントリ数が予め定めた制限を超過する場合に葉ノードの更新を行わずに排他ロックを解放する。
【0026】
そして、木構造型データ記憶装置は、第2フェーズ実行手段によって、ルートノードから第1の非フルエントリノードの親ノードまでの経路において、Xロックを設定する旨を示すIXロックを下位層に対して設定し、その上位層に対するIXロックの設定を解放する手順を下位層に向かって繰り返しながら、エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する。
さらに、木構造型データ記憶装置は、排他ロック設定手段によって、第1の非フルエントリノードから葉ノードまでの経路において、各ノードにXロックを設定し、排他ロック有効判定手段によって、排他ロック設定手段で設定したXロックが、葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する。
そして、木構造の変化に関連するノードに対してXロックが設定されていると判定された場合、ディレクトリ分散型記憶装置は、ノード更新手段によって、葉ノードの更新を行う。
一方、木構造の変化に関連するノードに対してXロックが設定されていないと判定された場合、木構造型データ記憶装置は、ノード再設定手段によって、第2の非フルエントリノードを第1の非フルエントリノードとして設定する。
なお、ここで、Xロック(排他ロック)及びIXロック(インテント排他ロック)には、デッドロック検出機能を持たない高速かつ単純なラッチ(排他ラッチ及びインテント排他ラッチ)を用いることが望ましい。
【発明の効果】
【0027】
本発明によれば、更新対象となる葉ノードを更新することでディレクトリ構造の木構造に変化が発生する場合、葉ノードから順次親ノードに排他ロック(排他ラッチ)を設定する手順を行わず、エントリ数が予め定めた制限未満である最も下位のノード以降に対して排他ロック(排他ラッチ)を設定する。これによって、葉ノードから順次排他ロック(排他ラッチ)の範囲を拡大させるINC−OPT方式に比べ、リスタートの回数を減らすことができ、ディレクトリ構造の変更に伴う時間を減らすことができる。
【0028】
さらに、本発明によれば、リスタート回数を減らすことで、排他ロック(排他ラッチ)を設定している時間を減らすことができるため、他のプロセスからの葉ノードに対するアクセスに対する応答性を高めることができる。また、ディレクトリ構造を分散して記憶するシステムの場合、システム全体のスループットを改善することができる。
【発明を実施するための最良の形態】
【0029】
[ディレクトリ分散型記憶装置(木構造型データ記憶装置)の構成]
まず、図1を参照して、ディレクトリ分散型記憶装置の構成について説明する。図1は、本発明に係る木構造型データ記憶装置の最良の形態であるディレクトリ分散型記憶装置の構成を示すブロック図である。
図1に示したディレクトリ分散型記憶装置1は、ネットワークNに接続された他のディレクトリ分散型記憶装置(図示せず)と協働し、データベース等のデータを分散して記憶するものである。このディレクトリ分散型記憶装置1は、図13で説明したFat−Btree構造のディレクトリ構造によってデータを記憶管理する計算機PEに相当する。
ここでは、ディレクトリ分散型記憶装置1は、通信制御部2と、記憶部3と、制御部4とを備えている。また、ここでは、ロック制御として、デッドロック検出機能を持たないラッチを用いることとする。
【0030】
通信制御部2は、ネットワークNを介して、クライアントコンピュータ(図示せず)や他のディレクトリ分散型記憶装置(図示せず)と、データや制御情報(ノード情報を含む)の送受信を行うものである。例えば、通信制御部2は、TCP/IP(Transmission Control Protocol/Internet Protocol)の通信プロトコルによってデータ等の送受信を行う通信ボードである。
【0031】
記憶部3は、データベース等のデータや、ディレクトリ構造を特定するノード情報等を記憶しておくもので、一般的なハードディスク等の記憶装置である。この記憶部3には、データ31と、ノード情報32と、エントリ制限情報33とを記憶している。
【0032】
データ31は、Fat−Btree構造における葉ノードであって、データの実体である。このデータ31は、記憶領域の予め定められたページ単位で管理され、所定のページ数(後記するエントリ制限情報33に含まれる)を超過する場合は分割される。
【0033】
ノード情報32は、Fat−Btree構造のデータ構造を示す情報である。ここでは、ノード情報32は、Fat−Btree構造のルートノードから、この記憶部3に記憶されているデータ(葉ノード)31までのアクセスパスを示している。
さらに、ノード情報32は、各ノードにどのプロセスから、どのロック(ラッチ)が設定されているかを示す情報を含んでいる。
【0034】
エントリ制限情報33は、Fat−Btree構造において、ノードに登録される子ノードの数の最大値や、葉ノードとして登録できるデータ(データページ)の数の最大値を示している。このエントリ制限情報33は、後記する制御部4によって参照され、データの更新に伴う木構造の変化(SMO)が発生するか否かを判定するために用いられる。
【0035】
制御部4は、ディレクトリ分散型記憶装置1全体の動作を制御するものであって、一般的なコンピュータにおけるCPU(Central Processing Unit:中央処理装置)に相当するものである。ここでは、制御部4は、データ操作手段5と、データ管理手段6と、制御情報送受信手段7とを備えている。
【0036】
データ操作手段5は、通信制御部2を介して、データの送受信操作を行うものである。ここでは、データ操作手段5は、データ送受信手段51と、データ参照手段52と、データ更新手段53とを備えている。
【0037】
データ送受信手段51は、データ管理手段6のデータ操作制御手段61から制御情報として通知されるデータの送信元(例えば、クライアントコンピュータ等)から、通信制御部2を介してデータを受信したり、データ操作制御手段61から制御情報として通知されるデータの送信先(例えば、クライアントコンピュータ等)に、通信制御部2を介してデータを送信したりするものである。
このデータ送受信手段51は、データ参照手段52から出力されるデータを、通信制御部2を介して送信し、通信制御部2を介して受信したデータをデータ更新手段53に出力する。
【0038】
データ参照手段52は、記憶部3に記憶されているデータ31を読み出すものである。このデータ参照手段52は、データ管理手段6のデータ操作制御手段61から通知される制御情報(記憶元のアドレス等)に基づいて、データ31を記憶部3から読み出す。このデータ参照手段52で読み出されたデータ31は、データ送受信手段51に出力される。
【0039】
データ更新手段53は、データ送受信手段51で受信したデータを、記憶部3に書き込むものである。このデータ更新手段53は、データ管理手段6のデータ操作制御手段61から通知される制御情報(記憶先のアドレス等)に基づいて、データを記憶部3に書き込む。なお、データ更新手段53は、データ操作制御手段61から通知される制御情報(記憶先のアドレス等)に基づいて、指示されたデータ31を記憶部3から削除する動作も行うものとする。
【0040】
データ管理手段6は、記憶部3に記憶されているノード情報32とエントリ制限情報33とに基づいて、記憶部3に記憶されるデータ31を階層構造で管理するものである。また、このデータ管理手段6は、Fat−Btree構造(図13参照)のディレクトリ構造によりデータ31を管理するものとする。ここでは、データ管理手段6は、データ操作制御手段61と、データ参照制御手段62と、データ更新制御手段63とを備えている。
【0041】
データ操作制御手段61は、図示していないクライアントコンピュータ等から送信される制御情報を、後記する制御情報送受信手段7を介して受信することで、その制御情報で示されるデータの操作を行うものでもある。
ここで、制御情報とは、データを制御する情報である。例えば、データを記憶する旨を示すデータ記憶指示、データを送信する旨を示すデータ送信指示、データを削除する旨を示すデータ削除指示等、あるいはこれらの指示に対する応答等である。
【0042】
例えば、制御情報が、データを記憶する旨を示すデータ記憶指示である場合、データ操作制御手段61は、その旨をデータ更新手段53に通知する。また、制御情報が、データを送信する旨を示すデータ送信指示である場合、データ操作制御手段61は、その旨をデータ参照手段52に通知する。また、制御情報が、データを削除する旨を示すデータ削除指示である場合、データ操作制御手段61は、その旨をデータ更新手段53に通知する。また、データ操作制御手段61は、これらの操作指示(データ記憶指示、データ送信指示、データ削除指示)の操作結果を制御情報送受信手段7に対して応答として出力する。
【0043】
なお、データ操作制御手段61は、データ操作が、データの参照を行うものである場合は、その旨を後記するデータ参照制御手段62に通知し、他のプロセスに対する排他制御を行うものとする。また、データ操作制御手段61は、データ操作が、データの更新を行うものである場合は、その旨を後記するデータ更新制御手段63に通知し、他のプロセスに対する排他制御や、木構造の変更(SMO)を行う。
【0044】
データ参照制御手段62は、データの読み出し等である参照系の操作において、他のプロセスに対する排他制御を行うものである。例えば、データ参照制御手段62は、ルートノードにISラッチ(表1参照)を設定し、親ノードに設定されている子ノードのポインタを取得し、子ノードにラッチ(ISラッチ)を設定し、親ノードのラッチを解放する動作をデータ(葉ノード)31まで繰り返す。そして、データ(葉ノード)31にSラッチを(表1参照)設定することで、データ(葉ノード)31の参照(読み出し)を可能にする。
【0045】
データ更新制御手段63は、データの追加、更新等の更新系の操作において、他のプロセスに対する排他制御や、木構造の変更(SMO)を行うものである。ここでは、データ更新制御手段63は、第1フェーズ実行手段631と、第2フェーズ実行手段632とを備えている。
【0046】
第1フェーズ実行手段631は、第1フェーズとして、エントリ数が予め定めた制限未満である最も下位のノード(第1の非フルエントリノード)を探索するとともに、データ(葉ノード)31の更新を行うものである。ここでは、第1フェーズ実行手段631は、第1非フルエントリノード探索手段631aと、葉ノードラッチ設定手段631bと、ノード更新手段631cとを備えている。
【0047】
第1非フルエントリノード探索手段631aは、ルートノードから更新対象となるデータ(葉ノード)31までの経路において、Xラッチ(排他ラッチ:表1参照)を設定する旨を示すIXラッチ(インテント排他ラッチ:表1参照)を下位層に対して設定し、その上位層に対するIXラッチの設定を解放する手順を下位層に向かって繰り返すラッチカップリングを行いながら、エントリ数が予め定めた制限未満である最も下位のノード(第1の非フルエントリノード)を探索するものである。ここでは、第1非フルエントリノード探索手段631aは、SMOが発生しない最下層のノードをルートノードから順次探索し、そのノードのルートノードからの木の高さを保持しておく。
【0048】
葉ノードラッチ設定手段631bは、更新対象となるデータ(葉ノード)31に対してXラッチを設定するものである。これによって、他のプロセスに対して、更新対象となるデータ(葉ノード)31の読み取り、変更を禁止することができる。
【0049】
ノード更新手段631cは、葉ノードラッチ設定手段631bによってXラッチが設定された、更新対象となるデータ(葉ノード)31を更新するものである。なお、ノード更新手段631cは、記憶部3のノード情報32とエントリ制限情報33とを参照し、データ31を追加、更新する際に、エントリ数が超過する場合に、データ(葉ノード)31の分割や、その親ノードの分割といった木構造に変化を及ぼす操作(SMO)が発生する場合は、データ(葉ノード)31を更新せず、データ31に対するXラッチを解放する。そして、第2フェーズ実行手段632に、第1非フルエントリノード探索手段631aで探索された第1の非フルエントリノードの位置(その親ノードのルートノードからの木の高さ)を通知する。
このように、第1フェーズ実行手段631は、SMOが発生しない場合は、第1フェーズ実行手段631でデータ(葉ノード)31の更新を完了するが、SMOが発生する場合は、第2フェーズ実行手段632に処理を移行する。
【0050】
第2フェーズ実行手段632は、第2フェーズとして、第1フェーズ実行手段631で探索された第1の非フルエントリノードより上位のノードで、エントリ数が予め定めた制限未満である最も下位のノード(第2の非フルエントリノード)を探索するとともに、データ(葉ノード)31の更新を行うものである。ここでは、第2フェーズ実行手段632は、第2非フルエントリノード探索手段632aと、子ノードラッチ設定手段632bと、ラッチ有効判定手段632cと、ノード更新手段632dと、ノード再設定手段632eとを備えている。
【0051】
第2非フルエントリノード探索手段632aは、ルートノードから、第1の非フルエントリノードの親ノードまでの経路において、IXラッチカップリングを行いながら、エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索するものである。
【0052】
子ノードラッチ設定手段(排他ロック設定手段)632bは、第2非フルエントリノード探索手段632aで探索された第2の非フルエントリノードより下位層の子ノード(葉ノードを含む)に対して、Xラッチを設定するものである。
【0053】
ラッチ有効判定手段(排他ロック有効判定手段)632cは、子ノードラッチ設定手段632bで設定したXラッチが、データ(葉ノード)31の更新に伴う木構造の変化(SMO)に関連するノードに対して設定されているかどうかを判定するものである。すなわち、このラッチ有効判定手段632cは、ノードの分割が発生するすべてのノードにXラッチが設定されており、かつ、その親ノードにXラッチが設定されているかどうかを判定する。このように、ノードの分割が発生するすべてのノードと、その親ノードにXラッチが設定されていれば、他のプロセスからの影響を受けることなく、木構造の変更が可能になる。
【0054】
ノード更新手段632dは、ラッチ有効判定手段632cで木構造の変化に関連するノードに対してXラッチが設定されていると判定された場合に、データ(葉ノード)31の更新を行うものである。すなわち、このノード更新手段632dは、データ(葉ノード)31の更新を行う際に、データ31の分割を行う。また、その親ノード(インデックスノード)で分割が必要な場合は、順次上位の親ノードに遡って分割を行う。これによって、データ(葉ノード)31に対するアクセスの均等化が図られることになる。
【0055】
ノード再設定手段632eは、ラッチ有効判定手段632cで木構造の変化に関連するノードに対してXラッチが設定されていないと判定された場合に、第2の非フルエントリノードを第1の非フルエントリノードとして再設定するものである。すなわち、第2の非フルエントリノードのルートノードからの木の高さを保持し直す。なお、このとき、ノード再設定手段632eは、すべてのXラッチを解放する。
そして、ノード再設定手段632eは、第2非フルエントリノード探索手段632aに制御を移行させる。
【0056】
このように、データ更新制御手段63を構成することで、データ更新制御手段63は、データ(葉ノード)31の更新を、以下の〔第1フェーズ〕、〔第2フェーズ〕の2つのフェーズで行うことになる。
【0057】
〔第1フェーズ〕ルートノードから葉ノードまで、IXラッチカップリングによりIXラッチを設定し、最下層の葉ノードにXラッチを設定する。また、フルエントリでないインデックスノード(第1の非フルエントリノード)が存在したら、そのノードの位置(ルートノードからの高さ)を保持(マーク)する。マークするノードの位置は、非フルエントリノードが存在する度に逐次更新される。もし、SMOが発生しない場合は、葉ノードを更新して終了する。もし、SMOが発生する場合は、葉ノードのXラッチを解放し、第2フェーズに移行する。
【0058】
〔第2フェーズ〕ルートノードから、第1フェーズでマークした第1の非フルエントリノードの親ノードまで、順次IXラッチカップリングによりIXラッチを設定し、第1の非フルエントリノード以下のノードにXラッチを設定する。もし、設定したXラッチの範囲が、SMOを行うために十分な範囲に設定されていなければ、マークの位置によるXラッチの範囲を変化させ、SMOを行うために十分な範囲となった段階で、葉ノードを更新して終了する。
なお、本方式は、第1フェーズにおいて、フルエントリでないインデックスノード(第1の非フルエントリノード)の位置(ルートノードからの高さ)を保持(マーク)しておくため、MARK−OPT(MARKing OPTimistic)方式と呼ぶこととする。
【0059】
制御情報送受信手段7は、通信制御部2を介して、図示していないクライアントコンピュータ等と制御情報の送受信を行うものである。ここでは、制御情報送受信手段7は、クライアントコンピュータ等から受信した制御情報をデータ操作制御手段61に出力し、データ操作制御手段61から出力された制御信号をクライアントコンピュータ等に送信する。
【0060】
以上、説明したように、ディレクトリ分散型記憶装置1を構成することで、第2フェーズでは、第1フェーズでマークした第1の非フルエントリノードの親ノードまでIXラッチカップリングを行い、第1の非フルエントリノード以下のノードにXラッチを設定するため、Xラッチの範囲を葉ノードから順次拡げていく従来のINC−OPT方式に比べて、リスタートを行う回数を減らすことができる。
また、ここでは、ディレクトリ(ノード情報)とデータ(葉ノード)とを複数のディレクトリ分散型記憶装置で分散して記憶する形態としたが、本発明は、この形態に限定されるものではない。例えば、1つの記憶装置(木構造型データ記憶装置)のみに、すべてのノード情報と葉ノードとを記憶し、各ノードのエントリ数を制限したディレクトリ構造を形成している場合であっても、本発明に係るディレクトリ更新を行うことは可能である。この場合であっても、INC−OPT方式に比べて、リスタートを行う回数を減らすことができ、SMOに要するXラッチの獲得時間を短くすることができる。ただし、システム全体のスループットを向上させるには、複数の木構造型データ記憶装置(ディレクトリ分散型記憶装置)で、ディレクトリ(ノード情報)とデータ(葉ノード)とを分散するほうが望ましいと言える。
なお、ディレクトリ分散型記憶装置1の制御部4は、一般的なコンピュータにプログラムを実行させ、コンピュータ内の演算装置や記憶装置を動作させることにより実現することができる。ここで実現されるディレクトリの更新を行うディレクトリ更新プログラムは、通信回線を介して配布することも可能であるし、CD−ROM等の記録媒体に書き込んで配布することも可能である。
【0061】
[ディレクトリ分散型記憶装置の動作]
次に、図2及び図3を参照(適宜図1参照)して、ディレクトリ分散型記憶装置の動作について説明する。なお、ここでは、ディレクトリ分散型記憶装置1のデータ更新制御手段63において行われる、本発明に係るディレクトリ更新方法(MARK−OPT方式)について、詳細に説明を行うことにする。図2は、MARK−OPT方式の第1フェーズの動作を示すフローチャートである。図3は、MARK−OPT方式の第2フェーズの動作を示すフローチャートである。
【0062】
《MARK−OPT方式》
(第1フェーズ;第1フェーズ実行ステップ)
ディレクトリ分散型記憶装置1は、第1フェーズ実行手段631において、以下の手順で第1フェーズの動作(図2参照)を実行する。
まず、ディレクトリ分散型記憶装置1は、第1非フルエントリノード探索手段631aによって、初期値として、エントリ数が制限を超過していないノードの階層番号を示す変数〔マーク用階層番号(n)〕に、木構造の木の高さを示すツリー高“H”を設定する(ステップS1)。さらに、ディレクトリ分散型記憶装置1は、初期値として、親ノードを識別するための変数(Parent)に“null”、子ノードを識別するための変数(Child)にルートノードを示す識別子“ROOT”を設定し、ループに使用するインデックス用階層番号(h)と非フルエントリノードの位置を示すマーク値(m)とにそれぞれ“1”を設定する(ステップS2)。
【0063】
そして、ディレクトリ分散型記憶装置1は、インデックス用階層番号(h)が、マーク用階層番号(n)に達していないかどうかを判定し(ステップS3)、達した場合(ステップS3でNo)、ステップS8に進む。
一方、インデックス用階層番号(h)が、マーク用階層番号(n)に達していない場合(ステップS3でYes)、ディレクトリ分散型記憶装置1は、第1非フルエントリノード探索手段631aによって、子ノード(Child)にIXラッチを設定し、親ノード(Parent)に設定されているラッチを解放する(ステップS4)。ただし、最初は親ノード(Parent)には、IXラッチが設定されていないため、ステップS4のラッチの解放は、ラッチが設定されている場合にのみなされる。
続けて、ディレクトリ分散型記憶装置1は、第1非フルエントリノード探索手段631aによって、記憶部3のノード情報32及びエントリ制限情報33を参照することで、子ノード(Child)のエントリ数が最大(フルエントリ)となっているかどうかを判定する(ステップS5)。ここで、子ノード(Child)がフルエントリの場合(ステップS5でYes)、ステップS7に進む。
【0064】
一方、子ノード(Child)がフルエントリでない場合(ステップS5でNo)、マーク値(m)に現在の階層番号であるインデックス用階層番号(h)を設定し、非フルエントリノードの位置を保持(マーク)しておく(ステップS6)。
そして、ディレクトリ分散型記憶装置1は、現在の子ノード直下のノードを新しい子ノード(新子ノード)として決定し、親ノード(Parent)に子ノード(Child)、子ノード(Child)に新子ノード(NewChild)を設定し直す。さらに、インデックス用階層番号(h)に“1”を加算することで、1つ下の階層に制御対象を移動する(ステップS7)。そして、ステップS3に戻る。
【0065】
このステップS3からステップS7までのループによって、ルートノードから、葉ノードの親ノードに対してIXラッチカップリングが行われることになる。
そして、ディレクトリ分散型記憶装置1は、葉ノードラッチ設定手段631bによって、子ノード(この段階では葉ノード)に対してXラッチを設定し、その親ノードのラッチを解放する(ステップS8)。
【0066】
ここで、ディレクトリ分散型記憶装置1は、ノード更新手段631cによって、記憶部3のノード情報32及びエントリ制限情報33を参照することで、子ノード(葉ノード)のエントリ数が最大(フルエントリ)となっているかどうかを判定する(ステップS9)。ここで、葉ノードがフルエントリでない場合(ステップS9でNo)、ノード更新手段631cが葉ノードの更新操作を実行し(ステップS10)、すべてのラッチを解放し(ステップS11)、動作を終了する。
一方、葉ノードがフルエントリの場合(ステップS9でYes)、ディレクトリ分散型記憶装置1は、すべてのラッチを解放し(ステップS12)、マーク用階層番号(n)に、マーク値(m)を設定し(ステップS13)、第2フェーズに移行する。
【0067】
(第2フェーズ;第2フェーズ実行ステップ)
次に、ディレクトリ分散型記憶装置1は、第2フェーズ実行手段632において、以下の手順で第2フェーズの動作(図3参照)を実行する。
まず、ディレクトリ分散型記憶装置1は、第2非フルエントリノード探索手段632aによって、ルートノードからマーク用階層番号(n)で示される非フルエントリノードの親ノードまで、IXラッチカップリングを行う(ステップS20〜ステップS25)。なお、このステップS20〜ステップS25までの動作は、図2で説明したステップS2〜ステップS7までの動作と同一であるため説明を省略する。
【0068】
そして、ディレクトリ分散型記憶装置1は、ステップS25(ステップS7)まででIXラッチカップリングされたノードの子ノード、すなわち、マーク用階層番号(n)で示される非フルエントリノードと、そのコピー(複製)にXラッチを設定し、親ノードのIXラッチを解放する(ステップS26)。ここで、コピー(複製)とは、図13で説明した計算機PE間で、同一のインデックスノードNiをコピーしてそれぞれのPEで保有している場合、そのPE毎のインデックスノードNiを指す。
さらに、ディレクトリ分散型記憶装置1は、現在の子ノード直下のノードを新しい子ノード(新子ノード)として決定し、親ノード(Parent)に子ノード(Child)、子ノード(Child)に新子ノード(NewChild)を設定し直す。さらに、インデックス用階層番号(h)に“1”を加算することで、1つ下の階層に制御対象を移動する(ステップS27)。
【0069】
そして、ディレクトリ分散型記憶装置1は、インデックス用階層番号(h)が、ツリー高“H”に達していないかどうかを判定し(ステップS28)、達した場合(ステップS28でNo)は、ステップS31に進む。
一方、インデックス用階層番号(h)が、ツリー高“H”を超えていない場合(ステップS28でYes)、ディレクトリ分散型記憶装置1は、子ノードラッチ設定手段632bによって、子ノードとそのコピー(複製)にXラッチを設定する(ステップS29;排他ロック設定ステップ)。
続けて、ディレクトリ分散型記憶装置1は、子ノードラッチ設定手段632bによって、現在の子ノード直下のノードを新しい子ノード(新子ノード)として決定し、親ノード(Parent)に子ノード(Child)、子ノード(Child)に新子ノード(NewChild)を設定し直す。さらに、インデックス用階層番号(h)に“1”を加算することで、1つ下の階層に制御対象を移動する(ステップS30)。そして、ステップS28に戻る。
このステップS28からステップS30までのループによって、ステップS27で設定された子ノード以下のノードにXラッチが設定されることになる。
【0070】
そして、ディレクトリ分散型記憶装置1は、ラッチ有効判定手段632cによって、Xラッチが、データ(葉ノード)31の更新に伴う木構造の変化(SMO)に関連するノードに対してなされているかどうかを判定する(ステップS31;排他ロック有効判定ステップ)。ここで、XラッチがSMOを行うためには不十分である場合(ステップS31でNo)、すべてのラッチを解放し(ステップS32)、マーク用階層番号(n)に、マーク値(m)を設定し(ステップS33;ノード再設定ステップ)、ステップS20に戻る(リスタートする)。すなわち、Xラッチの範囲を拡げる動作を実行する。
一方、XラッチがSMOを行うために十分な設定がなされている場合(ステップS31でYes)、ノード更新手段632dが葉ノード及びそれに関連するノードの更新操作(SMO)を実行し(ステップS34;ノード更新ステップ)、すべてのラッチを解放し(ステップS35)、動作を終了する。
【0071】
以上のMARK−OPT方式による第1フェーズ(図2参照)及び第2フェーズ(図3参照)の動作によって、ディレクトリ分散型記憶装置1は、第1フェーズによってマークされたノードによって、Xラッチの設定範囲を定めることができ、葉ノードから順次Xラッチの範囲を拡大していくINC−OPT方式に比べ、第2フェーズを再実行するリスタートの回数を減らすことができる。
なお、ディレクトリ更新方法は、第1フェーズ及び第2フェーズで説明した各ステップにより、ディレクトリを更新する方法であって、ディレクトリ更新プログラムは、この第1フェーズ及び第2フェーズで説明した各ステップをコンピュータに実行させるためのプログラムである。
【0072】
以上、本発明に係るディレクトリ分散型記憶装置1の動作として、MARK−OPT方式の動作について説明したが、本発明はこれに限定されるものではない。例えば、このMARK−OPT方式は、他のプロセスの動作によって、途中で木構造に変化があった場合でも処理に変更はないが、その木構造の変化によって処理を変えることとしてもよい。以下、MARK−OPT方式を拡張したINC−MARK−OPT方式、2P−INT−MARK−OPT方式及び2P−REP−MARK−OPT方式について説明を行う。
【0073】
《INC−MARK−OPT方式》
まず、図4を参照して、INC−MARK−OPT(INCremental MARKing OPTimistic)方式について説明する。図4は、INC−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。なお、INC−MARK−OPT方式の第1フェーズは、図2で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0074】
このINC−MARK−OPT方式は、第2フェーズにおいて、木の構造が変化したと判断された場合にリスタートを行う方式である。
図4に示すように、INC−MARK−OPT方式は、MARK−OPT方式の第2フェーズにおけるステップS26とステップS27の間に、ステップS261a〜ステップS261cを追加している。他のステップについては、図3で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0075】
すなわち、INC−MARK−OPT方式は、ステップS26で親ノードのIXラッチを解放した段階で、記憶部3のノード情報32及びエントリ制限情報33を参照することで、子ノード(Child)のエントリ数が最大(フルエントリ)となっているかどうかを判定する(ステップS261a)。ここで、子ノード(Child)がフルエントリの場合(ステップS261aでYes)、すべてのラッチを解放し(ステップS261b)、マーク用階層番号(n)に、マーク値(m)を設定し(ステップS261c)、ステップS20に戻る(リスタートする)。一方、子ノード(Child)がフルエントリでない場合(ステップS261aでNo)は、MARK−OPT方式と同様にステップS27以降の動作を実行する。
【0076】
このように、INC−MARK−OPT方式は、木の構造が変化したと判断された段階で直ちにリスタートを行うため、SMOの範囲が拡大している場合には、MARK−OPT方式より不必要なXラッチを減らすことができる。
【0077】
《2P−INT−MARK−OPT方式》
次に、図5を参照して、2P−INT−MARK−OPT(2-Phase INTegrated MARKing OPTimistic)方式について説明する。図5は、2P−INT−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。なお、2P−INT−MARK−OPT方式の第1フェーズは、図2で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0078】
この2P−INT−MARK−OPT方式は、第2フェーズにおいて、木の構造が変化したと判断された場合に、そのノード以下のノードに対してIXラッチカップリングを行う方式である。
図5に示すように、2P−INT−MARK−OPT方式は、MARK−OPT方式の第2フェーズにおけるステップS26とステップS27の間に、ステップS261a及びステップS261dを追加している。他のステップについては、図3で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0079】
すなわち、2P−INT−MARK−OPT方式は、ステップS26で親ノードのIXラッチを解放した段階で、記憶部3のノード情報32及びエントリ制限情報33を参照することで、子ノード(Child)のエントリ数が最大(フルエントリ)となっているかどうかを判定する(ステップS261a)。ここで、子ノード(Child)がフルエントリの場合(ステップS261aでYes)、マーク用階層番号(n)に、現在の階層番号であるインデックス用階層番号(h)を設定し(ステップS261d)、第1フェーズ(図2)のステップS7に戻る。一方、子ノード(Child)がフルエントリでない場合(ステップS261aでNo)は、MARK−OPT方式と同様にステップS27以降の動作を実行する。
【0080】
このように、2P−INT−MARK−OPT方式は、木の構造が変化したと判断されてもリスタートを行わず、第1フェーズに切り替えて処理を行う。これによって、2P−INT−MARK−OPT方式は、INC−MARK−OPT方式よりもリスタート回数を少なくし、MARK−OPT方式より不必要なXラッチを減らすことができる。
【0081】
《2P−REP−MARK−OPT方式》
次に、図6を参照して、2P−REP−MARK−OPT(2-Phase REPetitive MARKing OPTimistic)方式について説明する。図6は、2P−REP−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。なお、2P−REP−MARK−OPT方式の第1フェーズは、図2で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0082】
この2P−REP−MARK−OPT方式は、第2フェーズにおいて、木の構造が変化したと判断された場合に、リスタートを行う方式である。なお、INC−MARK−OPT方式との違いは、リスタート後は第1フェーズに戻って処理を行うことである。
図6に示すように、2P−REP−MARK−OPT方式は、MARK−OPT方式の第2フェーズにおけるステップS26とステップS27の間に、ステップS261a及びステップS261bを追加している。他のステップについては、図3で説明したMARK−OPT方式と同じ動作であるため説明を省略する。
【0083】
すなわち、2P−REP−MARK−OPT方式は、ステップS26で親ノードのIXラッチを解放した段階で、記憶部3のノード情報32及びエントリ制限情報33を参照することで、子ノード(Child)のエントリ数が最大(フルエントリ)となっているかどうかを判定する(ステップS261a)。ここで、子ノード(Child)がフルエントリの場合(ステップS261aでYes)、すべてのラッチを解放し(ステップS261b)、第1フェーズ(図2)のステップS1に戻る。一方、子ノード(Child)がフルエントリでない場合(ステップS261aでNo)は、MARK−OPT方式と同様にステップS27以降の動作を実行する。
【0084】
このように、2P−REP−MARK−OPT方式は、木の構造が変化したと判断された段階で直ちにリスタートし、第1フェーズに戻って処理を行うため、リスタート回数は、MARK−OPT方式に比べて多くなるが、不必要なXラッチの設定を最も少なくすることができる。
【0085】
[ディレクトリ更新動作の具体例]
次に、ディレクトリ分散型記憶装置1(図1参照)におけるディレクトリ更新の動作について、具体例を示して説明する。ここでは、一例として、図7に示すようなディレクトリ更新が行われる例について説明する。図7(a)は、ディレクトリ更新前のディレクトリ構造を示し、図7(b)は、データ追加に伴うディレクト更新後のディレクト構造を示している。
【0086】
図7(a)に示すように、ディレクトリ更新前は、D1−D2−D3−D4−D5−D6の各ノードの階層によって、データ31として葉ノードD6が記憶部3に記憶されている。なお、ここでは、インデックスノード及び葉ノードのエントリ数の最大値(制限値)を“3”とする。すなわち、インデックスノードD2、D5は、子ノードがフルエントリ状態であるフルエントリインデックスノードとなっており、葉ノードD6は、データがフルエントリ状態であるフルエントリ葉ノードとなっているものとする。
【0087】
この図7(a)の状態において、葉ノードD6にデータを追加すると、図7(b)に示すように、葉ノードD6は葉ノードD61、D62に分割され、その親ノードであるインデックスノードD5は、エントリ数の最大数を超過するため、インデックスノードD51、D52に分割されることになる。
この例に基づいて、前記したMARK−OPT方式、INC−MARK−OPT方式、2P−INT−MARK−OPT方式及び2P−REP−MARK−OPT方式の各方式の動作について具体的に説明する。
【0088】
《MARK−OPT方式》
まず、図8及び図9を参照して、MARK−OPT方式の動作を具体的に説明する。図8及び図9は、MARK−OPT方式のラッチ状態を模式的に示す模式図である。なお、図中変数「n」、「h」及び「m」は、図2及び図3のフローチャートに用いたマーク用階層番号、インデックス用階層番号及びマーク値をそれぞれ示している。
【0089】
図8(a)に示すように、MARK−OPT方式は、第1フェーズで、IXラッチカップリングによって、状態P1から状態P9として、ルートノードD1から葉ノードD6の親ノード(インデックスノードD5)まで、順次IXラッチを設定する。また、IXラッチ設定中に、フルエントリとなっていないインデックスノードを探索し、マーク値(m)にその状態におけるマーク用階層番号(h)の値を設定する。ここでは、状態P1において、マーク値(m)に“1”を設定し、状態P5において、マーク値(m)に“3”を設定し、状態P7において、マーク値(m)に“4”を設定する。そして、状態P10に示すように、葉ノードD6にXラッチを設定し、状態P11に示すように親ノードのIXラッチを解放する。この状態では、葉ノードD6を更新するためのXラッチが不十分(インデックスノードD4及びD5にXラッチの設定が必要)であるため、状態P12に示すように葉ノードD6のXラッチを解放し第2フェーズの動作(リスタート)を行う。
【0090】
続けて、図8(b)に示すように、MARK−OPT方式は、第2フェーズで、IXラッチカップリングによって、状態P13から状態P17として、ルートノードD1から、第1フェーズでマークしたマーク値(m:ここでは“4”)のノードの親ノード(インデックスノードD3)まで、順次IXラッチを設定する。そして、親ノード(インデックスノードD3)以下の子ノードにXラッチを設定する。そして、状態P20に示すように、インデックスノードD4〜D6にXラッチを設定した段階で、葉ノードD6の更新を行う。そして、葉ノードD6の更新(及びインデックスノードD5の分割)後、全ラッチを解放し動作を終了する。
なお、この図8(b)は、処理中に上位ノードで更新操作(SMO)が発生しなかった場合の動作を示している。この処理中に上位ノードで更新操作(SMO)が発生した場合の動作については、図9を参照して説明を行う。
【0091】
図9(a)は、上位ノードで更新操作(SMO)が発生した場合におけるリスタートの1回目の動作を示し、図9(b)は、リスタートの2回目の動作を示している。なお、図9では、他のプロセスの動作によりSMOが発生し、インデックスノードD4がフルエントリインデックスノードになった例を示している。
【0092】
図9(a)に示すように、MARK−OPT方式は、第2フェーズのリスタート1回目で、IXラッチカップリングによって、状態P21から状態P25として、ルートノードD1から、第1フェーズでマークしたマーク値(m:ここでは“4”)のノードの親ノード(インデックスノードD3)まで、順次IXラッチを設定する。また、IXラッチ設定中に、フルエントリとなっていないインデックスノードを探索し、マーク値(m)にその状態におけるマーク用階層番号(h)の値を設定する。ここでは、状態P21において、マーク値(m)に“1”を設定し、状態P25において、マーク値(m)に“3”を設定する。
そして、親ノード(インデックスノードD3)以下の子ノードにXラッチを設定する。この状態では、葉ノードD6を更新するためのXラッチが不十分(インデックスノードD3〜D5にXラッチの設定が必要)であるため、状態P29に示すようにすべてのラッチを解放し、第2フェーズの動作(リスタート2回目)を行う。
【0093】
続けて、図9(b)に示しように、MARK−OPT方式は、第2フェーズのリスタート2回目で、IXラッチカップリングによって、状態P30から状態P32として、ルートノードD1から、第2フェーズのリスタート1回目でマークしたマーク値(m:ここでは“3”)のノードの親ノード(インデックスノードD2)まで、順次IXラッチを設定する。そして、親ノード(インデックスノードD2)以下の子ノードにXラッチを設定する。そして、状態P37に示すように、インデックスノードD3〜D6にXラッチを設定した段階で、葉ノードD6の更新を行う。そして、葉ノードD6の更新(及びインデックスノードD4及びD5の分割)後、全ラッチを解放し動作を終了する。
【0094】
《INC−MARK−OPT方式》
次に、図10を参照して、INC−MARK−OPT方式の動作を具体的に説明する。図10は、INC−MARK−OPT方式のラッチ状態を模式的に示す模式図である。なお、INC−MARK−OPT方式の第1フェーズ及びSMOが発生しなかった場合の第2フェーズの動作は、図8で説明したMARK−OPT方式の動作と同じであるため説明を省略する。
ここでは、図10(a)に示すように、他のプロセスの動作によりSMOが発生し、インデックスノードD4がフルエントリインデックスノードになった例を示している。
【0095】
ここで、INC−MARK−OPT方式は、第2フェーズのリスタート1回目で、IXラッチカップリングによって、状態P41から状態P45として、ルートノードD1から、第1フェーズでマークしたマーク値(m:ここでは“4”)のノードの親ノード(インデックスノードD3)まで、順次IXラッチを設定する。また、IXラッチ設定中に、フルエントリとなっていないインデックスノードを探索し、マーク値(m)にその状態におけるマーク用階層番号(h)の値を設定する。ここでは、状態P41において、マーク値(m)に“1”を設定し、状態P45において、マーク値(m)に“3”を設定する。
【0096】
そして、INC−MARK−OPT方式は、子ノード(インデックスノードD4)にXラッチを設定し、親ノード(インデックスノードD3)のIXラッチを解放した状態P47において、すでに葉ノードD6を更新するためのXラッチが不十分(インデックスノードD3〜D5にXラッチの設定が必要)であると判断する。そこで、状態P48に示すようにすべてのラッチを解放し、第2フェーズの動作(リスタート2回目)を行う。
なお、第2フェーズのリスタート2回目の動作は、図9(b)の動作と同じになるため説明を省略する。
【0097】
《2P−INT−MARK−OPT方式》
次に、図11を参照して、2P−INT−MARK−OPT方式の動作を具体的に説明する。図11は、2P−INT−MARK−OPT方式のラッチ状態を模式的に示す模式図である。なお、2P−INT−MARK−OPT方式の第1フェーズ及びSMOが発生しなかった場合の第2フェーズの動作は、図8で説明したMARK−OPT方式の動作と同じであるため説明を省略する。
ここでも、図10(a)と同様に、他のプロセスの動作によりSMOが発生し、インデックスノードD4がフルエントリインデックスノードになったものとしている。
【0098】
ここで、2P−INT−MARK−OPT方式は、第2フェーズのリスタート1回目で、状態P61から状態P67に遷移する。なお、この状態P61〜状態P67は、図10(a)の状態P41〜状態P47と同じ状態である。
そして、2P−INT−MARK−OPT方式は、状態P67において、すでに葉ノードD6を更新するためのXラッチが不十分(インデックスノードD3〜D5にXラッチの設定が必要)であると判断し、第1フェーズの途中(ステップS7:図2参照)にフェーズを切り替えて動作を継続する。
【0099】
そして、2P−INT−MARK−OPT方式は、マーク用階層番号(h)に対応するインデックスノードより下位のインデックスノード(D5以下)に対してIXラッチカップリングを行う。そして、状態P71に示すように、葉ノードD6にXラッチを設定し、状態P72に示すように親ノードのIXラッチを解放する。この状態では、葉ノードD6を更新するためのXラッチが不十分(インデックスノードD3〜D5にXラッチの設定が必要)であるため、状態P73に示すように葉ノードD6のXラッチを解放し第2フェーズの動作(リスタート2回目)を行う。
なお、第2フェーズのリスタート2回目の動作は、図9(b)の動作と同じになるため説明を省略する。
【0100】
《2P−REP−MARK−OPT方式》
次に、図12を参照して、2P−REP−MARK−OPT方式の動作を具体的に説明する。図12は、2P−REP−MARK−OPT方式のラッチ状態を模式的に示す模式図である。なお、2P−REP−MARK−OPT方式の第1フェーズ及びSMOが発生しなかった場合の第2フェーズの動作は、図8で説明したMARK−OPT方式の動作と同じであるため説明を省略する。
ここでも、図10(a)と同様に、他のプロセスの動作によりSMOが発生し、インデックスノードD4がフルエントリインデックスノードになったものとしている。
【0101】
ここで、2P−REP−MARK−OPT方式は、第2フェーズのリスタート1回目で、状態P81から状態P88に遷移する。なお、この状態P81〜状態P88は、図10(a)の状態P41〜状態P48と同じ状態である。そして、2P−REP−MARK−OPT方式は、状態P88以降、第1フェーズに戻って動作を再開(リスタート2回目)する。
【0102】
そして、2P−REP−MARK−OPT方式は、図12(b)に示すように、第1フェーズを実行し、IXラッチカップリングによって、状態P89から状態P97に示すように、ルートノードD1から葉ノードD6の親ノード(インデックスノードD5)まで、順次IXラッチを設定する。また、IXラッチ設定中に、フルエントリとなっていないインデックスノードを探索し、マーク値(m)にその状態におけるマーク用階層番号(h)の値を設定する。ここでは、状態P89において、マーク値(m)に“1”を設定し、状態P93において、マーク値(m)に“3”を設定する。そして、状態P98に示すように、葉ノードD6にXラッチを設定し、状態P99に示すように親ノードのIXラッチを解放する。この状態では、葉ノードD6を更新するためのXラッチが不十分(インデックスノードD3〜D5にXラッチの設定が必要)であるため、状態P100に示すように葉ノードD6のXラッチを解放し第2フェーズの動作(リスタート3回目)を行う。
なお、第2フェーズのリスタート3回目の動作は、図9(b)の動作と同じになるため説明を省略する。
【0103】
以上説明したように、MARK−OPT方式、INC−MARK−OPT方式、2P−INT−MARK−OPT方式及び2P−REP−MARK−OPT方式は、第1フェーズによってマークされたノードによってXラッチの設定範囲を定めるため、葉ノードから順次Xラッチの範囲を拡大していくINC−OPT方式に比べ、リスタートの回数を減らすことができる。
【図面の簡単な説明】
【0104】
【図1】本発明に係るディレクトリ分散型記憶装置(木構造型データ記憶装置)の構成を示すブロック図である。
【図2】MARK−OPT方式の第1フェーズの動作を示すフローチャートである。
【図3】MARK−OPT方式の第2フェーズの動作を示すフローチャートである。
【図4】INC−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。
【図5】2P−INT−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。
【図6】2P−REP−MARK−OPT方式の第2フェーズの動作を示すフローチャートである。
【図7】ディレクトリの更新例を示す図であって、(a)は更新前、(b)は更新後の状態を示す。
【図8】MARK−OPT方式のラッチ状態(第1フェーズ及び第2フェーズ)を模式的に示す模式図である。
【図9】MARK−OPT方式のラッチ状態(第2フェーズ:リスタート1回目及び2回目)を模式的に示す模式図である。
【図10】INC−MARK−OPT方式のラッチ状態(第2フェーズ)を模式的に示す模式図である。
【図11】2P−INT−MARK−OPT方式のラッチ状態(第2フェーズ)を模式的に示す模式図である。
【図12】2P−REP−MARK−OPT方式のラッチ状態(第2フェーズ)を模式的に示す模式図である。
【図13】従来の並列計算機におけるディレクトリ構造の一例であるFat−Btree構造を示す図である。
【符号の説明】
【0105】
1 ディレクトリ分散型記憶装置(木構造型データ記憶装置)
2 通信制御部
3 記憶部
4 制御部
5 データ操作手段
51 データ送受信手段
52 データ参照手段
53 データ更新手段
6 データ管理手段
61 データ操作制御手段
62 データ参照制御手段
63 データ更新制御手段
631 第1フェーズ実行手段
631a 第1非フルエントリノード探索手段
631b 葉ノードラッチ設定手段
631c ノード更新手段
632 第2フェーズ実行手段
632a 第2非フルエントリノード探索手段
632b 子ノードラッチ設定手段(排他ロック設定手段)
632c ラッチ有効判定手段(排他ロック有効判定手段)
632d ノード更新手段
632e ノード再設定手段
7 制御情報送受信手段
【特許請求の範囲】
【請求項1】
木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴う際のディレクトリ更新方法であって、
最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、前記エントリ数が予め定めた制限未満である最も下位の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行ステップと、
この第1フェーズ実行ステップで前記葉ノードの更新を行わなかった場合に、前記非フルエントリノード以下のノードに対して排他ロックを設定し、前記葉ノードより上位のノードであって、前記葉ノードの更新に伴い分割対象となる親ノードに排他ロックが設定されている場合に前記葉ノードの更新を行い、分割対象となる前記親ノードに排他ロックが設定されていない場合に、前記非フルエントリノードより上位の非フルエントリノードを探索し、当該非フルエントリノードより下位のノードに排他ロックの範囲を拡大する第2フェーズ実行ステップと、
を含んでいることを特徴とするディレクトリ更新方法。
【請求項2】
木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴う際のディレクトリ更新方法であって、
最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行ステップと、
前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに、前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行ステップとを含み、
この第2フェーズ実行ステップが、
前記第1の非フルエントリノードから前記葉ノードまでの経路において、各ノードに排他ロックを設定する排他ロック設定ステップと、
この排他ロック設定ステップで設定した排他ロックが、前記葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する排他ロック有効判定ステップと、
前記木構造の変化に関連するノードに対して排他ロックが設定されていると判定された場合に、前記葉ノードの更新を行うノード更新ステップとをさらに含み、
前記木構造の変化に関連するノードに対して排他ロックが設定されていないと判定された場合に、前記第2の非フルエントリノードを前記第1の非フルエントリノードとして、前記第2フェーズ実行ステップを繰り返すことを特徴とするディレクトリ更新方法。
【請求項3】
木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴うディレクトリの更新を行うために、コンピュータを、
最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行手段、
前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに、前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行手段として機能させ、
この第2フェーズ実行手段が、
前記第1の非フルエントリノードから前記葉ノードまでの経路において、各ノードに排他ロックを設定する排他ロック設定手段と、
この排他ロック設定手段で設定した排他ロックが、前記葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する排他ロック有効判定手段と、
前記木構造の変化に関連するノードに対して排他ロックが設定されていると判定された場合に、前記葉ノードの更新を行うノード更新手段と、
前記木構造の変化に関連するノードに対して排他ロックが設定されていないと判定された場合に、前記第2の非フルエントリノードを前記第1の非フルエントリノードとして設定するノード再設定手段と、
を備えていることを特徴とするディレクトリ更新プログラム。
【請求項4】
木構造における各ノードのエントリ数を制限したディレクトリ構造によって、データを記憶する木構造型データ記憶装置において、
最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行手段と、
前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに、前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行手段とを備え、
この第2フェーズ実行手段が、
前記第1の非フルエントリノードから前記葉ノードまでの経路において、各ノードに排他ロックを設定する排他ロック設定手段と、
この排他ロック設定手段で設定した排他ロックが、前記葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する排他ロック有効判定手段と、
前記木構造の変化に関連するノードに対して排他ロックが設定されていると判定された場合に、前記葉ノードの更新を行うノード更新手段と、
前記木構造の変化に関連するノードに対して排他ロックが設定されていないと判定された場合に、前記第2の非フルエントリノードを前記第1の非フルエントリノードとして設定するノード再設定手段と、
を備えていることを特徴とする木構造型データ記憶装置。
【請求項1】
木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴う際のディレクトリ更新方法であって、
最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、前記エントリ数が予め定めた制限未満である最も下位の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行ステップと、
この第1フェーズ実行ステップで前記葉ノードの更新を行わなかった場合に、前記非フルエントリノード以下のノードに対して排他ロックを設定し、前記葉ノードより上位のノードであって、前記葉ノードの更新に伴い分割対象となる親ノードに排他ロックが設定されている場合に前記葉ノードの更新を行い、分割対象となる前記親ノードに排他ロックが設定されていない場合に、前記非フルエントリノードより上位の非フルエントリノードを探索し、当該非フルエントリノードより下位のノードに排他ロックの範囲を拡大する第2フェーズ実行ステップと、
を含んでいることを特徴とするディレクトリ更新方法。
【請求項2】
木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴う際のディレクトリ更新方法であって、
最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行ステップと、
前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに、前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行ステップとを含み、
この第2フェーズ実行ステップが、
前記第1の非フルエントリノードから前記葉ノードまでの経路において、各ノードに排他ロックを設定する排他ロック設定ステップと、
この排他ロック設定ステップで設定した排他ロックが、前記葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する排他ロック有効判定ステップと、
前記木構造の変化に関連するノードに対して排他ロックが設定されていると判定された場合に、前記葉ノードの更新を行うノード更新ステップとをさらに含み、
前記木構造の変化に関連するノードに対して排他ロックが設定されていないと判定された場合に、前記第2の非フルエントリノードを前記第1の非フルエントリノードとして、前記第2フェーズ実行ステップを繰り返すことを特徴とするディレクトリ更新方法。
【請求項3】
木構造における各ノードのエントリ数を制限したディレクトリ構造において、前記木構造の変化を伴うディレクトリの更新を行うために、コンピュータを、
最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行手段、
前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに、前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行手段として機能させ、
この第2フェーズ実行手段が、
前記第1の非フルエントリノードから前記葉ノードまでの経路において、各ノードに排他ロックを設定する排他ロック設定手段と、
この排他ロック設定手段で設定した排他ロックが、前記葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する排他ロック有効判定手段と、
前記木構造の変化に関連するノードに対して排他ロックが設定されていると判定された場合に、前記葉ノードの更新を行うノード更新手段と、
前記木構造の変化に関連するノードに対して排他ロックが設定されていないと判定された場合に、前記第2の非フルエントリノードを前記第1の非フルエントリノードとして設定するノード再設定手段と、
を備えていることを特徴とするディレクトリ更新プログラム。
【請求項4】
木構造における各ノードのエントリ数を制限したディレクトリ構造によって、データを記憶する木構造型データ記憶装置において、
最上位層のルートノードから更新対象となる最下位層の葉ノードまでの経路において、排他ロックを設定する旨を示すインテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返し、前記エントリ数が予め定めた制限未満である最も下位の第1の非フルエントリノードを探索するとともに、前記葉ノードに対して排他ロックを設定し、前記葉ノードのエントリ数が予め定めた制限未満である場合に前記葉ノードの更新を行い、前記エントリ数が予め定めた制限を超過する場合に前記葉ノードの更新を行わずに排他ロックを解放する第1フェーズ実行手段と、
前記ルートノードから前記第1の非フルエントリノードの親ノードまでの経路において、前記インテント排他ロックを下位層に対して設定し、その上位層に対する前記インテント排他ロックの設定を解放する手順を下位層に向かって繰り返すとともに、前記エントリ数が予め定めた制限未満である最も下位の第2の非フルエントリノードを探索する第2フェーズ実行手段とを備え、
この第2フェーズ実行手段が、
前記第1の非フルエントリノードから前記葉ノードまでの経路において、各ノードに排他ロックを設定する排他ロック設定手段と、
この排他ロック設定手段で設定した排他ロックが、前記葉ノードの更新に伴う木構造の変化に関連するノードに対して設定されているかどうかを判定する排他ロック有効判定手段と、
前記木構造の変化に関連するノードに対して排他ロックが設定されていると判定された場合に、前記葉ノードの更新を行うノード更新手段と、
前記木構造の変化に関連するノードに対して排他ロックが設定されていないと判定された場合に、前記第2の非フルエントリノードを前記第1の非フルエントリノードとして設定するノード再設定手段と、
を備えていることを特徴とする木構造型データ記憶装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2006−228060(P2006−228060A)
【公開日】平成18年8月31日(2006.8.31)
【国際特許分類】
【出願番号】特願2005−43023(P2005−43023)
【出願日】平成17年2月18日(2005.2.18)
【出願人】(304021417)国立大学法人東京工業大学 (1,821)
【出願人】(000004352)日本放送協会 (2,206)
【Fターム(参考)】
【公開日】平成18年8月31日(2006.8.31)
【国際特許分類】
【出願日】平成17年2月18日(2005.2.18)
【出願人】(304021417)国立大学法人東京工業大学 (1,821)
【出願人】(000004352)日本放送協会 (2,206)
【Fターム(参考)】
[ Back to top ]