JP2006521623A - 格納データを処理するためのコンピュータ利用コンパクト0コンプリートツリーの動的格納構造及び方法 - Google Patents

格納データを処理するためのコンピュータ利用コンパクト0コンプリートツリーの動的格納構造及び方法 Download PDF

Info

Publication number
JP2006521623A
JP2006521623A JP2006507507A JP2006507507A JP2006521623A JP 2006521623 A JP2006521623 A JP 2006521623A JP 2006507507 A JP2006507507 A JP 2006507507A JP 2006507507 A JP2006507507 A JP 2006507507A JP 2006521623 A JP2006521623 A JP 2006521623A
Authority
JP
Japan
Prior art keywords
trie
level
vector
depth
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.)
Granted
Application number
JP2006507507A
Other languages
English (en)
Other versions
JP4351247B2 (ja
Inventor
マックール,マイケル
アン ワルド,リンダ
Original Assignee
サンド テクノロジー システムズ インターナショナル,インコーポレイティド
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 サンド テクノロジー システムズ インターナショナル,インコーポレイティド filed Critical サンド テクノロジー システムズ インターナショナル,インコーポレイティド
Publication of JP2006521623A publication Critical patent/JP2006521623A/ja
Application granted granted Critical
Publication of JP4351247B2 publication Critical patent/JP4351247B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99937Sorting
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (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)

Abstract

0コンプリートバイナリツリーのコンパクト表現を使用するデータベースインデックスの格納、挿入、削除、及びサーチの方法及び装置である。C0トライと呼ばれるコンパクト表現(500)は、コンピュータメモリ内において、レイヤ化されたベクトル(502、508、518)の組として表現されており、このベクトルのレイヤ化は、C0トライの深さに対応している。挿入及び削除プロセスは、それぞれの処理の終了時点において、このC0トライの表現を、適格性と整然性を有する状態に維持しており、この結果、コンピュータメモリ内におけるこのC0トライの後続の効率的な処理が提供される。

Description

本発明は、コンピュータデータ及びファイルの格納システムに関し、更に詳しくは、0コンプリートバイナリツリーのコンパクト表現を実現する構造に対して、サーチキーの挿入及び削除を行う方法及びシステムに関するものである。
データベースなどのデータ及びファイルの格納システム、特に、コンピュータシステム内に実現されているものは、そのデータベース内に格納されている情報の特定の項目の格納及び検索を提供するものである。通常、データベース内に格納されている情報にはインデックスが付与され、データベース内の情報の特定の項目をサーチキーを使用して検出できるようになっている。そして、通常、サーチキーを使用してインデックスをサーチし、その情報が存在する最も確率が高いデータベース内の場所に対するポインタを検出することにより、サーチが行なわれる。しかも、その格納場所がコンピュータシステムのメモリ内であるか、或いは、コンピュータシステムの格納媒体内であるかを問わない。
しばしば、コンピュータ内のデータベースレコードに対するインデックスは、1つ又は複数のノードから構成された「トライ(trie)」として構築され、ノードは、階層構造で接続され、コンピュータの記憶手段内に格納されている。トライは、ストリングを格納するべく設計されたツリー構造であり、共通プリフィックスごとに、1つのノードが存在している。実際のストリングは、リーフノード内のこの階層構造の「底部」に格納されている。それぞれのノードは、通常、サーチを導く情報を含む1つ又は複数のブランチフィールドを有し、このそれぞれのブランチフィールドは、通常、別のノードに対するポインタ、又はブランチと、そのノードからそのブランチに沿って検出可能な情報のレンジ又はタイプを示す関連ブランチキーと、を含んでいる。このトライ、並びにこのトライのサーチは、ルートノードと呼ばれる単一のノードから始まり、情報の項目、又は通常は、情報の項目に対するポインタを含むノードに到達するまで、様々なブランチノードを経由し、下方に進むことになる。この情報に関連しているノードは、しばしば、リーフノードと呼ばれている(或いは、このレベルが、サーチに成功又は失敗するレベルであることから、これは、失敗ノードとも呼ばれている)。そして、コンピュータのツリー格納構造内においては、トライ内のあらゆるノードは、そのノードに対して従属しているすべてのノードとの関連においては、親ノードであり、その親ノードに従属しているトライ内のサブ構造は、そのノードとの関連において、しばしば、サブトライと呼ばれている。
サーチの際に、ツリー格納構造内をどの方向、又はブランチに進むかに関する決定は、そのサーチにおいて遭遇するそれぞれのノード内のブランチキーとサーチキーを比較することにより、下される。所与のノードから降下しているブランチに対する比較の結果は、サーチの次の段階に継続している必要がある。この観点において、サーチキーは、最も一般的には、そのコンピュータシステム内においてサーチする対象の情報の1つ又は複数の項目に関連付けられた文字又は数字のストリングから構成されている。
従来技術には、コンピュータのデータベースシステム用の様々なサーチツリーデータ格納構造が存在しており、この1つが「Bツリー」であって、これは、これ以降に開発されたすべてのツリー構造の明白な先祖であり、当技術分野において周知のサーチツリーの最も一般的な形態である。例えば、Knuthによる「The Art of Computer Programming」(第3巻、473〜479頁)を参照されたい。Bツリーの場合には、データセットに対して、プライマリアクセスと、次いで、セカンダリアクセスを提供している。このため、これらのツリーは、しばしば、データベース及びファイルシステムが利用するデータ格納構造内において使用されてきた。しかしながら、このデータベースシステム内におけるBツリー格納構造の利用に関しては、問題点が存在している。即ち、すべてのインデックス付けされた属性値をインデックス自体の内部において複製しなければならないという点である。多くのセカンダリインデックス値を複製すれば、この影響が累積された結果、生成されるインデックスのサイズが、しばしば、データベース自体のサイズを上回ることになる。そして、このオーバーヘッドのために、データベース設計者は、潜在的に有用なアクセス経路を排除することを余儀なくされる。又、Bツリーのブロック内にサーチキー値を包含することにより、ブロックのファンアウトが大幅に減少すると共に、ツリーの深さと検索時間が増大することにもなる。
そして、コンピュータデータベースシステム内において実現可能な他のツリー構造が、コンパクト・0コンプリート・バイナリツリー(即ち、Oツリー)であり、この場合には、小さなサロゲートによってサーチキー値を置換することにより、インデックスからサーチ値が除去されている(このサロゲートの代表的な長さである8ビットは、大部分の実際的なキー長(即ち、32バイト未満)にとって、十分なものであろう)。このため、実際の値は、任意のオーダーで任意の場所に格納可能であり、ツリー構造に対するインデックスは、単に、インデックスブロック内に格納された(サロゲート、ポインタ)対の階層的なコレクションになっている。このような編成によれば、インデックスのサイズを50%〜80%削減することが可能であり、ツリーの分枝数が増大することになる。この結果、コンピュータデータベースシステム内における正確な1つのマッチクエリ当たりのシステム内のディスクアクセス数が減少する。Orlandic及びPfaltzによる「Compact 0−Complete Trees」(Proceeding of the 14th VLDB Conference、372〜381頁)を参照されたい。
但し、C0ツリーを生成する既存の方法によれば、ストレージの利用率は、Bツリーと比べて、50%〜80%増大するが、ダミーエントリー(サロゲート、ポイント==NIL)の存在のために、格納空間の浪費が依然として存在しており、ツリーの最下位レベルにおけるインデックスエントリーの数が、格納されているレコードの実際の数を上回っている。従って、最下位ツリーレベルにおけるC0ツリーのインデックスエントリーの予想ストレージ利用率は、Bツリーの場合の0.693に比べて、0.567となっている。Orlandic及びPfaltzによる「Compact0−Complete Trees」(Proceedings of the 14th VLDB Conference、372〜381頁)を参照されたい。
又、BツリーとOツリーの格納構造は、値をサーチする効率的な方法を代表するものではあるが、いずれの方法の場合にも、ツリーデータ格納構造自体の初期生成と、これに継続する維持保守作業が必要である。これらのコンピュータ格納構造のいずれもが、本質的にソートされたオーダーで情報を格納してはいないからである。
最初に、キーレコードが、ランダムなオーダーではなく、そのキーフィールドのオーダーでソートされておれば、トライを効率的に構築することができる。従って、効率的なコンピュータデータベースシステムの場合には、まず、キーの組をソートした後に、それらのソート済みのキーからインターバルをおいて抽出されたキーに基づいて、トライを構築する必要がある。又、トライに過剰の数のキー、即ち、もはやデータベース内に存在しなくなったデータと関連するキーや、トライの構造を維持するためにもはや不要となったキーが含まれていなければ、ツリーデータ格納構造のサーチが効率的に実行されることになる。又、Oツリー格納構造のいくつかの実現においては、サーチキーを格納及びインデックス付けする方法が複雑であり、キーの集りを挿入及び削除する方法が非効率的なものになっている。従って、トライの構造を単純化するというニーズが存在しており、キーの集りを容易に一括削除及び挿入することが、特に、キーの大きな集りが関係している場合に、望ましい。
Oツリーを使用するデータベースインデックスの格納、挿入、削除、及びサーチを実行する方法及び装置が提供される。このOツリーは、コンピュータメモリ内において、レイヤ化されたベクトルの組として表現されており、このベクトルのレイヤ化は、Oツリーの深さに対応している。尚、このOツリーの表現を「C0トライ(C0−trie)」と呼ぶことにする。挿入及び削除プロセスにより、このC0トライは、それぞれの処理の終了時点において、適格であって(well−formed)、且つ、整然とした(taut)状態に維持されおり、この結果、コンピュータメモリ内におけるC0トライの後続の処理が効率的なものになっている。
本発明の一態様においては、C0トライは、Oツリーのリーフの深さのエンコードされた深さ値を具備する深さベクトルを含んでいる。この深さベクトルは、対応するリーフが空のリーフノードであるかどうかを示すべくエンコードされており、任意の長さを有している。複合ベクトルとしてグループ化されたセレクタベクトルの組が、このC0トライのレベルに対応している。それぞれのセレクタベクトルは、深さベクトルのエントリーを選択するために使用されるベクトルである。そして、深さベクトルの長さと同様に、このセレクタベクトルの組内のセレクタベクトルの数は任意である。それぞれのセレクタベクトルは、複合ベクトルとしてグループ化されているカウンタベクトルの組内の1つのカウンタベクトルとペアになっている。そして、カウンタベクトルは、その長さが、対応するセレクタベクトル内の1のビットの数に等しいベクトルである。
0トライ内の値は、そのツリー内のそれぞれの位置によって参照可能である。この位置識別子は、ビットベクトルとして効率的にエンコード可能な値のサロゲートである。C0トライは、値を語彙的オーダーで編成しているため、この位置識別子は、語彙的識別子である。
本発明の別の態様においては、C0トライの任意のレベルlのサブトライAと、レベルlの先行するサブトライBについて、Aのすべてのレベルl−1のサブトライの深さは、A及びBの深さを上回っており(これを、適格な(well−formed)状態と表現する)、このC0トライ内の値又はストリングは、サブトライのリーフ内に不要な空のノードを含まないことにより、最短の可能なプリフィックスによって弁別することができる(これを、整然とした(taut)状態と表現する)。
本発明の別の態様においては、コンピュータ利用C0トライのためのサーチ方法が提供される。このサーチ方法は、最上位サーチレベルの下の次のレベルにおけるそれぞれのサブトライごとに、最上位−1サーチレベルのサブトライの深さをサーチする段階を含んでいる。そして、最上位−1サーチレベルのセレクタベクトルによって選択された深さ値をチェックし、その値が、現在の最上位−1サーチレベルのサブトライの一部であると識別されない場合には、サーチプロセスは、サーチ対象の残りの最上位−1レベルのサブトライが存在しているかどうかを判定する。そして、サーチ対象の残りの最上位−1レベルのサブトライが存在しない場合には、本サーチプロセスは終了する。一方、サーチ対象の他の最上位−1レベルのサブトライが存在している場合には、サーチプロセスは、それらの残りの最上位−1レベルのサブトライのサーチを継続する。サーチプロセスが、サーチ対象の値を含む最上位−1サーチレベルのサブトライを識別した場合には、サーチプロセスは、現在の最上位−1サーチレベルを最上位サーチレベルとし、識別された最上位−1サーチレベルのサブトライを、識別された最上位サーチレベルのサブトライとすることにより、1レベルだけ降下する。最終的に、サーチプロセスは、新しい最上位サーチレベルがリーフセレクタレベルであるかどうかを判定し、そうではない場合に、識別された最上位サーチレベルのサブトライの最上位−1サーチレベルのサブトライのサーチを継続する。
本発明の別の態様においては、コンピュータ利用C0トライのための削除プロセスが提供される。この削除プロセスは、削除対象の語彙的識別子又はトークンのリストを受けとる。そして、削除対象の語彙的識別子の数が閾値を上回っている場合には、削除プロセスは、C0トライ内に残っている語彙的識別子を使用して新しいC0トライを生成する。一方、削除対象の語彙的識別子の数が閾値を上回っていない場合には、削除プロセスは、それらの語彙的識別子を含むC0トライ内のリーフを削除する。或いは、この代わりに、削除プロセスは、削除対象の語彙的識別子を含むC0トライのブランチを縦断し、このC0トライのブランチから語彙的識別子を削除する。そして、残りのC0トライが2つを上回る数のレベルを具備している場合には、削除プロセスは、C0トライをチェックし、そのC0トライのサブトライをマージする。
本発明の別の態様においては、コンピュータ利用C0トライのための挿入方法は、挿入対象の値を受けとる段階と、C0トライが2つのレベルを具備しているかどうかを判定する段階と、を含んでいる。そして、これらが真である場合には、挿入対象の値が存在している限り、挿入プロセスは、値が属しているC0トライの既存のリーフ内のキーインターバルを識別し、この識別されたキーインターバル内に1つ又は複数の値を挿入する。そして、挿入プロセスによる値の挿入が完了すると、挿入プロセスは、C0トライのサブトライが、サブトライの深さ以下の深さを具備する新しい値を含んでいる場合に、そのサブトライを分割する。
本発明の別の態様においては、挿入方法は、2つを上回る数のレベルを具備するC0トライを処理する能力を更に含んでいる。挿入対象の値が存在する限り、挿入プロセスは、以下に説明する段階を反復して実行することにより、C0トライのブランチを縦断する。即ち、現在のレベルの直下の選択されたレベルが、リーフレベルの上のレベルでない限り、挿入プロセスは、現在のレベルの直下のどのレベルが、そのキーインターバルが値を含んでいるC0トライのサブトライを含んでいるかを再帰的に判定し、判定されたサブトライとして選択する。そして、挿入プロセスによるC0トライのブランチの縦断が完了したら、挿入プロセスは、値が属している既存のリーフ内のキーインターバルを識別し、その識別されたキーインターバル内に1つ又は複数の値を挿入する。次いで、挿入プロセスは、サブトライが、サブツリーの深さ以下の深さを具備する新しい値を含んでいる場合に、そのサブトライを分割する。そして、すべての値の挿入が完了した後に、挿入プロセスは、更なる分割のためにC0トライをチェックする。
本発明のこれら及びその他の特徴、態様、及び利点については、以下の説明、添付の請求項、及び添付の図面を参照することにより、更に理解することができよう。
図1aは、データ処理システムを示しており、このデータ処理システムは、プログラム可能なコンピュータと、本発明の代表的な実施形態によって、ファイルシステムを生成し、このファイルシステム上における動作を処理するコンピュータプログラムと、を具備する。このコンピュータシステムは、プログラム可能なコンピュータ1を含んでおり、このコンピュータは、プロセッサとメモリ、ディスプレイ2、コンピュータ入力装置3、及びストレージ手段を具備している。ストレージ手段には、データ格納のためのコンピュータの磁気ディスクストレージシステムやメモリのパーティションなどのストレージ装置4が含まれている。そして、ファイルシステムを含むハードウェア/ソフトウェアと、説明対象の処理動作を実行するべくプロセッサによって実行可能なプログラム命令を含むハードウェア/ソフトウェアが、コンピュータ1の(破線よって示された)ファイルシステム5内に実現されている。このコンピュータ1のファイルシステム5は、ファイルシステム内におけるデータの表現と、ストレージ装置4内に格納されている1つ又は複数のデータファイルに対する処理の実行と、に関係する様々な活動を調整している。尚、コンピュータ1は、パーソナル、ミニ、又はメインフレームコンピュータなどのプログラム可能な汎用コンピュータであるか、或いは、1つ又は複数の集積チップによって形成された専用のコンピュータであってよい。
図1bを参照すれば、ファイルシステム5は、ファイル処理ユニット7と命令インタープリタ6を含んでいる。そして、このファイル処理ユニット7においては、コンピュータファイルシステム内に格納されている情報の特定の項目にアクセスする際に、ストレージ装置4内に格納されているデータの項目の検索に必要な情報の量を極小化するべく、図4aに示されているコンパクト0コンプリートデータ格納構造40を使用している。このデータ格納構造は、サーチキー1420にインデックス付けするための複数のエントリー30、31、80、81、82、83、84、85、86、87、88(このそれぞれのエントリーは、深さ値89とデータ存在インジケータ90を有し、後者は、一例として、2つの条件を具備している)と、これらのエントリーを相互接続すると共にこのデータ格納構造40を形成しているコンピュータのストレージ装置4内に格納された新しいC0トライ構造43と、を具備している。又、このデータ格納構造40は、サーチキーインターバルレンジと関連付けられた非NILのリーフエントリーのカウントを格納する手段66を更に含んでいる。又、ヘッダ36とエントリー36aから構成された別個のポインタ構造も存在しており、これは、トライ構造43とは別個であって、典型的な実施形態においては、データ格納構造40自体と別個であってよい。このポインタ構造36及び36aは、ストレージ装置4の格納コンテナ39内のデータ項目に対してアクセスするものである。
図2aを参照すれば、バイナリツリー1402は、辺(エッジ)にラベルが付加された説明用のツリーデータ格納構造であり、これは、1412及び1414などの弧又は辺によって分離された1406、1408、及び1410などの点によって表現されたノードから構成されている。そして、これらのノードは、小文字と大文字(a〜Z及びA’)によって識別されており、終端ノードは、リーフノード又はリーフと呼ばれ、大文字のラベルが付加されており、すべてのその他の内部ノードには、小文字のラベルが付加されている。検索対象の情報は、リーフ1416及び1418などのツリーのリーフに配置されたポインタによってポイントされている格納場所に格納されている。リーフH、I、V、W、Z、A’、及びQには、サーチキー1420が示されている。この図2aにおいては、このサーチキー1420は、2値の数字のストリングであり、これは、最大ビット長までの任意の均一な長さを有し、この場合には、一例として、8ビットの最大ビット長が使用されている。これらのリーフのそれぞれに関連付けられているこのサーチキー1420を使用することにより、ストレージ装置4内のその対応するリーフ用の格納場所に対するポインタを検出する。なお、関連するサーチキー1420によって示されているリーフのみが、この関連するデータレコードを格納する格納場所に対するポインタを具備しており、このため、これらは、フル状態にあると表現される。これに対して、リーフG、K、O、S、T、及びYは、格納場所に対するポインタを具備しておらず、従って、これらは、空き状態にあると表現される。
ストレージ装置4内におけるデータレコードの検索は、サーチキー1420の1つの中の2値の0及び1シンボルと、それぞれの弧1412上の0又は1のエッジラベルとを連続的に比較することにより、行なわれる。ここで、それぞれの弧1412は、ルートノードから始まって所望のリーフにおいて終了する接続された点及び弧の経路に沿ったノード間に存在する。バイナリツリーのそれぞれのノード又はリーフは、その進入側の弧に0のラベルが付加されている場合には、0のノード又は0のリーフかであり、その進入側の弧に1のラベルが付加されている場合には、1のノード又は1のリーフである。コンピュータデータベース及びファイル管理システム内においては、ノードに対するアクセス経路は、ルートノードからその対象の特定のノードに至るまでに経由する0及び1の線分ラベルを結合することによって得られる2値のストリングである。
そして、バイナリツリー構造は、すべてのノードが、リーフであるか、或いは、正確に2つの空ではない直接的な子孫を具備するノード(即ち、従属する0のノードと従属する1のノードを具備するノード)である場合に、「コンプリート」であると表現される。図2aにおいては、ノードa〜ノードA’のそれぞれのノードは、このコンプリート性に関する2つの条件を満足している。
従って、図2aは、それぞれ、リーフH、I、V、W、L、Z、A’、及びQにおけるデータレコードを検出するための00001000、00100101、01000010、01000110、1000001、10101000、10101010、及び10110010を含むサーチキー1420を有するツリー格納構造を示している。空のリーフG、K、O、T、S、及びYは、「コンプリート」なバイナリツリーの条件を満たすために、ツリー1402内に含まれている。
次に図2bを参照されたい。この図には、以下に特記する事項を除いて、図2aに使用されている同一の構造、用語、及び参照符号を具備する従来技術による0コンプリートバイナリツリー1430が示されている。このδ個のリーフを有するバイナリツリー1430は、(1)0のリーフの兄弟がツリー内に存在し、且つ、(2)ツリー内に、正確に、δ−1個の1のノードが存在する場合に、0コンプリートであると表現される。従って、この図2bは、すべての0のリーフH、V、L、T、Zが、兄弟の1のノードを具備しており、9つのリーフH、I、V、W、L、T、Z、A’及びQと、8つの1のノードI、W、e、c、m、A’、U、及びQが存在しているため、図2aのバイナリツリーの0コンプリートなバイナリツリー表現になっている。この0コンプリートバイナリツリー1430は、リーフG、K、O、S、及びYなどの(関連するサーチキーが欠落していることによって示されている)空の1のリーフをツリー1402から削除することにより、図2aのバイナリツリー1402から導出されたものである。尚、すべての空の0のリーフを削除すると、ツリー1430内に8つの1のノードを必要とするという第2の条件に違反することになるため、このツリー格納構造1430内には、ノードTが、空であるにも拘らず、残っており、この結果、必要な格納空間が増大していることに留意されたい。
小文字によって表されているそれぞれの内部ノードは、対応する0のサブツリーと1のサブツリーを具備している。0コンプリートバイナリツリーの「プリオーダーによる縦断」は、ツリーのルートノードaから始まり、最後のノードに対するアクセスが完了するまで、(1)現在のノードnniが内部ノードである場合には、0コンプリート性の定義により、すべての内部ノードは、0の子ノードを具備しなければならないため、オーダーにおける次のノードnni+1は、その0の子になり、(2)現在のノードnniがリーフである場合には、プリオーダーにおける次のノードは、その0のサブトライがnniを含み、且つ、その深さが最大であるノードppの1の子になる、という2つの段階を反復することになる。
即ち、プリオーダーにおける第1ノードは、内部ルートノードaである。次のノードは、その0の子ノードbであり、これには、0の子ノードdと、次いで、リーフHが続く。そして、プリオーダーにおける次のノードは、Hがリーフノードであり、ノードdの0のサブトライがHを含み、且つ、ツリー内におけるその深さが最大であるため(即ち、その0のサブトライがHを含んでおり、且つ、その深さが1であるノードbとは異なり、この深さは、2である)、ノードdの1の子になる。この結果、この図2bに示されているツリー1430のコンプリートなプリオーダーの縦断シーケンスは、abdHIejnrVWcfLmpTuxZA’Qというものになる。
又、0コンプリートバイナリツリーのプリオーダー縦断における最後のリーフノードQを除くそれぞれのリーフノードH、I、V、W、L、T、Z、A’の後継ノードも、特別な重要性を有している。即ち、これらのノード(これらは、バウンドノードと呼ぶ)は、それぞれ、図2bのI、e、W、c、m、u、A’、Qである。バウンドノードは、プリオーダー縦断の観点で定義されているため、それぞれのノード(最後のものQを除く)は、その独自の固有のバウンドノードを具備している。又、プリオーダー縦断の前述の定義から、すべてのバウンドノードは、1のノードである。
ノードとバウンドノードの「弁別子」を使用することにより、0コンプリートバイナリツリー内のそれぞれのリーフに対応するキーインターバルを確立可能である。リーフノードの「弁別子」は、サーチキーと同一の長さの2値ストリングであり、その上位(即ち、左側の)ビットは、リーフまで至る連結された弧、すなわち経路の2値ビットであり、その他の右側のビットは、すべて0に設定されている。
「キーインターバル」は、正式には、リーフ弁別子(これを含む)とそのバウンドノードの弁別子(これを含まない)間のキーレンジと定義されるものである。例外は、この場合にも、プリオーダー縦断における最後のリーフ(一例として、Q)であり、このキーインターバルの上位バウンドは、常に事前に判明しており、すべて1のビットから構成されている(即ち、11111111である)。
次の表1には、0コンプリートバイナリツリー1430のそれぞれのリーフノードH、I、V、W、L、T、Z、A’、Qのキーインターバルが、辞書的なオーダーにおいて一覧表示されている。即ち、例えば、リーフVは、01000000という弁別子を具備しており、その対応するバウンドノードWは、弁別子01000100を具備していることから、表1に示されているように、このリーフVのキーインターバルは、01000000(これを含む)〜01000100(これを含まない)であり、即ち、両方を含む場合には、01000000〜01000011となる。
Figure 2006521623
この表1を検討することにより、任意のリーフの適切なキーインターバル(従って、所与のサーチキーを有する対応するデータレコード)を識別するためのバウンドノード弁別子に関する知識を十分なものにすることができる。一例として、サーチキー01000010を使用すれば、プリオーダー縦断シーケンスにおいてツリーのバウンド弁別子を調べるサーチ手順により、このサーチキー01000010を上回る最初のバウンド弁別子が検出された際に、このサーチキーの正しいキーインターバルが検出されることになる。即ち、第1バウンドノードIの弁別子00100000は、サーチキー01000010よりも小さい。そして、このプリオーダーにおける第2のバウンドノードeのバウンディング弁別子01000000も、このサーチキーより小さい。しかしながら、第3のバウンドノードWの弁別子01000100は、サーチキーよりも大きくなっている。そして、これは、リーフVのキーインターバルの非包含の上位バウンドであり、このリーフVのキーインターバルの包含の下位バウンドは、以前のバウンドノードeの弁別子になっている。
この表1には、それぞれのキーインターバルと共に、そのキーインターバルの0コンプリートバイナリツリー1430内におけるバウンドノードの「深さ」を表す数値が示されている。例えば、リーフVのバウンドノードは、0コンプリートバイナリツリー内において6の深さを具備するリーフWである。最後のノードQの場合には、定義によってバウンドノードを具備しておらず、このインターバルの上位バウンドは、11111111と設定されており、0の深さが割り当てられている。
バウンドノードの組の弁別子とそれらの深さの間の関係には、1つの明白な規則性を存在している。即ち、バウンドノードの深さがddの場合には、弁別子の定義により、対応する弁別子のdd番目のビットが、1に設定されており、後続のすべての下位ビットは0である。
キー長が8ビットである表1の場合には、初期ダミー弁別子は、00000000であり、第1バウンドノードIの深さは、3であって、第1バウンドノード弁別子の第3ビットは1であり、すべての後続の下位ビットは0であって、この結果、第1バウンドノード弁別子00100000が得られる。又、第2バウンドノードeの場合には、深さが2であり、第1バウンドノード弁別子を使用することにより、第2ビットが1に設定され、すべての後続のビットが0に設定されることにより、第2のバウンドノード弁別子01000000を得ている。残りのバウンドノードの弁別子も、同様に構築されている。
0コンプリートバイナリツリーの場合には、バウンドノードの深さからキーインターバルを構築可能であるというこの知識を使用することにより、図3aの9に、図2bの0コンプリートバイナリツリーデータ構造の従来技術によるコンパクトな形態が表されている。このコンパクトな形態をOトライと呼ぶ。このトライ構造は、エントリー17を有するブロック10、11、及び12を具備している。
次に、図4aを参照すれば、図2aのサーチキー1420の組を入力した後のデータ格納構造40の表現が示されている。更に大きな数のサーチキーをデータ格納構造40内に入力することも可能であり、前述の実施形態を更に大きなキーの組に適用する方法については、当業者には明らかであろう。隣接する深さ値17aとポインタ17b(エントリー17)を有するブロック10、11、及び12を具備した図3aのC0トライとは異なり、この図4aのデータ格納構造は、インデックスブロックエントリー47c及びサブトライポインタ47bにインデックス付けされたインデックスブロックヘッダ47aを有するルートノード47と、インデックスブロックエントリー34c及びサブトライポインタ34bにリンクされたインデックスブロックヘッダ34aを有するノード34と、インデックスブロックエントリー35c及びサブトライポインタ35bにリンクされたインデックスブロックヘッダ35aを有するノード35と、から構成されたトライ構造43を具備している。
参照符号47c、34c、及び35c内のそれぞれのエントリーは、深さ値89とデータ存在インジケータ90を含んでいる。又、この構造40は、別個のポインタ構造を具備しており、これは、非NILのリーフインデックスブロックエントリー34c及び35cの対応する深さ値89のポインタ又は参照可能インデックスからなる対応するエントリー36aを有するポインタヘッダ36から構成されている。34c及び35c内の深さ値89とポインタエントリー36aのインデックスは、0のリーフエントリーに対応する空のポインタを除いて、図3aのインデックスブロック11及び12内の深さ値17aとポインタ17bを表しており、この結果、格納空間の浪費を低減している。ノード47のインデックスブロックエントリー47cは、エントリー30及び31を含んでおり、これらは、それぞれ、34c及び35cの対応するインデックスブロック内の最後の(すなわち、最小値)深さエントリーを付与する図3aのインデックスブロック10内のエントリーに対応している。ルートレベル41のポインタ47bは、インデックスブロックエントリー47cのそれぞれに対応するキーインターバルのリーフレベル64を指示している。
そして、対応する深さ値89をインデックスブロックエントリー47c、34c、及び35cとポインタエントリー36aに分離したことに加え、対応するエントリー66aを有するカウントヘッダ66が関係付けられている。このエントリー66aは、それぞれ、インデックスブロックエントリー34c及び35c内のF又はフルリーフ(非NIL)エントリーの合計数を付与するカウントエントリー32及び33を含んでいる。従って、カウントエントリー32は、4の値を具備しており、インデックスブロックエントリー34c内に4つの非NILの4つのエントリー(すなわち、F値)が存在していることを示しており、カウントエントリー33も、4の値を具備しており、インデックスブロックエントリー35c内に4つの非NILのエントリー(すなわち、F値)が存在していることを示している。この結果、このデータ格納構造40は、新しいOトライ構造43、別個のポインタ構造36及び36a、並びに、格納コンテナ39を具備している。そして、ノード34、35、及び47と、カウントヘッダ66、カウントエントリー66aが、トライ構造43内に位置しており、参照可能インデックス又はポインタが、ヘッダ36とエントリー36aから構成された別個のポインタ構造内に位置している。
この図4aの例におけるトライ構造43は、ルートレベル41とリーフレベル64という2の高さをもっている。そして、ルートレベル41におけるインデックスブロックエントリー47cは、2つのエントリー30及び31を含んでおり、リーフレベル64におけるインデックスブロックエントリー構造34c及び35cは、4つのエントリー80、81、82、83と5つのエントリー84、85、86、87、88をそれぞれ含んでいる。Oトライ格納構造の高さ又はレベルの数は、データ項目及びトライ構造43のリーフエントリー内においてインデックス付けされる関連するサーチキーの数と、ファイルシステム内において設定される既定のフルインデックスブロック数79に応じて変化することになる。前述の図4aの説明用の実施形態の場合には、既定のフルインデックスブロック数79は5である。
深さ値89は、トライ構造43のそれぞれノード47、34、及び35内においてインデックスブロックヘッダ47a、34a、及び35aによってリンクされたインデックスブロックエントリー47c、34c、35c内に配置されている。ポインタエントリー36aは、ポインタヘッダ36により、トライ構造43にリンクされている。そして、重要なことに、インデックスブロックエントリー47c、34c、及び35cのそれぞれの内部には、データ存在インジケータビット90も位置している。
このそれぞれのインジケータビット90は、FALSEとTRUEという2つの条件のいずれかを有しており、これらは、それぞれ、0及び1によって表されている。リーフレベル64における深さ値89内においては、TRUE、又は第1条件は、対応するエントリーが概念的0コンプリートバイナリツリーのC0トライのNILエントリー、又は空のノードであることを示している。一方、FALSE、又は第2条件は、対応するエントリーが、コンピュータのストレージ装置内の対応するデータ項目と関連付けられていることを示している。非NILのエントリー80〜84及び86〜88のそれぞれは、ポインタエントリー36aの1つによって指定されたコンピュータのメモリ8の格納コンテナ39内の対応するデータアイテムをもっている。一方、85などのNIL又はTRUEエントリーは、36a内のインデックスエントリー(又は、格納コンテナ39内のデータアイテム)を指定してはいない。ポインタエントリー36aのそれぞれは、コンピュータのストレージ装置内に格納されている対応する語彙的に順序付けられたデータ項目に対する、又はこのデータ項目と関連付けられたサーチキー1420の1つに対するポインタ又は参照可能インデックスである。
図5は、本発明の代表的な実施形態によるC0トライを表現するのに使用されるデータ構造を示す図である。C0トライデータ構造500は、(1)深さベクトル502、(2)セレクタベクトルの組508、及び(3)カウンタベクトルの組518という3つの部分をもつ。
深さベクトルは、実現されたC0トライのリーフの深さに対するエンコードされた深さ値(例:エンコードされた深さ値504)を含むベクトルであって、対応するリーフがダミーであるかどうかを示すべくエンコードされている。例えば、深さベクトルのn番目のエントリーは、n番目のリーフのエンコードされた深さである。dがリーフの深さであるとすれば、エンコードされた深さは、そのリーフがダミーリーフでない場合には、2dであり、そのリーフがダミーリーフである場合には、2d+1である。この深さベクトルは、省略符号506によって示されているように、任意の長さを有している。
このC0トライデータ構造は、セレクタベクトルの複合ベクトル508(以下、セレクタ親と呼ぶ)を更に含んでいる。セレクタベクトル510などのそれぞれのセレクタベクトルは、C0トライの1つの「レベル」に対応している。それぞれのセレクタベクトルは、深さベクトルのエントリーを選択するべく使用されるベクトルであって、省略符号511に示されているように、任意の長さを有している。そして、セレクタ親内におけるセレクタベクトルの数も、省略符号516に示されているように、任意である。セレクタベクトル514などの最下位のセレクタベクトルを、以下、「リーフセレクタベクトル」と呼ぶ。そして、セレクタベクトル517などの最上位のセレクタベクトルを、以下、「最上位セレクタベクトル」と呼ぶことにする。尚、セレクタ親が任意の長さを有しているため、セレクタベクトルの数も任意であり、従って、任意の深さのC0トライを表現することが可能である。
又、このC0トライデーア構造は、カウンタベクトルの複合ベクトル518を更に含んでおり、以下、これをカウンタ親と呼ぶ。それぞれのセレクタベクトル(したがって、C0トライ内のそれぞれのレベル)は、カウンタベクトル520などの対応するカウンタベクトルと関連付けられている。セレクタベクトルの数が任意であるため、カウンタベクトルの数と、したがってカウンタ親の長さも、省略符号519によって示されているように、任意である。カウンタベクトルは、その長さが、対応するセレクタベクトル内の「1のビット」の数に等しいベクトルである。セレクタベクトルのサイズが任意であるため、省略符号521によって示されているように、カウンタベクトルのサイズも任意である。そして、エントリー522などのカウンタベクトルのn番目のエントリーは、そのセレクタベクトルによって表されているn番目のサブトライ内に含まれている空ではないリーフの数である。
このC0トライデータ構造内に維持されている特性には、2つのものが存在している。即ち、(1)任意のレベルlのサブトライAと、そのレベルlの先行するサブトライBについて、Aのすべてのレベルl−1のサブトライの深さは、A及びBの深さを上回っている。換言すれば、AのサブトライがC0トライを形成している。このような特性を有するC0トライデータ構造を、以下、「適格性を有している(well−formed)」と表現することにする。(2)インデックス内の値又はストリングが、最短の可能なプリフィックスによって弁別される必要がある。これは、インデックス内のそれぞれの値を有効なものにすることによって実現されるが、換言すれば、不要な空の値又は「ダミー」をなくす必要があるということである。このような特性を有するC0トライデータ構造を、以下、「整然性を有している(taut)」と表現することにする。
図6は、本発明の代表的な実施形態によるC0トライの選択ベクトルの説明用の例を示す図である。セレクタベクトルのセレクタ親650は、表現されているC0トライのリーフのすべてを選択するレベル1のセレクタベクトル602を含んでおり、従って、これは、対応する深さベクトルと同一の長さであるが、すべてが「1のビット」から構成されたビットベクトルである。レベル2のセレクタベクトル604は、レベル1のサブトライの最後の要素に対応する位置に1のビットをもつことにより、リーフのレベル2のサブトライを選択する。それぞれのレベル内のサブトライは、そのレベル内におけるその位置によってインデックス付けされている。例えば、第2レベルのセレクタベクトル内に設定されているビット606は、レベル1のサブトライの組608を選択する。このビット用のインデックスは、このビットの下の参照符号609の「4」として示されている。レベル3のセレクタベクトル610は、同様に、レベル2のサブトライの中のサブトライを選択する。例えば、レベル3のセレクタベクトル内のビット612は、レベル2のサブトライ614を選択する。このレベルの積層配置は、省略符号616によって示されているように、任意のサイズのC0トライを表現するのに必要な数のレベルだけ反復可能である。この例の場合には、レベル3が最上位レベルである。
サブトライは、上位レベルのサブトライ内のそれぞれのインデックスによって選択可能である。例えば、レベル3のサブトライ614の第3サブトライ618は、インデックス「3」622に設定されているビット620によって選択されるレベル2のサブトライ618である。そして、このレベル2のサブトライ618は、それぞれ、インデックス「4」628とインデックス「5」622におけるレベル1のサブトライ(リーフ)624及び626を含んでいる。
前述のC0トライ用のサーチアルゴリズムにおいては、適格性を有すると共に整然性を有するC0トライの特性を利用している。適格性と整然性を有するサブトライの場合には、サブトライの深さは、その最後のエントリーの深さ、すなわちそのサブトライを表すレベル1のセレクタベクトル内の設定ビットに対応する深さである。
図8は、本発明の代表的な実施形態による値ストアデータ構造を示す図である。値ストア構造800には、(1)格納対象の実際の値又はデータを含む格納ページ802のコレクション、(2)バイトオフセットベクトル806、及び(3)値識別子ベクトル810という3つの部分が含まれている。
格納ページ802には、格納対象の実際の値又はデータが含まれている。格納ページの数は、省略符号804によって示されているように、任意である。そして、格納ページには、バイトオフセットベクトル806によってインデックス付けされており、n番目のオフセットは、格納ページの組内におけるn番目のストリングの始まりの位置(単位:バイト)である。このバイトオフセットベクトル内の値の数は、省略符号808によって示されているように、格納ページの組内に格納されている値の数と同一である。そして、値識別子ベクトル810は、語彙的識別子(LID)によって、バイトオフセットベクトルに対してインデックス付けするベクトルである。この値識別子ベクトル内の値の数は、省略符号812によって示されているように、バイトオフセットベクトル内の数と同一である。従って、LIDは、値の辞書的順序におけるインデックスであり、例えば、辞書的順序において5番目に位置するストリング値は、LID5に対応している。
図7は、本発明の代表的な実施形態によるC0トライサーチプロセスのプロセスフローチャートである。このプロセスは、C0トライの最上位レベルから始まる(700)(以下、これを「最上位サーチレベル」と呼ぶ)。そして、この最上位サーチレベルの下の次のレベル内のそれぞれのサブトライごとに(702)(以下、これを「最上位−1サーチレベル」と呼ぶ)、本プロセスは、最上位−1サーチレベルのサブトライの深さをサーチする(704)。前述のように、このC0トライは、適格性を有しているため、チェックする必要があるのは、最上位−1サーチレベルのセレクタベクトルによって選択された深さ値のみである。そして、その値が、現在の最上位−1サーチレベルのサブトライの一部として識別されない場合には(706)、プロセスは、残りの最上位−1レベルのサブトライのサーチを継続する(708)。
一方、サーチ対象の値を含む最上位−1サーチレベルのサブトライが識別された場合には(706)、プロセスは、1レベル降下し、現在の最上位−1サーチレベルを最上位サーチレベルとし、識別された最上位−1サーチレベルのサブトライを、識別された最上位サーチレベルのサブトライとする(714)。そして、本プロセスは、その新しい最上位サーチレベルが、前述のリーフセレクタレベルであるかどうかを判定する(716)。そして、リーフセレクタレベルでない場合には、プロセスは、サーチを実行し(718)、その識別された最上位サーチレベルサブトライの最上位−1サーチレベルのサブトライをサーチすることになる。従って、サーチは、サーチレベルごとに1つのサブトライのみに限定されている。
図9は、本発明の代表的な実施形態による削除プロセスのプロセスフローチャートである。削除プロセスにおいては、C0トライから値を削除し、C0トライが適格性を有した状態に維持されるように、マージプロセスによって、そのC0トライを再構築する。まず、削除プロセスは、削除対象のLIDのリストを受領する(900)。そして、削除プロセスは、空きのストリングを削除するべきかどうかを判定する(902)。削除プロセスが、多数のLIDを短いセグメントで削除する必要があると判定した場合には(904)、削除プロセスは、古いC0トライ内の残りの値を使用して新しいC0トライを再構築する(906)。尚、値を削除して残りの古いC0トライとマージせずに、新しいC0トライの生成を選択するための閾値は、それぞれのアプリケーションに固有のものであり、削除プロセスと挿入プロセスの相対的な速度によって左右されることになる。
一方、少数のLID又はいくつかの大きなセグメントのみの削除を要する場合には、削除プロセスは、その処理対象のCoトライが、2つのレベルのみを具備しているかどうかを判定する(908)。そして、2つのレベルのみが存在している場合には、削除対象のLIDを含むリーフを容易に削除可能である。一方、C0トライが2つを上回る数のレベルを具備している場合には、ブランチ削除プロセスを呼び出し、削除対象のLIDを含むC0トライのブランチを縦断し、C0トライのそれらのブランチからLIDを削除することになる(912)。
LIDのC0トライからの削除が完了したら、削除プロセスは、その残りのC0トライが、2つを上回る数の残りのレベルを具備しているかどうかを判定する(914)。そして、2つを上回る数のレベルを具備している場合には、削除プロセスは、C0トライ全体をチェックし、可能な場合には、サブトライをマージする(916)。そして、この値のC0トライからの削除と必要に応じたC0トライのマージが完了したら、実際の値を前述のデータストアから削除することになる(918)。
図10は、本発明の代表的な実施形態によるC0トライマージ制御プロセスのプロセスフローチャートである。このマージ制御プロセスにおいては、まず、処理対象のC0トライから、多数のLIDと多数の一連のLIDが削除されているかどうかを判定する(1000)。そして、これが真である場合には、マージ制御プロセスは、リーフレベルを除いて、既存のC0トライを破棄し、そのC0トライのレベルを再構築する(1002)。
一方、マージ制御プロセスが、処理対象のC0トライからは、少数のLID又は少数の一連のLIDが削除されていると判定した場合には、マージ制御プロセスは、削除プロセスにおいて生成されたC0トライ内の重複したレベルを除去する(1004)。次いで、マージ制御プロセスは、C0トライの最上位レベルから始めて、それぞれの変化したサブトライをターゲットレベルまで縦断して下る(1006)。そして、ターゲットレベルに到達したら、マージ制御プロセスは、必要に応じて、サブトライをマージするマージプロセスを呼び出す(1008)。次いで、マージ制御プロセスは、マージが、実際にマージプロセスによってターゲットレベル上において実行されたかどうかを判定する(1012)。そして、実際に実行されている場合には、マージ制御プロセスは、そのマージプロセスにおいて生成された重複したレベルを削除することになる(1014)。
図11は、本発明の代表的な実施形態において使用されるC0トライマージプロセスのプロセスフローチャートである。このマージプロセスは、サブトライをターゲットレベルまで縦断した後に、ターゲットレベルにおいて、そのサブトライをマージするべく、前述のマージ制御プロセスによって呼び出されるものである。サブトライは、その先行する隣のLIDが前述の削除プロセスにおいて削除されているLIDを含んでいる場合に(従って、LIDが孤立している場合に)、マージ処理の候補となる(この孤立したLIDを、以下、「残存」LIDと呼ぶことにする)。マージプロセスにおいては、サブトライ内における現在の作業レベルであるレベルlと、マージプロセスがサブトライの縦断を中止して孤立したLIDをマージ可能になるために前進を要するレベル(Levels−to−go)数のカウンタと、を引数として受領する。そして、マージプロセスは、そのサブトライのレベルl内の削除された一連のLIDに後続するLIDが存在しているかどうかを判定する(1100)。そして、削除された一連のLIDに後続する少なくとも1つのLIDが存在している限り、マージプロセスは、この「Levels−to−go」変数をチェックすることにより、ターゲットレベルまでサブトライを縦断して下ったかどうかを判定する(1102)。そして、マージプロセスが更なる「Levels−to−go」を具備している場合には、マージプロセスは、孤立したLIDを有する現在のレベルlの下のレベル内のサブトライを判定した後に(1104)、「levels−to−go」カウンタをデクリメントし(1106)、その新しいレベル設定とデクリメントされた「Levels−to−go」カウンタにより、自分自身を再帰的に呼び出すことになる。そして、マージプロセスが、「levels−to−go」カウンタをチェックすることにより、ターゲットレベルに到達していると判定したら(1102)、マージプロセスは、可能な場合に、残存LIDを含むサブトライと、そのサブトライの先行サブトライをマージする(1108)。このマージプロセスは、すべての残存LIDの処理が完了するまで継続される(1110)。そして、ターゲットレベル上のすべてのサブトライの処理が完了したら、ターゲットレベルを1レベルだけ上昇させ、処理を継続する。
図12は、本発明の代表的な実施形態によるブランチ削除プロセスのプロセスフローチャートである。このブランチ削除プロセスは、まず、ブランチ削除を呼び出した現在のレベルlのサブトライ内に削除を要するLIDが存在しているかどうかを判定する(1200)。そして、削除対象のLIDが存在している限り、ブランチ削除プロセスは、現在のレベルの直下のレベル内のどのサブトライがそのLIDを含んでいるかを識別する(1202)。そして、ブランチ削除プロセスが、その識別されたサブトライを削除することが可能であると判定した場合に(1204)(例:識別されたサブトライに、単一のLIDのみ、又はいくつかの一連の削除対象LIDが含まれている場合)、ブランチ削除プロセスは、そのサブトライ全体を削除し、サブトライを更に縦断することなしに、終了する。
一方、その識別されたサブトライを削除することができない場合には、ブランチ削除プロセスは、現在のレベルの下のレベルが、C0トライの前述のレベル2であるかどうかを判定する(1208)。そして、それがレベル2である場合には、ブランチ削除プロセスは、削除プロセスの要求どおりに、そのC0トライの一連のリーフを削除する。一方、レベル2でない場合には、ブランチ削除プロセスは、自分自身を再帰的に呼び出すことにより、現在のレベルの直下のレベル内のサブトライの処理を継続することになる(1212)。
図13は、本発明の代表的な実施形態による挿入プロセスのプロセスフローチャートである。挿入プロセスが、C0トライ内に挿入する値を具備している限り(1300)、挿入プロセスは、C0トライが2つのレベルのみを具備しているかどうかを判定する(1302)。そして、2つのレベルのみを具備している場合には、挿入プロセスは、どの既存のリーフが、値が属しているキーインターバルを含んでいるかを判定する(1304)。既存のリーフが識別されたら、挿入プロセスは、その識別されたキーインターバル内に、可能な限り多くの値を挿入する。一方、C0トライが2つを上回る数のレベルを具備している場合には、挿入プロセスは、後述するブランチ挿入プロセスを呼び出すことにより、C0トライを縦断し、値を適切なレベルにおいてC0トライ内に挿入する1308。サブトライは、そのサブトライ又はそのサブトライの特定レベル内におけるその先行のサブトライの深さ以下の深さを具備する新しい値を包含したために適格性を喪失した場合に、分割されることになる。
すべての値の挿入が完了した後に(1310)、挿入プロセスは、新しい値が挿入されたかどうかを判定する(1312)。そして、挿入されている場合には、挿入プロセスは、効率的な処理のためには、C0トライが大きくなりすぎており、従って、C0トライのサブトライのいずれかを分割する必要があるかどうかを判定する。そして、挿入プロセスは、後述するナビゲート及び分割関数をC0トライの最上位レベルから呼び出すことにより、サブトライを分割する(1316)。そして、C0トライの処理が完了した後に(1318)、挿入プロセスは、新しい値を実際の値ストアに追加することになる(1320)。
図14は、本発明の代表的な実施形態によるブランチ挿入プロセスのプロセスフローチャートである。まず、挿入する値が存在している限り(1400)、ブランチ挿入プロセスは、現在のレベルの直下のどのレベルが、キーインターバルがその値を含んでいるサブトライを含んでいるかを判定する(1402)。そして、ブランチ挿入プロセスが、その現在のレベルの直下のレベルが、リーフレベルの上のレベルではないと判定した場合には(1404)、ブランチ挿入プロセスは、その現在のレベルの直下のレベルを処理するべく、自分自身を再帰的に呼び出すことになる。
一方、ブランチ挿入プロセスが、その現在のレベルの直下のレベルが、リーフレベルの上のレベルであると判定した場合には(1404)、ブランチ挿入プロセスは、どのリーフキーインターバルが、挿入対象の値のキーを含んでいるかを判定し(1408)、そのキーインターバル内に可能な限り多くの値を挿入する(1410)。次いで、ブランチ挿入プロセスは、現在のサブトライ内に次の値が存在しているかどうかを判定する(1411)。そして、現在のサブトライ内に次の値が存在していない場合には、ブランチ挿入プロセスは、1レベル上のトライに上昇し(1412)、そのC0トライが、依然として、適格性を有しているかどうかを判定する(1414)。そして、適格性を有していない場合には、ブランチ挿入プロセスは、値が挿入されたサブトライに対して分割を実行する(1416)。プランチ挿入プロセスは、すべての値の挿入が完了するまで、以上の処理を継続する(1417)。そして、値の挿入が完了したら、ブランチ挿入プロセスは、終了することになる(1418)。
図15は、本発明の代表的な実施形態によるC0トライ再構築プロセスのプロセスフローチャートである。このC0トライ再構築プロセス1500においては、C0トライの表現が、整然性を有すると共に、適格性を有しているという事実を活用している。このC0トライ再構築プロセスは、前述の深さベクトルとカウンタベクトルを使用することにより、C0トライの残りのサブトライを使用してC0トライを再構築する。このC0トライの再構築に所要する時間は、削除プロセスの後にC0トライ全体を再生成する場合よりも少ない。そして、この再構築プロセスにおいては、前述のLIDを使用して、トライ内の要素を追跡している(但し、空のストリングが値ストア内に存在している場合には、その空のストリングは、LID1ではあるが、その空のストリングはトライ内には存在しておらず、この場合には、そのトライ内の第1要素は、LID2となる)。即ち、このC0トライ再構築プロセスにおいては、まず、現在の残存LIDを第1残存LIDと等しく設定する(1502)。そして、処理対象の更なる残存LIDが存在している限り(1504)、このC0トライ再構築プロセスは、次の残存LIDを取得し(1504)、その次の残存LIDが、以前の残存LID及び現在の残存LIDと連続しているかどうかを判定する(1508)。そして、この条件が充足された場合には、この3つの残存LIDが連続して存在しているということであり、現在の残存LIDの深さとこれに先行するダミーエントリーは、古い深さと同一である。この場合には、C0トライ再構築プロセスは、以前の残存LIDの位置と現在の残存LIDの位置の間に位置している古い深さの要素を複写する(1510)。以前の残存LIDの深さと現在の残存LIDの深さが変わっておらず、古い深さベクトル内の深さの位置も変わっていないため、これは可能である。
一方、C0トライ再構築プロセスが、次の残存LIDが以前の残存LID及び現在の残存LIDと連続していないと判定した場合には、C0トライ再構築プロセスは、C0トライの最上位レベルの下のレベルから始めて(1512)、現在の残存LIDと次の残存LIDが同一レベルのサブトライ内にあるかどうかを判定する。そして、同一レベルのサブトライ内にある場合には、C0トライ再構築プロセスは、C0トライ内において1レベル降下し(1516)、再度、この判定を行う。一方、C0トライ再構築プロセスが、現在の残存LIDと次の残存LIDが、同一レベルのサブトライ内にないと判定した場合には、C0トライ再構築プロセスは、図16に示されているように、現在の残存LIDの深さを判定する(1518)。次いで、C0トライ再構築プロセスは、そのC0トライが、現在の残存LIDの深さにおいて、新しいダミーエントリーを必要としているかどうかを判定する(1520)。そして、必要としている場合には、C0トライ再構築プロセスは、図17に示されているように、その必要とされているダミーを挿入する(1522)。一方、新しいダミーエントリーを必要としていない場合には(或いは、必要なダミーを生成した後に)、C0トライ再構築プロセスは、そのC0トライ内において1レベル上昇し(1524)、C0トライ再構築プロセスが、そのC0トライの最上位に戻っているかどうかを判定する(1526)。そして、最上位に戻っている場合には、C0トライ再構築プロセスは、次の残存LIDを取得することにより(1506)、処理を継続する。一方、最上位に戻っていない場合には、C0トライ再構築プロセスは、C0トライ内においてレベルを上昇することにより、そのC0トライの処理を継続し、そのC0トライが、それぞれのレベルにおいて新しいダミーエントリーを必要としているかどうかを判定することになる(1520)。
図16は、本発明の代表的な実施形態によるC0トライ再構築プロセスによって使用されるサブトライ深さ判定プロセスのプロセスフローチャートである。C0トライ再構築プロセスにおいては、このサブトライ深さ判定プロセス1518を使用することにより、LIDが属しているサブトライの最小深さを判定している。このサブトライ深さ判定プロセスは、前述した深さベクトルをチェックし、現在の残存LIDのサブトライと次の残存LIDのサブトライ間におけるサブトライの最小深さを検出することにより、これを実行している。まず、サブトライ深さ判定プロセスは、現在の最小深さを現在の残存LIDのサブトライの深さに設定する(1600)。次いで、サブトライ深さ判定プロセスは、処理対象のサブトライを取得し(1602)、その選択されたサブトライをインクリメントする(1603)。そして、サブトライ深さ判定プロセスは、そのサブトライが、次の残存LIDのサブトライであるかどうかを判定する(1604)。そして、次の残存LIDのサブトライである場合には、サブトライ深さ判定プロセスは、現在の残存LIDのサブトライの深さを現在の最小値に設定する(1608)。一方、そうでない場合には、サブトライ深さ判定プロセスは、そのサブトライの深さが、現在の最小深さを下回っているかどうかを判定する(1610)。そして、現在の最小深さを下回っている場合には、サブトライ深さ判定プロセスは、現在の最小深さをそのサブトライの深さに設定する。尚、いずれの場合にも、サブトライ深さ判定プロセスは、処理対象の別のサブトライを取得することにより、処理を継続することになる(1602)。
図17は、本発明の代表的な実施形態によるダミー配置プロセスの擬似コードである。ダミー配置プロセス1522が、サブトライの現在のレベル内にダミーを配置する必要があると判定すると(1700)、ダミー配置プロセスは、そのC0トライの再構築のために維持されている(図示されてはいない)一時的深さ値ベクトル内の最後の深さ値に現在の最小値を設定する(1701)。この一時的深さ値ベクトルは、新しい深さベクトル内に現在のLIDに必要な深さを含んでおり、これは、そのC0トライが再構築される際に生成される新しい深さベクトルへの挿入とは逆に充填されている。従って、現在の最小値は、図15及び図16の現在のLIDの深さ、又はこのダミー配置プロセスによってサブトライ内に挿入された最新のダミーの深さのいずれかである。次いで、このダミー配置プロセスは、このレベルにおいて、現在のLIDのサブトライ−1から始めて、サブトライ内を逆方向にチェックする(1702)。そして、ダミー配置プロセスが、サブトライの位置が以前の位置よりも大きいと判定し(1704)、且つ、サブトライの深さが、現在の最小値を下回っていると判定した場合には(1706)、ダミー配置プロセスは、一時的深さベクトルの末尾にサブトライの深さのダミーを挿入し(1708)、現在の最小値をサブトライの深さに設定する(1710)。一方、サブトライの位置が、以前の位置を上回っていない場合には、ダミー配置プロセスは、ループの処理を停止する(1712)。
以上、特定の実施形態において、本発明について説明したが、当業者には、多数の更なる変更及び変形が明らかであろう。従って、本発明は、具体的に説明したもの以外の方法によって実施可能であることを理解されたい。即ち、本発明の実施形態は、すべての面において、例示を目的とするものであって、限定を意図するものではないと見なす必要がある。本発明の範囲は、本出願によって支持されている添付の請求項と、その等価物によって規定されているとおりである。
本発明の代表的な実施形態によるデータ処理システムのブロックダイアグラムである。 本発明の代表的な実施形態によるデータベースシステムの概略ブロックダイアグラムである。 コンプリートバイナリツリーの概念図である。 0コンプリートバイナリツリーの概念図である。 データベース内に格納された値のOツリーインデックス構造の図である。 Oツリーのインスタンス化を示している。 本発明の代表的な実施形態によるC0トライを表現するのに使用されるデータ構造を示すブロックダイアグラムである。 本発明の代表的な実施形態によるC0トライの選択ベクトルの説明用の例を示すブロックダイアグラムである。 本発明の代表的な実施形態によるC0トライサーチプロセスのプロセスフローチャートである。 本発明の代表的な実施形態による値ストア構造のブロックダイアグラムである。 本発明の代表的な実施形態による削除プロセスのプロセスフローチャートである。 本発明の代表的な実施形態によるC0トライマージ制御プロセスのプロセスフローチャートである。 本発明の代表的な実施形態において使用されるC0トライマージプロセスのプロセスフローチャートである。 本発明の代表的な実施形態によるブランチ削除プロセスのプロセスフローチャートである。 本発明の代表的な実施形態による挿入プロセスのプロセスフローチャートである。 本発明の代表的な実施形態によるブランチ挿入プロセスのプロセスフローチャートである。 本発明の代表的な実施形態によるC0トライ再構築プロセスのプロセスフローチャートである。 本発明の代表的な実施形態によるC0トライ再構築プロセスが使用するサブトライ深さ判定プロセスのプロセスフローチャートである。 本発明の代表的な実施形態によるC0トライ再構築プロセスが使用するダミー配置プロセスのプロセスフローチャートである。

Claims (20)

  1. 0トライのリーフの深さのエンコードされた深さ値を具備する深さベクトルであって、前記対応するリーフが、空のリーフノードであるかどうかを示すべくエンコードされており、任意の長さを有している深さベクトルと、
    複合ベクトルとしてグループ化されたセレクタベクトルの組であって、それぞれのセレクタベクトルは、前記C0トライの1つのレベルに対応しており、それぞれのセレクタベクトルは、前記深さベクトルのエントリーを選択するべく使用されるビットベクトルであって、前記セレクタベクトルの組内の前記セレクタベクトルの数は任意である、セレクタベクトルの組と、
    複合ベクトルとしてグループ化されたカウンタベクトルの組であって、それぞれのセレクタベクトルは、対応するカウンタベクトルとペアをなしており、前記カウンタベクトルは、その長さが、前記対応するセレクタベクトル内の1のビットの数に等しい、カウンタベクトルの組と、
    を有するC0トライを表現するコンピュータ利用データ構造。
  2. 前記C0トライの任意のレベルlのサブトライAと、そのレベルlの先行するサブトライBについて、前記Aのすべてのレベルl−1のサブトライの深さは、前記A及びBの深さを上回っており、
    前記C0トライ内の値又はストリングは、前記サブトライの前記リーフ内に空のノードを含まないことにより、最短であり得るプリフィックスによって弁別される請求項1記載のコンピュータ利用データ構造。
  3. 最上位サーチレベルの下の次のレベル内のそれぞれのサブトライごとに、前記最上位−1サーチレベルのサブトライの深さをサーチする段階と、
    前記最上位−1サーチレベルのセレクタベクトルによって選択された深さ値をチェックする段階と、
    前記値が前記現在の最上位−1サーチレベルのサブトライの一部であると識別されない場合に、サーチ対象の残りの最上位−1レベルのサブトライが存在しているかどうかを判定する段階と、
    サーチ対象の残りの最上位−1レベルのサブトライが存在しない場合には、本プロセスを終了し、サーチ対象の更なる最上位−1レベルのサブトライが存在している場合には、前記残りの最上位−1レベルのサブトライのサーチを継続する段階と、
    前記サーチ対象の値を含む最上位−1サーチレベルのサブトライが識別された際に、前記現在の最上位−1サーチレベルを前記最上位サーチレベルとし、前記識別された最上位−1サーチレベルのサブトライを、識別された最上位サーチレベルのサブトライとすることにより、本プロセスを1レベル降下させる段階と、
    新しい最上位サーチレベルが、リーフセレクタレベルであるかどうかを判定し、そうではない場合に、前記識別された最上位サーチレベルのサブトライの前記最上位−1サーチレベルのサブトライのサーチを継続する段階と、
    を有するコンピュータ利用C0トライサーチ方法。
  4. 削除対象の語彙的識別子のリストを受けとる段階と、
    前記削除対象の語彙的識別子の数が閾値を上回っている場合に、前記C0トライ内の残りの語彙的識別子を使用して新しいC0トライを生成する段階と、
    前記削除対象の語彙的識別子の数が前記閾値を上回っていない場合に、以下の段階、すなわち、
    前記C0トライ内に2つのレベルのみが存在している場合に、前記語彙的識別子を含むリーフを削除し、
    前記C0トライが2つを上回る数のレベルを具備している場合に、削除対象の語彙的識別子を含む前記C0トライのブランチを縦断し、前記C0トライの前記ブランチから前記語彙的識別子を削除し、
    前記残りのC0トライが2つを上回る数のレベルを具備している場合に、前記C0トライをチェックし、前記C0トライのサブトライをマージする段階と、
    を有するコンピュータ利用C0トライ削除方法。
  5. 挿入対象の値を受領する段階と、
    前記C0トライが2つのレベルを具備している場合に、挿入する値が存在している限り、値が属している前記C0トライの既存のリーフ内のキーインターバルを識別し、前記識別されたキーインターバル内に1つ又は複数の値を挿入する段階と、
    前記C0トライのサブトライが、前記サブツリーの深さ以下の深さを具備する新しい値を含んでいる場合に、前記サブトライを分割する段階と、
    すべての値の挿入が完了した後に、前記C0トライをチェックし、必要に応じて分割する段階と、
    を有するコンピュータ利用C0トライ挿入方法。
  6. 前記C0トライが2つを上回る数のレベルを具備している場合に、
    挿入対象の値が存在している限り、
    現在のレベルの直下の選択されたレベルが、リーフレベルの上のレベルでない限り、前記現在のレベルの直下のどのレベルが、キーインターバルが値を含んでいる前記C0トライのサブトライを含んでいるかを再帰的に判定し、前記判定されたサブトライを選択し、
    値が属している前記C0トライの既存のリーフ内のキーインターバルを識別し、
    前記識別されたキーインターバル内に1つ又は複数の値を挿入し、
    前記サブトライが、前記サブツリーの深さ以下の深さを具備する新しい値を含んでいる場合に、前記サブトライを分割し、
    すべての値の挿入が完了した後に、前記C0トライをチェックし、必要に応じてサブトライを分割することを
    を反復して実行する段階を更に有する請求項5記載の方法。
  7. 0トライを実現するデータ処理システムであって、
    プロセッサと、
    前記プロセッサに接続されたメモリであって、前記メモリは、その内部に格納されたプロセッサ実行可能なプログラム命令を具備しており、
    前記プログラム命令は、
    0トライのリーフの深さのエンコードされた深さ値を具備する深さベクトルを与える手順であって、前記深さベクトルは、前記対応するリーフが、空のリーフノードであるかどうかを示すべくエンコードされており、任意の長さを有している、手順と、
    複合ベクトルとしてグループ化されたセレクタベクトルを与える手順であって、それぞれのセレクタベクトルは、前記C0トライの1つのレベルに対応しており、それぞれのセレクタベクトルは、前記深さベクトルのエントリーを選択するべく使用されるベクトルであって、前記セレクタベクトルの組内の前記セレクタベクトルの数は任意である、手順と、
    複合ベクトルとしてグループ化されたカウンタベクトルの組を与える手順であって、それぞれのセレクタベクトルは、対応するカウンタベクトルとペアをなしており、前記カウンタベクトルは、その長さが、前記対応するセレクタベクトル内の1のビットの数と等しいベクトルである、手順と、
    を含んでいるデータ処理システム。
  8. 前記コンパクトC0トライの任意のレベルlのサブトライAと、そのレベルlの先行するサブトライBについて、前記Aのすべてのレベルl−1のサブトライの深さは、前記A及びBの深さを上回っており、
    前記コンパクトC0トライ内の値又はストリングは、前記サブトライの前記リーフ内に空のノードを含まないことにより、最短であり得るプリフィックスによって弁別される請求項7記載のデータ処理システム。
  9. 0トライサーチ方法を実現するデータ処理システムであって、
    プロセッサと、
    前記プロセッサに接続されたメモリであって、前記メモリは、その内部に格納されたプロセッサ実行可能なプログラム命令を具備しており、
    前記プログラム命令は、
    最上位サーチレベルの下の次のレベル内のそれぞれのサブトライごとに、前記最上位−1サーチレベルのサブトライの深さをサーチする手順と、
    前記最上位−1サーチレベルのセレクタベクトルによって選択された深さ値をチェックする手順と、
    前記値が、前記現在の最上位−1サーチレベルのサブトライの一部であると識別されない場合に、サーチ対象の残りの最上位−1レベルのサブトライが存在しているかどうかを判定する手順と、
    サーチ対象の残りの最上位−1レベルのサブトライが存在しない場合には、本プロセスを終了し、サーチ対象の他の最上位−1レベルのサブトライが存在している場合には、前記残りの最上位−1レベルのサブトライのサーチを継続する手順と、
    前記サーチ対象の値を含む最上位−1サーチレベルサブトライが識別された場合に、前記現在の最上位−1サーチレベルを前記最上位サーチレベルとし、前記識別された最上位−1サーチレベルのサブトライを、識別された最上位サーチレベルのサブトライとすることにより、本プロセスを1レベル降下させる手順と、
    新しい最上位サーチレベルがリーフセレクタレベルであるかどうかを判定し、そうではない場合に、前記識別された最上位サーチレベルのサブトライの前記最上位−1サーチレベルのサブトライのサーチを継続する手順と、
    を含んでいるデータ処理システム。
  10. 0トライ削除方法を実現するデータ処理システムであって、
    プロセッサと、
    前記プロセッサに接続されたメモリであって、前記メモリは、その内部に格納されたプロセッサ実行可能なプログラム命令を具備しており、
    前記プログラム命令は、
    削除対象の語彙的識別子のリストを受けとる手順と、
    前記削除対象の語彙的識別子の数が閾値を上回っている場合に、前記C0トライ内の残りの語彙的識別子を使用して新しいC0トライを生成する手順と、
    前記削除対象の語彙的識別子の数が前記閾値を上回っていない場合に、
    前記C0トライ内に2つのレベルのみが存在している場合に、前記語彙的識別子を含むリーフを削除し、
    前記C0トライが2つを上回る数のレベルを具備している場合に、削除対象の語彙的識別子を含む前記C0トライのブランチを縦断し、前記C0トライの前記ブランチから前記語彙的識別子を削除する手順と、
    前記残りのC0トライが2つを上回る数のレベルを具備している場合に、前記C0トライをチェックし、前記C0トライのサブトライをマージする手順と、
    を実行する手順と、
    を含むデータ処理システム。
  11. 0トライ挿入方法を実現するデータ処理システムであって、
    プロセッサと、
    前記プロセッサに接続されたメモリであって、前記メモリは、その内部に格納されたプロセッサ実行可能なプログラム命令を具備しており、
    前記プログラム命令は、
    挿入対象の値を受けとる手順と、
    前記C0トライが2つのレベルを具備している場合に、
    挿入する値が存在している限り、値が属している前記C0トライの既存のリーフ内のキーインターバルを識別し、前記識別されたキーインターバル内に1つ又は複数の値を挿入することを反復的に実行する手順と、
    前記C0トライのサブトライが、前記サブツリーの深さ以下の深さを具備する新しい値を含んでいる場合に、前記サブトライを分割する手順と、
    すべての値の挿入が完了した後に、前記C0トライをチェックし、必要に応じて分割する手順と、
    を含んでいるデータ処理システム。
  12. 前記プログラム命令は、
    前記C0トライが、2つを上回る数のレベルを具備している場合に、
    挿入対象の値が存在している限り、
    現在のレベルの直下の選択されたレベルがリーフレベルの上のレベルでない限り、前記現在のレベルのサブトライの直下のどのサブトライが、値を含むキーインターバルを含んでいるかを再帰的に判定し、前記判定されたサブトライを選択する手順と、
    値が属している前記C0トライの既存のリーフ内のキーインターバルを識別する手順と、
    前記識別されたキーインターバル内に1つ又は複数の値を挿入する手順と、
    前記サブトライが、前記サブツリーの深さ以下の深さを具備する新しい値を含んでいる場合に、前記サブトライを分割する手順と、
    すべての値の挿入が完了した後に、前記C0トライをチェックし、必要に応じてサブトライを分割する手順と、
    を反復的に実行する手順を更に含む請求項11記載のデータ処理システム。
  13. 0トライを表現するデータ構造を実現するコンピュータプログラム命令を具体化するコンピュータプログラムプロダクトであって、
    前記プログラム命令は、
    0トライのリーフの深さのエンコードされた深さ値を具備する深さベクトルを提供する手順であって、前記深さベクトルは、前記対応するリーフが空のリーフノードであるかどうかを示すべくエンコードされており、任意の長さを有している、手順と、
    複合ベクトルとしてグループ化されたセレクタベクトルの組を提供する手順であって、それぞれのセレクタベクトルは、前記C0トライの1つのレベルに対応しており、それぞれのセレクタベクトルは、前記深さベクトルのエントリーを選択するべく使用されるベクトルであって、前記セレクタベクトルの組内の前記セレクタベクトルの数は任意である、手順と、
    複合ベクトルとしてグループ化されたカウンタベクトルの組を提供する手順であって、それぞれのセレクタベクトルは、対応するカウンタベクトルとペアをなしており、前記カウンタベクトルは、その長さが、前記対応するセレクタベクトル内の1のビットの数と等しい、手順と、
    を有しているコンピュータプログラムプロダクト。
  14. 前記C0トライの任意のレベルlのサブトライAと、そのレベルlの先行するサブトライBについて、前記Aのすべてのレベルl−1のサブトライの深さは、前記A及びBの深さを上回っており、
    前記C0トライ内の値又はストリングは、前記サブトライの前記リーフ内に空のノードを含まないことにより、最短となり得るプリフィックスによって弁別される請求項13記載のコンピュータプログラムプロダクト。
  15. 0トライサーチプロセスを実現するコンピュータプログラム命令を具体化するコンピュータプログラムプロダクトにおいて、
    前記プログラム命令は、
    最上位サーチレベルの下の次のレベル内のそれぞれのサブトライごとに、前記最上位−1サーチレベルのサブトライの深さをサーチする手順と、
    前記最上位−1サーチレベルのセレクタベクトルによって選択された深さ値をチェックする手順と、
    前記値が、前記現在の最上位−1サーチレベルのサブトライの一部であると識別されない場合に、サーチ対象の残りの最上位−1レベルのサブトライが存在しているかどうかを判定する手順と、
    サーチ対象の残りの最上位−1レベルのサブトライが存在していない場合には、本プロセスを終了し、サーチ対象の更なる最上位−1レベルのサブトライが存在している場合には、前記残りの最上位−1レベルのサブトライのサーチを継続する手順と、
    前記サーチ対象の値を含んでいる最上位−1サーチレベルのサブトライが識別された場合に、前記現在の最上位−1サーチレベルを前記最上位サーチレベルとし、前記識別された最上位−1サーチレベルのサブトライを、識別された最上位サーチレベルのサブトライとすることにより、本プロセスを1レベル降下させる手順と、
    新しい最上位サーチレベルがリーフセレクタレベルであるかどうかを判定し、そうではない場合に、前記識別された最上位サーチレベルのサブトライの前記最上位−1サーチレベルのサブトライのサーチを継続する手順と、
    を有しているコンピュータプログラムプロダクト。
  16. 0トライ削除プロセスを実現するコンピュータプログラム命令を具体化するコンピュータプログラムプロダクトにおいて、
    前記プログラム命令は、
    削除対象の語彙的識別子のリストを受けとる手順と、
    前記削除対象の語彙的識別子の数が閾値を上回っている場合に、前記C0トライ内の残りの語彙的識別子を使用して新しいC0トライを生成する手順と、
    前記削除対象の語彙的識別子の数が前記閾値を上回っていない場合に、
    前記C0トライ内に2つのレベルのみが存在している場合に、前記語彙的識別子を含むリーフを削除し、
    前記C0トライが2つを上回る数のレベルを具備している場合に、削除対象の語彙的識別子を含む前記C0トライのブランチを縦断する段階と、前記C0トライの前記ブランチから前記語彙的識別子を削除する手順と、
    前記残りのC0トライが2つを上回る数のレベルを具備している場合に、前記C0トライをチェックし、前記C0トライのサブトライをマージする手順と、
    を実行する手順と、
    を有するコンピュータプログラムプロダクト。
  17. 0トライ挿入プロセスを実装するコンピュータプログラム命令を実現するコンピュータプログラムプロダクトにおいて、
    前記プログラム命令は、
    挿入対象の値を受領する手順と、
    前記C0トライが2つのレベルを具備している場合に、挿入対象の値が存在している限り、値が属している前記C0トライの既存のリーフ内のキーインターバルを識別し、前記識別されたキーインタバール内に1つ又は複数の値を挿入する手順と、
    前記C0トライのサブトライが、前記サブトライの深さ以下の深さを具備する新しい値を含んでいる場合に、前記サブトライを分割する手順と、
    を有するコンピュータプログラムプロダクト。
  18. 前記命令は、
    前記C0トライが、2つを上回る数のレベルを具備している場合に、
    挿入する値が存在している限り、
    現在のレベルの直下の選択されたレベルがリーフレベルの上のレベルでない限り、前記現在のレベルの直下のどのレベルが、キーインターバルが値を含んでいる前記C0トライのサブトライを含んでいるかを反復的に判定し、前記判定されたサブトライを選択する手順と、
    値が属している前記C0トライの既存のリーフ内のキーインターバルを識別する手順と、
    前記識別されたキーインターバル内に1つ又は複数の値を挿入する手順と、
    前記サブトライが、前記サブトライの深さ以下の深さを具備する新しい値を含んでいる場合に、前記サブトライを分割する手順と、
    を反復的に実行する段階を更に有する請求項17記載のコンピュータプログラムプロダクト。
  19. コンパクト0コンプリートバイナリツリーを実現するデータ処理システムにおいて、
    0コンプリートバイナリツリーのリーフの深さのエンコードされた深さ値を具備する深さベクトルを提供する手段であって、前記深さベクトルは、前記対応するリーフが空のリーフノードであるかどうかを示すべくエンコードされており、任意の長さを有している、手段と、
    複合ベクトルとしてグループ化されたセレクタベクトルの組を提供する手段であって、それぞれのセレクタベクトルは、前記コンパクト0コンプリートバイナリツリーの1つのレベルに対応しており、それぞれのベクトルは、前記深さベクトルのエントリーを選択するべく使用されるベクトルであり、前記セレクタベクトルの組内の前記セレクタベクトルの数は任意である、手段と、
    複合ベクトルとしてグループ化されたカウンタベクトルの組を提供する手段であって、それぞれのセレクタベクトルは、対応するカウンタベクトルとペアをなしており、前記カウンタベクトルは、その長さが、前記対応するセレクタベクトル内の1のビットの数に等しいベクトルである、手段と、
    を有するデータ処理システム。
  20. 前記C0トライの任意のレベルlのサブトライAと、前記レベルlのサブトライAのレベルlの先行するサブトライBについて、前記Aのすべての前記レベルl−1のサブトライの深さは、前記A及びBの深さを上回っており、
    前記C0トライ内の値又はストリングは、前記サブトライの前記リーフ内に空のノードを含まないことにより、最短の可能なプリフィックスによって弁別される請求項19記載のデータ処理システム。
JP2006507507A 2003-03-27 2004-03-24 格納データを処理するためのコンピュータ利用コンパクト0コンプリートツリーの動的格納構造及び方法 Expired - Fee Related JP4351247B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/401,303 US7096235B2 (en) 2003-03-27 2003-03-27 Computer implemented compact 0-complete tree dynamic storage structure and method of processing stored data
PCT/US2004/008923 WO2004088456A2 (en) 2003-03-27 2004-03-24 A computer implemented compact 0-complete tree dynamic storage structure and method of processing stored data

Publications (2)

Publication Number Publication Date
JP2006521623A true JP2006521623A (ja) 2006-09-21
JP4351247B2 JP4351247B2 (ja) 2009-10-28

Family

ID=32989408

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006507507A Expired - Fee Related JP4351247B2 (ja) 2003-03-27 2004-03-24 格納データを処理するためのコンピュータ利用コンパクト0コンプリートツリーの動的格納構造及び方法

Country Status (6)

Country Link
US (1) US7096235B2 (ja)
EP (1) EP1606741A4 (ja)
JP (1) JP4351247B2 (ja)
AU (1) AU2004225060B2 (ja)
CA (1) CA2519179C (ja)
WO (1) WO2004088456A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020098583A (ja) * 2017-03-15 2020-06-25 センシェア アーゲー データベースにおけるトライデータ構造の有効使用

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7515588B2 (en) * 2004-03-18 2009-04-07 Intel Corporation Method and apparatus to support a large internet protocol forwarding information base
US20060004791A1 (en) * 2004-06-21 2006-01-05 Kleewein James C Use of pseudo keys in node ID range based storage architecture
US20060206513A1 (en) * 2005-03-08 2006-09-14 International Business Machines Corporation Method for speed-efficient and memory-efficient construction of a trie
US7467155B2 (en) * 2005-07-12 2008-12-16 Sand Technology Systems International, Inc. Method and apparatus for representation of unstructured data
US7587098B2 (en) * 2005-07-14 2009-09-08 Mavs Lab. Inc. Pixel data generating method
JP4491480B2 (ja) * 2007-10-11 2010-06-30 株式会社日立製作所 インデクス構築方法、文書検索装置及びインデクス構築プログラム
JP4567754B2 (ja) * 2008-01-17 2010-10-20 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
US8341166B2 (en) * 2008-04-09 2012-12-25 American Express Travel Related Services Company, Inc. Infrastructure and architecture for development and execution of predictive models
US8364714B2 (en) 2009-06-08 2013-01-29 International Business Machines Corporation Servicing query with access path security in relational database management system
US8923298B2 (en) * 2012-05-04 2014-12-30 Futurewei Technoligies, Inc. Optimized trie-based address lookup
US9317511B2 (en) * 2012-06-19 2016-04-19 Infinidat Ltd. System and method for managing filesystem objects
CN103365991B (zh) * 2013-07-03 2017-03-08 深圳市华傲数据技术有限公司 一种基于一维线性空间实现Trie树的词典存储管理方法
CN103365992B (zh) * 2013-07-03 2017-02-15 深圳市华傲数据技术有限公司 一种基于一维线性空间实现Trie树的词典检索方法
EP2849099B1 (en) * 2013-09-11 2021-07-28 Dassault Systèmes A computer-implemented method for designing an industrial product modeled with a binary tree.
JP6016215B2 (ja) * 2013-12-20 2016-10-26 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation トライ木構造を有するレコード群を高い効率でマージソートする方法、装置及びコンピュータプログラム
CN103823865A (zh) * 2014-02-25 2014-05-28 南京航空航天大学 一种数据库主存索引方法
CN109376156B (zh) * 2015-06-08 2021-09-21 南京航空航天大学 读取具有存储感知的混合索引的方法
CN110516204B (zh) * 2019-07-16 2023-03-24 西安易协网络有限公司 一种分枝结构数据的批量关联和导入的计算机实现方法
US11507532B2 (en) * 2020-06-29 2022-11-22 Rubrik, Inc. Aggregating metrics in distributed file systems

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5640551A (en) * 1993-04-14 1997-06-17 Apple Computer, Inc. Efficient high speed trie search process
EP0804769B1 (en) * 1994-06-30 2000-02-02 International Business Machines Corporation Variable length data sequence matching method and apparatus
US6427147B1 (en) * 1995-12-01 2002-07-30 Sand Technology Systems International Deletion of ordered sets of keys in a compact O-complete tree
US5758353A (en) * 1995-12-01 1998-05-26 Sand Technology Systems International, Inc. Storage and retrieval of ordered sets of keys in a compact 0-complete tree
GB2368413B (en) * 2000-10-27 2002-09-11 3Com Corp Method and apparatus for searching databases employing a trie search structure

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020098583A (ja) * 2017-03-15 2020-06-25 センシェア アーゲー データベースにおけるトライデータ構造の有効使用
US11275740B2 (en) 2017-03-15 2022-03-15 Censhare Gmbh Efficient use of trie data structure in databases
US11347741B2 (en) 2017-03-15 2022-05-31 Censhare Gmbh Efficient use of TRIE data structure in databases
JP7198192B2 (ja) 2017-03-15 2022-12-28 センシェア ゲーエムベーハー データベースにおけるトライデータ構造の有効使用
US11899667B2 (en) 2017-03-15 2024-02-13 Censhare Gmbh Efficient use of trie data structure in databases

Also Published As

Publication number Publication date
WO2004088456A3 (en) 2004-11-18
EP1606741A2 (en) 2005-12-21
WO2004088456A2 (en) 2004-10-14
JP4351247B2 (ja) 2009-10-28
EP1606741A4 (en) 2009-08-26
CA2519179A1 (en) 2004-10-14
US20040193632A1 (en) 2004-09-30
US7096235B2 (en) 2006-08-22
AU2004225060A1 (en) 2004-10-14
CA2519179C (en) 2013-05-21
AU2004225060B2 (en) 2008-12-04

Similar Documents

Publication Publication Date Title
JP4351247B2 (ja) 格納データを処理するためのコンピュータ利用コンパクト0コンプリートツリーの動的格納構造及び方法
JP3771271B2 (ja) コンパクト0完全木における順序付けられたキーの集まりの記憶と検索のための装置及び方法
EP1393206B1 (en) Data structure for information systems
US8214405B2 (en) Longest-match/shortest-match search apparatus, search method, and program
US6427147B1 (en) Deletion of ordered sets of keys in a compact O-complete tree
AU2002249161A1 (en) Data structure for information systems
US20090287660A1 (en) Bit string searching apparatus, searching method, and program
AU2002229734A1 (en) Database system and query optimiser
US20100042596A1 (en) Bit string search apparatus, search method, and program
US20070094313A1 (en) Architecture and method for efficient bulk loading of a PATRICIA trie
US20120239664A1 (en) Bit string search apparatus, search method, and program
US8250089B2 (en) Bit string search apparatus, search method, and program
US8166043B2 (en) Bit strings search apparatus, search method, and program
Orlandic et al. Compact 0-Complete Trees.
US20100106682A1 (en) Database Index
JP4349803B2 (ja) データベースのデータの編成
Orlandic et al. Analysis of compact 0-complete trees: A new access method to large databases
Masud et al. A hashing technique using separate binary tree
Walker et al. Hybrid trees: A data structure for lists of keys

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081125

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20090224

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20090303

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090525

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

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

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

Free format text: PAYMENT UNTIL: 20120731

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

Year of fee payment: 4

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees