説明

インデックス更新データ作成装置、作成方法及びプログラム

【課題】データベースのインデックスの差分更新を行うインデックス更新装置の処理負担を軽減する手法を提供する。
【解決手段】更新前のデータベースのインデックスキーを格納した差分ツリーを取得する手段と、更新前のデータベースのインデックスと更新後のデータベースのインデックスの差分データを取得する手段と、差分データに基づき差分ツリーを更新し、更新された差分ツリーのうち更新されたノードの位置情報である更新位置とそのノードの内容である更新ノードからなるインデックスの更新データを作成する手段を備えたインデックス更新データ作成装置。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データベースのインデックスの更新処理に関し、特に、インデックス更新に用いるインデックス更新データの作成処理とそのインデックス更新データによるインデックス更新処理に関する。
【背景技術】
【0002】
近年、社会の情報化が進展し、大規模なデータベースが各所で利用されるようになってきている。また、カーナビゲーション用の地図データのように販売数の非常に大きなデータベースも存在する。
【0003】
このようなデータベースシステムの機能として、データの更新機能は必須である。データベースに保管されるデータ量が増大するのに伴って、例えばバッチ処理により既存のデータベースに対して大量のデータの追加や削除を行おうとすると、その作業に要する時間が長くなるという不都合が生じている。
【0004】
データベースのバッチ更新の態様としては、既存のデータベースに対する追加、変更あるいは削除データによりデータベースを更新する差分更新という態様と、既存のデータベースを新しいデータベースでそっくり置き換える態様が存在する。
【0005】
後者のデータベース更新の態様は、例えばデータベースのデータの供給者が、データベースの更新が必要になったときにデータベースの更新データを供給するのではなく、データを更新済みの新しい版のデータベースを改めて供給する場合に採用される。しかし、このようなデータベースの更新の態様では、更新作業中はデータベースの利用ができないことから、この更新作業に長時間を要するのでは不便である。
【0006】
また、データベースは、データベース本体のデータ部分とデータベース本体からデータを検索するためのインデックスから構成されるのが通例である。そこで、データベースの更新の態様には、インデックス部分を更新する態様があり、この部分の更新においても、更新後のインデックス全体が供給され、更新前のインデックスとそっくり入れ替える場合がある。
【0007】
例えばカーナビゲーションシステムの地図データのインデックスを更新する場合には、地図データの販売業者から購入した新しい地図データのインデックスデータを、カーナビゲーションシステムの販売業者あるいは車のディーラーのセンターから、カーナビゲーションシステムを搭載した各車に配布し、搭載されたカーナビゲーションシステムごとに、インデックスデータを更新する。このように、新しいインデックスデータ全体を配布するため、配布するデータ量が多く、また各カーナビゲーションシステムにおける地図データの更新時間も長いものとなる。
【0008】
そこで、インデックデータの追加、変更あるいは削除データの供給を受けるか、あるいはインデックスデータの新旧データから差分データを抽出して差分更新により、データベースを更新することが行われている。
下記特許文献1には、ナビゲーション端末で用いられる地図データの差分更新について記載されている。
【0009】
上述のデータベースの差分更新を行うためには、データベースから更新対象のレコードの検索を行う必要がある。データベースからレコードを検索するには、各レコードの記憶されたアドレスと対応づけられたレコード内の項目をインデックスキーとして検索をし、所望のレコードを探し出すことが通例である。また、全文検索における文字列も、文書のインデックスキーと見なすことができる。
そして、それらのインデックスキーはビット列で表現されることから、データベースの検索はビット列の検索に帰着されるということができる。
【0010】
ビット列の検索処理手法については、種々のものが知られている。それらのなかでも、ビット列の検索を高速に行うために、ビット列を記憶するデータ構造を種々に工夫することが行われている。このようなものの一つとして、下記特許文献2、3に記載された、カップルドノードツリーというデータ構造を用いた検索手法がある。
【0011】
カップルドノードツリーは、ツリーの始点であるルートノードと、隣接した記憶領域に配置される2つのノードで構成されるツリーの構成要素としてのノード対を有する。ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、ブランチノードは、ノード種別に加えて、検索キーの弁別ビット位置を格納する領域とリンク先のノード対の一方のノードである代表ノードの位置を示す情報を格納する領域を含むが、検索対象のビット列からなるインデックスキーを格納する領域を含まないものである。リーフノードは、ノード種別に加えて、検索対象のビット列からなるインデックスキーを格納する領域を含むが、検索キーの弁別ビット位置を格納する領域とリンク先の代表ノードの位置を示す情報を格納する領域を含まないものである。
【0012】
上記カップルドノードツリーの任意のノードを検索開始ノードとして、各ブランチノードの弁別ビット位置に位置する検索キーのビット値に応じてリンク先を選択し、リーフノードに至ることにより、リーフノードに格納されたインデックスキーを検索キーによる検索結果キーとして取得する。
以下において、カップルドノードツリーとそれを用いた検索処理について、さらに説明する。その説明では、カップルドノードツリーは配列に格納されたものとする。ブランチノードが保持する代表ノードの位置を示すデータとして、記憶装置のアドレス情報とすることもできるが、ブランチノードあるいはリーフノードのうち占有する領域の記憶容量の大きい方を格納可能な配列要素からなる配列を用いることにより、ノードの位置を配列番号で表すことができ、位置情報の情報量を削減することができる。
【0013】
図1は、配列に格納されたカップルドノードツリーの構成例を説明する図である。
図1を参照すると、ノード101が配列100の配列番号10の配列要素に配置されている。ノード101はノード種別102、弁別ビット位置103及び代表ノード番号104で構成されている。ノード種別102は0であり、ノード101がブランチノードであることを示している。弁別ビット位置103には1が格納されている。代表ノード番号104にはリンク先のノード対の代表ノードの配列番号20が格納されている。なお、以下では表記の簡略化のため、代表ノード番号に格納された配列番号を代表ノード番号ということもある。また、代表ノード番号に格納された配列番号をそのノードに付した符号あるいはノード対に付した符号で表すこともある。
【0014】
配列番号20の配列要素には、ノード対111の代表ノードであるノード[0]112が格納されている。そして隣接する次の配列要素(配列番号20+1)に代表ノードと対になるノード[1]113が格納されている。ノード[0]112のノード種別114には0が、弁別ビット位置115には3が、代表ノード番号116には30が格納されている。またノード[1]113のノード種別117には1が格納されており、ノード[1]113がリーフノードであることを示している。インデックスキー118には、“0001”が格納されている。パトリシアツリーについて先に述べたと同様に、リーフノードにインデックスキーと対応するレコードにアクセスする情報が含まれることは当然であるが、表記は省略している。
【0015】
なお、代表ノードをノード[0]で表し、それと対になるノードをノード[1]で表すことがある。また、ある配列番号の配列要素に格納されたノードを、その配列番号のノードということがあり、ノードの格納された配列要素の配列番号を、ノードの配列番号ということもある。
配列番号30及び31の配列要素に格納されたノード122とノード123からなるノード対121の内容は省略されている。
【0016】
ノード[0]112、ノード[1]113、ノード122、及びノード123の格納された配列要素にそれぞれ付された0あるいは1は、検索キーで検索を行う場合にノード対のどちらのノードにリンクするかを示すものである。前段のブランチノードの弁別ビット位置にある検索キーのビット値である0か1を代表ノード番号に加えた配列番号のノードにリンクする。
したがって、前段のブランチノードの代表ノード番号に、検索キーの弁別ビット位置のビット値を加えることにより、リンク先のノードが格納された配列要素の配列番号を求めることができる。
なお、上記の例では代表ノード番号をノード対の配置された配列番号のうち小さい方を採用しているが、大きいほうを採用することも可能であることは明らかである。
【0017】
図2は、カップルドノードツリーのツリー構造を概念的に示す図である。
符号210aで示すのがルートノードである。図示の例では、ルートノード210aは配列番号220に配置されたノード対201aの代表ノードとしている。
ツリー構造としては、ルートノード210aの下にノート対201bが、その下層にノード対201cとノード対201fが配置され、ノード対201fの下層にはノード対201hとノード対201gが配置されている。ノード対201cの下にはノード対201dが、さらにその下にはノード対201eが配置されている。
各ノードの前に付された0あるいは1の符号は、図1において説明した配列要素の前に付された符号と同じである。検索キーの弁別ビット位置のビット値に応じてツリーをたどり、検索対象のリーフノードを見つけることになる。
【0018】
図示された例では、ルートノード210aのノード種別260aは0でブランチノードであることを示し、弁別ビット位置230aは0を示している。代表ノード番号は220aであり、それはノード対201bの代表ノード210bの格納された配列要素の配列番号である。
【0019】
ノード対201bはノード210bと211bで構成され、それらのノード種別260b、261bはともに0であり、ブランチノードであることを示している。ノード210bの弁別ビット位置230bには1が格納され、リンク先の代表ノード番号にはノード対201cの代表ノード210cの格納された配列要素の配列番号220bが格納されている。
【0020】
ノード210cのノード種別260cには1が格納されているので、このノードはリーフノードであり、したがって、インデックスキーを含んでいる。インデックスキー250cには“000111”が格納されている。一方ノード211cのノード種別261cは0、弁別ビット位置231cは2であり、代表ノード番号にはノード対201dの代表ノード210dの格納された配列要素の配列番号221cが格納されている。
【0021】
ノード210dのノード種別260dは0、弁別ビット位置230dは5であり、代表ノード番号にはノード対201eの代表ノード210eの格納された配列要素の配列番号220dが格納されている。ノード210dと対になるノード211dのノード種別261dは1であり、インデックスキー251dには“011010”が格納されている。
ノード対201eのノード210e、211eのノード種別260e、261eはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250e、251eにはインデックスキーとして“010010”と“010011”が格納されている。
【0022】
ノード対201bのもう一方のノードであるノード211bの弁別ビット位置231bには2が格納され、リンク先の代表ノード番号にはノード対201fの代表ノード210fの格納された配列要素の配列番号221bが格納されている。
ノード対201fのノード210f、211fのノード種別260f、261fはともに0であり双方ともブランチノードである。それぞれの弁別ビット位置230f、231fには5、3が格納されている。ノード210fの代表ノード番号にはノード対201gの代表ノード210gの格納された配列要素の配列番号220fが格納され、ノード211fの代表ノード番号にはノード対201hの代表ノードであるノード[0]210hの格納された配列要素の配列番号221fが格納されている。
【0023】
ノード対201gのノード210g、211gのノード種別260g、261gはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250g、251gには“100010”と“100011”が格納されている。
また同じくノード対201hの代表ノードであるノード[0]210hとそれと対をなすノード[1]211hのノード種別260h、261hはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250h、251hには“101011”と“101100“が格納されている。
【0024】
以下、上述のツリーからインデックスキー“100010”を検索する処理の流れを簡単に説明する。弁別ビット位置は、左から0、1、2、・・・とする。
まず、ビット列“100010”を検索キーとしてルートノード210aから処理をスタートする。ルートノード210aの弁別ビット位置230aは0であるので、検索キー“100010”の弁別ビット位置が0のビット値をみると1である。そこで代表ノード番号の格納された配列番号220aに1を加えた配列番号の配列要素に格納されたノード211bにリンクする。ノード211bの弁別ビット位置231bには2が格納されているので、検索キー“100010”の弁別ビット位置が2のビット値をみると0であるから、代表ノード番号の格納された配列番号221bの配列要素に格納されたノード210fにリンクする。
【0025】
ノード210gのノード種別260gは1でありリーフノードであることを示しているので、インデックスキー250gを読み出して検索キーと比較すると両方とも“100010”であって一致している。このようにしてカップルドノードツリーを用いた検索が行われる。
【0026】
次に、図2を参照してカップルドノードツリーの構成の意味について説明する。
カップルドノードツリーの構成はインデックスキーの集合により規定される。図2Bの例で、ルートノード210aの弁別ビット位置が0であるのは、図2Bに例示されたインデックスキーに0ビット目が0のものと1のものがあるからである。0ビット目が0のインデックスキーのグループはノード210bの下に分類され、0ビット目が1のインデックスキーのグループはノード211bの下に分類されている。
【0027】
ノード211bの弁別ビット位置が2であるのは、ノード211h、210h、211g、210gに格納された0ビット目が1のインデックスキーの1ビット目がすべて0で等しく、2ビット目で初めて異なるものがあるという、インデックスキーの集合の性質を反映している。
以下0ビット目の場合と同様に、2ビット目が1であるものはノード211f側に分類され、2ビット目が0であるものはノード210f側に分類される。
そして2ビット目が1であるインデックスキーは3ビット目の異なるものがあるのでノード211fの弁別ビット位置には3が格納され、2ビット目が0であるインデックスキーでは3ビット目も4ビット目も等しく5ビット目で異なるのでノード210fの弁別ビット位置には5が格納される。
【0028】
ノード211fのリンク先においては、3ビット目が1のものと0のものがそれぞれ1つしかないことから、ノード210h、211hはリーフノードとなり、それぞれインデックスキー250hと251hに“101011”と“101100”が格納されている。
仮にインデックスキーの集合に“101100”の代わりに“101101”か“101110”が含まれていたとしても、3ビット目までは“101100”と等しいので、ノード211hに格納されるインデックスキーが変わるだけで、ツリー構造自体は変わることはない。しかし、“101100”に加えて“101101”が含まれていると、ノード211hはブランチノードとなり、その弁別ビット位置は5になる。追加されるインデックスキーが“101110”であれば、弁別ビット位置は4となる。
【0029】
以上説明したように、カップルドノードツリーの構造は、インデックスキーの集合に含まれる各インデックスキーの各ビット位置のビット値により決定される。
そしてさらにいえば、異なるビット値となるビット位置ごとにビット値が“1”のノードとビット値が“0”のノードとに分岐していることから、ノード[1]側とツリーの深さ方向を優先させてリーフノードをたどると、それらに格納されたインデックスキーは、ノード211hのインデックスキー251hの“101100”、ノード210hのインデックスキー250hの“101011”、・・・、ノード210cのインデックスキー250cの“000111”となり降順にソートされている。
すなわち、カップルドノードツリーにおいては、インデックスキーはソートされてツリー上に配置されている。
【0030】
検索キーで検索するときはインデックスキーがカップルドノードツリー上に配置されたルートをたどることになり、例えば検索キーが“101100”であればノード211hに到達することができる。また、上記説明からも想像がつくように、“101101”か“101110”を検索キーとした場合でもノード211hにたどり着く。インデックスキー251hと比較することにより検索が失敗したとすることもできるし、インデックスキー251hである“101100”を検索結果キーとすることもできる。
【0031】
また、例えば“100100”で検索した場合でも、ノード210a、211b、210fのリンク経路では検索キーの3ビット目と4ビット目は使われることがなく、“100100”の5ビット目が0なので、“100010”で検索した場合と同様にノード210gに到達することになる。このように、カップルドノードツリーに格納されたインデックスキーのビット構成に応じた弁別ビット位置を用いて分岐が行われる。
【0032】
次に、上述のカップルドノードツリーを用いた検索処理、及びカップルドノードツリーの挿入削除処理について説明する。以下の説明においては、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域が用いられる。また、あるデータ格納領域に格納されるデータ自体にデータ格納領域の符号を付して説明する場合があるし、データ自体の名前をそのデータを格納する一時記憶領域の名前として用いることもある。
【0033】
図3は、下記特許文献3に開示されたビット列検索の基本動作を示したフローチャートである。
まず、ステップS301で、検索開始ノードの配列番号を取得する。取得された配列番号に対応する配列は、カップルドノードツリーを構成する任意のノードを格納したものである。検索開始ノードの指定は、オペレータからの入力によってもよいし、図3に例示する処理を利用するアプリケーションプログラムによるものでもよい。
取得された検索開始ノードの配列番号は、図示しない検索開始ノード設定エリアに設定されるが、この検索開始ノード設定エリアは、先に述べた「処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域」の一つである。以下の説明では、「図示しない検索開始ノード設定エリアに設定する」のような表現に変えて、「検索開始ノードの配列番号を得る。」、「検索開始ノードとして設定する」あるいは単に「検索開始ノードに設定する」のように記述することもある。
【0034】
次に、ステップS302で、探索経路スタック310に取得された配列番号を格納し、ステップS303で、その配列番号に対応する配列要素を参照すべきノードとして読み出す。そして、ステップS304で、読み出したノードから、ノード種別を取り出し、ステップS305で、ノード種別がブランチノードであるか否かを判定する。
ステップS305の判定において、読み出したノードがブランチノードである場合は、ステップS306に進み、ノードから弁別ビット位置についての情報を取り出し、更に、ステップS307で、取り出した弁別ビット位置に対応するビット値を検索キーから取り出す。そして、ステップS308で、ノードから代表ノード番号を取り出して、ステップS309で、検索キーから取り出したビット値と代表ノード番号とを加算し、新たな配列番号として、ステップS302に戻る。
【0035】
以降、ステップS305の判定においてリーフノードと判定されてステップS310に進むまで、ステップS302からステップS309までの処理を繰り返す。ステップS310で、リーフノードからインデックスキーを検索結果キーとして取り出して、処理を終了する。
上述の説明では、カップルドノードツリーは配列に格納されているものとしたため、探索経路スタック310には配列番号を格納するとしたが、カップルドノードツリーが配列に格納されていない場合は、配列番号に替えてリンク先のノードの位置を示す情報が探索経路スタック310に格納される。
【0036】
次に、図4A〜図4Cにより下記特許文献2に開示されたカップルドノードツリーにおけるノード挿入処理を説明する。
図4Aは挿入処理の前段である検索処理の処理フローを示す図であり、図3に示した検索処理において、ルートノードを検索開始ノードとし、挿入キーを検索キーとしたものに相当する。
【0037】
ステップS401において、検索開始ノードの配列番号を設定するエリアにルートノードの配列番号を設定し、ステップS402において、検索キーに挿入キーを設定する。
次にステップS410において、図3に示す検索処理を実行し検索結果のインデックスキーを得て、ステップS411に進む。
ステップS411において挿入キーとインデックスキーを比較し、等しければ挿入キーは既にカップルドノードツリーに存在するのであるから、挿入は失敗となり、処理を終了する。等しくなければ次の処理、図4BのステップS412以下の処理に進む。
【0038】
図4Bは、挿入するノード対のための配列要素を準備する処理を説明する処理フロー図である。
ステップS412において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得する。
ステップS413に進み、挿入キーとステップS410で得たインデックスキーの大小を比較し、挿入キーが大きいときは値1を小さいときは値0のブール値を得る。
ステップS414に進み、ステップS412で得た代表ノードの配列番号にステップS413で得たブール値を加算した配列番号を得る。
ステップS415に進み、ステップS412で得た代表ノードの配列番号にステップS413で得たブール値の論理否定値を加算した配列番号を得る。
ステップS414で得た配列番号は、挿入キーをインデックスキーとして持つリーフノードが格納される配列要素の配列番号であり、ステップS415で得た配列番号は、そのリーフノードと対を成すブランチノードあるいはリーフノードが格納される配列要素のものである。
つまり、前段の検索処理で得られたリーフノードに格納されたインデックスキーと挿入キーの大小により、挿入されるノード対のうちどちらのノードに挿入キーを保持するリーフノードが格納されるかが決定される。
【0039】
次に図4CのステップS416以下の処理に進む。
図4Cは図4Bで準備された配列にノードを格納するとともにその挿入位置を求め、既存のノードの内容を変更して挿入処理を完成させる処理フローを示す図である。
ステップS416〜ステップS423までの処理は、挿入するノード対のカップルドノードツリー上の位置を求める処理であり、ステップS424以下の処理は各ノードにデータを設定して挿入処理を完成させる処理である。
【0040】
ステップS416で、挿入キーとステップS410で得たインデックスキーのビット列比較を例えば排他的論理和で行い、差分ビット列を得る。
ステップS417に進み、ステップS416で得た差分ビット列から、上位0ビット目から見た最初の不一致ビットのビット位置を得る。この処理は、例えばプライオリティエンコーダを有するCPUではそこに差分ビット列を入力し、不一致のビット位置を得ることができる。また、ソフト的にプライオリティエンコーダと同等の処理を行い最初の不一致ビットのビット位置を得ることも可能である。
【0041】
次にステップS418に進み、探索経路スタックのスタックポインタがルートノードの配列番号を指しているか判定する。指していればステップS424に移行し、指していなければステップS419に進む。
【0042】
ステップS419において、探索経路スタックのスタックポインタを1つ戻してそこにスタックされている配列番号を取り出す。
ステップS420に進み、ステップS419で取り出した配列番号の配列要素を配列からノードとして読み出す。
ステップS421に進み、ステップS420で読み出したノードから、弁別ビット位置を取り出す。
次にステップS422に進み、ステップS421で取り出した弁別ビット位置がステップS417で得たビット位置より上位の位置関係か判定する。ここで上位の位置関係とは、ビット列のより左側の位置、すなわちビット位置の値が小さい位置であることとする。
【0043】
ステップS422の判定結果が否定であれば、ステップS418に戻り、ステップS418での判定が肯定になるかステップS422での判定が肯定になるまで繰り返す。ステップS422での判定が肯定になると、ステップS423で経路探索スタックのスタックポインタを1つ進め、ステップS424以下の処理に移行する。
【0044】
上記ステップS416〜ステップS423で説明した処理は、挿入するノード対の挿入位置を決定するために、挿入するインデックスキーと検索により取得されたインデックスキーの間でビット列比較を行い、ビット列比較で異なるビット値となる先頭の(最上位の)ビット位置と探索経路スタックに格納されているブランチノードの弁別ビット位置との相対的位置関係を調べ、弁別ビット位置が上位となるブランチノードの次のブランチノードのリンク先を挿入するノード対の挿入位置とするものである。
また、経路探索スタック逆にたどりルートノードに至っても、ルートノードの弁別ビット位置が、先に求めたビット列比較で異なるビット値となる最上位のビット位置より上位のビット位置でないということは、そのカップルドノードツリーのインデックスキーの上位ビットで、ルートノードの弁別ビット位置より上位のビットの値は全て等しい場合である。そして、挿入するインデックスキーにおいて、初めてルートノードの弁別ビット位置より上位のビットの値に異なるビット値のものがあるということである。したがって、挿入するノード対はルートノードの直接のリンク先となり、ルートノードの弁別ビット位置は、既存のインデックスキーと異なる値である挿入キーの最上位ビットの位置に変わる。
【0045】
次に、ステップS424以下の各ノードにデータを設定して挿入処理を完成させる処理について説明する。
ステップS424では探索経路スタックからスタックポインタの指す配列番号を取り出す。
ステップS425において、ステップS414で得た配列番号の指す配列要素のノード種別に1(リーフノード)を、インデックスキーに挿入キーを書き込む。
ステップS426に進み、配列からステップS424で得た配列番号の配列要素を読み出す。
次にステップS427において、ステップS415で得た配列番号の配列要素にステップS426で読み出した内容を書き込む。
最後にステップS428において、ステップS424で得た配列番号の指す配列要素のノード種別に0(ブランチノード)を、弁別ビット位置にステップS417で得たビット位置を、代表ノード番号にステップS412で得た配列番号を書き込み、処理を終了する。
【0046】
図5は、下記特許文献2に開示されたカップルドノードツリーを生成する処理フロー例である。ルートノードの挿入処理と通常の挿入処理により、カップルドノードツリーが生成される。
ステップS501において、取得することを求められたカップルドノードツリーのルートノードの配列番号が登録済みであるか判定される。登録済みであれば、図4A〜図4Cを用いて説明した通常の挿入処理が行われる。
【0047】
ステップS501での判定が登録済みでなければ、まったく新しいカップルドノードツリーの登録、生成が始まることになる。
まず、ステップS502において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得する。次にステップS503において、ステップS502で得た配列番号に0を加えた配列番号を求める。(実際には、ステップS502で取得した配列番号に等しい。)。さらにステップS504において、ステップS503で得た配列番号の配列要素に、挿入するルートノードのノード種別に1(リーフノード)とインデックスキーに挿入キーを書き込み、ステップS505で、ステップS502で取得したルートノードの配列番号を登録して処理を終了する。
【0048】
インデックスキーの集合があるとき、そこから順次インデックスキーを取り出し、図5及び図4A〜図4Cの処理を繰り返すことにより、インデックスキーの集合に対応した本発明のカップルドノードツリーを構築することができる。
【0049】
次に図6A、図6Bを参照して、下記特許文献2に開示されたカップルドノードツリーから、特定のインデックスキーを格納したリーフノードを削除する処理フローを説明する。
図6Aは、削除処理の前段である検索処理の処理フロー例を示す図であり、図3に示した検索処理において、ルートノードを検索開始ノードとし、挿入キーを検索キーとしたものに相当する。
【0050】
ステップS601において、検索開始ノードの配列番号を設定するエリアにルートノードの配列番号を設定し、ステップS602において、検索キーに削除キーを設定する。
次にステップS610において、図4に示す検索処理を実行し検索結果のインデックスキーを得て、ステップS611に進む。
図6AのステップS611において削除キーとインデックスキーを比較し、等しくなければければ削除するインデックスキーはカップルドノードツリーに存在しないのであるから、削除は失敗となり、処理を終了する。等しければ次の処理、図6BのステップS612以下の処理に進む。
【0051】
図6Bは、削除処理の後段の処理フローを説明する図である。
まず、ステップS612で探索経路スタックに2つ以上の配列番号が格納されているか判定する。2つ以上の配列番号が格納されていないということは、言い換えれば1つだけで、その配列番号はルートノードの格納された配列要素のものである。その場合はステップS618に移行し、ステップS601で得たルートノードの配列番号に係るノード対を削除する。次にステップS619に進み、登録されていたルートノードの配列番号を削除して処理を終了する。
【0052】
ステップS612において探索経路スタックに2つ以上の配列番号が格納されていると判定されたときはステップS613に進み、ステップS610で参照するする図3に示す処理フローのステップS308で得た代表ノード番号にステップS307で得たビット値を反転した値を加算した配列番号を得る。この処理は、削除対象のインデックスキーが格納されたリーフノードと対をなすノードの配置された配列番号を求めるものである。
【0053】
次にステップS614において、ステップS613で得た配列番号の配列要素の内容を読み出し、ステップS615において探索経路スタックのスタックポインタを1つ戻して配列番号を取り出す。
次にステップS616に進み、ステップS614で読み出した配列要素の内容をステップS615で得た配列番号の配列要素に上書きする。この処理は、削除対象のインデックスキーが格納されたリーフノードへのリンク元であるブランチノードを上記リーフノードと対をなすノードに置き換えるものである。
最後にステップS617において、ステップS610で参照するする図3に示す処理フローのステップS308で得た代表ノード番号に係るノード対を削除して処理を終了する。
【先行技術文献】
【特許文献】
【0054】
【特許文献1】特開2007−240492号公報
【特許文献2】特開2008−015872号公報
【特許文献3】特開2008−112240号公報
【発明の概要】
【発明が解決しようとする課題】
【0055】
本発明が解決しようとする課題は、データベースのインデックスの更新を行うインデックス更新装置の処理負担を軽減する手法を提供することである。
【課題を解決するための手段】
【0056】
本発明のインデックス更新データ作成装置は、更新前のデータベースのインデックスキーを格納したカップルドノードツリーである差分ツリーを取得する差分ツリー取得手段と、更新前のデータベースのインデックスと更新後のデータベースのインデックスの差分データを取得する差分データ取得手段と、差分データに基づき差分ツリーを更新し、該更新された差分ツリーのうち更新されたノードの位置情報である更新位置とそのノードの内容である更新ノードからなるインデックスの更新データを作成する更新データ作成手段と、を備える。
また、本発明のインデックス更新装置は、更新前のデータベースのインデックスキーを格納したカップルドノードツリーである更新ツリーを取得する更新ツリー取得手段と、インデックス更新データ作成装置から更新すべき更新ツリーのノードの位置情報である更新位置とそのノードの内容である更新ノードからなるインデックスの更新データを取得する更新データ取得手段と、更新データの更新位置のノードの内容を更新ノードで書き換えることにより更新ツリーを更新する更新ツリー更新手段と、を備える。
【発明の効果】
【0057】
本発明によれば、インデックス更新データ作成装置が、差分データに基づいてインデックス更新装置が更新すべきデータの位置とその内容を作成するので、インデックス更新装置の処理負担は大幅に削減される。
【図面の簡単な説明】
【0058】
【図1】配列に格納されたカップルドノードツリーの構成例を説明する図である。
【図2】カップルドノードツリーのツリー構造を概念的に示す図である。
【図3】ビット列検索の基本動作例を示すフローチャートである。
【図4A】挿入処理の前段である検索処理の処理フロー例を示す図である。
【図4B】挿入するノード対の配列要素を準備する処理フロー例を示す図である。
【図4C】ノード対を挿入する位置を求め、ノード対の各ノードの内容を書き込んで挿入処理を完成させる処理フロー例を示す図である。
【図5】カップルドノードツリーを生成する処理フロー例を示す図である。
【図6A】削除処理の前段である検索処理の処理フロー例を示す図である。
【図6B】削除処理の後段の処理フロー例を示す図である。
【図7】本発明の原理を説明する図である。
【図8A】インデックス更新データ作成装置の機能ブロック構成例を説明する図である。
【図8B】インデックス更新装置の機能ブロック構成例を説明する図である。
【図9】本発明を実施するためのハードウェア構成例を説明する図である。
【図10】差分データによる更新データ作成処理の概要を説明する図である。
【図11】差分データによる更新データ作成の処理フロー例を示す図である。
【図12A】差分ツリーに更新種別が挿入である差分データのインデックスキーを挿入して更新データを作成する処理フロー例を示す図である。
【図12B】差分ツリーから更新種別が削除である差分データのインデックスキーを削除して更新データを作成する処理フロー例を示す図である。
【図13A】本発明の一実施の形態における差分データに基づく更新データ作成処理の流れを説明する図である。
【図13B】本発明の一実施の形態における差分データに基づく更新データ作成処理の流れを説明する図である。
【図13C】本発明の一実施の形態における差分データに基づく更新データ作成処理の流れを説明する図である。
【図13D】本発明の一実施の形態における差分データに基づく更新データ作成処理の流れを説明する図である。
【図13E】本発明の一実施の形態における差分データに基づく更新データ作成処理の流れを説明する図である。
【図14】更新データによるインデックス更新処理の概要を説明する図である。
【図15】更新データによるインデックス更新の処理フロー例を示す図である。
【図16A】本発明の一実施の形態における更新データに基づく更新ツリーの更新処理の流れを説明する図である。
【図16B】本発明の一実施の形態における更新データに基づく更新ツリーの更新処理の流れを説明する図である。
【図16C】本発明の一実施の形態における更新データに基づく更新ツリーの更新処理の流れを説明する図である。
【図16D】本発明の一実施の形態における更新データに基づく更新ツリーの更新処理の流れを説明する図である。
【図16E】本発明の一実施の形態における更新データに基づく更新ツリーの更新処理の流れを説明する図である。
【発明を実施するための形態】
【0059】
図7を参照して、本発明の原理を説明する。本発明に係る差分更新システムは、インデックス更新データ作成装置300と任意の数のインデックス更新装置400a、400bから構成される。なお、どのインデックス更新装置についての説明は同じであるので、以下の説明では、インデックス更新装置400のように表記する場合がある。インデックス更新装置の構成要素についても同様に表記する場合がある。
インデックス更新データ作成装置300は、インデックスを格納する配列309、差分データ格納領域320、及び更新データ格納領域322を含む。差分データ格納領域320には、差分データとして、挿入データである挿入キーと削除データである削除キーが取得され、格納される。差分データの取得方法は、データベースの供給元から提供を受けるものであってもよいし、データベース供給元から新インデックスを受領し、旧インデックスとの差分を抽出するものであってもよい。
【0060】
インデックス更新データ作成装置300は、旧インデックスであるインデックスキーを格納したカップルドノードツリー(旧差分ツリー)3090に対して、差分データ格納領域320に格納された挿入キーと削除キーによる挿入処理と削除処理を実行し、新インデックスに対応した新差分ツリー3091を得る。図7の例では、差分ツリーは配列に配置されているが、先にも述べたとおり、配列に配置することは必須ではない。
【0061】
上記挿入処理時及び削除処理時に得られる情報を基に、インデックス更新データ作成装置300は、インデックス更新装置400においてインデックスの更新に用いられる更新データ380を作成して更新データ格納領域322に格納する。更新データ380は、更新対象のノードの位置を示す更新位置383と更新内容である更新ノード384を含む。
【0062】
更新データ格納領域322に格納された更新データ380は、この更新データを用いてデータベースのインデックスを更新するインデックス更新装置400に送信される。更新データ380の送信は、無線、有線あるいはそれらを組み合わせた通信回線を用いたもの、記憶媒体を用いたもの、通信回線と記憶媒体を組み合わせたものなどで実現される。
【0063】
インデックス更新装置400に送信された更新データ380は、更新データ格納領域420に格納される。インデックス更新装置400は、旧インデックスであるインデックスキーを格納したカップルドノードツリー(旧更新ツリー)4090のノード、すなわち旧更新ツリーの配置された配列409aの配列要素の内容に対して、更新データ格納領域420に格納された更新データ380による書換処理を実行し、新インデックスに対応した新更新ツリー4091を得る。
【0064】
インデックス更新装置400における更新ツリーに格納されたインデックスキーの更新は、カップルドノードツリーの挿入処理や削除処理によるのではなく、更新ツリーの配置された配列の配列要素の内容を書き換えることにより実現されるので、インデックス更新装置400における処理負担を軽減させることができる。
【0065】
図8Aは、インデックス更新データ作成装置の機能ブロック構成例を説明する図である。
インデックス更新データ作成装置300は、差分ツリー取得手段330、差分データ取得手段340、及び更新データ作成手段350を含んで構成される。
【0066】
差分ツリー取得手段330は、図7に示す旧インデックスであるインデックスキーを格納したカップルドノードツリー(旧差分ツリー)3090を取得するものである。旧インデックスであるインデックスキーが既にカップルドノードツリーに格納されていれば、それを旧差分ツリー3090とする。そうでなければ、インデックスキーを取り出して図5に示すカップルドノードツリーの生成処理を実行して生成したカップルドノードツリーを旧差分ツリーとする。
【0067】
差分データ取得手段は、差分データとして、挿入データである挿入キーと削除データである削除キーを取得し、差分データ格納領域320に格納する。差分データの取得方法は、先に述べたように、データベースの供給元から提供を受けるものであってもよいし、データベース供給元から新インデックスを受領し、旧インデックスとの差分を抽出するものであってもよい。
【0068】
更新データ作成手段350は、差分データ取得手段340で取得された差分データに基づき差分ツリー取得手段330で取得された差分ツリーを更新し、インデックス更新装置400において用いるインデックスの更新データを作成する。更新データ作成手段350は、挿入データ作成手段352、削除データ作成手段354及び更新種別判定手段356を含む。更新種別判定手段356は、差分データが挿入データであるか削除データであるか判定する。挿入データ作成手段352は、挿入データに基づいて更新データを作成し、削除データ作成手段354は、削除データに基づいて更新データを作成する。
それぞれの手段の詳細な動作は、後に図10〜図13Eを参照して説明する。
【0069】
図8Bは、インデックス更新装置の機能ブロック構成例を説明する図である。
インデックス更新装置400は、更新ツリー取得手段430、更新データ取得手段440、及び更新ツリー更新手段350を含んで構成される。
【0070】
更新ツリー取得手段430は、図7に示す旧インデックスであるインデックスキーを格納したカップルドノードツリー(旧更新ツリー)4090を取得するものである。旧インデックスであるインデックスキーが既にカップルドノードツリーに格納されていれば、それを旧更新ツリー4090とする。そうでなければ、インデックスキーを取り出して図5に示すカップルドノードツリーの生成処理を実行して生成したカップルドノードツリーを旧更新ツリーとする。
【0071】
更新データ取得手段440は、インデックス更新データ作成装置300から送信された更新データを受信して更新データ格納装置420に格納する。更新データの送信方法は、先に述べたとおりのものである。
【0072】
更新ツリー更新手段450は、旧インデックスであるインデックスキーを格納したカップルドノードツリー(旧更新ツリー)4090のノード、すなわち旧更新ツリーの配置された配列409の配列要素の内容に対して、更新データ取得手段440において取得され、更新データ格納領域420に格納された更新データによる書換処理を実行し、新インデックスに対応した新更新ツリー4091を得る。
【0073】
図9は、本発明を実施するためのハードウェア構成例を説明する図である。図に示すように、本発明を実施するためのハードウェアは、インデックス更新データ作成装置300とインデックス更新装置400a〜400xで構成される。インデックス更新装置400a〜400xの数は任意である。
【0074】
本発明のインデックス更新データ作成装置300による更新データ作成は中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。カップルドノードツリーが配置される配列309と検索中にたどるノードが格納された配列要素の配列番号を記憶する探索経路スタック310、差分データを格納する差分データ格納領域320及び作成済みの更新データを格納する更新データ格納領域322を有するデータ格納装置308は、主記憶装置305または外部記憶装置306で実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。
【0075】
図9の例示では、主記憶装置305、外部記憶装置306及び通信装置307が一本のバス304によりデータ処理装置301に接続されているが、接続方法はこれに限るものではない。また、主記憶装置305をデータ処理装置301内のものとすることもできるし、探索経路スタック310を中央処理装置302内のハードウェアとして実現することも可能である。あるいは、更新データ格納領域322及び差分データ格納領域320は外部記憶装置306に、探索経路スタック310を主記憶装置305に持つなど、使用可能なハードウェア環境、インデックスキー集合の大きさ等に応じて適宜ハードウェア構成を選択できることは明らかである。
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域が用いられることは当然である。
【0076】
インデックス更新データ作成装置300において作成された更新データは、インデックス更新装置400a〜400xに送られ、それぞれの差分データ格納領域420a〜420xに格納され、それぞれのインデックス格納領域である配列409a〜409xに格納された旧データを新データに更新するために用いられる。特に図示はしていないが、インデックス更新装置400a〜400xにおいても、データ処理装置や、差分データ格納領域、インデックス格納領域及びその他の記憶領域を有するデータ格納装置が備えられている。
なお、以下においては、上述の例えば差分データ格納領域320に格納された差分データを差分データ320と表記するように、あるデータ格納領域に格納されるデータ自体にデータ格納領域の符号を付して説明する場合がある。
【0077】
図10は、本発明の一実施形態における差分データにより更新データを作成する処理の概要を説明する図である。
図10に示す例では、差分データ格納領域320には、差分データ390a、390b、390c、390dが格納されている。各差分データは更新種別391と差分キー392で構成されている。
差分データ390aの更新種別は削除を意味する“d”、差分キーはキー321d“101011”である。差分データ390bの更新種別は“d”、差分キーはキー321b“010011”である。差分データ390cの更新種別は挿入を意味する“i”、差分キーはキー322c“100011”である。差分データ390dの更新種別は“i”、差分キーはキー322b“010110”である。
【0078】
更新処理の開始前の差分ツリー3090には、インデックスキーとして“101100”、“101011”、“100011”、“010011”、“010010”が格納されている。矢印331d及び矢印331bで示すように、更新種別が“d”である差分データのキー321dとキー321bにより差分ツリー3090の削除処理が行われ、矢印333で示すように、キー321dによる更新データ380aとキー321bによる更新データ380bが作成され、更新データ格納領域322に格納される。
【0079】
また、矢印332c及び矢印332bで示すように、更新種別が“i”である差分データのキー322cとキー322bにより挿入処理が行われ、更新後の差分ツリー3091にインデックスキーとして挿入される。そして、矢印334で示すように、キー322cによる更新データ380cとキー322bによる更新データ380dが作成され、更新データ格納領域322に格納される。
【0080】
上述の削除処理と挿入処理により、更新前の差分ツリー3090から符号321dで示すインデックスキー“101011”と符号321bで示すインデックスキー“100011”が削除され、点線の矢印で示すように、インデックスキー321e“101100”、321c“100011”、321a“010010”が更新後の差分ツリー3091に残る。また、差分ツリー3091にはインデックスキー322c、322bが挿入されている。
【0081】
次に、図11を参照して、差分データによる更新データ作成の処理フロー例を説明する。
図11に示すように、ステップS1101において差分ツリーを設定し、ステップS1102において差分データを設定する。差分ツリーの設定は、図8Aに示す差分ツリー取得手段330による差分ツリーの取得、すなわち差分ツリーのルートノードの配列番号を取得し設定することにより行われる。差分データの設定は、差分データ取得手段340により差分データを取得して差分データ格納領域320に格納することにより行われる。
【0082】
ステップS1103に進み、すべての差分データは処理済みか判定する。すべての差分データが処理済みであれば処理を終了し、すべての差分データが処理済みでなければ、ステップS1104に進む。
【0083】
ステップS1104では、差分データ格納領域から差分データを読み出し、読み出した差分データの差分キーを取り出し、ステップS1105において、差分データの更新種別を取り出す。
【0084】
次にステップS1106において、ステップS1105で取り出した更新種別を判定し、更新種別が削除であればステップS1107に進み、削除でなければステップS1108に進む。
【0085】
ステップS1107では、ステップS1104で取り出した差分キーを削除キーとして、差分ツリーより削除するとともに、更新データを作成し、ステップS1103に戻る。ステップS1107の処理の詳細は、後に図12Bを参照して説明する。
【0086】
ステップS1108では、ステップS1104で取り出したキーを挿入キーとして、差分ツリーに挿入するとともに、更新データを作成し、ステップS1103に戻る。ステップS1108の処理の詳細は、次に図12Aを参照して説明する。
上記ステップS1103〜ステップS1107、ステップS1108のループ処理を、ステップS1103において全ての差分データを処理済みと判定するまで繰り返し、全ての差分データを処理済みと判定すると処理を終了する。
全ての差分データの処理済みを判定するには、差分データ格納領域に格納された差分データ数をカウントしておき、1つ差分データを処理する毎に差分データ数をデクリメントする等、種々の手法を採用可能である。
【0087】
図12Aは、差分ツリーに更新種別が挿入である差分データの差分キーを挿入して更新データを作成する処理フロー例を示す図であり、図11に示すステップS1108の処理の詳細を説明するものである。
【0088】
まずステップ1201で、差分キーを挿入キーとして、差分ツリーに挿入する。ステップS1201の処理の詳細は、図4A〜図4Cを参照して説明したものである。
【0089】
次にステップS1202において、挿入したキーを含むリーフノードの配列番号とリーフノードの内容により第1の更新データを作成する。
挿入したキーを含むリーフノードの配列番号は、ステップS1201において図4Bに示すステップS414で得た配列番号であり、リーフノードの内容は、図4CのステップS425で書き込まれたものである。
【0090】
次にステップS1203において、挿入したキーを含むリーフノードと対をなす対ノードの配列番号と対ノードの内容により第2の更新データを作成する。
対ノードの配列番号は、ステップS1201において図4Bに示すステップS415で得た配列番号であり、対ノードの内容は、図4CのステップS427で書き込まれたものである。
【0091】
次にステップS1204において、挿入したキーを含むリーフノードの直近上位のブランチノードの配列番号とブランチノードの内容により第3の更新データを作成して処理を終了する。
ブランチノードの配列番号は、ステップS1201において図4Cに示すステップS424で探索経路スタックから取り出した配列番号であり、ブランチノードの内容は、図4CのステップS428で書き込まれたものである。
【0092】
図12Bは、差分ツリーから更新種別が削除である差分データの差分キーを削除して更新データを作成する処理フロー例を示す図であり、図11に示すステップS1107の処理の詳細を説明するものである。
【0093】
まずステップ1211で、差分キーを削除キーとして、差分ツリーより削除する。ステップS1211の処理の詳細は、図6A、図6Bを参照して説明したものである。
次にステップS1212において、削除したキーを格納していたリーフノードの直近上位のブランチノードの配列番号とリーフノードと対をなしていたノードの内容により更新データを作成して処理を終了する。
ブランチノードの配列番号は、ステップS1211において、図6Bに示すステップS615で探索経路スタックから取り出した配列番号であり、リーフノードと対をなしていたノードの内容は、図6Bに示すステップS616で書き込まれたものである。
【0094】
次に図13A〜図13Eを参照して、本発明の一実施の形態における、差分データによる更新データの作成処理の流れを差分データ390a〜390d毎に説明する。例に挙げる差分データと差分ツリーは、図10で例示したものと同一である。しかし、差分ツリーについては、ツリー構造を明記している。
【0095】
図13Aには、差分データ390aによる更新前の差分ツリー3090が記載されている。差分ツリー3090は、図2に例示したカップルドノードツリーからノード210g、211d、210cを除いたものに相当する。したがって、差分ツリー3090のノード210fには、図2に示すツリーのノード211gの内容が書き込まれており、また、差分ツリー3090のノード210bには、図2に示すツリーのノード210dの内容が書き込まれている。
そして、図13Aの矢印331aで示すように、差分データ390aの差分キー321dを削除キーとして削除処理を実行すると、ノード210hが削除の対象となる。
【0096】
図13Bには、差分データ390aによる更新後、差分データ390bによる更新前の差分ツリー3092が記載されている。
矢印333aで示すように、差分データ390aによる更新の結果、ノード211fの内容が、削除キーを含むリーフノード210hと対をなすノード211hの内容に変更されたので、差分データ390aによる更新前の差分ツリー3090のノード211hの内容を更新ノード384とし、リーフノード210hの直近上位のブランチノード211gの配列番号221b+1を更新位置とする更新データ380aが作成され、更新データ格納領域322に格納される。
そして、矢印331bで示すように、差分データ390bの差分キー321bを削除キーとして削除処理を実行すると、ノード211cが削除の対象となる。
【0097】
図13Cには、差分データ390bによる更新後、差分データ390cによる更新前の差分ツリー3093が記載されている。
矢印333bで示すように、差分データ390bによる更新の結果、ノード210bの内容が、削除キーを含むリーフノード210cと対をなすノード211cの内容に変更されたので、差分データ390bによる更新前の差分ツリー3092のノード211cの内容を更新ノード384とし、リーフノード210cの直近上位のブランチノード210bの配列番号220aを更新位置とする更新データ380bが作成され、更新データ格納領域322に格納される。
そして、矢印332cで示すように、差分データ390cの差分キー322cを挿入キーとして挿入処理を実行すると、ノード210fが検索結果キーを格納するリーフノードとして得られる。
【0098】
図13Dには、差分データ390cによる更新後、差分データ390dによる更新前の差分ツリー3094が記載されている。差分ツリー3094には、ノード対201gがノード210fの下に挿入され、挿入キーを含むリーフノードはノード210gである。
矢印341c、342c、343cは、差分データ390cによる更新により作成される3つの更新データ380cを示している。
矢印341cで示すように、挿入されたノード対201gのうち挿入キー322cを含むリーフノード210gの内容を第1の更新ノードとし、リーフノード210gの配列番号220fを第1の更新位置とする第1の更新データが作成され、更新データ格納領域322に格納される。
また、矢印342cで示すように、挿入キー322cを含むリーフノード210gと対をなすノード211gの内容を第2の更新ノードとし、ノード211gの配列番号220f+1を第2の更新位置とする第2の更新データが作成され、更新データ格納領域322に格納される。
さらに、矢印343cで示すように、リーフノード210gの直近上位のブランチノード210fの内容を第3の更新ノードとし、ブランチノード210fの配列番号221bを第3の更新位置とする第3の更新データが作成され、更新データ格納領域322に格納される。
そして、矢印332dで示すように、差分データ390dの差分キー322bを挿入キーとして挿入処理を実行すると、ノード210bが検索結果キーを格納するリーフノードとして得られる。
【0099】
図13Eには、差分データ390dによる更新後、すなわち全差分データによる更新後の差分ツリー3091が記載されている。差分ツリー3091には、ノード対201eがノード210bの下に挿入され、挿入キーを含むリーフノードはノード211eである。
矢印341d、342d、343dは、差分データ390dによる更新により作成される3つの更新データ380dを示している。
矢印341dで示すように、挿入されたノード対201eのうち挿入キー322dを含むリーフノード211eの内容を第1の更新ノードとし、リーフノード211eの配列番号220b+1を第1の更新位置とする第1の更新データが作成され、更新データ格納領域322に格納される。
また、矢印342dで示すように、挿入キー322dを含むリーフノード211eと対をなすノード210eの内容を第2の更新ノードとし、ノード210eの配列番号220bを第2の更新位置とする第2の更新データが作成され、更新データ格納領域322に格納される。
さらに、矢印343dで示すように、リーフノード211eの直近上位のブランチノード210bの内容を第3の更新ノードとし、ブランチノード210bの配列番号220aを第3の更新位置とする第3の更新データが作成され、更新データ格納領域322に格納される。
【0100】
図14は、インデックス更新装置で実行される更新データによるインデックス更新処理の概要を説明する図である。
更新データ格納領域420には、インデックス更新データ作成装置300から送信され、更新データ取得手段440で受信され格納された更新データ380a〜38d0dが設定されている。
更新データ380a、380bは、それぞれ差分データ390aのキー321d及び差分データ390bのキー321bを削除キーとした差分ツリーの削除処理により作成されたものである。
また、更新データ380c、380dは、それぞれ差分データ390cのキー322c及び差分データ390dのキー322bを挿入キーとした差分ツリーの挿入処理により作成されたものである。
【0101】
更新処理の開始前の更新ツリー4090にはインデックス更新データ作成装置300の更新処理前の差分ツリー3090(図10に示す)と同一のインデックスキーが格納されている。それだけではなく、配列の同一の配列番号の配列要素には差分ツリー3090と更新ツリー4090の同一のノードが配置されている。
【0102】
キー321dに基づく更新データ380a及びキー321bに基づく更新データ380bにより、更新ツリー4090からキー321d、321bが削除され、キー322cに基づく更新データ380c及びキー322bに基づく更新データ380dにより、更新ツリー4090にキー322c、322bが挿入されて更新後の差分ツリー4091が得られる。
【0103】
図15は、更新データによるインデックス更新の処理フロー例を示す図である。
図15に示すように、ステップS1501において更新ツリーを設定し、ステップS1502において更新データを設定する。更新ツリーの設定は、図8Bに示す更新ツリー取得手段430による差分ツリーの取得、すなわち更新ツリーのルートノードの配列番号を取得し設定することにより行われる。更新データの設定は、更新データ取得手段440により、インデックス更新データ作成装置から受信した更新データを更新データ格納領域420に格納することにより行われる。
【0104】
ステップS1503に進み、全ての更新データは処理済みか判定する。すべての更新データが処理済みであれば処理を終了し、すべての更新データが処理済みでなければ、ステップS1504に進む。
【0105】
ステップS1504では、更新データ格納領域から更新データを読み出し、読み出した更新データから、更新位置と更新ノードを取り出し、ステップS1505において、更新位置の指す更新ツリーの配列要素に、更新ノードを書き込み、ステップS1503に戻る。
上記ステップS1503〜ステップS1505のループ処理を、ステップS1503において全ての更新データを処理済みと判定するまで繰り返し、全ての更新データを処理済みと判定すると処理を終了する。
【0106】
本発明に係るインデックス更新装置は、上述のステップS1505の処理にあるように、更新データの更新位置の指す配列番号の配列要素を更新データの更新ノードで書き換えることにより、インデックスの更新を実行する。したがって、インデックス更新の処理負担は、更新ツリーの削除処理と挿入処理を行う場合と比べて軽くなる。
【0107】
次に図16A〜図16Eを参照して、本発明の一実施の形態における、更新データに基づく更新ツリーの書換処理の流れを更新データ380a〜380d毎に説明する。更新データは、インデックスデータ作成装置から送信されたものであるから、図13A〜図13Eで例示した更新データと同一である。また、図16A〜図16Eに示す更新ツリーの構造と各ノードの内容も、図13A〜図13Eで例示した差分ツリーとそれぞれ対応し、同一のものとなる。
【0108】
図16Aには、更新データ380aによる更新前の更新ツリー4090が記載されている。
図16Aの矢印360aで示すように、更新データ380aの更新位置383は221b+1であるので、ノード211fが書き換え対象となる。
【0109】
図16Bには、更新データ380aによる書き換え後、更新データ380bによる書き換え前の更新ツリー4092が記載されている。
ノード211fは、差分キー321dを格納していた更新ツリー4090のノード210hと対をなすノード211hに書き換えられている。
そして、図16Bの矢印360bで示すように、更新データ380bの更新位置383は220aであるので、ノード210bが書き換え対象となる。
【0110】
図16Cには、更新データ380bによる書き換え後、更新データ380cによる書き換え前の更新ツリー4093が記載されている。
ノード210bは、差分キー321bを格納していた更新ツリー4090のノード211cと対をなすノード210cに書き換えられている。
そして、矢印3601c、3602cで示すように、代表ノードの配列番号が220fである空ノード対201gが書き換え対象となる。また、矢印3603cで示すように、更新データ380cのうち第3の更新ノードの格納される配列要素の配列番号は221bなので、ノード210fが書き換え対象となる。
【0111】
図16Dには、更新データ380cによる書き換え後、更新データ380dによる書き換え前の更新ツリー4094が記載されている。
ノード210fは、更新データ380cの第3の更新ノードに書き換えられている。また、ノード210gには更新データ380cのうち第1の更新ノードが、ノード211gには第2の更新ノードが格納されている。
そして、矢印3601d、3602dで示すように、代表ノードの配列番号が220bである空ノード対201eが書き換え対象となる。また、矢印3603dで示すように、更新データ380dのうち第3の更新ノードの格納される配列要素の配列番号は220aなので、ノード210bが書き換え対象となる。
【0112】
図16Eには、更新データ380dによる書き換え後、すなわち全更新データによる書きかえ後の更新ツリー4091が記載されている。更新ツリー4091には、ノード対201eがノード210bの下に挿入され、挿入キーを含むリーフノードはノード211eである。
更新ツリー4091は差分ツリー3091と全く同一であり、このようにして、インデックス更新データ作成装置とインデックス更新装置の間のインデックスの同期をとることができる。
つまり、インデックス更新データ作成装置で作成される更新データは、差分データによる挿入処理や削除処理に関わらず、更新された差分ツリーのうち更新されたノードの位置情報である更新位置とそのノードの内容である更新ノードであり、インデックス更新装置において、更新データの更新位置のノードの内容を更新ノードで書き換えることにより更新ツリーを更新して、差分ツリーと更新ツリーを容易に同期させることができる。
【0113】
以上詳細に説明したところから明らかなとおり、本発明によればカップルドノードツリーを活用した、データベースのインデックスを旧データのものから新データに効率よく更新するためのインデックス更新データを提供することができ、また、本発明のインデックス更新データにより、インデックス更新装置の処理負担を軽減することができる。
また、本発明の実施の形態は上記に限ることなく種々の変形が可能であることは当業者に明らかである。さらに、本発明のインデックス更新データ作成装置及び作成方法、さらにはインデックス更新装置及び更新方法を、コンピュータに実行させるプログラムによりコンピュータ上で実現可能なことは明らかである。
したがって、上記プログラム、及びプログラムを記憶したコンピュータ読み取り可能な記憶媒体は、本発明の実施の形態に含まれる。
【符号の説明】
【0114】
300 インデックス更新データ作成装置
301 データ処理装置
302 中央処理装置
303 キャッシュメモリ
304 バス
305 主記憶装置
306 外部記憶装置
307 通信装置
308 データ格納装置
309 配列
310 探索経路スタック
320 差分データ格納領域
322 更新データ格納領域
330 差分ツリー取得手段
340 差分データ取得手段
350 更新データ作成手段
352 挿入データ作成手段
354 削除データ作成手段
356 更新種別判定手段
380 更新データ
383 更新位置
384 更新ノード
390 差分データ
391 更新種別
392 差分キー
400 インデックス更新装置
409 配列
420 更新データ格納領域
430 更新ツリー取得手段
440 更新データ取得手段
450 更新ツリー更新手段



【特許請求の範囲】
【請求項1】
データベースのインデックスの更新データを作成するインデックス更新データ作成装置と該更新データにより自装置のデータベースのインデックスを更新するインデックス更新装置から構成されるシステムにおける前記インデックス更新データ作成装置において、
更新前のデータベースのインデックスキーを格納したカップルドノードツリーである差分ツリーを取得する差分ツリー取得手段と、
更新前のデータベースのインデックスと更新後のデータベースのインデックスの差分データを取得する差分データ取得手段と、
前記差分データに基づき前記差分ツリーを更新し、該更新された差分ツリーのうち更新されたノードの位置情報である更新位置とそのノードの内容である更新ノードからなるインデックスの更新データを作成する更新データ作成手段と、
を備えることを特徴とするインデックス更新データ作成装置。
【請求項2】
請求項1に記載のインデックス更新データ作成装置において、
前記差分データは、更新対象であるインデックスキーと該インデックスキーが挿入されるものであるか削除されるものであるかを示す更新種別を含み、
前記更新データ作成手段は、前記更新種別を判定する更新種別判定手段と、該更新種別が挿入であると判定されたときに前記更新データを作成する挿入データ作成手段と、該更新種別が削除であると判定されたときに前記更新データを作成する削除データ作成手段とを含む、
ことを特徴とするインデックス更新データ作成装置。
【請求項3】
請求項2に記載のインデックス更新データ作成装置において、
前記挿入データ作成手段は、更新種別が挿入を示すものである前記差分データのインデックスキーを挿入キーとして、前記差分ツリーに該挿入キーを格納するリーフノードを挿入し、該リーフノードの内容を第1の更新ノードとし該リーフノードの位置情報を第1の更新位置とする第1の更新データと、該リーフノードと対をなす対ノードの内容を第2の更新ノードとし該対ノードの位置情報を第2の更新位置とする第2の更新データを作成するとともに、更新後の差分ツリーにおける前記リーフノードの直近上位のブランチノードの内容を第3の更新ノードとし該ブランチノードの位置情報を第3の更新位置とする第3の更新データを作成し、
前記削除データ作成手段は、更新種別が削除を示すものである前記差分データのインデックスキーを削除キーとして、前記差分ツリーから該削除キーと同一のインデックスキーを格納するリーフノードを削除し、該リーフノードと同一のノード対を構成するノードの内容を前記更新ノードとし更新前の差分ツリーにおける前記リーフノードの直近上位のノードの位置情報を前記更新位置として更新データを作成する、
ことを特徴とするインデックス更新データ作成装置。
【請求項4】
請求項1〜請求項3のいずれか1項に記載されたインデックス更新データ作成装置において、
前記差分ツリーは配列に記憶され、前記ノードの位置情報は、該ノードの配置された配列要素の配列番号であることを特徴とするインデックス更新データ作成装置。
【請求項5】
データベースのインデックスの更新データを作成するインデックス更新データ作成装置と該更新データにより自装置のデータベースのインデックスを更新するインデックス更新装置から構成されるシステムにおける前記インデックス更新データ作成装置がインデックスの更新データを作成するインデックス更新データ作成方法において、
更新前のデータベースのインデックスキーを格納したカップルドノードツリーである差分ツリーを取得する差分ツリー取得ステップと、
更新前のデータベースのインデックスと更新後のデータベースのインデックスの差分データを取得する差分データ取得ステップと、
前記差分データに基づき前記差分ツリーを更新し、該更新された差分ツリーのうち更新されたノードの位置情報である更新位置とそのノードの内容である更新ノードからなるインデックスの更新データを作成する更新データ作成ステップと、
を備えることを特徴とするインデックス更新データ作成方法。
【請求項6】
請求項5に記載のインデックス更新データ作成方法において、
前記差分データは、更新対象であるインデックスキーと該インデックスキーが挿入されるものであるか削除されるものであるかを示す更新種別を含み、
前記更新データ作成ステップは、前記更新種別を判定する更新種別判定ステップと、該更新種別が挿入であると判定されたときに前記更新データを作成する挿入データ作成ステップと、該更新種別が削除であると判定されたときに前記更新データを作成する削除データ作成ステップとを含む、
ことを特徴とするインデックス更新データ作成方法。
【請求項7】
請求項6に記載のインデックス更新データ作成方法において、
前記挿入データ作成ステップは、更新種別が挿入を示すものである前記差分データのインデックスキーを挿入キーとして、前記差分ツリーに該挿入キーを格納するリーフノードを挿入するステップと、該リーフノードの内容を第1の更新ノードとし該リーフノードの位置情報を第1の更新位置とする第1の更新データと、該リーフノードと対をなす対ノードの内容を第2の更新ノードとし該対ノードの位置情報を第2の更新位置とする第2の更新データを作成するステップと、更新後の差分ツリーにおける前記リーフノードの直近上位のブランチノードの内容を第3の更新ノードとし該ブランチノードの位置情報を第3の更新位置とする第3の更新データを作成するステップを含み、
前記削除データ作成ステップは、更新種別が削除を示すものである前記差分データのインデックスキーを削除キーとして、前記差分ツリーから該削除キーと同一のインデックスキーを格納するリーフノードを削除するステップと、該リーフノードと同一のノード対を構成するノードの内容を前記更新ノードとし更新前の差分ツリーにおける前記リーフノードの直近上位のノードの位置情報を前記更新位置として更新データを作成するステップを含む、
ことを特徴とするインデックス更新データ作成方法。
【請求項8】
請求項5〜請求項7のいずれか1項に記載されたインデックス更新データ作成方法において、
前記差分ツリーは配列に記憶され、前記ノードの位置情報は、該ノードの配置された配列要素の配列番号であることを特徴とするインデックス更新データ作成方法。
【請求項9】
請求項5〜請求項8のいずれか以降に記載のインデックス更新データ作成方法をコンピュータに実行させることを特徴とするプログラム。
【請求項10】
データベースのインデックスの更新データを作成するインデックス更新データ作成装置と該更新データにより自装置のデータベースのインデックスを更新するインデックス更新装置から構成されるシステムにおける前記インデックス更新装置において、
更新前のデータベースのインデックスキーを格納したカップルドノードツリーである前記更新ツリーを取得する更新ツリー取得手段と、
前記インデックス更新データ作成装置から更新すべき前記更新ツリーのノードの位置情報である更新位置とそのノードの内容である更新ノードからなるインデックスの更新データを取得する更新データ取得手段と、
前記更新データの更新位置のノードの内容を更新ノードで書き換えることにより前記更新ツリーを更新する更新ツリー更新手段と、
を備えることを特徴とするインデックス更新装置。
【請求項11】
請求項10に記載のインデックス更新装置において、
前記更新ツリーは配列に記憶され、前記更新位置は、前記更新すべきノードが配置された配列要素の配列番号であることを特徴とするインデックス更新装置。
【請求項12】
データベースのインデックスの更新データを作成するインデックス更新データ作成装置と該更新データにより自装置のデータベースのインデックスを更新するインデックス更新装置から構成されるシステムにおける前記インデックス更新装置がインデックスを更新するインデックス更新方法おいて、
更新前のデータベースのインデックスキーを格納したカップルドノードツリーである前記更新ツリーを取得する更新ツリー取得ステップと、
前記インデックス更新データ作成装置から更新すべき前記更新ツリーのノードの位置情報である更新位置とそのノードの内容である更新ノードからなるインデックスの更新データを取得する更新データ取得ステップと、
前記更新データの更新位置のノードの内容を更新ノードで書き換えることにより前記更新ツリーを更新する更新ツリー更新ステップと、
を備えることを特徴とするインデックス更新方法。
【請求項13】
請求項12に記載のインデックス更新方法において、
前記更新ツリーは配列に記憶され、前記更新位置は、前記更新すべきノードが配置された配列要素の配列番号であることを特徴とするインデックス更新方法。
【請求項14】
請求項12又は請求項13に記載のインデックス更新方法をコンピュータに実行させることを特徴とするプログラム。
【請求項15】
請求項9又は請求項14に記載のプログラムを記憶したことを特徴とするコンピュータ読み取り可能な記憶媒体。


【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4A】
image rotate

【図4B】
image rotate

【図4C】
image rotate

【図5】
image rotate

【図6A】
image rotate

【図6B】
image rotate

【図7】
image rotate

【図8A】
image rotate

【図8B】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12A】
image rotate

【図12B】
image rotate

【図13A】
image rotate

【図13B】
image rotate

【図13C】
image rotate

【図13D】
image rotate

【図13E】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16A】
image rotate

【図16B】
image rotate

【図16C】
image rotate

【図16D】
image rotate

【図16E】
image rotate


【公開番号】特開2010−257427(P2010−257427A)
【公開日】平成22年11月11日(2010.11.11)
【国際特許分類】
【出願番号】特願2009−110080(P2009−110080)
【出願日】平成21年4月28日(2009.4.28)
【出願人】(506235616)株式会社エスグランツ (32)
【Fターム(参考)】