JP4498409B2 - データベースのインデックスキー更新方法及びプログラム - Google Patents

データベースのインデックスキー更新方法及びプログラム Download PDF

Info

Publication number
JP4498409B2
JP4498409B2 JP2007338413A JP2007338413A JP4498409B2 JP 4498409 B2 JP4498409 B2 JP 4498409B2 JP 2007338413 A JP2007338413 A JP 2007338413A JP 2007338413 A JP2007338413 A JP 2007338413A JP 4498409 B2 JP4498409 B2 JP 4498409B2
Authority
JP
Japan
Prior art keywords
node
key
tree
data
search
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007338413A
Other languages
English (en)
Other versions
JP2009157853A (ja
JP2009157853A5 (ja
Inventor
敏男 新庄
光裕 國分
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
S Grants Co Ltd
Original Assignee
S Grants Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by S Grants Co Ltd filed Critical S Grants Co Ltd
Priority to JP2007338413A priority Critical patent/JP4498409B2/ja
Priority to EP08866463.6A priority patent/EP2246796B1/en
Priority to CN2008801224040A priority patent/CN101911060B/zh
Priority to PCT/JP2008/003123 priority patent/WO2009084145A1/ja
Publication of JP2009157853A publication Critical patent/JP2009157853A/ja
Publication of JP2009157853A5 publication Critical patent/JP2009157853A5/ja
Priority to US12/801,649 priority patent/US8103697B2/en
Application granted granted Critical
Publication of JP4498409B2 publication Critical patent/JP4498409B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/322Trees

Landscapes

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

Description

本発明は、データベースのインデックスキーの更新方法及びプログラムに関する。
近年、社会の情報化が進展し、大規模なデータベースが各所で利用されるようになってきている。このような大規模なデータベースからレコードを検索するには、各レコードの記憶されたアドレスと対応づけられたレコード内の項目をインデックスキーとして検索をし、所望のレコードを探し出すことが通例である。また、全文検索における文字列も、文書のインデックスキーと見なすことができる。
そして、それらのインデックスキーはビット列で表現されることから、データベースの検索はビット列の検索に帰着されるということができる。
本発明の背景技術の1つとして、まず上述のビット列の検索処理について説明する。
ビット列の検索処理手法については、種々のものが知られている。それらのなかでも、ビット列の検索を高速に行うために、ビット列を記憶するデータ構造を種々に工夫することが従来から行われている。このようなものの一つとして、パトリシアツリーという木構造が知られている。
図1は、上述の従来の検索処理に用いられているパトリシアツリーの一例を示すものである。パトリシアツリーのノードは、インデックスキー、検索キーの検査ビット位置、左右のリンクポインタを含んで構成される。明示はされていないが、ノードにはインデックスキーに対応するレコードにアクセスするための情報が含まれていることは勿論である。
図1の例では、インデックスキー“100010”を保持するノード1750aがルートノードとなっており、その検査ビット位置は0である。ノード1750aの左リンク1740aにはノード1750bが接続され、右リンク1741aにはノード1750fが接続されている。
ノード1750bの保持するインデックスキーは“010011”であり、検査ビット位置2030bは1である。ノード1750bの左リンク1740bにはノード1750cが、右リンク1741bにはノード1750dが接続されている。ノード1750cが保持するインデックスキーは“000111”、検査ビット位置は3である。ノード1750dが保持するインデックスキーは“011010”、検査ビット位置は2である。
ノード1750cから実線で接続された部分はノード1750cの左右のリンクポインタを示すものであり、点線の接続されていない左ポインタ1740cは、その欄が空欄であることを示している。点線の接続された右ポインタ1741cの点線の接続先は、ポインタの示すアドレスを表しており、今の場合ノード1750cを右ポインタが指定していることを表している。
ノード1750dの右ポインタ1741dはノード1750d自身を指しており、左リンク1740dにはノード1750eが接続されている。ノード1750eの保持するインデックスキーは“010010”、検査ビット位置は5である。ノード1750eの左ポインタ1740eはノード1750bを、右ポインタ1741eはノード1750eを指している。
また、ノード1750fの保持するインデックスキーは“101011”であり、検査ビット位置1730fは2である。ノード1750fの左リンク1740fにはノード1750gが、右リンク1741fにはノード1750hが接続されている。
ノード1750gの保持するインデックスキーは“100011”であり、検査ビット位置1730gは5である。ノード1750gの左ポインタ1740gはノード1750aを、右ポインタ1741gはノード1750gを指している。
ノード1750hの保持するインデックスキーは“101100”であり、検査ビット位置1730hは3である。ノード1750hの左ポインタ1740hはノード1750fを、右ポインタ1741hはノード1750hを指している。
図1の例では、ルートノード1750aからツリーを降りるにしたがって、各ノードの検査ビット位置が大きくなるように構成されている。
ある検索キーで検索を行うとき、ルートノードから順次各ノードに保持される検索キーの検査ビット位置を検査していき、検査ビット位置のビット値が1であるか0であるか判定を行い、1であれば右リンクをたどり、0であれば左リンクをたどる。そして、リンク先のノードの検査ビット位置がリンク元のノードの検査ビット位置より大きくなければ、すなわち、リンク先が下方でなく上方に戻れば(図1において点線で示されたこの逆戻りのリンクをバックリンクという)、リンク先のノードのインデックスキーと検索キーの比較を行う。比較の結果、等しければ検索成功であり、等しくなければ検索失敗であることが保証されている。
上記のように、パトリシアツリーを用いた検索処理では、必要なビットの検査だけで検索できること、キー全体の比較は1回ですむことなどのメリットがあるが、各ノードからの2つのリンクが必ずあることにより記憶容量が増大することや、バックリンクの存在による判定処理の複雑化、バックリンクにより戻ることで初めてインデックスキーと比較することによる検索処理の遅延及び追加削除等データメンテナンスの困難性などの欠点がある。
これらのパトリシアツリーの欠点を解消しようとするものとして、例えば下記特許文献1に開示された技術がある。下記特許文献1に記載されたパトリシアツリーにおいては、下位の左右のノードは連続した領域に記憶することによりポインタの記憶容量を削減するとともに、次のリンクがバックリンクであるか否かを示すビットを各ノードに設けることにより、バックリンクの判定処理を軽減している。
しかしながら、下記特許文献1に開示されたものにおいても、1つのノードは必ずインデックスキーの領域とポインタの領域を占めること、下位の左右のノードを連続した領域に記憶するようにしてポインタを1つとしたため、例えば図1に示したパトリシアツリーの最下段の部分である左ポインタ1740c、右ポインタ1741h等の部分にもノードと同じ容量の記憶領域を割り当てる必要があるなど、記憶容量の削減効果はあまり大きいものではない。また、バックリンクによる検索処理の遅延の問題や追加削除等の処理が困難であることも改善されていない。
次に、本発明の背景技術の別の1つとして、データベースの更新処理について説明する。
データベースシステムの機能として、データの更新機能は必須である。データベースに保管されるデータ量が増大するのに伴って、例えばバッチ処理により既存のデータベースに対して大量のデータの追加や削除を行おうとすると、その作業に要する時間が長くなるという不都合が生じている。
データベースのバッチ更新の態様としては、既存のデータベースに対する追加、変更あるいは削除データによりデータベースを更新する態様と、既存のデータベースを新しいデータベースでそっくり置き換える態様が存在する。
後者のデータベース更新の態様は、例えばデータベースのデータの供給者が、データベースの更新が必要になったときにデータベースの更新データを供給するのではなく、データを更新済みの新しい版のデータベースを改めて供給する場合に採用される。しかし、このようなデータベースの更新の態様では、更新作業中はデータベースの利用ができないことから、この更新作業に長時間を要するのでは不便である。
また、データベースは、データベース本体のデータ部分とデータベース本体からデータを検索するためのインデックスから構成されるのが通例である。そこで、データベースの更新の態様には、インデックス部分を更新する態様があり、この部分の更新においても、更新後のインデックス全体が供給され、更新前のインデックスとそっくり入れ替える場合がある。
例えばカーナビゲーションシステムの地図データのインデックスを更新する場合には、地図データの販売業者から購入した新しい地図データのインデックスデータを、カーナビゲーションシステムの販売業者あるいは車のディーラーのセンターから、カーナビゲーションシステムを搭載した各車に配布し、搭載されたカーナビゲーションシステムごとに、インデックスデータを更新する。このように、新しいインデックスデータ全体を配布するため、配布するデータ量が多く、また各カーナビゲーションシステムにおける地図データの更新時間も長いものとなる。
特開2001−357070号公報
そこで、本発明の課題は、既存のデータベースのインデックスキーに対してそれと置き換えられる新しいデータベース用のインデックスキーが供給されたときに、効率よくデータベースのインデックスキーの更新を行うことができるデータベース更新処理の手法を提供することである。
本出願人は、特願2006−187827において、ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対からなるビット列検索に用いるツリーであって、ルートノードはツリーの始点を表すノードであって、該ツリーのノードが1つのときはリーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを用いたビット列検索を提案した。
上記出願においては、与えられたインデックスキーの集合からカップルドノードツリーを生成する方法と、カップルドノードツリーから単一のインデックスキーを検索する手法等の、カップルドノードツリーを用いた基本的な検索手法が示されている。
また、ビット列の検索には、最小値、最大値を求める、ある範囲の値のものを求める等の各種の検索要求が存在する。そこで、本出願人は、特願2006−293619において、カップルドノードツリーの任意の部分木に含まれるインデックスキーの最大値/最小値を求める手法等を提案した。
本発明は、このカップルドノードツリーを応用した高速なデータベースのインデックスキー更新手法を実現することを目的とする。
本発明によれば、インデックスキーの旧データと新データの差分データを作成し、差分データにより旧データを更新して新データを作成する。
その際、旧データあるいは新データのインデックスキーをリーフノードのインデックスキーとして格納したカップルドノードツリーである差分ツリーを取得し、差分ツリーから新データあるいは旧データのインデックスキーを検索キーとして検索を行い、検索キーと一致したインデックスキーは差分ツリーから削除し、旧データ中のインデックスキーと一致しない検索キーは差分データの挿入キーあるいは削除キーとし、新データあるいは旧データの全てのインデックスキーによる検索が終了した後に差分ツリーに残った旧データのインデックスキーを差分データの削除キーあるいは挿入キーとして差分データを作成する。
差分データによる旧データの新データへの更新においては、旧データのインデックスキーをリーフノードのインデックスキーとして格納したカップルドノードツリーである更新ツリーを取得し、差分データから取り出した削除キーを更新ツリーから削除し、差分データから取り出した挿入キーを更新ツリーに挿入することにより新データを作成する。
本発明によれば、カップルドノードツリーを用いることにより、高速で差分データを作成することができる。そして、インデックスキーを更新するサイトに配布するのは、新データ全体ではなく差分データなので、配布するデータ量を削減することができる。また、インデックスキーの更新にもカップルドノードツリーを用いることにより、高速なデータ更新が可能となる。
最初に、本出願人により先の上記出願において提案された、本発明で利用するカップルドノードツリーについて、カップルドノードツリーを配列に格納する例を説明する。ブランチノードが保持するリンク先の位置を示すデータとして、記憶装置のアドレス情報とすることもできるが、ブランチノードあるいはリーフノードのうち占有する領域の記憶容量の大きい方を格納可能な配列要素からなる配列を用いることにより、ノードの位置を配列番号で表すことができ、位置情報の情報量を削減することができる。
図2Aは、配列に格納されたカップルドノードツリーの構成例を説明する図である。
図2Aを参照すると、ノード101が配列100の配列番号10の配列要素に配置されている。ノード101はノード種別102、弁別ビット位置103及び代表ノード番号104で構成されている。ノード種別102は0であり、ノード101がブランチノードであることを示している。弁別ビット位置103には1が格納されている。代表ノード番号104にはリンク先のノード対の代表ノードの配列番号20が格納されている。なお、以下では表記の簡略化のため、代表ノード番号に格納された配列番号を代表ノード番号ということもある。また、代表ノード番号に格納された配列番号をそのノードに付した符号あるいはノード対に付した符号で表すこともある。
配列番号20の配列要素には、ノード対111の代表ノードであるノード[0]112が格納されている。そして隣接する次の配列要素(配列番号20+1)に代表ノードと対になるノード[1]113が格納されている。ノード[0]112のノード種別114には0が、弁別ビット位置115には3が、代表ノード番号116には30が格納されている。またノード[1]113のノード種別117には1が格納されており、ノード[1]113がリーフノードであることを示している。インデックスキー118には、“0001”が格納されている。パトリシアツリーについて先に述べたと同様に、リーフノードにインデックスキーと対応するレコードにアクセスする情報が含まれることは当然であるが、表記は省略している。
なお、代表ノードをノード[0]で表し、それと対になるノードをノード[1]で表すことがある。また、ある配列番号の配列要素に格納されたノードを、その配列番号のノードということがあり、ノードの格納された配列要素の配列番号を、ノードの配列番号ということもある。
配列番号30及び31の配列要素に格納されたノード122とノード123からなるノード対121の内容は省略されている。
ノード[0]112、ノード[1]113、ノード122、及びノード123の格納された配列要素にそれぞれ付された0あるいは1は、検索キーで検索を行う場合にノード対のどちらのノードにリンクするかを示すものである。前段のブランチノードの弁別ビット位置にある検索キーのビット値である0か1を代表ノード番号に加えた配列番号のノードにリンクする。
したがって、前段のブランチノードの代表ノード番号に、検索キーの弁別ビット位置のビット値を加えることにより、リンク先のノードが格納された配列要素の配列番号を求めることができる。
なお、上記の例では代表ノード番号をノード対の配置された配列番号のうち小さい方を採用しているが、大きいほうを採用することも可能であることは明らかである。
図2Bは、カップルドノードツリーのツリー構造を概念的に示す図である。図示の6ビットのインデックスキーは、図1に例示されたパトリシアツリーのものと同じである。
符号210aで示すのがルートノードである。図示の例では、ルートノード210aは配列番号220に配置されたノード対201aの代表ノードとしている。
ツリー構造としては、ルートノード210aの下にノート対201bが、その下層にノード対201cとノード対201fが配置され、ノード対201fの下層にはノード対201hとノード対201gが配置されている。ノード対201cの下にはノード対201dが、さらにその下にはノード対201eが配置されている。
各ノードの前に付された0あるいは1の符号は、図2Aにおいて説明した配列要素の前に付された符号と同じである。検索キーの弁別ビット位置のビット値に応じてツリーをたどり、検索対象のリーフノードを見つけることになる。
図示された例では、ルートノード210aのノード種別260aは0でブランチノードであることを示し、弁別ビット位置230aは0を示している。代表ノード番号は220aであり、それはノード対201bの代表ノード210bの格納された配列要素の配列番号である。
ノード対201bはノード210bと211bで構成され、それらのノード種別260b、261bはともに0であり、ブランチノードであることを示している。ノード210bの弁別ビット位置230bには1が格納され、リンク先の代表ノード番号にはノード対201cの代表ノード210cの格納された配列要素の配列番号220bが格納されている。
ノード210cのノード種別260cには1が格納されているので、このノードはリーフノードであり、したがって、インデックスキーを含んでいる。インデックスキー250cには“000111”が格納されている。一方ノード211cのノード種別261cは0、弁別ビット位置231cは2であり、代表ノード番号にはノード対201dの代表ノード210dの格納された配列要素の配列番号221cが格納されている。
ノード210dのノード種別260dは0、弁別ビット位置230dは5であり、代表ノード番号にはノード対201eの代表ノード210eの格納された配列要素の配列番号220dが格納されている。ノード210dと対になるノード211dのノード種別261dは1であり、インデックスキー251dには“011010”が格納されている。
ノード対201eのノード210e、211eのノード種別260e、261eはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250e、251eにはインデックスキーとして“010010”と“010011”が格納されている。
ノード対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が格納されている。
ノード対201gのノード210g、211gのノード種別260g、261gはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250g、251gには“100010”と“100011”が格納されている。
また同じくノード対201hの代表ノードであるノード[0]210hとそれと対をなすノード[1]211hのノード種別260h、261hはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250h、251hには“101011”と“101100“が格納されている。
以下、上述のツリーからインデックスキー“100010”を検索する処理の流れを簡単に説明する。弁別ビット位置は、左から0、1、2、・・・とする。
まず、ビット列“100010”を検索キーとしてルートノード210aから処理をスタートする。ルートノード210aの弁別ビット位置230aは0であるので、検索キー“100010”の弁別ビット位置が0のビット値をみると1である。そこで代表ノード番号の格納された配列番号220aに1を加えた配列番号の配列要素に格納されたノード211bにリンクする。ノード211bの弁別ビット位置231bには2が格納されているので、検索キー“100010”の弁別ビット位置が2のビット値をみると0であるから、代表ノード番号の格納された配列番号221bの配列要素に格納されたノード210fにリンクする。
ノード210gのノード種別260gは1でありリーフノードであることを示しているので、インデックスキー250gを読み出して検索キーと比較すると両方とも“100010”であって一致している。このようにしてカップルドノードツリーを用いた検索が行われる。
次に、図2Bを参照してカップルドノードツリーの構成の意味について説明する。
カップルドノードツリーの構成はインデックスキーの集合により規定される。図2Bの例で、ルートノード210aの弁別ビット位置が0であるのは、図2Bに例示されたインデックスキーに0ビット目が0のものと1のものがあるからである。0ビット目が0のインデックスキーのグループはノード210bの下に分類され、0ビット目が1のインデックスキーのグループはノード211bの下に分類されている。
ノード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が格納される。
ノード211fのリンク先においては、3ビット目が1のものと0のものがそれぞれ1つしかないことから、ノード210h、211hはリーフノードとなり、それぞれインデックスキー250hと251hに“101011”と“101100”が格納されている。
仮にインデックスキーの集合に“101100”の代わりに“101101”か“101110”が含まれていたとしても、3ビット目までは“101100”と等しいので、ノード211hに格納されるインデックスキーが変わるだけで、ツリー構造自体は変わることはない。しかし、“101100”に加えて“101101”が含まれていると、ノード211hはブランチノードとなり、その弁別ビット位置は5になる。追加されるインデックスキーが“101110”であれば、弁別ビット位置は4となる。
以上説明したように、カップルドノードツリーの構造は、インデックスキーの集合に含まれる各インデックスキーの各ビット位置のビット値により決定される。
そしてさらにいえば、異なるビット値となるビット位置ごとにビット値が“1”のノードとビット値が“0”のノードとに分岐していることから、ノード[1]側とツリーの深さ方向を優先させてリーフノードをたどると、それらに格納されたインデックスキーは、ノード211hのインデックスキー251hの“101100”、ノード210hのインデックスキー250hの“101011”、・・・、ノード210cのインデックスキー250cの“000111”となり降順にソートされている。
すなわち、カップルドノードツリーにおいては、インデックスキーはソートされてツリー上に配置されている。
検索キーで検索するときはインデックスキーがカップルドノードツリー上に配置されたルートをたどることになり、例えば検索キーが“101100”であればノード211hに到達することができる。また、上記説明からも想像がつくように、“101101”か“101110”を検索キーとした場合でもノード211hにたどり着き、インデックスキー251hと比較することにより検索が失敗したことが分かる。
また、例えば“100100”で検索した場合でも、ノード210a、211b、210fのリンク経路では検索キーの3ビット目と4ビット目は使われることがなく、“100100”の5ビット目が0なので、“100010”で検索した場合と同様にノード210gに到達することになる。このように、カップルドノードツリーに格納されたインデックスキーのビット構成に応じた弁別ビット位置を用いて分岐が行われる。
次に、本発明の原理を説明する。
図3Aは、本発明の原理を模式的に示す図である。図3Aの(1)に示すのは、旧データと新データから差分データを作成する原理を説明する図であり、図3Aの(2)に示すのは、差分データにより旧データを新データに更新する原理を説明する図である。
図3Aの(1)に示すように、差分データを作成するには、新データに含まれる全てのキーで旧データに含まれるキーを検索する。旧データと一致したキー、すなわち旧データと新データに存在するキーについては、更新の対象外であるから、旧データから削除する。
旧データとは一致しなかった検索キー、すなわち新データに追加されたキーは、挿入キーとして差分データに取り込まれる。新データにより検索されず旧データに残存したキー、すなわち新データに存在しないキーは、削除キーとして差分データに取り込まれる。
なお、上述の説明では、新データに含まれる全てのキーで旧データに含まれるキーを検索する、としたが、差分データを作成するのであるから、旧データに含まれる全てのキーで新データに含まれるキーを検索する、として差分データを作成してもよいことは明らかである。その場合は、新データに残存したキーが挿入キーとして差分データに取り込まれ、新データと一致しなかった旧データが削除キーとして差分データに取り込まれる。
図3Aの(2)に示すように、差分データにより旧データを新データに更新するには、挿入キーを新データに追加されたキーとして旧データに挿入し、削除キーにより新データに存在しないキーを旧データから削除する。
図3Bは、本発明を実施するためのハードウェア構成例を説明する図である。図に示すように、本発明を実施するためのハードウェアは、差分データ作成装置300と差分データ更新装置400a〜400xで構成される。差分データ更新装置400a〜400xの数は任意である。
本発明の差分データ作成装置300による差分データ作成は中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。カップルドノードツリーが配置される配列309と検索中にたどるノードが格納された配列要素の配列番号を記憶する探索経路スタック310、旧データを格納する旧データ格納領域321、新データを格納する新データ格納領域322及び作成済みの差分データを格納する差分データ格納領域320を有するデータ格納装置308は、主記憶装置305または外部記憶装置306で実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。
図3Bの例示では、主記憶装置305、外部記憶装置306及び通信装置307が一本のバス304によりデータ処理装置301に接続されているが、接続方法はこれに限るものではない。また、主記憶装置305をデータ処理装置301内のものとすることもできるし、探索経路スタック310を中央処理装置302内のハードウェアとして実現することも可能である。あるいは、旧データ格納領域321、新データ格納領域322及び差分データ格納領域320は外部記憶装置306に、探索経路スタック310を主記憶装置305に持つなど、使用可能なハードウェア環境、インデックスキー集合の大きさ等に応じて適宜ハードウェア構成を選択できることは明らかである。
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶装置が用いられることは当然である。
差分データ作成装置300において作成された差分データは、差分データ更新装置400a〜400xに送られ、それぞれの差分データ格納領域420a〜420xに格納され、それぞれのインデックス格納領域421a〜421xに格納された旧データを新データに更新するために用いられる。特に図示はしていないが、差分データ更新装置400a〜400xにおいても、データ処理装置や、差分データ格納領域、インデックス格納領域及びその他の記憶領域を有するデータ格納装置が備えられている。
なお、以下においては、上述の例えば差分データ格納領域320に格納された差分データを差分データ320と表記するように、あるデータ格納領域に格納されるデータ自体にデータ格納領域の符号を付して説明する場合がある。
図3Cは、差分データ作成装置300の機能ブロック構成を説明する図である。
図に示すように、差分データ作成装置300は、差分ツリー取得手段330と差分データ作成手段331の機能ブロックを含む。これらの機能ブロックは、図3Bに例示するハードウェアと以下において説明する処理フローを実行するソフトウェアにより実現される。
差分ツリー取得手段330は、旧データあるいは新データのインデックスキーをカップルドノードツリーのリーフノードのインデックスキーとして格納した、差分ツリーを取得する。
差分データ作成手段331は、差分ツリーのルートノードを検索開始ノードとして新データあるいは旧データの全てのインデックスキーを検索キーとして検索を行い、検索キーと一致した検索結果キーであるインデックスキーは差分ツリーから削除し、検索結果キーであるインデックスキーと一致しない検索キーを差分データの挿入キーあるいは削除キーとする。そして、新データあるいは旧データの全てのインデックスキーによる検索が終了した後に差分ツリーに削除されずに残ったインデックスキーを差分データの削除キーあるいは挿入キーとして差分データを作成する。
図3Dは、差分データ更新装置の機能ブロック構成を説明する図である。
図に示すように、差分データ更新装置400は、更新ツリー取得手段422と新旧インデックスキー更新手段423の機能ブロックを含む。これらの機能ブロックは、図3Bに示す差分データ更新装置400a〜400xについて説明したハードウェアと以下において説明する処理フローを実行するソフトウェアにより実現される。
更新ツリー取得手段422は、旧データのインデックスキーをカップルドノードツリーのリーフノードのインデックスキーとして格納した更新ツリーを取得する。
新旧インデックスキー更新手段423は、差分データ作成手段331が作成した差分データから取り出した削除キーを更新ツリーから削除し、差分データから取り出した挿入キーを更新ツリーに挿入することにより新データのインデックスキーをリーフノードのインデックスキーとして格納した新データカップルドノードツリーを作成し、新データカップルドノードツリーに基づいて、旧データを新データに更新する。
次に、上述の出願において、本出願人により提案されたカップルドノードツリーを用いた基本的な検索処理、カップルドノードツリーにおける挿入削除処理、及びカップルドノードツリーに含まれるインデックスキーの最小値を求める処理等の応用処理の一部について、本発明を理解するために必要な範囲で紹介する。

図4は、本出願人による出願である上記特願2006−293619で提案されたビット列検索の基本動作を示したフローチャートである。
まず、ステップS401で、検索開始ノードの配列番号を取得する。取得された配列番号に対応する配列は、カップルドノードツリーを構成する任意のノードを格納したものである。検索開始ノードの指定は、後に説明する各種応用検索において行われる。
取得された検索開始ノードの配列番号は、図示しない検索開始ノード設定エリアに設定されるが、この検索開始ノード設定エリアは、先に述べた「処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶装置」の一つである。以下の説明では、「図示しない検索開始ノード設定エリアに設定する」のような表現に変えて、「検索開始ノードの配列番号を得る。」、「検索開始ノードとして設定する」あるいは単に「検索開始ノードに設定する」のように記述することもある。
次に、ステップS402で、探索経路スタック310に取得された配列番号を格納し、ステップS403で、その配列番号に対応する配列要素を参照すべきノードとして読み出す。そして、ステップS404で、読み出したノードから、ノード種別を取り出し、ステップS405で、ノード種別がブランチノードであるか否かを判定する。
ステップS405の判定において、読み出したノードがブランチノードである場合は、ステップS406に進み、ノードから弁別ビット位置についての情報を取り出し、更に、ステップS407で、取り出した弁別ビット位置に対応するビット値を検索キーから取り出す。そして、ステップS408で、ノードから代表ノード番号を取り出して、ステップS409で、検索キーから取り出したビット値と代表ノード番号とを加算し、新たな配列番号として、ステップS402に戻る。
以降、ステップS405の判定においてリーフノードと判定されてステップS410に進むまで、ステップS402からステップS409までの処理を繰り返す。ステップS410で、リーフノードからインデックスキーを取り出して、処理を終了する。
図5は、本出願人による出願である上記特願2006−293619で提案されたカップルドノードツリー(部分木を含む)に格納されたインデックスキーの最小値を求める処理を示したフローチャートである。先に述べたようなインデックスキーのツリー上の配置から、インデックスキーの最小値を求める処理は検索開始ノードからノード[0]をリーフノードに至るまでツリー上でたどることに相当する。
まず、ステップS501の検索開始ノードの配列番号の取得からステップS505のノード種別の判定までは、それぞれ上述の図4のステップS401からステップS405の処理と同様である。
ステップS505のノード種別の判定においてノード種別がブランチノードと判定されると、ステップS506に進み、ノードから配列の代表ノード番号を取り出し、ステップS507で、取り出した代表ノード番号に値“0”を加算してその結果を新たな配列番号とし、ステップS502に戻る。以降、ステップS505においてそのノードがリーフノードと判定されるまでステップS502からステップS507までの処理を繰り返し、ステップS508で、リーフノードからインデックスキーを取り出し、処理を終了する。
上記の図5に示す処理においては、ノード[0]をたどるため、代表ノード番号に一律“0”を加算している。すなわち、図5の処理によれば、リンク先のノードは、ノード対のうち必ずノード[0]とし、より小さい値のインデックスキーが格納されているノードのほうに分岐している。これにより、ツリー構造が先に述べたように順列構成であるカップルドノードツリーの最小のインデックスキーを取り出すことができる。
なお、図示はしていないが、図5のステップS507において、代表ノード番号に値“0”を加算する代わりに値“1”を加算すればノード[1]をたどることになり、カップルドノードツリーの最大のインデックスキーを取り出すことができる。
図6は、カップルドノードツリーに格納されたインデックスキーを昇順に取り出す処理を示したフローチャートである。インデックスキーを昇順に取り出す処理は、ノード対をなすノードのうちノード[0]側及びツリーの深さを優先させてノードから順次リーフノードをたどり、各リーフノードからインデックスキーを取り出していくことに相当する。
まず、ステップS601で、検索開始ノードの配列番号にルートノードの配列番号を設定し、ステップS602で、上記図5を参照して説明した最小のインデックスキーを求める処理を実行して、カップルドノードツリーに含まれるインデックスキーの中で最小のインデックスキーを取得する。そして、ステップS603で、取得したインデックスキーを取り出し、ステップS604に進む。
ステップS604で、探索経路スタック310のスタックポインタ(以下、ポインタということもある。)がルートノードの配列番号を指しているか否かを判定する。スタックポインタが指す配列番号がルートノード以外である場合は、ステップS605に進む。そして、ステップS605で、探索経路スタック310からスタックポインタの指す配列番号を取り出してから、スタックポインタの値を1減らす。
ステップS606で、ステップS605で取り出した配列番号から、その配列番号のノードがノード対のどちらの配列要素に格納されているかのノード位置を得る。例えばノード[0]については偶数番号の配列の配列要素に格納する等により、配列番号からノード位置を求めることができる。そして、ステップS607で、ステップS606で得たノード位置がノード[1]側であるか否かを判定する。ステップS607においてノード[1]側と判定された場合は、ステップS604に戻り、スタックポインタの指す配列番号のノードがノード[0]あるいはルートノードとなるまで、ステップS604からステップS607までの処理を繰り返す。
ステップS607においてノード[0]側と判定されると、ステップS608に進み、配列番号に1を加算し、そのノードと対をなすノード[1]の配列番号を得る。そして、ステップS609で、検索開始ノードにステップS608で得たノード[1]の配列番号を設定し、ステップS610で、検索開始ノードをルートノードとする部分木の最小のインデックスキーを求める処理を実行する。ステップS610の処理は、ステップS602と同様であり、図5に示す最小値検索処理が用いられる。
ステップS610で最小のインデックスキーを求めると、ステップS603に戻り、求めたインデックスキーを取り出し、以降ステップS604においてポインタがルートノードの配列番号を指していると判定されるまで、同様の処理を繰り返す。
このように、探索経路スタック310のポインタが指す配列番号を参照し、探索経路スタック310に格納されている配列番号のノード[0]と対をなすノード[1]について、そのノードを検索開始ノードとしてそのノード配下で最小のインデックスキーを求める。ステップS602で最小値が求められた段階においては、探索経路スタック310のポインタは、カップルドノードツリーの最小のインデックスキーを含むノードの配列番号を指している。続いて探索経路スタック310のポップ動作を行い、取り出した配列番号のノードのうちノード[1]を検索開始ノードとして該検索開始ノードをルートノードとする部分木のインデックスキーの最小値を求める処理を行い、探索経路スタック310のポップ動作の結果カップルドノードツリーのルートノードの配列番号が取り出されるまでポップ動作と最小値検索処理を繰り返す。
探索経路スタック310には、先にステップS602においてルートノード配下のノードについて最小値を求める処理を行っていることにより、リンク経路についての配列番号が順次格納されている。このため、探索経路スタック310のポインタを1減らして新たにポインタが指す配列番号のノードのうち、ノード[0]について、そのノードと対をなすノード[1]を求め、ノード[1]のノード配下について順次最小値検索の処理を行っていくと、インデックスキーは昇順に取り出されることとなる。
先に最小値検索を変形して最大値検索が可能であることを述べたのと同様に、最小値検索に代えて最大値検索を行い、ノード[1]の判定をノード[0]の判定に置き換える等により、インデックスキーを降順に取り出すことが可能であることは、当業者に明らかである。
次に、図7A〜図7Dにより本出願人による出願である上記特願2006−187827で提案されたカップルドノードツリーにおけるノード挿入処理を説明する。図7A〜図7Cが通常の挿入処理を説明するものであり、図7Dはルートノードの挿入処理を説明するものである。ルートノードの挿入処理と通常の挿入処理により、カップルドノードツリーが生成されることから、ノード挿入処理の説明はカップルドノードツリーの生成処理の説明でもある。
図7Aは挿入処理の前段である検索処理の処理フローを示す図であり、図4に示した検索処理において、ルートノードを検索開始ノードとし、挿入キーを検索キーとしたものに相当する。
ステップS701において、検索開始ノードの配列番号を設定するエリアにルートノードの配列番号を設定し、ステップS702において、検索キーに挿入キーを設定する。
次にステップS710において、図4に示す検索処理を実行し検索結果のインデックスキーを得て、ステップS711に進む。
ステップS711において挿入キーとインデックスキーを比較し、等しければ挿入キーは既にカップルドノードツリーに存在するのであるから、挿入は失敗となり、処理を終了する。等しくなければ次の処理、図7BのステップS712以下の処理に進む。
図7Bは、挿入するノード対のための配列要素を準備する処理を説明する処理フロー図である。
ステップS712において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得する。
ステップS713に進み、挿入キーとステップS710で得たインデックスキーの大小を比較し、挿入キーが大きいときは値1を小さいときは値0のブール値を得る。
ステップS714に進み、ステップS712で得た代表ノードの配列番号にステップS713で得たブール値を加算した配列番号を得る。
ステップS715に進み、ステップS712で得た代表ノードの配列番号にステップS713で得たブール値の論理否定値を加算した配列番号を得る。
ステップS714で得た配列番号は、挿入キーをインデックスキーとして持つリーフノードが格納される配列要素の配列番号であり、ステップS715で得た配列番号は、そのリーフノードと対を成すブランチノードあるいはリーフノードが格納される配列要素のものである。
つまり、前段の検索処理で得られたリーフノードに格納されたインデックスキーと挿入キーの大小により、挿入されるノード対のうちどちらのノードに挿入キーを保持するリーフノードが格納されるかが決定される。
例えば図2Bのカップルドノードツリーに“011011”を挿入する場合、検索結果のインデックスキーはノード211dに格納された“011010”になる。挿入キー“011011”とノード211dに格納されたインデックスキー“011010”の大小比較によりブール値が求められ、今の例では挿入キーが大きいのでブール値1が得られ、挿入されるノード対の代表ノード番号に1を加えた配列要素に挿入キーを保持するリーフノードが格納される。一方、インデックスキー“011010”は、大小比較で得られたブール値を論理反転した値を代表ノード番号に加算した配列番号の配列要素に格納される。
その際、インデックスキー“011010”と挿入キー“011011”とは5ビット目で異なることから、ノード211dは、弁別ビット位置を5とし、代表ノード番号を挿入されたノード対の代表ノードの配列番号とするブランチノードとなる。
また図2Bのカップルドノードツリーに“011001”を挿入しようとする場合も、検索結果のインデックスキーはノード211dに格納された“011010”になる。この場合には挿入キーが小さいのでブール値0が得られ、挿入されるノード対の代表ノード番号に0を加えた配列要素に挿入キーを保持するリーフノードが格納される。そして、インデックスキー“011010”と挿入キー“011001”とは4ビット目で異なることから、ノード211dは、弁別ビット位置を4とし、代表ノード番号を挿入されたノード対の代表ノードの配列番号とするブランチノードとなる。次に図7CのステップS716以下の処理に進む。
図7Cは図7Bで準備された配列にノードを格納するとともにその挿入位置を求め、既存のノードの内容を変更して挿入処理を完成させる処理フローを示す図である。
ステップS716〜ステップS723までの処理は、挿入するノード対のカップルドノードツリー上の位置を求める処理であり、ステップS724以下の処理は各ノードにデータを設定して挿入処理を完成させる処理である。
ステップS716で、挿入キーとステップS710で得たインデックスキーのビット列比較を例えば排他的論理和で行い、差分ビット列を得る。
ステップS717に進み、ステップS716で得た差分ビット列から、上位0ビット目から見た最初の不一致ビットのビット位置を得る。この処理は、例えばプライオリティエンコーダを有するCPUではそこに差分ビット列を入力し、不一致のビット位置を得ることができる。また、ソフト的にプライオリティエンコーダと同等の処理を行い最初の不一致ビットのビット位置を得ることも可能である。
次にステップS718に進み、探索経路スタックのスタックポインタがルートノードの配列番号を指しているか判定する。指していればステップS724に移行し、指していなければステップS719に進む。
ステップS719において、探索経路スタックのスタックポインタを1つ戻してそこにスタックされている配列番号を取り出す。
ステップS720に進み、ステップS719で取り出した配列番号の配列要素を配列からノードとして読み出す。
ステップS721に進み、ステップS720で読み出したノードから、弁別ビット位置を取り出す。
次にステップS722に進み、ステップS721で取り出した弁別ビット位置がステップS717で得たビット位置より上位の位置関係か判定する。ここで上位の位置関係とは、ビット列のより左側の位置、すなわちビット位置の値が小さい位置であることとする。
ステップS722の判定結果が否定であれば、ステップS718に戻り、ステップS718での判定が肯定になるかステップS722での判定が肯定になるまで繰り返す。ステップS722での判定が肯定になると、ステップS723で経路探索スタックのスタックポインタを1つ進め、ステップS724以下の処理に移行する。
上記ステップS716〜ステップS723で説明した処理は、挿入するノード対の挿入位置を決定するために、挿入するインデックスキーと検索により取得されたインデックスキーの間でビット列比較を行い、ビット列比較で異なるビット値となる先頭の(最上位の)ビット位置と探索経路スタックに格納されているブランチノードの弁別ビット位置との相対的位置関係を調べ、弁別ビット位置が上位となるブランチノードの次のブランチノードのリンク先を挿入するノード対の挿入位置とするものである。
例えば図2Bのカップルドノードツリーに“111000”を挿入するとき、検索結果のインデックスキーはノード210hに格納された“101011”になる。挿入キー“111000”とノード210hに格納されたインデックスキー“101011”のビット列比較により異なるビット値となる最上位のビット位置1が得られる。得られたビット位置1と経路探索スタックに積まれた配列番号の配列要素に格納されたブランチノードの弁別ビット位置との位置関係を弁別ビット位置が上位になるまでを順次経路探索スタック逆にたどると、ルートノード210aに至る。そこで探索経路スタックのポインタを1つ進め、ノード211bの配列番号を得る。挿入キー“111000”はノード211bのリンク先に挿入される。
また、経路探索スタック逆にたどりルートノードに至っても、ルートノードの弁別ビット位置が、先に求めたビット列比較で異なるビット値となる最上位のビット位置より上位のビット位置でないということは、そのカップルドノードツリーのインデックスキーの上位ビットで、ルートノードの弁別ビット位置より上位のビットの値は全て等しい場合である。そして、挿入するインデックスキーにおいて、初めてルートノードの弁別ビット位置より上位のビットの値に異なるビット値のものがあるということである。したがって、挿入するノード対はルートノードの直接のリンク先となり、ルートノードの弁別ビット位置は、既存のインデックスキーと異なる値である挿入キーの最上位ビットの位置に変わる。
次に、ステップS724以下の各ノードにデータを設定して挿入処理を完成させる処理について説明する。
ステップS724では探索経路スタックからスタックポインタの指す配列番号を取り出す。
ステップS725において、ステップS714で得た配列番号の指す配列要素のノード種別に1(リーフノード)を、インデックスキーに挿入キーを書き込む。
ステップS726に進み、配列からステップS724で得た配列番号の配列要素を読み出す。
次にステップS727において、ステップS715で得た配列番号の配列要素にステップS726で読み出した内容を書き込む。
最後にステップS728において、ステップS724で得た配列番号の指す配列要素のノード種別に0(ブランチノード)を、弁別ビット位置にステップS717で得たビット位置を、代表ノード番号にステップS712で得た配列番号を書き込み、処理を終了する。
上述の図2Bのカップルドノードツリーに“111000”を挿入する例では、取得された空ノード対のノード[0]にノード211bの内容を書き込み(ステップS727)、ノード[1]を挿入キー“111000”を保持するリーフノードとする(ステップS725)。そして、ノード211bの弁別ビット位置にビット列比較により異なるビット値となる最上位のビット位置1を格納し、代表ノード番号には取得されたノード対の代表ノードが格納される配列要素の配列番号が格納される(ステップS728)。
図7Dは、本出願人による出願である上記特願2006−187827で提案されたルートノードの挿入処理を含むインデックスキーを追加する場合のノード挿入処理全体を説明する処理フロー図である。
ステップS101において、取得することを求められたカップルドノードツリーのルートノードの配列番号が登録済みであるか判定される。登録済みであれば、図7A〜図7Cを用いて説明した通常の挿入処理が行われる。
ステップS101での判定が登録済みでなければ、まったく新しいカップルドノードツリーの登録、生成が始まることになる。
まず、ステップS102において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得する。次にステップS103において、ステップS102で得た配列番号に0を加えた配列番号を求める。(実際には、ステップS102で取得した配列番号に等しい。)。さらにステップS104において、ステップS103で得た配列番号の配列要素に、挿入するルートノードのノード種別に1(リーフノード)とインデックスキーに挿入キーを書き込み、ステップS105で、ステップS102で取得したルートノードの配列番号を登録して処理を終了する。
先にも述べたように、インデックスキーの集合があるとき、そこから順次インデックスキーを取り出し、図7D及び図7A〜図7Cの処理を繰り返すことにより、インデックスキーの集合に対応した本発明のカップルドノードツリーを構築することができることは明らかである。
次に図8A、図8Bを参照して、本出願人による出願である上記特願2006−187827で提案されたカップルドノードツリーに係るインデックスキーの集合から、特定のインデックスキーを削除する処理フローを説明する。
図8Aは、削除処理の前段である検索処理の処理フローを示す図であり、図4に示した検索処理において、ルートノードを検索開始ノードとし、挿入キーを検索キーとしたものに相当する。
ステップS801において、検索開始ノードの配列番号を設定するエリアにルートノードの配列番号を設定し、ステップS802において、検索キーに削除キーを設定する。
次にステップS810において、図4に示す検索処理を実行し検索結果のインデックスキーを得て、ステップS811に進む。
図8AのステップS811において削除キーとインデックスキーを比較し、等しくなければければ削除するインデックスキーはカップルドノードツリーに存在しないのであるから、削除は失敗となり、処理を終了する。等しければ次の処理、図8BのステップS812以下の処理に進む。
図8Bは、削除処理の後段の処理フローを説明する図である。
まず、ステップS812で探索経路スタックに2つ以上の配列番号が格納されているか判定する。2つ以上の配列番号が格納されていないということは、言い換えれば1つだけで、その配列番号はルートノードの格納された配列要素のものである。その場合はステップS818に移行し、ステップS801で得たルートノードの配列番号に係るノード対を削除する。次にステップS819に進み、登録されていたルートノードの配列番号を削除して処理を終了する。
ステップS812において探索経路スタックに2つ以上の配列番号が格納されていると判定されたときはステップS813に進み、ステップS808で得た代表ノード番号にステップS807で得たビット値を反転した値を加算した配列番号を得る。この処理は、削除対象のインデックスキーが格納されたリーフノードと対をなすノードの配置された配列番号を求めるものである。
次にステップS814において、ステップS813で得た配列番号の配列要素の内容を読み出し、ステップS815において探索経路スタックのスタックポインタを1つ戻して配列番号を取り出す。
次にステップS816に進み、ステップS814で読み出した配列要素の内容をステップS815で得た配列番号の配列要素に上書きする。この処理は、削除対象のインデックスキーが格納されたリーフノードへのリンク元であるブランチノードを上記リーフノードと対をなすノードに置き換えるものである。
最後にステップS817においてステップS808で得た代表ノード番号に係るノード対を削除して処理を終了する。
以上、カップルドノードツリーに関する本発明の前提となる技術を説明したが、必要とあれば、上述の特許出願の明細書及び図面の記載を参照されたい。
次に、図9〜図13を参照して、本発明に係る差分データを作成する処理について説明する。
図9は、本発明の一実施形態における旧データと新データにより差分データを作成する処理の概要を説明する図である。図9に示す例では、旧データ321はキー321a“010010”、321b“010011”、321c“100011”、321d“101011”及び321e“101100”で構成され、新データ322はキー322a“010010”、322b“010110”、322c“100010”、322d“100011”及び322e“101100”で構成されている。
また、差分データ320の各更新データ380a〜380dは、更新種別381と更新キー382の項目で構成されている。更新データ380a〜380dの各更新キー382は、図に示すようにキー321d、321b、322c、322bである。
旧データであるキー321a〜321eは、図9の(A)に示す挿入処理により、更新前の差分ツリー309−1に挿入される。なお、図9の(A)に示すS1001は、後記図10に示す差分データ作成の処理フローのステップS1001での処理に対応することを示すものである。以下の図9の(B)〜(E)についても同様である。
次に、図9の(B)に示すように、新データのキー322a〜322eによる削除処理が図10に示すフローのステップS1005で行われる。削除処理の結果、更新後の差分ツリー309−2には旧データのキー321dと321bが削除されずに残っている。
旧データに同一のデータが存在せず、図9の(C)に示すように図10のフローのステップS1006で削除に失敗したと判定された新データのキー322cと322bは、図9の(D)に示すように、図10のステップS1007で挿入キーとして差分データ格納領域320に格納される。図9に示すように、挿入キーの値は更新キー382に格納され、更新種別381には“i”が格納され、更新キーに格納された322c、322bが挿入キーであることが示されている。
一方、更新後の差分ツリー309−2に残った旧データのキー321dと321bは、図9の(E)に示すように、図10のステップS1009で差分ツリー309−2から取り出され、削除キーとして差分データ格納領域320に格納される。図9に示すように、削除キーの値は更新キー382に格納され、更新種別381には“d”が格納され、更新キーに格納された321d、321bが削除キーであることが示されている。
なお、上述の説明では、旧データから差分ツリー309−1を生成し、新データにより削除処理を行うものとした。しかし、旧データと新データの差分を作成するのであるから、逆に新データから差分ツリーを生成し、旧データにより削除処理を行って差分データを作成できることは明らかである。その場合には、更新後の差分ツリーに残った新データが挿入キーとなり、削除に失敗した旧データが削除キーとなることも当業者には明らかである。
図10は旧データと新データにより差分データを作成する処理フローを説明する図である。以下、図10を参照して新旧データによる差分データ作成の処理フローを説明する。
図10に示すように、ステップS1001において、旧データの全てのキーを差分ツリーに挿入する。この処理の詳細は、後に図11を参照して行う。なお、旧データがすでにカップルドノードツリーに格納されている、すなわちデータベースのインデックスがカップルドノードツリーのデータ構造を有しているものであれば、ステップ1001に代えてその登録されたルートノードの配列番号を取得するだけでよい。また、カップルドノードツリーを配列に格納しない場合であれば、ルートノードの位置を示す位置情報を取得すればよい。
次に、ステップS1002において、新データを設定する。この新データの設定は、新データの供給元から供給された新データを、例えば図3B及び図9に示す新データ格納領域322に格納することによって行われるが、供給元から供給された新データを格納した記憶媒体から直接キーを読み出すことも可能である。
次にステップS1003に進み、全ての新データが処理済であるか判定する。全ての新データが処理済であればステップS1008に移行し、処理済でなければステップS1004に進む。
ステップS1004では、ステップS1002で設定された新データからキーを取り出す。次のステップS1005で、該取り出したキーを削除キーとして差分ツリーから削除する。この削除処理は、図8A及び図8Bに示すものである。
次にステップS1006において、ステップS1005での削除が成功したかを判定する。削除に成功すれば、ステップS1003に戻り、失敗すればステップS1007において、削除キーを挿入キーとして差分データを作成し、ステップS1003に戻る。ステップS1007の処理の詳細は、後に図12を参照して説明する。
全ての新データが処理済となってステップS1003から分岐したステップS1008においては、差分ツリーが登録されているかを判定する。登録されていなければ処理を終了し、登録されていればステップS1009で差分ツリーの全てのキーを取り出し、削除キーとして差分データを作成して処理を終了する。ステップS1009の詳細は、後に図13を参照して説明する。
なお、図10で説明してフローはあくまで1つの例であり、先に図9による説明で述べたように新データにより差分ツリーを生成する方法や処理の順番を一部替える等の種々の変形が可能であることは当業者にとって自明である。
図11は、図10に示す旧データと新データにより差分データを作成する処理フローのステップS1001で実行される、旧データによりカップルドノードツリー(差分ツリー)を作成する処理フローを説明する図である。
最初にステップS1101において、旧データを設定する。この旧データの設定は、旧データの供給元から供給された旧データを保管しておき、例えば図3B及び図9に示す旧データ格納領域321に格納することによって行われるが、供給元から供給された旧データを格納した記憶媒体から直接キーを読み出すことも可能である。
次にステップS1102で旧データから全てのキーを取り出し済みか判定し、取り出し済みであれば処理を終了する。
旧データから全てのキーを取り出し済みでなければ、ステップS1103において旧データからキーを取り出し、ステップS1104に進んで取り出したキーを挿入キーとして、図7A〜図7Dに示す処理により、差分ツリーにキーを挿入する。
ステップS1104の挿入処理の後、ステップS1102の判定処理に戻るループ処理を、旧データから全てのキーが取り出し済みとなるまで繰り返す。
図12は、差分データに更新データを格納する処理フローを説明する図である。図12に示す処理フローは、図10に示す旧データと新データにより差分データを作成する処理フローのステップS1007で実行される、削除キーを挿入キーとして差分データを作成する処理に適用可能なものである。
また、図12に示す処理フローは、図10に示す処理フローのステップS1009で実行される差分データ作成処理にも適用可能なものとなっており、データの更新が挿入であるか削除であるかの情報と、差分データの更新キーとなるキーの値が与えられるものとしている。また、ワークエリアとして、図示しない更新種別と更新キーからなる更新データ設定エリアを使用するものとする。
図に示すようにステップS1201において、更新データ設定エリアの更新種別に、データの更新が挿入であるか削除であるかの情報に基づいて、更新種別を設定する。図9に示す例では、呼出元がステップS1007であり、データ更新が挿入であれば、更新種別に“i”が設定される。
次にステップS1202において、更新データ設定エリアの更新キーに、更新キーとなるキーの値を設定する。
次にステップS1203において、ステップS1201とステップS1202で更新データ設定エリアに設定された更新データを差分データ格納領域に格納して処理を終了する。
図13は、図10に示す旧データと新データにより差分データを作成する処理フローのステップS1009で実行される、差分ツリーの全てのキーを取り出し、削除キーとして差分データを作成する処理フローを説明する図である。
ステップS1301において、検索開始ノードの配列番号として、差分ツリーのルートノードの配列番号を設定する。次に検索開始ノードより図5に示す最小値検索を行い、インデックスキーの最小値を求める。
次にステップS1303に進み、ステップS1302で求めた最小値を削除キーとして差分データを作成する。このステップ1303の処理は、更新種別を削除とし、更新キーの値を直前の最小値検索で求めた最小値として図12に示す差分データに更新データを格納する処理により実現される。
以下、ステップS1303、ステップS1304〜ステップS1310に示すように、差分ツリーから最小値検索を繰り返して昇順でインデックスキーを取り出し、取り出した最小値を削除キーとして差分データを作成するステップS1303を繰り返す。
したがって、ステップS1304〜ステップS1310の処理は、図6に示すインデックスキーを昇順に取り出す処理フローのステップS604〜ステップS610の処理と同様であるので、説明を省略する。
なお、図10に示すステップS1009で実行される処理では、差分ツリーに残された全てのキーを取り出せればよいのであるから、図13に示す昇順取り出しに限らず、先に述べた降順取り出しを採用することも可能である。
以上の図10〜図13を参照して説明した処理により、旧データと新データにより差分データが作成される。
次に、図14、図15を参照して、本発明に係る差分データにより旧データを新データに更新する処理について説明する。
図14は、本発明の一実施形態における差分データにより旧データを新データに更新する処理の概要を説明する図である。図14に示す例は、図9において例示した旧データと新データにより作成された差分データにより、図3Bに例示する差分データ更新装置400aにおいて旧データを新データに更新するものとしている。
したがって、インデックス格納領域421aには、図9に示す旧データと同様に、旧データのキー321a“010010”、321b“010011”、321c“100011”、321d“101011”及び321e“101100”が格納されている。また同様に、差分データ格納領域420aにも、図9に示す差分データ格納領域に格納された更新データと同一のデータが格納されている。
旧データであるキー321a〜321eは、図14の(A)に示す挿入処理により、更新前の更新ツリー409a−1に挿入される。なお、図14の(A)に示すS1501は、後記図15に示す差分データにより旧データを新データに更新する処理フローのステップS1501での処理に対応することを示すものである。以下の図14の(B)〜(D)についても同様である。
次に、図14の(B)に示すように、差分データ格納領域420aに格納された更新データのうち、更新種別281の値が“d”である更新データ380a、380bの更新キー282であるキー321bとキー321dによる削除処理が図15に示すフローのステップS1508で行われる。
さらに、図14の(C)に示すように、差分データ格納領域420aに格納された差分データのうち、更新種別281の値が“i”である更新データ380c、380dの更新キー282であるキー322bとキー322cよる挿入処理が図15に示すフローのステップS1507で行われる。
その結果、更新前の更新ツリー409a−1は更新後の更新ツリー409a−2に更新される。更新ツリー409a−2には、旧データに含まれていたキー321a、321c及び321eと挿入されたキー322bと322cが含まれている。
次に、図14の(D)に示すように、更新後の更新ツリー409a−2からキーを取り出して新データ格納領域422aに格納する処理が図15に示すステップS1509で行われ、旧データが新データに更新される。新データ格納領域422aには、キー321a“010010”、322b“010110”、322c“100010”、321c“100011”及び321e“101100”が格納されている。なお、新データ格納領域422aはインデックス格納領域421aと同一の領域とし、旧データに新データを上書きすることができる。
なお、上述の説明では、更新ツリー409a−1に対して削除処理を実行した後に挿入処理を行うものとしたが、どのような順番で削除挿入を実行しても結果は同一である。
また、差分データ420aのうち、挿入キーのみ取り出して旧データ421aとともに更新前の更新ツリー409a−1を作成し、その後削除処理のみによって更新後の更新ツリー409a−2を作成する等種々の変形が可能である。
図15は、差分データにより旧データを新データに更新する処理フローを説明する図である。
図15に示すように、ステップS1501において、旧データの全てのキーを更新ツリーに挿入する。この処理は、図11を参照して説明した旧データによりカップルドノードツリーを作成する処理により、実現される。先に述べたのと同様に、旧データがすでにカップルドノードツリーに格納されている、すなわちデータベースのインデックスがカップルドノードツリーのデータ構造を有しているものであれば、ステップ1501に代えてその登録されたルートノードの配列番号あるいはルートノードの位置を示す位置情報を取得するだけでよい。さらにその場合、データベースのインデックスがカップルドノードツリーのデータ構造を有しているのであるから、後記ステップS1509の処理が不要になることも明らかである。
次に、ステップS1502において、差分データを設定する。この差分データの設定は、差分データ作成装置により差分データを作成した供給元から供給された差分データを、例えば図3B及び図14に示す差分データ格納領域420a〜420xに格納することによって行われるが、供給元から供給された新データを格納した記憶媒体から直接キーを読み出すことも可能である。
次にステップS1503に進み、全ての更新データが処理済であるか判定する。全ての更新データが処理済であればステップS1509に移行し、処理済でなければステップS1504に進む。
ステップS1504では、ステップS1502で設定された差分データの更新データを取り出し、そこから更新キーを取り出す。
次のステップS1505で、更新データから更新種別を取り出し、次にステップS1506において、ステップS1505で取り出した更新種別を判定する。
更新種別が削除であればステップS1507に進み、挿入であればステップS1508に進む。
ステップS1507では、図8A、図8Bに示す削除処理により、更新キーを削除キーとして更新ツリーより削除して、ステップS1503に戻る。
ステップS1508では、図7A〜図7Dに示す挿入処理により、更新キーを挿入キーとして更新ツリーに挿入して、ステップS1503に戻る。
全ての更新データが処理済となってステップS1503から分岐したステップS1509においては、図6に示す昇順取り出し処理により、更新ツリーの全てのキーを新データとして取り出し、処理を終了する。
上述の説明では、更新データの更新種別により削除処理と挿入処理を切り分けたが、図10に示す差分データ作成処理において、差分データファイルを削除キーのファイルと挿入キーのファイルに分割して作成すれば、それぞれのファイルごとに削除処理と挿入処理を実行することになる。また、図14の説明で述べたように、旧データと挿入キーのファイルの全てのキーを更新ツリーに挿入する処理を行い、削除キーのファイルに格納された削除キーにより更新ツリーの削除処理を実行して旧データを新データに更新することも可能である。
以上詳細に説明したところから明らかなとおり、本発明によればカップルドノードツリーを活用することにより、データベースのインデックスを旧データのものから新データに効率よく更新することができる。
また、本発明の実施の形態は上記に限ることなく種々の変形が可能であることは当業者に明らかである。さらに、本発明のインデックスキーの更新方法を、コンピュータに実行させるプログラムによりコンピュータで実行可能なことは明らかである。
したがって、上記プログラム、及びプログラムを記憶したコンピュータ読み取り可能な記憶媒体は、本発明の実施の形態に含まれる。
従来の検索で用いられるパトリシアツリーの一例を示す図である。 配列に格納されたカップルドノードツリーの構成例を説明する図である。 カップルドノードツリーのツリー構造を概念的に示す図である。 本発明の原理を説明する図である。 本発明を実施するためのハードウェア構成例を説明する図である。 差分データ作成装置の機能ブロック構成を説明する図である。 差分データ更新装置の機能ブロック構成を説明する図である。 ビット列検索の基本動作を示したフローチャートである。 カップルドノードツリーに格納されたインデックスキーの最小値を求める処理を示したフローチャートである。 カップルドノードツリーに格納されたインデックスキーを昇順に取り出す処理を示したフローチャートである。 挿入処理の前段である検索処理の処理フローを示す図である。 挿入するノード対のための配列要素を準備する処理を説明する処理フロー図である。 ノード対を挿入する位置を求め、ノード対の各ノードの内容を書き込んで挿入処理を完成させる処理フローを示す図である。 ルートノードの挿入処理を含むインデックスキーを追加する場合のノード挿入処理全体を説明する処理フロー図である。 削除処理の前段である検索処理の処理フローを示す図である。 削除処理の後段の処理フローを説明する図である。 新旧データによる差分データ作成処理の概要を説明する図である。 新旧データによる差分データ作成の処理フローを説明する図である。 旧データによりカップルドノードツリーを作成する処理フローを説明する図である。 差分データに更新データを格納する処理フローを説明する図である。 差分ツリーに残ったキーを削除キーとして差分データを作成する処理フローを説明する図である。 差分データにより旧データを新データに更新する処理の概要を説明する図である。 差分データにより旧データを新データに更新する処理フローを説明する図である。
符号の説明
10、20、30 配列番号
100 配列
101 ノード
102 ノード種別
103 弁別ビット位置
104 代表ノード番号
111 ノード対
112 ノード[0]、代表ノード
113 ノード[1]、代表ノードと対をなすノード
118 インデックスキー
300 差分データ作成装置
301 データ処理装置
302 中央処理装置
303 キャッシュメモリ
304 バス
305 主記憶装置
306 外部記憶装置
307 通信装置
309 配列
310 探索経路スタック
320 差分データ格納領域
321 旧データ格納領域
322 新データ格納領域
330 差分ツリー取得手段
331 差分データ作成手段
400 差分データ更新装置
420 差分データ格納領域
421 インデックス格納領域
422 更新ツリー取得手段
423 新旧インデックスキー更新手段

Claims (15)

  1. コンピュータが実行するデータベースのインデックスキー更新方法であって、データベースのインデックスキーの旧データに対して該旧データと置き換えられる新しいインデックスキーの新データが供給されたときに、前記インデックスキーの更新を行うデータベースのインデックスキー更新方法において、
    前記旧データあるいは新データのインデックスキー
    ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、前記ツリーの任意のノードを検索開始ノードとして前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーのリーフノードのインデックスキーとして格納されている場合は、該カップルドノードツリーを差分ツリーとし、登録されたルートノードの位置情報を取得し、前記旧データあるいは新データのインデックスキーが、カップルドノードツリーのリーフノードのインデックスキーとして格納されていない場合は、前記旧データあるいは新データのインデックスキーにより前記差分ツリーを生成する差分ツリー取得ステップと、
    前記差分ツリーのルートノードを前記検索開始ノードとして前記新データあるいは旧データの全てのインデックスキーを検索キーとして検索を行い、検索キーと一致した前記検索結果キーであるインデックスキーは差分ツリーから削除し、前記検索結果キーであるインデックスキーと一致しない検索キーを差分データの挿入キーあるいは削除キーとし、前記新データあるいは旧データの全てのインデックスキーによる検索が終了した後に前記差分ツリーに削除されずに残ったインデックスキーを差分データの削除キーあるいは挿入キーとして差分データを作成する差分データ作成ステップと、
    前記旧データのインデックスキーが、前記カップルドノードツリーのリーフノードのインデックスキーとして格納されている場合は、該カップルドノードツリーを更新ツリーとし、登録されたルートノードの位置情報を取得し、前記旧データのインデックスキーが、カップルドノードツリーのリーフノードのインデックスキーとして格納されていない場合は、前記旧データのインデックスキーにより前記更新ツリーを生成する更新ツリー取得ステップと、
    前記差分データから取り出した削除キーを前記更新ツリーから削除し、前記差分データから取り出した挿入キーを前記更新ツリーに挿入することにより新データのインデックスキーをリーフノードのインデックスキーとして格納した新データカップルドノードツリーを作成し、該新データカップルドノードツリーに基づいて、前記旧データを前記新データに更新する新旧インデックスキー更新ステップと、
    を備えることを特徴とするインデックスキー更新方法。
  2. コンピュータが実行する差分データ作成方法であって、データベースのインデックスキーの旧データに対して該旧データと置き換えられる新しいインデックスキーの新データが供給されたときに、前記インデックスキーの更新を行うデータベースのインデックスキー更新に用いる前記旧データと前記新データの差分データ作成方法において、
    前記旧データあるいは新データのインデックスキー
    ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、前記ツリーの任意のノードを検索開始ノードとして前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーのリーフノードのインデックスキーとして格納されている場合は、該カップルドノードツリーを差分ツリーとし、登録されたルートノードの位置情報を取得し、前記旧データあるいは新データのインデックスキーが、カップルドノードツリーのリーフノードのインデックスキーとして格納されていない場合は、前記旧データあるいは新データのインデックスキーにより前記差分ツリーを生成する差分ツリー取得ステップと、
    前記差分ツリーのルートノードを前記検索開始ノードとして前記新データあるいは旧データの全てのインデックスキーを検索キーとして検索を行い、検索キーと一致した前記検索結果キーであるインデックスキーは差分ツリーから削除し、前記検索結果キーであるインデックスキーと一致しない検索キーを差分データの挿入キーあるいは削除キーとし、前記新データあるいは旧データの全てのインデックスキーによる検索が終了した後に前記差分ツリーに削除されずに残ったインデックスキーを差分データの削除キーあるいは挿入キーとして差分データを作成する差分データ作成ステップと、
    を備えることを特徴とする差分データ作成方法。
  3. 請求項2記載の差分データ作成方法において、
    前記カップルドノードツリーは、配列に記憶され、前記リンク先のノード対の代表ノードの位置を示す情報は、そのノードが格納された前記配列の配列要素の配列番号であることを特徴とする差分データ作成方法。
  4. 請求項3記載の差分データ作成方法において、
    前記差分ツリー取得ステップは、前記差分ツリーを生成する際に、前記旧データあるいは新データから最初に取り出したインデックスキーを含むリーフノードを該差分ツリーのルートノードとした後、それ以後前記旧データあるいは新データから取り出した前記インデックスキーを前記検索キーとして該差分ツリーから該当するリーフノードを検索するとともに、該リーフノードに至るまでたどったリンク経路のブランチノード及び該リーフノードが格納された配列要素の配列番号をスタックに順次格納し、前記検索キーと前記該当するリーフノードに含まれるインデックスキーの間で大小比較とビット列比較を行い、ビット列比較で異なるビット値となる先頭のビット位置と前記スタックに格納されているブランチノードの弁別ビット位置との相対的位置関係により挿入されるインデックスキーを含むリーフノードともう一方のノードからなるノード対の挿入位置を決定し、前記大小関係により挿入するインデックスキーを含むリーフノードを前記挿入されるノード対のどちらのノードとするかを決定するインデックスキーの挿入処理を繰り返すものであることを特徴とする差分データ作成方法。
  5. コンピュータが実行する差分データ更新方法であって、データベースのインデックスキーの旧データと該旧データと置き換えられる新しいインデックスキーの新データの差分データを用いて前記インデックスキーの更新を行うインデックスキーの差分データ更新方法において、
    前記旧データのインデックスキー
    ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、前記ツリーの任意のノードを検索開始ノードとして前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーのリーフノードのインデックスキーとして格納されている場合は、該カップルドノードツリーを更新ツリーとし、登録されたルートノードの位置情報を取得し、前記旧データのインデックスキーが、カップルドノードツリーのリーフノードのインデックスキーとして格納されていない場合は、前記旧データのインデックスキーにより前記更新ツリーを生成する更新ツリー取得ステップと、
    前記旧データあるいは新データのインデックスキーを前記カップルドノードツリーのリーフノードのインデックスキーとして格納した差分ツリーのルートノードを前記検索開始ノードとして前記新データあるいは旧データの全てのインデックスキーを検索キーとして検索を行い、検索キーと一致した前記検索結果キーであるインデックスキーは差分ツリーから削除し、前記検索結果キーであるインデックスキーと一致しない検索キーを差分データの挿入キーあるいは削除キーとし、前記新データあるいは旧データの全てのインデックスキーによる検索が終了した後に前記差分ツリーに削除されずに残ったインデックスキーを前記差分データの削除キーあるいは挿入キーとして作成した差分データから取り出した削除キーを前記更新ツリーから削除し、前記差分データから取り出した挿入キーを前記更新ツリーに挿入することにより新データのインデックスキーをリーフノードのインデックスキーとして格納した新データカップルドノードツリーを作成し、該新データカップルドノードツリーに基づいて、前記旧データを前記新データに更新する新旧インデックスキー更新ステップと、
    を備えることを特徴とするインデックスキーの差分データ更新方法。
  6. 請求項5記載のインデックスキーの差分データ更新方法において、
    前記カップルドノードツリーは、配列に記憶され、前記リンク先のノード対の代表ノードの位置を示す情報は、そのノードが格納された前記配列の配列要素の配列番号であることを特徴とするインデックスキーの差分データ更新方法。
  7. 請求項6記載のインデックスキーの差分データ更新方法において、
    前記更新ツリー取得ステップは、前記更新ツリーを生成する際に、前記旧データから最初に取り出したインデックスキーを含むリーフノードを該更新ツリーのルートノードとした後、それ以後前記旧データから取り出した前記インデックスキーを前記検索キーとして該更新ツリーから該当するリーフノードを検索するとともに、該リーフノードに至るまでたどったリンク経路のブランチノード及び該リーフノードが格納された配列要素の配列番号をスタックに順次格納し、前記検索キーと前記該当するリーフノードに含まれるインデックスキーの間で大小比較とビット列比較を行い、ビット列比較で異なるビット値となる先頭のビット位置と前記スタックに格納されているブランチノードの弁別ビット位置との相対的位置関係により挿入されるインデックスキーを含むリーフノードともう一方のノードからなるノード対の挿入位置を決定し、前記大小関係により挿入するインデックスキーを含むリーフノードを前記挿入されるノード対のどちらのノードとするかを決定するインデックスキーの挿入処理を繰り返すものであることを特徴とするインデックスキーの差分データ更新方法。
  8. 請求項7記載のインデックスキーの差分データ更新方法において、
    前記更新ツリー取得ステップは、前記更新ツリーを生成する際に、前記旧データのインデックスキーに加えて、前記差分データの挿入キーを取り出して前記インデックスキーの挿入処理を繰り返すものであり、
    前記新旧インデックスキー更新ステップは、前記差分データから取り出した削除キーを前記更新ツリーから削除することにより新データのインデックスキーをリーフノードのインデックスキーとして格納した新データカップルドノードツリーを作成し、該新データカップルドノードツリーに基づいて、前記旧データを前記新データに更新するものであることを特徴とするインデックスキーの差分データ更新方法。
  9. 請求項5記載のインデックスキーの差分データ更新方法において、
    前記旧データのインデックスキーはカップルドノードツリーに格納されており、
    前記更新ツリー取得ステップは、該カップルドノードツリーのルートノードの位置を示す位置情報を取得するものであり、
    前記新旧インデックスキー更新ステップは、前記新データカップルドノードツリーを作成することで前記旧データを前記新データに更新する、
    ことを特徴とするインデックスキーの差分データ更新方法。
  10. データベースのインデックスキーの旧データに対して該旧データと置き換えられる新しいインデックスキーの新データが供給されたときに、前記インデックスキーの更新を行うデータベースのインデックスキー更新に用いる前記旧データと前記新データの差分データ作成装置において、
    前記旧データあるいは新データのインデックスキー
    ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、前記ツリーの任意のノードを検索開始ノードとして前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーのリーフノードのインデックスキーとして格納されている場合は、該カップルドノードツリーを差分ツリーとし、登録されたルートノードの位置情報を取得し、前記旧データあるいは新データのインデックスキーが、カップルドノードツリーのリーフノードのインデックスキーとして格納されていない場合は、前記旧データあるいは新データのインデックスキーにより前記差分ツリーを生成する差分ツリー取得手段と、
    前記差分ツリーのルートノードを前記検索開始ノードとして前記新データあるいは旧データの全てのインデックスキーを検索キーとして検索を行い、検索キーと一致した前記検索結果キーであるインデックスキーは差分ツリーから削除し、前記検索結果キーであるインデックスキーと一致しない検索キーを差分データの挿入キーあるいは削除キーとし、前記新データあるいは旧データの全てのインデックスキーによる検索が終了した後に前記差分ツリーに削除されずに残ったインデックスキーを差分データの削除キーあるいは挿入キーとして差分データを作成する差分データ作成手段と、
    を備えることを特徴とする差分データ作成装置。
  11. データベースのインデックスキーの旧データと該旧データと置き換えられる新しいインデックスキーの新データの差分データを用いて前記インデックスキーの更新を行うインデックスキーの差分データ更新装置において、
    前記旧データのインデックスキー
    ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、前記ツリーの任意のノードを検索開始ノードとして前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーのリーフノードのインデックスキーとして格納されている場合は、該カップルドノードツリーを更新ツリーとし、登録されたルートノードの位置情報を取得し、前記旧データのインデックスキーが、カップルドノードツリーのリーフノードのインデックスキーとして格納されていない場合は、前記旧データのインデックスキーにより前記更新ツリーを生成する更新ツリー取得手段と、
    前記旧データあるいは新データのインデックスキーを前記カップルドノードツリーのリーフノードのインデックスキーとして格納した差分ツリーのルートノードを前記検索開始ノードとして前記新データあるいは旧データの全てのインデックスキーを検索キーとして検索を行い、検索キーと一致した前記検索結果キーであるインデックスキーは差分ツリーから削除し、前記検索結果キーであるインデックスキーと一致しない検索キーを差分データの挿入キーあるいは削除キーとし、前記新データあるいは旧データの全てのインデックスキーによる検索が終了した後に前記差分ツリーに削除されずに残ったインデックスキーを差分データの削除キーあるいは挿入キーとして作成した差分データから取り出した削除キーを前記更新ツリーから削除し、前記差分データから取り出した挿入キーを前記更新ツリーに挿入することにより新データのインデックスキーをリーフノードのインデックスキーとして格納した新データカップルドノードツリーを作成し、該新データカップルドノードツリーに基づいて、前記旧データを前記新データに更新する新旧インデックスキー更新手段と、
    を備えることを特徴とするインデックスキーの差分データ更新装置。
  12. 請求項11記載のインデックスキーの差分データ更新装置において、
    前記旧データのインデックスキーはカップルドノードツリーに格納されており、
    前記更新ツリー取得手段は、該カップルドノードツリーのルートノードの位置を示す位置情報を取得するものであり、
    前記新旧インデックスキー更新手段は、前記新データカップルドノードツリーを作成することで前記旧データを前記新データに更新する、
    ことを特徴とするインデックスキーの差分データ更新装置。
  13. データベースのインデックスキーの旧データに対して該旧データと置き換えられる新しいインデックスキーの新データが供給されたときに、前記インデックスキーの更新を行うデータベースのインデックスキー更新に用いられるコンピュータ上で動作するプログラムにおいて、
    前記旧データあるいは新データのインデックスキー
    ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、前記ツリーの任意のノードを検索開始ノードとして前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーのリーフノードのインデックスキーとして格納されている場合は、該カップルドノードツリーを差分ツリーとし、登録されたルートノードの位置情報を取得し、前記旧データあるいは新データのインデックスキーが、カップルドノードツリーのリーフノードのインデックスキーとして格納されていない場合は、前記旧データあるいは新データのインデックスキーにより前記差分ツリーを生成する差分ツリー取得ステップと、
    前記差分ツリーのルートノードを前記検索開始ノードとして前記新データあるいは旧データの全てのインデックスキーを検索キーとして検索を行い、検索キーと一致した前記検索結果キーであるインデックスキーは差分ツリーから削除し、前記検索結果キーであるインデックスキーと一致しない検索キーを差分データの挿入キーあるいは削除キーとし、前記新データあるいは旧データの全てのインデックスキーによる検索が終了した後に前記差分ツリーに削除されずに残ったインデックスキーを差分データの削除キーあるいは挿入キーとして差分データを作成する差分データ作成ステップと、
    をコンピュータに実行させることを特徴とするプログラム。
  14. データベースのインデックスキーの旧データに対して該旧データと置き換えられる新しいインデックスキーの新データが供給されたときに、前記インデックスキーの更新を行うデータベースのインデックスキー更新に用いられるコンピュータ上で動作するプログラムにおいて、
    前記旧データのインデックスキー
    ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、前記ツリーの任意のノードを検索開始ノードとして前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーのリーフノードのインデックスキーとして格納されている場合は、該カップルドノードツリーを更新ツリーとし、登録されたルートノードの位置情報を取得し、前記旧データのインデックスキーが、カップルドノードツリーのリーフノードのインデックスキーとして格納されていない場合は、前記旧データのインデックスキーにより前記更新ツリーを生成する更新ツリー取得ステップと、
    請求項13記載の前記差分データ作成ステップで作成された差分データから取り出した削除キーを前記更新ツリーから削除し、前記差分データから取り出した挿入キーを前記更新ツリーに挿入することにより新データのインデックスキーをリーフノードのインデックスキーとして格納した新データカップルドノードツリーを作成し、該新データカップルドノードツリーに基づいて、前記旧データを前記新データに更新する新旧インデックスキー更新ステップと、
    をコンピュータに実行させることを特徴とするプログラム。
  15. 請求項13又は請求項14記載のプログラムを記憶したことを特徴とするコンピュータ読み取り可能な記憶媒体。
JP2007338413A 2007-12-28 2007-12-28 データベースのインデックスキー更新方法及びプログラム Expired - Fee Related JP4498409B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2007338413A JP4498409B2 (ja) 2007-12-28 2007-12-28 データベースのインデックスキー更新方法及びプログラム
EP08866463.6A EP2246796B1 (en) 2007-12-28 2008-10-30 Database index key update method and program
CN2008801224040A CN101911060B (zh) 2007-12-28 2008-10-30 数据库的索引关键字更新方法
PCT/JP2008/003123 WO2009084145A1 (ja) 2007-12-28 2008-10-30 データベースのインデックスキー更新方法及びプログラム
US12/801,649 US8103697B2 (en) 2007-12-28 2010-06-18 Database index key update method and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007338413A JP4498409B2 (ja) 2007-12-28 2007-12-28 データベースのインデックスキー更新方法及びプログラム

Publications (3)

Publication Number Publication Date
JP2009157853A JP2009157853A (ja) 2009-07-16
JP2009157853A5 JP2009157853A5 (ja) 2010-02-18
JP4498409B2 true JP4498409B2 (ja) 2010-07-07

Family

ID=40823881

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007338413A Expired - Fee Related JP4498409B2 (ja) 2007-12-28 2007-12-28 データベースのインデックスキー更新方法及びプログラム

Country Status (5)

Country Link
US (1) US8103697B2 (ja)
EP (1) EP2246796B1 (ja)
JP (1) JP4498409B2 (ja)
CN (1) CN101911060B (ja)
WO (1) WO2009084145A1 (ja)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011524039A (ja) * 2008-05-21 2011-08-25 ヴェリジー(シンガポール) プライベート リミテッド 反復ビット値パターンを決定する方法及び装置
US9778188B2 (en) 2009-03-11 2017-10-03 Industrial Technology Research Institute Apparatus and method for detection and discrimination molecular object
US20120144123A1 (en) * 2010-12-01 2012-06-07 International Business Machines Corporation Read-ahead processing in networked client-server architecture
CN102651007A (zh) * 2011-02-28 2012-08-29 国际商业机器公司 一种管理数据库索引的方法和装置
US20120233250A1 (en) * 2011-03-11 2012-09-13 International Business Machines Corporation Auto-updatable document parts within content management systems
US8918651B2 (en) * 2012-05-14 2014-12-23 International Business Machines Corporation Cryptographic erasure of selected encrypted data
US9710475B1 (en) 2012-07-16 2017-07-18 Tintri Inc. Synchronization of data
US9817835B2 (en) 2013-03-12 2017-11-14 Tintri Inc. Efficient data synchronization for storage containers
CN103150400B (zh) * 2013-03-27 2017-06-06 领航动力信息系统有限公司 一种基于MapReduce框架的数据筛选方法
US10628378B2 (en) * 2013-09-03 2020-04-21 Tintri By Ddn, Inc. Replication of snapshots and clones
JP6273892B2 (ja) * 2014-02-21 2018-02-07 株式会社リコー データ検索装置、プログラム、及びデータ検索システム
CN105468603B (zh) * 2014-08-22 2019-04-02 腾讯科技(深圳)有限公司 数据选择方法及装置
US20160063051A1 (en) * 2014-08-29 2016-03-03 Netapp, Inc. Methods for persisting data on nonvolatile memory for fast updates and instantaneous recovery and devices thereof
US10810168B2 (en) * 2015-11-24 2020-10-20 Red Hat, Inc. Allocating file system metadata to storage nodes of distributed file system
SG11201811425TA (en) * 2016-09-22 2019-01-30 Visa Int Service Ass Techniques for in-memory key range searches
CN106776746A (zh) * 2016-11-14 2017-05-31 天津南大通用数据技术股份有限公司 一种全文索引数据的创建方法及装置
CN108427675B (zh) * 2017-02-13 2022-09-02 阿里巴巴集团控股有限公司 构建索引的方法及设备
CN107451486B (zh) * 2017-06-30 2021-05-18 华为技术有限公司 一种文件系统的权限设置方法及装置
CN108804542B (zh) * 2018-05-16 2021-12-07 河北天翼科贸发展有限公司 一种基于内存运算的快速获取文件增量方法
KR102057055B1 (ko) 2018-06-27 2019-12-18 주식회사 티맥스데이터 인덱스 관리 방법
US10915546B2 (en) 2018-10-10 2021-02-09 Micron Technology, Inc. Counter-based compaction of key-value store tree data block
US11100071B2 (en) * 2018-10-10 2021-08-24 Micron Technology, Inc. Key-value store tree data block spill with compaction
US10852978B2 (en) 2018-12-14 2020-12-01 Micron Technology, Inc. Key-value store using journaling with selective data storage format
US10936661B2 (en) 2018-12-26 2021-03-02 Micron Technology, Inc. Data tree with order-based node traversal
CN110489415B (zh) * 2019-07-23 2023-11-03 平安科技(深圳)有限公司 一种数据更新方法及相关设备
CN111488341B (zh) * 2020-03-27 2023-08-22 北京金山云网络技术有限公司 数据库索引的管理方法、装置及电子设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001357070A (ja) * 2000-06-13 2001-12-26 Nec Corp 情報検索方法及び装置
JP2008015872A (ja) * 2006-07-07 2008-01-24 S Grants Co Ltd ビット列検索装置、検索方法及びプログラム
JP2008112240A (ja) * 2006-10-30 2008-05-15 S Grants Co Ltd ビット列検索方法及びプログラム
JP2008159025A (ja) * 2006-11-28 2008-07-10 S Grants Co Ltd カップルドノードツリーの分割/結合方法及びプログラム
JP2008181260A (ja) * 2007-01-24 2008-08-07 S Grants Co Ltd ビット列検索装置、検索方法及びプログラム
JP2008269197A (ja) * 2007-04-19 2008-11-06 S Grants Co Ltd カップルドノードツリーの退避/復元方法及びプログラム

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3887867B2 (ja) * 1997-02-26 2007-02-28 株式会社日立製作所 構造化文書の登録方法
US6029170A (en) * 1997-11-25 2000-02-22 International Business Machines Corporation Hybrid tree array data structure and method
JP3368237B2 (ja) * 1999-04-14 2003-01-20 キヤノン株式会社 コード処理方法、端末装置及び記憶媒体
CA2279119C (en) * 1999-07-29 2004-10-19 Ibm Canada Limited-Ibm Canada Limitee Heuristic-based conditional data indexing
US6662184B1 (en) * 1999-09-23 2003-12-09 International Business Machines Corporation Lock-free wild card search data structure and method
US6675163B1 (en) * 2000-04-06 2004-01-06 International Business Machines Corporation Full match (FM) search algorithm implementation for a network processor
US6594655B2 (en) * 2001-01-04 2003-07-15 Ezchip Technologies Ltd. Wildcards in radix- search tree structures
US6785699B1 (en) * 2001-05-04 2004-08-31 Lsi Logic Corporation Prefix comparator
US7702641B2 (en) * 2001-06-04 2010-04-20 Oracle America, Inc. Method and system for comparing and updating file trees
US7149737B1 (en) * 2002-04-04 2006-12-12 Ncr Corp. Locking mechanism using a predefined lock for materialized views in a database system
US6934252B2 (en) * 2002-09-16 2005-08-23 North Carolina State University Methods and systems for fast binary network address lookups using parent node information stored in routing table entries
US6915300B1 (en) * 2003-12-19 2005-07-05 Xerox Corporation Method and system for searching indexed string containing a search string
JP2006187827A (ja) 2005-01-05 2006-07-20 Toyo Tire & Rubber Co Ltd 研磨パッド
JP2006293619A (ja) 2005-04-08 2006-10-26 Toshiba Tec Corp コンピュータ装置及びログ出力プログラム
US9037553B2 (en) * 2006-03-16 2015-05-19 Novell, Inc. System and method for efficient maintenance of indexes for XML files
JP2008097215A (ja) 2006-10-10 2008-04-24 Just Syst Corp データ処理装置
EP2149845B1 (en) * 2007-04-19 2013-06-12 Kousokuya, Inc. Coupled node tree backup/restore apparatus, backup/restore method, and program
US20090063400A1 (en) * 2007-09-05 2009-03-05 International Business Machines Corporation Apparatus, system, and method for improving update performance for indexing using delta key updates

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001357070A (ja) * 2000-06-13 2001-12-26 Nec Corp 情報検索方法及び装置
JP2008015872A (ja) * 2006-07-07 2008-01-24 S Grants Co Ltd ビット列検索装置、検索方法及びプログラム
JP2008112240A (ja) * 2006-10-30 2008-05-15 S Grants Co Ltd ビット列検索方法及びプログラム
JP2008159025A (ja) * 2006-11-28 2008-07-10 S Grants Co Ltd カップルドノードツリーの分割/結合方法及びプログラム
JP2008181260A (ja) * 2007-01-24 2008-08-07 S Grants Co Ltd ビット列検索装置、検索方法及びプログラム
JP2008269197A (ja) * 2007-04-19 2008-11-06 S Grants Co Ltd カップルドノードツリーの退避/復元方法及びプログラム

Also Published As

Publication number Publication date
JP2009157853A (ja) 2009-07-16
US20100262617A1 (en) 2010-10-14
EP2246796A1 (en) 2010-11-03
US8103697B2 (en) 2012-01-24
EP2246796A4 (en) 2011-09-14
WO2009084145A1 (ja) 2009-07-09
CN101911060A (zh) 2010-12-08
CN101911060B (zh) 2012-09-05
EP2246796B1 (en) 2013-04-24

Similar Documents

Publication Publication Date Title
JP4498409B2 (ja) データベースのインデックスキー更新方法及びプログラム
JP4271227B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4402120B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4502223B2 (ja) ビット列のマージソート装置、方法及びプログラム
JP4379894B2 (ja) カップルドノードツリーの分割/結合方法及びプログラム
JP4514771B2 (ja) カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム
JP4271214B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4514768B2 (ja) カップルドノードツリーの退避/復元装置、退避/復元方法及びプログラム
JP4527753B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4439013B2 (ja) ビット列検索方法及び検索プログラム
US8250089B2 (en) Bit string search apparatus, search method, and program
JP4514810B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4417431B2 (ja) カップルドノードツリーの分割/結合方法及びプログラム
WO2010125742A1 (ja) インデックス更新データ作成装置、作成方法及びプログラム
JP4567754B2 (ja) ビット列検索装置、検索方法及びプログラム
JP2011018296A (ja) カップルドノードツリーのインデックスキー挿入/削除方法
EP2149845B1 (en) Coupled node tree backup/restore apparatus, backup/restore method, and program
JP4813575B2 (ja) ビット列検索装置
JP5220057B2 (ja) ビット列検索装置、検索方法及びプログラム
JP2014126883A (ja) 部分的木構造に応じた適応型再構成装置及び方法及びプログラム
WO2009093290A1 (ja) ビット列検索装置、検索方法及びプログラム

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091225

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20091225

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20091225

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20100121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100202

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100325

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100413

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100413

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130423

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130423

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130423

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130423

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160423

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees