JP3735683B2 - 高速探索サーチ及びインデクシング法 - Google Patents

高速探索サーチ及びインデクシング法 Download PDF

Info

Publication number
JP3735683B2
JP3735683B2 JP2000533833A JP2000533833A JP3735683B2 JP 3735683 B2 JP3735683 B2 JP 3735683B2 JP 2000533833 A JP2000533833 A JP 2000533833A JP 2000533833 A JP2000533833 A JP 2000533833A JP 3735683 B2 JP3735683 B2 JP 3735683B2
Authority
JP
Japan
Prior art keywords
node
character
string
nodes
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 - Lifetime
Application number
JP2000533833A
Other languages
English (en)
Other versions
JP2002505481A (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.)
SAP SE
Original Assignee
SAP SE
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 SAP SE filed Critical SAP SE
Publication of JP2002505481A publication Critical patent/JP2002505481A/ja
Application granted granted Critical
Publication of JP3735683B2 publication Critical patent/JP3735683B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime 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/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
    • 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/99932Access augmentation or optimizing
    • 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/99933Query processing, i.e. searching
    • Y10S707/99936Pattern matching access
    • 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/99938Concurrency, e.g. lock management in shared database

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)
  • Golf Clubs (AREA)
  • Calculators And Similar Devices (AREA)

Description

【0001】
発明の属する技術分野
本発明は一般にデータ保守に、より詳しくはデジタルデータストリングの探索サーチ及びインデクシング法に関する。
【0002】
背景技術
ここ数10年コンピュータプログラマ及び科学者が、データベースを保守し、それ等の内容を探索するため新しく、そして、効率的な手法を発見してきている。探索を行うための標準的技術は、リニアな探索、ハッシング及び2進探索ツリーを含む。
【0003】
リニアな探索技術は、キー、又はストリングを行うための最も基本的な手法である(用語“ストリング”は、アルファニューメリック又は2進キャラクタのグループを記述するため用いられる)。当該の直線的な方法メソッドは、すべての現存のストリングに対してループ動作する。前記のすべての現存のストリングは、通常、アレイ又はリニアなリンク連結リストとして組織化され、各ストリングKiをリクエストされるKと比較する。リニアな探索は、下記の擬似コードにより表現され得る;
Figure 0003735683
ここで I(K)は、ストリングKに関連する情報レコードである。
【0004】
そのような探索の実行時間は、O−記法(Notation)を使用すると(関数f(n)はO(g(n)である)― すべてのn≧nO に対して
f(n)≦const.factor・g(n) が成立つようなnOが存在する場合)、
linear(n)=O(n)
こうして、リニア探索の実行時間はストリングの数nと共に比例的に増大する。
【0005】
単純性、簡易性のためリニア探索は、より進んだ探索方法より少ないオーバーヘッドを有する。一般的にいえば、リニア探索は、探索すべきストリングのセットが小である場合、他の探索方法により高速である。従ってインプリメンテーションの容易性及びロバストネスのため、n<100である際の小規模探索に対してリニアな探索は優先される。
【0006】
リニア探索の不都合は、エントリ又はストリングの数nへのリニアな依存性である。リニア探索方法は、増大するnに対して、高性能アプリケーション向けに非現実的になる。10,000―エントリテーブルを探索することは、10―エントリテーブルより1,000倍遅くなる。
【0007】
探索に対する他の普及している技術はハッシングである。ハッシングは、リニア探索方法におけるようにすべてのストリングをあまり残さず探索しつくすというよりむしろストリングの2進表示から直接、所定ストリングのアドレス又はロケーションを計算するものである。ハッシング探索は、しばしば2段階ステッププロセスであり、ここで、ハッシング関数Hは、リニア探索方法を用いて探索されるストリングの小さいリストを参照するインデックス索引をリターンする。ハッシング探索は、擬似コードで次のアルゴリズムにより表現される。
【0008】
i=H(K)
RETURN T(i)
ここでハッシング関数Hは、所定のストリングのインデックス索引、リターンインデックス索引iを計算する。インデックスiはマッチングストリングのみに関与ないし参照し得、又はストリングの1つのリストをレファレンス参照し得、該ストリングのリストは次いでマッチングストリングに対してリニアに探索されねばならない。
【0009】
通常使用されるハッシング関数Hは下記の式を用いてハッシュ表T内へのストリングの編成組織化又はインデクシングを行う:
H(K)=(キーストリングKの総バイトb1,…,bm(ASCIIコード)の和)modulo M
ここでMはハッシュ表Tのサイズを表す。明らかにハッシュ関数Hは、一般に、各ストリングに対して固有―意であることが保証され得ない。2以上のストリングにより、同じハッシュ関数が生じる場合には、(異なるストリングKi≠Kjに関して(H(Ki)=H(Kj)が生じる場合には)衝突ケースの発生と称される。衝突ケースに対処する最も普通の手法は、リクエストされたエントリを見出すべく通常リニア探索方法により、衝突リストの探索を要する各々のハッシュ表エントリに対して同一のハッシュ値を有するストリングのリストを維持保持することである。
【0010】
一般にハッシングの実行時間は、衝突リストの平均長さに依存し、前記の衝突リストの平均長さは、ハッシュ関数Hの分布のみならず、ハッシュ表サイズMにも依存する。ハッシュ関数Hがほぼ完全な分布(すなわち、任意のキーストリングKがインデックスi=H(K)へ分散、分布される確率がすべてのi=1…Mに対して等しい起こり易さである)を有するものと仮定すると、ハッシングの平均実行時間は次のようになる。
【0011】
hash(n)=O(n/M)
その結果は、十分大きなハッシュ表サイズM>n、に対してほぼ一定である実行時間である。
【0012】
従って、理論上、実行時間は、ほぼnに無関係であると期待され得る。ここでは完全なハッシュ関数(大多数の実世界アプリケーションにおける非現実的な期待)を使用し得るならばの条件付きである。
【0013】
ハッシングの欠点は、衝突のケースを分解する固有の必要性により、付加的で、時には長たらしい検索の行われることが要求される。ハッシング技術を利用する平均探索が迅速であるが、探索を完結する実際の時間長さは、所定のストリング分布に対して最も一層より悪くなり得る。最悪のケースでは、すべてのストリングが、同じインデックスにて終わることが起こり得て、探索の総合的性能が、リニアな探索の場合より良好なものとならない。従って実際上、実時間世界アプリケーションに対して効率的なハッシュ関数を見出すことは、困難なタスクであり、インデクシングすべきストリングの実際の確率分布に著しく依存する。
【0014】
ハッシングのもう1つの欠点は、ワイルドカード探索に役立たないことである。ワイルドカード探索は、そこにて探索ストリングにおける1つ以上のキャラクタがワイルドカードキャラクタであるようなものである(すなわち、他の任意のキャラクタにとって代わり得るキャラクタである)。ワイルドカード探索は、しばしば多重マッチングストリングをリターンする。
【0015】
探索の他の方法は探索ツリー方法である。その種探索が実行される前に、その上にて探索を実行すべきデータを編成組織化するために探索ツリーを生成しなければならない。探索ツリーインプリメンテーションの種々のものが提案されており、その中で最も基本的なものは、2進探索ツリーであり、この2進探索ツリーは、次のように規定される。
【0016】
(ツリー節点ノードにより表される)ストリングの1セットK1,…,Knにわたる(2進)ツリーTは、次の条件が成立つ場合、探索ツリーと称される、すなわち、いずれのサブ節点ノードTに対しても、そして、Tの左のサブツリーにおけるいずれの下降するノードT1に対しても、また、右のサブツリーにおけるいずれのTrに対しても、下記が成立つ場合;
value(T1)<value(Tr)、ここで value(T)は、ツリー節点ノードTに関連するストリング値であって、探索ツリーと称される。
【0017】
こうして基本的な探索手続きを(再帰的に)擬似コードで次のように定式化できる(通常のように、Kは探索されているストリングを表し、そして、非存在のキーのような特別な場合は、簡単化のため省略し得る):
Figure 0003735683
上述の探索ツリーは、―方法メソッドは、深さ優先―ツリー―トラバース走査を実行し、それにより、ツリーの深さに比例して増大する実行時間を生じる。従って、適当にバランスされた探索ツリーの条件下で(すなわち、それのリーフ節点ノードが実質的に均に分布しているツリー)平均実行時間は次の通りである。
【0018】
tree=O(log2n)
こうして,理論上、平均実行時間は、エントリ、又はストリングの数と共に対数的に増大する。このことは、多数のエントリに亘って探索する場合、リニア探索に対しての実質的改善を成す。
【0019】
探索ツリー方法の1つの欠点は、フィールド条件下で、実行時間は大いに変化し得る、それというのは実際上、探索ツリーはめったにバランスされないからである。ツリーのバランシング特性は、著しく、実際のストリング分布に依存する。前記問題を最小化するため、下記刊行物に記載されている、AVU ツリー(tree)のような複雑な方法が案出されている、すなわち、
Van Wyk, Christopher J., 著述 Data Structures and C. Programms, Addison-wesley Publishing, 1988年。
【0020】
しかしながら、そのような方法は、またツリー構造管理のためインプリメンテーション上のオーバーヘッドを増大させる傾向を呈する。実際上、アクチュアルのインプリメンテーションに依存して、ツリーをベースとする探索は、簡単なリニア探作を凌駕することはないーエントリの数が幾100のブレークイーブンポントを越えないならば。
【0021】
本発明は、ジュエネリックインデクシング及びパーシャルマッチ問い合わせを支援するアルファニューメリック又は2進ストリングの高速インデクシング及び検索取出のための方法を提供することにより前述の問題を克服する。本発明は特有一義的コンパクトツリーを利用し、ここで、1つの節点ノードが、1つの探索ストリングにて複数のキャラクタをステップ的に走査するため使用され得、そして、基礎となるストリングアルファベット内に存在するキャラクタ(例えば8ビットーベースーキャラクタに対して256)と同じ数の後継者サクセッサー節点ノードを有し得る。更にワイルドカード探索中可能な多重マッチングストリングのため複数のサブツリーないしツリーを探索する必要がある場合、本発明はバックトラッキングを使用する。また、本発明はヒューリスティックサブツリー枝刈り(pruning)すなわち、それによりパーシャルマッチ探索をサブツリー全体の破棄により加速し得る方法を利用する。
【0022】
本発明は、ストリングを使用したケースに主に適用されるが、そのような探索はデータベース中に記憶されている任意のデジタル情報を探索するため使用し得る。
【0023】
発明の要約
本発明は、ストリングの形態で記憶されている高速探索及びインデクシング法に関する。この発明は所定の問い合わせストリングにマッチングするようデータベースを迅速に探索するための手段を提供する。開示された実施例では探索方法メソッドは、図解のためアルファニューメリックストリングに関連付けて利用される。
【0024】
本発明の目的とするところは、所定のアプリケーションに対していずれの公知の方法よりも高速の、ストリング探索方法を提供することにある。
【0025】
本発明の目的とするところは、大抵のアプリケーションに対してリニア探索ハッシュ探索、又は2進ツリー探索より高速のストリング探索方法を提供することである。
【0026】
本発明の他の目的とするところはキャラクタレベルでのワイルドカードのようなパーシャルマッチングをサポートするストリング探索方法を提供することにある。
【0027】
本発明の他の目的とするところは、インデックス内でパーシャル部分的に指定されたストリングのジェネリック記憶を含めたジェネリックインデキシングをサポートするストリング探索のための方法を提供することにある。
【0028】
本発明の他の目的とするところは、大きなストリングサイズに特に効率的なストリング探索方法を提供することにある。
【0029】
本発明の他の目的とするところは、不均一に分布されたストリング分布に対してロバストネスを有するストリング探索方法を提供することにある。
【0030】
本発明の他の目的とするところは、2進ツリー又はハッシング衝突リストにて生じる際限のない縮退を防止するストリング探索方法を提供することにある。
【0031】
本発明の他の目的とするところは、内部ツリー構造管理オーバーヘッドを最小化するストリング探索方法を提供することにある。従って、100エントリより少ないエントリを有するテーブルに対しても、開示されたインプリメンテーションは、しばしばリニア探索より高速になる。
【0032】
本発明の他の目的とするところはロジカルロックマネージメント(lock management)の改善された方法を提供することにある。
【0033】
本発明によれば、複数のストリングエントリをインデクシング方法が提案され、ここで、前記の複数のストリングエントリの各1つが複数キャラクタの1つのストリングである。本発明によれば探索ツリーを使用することにより複数のストリングエントリのインデクシングを行う方法であって、前記の複数のストリングエントリのうちの各1つが複数キャラクタの1つのストリングであるようにした当該のインデクシング方法において、前記探索ツリーは、連結リンクされた節点を有し、前記の連結された節点ノードは、1つの根節点及び複数の内部節点ノード並びに複数のリーフ節点ノードを有し、前記の内部節点ノードは、1つのキャラクタ又はキャラクタのサブストリングに関連付けられており、また前記のリーフ節点ノードは、前記の複数のストリングエントリに関連付けられており、ここで、前記の複数の内部節点ノードの各々は、更に、下記の要素(a)〜(e)を有し、すなわち
(a) 親節点に対する参照を有し、ここで前記親節点ノードは、前記複数の内部ツリー節点ノードのうちの他の1つのもの又は、前記根節点ノードであり、
(b) キャラクタ比較位置を含む第1データフィールドを有し、前記キャラクタ比較位置は、前記キャラクタ又は、前記複数の内部節点ノードのうちの前記の1つに関連するキャラクタのサブストリングにおけるキャラクタの数を指示するものであり、
(c) 比較キャラクタを含む第2データフィールドを有し、前記比較キャラクタは、前記キャラクタ又は、前記複数の内部節点ノードのうちの前記の1つに関連するキャラクタのサブストリングにおけるキャラクタが、前記キャラクタ比較位置に関連する前記ストリングエントリの1つのキャラクタ位置にて1つのストリングエントリ内に含まれているか否かを決定するため使用され、
(d) 可変的な個数の少なくとも2つの後継者ノードへの参照を有し、
(e) ツリーのトラバース走査の間に後継者ノードの中の高速ハッシュ探索を可能にするための相応の親節点ノードの後継者ノードへの参照を有するハッシュ表アレイを有し、さらに所定数のハッシュバケットを有し、
キャラクタのストリングは、アルファニューメトリックキャラクタの1つのストリングであり、複数のエントリのうちの少なくとも1つが1つのワイルドカードキャラクタを有し、このワイルドカードキャラクタはキャラクタのストリングの任意の可変的な位置に又は複数のストリングエントリのうちの少なくとも1つの任意の可変的な位置に位置決めされる。
【0034】
又、本発明によれば複数のストリングの中から、複数のキャラクタから成る所定のストリングを探索する方法であって、前記複数ストリングの各々が複数キャラクタの1つのストリングであるようにした当該の探索方法において、前記方法は、下記ステップを有する、すなわち、
請求項1から8までのうちいずれか1項の方法により探索ツリーを生成するステップを有し、ここで、前記の複数のストリングは複数のストリングエントリを形成するものであり、
前記の所定のストリングに関連する問い合わせを形成するステップ
前記の問い合わせを利用して前記探索ツリーをトラバース走査して前記の所定のストリングにマッチングする前記複数ストリングの任意のものに1つのインデックス索引を与えるステップを有するのである。
【0035】
本発明による所定のストリングを探索する方法を次の事項に関連して使用すれば特に有利である、すなわち、ヒューマンリソースマネージメント、ファイナンシャルズ、ビジネスワークフロー、人事マネージメント、ペイロールアカウンティング、タイムマネージメント、人事開発又はネットワーク、例えば、インターネット又はイントラネット、システムに関連して使用すれば特に有利である。そのようなシステムは、特にドイツ連邦共和国のSAP、WalldoifからのR/3システムであり得る。
【0036】
本発明のいくつかの基本的側面及び有利な実施例は、次のようなものである。
【0037】
高速のストリングインデクシング方法は、効率的に、コンパクトな探索ツリーを利用して、アルファニューメリック又は2進ツリーを記憶し、探索し、そして除去する。探索ツリーにおけるレベルの数は、可能であれば、1つより多くのキャラクタを表す1つの節点ノードにより最小化される。ツリーの各内部節点ノードは、順次ハッシングに対するハッシュ表アレイを有し、このハッシュ表アレイはまた、1つの所定の節点ノードをトラバースするのに必要とされる時間を最小化する。キャラクタレベルにおけるワイルドカードのようなパーシャルマッチングのため探索を実行し得る。ストリングエントリの同じテーブル上にて、独立的に、且つ、同時に多重のインデクスをオープンし得る。
【0038】
本発明及び実施例は以下の図を参照しながら説明される。
【0039】
図の簡単な説明
図1は高速ストリングインデクシングのアプリケーションを具現化するインデクスツリーの基本的データ構造の例を示す概念図である。
【0040】
図2及び図2aは、INSERT Operation の有利な実施例に対するフローチャートの図である。
【0041】
図3は、実行されているINSERT Operationの1事例の第1半部の概念図である。
【0042】
図4は、実行されているINSERT Operationの1事例の第2半部の概念図である。
【0043】
図5は、REMOVE Operation の有利な実施例に対するフローチャートを表す図である。
【0044】
図6は、REMOVE Operation の1事例の第1半部に対するフローチャートを表す図である。
【0045】
図7は、実行されているREMOVE Operation の1事例の第2半部に対するフローチャートを表す図である。
【0046】
図8は、Exact Match FIND OperationのREMOVE Operation の有利な実施例に対するフローチャートを表す図である。
【0047】
図9及び図9aは、 Partial Match Find Operationの有利な実施例に対するフローチャートを表わす図である。
【0048】
図10は、実行されているPartial Match Find Operationの事例を表す概略図である。
【0049】
図11は、FI indexed lock table を使用したロジカルロックマネージメントを表わす概念図である。
【0050】
発明の詳細な説明
本発明は探索を行いデータベースを保持するための改善された方法を開発したものである。本発明は、従来の探索及びインデクシングに比して多くの利点を有する。そのうちの1つは、スピードであり、優れたスピードは主に、3つのファクタに帰せられ得る。エントリ又はキーストリングの数に対するロバストネス、キーストリング分布に対するロバストネス及びキーストリング長さに対するロバストネス。それ等のすべての3つのファクタを以下に詳細に説明する。
【0051】
1=b11・・1m,K2=b21・・2m,・ Kn=bn1・・nm により表されるランダムのm―キャラクタキーストリングn個の1セットをインデクシングするものとする。
【0052】
図解目的のため、各キャラクタが8ビットバイトとしてコード化されている通常のケースを仮定し、各キーストリングの長さが256バイト(m=256)であると仮定する。
【0053】
キーストリングの数に対するロバストネスは、ストリングの数nが増大するに従って、INSERT, REMOVE,及びFINDの基本動作operationsの平均実行時間が固有的に増大するのを制限することに関連する。
【0054】
本発明において、開示された高速ストリング方法(好適実施例中では“FI”と称される)は、インデクスツリーをトップからボトムへトラバース走査し(それの構造は、次のことを除いて2進ツリーのそれと類似している、すなわち、内部ノードがそこから直接下降している、単に2というよりむしろ多重のサブツリーを有し得ることを除いて類似する一方、同時に左から右へ探索ストリングをステップ的に走査して進む。探索ツリーの最後のキャラクタに到達すると、プロセスはマッチングを指示する探索ツリーのリーフ節点ノードに到達しているか、又は探索ストリングが現在インデクス中に存在していないことを検出している。こうして、ツリー節点ノード検査の平均総数は、インデクスツリーの平均深さと等しいか、それより小でなければならない。
【0055】
本発明に関連して利用される探索ツリーの平均深さは次のように計算し得る。探索ツリーの平均ブランチングファクタKは、任意の内部節点ノードから発する子孫下降サブツリーの平均数として定義付けられ得る。従って、Kは、基礎となるアルファベットにおける基礎となるキャラクタの数と等しいか、又はそれより小である(例えば、8ビットに対して256)。しかしながら、実際上、平均ブランチングファクタは、当該の数より著しく小である、それというのは、キーストリングの実世界分布は、通常均一分布とは程遠いものであるからである。ランダムな実世界データの大きなセットを用いての実験結果の示すところによれば、リズナブルなブランチングファクタは、4〜9ビットの基礎となるアルファベット及び16〜512のキャラクタのストリング長さに対して K=3…7のレインジ内にある。
【0056】
内部節点ノードの数はツリーTの各後続レベルに対してKのファクタだけ増大するので、最終レベルでの(キーストリングの総数に等しい)リーフ節点ノードnの総数は、次のように表され得る。
【0057】
n=kdepth(T) 又は depth(T)=logK
更にFI operations INSERT, REMOVE 及び F IND の平均実行時間がツリーの深さに等価であるので次のように表され得る。
【0058】
FI(n)=O(logKn)そして実行時間は、エントリの数の増大と共に対数的にのみ増大する。例えば、K=4の場合、キーストリングエントリの数の4倍になるごとに、平均してそれらの考慮されるべき動作operations に対して唯もう1つのレベルが加えられるだけである。
【0059】
キーストリング分布に対するロバストネスは、エントリの所定のセットに対して探索時間の分散偏差を制限することに関連する。換言すれば、1つの任意の所定のエントリに対する探索は、理想的には他の任意のエントリごとに最悪のケースに関してーに対する探索と同じ時間量を取るべきである(すなわち、最悪のケースは平均ケースより遙かに多くの時間をとるべきではない)。しかしながらキーストリングの実世界分布に基づき、1つの2進ツリーがインデクスツリーのトップの近傍でいくつかのリーフ節点ノード及び極度の深さのところで他のリーフ節点ノードを有し得る。最悪のケースにて、2進ツリーは、そこにて、いくつかのエントリに対する探索がリニアリスト探索と同じ時間のかかるポイントへ縮退し得る。AVLツリーは、2進ツリーより幾らか良好に分布されるが、アルゴリズムのデータ構造を維持するのに劇的に増大する管理オーバーヘッドを代償にして行われるものであり、これにより、総合的な性能が悪化する。ハッシングアルゴリズムはまた、エントリのバランスされていない分布をも来し得る。理想的には、エントリはハッシングテーブルを横切って均一に分布され、そして、衝突リストは、多かれ少なかれ均一の長さである。実際上、或衝突リストは、他のものより長い。最悪のケースでは、すべてのエントリが、同じハッシュスロットにマッピングされ、1つのハッシュ探索は、1つのリニアリスト探索に等価なものとなる。
【0060】
FIインデクスツリーが概して完全にバランスされたツリーではないけれども、最大縮退の度合いが制限される。それというのは、少なくとも1つのストリングキャラクタが、ツリーを降下する各下降ステップに対して探索ストリングにて、トラバースされるからである。こうして、ツリーTの総合深さは、キーストリング長さmにより制限され、このキーストリング長さは、通常エントリnの総数より対数的に小さい数である。
【0061】
キーストリング長さに対するロバストネスは、個別のエントリの平均長さmへの探索時間の依存性を制限することに関連する。このことは、ロジカルロックマネージメント(lock management)のようなアプリケーションにおいては重要な配慮事項であり、ここでは各キーストリングが、全データベーステーブルラインに相応し得る。それ等のアプリケーションでは、数1000ではなくとも数100のキャラクタの長さであるキーストリングをインデクシングし探索することが重要であり得る。従来の探索方法を用いる場合、大きなキーストリング長さは、しばしば、各探索ステップに対して長ったらしいキャラクタごとの比較を必要とする。
【0062】
FIは、各探索ステップが探索ストリングにて多重キャラクタをカバーし得るようにして、キーストリングをインデクシングし得る能力を有する。実際のストリング長さに無関係に、各探索ごとに唯一の単一のキャラクタ検査しか必要でない。FIインデクスツリーTの深さが通常ストリング長さmより遙かに小さいので、ストリングの大部分を、検査する必要がなく、探索プロセス中スキップし得る実験の結果により確認されたところによれば、大抵の実世界アプリケーションにて、FI性能がキーストリング長さと共に大して変わらない。FIは、誤ったリターンの無いことを検証するのに、探索ストリング及びリーフ節点ノード(又はワイルド探索の場合における節点ノード)の1つのファイナル比較をしさえすればよい。
【0063】
図示の実施例
FIインデクシングツリー2の有利な実施例の基本構造例が図1に示してある。
【0064】
当該の図解においてツリーに関連するデータベースは次のよなストリングエントリを有する。“abcd”,“cdaf”,“cddh”,及び“gfbe”.
簡単のため、及び図解目的のためだけにそれのキーストリングに対する基礎となるアルファベットは8つのキャラクタ(3ビット)を有する。注目すべきことには、比較的に小又は大のアルファベット(例えば8ビットに基づく)が大抵のアプリケーションにとって有用である。
【0065】
インデクスツリー2のトップには根節点ルートノード4が位置付けられ、このルートノード4は、インデクスツリーの初期設定の際生成される第1ノードである。リーフノード5a,5b,5c,及び5dは、キーストリングフィールド6a,6b,6cそして6d並びに情報フィールド7a,7b,7c,7dに関連付けられ、それらのキーストリングフィールドは、インデクシングされるキーストリングを含み、前記情報フィールドは、ユーザがインデクシングされるキーストリングと関連付けたい任意の付加データを含む。注目すべきことには、ユーザは、複数情報フィールドを1つの所定のキーストリングと関連付けたいと願う。例えばキーストリングは、従業員識別番号であり得、別個の情報フィールドは、従業員氏名、アドレス、電話番号等であり得る。
【0066】
2進ツリーにおけるように、内部節点ノードが存在し、それ等の内部ノード節点ノードは、所定のキーストリング又はユーザ提供の情報に関連付けられているのではなく、比較に関連付けられており、この比較は、所望のリーフノードへ向かっての方向、指示を与えるものである。図1には唯一の内部ノード節点8が示されているが、コンピュータプログラミングの当業者にとって、明らかなようにインデクスツリーがしばしば多数の内部ノードを有する。
【0067】
内部ノード節点は、いくつかのデータフィールドを含む。親フィールド10は当該節点の親ノード、ルート、根ノード4を参照する。Pos field 11は、キャラクタ比較位置(pos)と称されるものについての情報を含む。このフィールドは各内部ノード節点に対して次の条件が充足されるように維持される、すなわち、第1のposキャラクタ(すなわち、長さposのサブストリング)は、その節点ノードから発するサブツリー内に含まれているリース節点ノードに関連するすべてのキーストリングに対して、同一であるとの条件が充足されるように維持される。キャラクタ比較位置が指示しているところによれば、キャラクタ比較が、共通のサブストリングにつづく後続の節点ノードにて行われるべきであるということである。キャラクタ比較位置は、同一のキャラクタシーケンスをスキップすることにより、インデクスツリーに亘って探索プロセスを加速するため使用される。F1ツリーの性質によれば、1つの所定のサブツリーのリーフ節点ノードに含まれているすべてのストリングが同じプレフィックスを有する。例えば、リーフ節点ノード5b、5dは内部節点ノード8と共に1つのサブツリーを構成し、それぞれキーストリング“cdaf”及び“cddh”に関連付けられる。それ等の2つのサブストリングは、プレフィックス“cd”を共用する。この例では、内部節点ノード8のposフィールドはキャラクタキャラクタ比較位置数2を含むこととなる、というのは、これは、内部節点ノード8から発するサブストリングに含まれるすべてのストリングの長さであるからである。当該のキャラクタ比較位置に関連するキャラクタは、第3キャラクタであり、この第3キャラクタは、2つのサブストリングが共通に有しない第1のキャラクタである。
【0068】
Succフィールド12は、後継者節点ノードの現在、瞬時番号のトラックをキープする。事例では、内部節点ノード8は、2つの後継者リニア8b及びリーフ節点ノード5cを有する。SuccFirstフィールド13は、すべての後継者ノード節点ノードの2重にリンクされたNULL−終端されたリスト(時により、サイブリングリストと称される)の第1のノードに対する参照である。事例中内部ノード8のSuccFirstフィールド13は、リーフ節点ノード5bを参照する。SuccFirstフィールド13は、他のものの中で、REMOVE機能のために用いられ、これについては以下説明する。
【0069】
CHフィールド14は節点ノードの比較キャラクタを有する。比較キャラクタは、或1つの節点ノードをサイブリングノードから区別、識別する第1のキャラクタである(これは他の点では同じストリングを共有する)。
【0070】
SblPrev フィールド15は、サイブリングリストの先行(左隣)の節点ノードへの参照リンクである。サイブリングリストの先行節点ノードがない場合、(リファレンス)リンクは、NULL(零)リファレンスである。同様に、sbtNextフィールド16は、サイブリングリストの次の(右隣)ノードへのサイブリングリストの次の節点ノードがない場合、参照リンクは、零参照である。事例では、内部節点ノードへの参照リンクであり、内部節点ノード8のフィールド16は、リーフ節点ノード5dへの参照リンクである。
【0071】
ローカル後継者ハッシュ表17は、追従すべき適正な後継者ブランチの探索及び識別に使用される(すなわち、所定の探索中進行すべきツリーを更に1レベル下る)。ローカル後継者ハッシュ表17は、ハッシュ表アレイ18及びフィールド19からなる。ハッシュ表アレイ18は、キャラクタ値を表すハッシュバケットの固定数を含む。事例では基礎を成すキーストリングを構成する8つのキャラクタが4つのハッシュバケット18a、18b,18c及び18dを横切って均一に分布している。上述のように内部ノード8から発するサブツリーのリファレンス節点ノードに含まれるすべてのキーストリングが同じスタートposキャラクタを有するので、これは、事例中2つのキャラクタ“cd”となる、それ等のposストリングに対する後続のキャラクタ、これもまたキャラクタ比較位置キャラクタ、すなわち、それぞれ“a”及び“d”はハッシュバケット内に置かれる。事例中キャラクタ“a”及び“e”は、ハッシュバケット18a割り当てられており、“b”及び“f”はハッシュバケット18bに、そして、“c”及び“g”は、ハッシュバケット18cに、そして、“d”及び“h2は、ハッシュバケット18dに割り当てられている。こうしてハッシュバケット18aは、リーフ節点ノード5bへの参照リンクを有し、ハッシュバケット18dは、リーフ節点ノード5cへの参照を有する。
【0072】
HashNextフィールド19は、ハッシュ衝突リストに対する参照リンクとして用いられる。事例中“c”及び“g”もまた、ルート根節点ノード4のハッシュ表アレイ中に同じハッシュバケットを有するので、そして1つの有利な実施例では各ハッシュバケットが唯一の他のノード節点にのみ参照を有し得るので、後継者ノード節点、ルート根節点ノード―それの比較キャラクタが“c”であるーがそれの比較キャラクタが“g”であるサイブリング節点ノードを参照することが必要である。こうして、内部ノード8のhashNextフィールド19は、リーフ節点ノード5dへの参照リンクを有する。
【0073】
1つのリーフ節点ノードは、リーフ節点ノードであり得、(インデクスツリーが唯一のエントリからなる場合)、又は1つの内部ノードであり得る。事例中リーフ節点ノード4は、1つの内部節点ノードである。こうして、ルート根節点ノード4は、内部節点ノード8と同じフィールドを有しない(こうしてルート根節点ノード4の親フィールドは零ポイント(NULL pointer)リーフ節点ノード5a,5b,5cを有する)。及び5dもまた、いくつかのデータフィールドを含む。図1に関連して述べると、リーフ節点ノード5bは、典型的リーフ節点ノードの1例として挙げられている。リーフ節点ノード5bの親フィールド20,chフィールド24b、sblprevフィールド25,及びsblNextフィールド26は、内部ノード8の親フィールド10,chフィールド14,sblprevフィールド15,及びsblNextフィールド16に類似する。Posフィールド21は、それを1つのリーフ節点ノードとして識別するため“無限”“infinite”、1つの特別な値にセットされる。succフィールドの内部は不確実である。リーフ節点ノードは後継者を有しないからである。キーフィールド27は、キーストリングフィールド6bを参照し、一方infoフィールド28は、情報フィールド7bを参照する。
【0074】
事例中明らかになることは、キーストリング“abcd”キャラクタ“a”でスタートする唯一のキーストリングは、リーフ節点ノード5aに関連付けられ、chフィールド24aは、キャラクタ“a”を含む。同様7に、キーストリングキャラクタ“g”でスタートする唯一のキーストリングは、リーフ節点ノード56dに関連付けられ、該リーフ節点ノードのchフィールド24dはキャラクタ“g”を含む。キャラクタ“c”でスタートする複数のキーストリング、すなわち、“cdaf”及び“cddh”)、があるので、それ等のキーストリングに関連するリーフ節点ノードはルート根節点ノード4の後継者になり得る。むしろ、内部節点ノード8は、キャラクタ“c”をもってスタートするキーストリング(これはフィールド14内に記憶されているキャラクタである)が共有していない第1のキャラクタは、どのハッシュバケットが適用可能であるかを決めるために使用される。第3のキャラクタが“a”である場合、リーフ節点ノード5bに参照が成される。他方、第3のキャラクタが“d”である場合、参照は、リーフ節点ノード5cになされる。
【0075】
初期設定
ライブラリィは初期設定プロセスを介してユーザにより供給されるメモリエリア内に初期設定される。初期設定が完了完結すると、初期設定されたFIインデクスに対するハンドルがリターンされる。ユーザは、供給されたメモリバッファを参照すべくアイキャッチャ(eyecatcher)として知られている識別子ストリングを規定し得る。このことにより、マルチプロセスアプリケーションにおける1度での初期設定が保証され、ここでバッファは、通常共通メモリ内に常駐する。次の入力及び出力パラメータは、クリエイト動作に置いて使用され、この動作は、初期設定の有利な実施例態様である。
【0076】
入力パラメータは、<buffer>、<ident>、<maxIndex>、<maxKeys>、<maxKeyLen>、及び<wildcardCn>を含む。<buffer>パラメータは、FI管理のためにユーザにより供給される順次メモリエリアである。<buffer>はまた、マルチプロセスアプリケーションに対する共有のメモリアドレスであり得る。<ident>パラメータはFIインスタンスを特有―意的に識別するアイキャッチャ(eyecatcher>であり、マルチスレッドアプリケーションにおける多重初期設定を阻止するため使用される。<maxIndex>パラメータは、独立にハンドルし得る個別インデックスの最大数を与える。<maxKeys>パラメータは、インデックスにエントリ(キーストリング)の最大数を与え、すべての個別のインデックスの非繰り返し和である。<maxKeyLen>パラメータは、すべてのインデックスにおいて、キーストリングに対して、バイトで、最大キーストリング長さを与える。<wildcardCh>パラメータは、パーシャルマッチング探索に対するワイルドカードとして使用されるキャラクタを含む。
【0077】
出力パラメータ<handlle>は、新たにクリエイト(生成)されるFIインスタンスであり、後続のFIライブラリィコールに対するハンドル(参照)として使用される。
【0078】
初期設定プロセスは、いくつかの目的を達成する。1つの目的は、メモリにおけるFI管理構造を初期設定することである。もう1つの目的は任意の多重の初期設定を検出ためアイキャッチャを提供することである(マルチプロセス及び/又は、マルチスレッド環境における一度での初期設定を確保するため)。また、初期設定プロセスは、固定サイズの高速LIFO(lastin、 first out)に基づくメモリマネージメントを初期化し、実質的に一定時間でインデクスツリーノード割当てをアロケートし、フリー解放するものである。更に、内部ノードスタックが初期設定され、その結果パーシャルマッチング問い合わせにてインデクスツリーを再帰的にサーチする際ハッシュフラグポイントを記憶し得る。
【0079】
インデクスオブジェクトのオープニング
多重インデクスは同時にデータの同じセット上にオープンされ得、この同じセットにより、インデックスが同時に使用され得る。OPEN Operationは、CREATE Operation により先に初期設定されたグローバルなFIインスタンス内に1つの新たな空のインデクスオブジェクトをクリエイト生成する。次の入力及び出力パラメータは、OPEN Operation の有利な実施例において使用される。
【0080】
入力パラメータは<fiHd>、<IdxId>、及び<maxKeyLen>を含む。<fiHd> parameterは、グローバルfiインスタンス(CREATE Operationによりターンされる)。<IdxId>は、オープンされつつあるインデクスを特有一義的に識別するアイキャッチャであり、メモリを共有するマルチプロセスアプリケーションにおける多重初期設定を阻止するために使用される。<maxKeyLen>パラメータは、インデクス中に置かれるべきキーストリングに対してバイトにて、最大のキーストリングを与えるものであり、CREATE operationにおける<maxKeyLen>の値に等しいか、又はそれにより小である。
【0081】
出力パラメータ<handle>は、新たにクリエイト生成されるインデクスオブジェクトに対する参照であり、後続のインデクス動作に対するハンドル処理である。
【0082】
INSERT Operation
INSERT Operationは、指定されたキーストリングを指定されたインデクスオブジェクト中に挿入する。前述のように、ユーザにより供給されるデータは、インデクスにおける各キーストリングに関連付けられる。
【0083】
1つのキーストリングが1つのインデクス中に挿入される度ごとに、1つの新たなFIキーオブジェクト(すなわちインデクスツリーのリーフ)が内部的に生成され、そして、キーに対するハンドルがコールする者、コーラー(caller)にリターンされる。該ハンドルは、インデクスツリー内でキーエントリを参照するため使用され得る(例えば REMOVE Operationのため)。キーストリング自体は、インデクスメモリ内に記憶されない。むしろ、FIは、ユーザにより供給される参照を介してストリングを参照する。
【0084】
有利な実施例では、挿入すべきストリングはOPEN Operationにより指定された少なくとも<maxKeyLen>の長さを有し、ストリング終端キャラクタを有しない。この実施例では、<maxKeyLen>より短いストリングは、右側が空白文字キャラクタでパディングされるべきである。
【0085】
留意すべきことには、ストリング終端キャラクタ及び/又はワイルドカードを使用する本発明の実施例は、任意の2進データを含むキーストリングのインデクシングを複雑化し得る。現在公知の技術(代替選択的オルタナティブ、フォーマットにおける2進データのコーディング又はキーストリングの長さを指定する各キーストリングフィールドをもっての<KeyLen>の蓄積)がそのような複雑性を克服するため使用され得る。
【0086】
有利な実施例では、INSERT Operation を、ワイルドカードキャラクタを含むストリング上に使用し得、その結果キーセット全体を単一の挿入オペレーション動作によりロジカルに記憶し得る。例えば“*”がワイルドカードであり、動作オペレーション INSERT(“bcd**”)にFIND(“bcdef”)及びFIND(“bcdgh”)が続くものと仮定すると、(FIND Operationは以下詳述する)、両問い合わせにより、“bcd**”が与えられる。こうして、FIのワイルドカードを衝突検出目的のため(例えば、データベースのロジカルロックマネージメント)のため使用し得る。次の入力、出力パラメータは、INSERT Operation の有利な実施例にて使用される。
【0087】
<idxHd>入力パラメータはアクセスされているインデクスオブジェクトのハンドルである。<KeyStr>入力パラメータは、インデクス中に挿入されるべきキーストリングに対するポインタである。<usrInfo>入力パラメータは、インデクス中に挿入されているキーストリングと関連付けたいとユーザが願うデータに対するポインタである。
【0088】
出力パラメータ<KeyHandle>は、新たに挿入されるキーオブジェクトに対する1つのハンドルである。
【0089】
INSERT operationの有利な実施例により実行されるステップは、フローチャート200に概略が示されており、これは、図2及び図2aに示されている。第1ステップは、メモリ内での1つの新たなリーフノードブロックのアロケーション202である。次に参照204は、<t>を、入力パラメータ<idxHd>により参照されるインデクスツリーの根ルートにすることによりなされる。
【0090】
判定206は、インデクスがルートにて空であるか否かを判定する。YESの場合、<newKey>のレジストレーション208がインデクスツリーの新たなルート根としてなされ、オペレーション動作は、出力パラメータ<KeyHandle>として、アプリケーション202にてアロケート割り当てされた新たなリーフノードブロックに対する参照のリターン284へ進む。
【0091】
他方では、デシジョン206にてインデクスが根にて空でないことが判明した場合、判定210は、1つのリーフノードに到達したか否かを判定する。YESの場合には、判定218が実行される。他方ではNOの場合には、ルックアップ212過程が、第1のposキャラクタ(上述のようにposは現在ノード節点に対するキャラクタ比較位置を表す)の後直ちにキーストリング<KeyStr>キャラクタに相応するエントリに対する現在ノード節点のローカル後継者ハッシュ表にて実行され、1つの相応のエントリがルックアップ212にて見出された場合、現在ノード節点としてそのエントリにて参照されたノード節点のアサインメント216過程が生起する(すなわち、参照されたノード節点が現在ノード節点となる)。他方では、ルックアップ212のプロセス中にて相応のエントリが見出されない場合、現在ノード節点として第1の後継者ノード節点(succFirst フィールドから取られた)のアサインメント214過程が生起する。いずれのケースにおいても、次いで現在ノード節点が判定210へ与えられる。
【0092】
判定218は、キーストリング<Key Str>に一致する1つのキーストリングが既に現在ノード節点にて存在しているか否かを判定するため実行される。そのようなキーストリングに既に存在する場合、挿入過程が生起せず、そして、INSERT Operation の終端ターミネーション220過程がエラー条件と共に生起する。同一のキーストリングが既に存在しない場合には、比較222は、現在ノードに関連するキーストリング及びキーストリング<KeyStr>により共有されるサブストリングの長さ<j>を決定するため実行される。次いで、現在ノード節点からスタートして、ツリーのトラバース走査224過程が、それぞれのノード節点の親ノード節点をポイントするリンクをたどることにより上方に向かって生起進行していって、ついには、ノード<t>に到達するようになり、このノード節点<t>のキャラクタ比較位置posは、サブストリング長さ<j>に等しい、又は、それより小である。このノード節点に到達すると、外部又は内部ツリー挿入を実行すべきかの判定230が、図2aに示すように実行される。
【0093】
判定232及び234により、ノード<t>が空であるか、又は<t>の比較位置posが<j>に等しいことが判定された場合、内部ツリー挿入240が実行される。これに反し<t>が空でなく、そして、<t>の比較位置が<j>に等しくない場合、内部ツリー挿入インサート260が実行される。
【0094】
外部ツリー挿入240は、次のステップを含む。新たなノード節点の親ノード節点<t>のレジストレーション242過程ステップが実行される。新たなノード節点(これは、アロケーション202においてアロケートされた新たなリーフノード節点ブロックである)へのポインタの挿入244は、適当なキーストリングキャラクタのもとで<t>のローカル後継者ハッシュ表にて実行され、そして、任意の悪影響を受けたフィールドが更新される(例えば、hashNext フィールド又は、実施例で使用される場合には、hashPrev フィールド)。<t>の後継者ノード節点の2重にリンクされたサイブリングリスト内への新たなノード節点の挿入246もまた、適当なsblNext及びsblPrev フィールドを更新することにより実行される。判定248は、ノード節点<t>の比較位置がワイルドカードキャラクタであるか否かを判定するため実行される。YESの場合<t>のワイルドカードフラグ(実施例中に存在するならば)がセットされる。
【0095】
内部ツリー挿入260は次のステップを含む。新たなノード節点ブロックのアロケーション262が実行される。次に、新たなリーフ節点ブロック(これはアロケーション202にてアロケートされたものである)へのポインタの挿入264が第2の新たなノード節点ブロックのローカルサクセッサ後継者ハッシュ表にて実行される。判定266は、ノード<t>がNULL参照であるか否か判定するため実行される。YESの場合は、インデクスツリーの新たな根としての第2の新たなノード節点ブロックのレジストレーションが実行される。判定266の結果如何に係わらず、第2の新たなノード節点ブロックの、それの親のローカル後継者ハッシュ表内への挿入270が実行される。内部ツリー挿入260は第2の新たなノード節点ブロックの、それの親の後継者ノード節点の2重にリンクされたサイブリングリスト内への挿入272をもって終了する。挿入272もまた、適当なsblNext及びsb1 Prevフィールドを更新する。
【0096】
出力ツリー挿入240又は、入力ツリー挿入260過程が実行されるかに係わりなく、次のステップは、親ノード節点の後継者カウンタのインクリメント280である。それに引き続いて、親ノードのワイルドカードフラグのセッティング282は、1つのワイルドカードがそれの後継者ノード節点間にある場合には実行される。アロケーション202にてアロケーション割当られた新たなリーフノード節点への参照のリターン284が出力パラメータ<KeyHandle> として実行される。
【0097】
上述のようなフローチャート200に対する上述のステップにより示されているように、高速LIFOメモリマネージャの使用により、従来のメモリマネージメントに対する改良がクリエイト創出される。従来のメモリマネージメントの実行時間が、概して、少なくとも最悪のケースにおいて、アロケーション割当られたメモリブロックの総数に依存する。多数のエントリが存在する状況では、従来方法は禁止的に低速である。LIFOメモリマネージャは、示されているように、ツリーノード節点の固定サイズを利用し、これによりツリーノード節点がフリー、自由なエントリのスタック上に置かれ得る。スタック上に自由なフリーノードを、プッシュすること、又はアロケートされたノードをスタックから除去することが単一のスタックオペレーション動作に含まれるので、LIFOメモリマネージメントの実行時間がアロケーション割当られたノード節点の数に無関係である。
【0098】
INSERT Operationの事例
次いでINSERT Operation の1例の概略を説明する。図3及び図4に関連して述べると、そこに示されたINSERT (“cedg”)Operation の1事例がインデクスツリー302上で実行され、このインデクスツリーは、インデクスツリー2と同じようにスタートする。FIは、新たなキーストリングに対する挿入の場所を見出すためインデクスツリー302をトラバース走査する。FIは、根ノード節点4でスタートし、この根ノード節点4のposフィールド331は、最初の第1の零キャラクタが、根ノード節点4から発するサブツリー内に含まれているすべてのキーストリングに対して同一である(すなわち、第1のキャラクタのどれもが同一でない)ことを指示する。こうして、挿入すべきストリングの第1キャラクタが“c”であるので、FIハッシュ表配列340内でハッシュバケット341をルックアップする。FIは内部ノード節点8への“c”ブランチ参照350過程を引き続いて行う。更に留意すべきことには、挿入ストリングが第1のキャラクタとして“g”を有するならば、ハッシュ衝突が生じることとなり(それというのは、“c”と“g”の双方がハッシュバケット341を占めることとなるからである)、そして、hasNext フィールド19に含まれるリーフノード節点5dへの参照リンクをたどることとなるからである。
【0099】
内部ノード節点8にて、posフィールド11は、キャラクタ比較位置posが2であることを指示する。こうして、挿入すべきストリングの第3のキャラクタ、すなわち、“d”が考慮され、FIはハッシュ表配列18にてハッシュバケット18dをルックアップする、FIはリーフノード節点5cへの“d”ブランチ360過程を実行する。
【0100】
次いで、FIは、次のようなノードを見出すまでツリーインデックス302を再びバックアップ方向にトラバース走査する、すなわち、その比較位置posが、サブストリングの長さに等しいか、それより、小であるノードを見出すまでトラバース走査するものであり、当該のサブストリングは、“cedg”がリーフノード5cに関連付けられたキーストリング(すなわち、“cddh”)と共有するのである。結論付けられることは、FIは、そこにてposが1に等しいか、それより小であるposフィールドを探す。FIが親ノード節点リンク370及び380を通してそれの上向きのトラバース走査上にて見出す、当該の基準を充足する第1のposフィールドは、posフィールド331であり、このposフィールドは、根ノード節点4の1つのフィールドであり得る。ノード節点が空でなく(上記の判定232)そして、posフィールド331が1に等しくない(上記の判定234)ので、内部ツリー挿入260は、実行される必要がある。
【0101】
図4は、内部ツリー挿入260の実行の際のインデクスツリー402へのインデクスツリー302の変換を示す。第1に2つの新たなノード節点である、新たな内部ノード節点408及び新たなリーフノード節点405がFIのLIFOメモリマネージャ(LIFO―MM)440からアロケーション割当られる。新たな内部ノード節点408がノード節点4の“c”ブランチ参照350の後継者として挿入される。古い“c”ブランチのサクセッサ継承者−これは内部ノード節点8であるーは今や新たな内部ノード節点408の“d”ブランチ参照450のサクセッサ継承者になる。更に新たにリーフノード405は、新たな内部ノード節点408の“e”ブランチとなる。
【0102】
REMOVE Operation
INSERT Operationは、関連付けられたノード節点をリムーブ除去することにより、INSERT Operation により先に挿入された1つの所定のインデクスエントリをリムーブ除去するものである。リムーブ除去すべきインデクスエントリは、INSERT Operation又はFIND Operationによりリターンされるような、それの相応のキーハンドルにより指定される。
【0103】
次の入力パラメータはINSERT Operation又はFIND Operationの有利な実施例において使用される。<idxHd>入力パラメータは、そこからインデクスエントリを除去すべきインデクスオブジェクトのハンドル処理である。(KeyHandle>入力パラメータは、除去すべきインデクスエントリ(又はノード節点)に対するハンドルである。
【0104】
図5に関連して述べると、REMOVE Operation の有利な実施例により実行されるステップは、フローチャート500に概略が示されている。第1のステップは、除去すべきノード節点が、親ノード節点を有するか否かを判定することである。NOの場合には、NULL参照へのインデクスツリーの根のセッティング506過程が実行され、その後、除去されたツリーノード節点に属するメモリブロック8のフリー解放550が実行される。他方では、ノード節点が1つの親ノード節点が有する場合、親ノード節点に対する当該ノード節点への参照を除くステップ508(親ノード節点のsuccFirst フィールドもまたモデファイし得る)が実行される。更に、親ノード節点の後継者ノード節点の2重連結されたサイブリングリストからのノード節点の除去510が適当なsblNext sblPrev フィールドを更新することにより実行される。次に親ノード節点のサクセッサ後継者カウンタのデクリメント512が実行される。このポイントにて、インデクスツリー中には除去されたノード節点への参照がもはや無い。しかしながら、REMOVE Operation は、インデクスツリーをモデファイする必要が起こり得る。
【0105】
判定520は、親ノード節点が1つより多くの後継者ノード節点を左に有するかを判定する。YESの場合には、除去されたノード節点の比較キャラクタがワイルドカードであったか否かを判定する。他方では親ノード節点が唯一の後継者ノード節点のみを左に有する場合には、親ノード節点は、ブランチングポイントとしてもはや使いものにならず、判定522は、グランドペアレント(すなわち、除去されたノード節点のグランドペアレント、また、親ノード節点の親)が存在するか否かを判定する。グランドペアレントノード節点が存在しない場合、インデクスツリーの新しい根のアサインメント割当524が除去されたノード節点の唯一のサイブリングに与えられ、その後、除去されたノード節点の唯一のサイブリングの比較キャラクタがワイルドカードであったか否かの判定540が実行される。他方では、グランドペアレントが存在する場合には、グランドペアレントノードハッシュ表からの親ノードの連結分離521が実行される。次に除去されたノード節点の唯一のサイブリングへの参照の挿入528がグランドペアレントにて実行される。親ノード節点の除去530が実行される。グランドペアレントは今や新たな親ノードとなる。
【0106】
判定540は、除去されたノード節点の比較キャラクタがワイルドカードであったか否かを判定する。YESの場合、ワイルドカードフラグの削除542が親ノード節点にて実行される。除去されたノード節点の比較vrkがワイルドカードであったか否かに拘わらず、REMOVE Operation は、除去されたツリーノード節点に属するメモリブロックのフリー解放550で終了する。
【0107】
フローチャート500で上述のステップで示されているように、ノード節点へのリンクの除去(2重リンクされたサイブリングリストからのノード節点の除去510のような)によりメモリブロックのフリー解放552が生ぜしめられる。従来のシングルリンク、単一連結されたリストが使用された場合には1つのノード節点を除くには、除去すべきノード節点が見出されるまでにサイブリングリストを直線的にサーチすることが必要となる。このことにより、REMOVE Operationの実行時間に対して直線的成分が生成されることとなる。最悪の場合には、サイブリングリスト全体をサーチしなければならなくなる。しかしながら、2重に連結されたサイブリングリストは、LIFOメモリと相俟って、いずれの直線的リストスキャニングなしでもノードの削除をサポートし、それにより全体的性能を改善する。
【0108】
REMOVE Operation の事例
次にREMOVE Operationの1事例の概略を説明する。図6及び図7について説明すると、REMOVE(“cdaf”) Operationの1事例がインデクスツリー602上へ実行され、これはインデクスツリー2と同じようにスタートする。先ず、仮定されていることによれば、ユーザは、除去すべきリーフノード節点(事例中のリーフノード節点5b)を識別する必要なキーハンドル<KeyHandle>を供給する。リーフノード5bは、先ず、内部ノード節点8から除去される。内部ノード節点は、今や唯一の後継者ノード節点(すなわち、リーフノード節点5c)を有するので、内部ノード節点は、ブランチングポイントとしてもはや使用されなくなり、除去する必要がある。従って、内部ノード節点8及び根ノード節点4の“c”のブランチ参照350が除去される。フリー解放ノード、リーフノード節点5b及び内部ノード節点8は、LIFO―MM440にリターンされる。
【0109】
図7に関連して述べると、インデクスツリー702は、古いリーフノード節点5cから変換された、新たなリーフノード節点710を有する。根ノード節点4の“c”ブランチ参照350は、リーフノード710への“c”ブランチ参照750により置換される。リーフノード710は、リーフノード5a及び5dを有する2重リンクされたサイブリングリスト760を継承インヘリタンスする。リーフノード710の HashNext フィールド720は、hashNext フィールド19のコンテンツを継承インヘリタンスする。
【0110】
FIND Operation(Exact Match)(精確なマッチン グ)
FIND Operation(Exact Match)の精確なマッチングーバージョンは、サーチキーストリングを精確にマッチングするエントリに対する指定されたインデクスをサーチする。パーシャルマッチング問い合わせと異なって、ワイルドカードキャラクタは、精確なサーチにおいて特別な意味を有しない。せいぜい、1つのインデクスエントリは、サーチストリングをマッチングする。当該のオペレーション動作が成功を収めて完結すると、マッチングインデクスエントリのKeyHandleがリターンされる。次の入力、出力パラメータは、FIND OperationのExact Match version の精確なマッチングーバージョンの有利な実施例において使用される。
【0111】
<idxHd>入力パラメータは、サーチすべきインデクスオブジェクトのハンドルである。<KeyStr>入力パラメータは、インデクスに対してサーチされているキーストリングに対するポインタである。<KeyHandle>出力パラメータは、マッチングインデクスエントリに対するハンドルである。
【0112】
図8について述べれば、 FIND Operation(Exact Match)の精確なマッチングーバージョンの有利な実施例により実行されるステップは、フローチャート800に概略が示されている。第1のステップは、サーチされているインデクスツリーの根ノード節点への参照802である。
【0113】
次に、判定804は、現在ノードが内部ノードであるか否かを判定する。NOの場合には、完結したストリング比較820が、サーチキーストリングと、現在ノードに関連したキーストリングとの間で実行される。現在ノードが内部ノードである場合には、ノードのキャラクタ比較位置にてサーチキーストリングキャラクタの考慮検討806がなされる。次のノードへのポインタの検索808が、現在ノードの後継者ハッシュ表を使用することにより実施される。次に新たな現在ノードとなるべき次のノードのアサインメント割当810が実行される。判定804は、新たな現在ノードに対して実行される。
【0114】
サーチキーストリングと、現在ノードに関連したキーストリングとの間で完結したストリング比較820が実行される。 ストリングが同一でない場合、サーチの終端ターミネーション822が実行され、エラーコンディションが立てられる。他方では、ストリングが同一である場合、インデクスエントリに対するハンドルとして現在リーフノードへの参照のリターン824が実行される。
【0115】
FIND Operation(Partial Match)
FIND Operation(Partial Match)を、すべてのインデクスエントリのセットに対して反復的に、ワイルドカードキャラクタを有する1つの指定されたサーチストリングマッチングをスキャンするため使用し得る(本発明の有利な実施例ではワイルドカードキャラクタは略称では“*”である。例えば、オペレーション動作Operation INSERT(“abadc”)、INSERT(abbcd“)、INSERT(”ba*dc)、INSERT(“ba*dd)、INSERT(“badac”)、INSERT(“badbc”)、及びINSERT(“d*a**”)の条件下で、パーシャルマッチング問い合わせ検出partial match query FIND(“*b*cd”)により“abbcd”及び“d*a**”が与えられる。それというのは、ストリングエントリの第1,第2キャラクタは、当該の特定の目的に重要でないからである。次の入力、出力パラメータがFINDOperationのパーシャルマッチングバージョン partial match version の有利な実施例において使用される。
【0116】
入力パラメータは<idxHd>、<KeyStr>、<maxResults>及び<resultsBuffer>を含む。<idxHd>パラメータは、サーチすべきインデクシングオブジェクトのハンドルである。<KeyStr>パラメータは、インデクスにてサーチされているキーストリングに対するポインタである。<maxResults>パラメータはFIND Operationの繰り返しごとにリターンされるべきキーハンドルの最大数である。<resultBuffer>は結果バッファに対するポインタであり、これは、<maxResulte>エントリまでホールドするのに十分な大きさのキーハンドルの配列である。
【0117】
出力パラメータは<actResults>及び<moreResults>を含む<actResults>パラメータは、結果バッファにおいてリターンされるキーの実際の数をリターンする。<moreResults>パラメータ、また、サーチコントロールパラメータとも称され、<maxNumber>結果より多くのものがあったか否かを指示するためのフラグとして用いられる。
【0118】
partial Match FIND Operationの有利な実施例により実行されるステップがフローチャート900にて概略が示されており、これは図9及び図9aに示されている。第1のステップは、これがFIND Operationのコール(call)であるか否かを判定するための判定904である。YESの場合、インデクスツリーの根節点ノードへのローカルバックトラッキングスタックポインタ<sp>のリセット906が実行される。他方、NOの場合、FIND Operation の先行コール呼出から先にセーブされたスタックポインタのリロード908が実行される。FIND Operation の最初のコールであっても、なくても、次のステップは、バックトラッキングスタックが空であるか否かを判定すること910である。YESの場合、FIND Operation は、結果バッファのリターン994で終わる。他方では、否定の場合は、現在スタックトップからのツリーノード<t>の検索911が実行される。次いで<t>がリーフノードであるか否かを判定する判定912が実行される。YESである場合、リーフノード解析920が実行される。他方NOの場合、内部ノード解析950が実行される。
【0119】
リーフノード解析920は、サーチキーストリング及びリーフノードに関連するキーストリングが同じであるかを判定する比較922及びワイルドカードが考慮される際サーチキーストリング及びリーフノードに関連するキーストリングが同じであるか否かを判定する比較928からスタートする。2つのストリングが同じであるか、又はワイルドカードとマッチングする場合、リーフノードに関連するインデクスエントリの結果バッファへの加算930が、実行される(すなわち、インデクスエントリが結果バッファに加えられる)。ストリングが同じであるか、又はマッチングをしているかに拘わらず、サーチキーストリング及びリーフストリングに関連するキーストリングが相異なる場合にてワイルドカードでない第1キャラクタ位置であるべきとき現在キャラクタ位置のアサインメント931が実行される。リーフノード解析920は、バックトラックスタックの枝刈り932で終わる。バックトラックスタックの枝刈り932は反復的に次のことをチェック933すること及び除去934により実行され、すなわち、(a)スタックが空でないか否か、そして(b)親ノードのキャラクタ比較位置<pos>がキャラクタ比較位置<j>より大であるか否かのチェック933により実行され、そのことは、そして、それ等の2つの条件のうちの少なくとも1つがもはや充足されなくなるまでバックトラックスタックからのノードの除去934が実行されるのである。リーフノード解析920が終わった後、判定910が再び実行される。
【0120】
内部ノード解析950は、現在ノードのキャラクタ比較位置にて<ch>をサーチキーストリングキャラクタであるとのアサインメント952をもってスタートする。ワイルドカード チェック954は、<ch>がワイルドカードキャラクタであるか否かを判定する。YESの場合、ワイルドカードは、バックトラックスタック上へのすべての後継者ノードのプッシュ970で終わる。プッシュ970は<t>の後継者リスト内のサイブリングーリンク過程をたどることにより、当該タスクを成し遂げ、このことの意味することは、<t>から下降するサブツリー全体が更なるサーチに対してマーキングされるということである。他方で、<ch>がワイルドカードキャラクタでない場合は、ハッシュ表のルックアップ955が実行される。ルックアップ955は、<ch>に関連する後継者ノード(又は、代替選択的に<ch>に関連する後継者ノードが存在しない場合は、第1の後継者ノード)を見出し、ノードをバックトラックスタック上にプッシュする。次に、判定956は、<t>がそれの後継者ノード内にワイルドカードを有しているか否かを判定する。<t>がワイルドカードを有していない場合には、内部ノード解析950は終了する。他方<t>がワイルドカードを有している場合には内部ノード解析950はバックトラックスタック上へのワイルドカードノードのプッシュ958で終わる。内部ノード解析950が終わった後、判定910が再び実行される。
【0121】
FIND Operation ( partial Match ) の事例
次にPartial Match FIND Operationの1事例の概略を説明する。図10に関して述べると、FIND(“*b*cd”)operation がインデクスツリー1002上にて実行される様子が示されている。インデクスツリー1002は、ノード1010,1020,1030,1040,1050,1060,1070,1080,1090,1100,及び1120を比較する。ノード1010は、インデクスツリー1002の根ノードである;従って、キャラクタ比較位置pos零を有する。内部ノード1020はpos2及びキャラクタ“a”を有する;内部ノード1030はpos2及びキャラクタ“b”を有する;内部ノード1070はpos4及び比較キャラクタ“*”(ワイルドカードキャラクタ)を有する。内部ノード1080はpos3及びキャラクタ“d”を有する。リーフノード1040は、ノード1010の後継者ノードであり、キーストリング“d*a**”に関連付けられている。リーフノード1050及び1060は、ノード1020の後継者ノードであり、それぞれキーストリング“abadc”及び“abbcd”に関連付けられている。リーフノード1090及び1100はノード1070の後継者ノードであり、キーストリング“ba*dc”及び“ba*dd”に関連付けられている。リーフノード1110及び1120はノード1080の後継者ノードであり、それぞれキーストリング“badac”及び“badbc”に関連付けられている。
【0122】
FIは、インデクスツリー1002の根ノード1010におけるサーチをスタートする。posは、ノード1010に対して零であるのでFIは、サーチキーストリング“*b*cd”の第1のキャラクタに注目する。これはワイルドカードキャラクタであり、而して、FIは、ノード1010の各々の後継者ノード(すなわちノード1020,1030,及び1040)をバックトラッキングスタック上へプッシュする。留意すべきことには、バックトラッキングスタックは、トップ(最初)からボトム(最後)へ向かって、ノード1020,1030,及び1040を有する。バックトラッキングスタックにおける第1のノード、ノード1020は、トップからポップされる。ノード1020はpos2を有するので、サーチキーストリングの第3キャラクタが評価される。これは、再度ワイルドカードキャラクタであり、而して、FIは、ノード1020の各後継者ノード(則ちノード1050,1060)をバックトラックスタック上へプッシュする。バックトラックスタックは今やトップからボトムへ向かってノード1050,1060,1030,及び1040を有する。
【0123】
次いでノード1050はバックトラックスタックのトップからポップされる。これはリーフノードであるので、FIは、第1の非ワイルドカードキャラクタ位置<j>を判定し、ここでは、サーチキーストリングはノード1050に関連付けられたキーストリングとは相異なる。キーストリング“*b*cd”及び“abadc”は、第4のキャラクタにて差異があり(それ等は最初の3つのキャラクタに対してマッチングし、<j>は3であるから)、そしてノード1050は、ミスマッチとして破棄される。ノード1060は、バックトラックスタックのトップからポップされる。これもまた、リーフノードであり、FIは第1の非ワイルドカードキャラクタ位置<j>を求め、ここで、サーチキーは、ノード1060に関連付けられたキーストリングとは異なる。しかしながら、“*b*cd”及び“abbcd”はマッチングし、而して、ノード1060に関連するキーエントリが結果バッファへの第1の加算になる。
【0124】
FIは、バックトラックスタックにおいてなおスタックがあることを判定し、しかして、次のノード、ノード1030はトップからポップされる。ノード1030は、pos2を有する内部ノードになり、而して、サーチキーストリングの第3キャラクタが評価される。これはまた、ワイルドカードであり、而して、FIはノード1030の各後継者ノード(則ち、ノード1070及び1080)をバックトラックスタック上へプッシュする。バックトラックスタックは、今やトップからボトムへ向かってノード1070,1080,1030,及び1040を有する。
【0125】
バックトラッキングスタックにおいて、なおノードがあり、而して、ノード1070は、トップからポップされる。ノード1070はpos4を有する内部ノードであり、而してサーチキーストリングの第5キャラクタが評価される。この位置におけるキャラクタは“d”であり、而して、ノード1070の“d”ブランチ1072は、ノード1100へ向けられる(プロセスにおけるノード1090破棄)。
【0126】
ノード1100はリーフノードであり、而して、FIは、第1の非ワイルドカードキャラクタ位置<j>を判定し、ここで、サーチキーストリングは、ノード1050に関連するキーストリングとは異なる。キーストリング“*b*cd”及び“ba*dd”は、第2のキャラクタにて相違なり、(それというのは、それ等は第1のキャラクタに対してマッチングするから<j>は1である)そしてノード1100はミスマッチとして破棄される。このポイントにおいてこそ発見的ヒューリスティックな枝刈り(pruning)が付加的なサブツリー全体を破棄するため使用される。キーストリングがリーフノード1100とは異なるー<j>が1に等しい時―場合には、それの親ノードのposが1より大である他のいずれのノードとも異ならなければならないということは、FIツリーの性質、特性である。この性質、特性は、次のことに由来、導出される、すなわち、サブツリーに関連するすべてのキーストリングが、サブツリーの根における内部ノードのposに等しい長さを有するプレフィックスを共有することに由来、導出される。従って、ノード1030は、pos2を有するので、バックトラッキングスタック内になお存在するサブツリー中のすべてのノード(すなわちノード1070及び1080)が破棄され得、それによりインデクスツリーが枝刈り(pruning)される。
【0127】
バックトラッキングスタックにおいてなお残っている唯一のノード、ノード1040が、ポップされる。これはリーフノードであり、FIは、第1の非ワイルドカードキャラクタ位置<j>を求め、ここで、サーチキーは、ノード1040に関連するキーストリングとは異なる。しかしながら、“*b*cd”及び“d*c**”はマッチングし、而してノード1040に関連するキーエントリは、結果バッファに加算される。考慮すべきノードはもはやなく、そして、結果スタックがリターンされる。
【0128】
図11にはロジカルロックマネージメントを実行するためのFIメソッドを有利に利用する事例が表されている。FIメソッドを、ヒューマンリソースマネージメント、ファイナンシャルズ、ロジスティックス、ビジネスワークフロー、組織マネージメント、及び他のシステムにおけるようなデータベースアプリケーションにおいて、衝突検出又は衝突マネージメントのため使用し得る。そのようなアプリケーションにおいて、多数のユーザ、例えば図11中ユーザ1〜6は、データベース1200にて記憶されているデータをアクセスする。ロジカルロックマネージメントは、いくつかのユーザがそこにてデータセットが変更訂正されるリクエスト又はオペレーションをもってデータベース中の同じデータセットへのアクセスするのを阻止するために実行され、前記のリクエスト又はオペレーション操作では、データセットは、例えば、書込又は削除により変更される。保証されなければならないのは、相次いでのユーザにより当該のデータセットの変更が所定の順序で実行されることである。
【0129】
このことを保証するためデータベース1200への複数ユーザのリクエスト間の衝突を検出するためロックマネージャ1201が確立される。図11例中、例えばユーザ1と6との間に衝突が起こる。明らかに、1つのデータベースのマルチユーザ環境の性能が、ロックマネージャ1201の性能に関してクリティカルである、それというのは、データベースのアクセス前に各ユーザのリクエストがロック衝突テストに合格しなければならないことに鑑みて、ロックマネージャ1201がシステム全体のスループットのボトルネックになり得るからである。本発明によれば、複数のストリングエントリを含めて、データベース1200をアクセスするいくつかのユーザの複数リクエストの衝突検出、又は衝突マネージメントの方法メソッド、例えば、ロックマネージメントを実行するための方法メソッドは、ユーザのリクエストを含めてダイナミックロックテーブル1201のメンテナンスを包含し、前記のダイナミックロックテーブル1201では、リクエストは、本発明により、例えばFIメソッドによりインデクシングされる。1つのユーザのリクエストに関連して、ロックテーブル1202への問い合わせが、ユーザのリクエストがデータベース1200に伝達される前に、例えば、FIにより、実行される。ロックマネージャ1201は、FIインデクシングされるロックテーブル1202を維持し、ここにはユーザによりリクエストされるロックが常駐する。
【0130】
例えば、ユーザ6のリクエスト“**5*”は、同じデータセットをアクセスするユーザの5つのリクエスト“CY5”の故に拒絶される。
【0131】
例えば、インデクシング“DXO”を有するデータセットへのユーザ1の書込リクエストがある場合、先ず、FIインデクシングされるロックテーブルへの挿入インサートオペレーション動作が実行され、それにより、インデクス“DXO”インサートが、FIサーチツリー内に挿入される。インサート動作オペレーションが成功を収めて実行され、インデクス“DXO”がサーチツリー中に挿入され得たならば、ユーザ1はデータベース1200における相応のデータセットへの書込アクセスを実行し得る。ところが、インサートオペレーション動作が、成功しなかった場合、インデクスーストリング“DKO”は既にFIサーチツリー内にリーフノードとして含まれ、このことはロックマネージャ1201により検出される。この場合において、衝突が指示され、データベース1200における関連するデータセットへのユーザ1の書込アクセスが否認される
データベース1200への成功を収めた書込アクセスが終了finishedされる場合、除去オペレーション動作は、FIロックテーブル1202において実行され、これにより、インデクシングされたストリング“DXO”を有するリーフツリーが削除される。その後、他のユーザは、データベース1200における相応のデータセットをアクセスし得る。
【0132】
単一の(すなわち、フルに指定された)データベーステーブルエントリ(例えば“AX3”)に対してのみならず、セット全体である(すなわち部分的パーシャルに指定された)エントリ(例えば、“B**”ここで“*”は基礎となるアルファベットの任意の文字であるワイルドカードを表す)に対してもロックを付与し得る。
【0133】
データベース1200へのすべてのリクエスト及びアクセスが単一のFIサーチツリー内にマッチングされることに鑑みて、ロックマネージャ1201のレスポンス及び性能がデータベース1200へのアクセスの総合的性能にとって重要である。ロックマネージャ1201がインデクシングされたロックテーブル1202を維持する場合、短いレスポンスタイム、ひいてはロックマネージャ1201の良好な性能が結果的に生じる。この点に関し、例えば、次の特徴事項は有利であり得る;サーチツリーはプレフィックスツリーとして構成され、ローカルハッシュ表が使用され、パーシャルにマッチングされたリクエストが実行され得ること、LIFOメモリマネージメントの性能、サーチ期間中の枝刈り(pruning)及び/又はバックトラッキングの実行である。
【0134】
本発明の利点は、ロックテーブル1201においてまた、部分的に指定されたストリング(例えば“ab*c”又は“*bc*”)をも記憶し得ることである。従って、FIロックテーブル1202内へのシングルインデクスインサートによりアクセスされるデータセットの部分をマッチングすることが可能である。直線的サーチ及びハッシングのような公知のサーチアルゴリズムにおいて必要なように、当該部分内に含まれる個々のデータセットをマークする必要がない。パーシャルに指定されたインデクスリクエストを実行し得る可能性により、FIサーチの上述の特徴及びそれに基づくサーチメソッドのほかにさらにFIロックテーブル1202における所要のサーチ時間が低減される。
【0135】
他のサーチメソッドとの比較
次に、どのように本発明のアクチュアルなインプリメンテーション、−“FI”と称されるーが上述の他のサーチメソッドに比較されるかを展望的に示す。表1は、Intel Pentium P180 machine 上にて1つの完全な INSERT/FIND/REMOVE cycle が実行される時間μs(マイクロ秒)を示す。この比較のためFIプログラム及び通常使用されるUNIXスタンダードストリングインデクシング及びサーチライブラリィは実世界データベース上でサイクルを実行した(ここで、エントリはサーチツリーでは均一に分布していない)。BTREE サーチは、UNIX/XPG4 tsearch(3C) Standard hash libraryを用いて実行された。一方 LINEAR search は、直線的2重連結されたリストバスリニアサーチで実行された。
【0136】
留意すべきことには高速ストリングメソッドに対する実行時間が、数10μsの大きさに留まる。―100万エントリにわたるサーチの場合でも―。
【0137】
また明らかになっていることは、高速ストリングメソッドはサーチすべきキーストリングの大きさに対する優れた性能及びロバストネスを提供する。表2は、種々の長さのキーストリングを含むデータベース上へのFI及びHASHがサーチを実行するため時間μsを示す。高速ストリングメソッドに対する実行時間は、キーストリングが数オーダの大きさ分も一層より大である場合でさえも、たんにわずかしか変化しない。
【0138】
本発明及び他のメソッドの特徴の要約を表3に示す。1つのセルにおけるプラス“+”は、サーチメソッドが指示された特徴に特に適する(又はロバストである)ことを指示する。
【0139】
本発明の実施例に適用された本発明の基本的な新規な特徴を示してあり、説明し、指摘してあるが、本発明の精神を逸脱することなく、ここに開示されたような、本発明の形態及び詳細上の種々の省略、過程及び変更がなされ得る。明示されているところによれば、同じ成果を達成するため、実質的に同じ手法で、同じ機能を実行する要素及び/又は方法ステップの一切の組合せは、本発明の範囲内に入る。従って、添付されたクレームの範囲により指示されているものは、そこに指示されたいくつかの限定的な態様に限って規定されているに過ぎない。
【0140】
【表1】
Figure 0003735683
【0141】
【表2】
Figure 0003735683
【0142】
【表3】
Figure 0003735683

【図面の簡単な説明】
【図1】 高速ストリングインデクシングのアプリケーションを具現化するインデクスツリーの基本的データ構造の例を示す概念図である。
【図2】 INSERT Operation の有利な実施例に対するフローチャートの図である。
【図2a】 INSERT Operation の有利な実施例に対するフローチャートの図である。
【図3】 実行されているINSERT Operationの1事例の第1半部の概念図である。
【図4】 実行されているINSERT Openationの1事例の第2半部の概念図である。
【図5】 REMOVE Operation の有利な実施例に対するフローチャートを表す図である。
【図6】 REMOVE Openation の1事例の第1半部に対するフローチャートを表す図である。
【図7】 実行されているREMOVE Openation の1事例の第2半部に対するフローチャートを表す図である。
【図8】 Exact Match FIND OperationのREMOVE Operation の有利な実施例に対するフローチャートを表す図である。
【図9】 Partial Match Find Operationの有利な実施例に対するフローチャートを表わす図である。
【図9a】 Partial Match Find Operationの有利な実施例に対するフローチャートを表わす図である。
【図10】 実行されているPartial Match Find Operationの事例を表す概略図である。
【図11】 FI indexed lock table を使用したロジカルロジックマネージメントを表す概念図である。
【符号の説明】
2 インデクスツリー
4 根ノード
5a リーフノード
5b リーフノード
6a キーストリングフィールド
6b キーストリングフィールド
6c キーストリングフィールド
6d キーストリングフィールド
7a 情報フィールド
7b 情報フィールド
7c 情報フィールド
7d 情報フィールド
8 内部ノード
10 親ノード
11 pos フィールド
12 succ フィールド
13 succFirst フィールド
14 ch フィールド
15 sblPrev フィールド
16 sblNext フィールド
17 ローカルサクセッサハッシュ表
18 ハッシュ表配列
18a ハッシュバケット
18b ハッシュバケット
18c ハッシュバケット
18d ハッシュバケット
19 hashNext フィールド
20 parent フィールド
21 pos フィールド
22 succ フィールド
24a ch フィールド
24b ch フィールド
24c ch フィールド
24d ch フィールド
25 splPrev フィールド
26 sblNext フィールド
27 キーフィールド
28 フィールド
200 フローチャート
202 アロケーション
204 参照
206 判定
208 レジストレーション
210 レジストレーション
212 ルックアップ
214 アサインメント
216 アサインメント
218 アサインメント
220 終端
222 比較
224 トラバース横断
230 判定
232 判定
234 判定
240 外部ツリー構成
242 レジストレーション
244 挿入
246 挿入
248 判定
260 内部ツリー挿入
262 アロケーション
264 挿入
266 判定
268 レジストレーション
270 挿入
272 挿入
280 インクリメント
282 セッティング
284 リターン
302 インデクスツリー
331 posフィールド
340 ハッシュ表配列
341 ハッシュバケット
350 参照
360 ブランチ
370 リンク
380 リンク
402 インデクスツリー
405 リーフノード
408 内部ノード
440 メモリマネージャ
460 参照
500 フローチャート
504 判定
506 セッティング
508 除去
510 除去
512 デクリメント
520 判定
522 判定
524 アサインメント割当
526 連結、解離
528 挿入
530 除去
540 判定
542 削除
550 フリー解放
602 インデクスツリー
702 インデクスツリー
710 リーフノード
720 hashNext フィールド
750 参照
760 リンク
800 フローチャート
802 参照
804 割当
806 考慮
808 検索
810 アサインメント
820 比較
822 終端
824 リターン
900 フローチャート
904 判定
906 リセット
908 リロード
910 判定
911 検索
912 検索
920 リーフノード解析
922 比較
928 比較
930 加算
931 アサインメント
932 枝刈り(pruning)
933 チェッキング
934 除去
950 内部ノード解析
952 アサインメント
954 ワイルドカード チェック
955 ルックアップ
970 プッシュ
1002 インデクスツリー
1012 ノード
1020 ノード
1030 ノード
1040 ノード
1050 ノード
1060 ノード
1070 ノード
1080 ノード
1090 ノード
1100 ノード
1110 ノード
1120 ノード
1200 データベース
1201 ロックマネージャ
1202 ロックテーブル

Claims (23)

  1. 探索ツリーを使用することにより複数のストリングエントリのインデクシングを行う方法であって、前記の複数のストリングエントリのうちの各1つが複数キャラクタの1つのストリングであるようにした当該のインデクシング方法において、前記探索ツリーは、連結リンクされた節点を有し、前記の連結された節点ノードは、1つの根節点(4)及び複数の内部節点ノード並びに複数のリーフ節点ノード(5a,5b,5c,5d)を有し、前記の内部節点ノードは、1つのキャラクタ又はキャラクタのサブストリングに関連付けられており、また前記のリーフ節点ノードは、前記の複数のストリングエントリに関連付けられており、ここで、前記の複数の内部節点ノードの各々は、更に、下記の要素(a)〜(e)を有し、すなわち
    (a) 親節点に対する参照を有し、ここで前記親節点ノードは、前記複数の内部ツリー節点ノードのうちの他の1つのもの又は、前記根節点ノード(4)であり、
    (b) キャラクタ比較位置を含む第1データフィールドを有し、前記キャラクタ比較位置は、前記キャラクタ又は、前記複数の内部節点ノードのうちの前記の1つに関連するキャラクタのサブストリングにおけるキャラクタの数を指示するものであり、
    (c) 比較キャラクタを含む第2データフィールドを有し、前記比較キャラクタは、前記キャラクタ又は、前記複数の内部節点ノードのうちの前記の1つに関連するキャラクタのサブストリングにおけるキャラクタが、前記キャラクタ比較位置に関連する前記ストリングエントリの1つのキャラクタ位置にて1つのストリングエントリ内に含まれているか否かを決定するため使用され、
    (d) 可変的な個数の少なくとも2つの後継者ノードへの参照を有し、
    (e) ツリーのトラバース走査の間に後継者ノードの中の高速ハッシュ探索を可能にするための相応の親節点ノードの後継者ノードへの参照を有するハッシュ表アレイ(18)を有し、さらに所定数のハッシュバケット(18a,18b,18c,18d)を有し、
    キャラクタのストリングは、アルファニューメトリックキャラクタの1つのストリングであり、前記の複数のエントリのうちの少なくとも1つが1つのワイルドカードキャラクタを有し、該ワイルドカードキャラクタはキャラクタのストリングの任意の可変的な位置に又は複数のストリングエントリのうちの少なくとも1つの任意の可変的な位置に位置決めされることを特徴とするインデクシング法。
  2. 前記の複数のストリングエントリの各々におけるキャラクタの数が同じである、請求項1記載の方法。
  3. 前記の複数の内部ノードのうちの少なくとも1つが、1つのキャラクタ比較位置を有する親節点ノードに対する参照を有し、前記のキャラクタ比較位置は前記複数の内部ノードのうちの少なくとも1つのキャラクタ比較位置より少なくとも2だけ少ないものである、請求項1又は2記載の方法。
  4. 前記複数の内部節点ノードの各々が1つのレベルに関連付けられ、更に、前記レベルにも関連付けられた前記の複数のリンク連結された節点ノードのうちの少なくとも1つの参照リンクを有する、請求項1から3までのうちいずれか1項記載の方法。
  5. 記参照リンクのうちの少なくともいくつかが2重リンク結合されたリストを形成するようにした、請求項4記載の方法。
  6. 前記探索ツリーの或1つの探索が、前記の複数の連結リンクされた節点ノードのうちの少なくともいくつかへの連結リンクを有する1つのスタックをマネージするための後入れ先出しメモリマネージャを利用する、請求項1からまでのうちいずれか1項記載の方法。
  7. 前記探索は、バックトラッキングを利用することを特徴とする請求項6記載の方法。
  8. 前記探索は、前記スタックの枝刈り(pruning)を含む、請求項又は記載の方法。
  9. 複数のストリングの中から、複数のキャラクタから成る所定のストリングを探索する方法であって、前記複数ストリングの各々が複数キャラクタの1つのストリングであるようにした当該の探索方法において、前記方法は、下記ステップを有する、すなわち、
    請求項1からまでのうちいずれか1項の方法により探索ツリーを生成するステップを有し、ここで、前記の複数のストリングは複数のストリングエントリを形成するものであり、
    前記の所定のストリングに関連する問い合わせを形成するステップと、
    前記の問い合わせを利用して前記探索ツリーをトラバース走査して前記の所定のストリングにマッチングする前記複数ストリングの任意のものに1つのインデックス索引を与えるステップを有することを特徴とする探索方法。
  10. 前記探索ツリーは、請求項2からまでのうちいずれか1項記載の方法により生成されるようにした、請求項記載の方法。
  11. 前記の所定のストリングは、複数のアルファニュートリックキャラクタ及び少なくとも1つのワイルドカードから成るようにした、請求項又は10記載の方法。
  12. 前記のトラバース走査プロセスは、前記の複数の連結リンクされた節点ノードのうち少なくともいくつかへの連結ノードを有する1つのスタックをマネージするための後入れ先出しメモリマネージャを利用する、請求項9から11までのうちいずれか1項記載の方法。
  13. 前記トラバース走査プロセスは、バックトラキングを利用する、請求項12記載の方法。
  14. 前記トラバース走査は、前記スタックの枝刈り(pruning)を利用するようにした、請求項12又は13記載の方法。
  15. 請求項9から14までのうちいずれか1項記載の、複数のストリングの中から、複数のキャラクタからなる所定のストリングを探索する方法において、探索ツリーを生成し、前記の所定のストリングに関連する問い合わせを形成するステップは、次の事項上へ実行される、すなわち、ヒューマンリソースマネージメント、ファイナンシャルズ、ロジスティックスビジネスワークフロー、人事マネージメント、組織マネージメント、ペイロールアカウンティング、タイムマネージメント、人事開発又はネットワーク、例えばインターネット又はイントラネット、システム、例えばR/3システム上へ実行される、請求項9から14までのうちいずれか1項記載の方法。
  16. 複数のインストラクションの記憶されているコンピュータによりリード可能な(computer―readable)媒体において、
    前記の複数のインストラクションは、プロセッサにより実行されると、前記プロセッサをして下記のステップを実行させるインストラクションを含む、すなわち、
    請求項の1からのうちいずれか1項記載の方法により、複数のストリングエントリのインデクシングをするステップを実行させるステップを有することを特徴とするコンピュータによりリード可能な媒体。
  17. 複数のインストラクションの記憶されているコンピュータによりリード可能な(computer―readable)媒体において、
    前記の複数のインストラクションは、プロセッサにより実行されると、前記プロセッサをして下記のステップを実行させるインストラクションを含む、すなわち、
    請求項の9から15のうちいずれか1項記載の方法により、所定のストリングの探索サーチを実行させるステップを有することを特徴とするコンピュータによりリード可能な媒体。
  18. 複数のストリングの中から、複数のキャラクタから成る1つの所定のストリングを探索するシステムであって、前記の複数のストリングの各々が、複数キャラクタの1つのストリングであるようにした当該の探索システムにおいて、
    前記探索システムは、下記要件を有し、すなわち、
    探索ツリーを生成する手段を有し、前記探索ツリーは、下記節点ノードを有し、すなわち、1つの根節点ノード(4)及び複数の内部節点ノード並びに、複数のリーフ節点ノード(5a,5b,5c,5d,)を有し、前記の内部節点ノードは、1つのキャラクタ又はキャラクタのサブストリングに関連付けられており、前記のリーフ節点ノード(5a,5b,5c,5d)はまた、前記のストリングエントリに関連付けられており、ここで、前記の複数の内部節点ノードの各々は、更に、下記の要素(a)〜(e)を有し、すなわち、
    (a) 親節点ノードに対する参照を有し、ここで前記親節点ノードは、前記複数の内部ツリー節点ノードのうちの他の1つのもの又は、前記根節点ノード(4)であり、
    (b) キャラクタ比較位置を含む第1のデータフィールドを有し、前記キャラクタ比較位置は、前記キャラクタ又は、前記複数の内部節点ノードのうちの前記の1つに関連するキャラクタのサブストリングにおけるキャラクタの数を指示するものであり、
    (c) 比較キャラクタを含む第2データフィールドを有し、前記比較キャラクタは、前記キャラクタ又は前記複数の内部節点ノードのうちの前記の1つに関連するキャラクタのサブストリングにおけるキャラクタが、前記キャラクタ比較位置に関連するストリングエントリの1つのキャラクタ位置にて1つのストリングエントリ内に含まれているか否かを決定するため使用され、
    (d) 可変的な個数の少なくとも2つの後継者ノードへの参照を有し、
    (e) ツリーのトラバース走査の間に後継者ノードの中の高速ハッシュ探索を可能にするための相応の親節点ノードの後継者ノードへの参照を有するハッシュ表アレイ(18)を有し、さらに所定数のハッシュバケット(18a,18b,18c,18d)を有し、
    キャラクタのストリングは、アルファニューメトリックキャラクタの1つのストリングであり、前記の複数のエントリのうちの少なくとも1つが1つのワイルドカードキャラクタを有し、該ワイルドカードキャラクタはキャラクタのストリングの任意の可変的な位置に又は複数のストリングエントリのうちの少なくとも1つの任意の可変的な位置に位置決めされ
    前記の1つの所定のストリングに関連付けられた問い合わせを提出するための手段を有し;
    前記の1つの所定のストリングにマッチングする前記の複数のストリングのうちの任意の1つにインデックスを提供するためのツリートラバース走査手段を有するようにした、複数のストリングの中から、複数のキャラクタから成る1つの所定のストリングを探索するシステム。
  19. 前記の複数のストリングエントリの各々におけるキャラクタの数が同じである、請求項18記載のシステム。
  20. 前記の複数の内部ノードのうちの少なくとも1つが、或1つのキャラクタ比較位置を有する親節点ノードに対する参照を有し、前記のキャラクタ比較位置は前記複数の内部ノードのうちの少なくとも1つのキャラクタ比較位置より少なくとも2だけ少ないものである、請求項18又は19記載のシステム。
  21. 前記複数の内部節点ノードの各々が1つのレベルに関連付けられ、更に、前記レベルにも関連付けられた前記の複数のリンク連結された節点ノードのうちの少なくとも1つの参照リンクを有する、請求項18から20までのうちいずれか1項記載のシステム。
  22. 前記の所定のストリングは複数のアルファニューメリックキャラクタ及び少なくとも1つのワイルドカードから成る、請求項18から21までのうちいずれか1項記載のシステム。
  23. イナミックロックテーブル(1202)を用いた衝突検出又は衝突マネージメントを有する、請求項18から22までのうちいずれか1項記載のシステム。
JP2000533833A 1998-02-26 1999-02-25 高速探索サーチ及びインデクシング法 Expired - Lifetime JP3735683B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/031,285 1998-02-26
US09/031,285 US6047283A (en) 1998-02-26 1998-02-26 Fast string searching and indexing using a search tree having a plurality of linked nodes
PCT/EP1999/001210 WO1999044151A1 (en) 1998-02-26 1999-02-25 Fast string searching and indexing

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2005178627A Division JP3947202B2 (ja) 1998-02-26 2005-06-17 複数のストリングエントリを含むデータベースをアクセスするいくつかのユーザのリクエストの衝突検出又は衝突マネージメントのための方法、とりわけ、ロックマネージメントのための方法

Publications (2)

Publication Number Publication Date
JP2002505481A JP2002505481A (ja) 2002-02-19
JP3735683B2 true JP3735683B2 (ja) 2006-01-18

Family

ID=21858597

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2000533833A Expired - Lifetime JP3735683B2 (ja) 1998-02-26 1999-02-25 高速探索サーチ及びインデクシング法
JP2005178627A Expired - Lifetime JP3947202B2 (ja) 1998-02-26 2005-06-17 複数のストリングエントリを含むデータベースをアクセスするいくつかのユーザのリクエストの衝突検出又は衝突マネージメントのための方法、とりわけ、ロックマネージメントのための方法

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2005178627A Expired - Lifetime JP3947202B2 (ja) 1998-02-26 2005-06-17 複数のストリングエントリを含むデータベースをアクセスするいくつかのユーザのリクエストの衝突検出又は衝突マネージメントのための方法、とりわけ、ロックマネージメントのための方法

Country Status (9)

Country Link
US (1) US6047283A (ja)
EP (1) EP1066570B1 (ja)
JP (2) JP3735683B2 (ja)
AT (1) ATE253242T1 (ja)
AU (1) AU762980B2 (ja)
CA (1) CA2316936C (ja)
DE (1) DE69912410T2 (ja)
IL (1) IL137693A (ja)
WO (1) WO1999044151A1 (ja)

Families Citing this family (149)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6507678B2 (en) * 1998-06-19 2003-01-14 Fujitsu Limited Apparatus and method for retrieving character string based on classification of character
US6594701B1 (en) 1998-08-04 2003-07-15 Microsoft Corporation Credit-based methods and systems for controlling data flow between a sender and a receiver with reduced copying of data
US6321276B1 (en) 1998-08-04 2001-11-20 Microsoft Corporation Recoverable methods and systems for processing input/output requests including virtual memory addresses
US6360220B1 (en) * 1998-08-04 2002-03-19 Microsoft Corporation Lock-free methods and systems for accessing and storing information in an indexed computer data structure having modifiable entries
US6321232B1 (en) * 1998-12-18 2001-11-20 Xerox Corporation Method for creating a geometric hash tree in a document processing system
US6625592B1 (en) * 1999-08-10 2003-09-23 Harris-Exigent, Inc. System and method for hash scanning of shared memory interfaces
US6493813B1 (en) * 1999-10-15 2002-12-10 Neocore, Inc. Method for forming a hashing code
US6675157B1 (en) * 1999-11-01 2004-01-06 International Business Machines Corporation System and method for balancing binary search trees
US7246120B2 (en) 2000-01-28 2007-07-17 Oracle International Corporation Techniques for achieving higher availability of resources during reconfiguration of a cluster
US6920454B1 (en) 2000-01-28 2005-07-19 Oracle International Corporation Techniques for DLM optimization with transferring lock information
US6529906B1 (en) * 2000-01-28 2003-03-04 Oracle Corporation Techniques for DLM optimization with re-mastering events
US6751616B1 (en) 2000-01-28 2004-06-15 Oracle International Corp. Techniques for DLM optimization with re-mapping responsibility for lock management
US6675163B1 (en) * 2000-04-06 2004-01-06 International Business Machines Corporation Full match (FM) search algorithm implementation for a network processor
US6556990B1 (en) * 2000-05-16 2003-04-29 Sun Microsystems, Inc. Method and apparatus for facilitating wildcard searches within a relational database
US6963876B2 (en) 2000-06-05 2005-11-08 International Business Machines Corporation System and method for searching extended regular expressions
US6611837B2 (en) 2000-06-05 2003-08-26 International Business Machines Corporation System and method for managing hierarchical objects
FR2811101B1 (fr) * 2000-07-03 2002-09-20 Axicare Procede de traitement de donnees structurees utilisant un langage informatique oriente objet
US6553370B1 (en) * 2000-10-04 2003-04-22 Lsi Logic Corporation Flexible search engine having sorted binary search tree for perfect match
GB2406679B (en) * 2000-11-30 2005-05-18 Coppereye Ltd Database
US7406443B1 (en) * 2000-12-18 2008-07-29 Powerloom Method and system for multi-dimensional trading
US7047420B2 (en) * 2001-01-17 2006-05-16 Microsoft Corporation Exclusive encryption
US20020099583A1 (en) * 2001-01-24 2002-07-25 Matusek Lawrence W. Architecture and techniques for providing product configurations to an enterprise resource planner
US6738779B1 (en) 2001-02-21 2004-05-18 Telecom Italia S.P.A. Apparatus for and method of multiple parallel string searching
US7043637B2 (en) 2001-03-21 2006-05-09 Microsoft Corporation On-disk file format for a serverless distributed file system
US7062490B2 (en) * 2001-03-26 2006-06-13 Microsoft Corporation Serverless distributed file system
US6981138B2 (en) * 2001-03-26 2005-12-27 Microsoft Corporation Encrypted key cache
US6785677B1 (en) 2001-05-02 2004-08-31 Unisys Corporation Method for execution of query to search strings of characters that match pattern with a target string utilizing bit vector
US6785699B1 (en) * 2001-05-04 2004-08-31 Lsi Logic Corporation Prefix comparator
US6988124B2 (en) 2001-06-06 2006-01-17 Microsoft Corporation Locating potentially identical objects across multiple computers based on stochastic partitioning of workload
US6751627B2 (en) * 2001-07-23 2004-06-15 Networks Associates Technology, Inc. Method and apparatus to facilitate accessing data in network management protocol tables
US8249885B2 (en) * 2001-08-08 2012-08-21 Gary Charles Berkowitz Knowledge-based e-catalog procurement system and method
US20030084031A1 (en) * 2001-10-31 2003-05-01 Tarquini Richard P. System and method for searching a signature set for a target signature
GB2391679B (en) 2002-02-04 2004-03-24 Zentian Ltd Speech recognition circuit using parallel processors
US6842750B2 (en) * 2002-03-27 2005-01-11 Lsi Logic Corporation Symbolic simulation driven netlist simplification
US6941314B2 (en) * 2002-04-15 2005-09-06 Lsi Logic Corporation User selectable editing protocol for fast flexible search engine
US6931413B2 (en) * 2002-06-25 2005-08-16 Microsoft Corporation System and method providing automated margin tree analysis and processing of sampled data
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
US7472114B1 (en) * 2002-09-18 2008-12-30 Symantec Corporation Method and apparatus to define the scope of a search for information from a tabular data source
US8661498B2 (en) * 2002-09-18 2014-02-25 Symantec Corporation Secure and scalable detection of preselected data embedded in electronically transmitted messages
US7886359B2 (en) * 2002-09-18 2011-02-08 Symantec Corporation Method and apparatus to report policy violations in messages
US8225371B2 (en) 2002-09-18 2012-07-17 Symantec Corporation Method and apparatus for creating an information security policy based on a pre-configured template
US8041719B2 (en) * 2003-05-06 2011-10-18 Symantec Corporation Personal computing device-based mechanism to detect preselected data
US7673344B1 (en) * 2002-09-18 2010-03-02 Symantec Corporation Mechanism to search information content for preselected data
JP4091604B2 (ja) * 2002-10-03 2008-05-28 株式会社インフォーエス ビットストリングの照合方法および装置
US7315862B1 (en) * 2002-12-20 2008-01-01 Nortel Networks Limited Concurrent lock-free access to a record by write and read processes
US7451144B1 (en) * 2003-02-25 2008-11-11 At&T Corp. Method of pattern searching
US7774191B2 (en) * 2003-04-09 2010-08-10 Gary Charles Berkowitz Virtual supercomputer
US7447786B2 (en) * 2003-05-09 2008-11-04 Oracle International Corporation Efficient locking of shared data that is accessed for reads in a cluster database
US20050065964A1 (en) * 2003-09-19 2005-03-24 Ziemann David M. Update of a tree-based database
CA2453973A1 (en) * 2003-12-23 2005-06-23 Daniel A. Rose On-demand creation of posix locale source
CA2453971C (en) * 2003-12-23 2009-08-11 Daniel A. Rose On-demand creation of java locale source
US7379952B2 (en) * 2004-01-30 2008-05-27 Oracle International Corporation Techniques for multiple window resource remastering among nodes of a cluster
EP1566744A1 (en) * 2004-02-19 2005-08-24 Sap Ag Optimising lock granularity using range locking
US7536467B2 (en) * 2004-04-20 2009-05-19 Microsoft Corporation Peer-to-peer (P2P) mobility system, and method
US8176051B2 (en) * 2004-05-27 2012-05-08 International Business Machines Corporation Search via fast case insensitive ASCII tree
US20060036627A1 (en) * 2004-08-06 2006-02-16 Roger Deran Method and apparatus for a restartable hash in a trie
CN100442277C (zh) * 2004-08-24 2008-12-10 侯方勇 优化哈希树完整性校验的方法
US8301788B2 (en) * 2004-09-10 2012-10-30 Cavium, Inc. Deterministic finite automata (DFA) instruction
US8560475B2 (en) 2004-09-10 2013-10-15 Cavium, Inc. Content search mechanism that uses a deterministic finite automata (DFA) graph, a DFA state machine, and a walker process
US8392590B2 (en) * 2004-09-10 2013-03-05 Cavium, Inc. Deterministic finite automata (DFA) processing
EP1684194A1 (en) * 2005-01-25 2006-07-26 Sap Ag A central lock service for database applications
US20060167845A1 (en) * 2005-01-25 2006-07-27 International Business Machines Corporation Selection of optimal plans for FIRST-N-ROW queries
US7539694B1 (en) 2005-02-04 2009-05-26 Marvell International Ltd. Concurrently searching and manipulating binary trees
US20060184549A1 (en) * 2005-02-14 2006-08-17 Rowney Kevin T Method and apparatus for modifying messages based on the presence of pre-selected data
US8011003B2 (en) * 2005-02-14 2011-08-30 Symantec Corporation Method and apparatus for handling messages containing pre-selected data
US8683020B2 (en) * 2005-02-26 2014-03-25 Coco Communications Corp. Naming system layer
US20060200469A1 (en) * 2005-03-02 2006-09-07 Lakshminarayanan Chidambaran Global session identifiers in a multi-node system
US7209990B2 (en) * 2005-04-05 2007-04-24 Oracle International Corporation Maintain fairness of resource allocation in a multi-node environment
US7634407B2 (en) * 2005-05-20 2009-12-15 Microsoft Corporation Method and apparatus for indexing speech
CA2975694C (en) 2005-07-15 2020-12-08 Indxit Systems, Inc. Systems and methods for data indexing and processing
US20070027848A1 (en) * 2005-07-29 2007-02-01 Microsoft Corporation Smart search for accessing options
US8402007B2 (en) * 2005-08-02 2013-03-19 The Boeing Company Methods and apparatus for creating and utilizing templates in connection with information modeling
US10140387B2 (en) 2005-08-02 2018-11-27 The Boeing Company Model for managing variations in a product structure for a product
US8275799B2 (en) * 2005-08-02 2012-09-25 The Boeing Company Methods and apparatus for information modeling
US8095549B2 (en) * 2005-10-05 2012-01-10 Intel Corporation Searching for strings in messages
US7809568B2 (en) * 2005-11-08 2010-10-05 Microsoft Corporation Indexing and searching speech with text meta-data
US7831428B2 (en) * 2005-11-09 2010-11-09 Microsoft Corporation Speech index pruning
US7831425B2 (en) * 2005-12-15 2010-11-09 Microsoft Corporation Time-anchored posterior indexing of speech
US8589574B1 (en) * 2005-12-29 2013-11-19 Amazon Technologies, Inc. Dynamic application instance discovery and state management within a distributed system
US7702640B1 (en) * 2005-12-29 2010-04-20 Amazon Technologies, Inc. Stratified unbalanced trees for indexing of data items within a computer system
US20070214153A1 (en) * 2006-03-10 2007-09-13 Mazzagatti Jane C Method for processing an input particle stream for creating upper levels of KStore
US20070220069A1 (en) * 2006-03-20 2007-09-20 Mazzagatti Jane C Method for processing an input particle stream for creating lower levels of a KStore
US8238351B2 (en) * 2006-04-04 2012-08-07 Unisys Corporation Method for determining a most probable K location
US20070282816A1 (en) * 2006-06-05 2007-12-06 Shing-Jung Tsai Method and structure for string partial search
US7895211B2 (en) * 2006-11-03 2011-02-22 International Business Machines Corporation Method and system for reinserting a chain in a hash table
EP1973054A1 (en) * 2007-03-20 2008-09-24 Sap Ag Workflow authorizations evaluation in multi-layered applications
US7822927B1 (en) * 2007-05-14 2010-10-26 Emc Corporation Dynamically configurable reverse DNLC lookup
US7823761B2 (en) * 2007-05-16 2010-11-02 The Invention Science Fund I, Llc Maneuverable surgical stapler
US20090006402A1 (en) * 2007-06-28 2009-01-01 Holger Bohle Methods and systems for the dynamic selection of a locking strategy
US8819217B2 (en) * 2007-11-01 2014-08-26 Cavium, Inc. Intelligent graph walking
US7949683B2 (en) * 2007-11-27 2011-05-24 Cavium Networks, Inc. Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph
US8180803B2 (en) * 2007-11-27 2012-05-15 Cavium, Inc. Deterministic finite automata (DFA) graph compression
JP2011511366A (ja) * 2008-02-01 2011-04-07 ジ・オリバー・グループ・リミテッド・ライアビリティ・カンパニー データの検索および索引付けの方法およびそれを実施するシステム
US8065739B1 (en) 2008-03-28 2011-11-22 Symantec Corporation Detecting policy violations in information content containing data in a character-based language
US7996374B1 (en) 2008-03-28 2011-08-09 Symantec Corporation Method and apparatus for automatically correlating related incidents of policy violations
US7996373B1 (en) 2008-03-28 2011-08-09 Symantec Corporation Method and apparatus for detecting policy violations in a data repository having an arbitrary data schema
US8131729B2 (en) * 2008-06-12 2012-03-06 International Business Machines Corporation System and method for best-fit lookup of multi-field key
US8826443B1 (en) 2008-09-18 2014-09-02 Symantec Corporation Selective removal of protected content from web requests sent to an interactive website
JP5339507B2 (ja) * 2008-10-01 2013-11-13 インターナショナル・ビジネス・マシーンズ・コーポレーション 木構造を探索する方法
US8473523B2 (en) 2008-10-31 2013-06-25 Cavium, Inc. Deterministic finite automata graph traversal with nodal bit mapping
US8613040B2 (en) * 2008-12-22 2013-12-17 Symantec Corporation Adaptive data loss prevention policies
US8280723B1 (en) * 2009-01-29 2012-10-02 Intuit Inc. Technique for comparing a string to large sets of strings
CN101807188A (zh) * 2009-02-18 2010-08-18 北京金远见电脑技术有限公司 用于任意规模词典的完美哈希函数构造方法及系统
JP4852621B2 (ja) * 2009-03-03 2012-01-11 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム中のオブジェクトの割り付け場所を追跡する方法、並びにそのコンピュータ・システム及びコンピュータ・プログラム
US8176080B2 (en) * 2009-03-06 2012-05-08 Hewlett-Packard Development Company, L.P. Desensitizing character strings
US8935752B1 (en) 2009-03-23 2015-01-13 Symantec Corporation System and method for identity consolidation
US8671265B2 (en) 2010-03-05 2014-03-11 Solidfire, Inc. Distributed data storage system providing de-duplication of data using block identifiers
CN102193941B (zh) * 2010-03-12 2013-09-18 富士通株式会社 数据处理装置和为值串形式索引值建立索引的方法
US8204887B2 (en) 2010-08-27 2012-06-19 Hewlett-Packard Development Company, L.P. System and method for subsequence matching
US8577891B2 (en) * 2010-10-27 2013-11-05 Apple Inc. Methods for indexing and searching based on language locale
US8407245B2 (en) * 2010-11-24 2013-03-26 Microsoft Corporation Efficient string pattern matching for large pattern sets
CN102024046B (zh) * 2010-12-14 2013-04-24 华为数字技术(成都)有限公司 数据重复性校验方法和装置及系统
JPWO2012081165A1 (ja) * 2010-12-16 2014-05-22 日本電気株式会社 データベース管理装置及びデータベース管理方法
US20120222051A1 (en) * 2011-02-25 2012-08-30 Microsoft Corporation Shared resource access verification
US20120254251A1 (en) * 2011-03-03 2012-10-04 The Governors Of The University Of Alberta SYSTEMS AND METHODS FOR EFFICIENT TOP-k APPROXIMATE SUBTREE MATCHING
US8493249B2 (en) 2011-06-03 2013-07-23 Microsoft Corporation Compression match enumeration
US9251289B2 (en) 2011-09-09 2016-02-02 Microsoft Technology Licensing, Llc Matching target strings to known strings
US8626543B2 (en) * 2011-10-08 2014-01-07 Sap Ag Tracing software execution of a business process
US9838269B2 (en) 2011-12-27 2017-12-05 Netapp, Inc. Proportional quality of service based on client usage and system metrics
US9054992B2 (en) 2011-12-27 2015-06-09 Solidfire, Inc. Quality of service policy sets
JP5912714B2 (ja) * 2012-03-21 2016-04-27 任天堂株式会社 データ構造、データ構造生成方法、情報処理装置、情報処理システム、及び情報処理プログラム
EP2853049B1 (en) * 2012-05-23 2019-01-09 Telefonaktiebolaget LM Ericsson (publ) Thermal noise floor estimation
US8688685B2 (en) * 2012-06-15 2014-04-01 Sap Ag Accelerated searching of substrings
US9400816B1 (en) * 2013-02-28 2016-07-26 Google Inc. System for indexing collections of structured objects that provides strong multiversioning semantics
WO2014165040A1 (en) 2013-03-13 2014-10-09 Veriscape, Inc. Dynamic memory management for a virtual supercomputer
US9826463B2 (en) 2013-12-18 2017-11-21 Qualcomm Incorporated Hash partial matching for discovery
US20150244795A1 (en) 2014-02-21 2015-08-27 Solidfire, Inc. Data syncing in a distributed system
CN105096294B (zh) * 2014-04-30 2019-01-18 西门子医疗保健诊断公司 用于对尿液沉渣图像的待处理区块进行区块检索的方法和装置
JP6390239B2 (ja) 2014-07-25 2018-09-19 富士ゼロックス株式会社 情報処理装置、及びプログラム
US10891272B2 (en) 2014-09-26 2021-01-12 Oracle International Corporation Declarative language and visualization system for recommended data transformations and repairs
US10210246B2 (en) * 2014-09-26 2019-02-19 Oracle International Corporation Techniques for similarity analysis and data enrichment using knowledge sources
US10976907B2 (en) 2014-09-26 2021-04-13 Oracle International Corporation Declarative external data source importation, exportation, and metadata reflection utilizing http and HDFS protocols
US10216966B2 (en) * 2015-02-25 2019-02-26 Netapp, Inc. Perturb key technique
US10540512B2 (en) * 2015-09-29 2020-01-21 International Business Machines Corporation Exception preserving parallel data processing of string and unstructured text
US10706608B2 (en) 2016-01-19 2020-07-07 Nvidia Corporation Tree traversal with backtracking in constant time
RU2620996C1 (ru) * 2016-02-18 2017-05-30 Акционерное общество "Лаборатория Касперского" Способ поиска входной строки в дереве поиска с индексацией используемых при построении дерева строк
US10929022B2 (en) 2016-04-25 2021-02-23 Netapp. Inc. Space savings reporting for storage system supporting snapshot and clones
US10241998B1 (en) * 2016-06-29 2019-03-26 EMC IP Holding Company LLC Method and system for tokenizing documents
US10642763B2 (en) 2016-09-20 2020-05-05 Netapp, Inc. Quality of service policy sets
WO2018125267A1 (en) * 2016-12-27 2018-07-05 Obie Tech, Llc Enhanced communication using variable length strings of alphanumerics, symbols, and other input
US10810472B2 (en) 2017-05-26 2020-10-20 Oracle International Corporation Techniques for sentiment analysis of data using a convolutional neural network and a co-occurrence network
US10459810B2 (en) 2017-07-06 2019-10-29 Oracle International Corporation Technique for higher availability in a multi-node system using replicated lock information to determine a set of data blocks for recovery
US10885056B2 (en) 2017-09-29 2021-01-05 Oracle International Corporation Data standardization techniques
US10936599B2 (en) 2017-09-29 2021-03-02 Oracle International Corporation Adaptive recommendations
US11270339B1 (en) * 2018-08-21 2022-03-08 Amdocs Development Limited System, method, and computer program for using full and partial dynamic customer criteria sets for targeting promotions
US11068541B2 (en) 2019-02-15 2021-07-20 International Business Machines Corporation Vector string search instruction
US11119999B2 (en) 2019-07-24 2021-09-14 Sap Se Zero-overhead hash filters
EP4095640A1 (en) * 2021-05-26 2022-11-30 Volvo Autonomous Solutions AB Method and system for controlling a plurality of vehicles, in particular autonomous vehicles
CN114090570B (zh) * 2021-09-29 2024-08-27 北京信息科技大学 一种基于基数树与哈希表结合的数据存储方法及装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5202986A (en) * 1989-09-28 1993-04-13 Bull Hn Information Systems Inc. Prefix search tree partial key branching
US5745902A (en) * 1992-07-06 1998-04-28 Microsoft Corporation Method and system for accessing a file using file names having different file name formats
US5787430A (en) * 1994-06-30 1998-07-28 International Business Machines Corporation Variable length data sequence backtracking a trie structure
US5613110A (en) * 1995-01-05 1997-03-18 International Business Machines Corporation Indexing method and apparatus facilitating a binary search of digital data
US5748952A (en) * 1995-05-10 1998-05-05 International Business Machines Corporation System and method for avoiding complete index tree traversals in sequential and almost sequential index probes
US5778361A (en) * 1995-09-29 1998-07-07 Microsoft Corporation Method and system for fast indexing and searching of text in compound-word languages
US5893086A (en) * 1997-07-11 1999-04-06 International Business Machines Corporation Parallel file system and method with extensible hashing

Also Published As

Publication number Publication date
IL137693A (en) 2005-08-31
WO1999044151A1 (en) 1999-09-02
JP2002505481A (ja) 2002-02-19
US6047283A (en) 2000-04-04
ATE253242T1 (de) 2003-11-15
CA2316936A1 (en) 1999-09-02
DE69912410T2 (de) 2004-08-19
AU2835799A (en) 1999-09-15
EP1066570A1 (en) 2001-01-10
IL137693A0 (en) 2001-10-31
CA2316936C (en) 2004-04-20
JP2006004439A (ja) 2006-01-05
AU762980B2 (en) 2003-07-10
EP1066570B1 (en) 2003-10-29
JP3947202B2 (ja) 2007-07-18
DE69912410D1 (de) 2003-12-04

Similar Documents

Publication Publication Date Title
JP3735683B2 (ja) 高速探索サーチ及びインデクシング法
US8060521B2 (en) Systems and methods of directory entry encodings
CA2237161C (en) Storage and retrieval of ordered sets of keys in a compact 0-complete tree
Coffman Jr et al. File structures using hashing functions
CN111801665B (zh) 用于大数据应用的分层局部敏感哈希(lsh)分区索引
US20070005589A1 (en) Method and apparatus for document clustering and document sketching
AU2004225060B2 (en) A computer implemented compact 0-complete tree dynamic storage structure and method of processing stored data
WO1999052098A2 (en) Deletion of ordered sets of keys in a compact 0-complete tree
Lin et al. Learning augmented binary search trees
Ferragina et al. Optimal on-line search and sublinear time update in string matching
US20120054196A1 (en) System and method for subsequence matching
Ferragina et al. Learned monotone minimal perfect hashing
Orlandic et al. Analysis of compact 0-complete trees: A new access method to large databases
Comer English dictionary searching with little extra space
Masud et al. A hashing technique using separate binary tree
Arslan Efficient approximate dictionary look-up for long words over small alphabets
Gonzalez Online Dictionary Structures
Tamassia et al. Basic data structures
Shishibori et al. Improvement of binary digital search trees using hierarchical structures
Kar Construction of optimal indexes
Egdø Iterators for the trie data structure

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041217

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20050314

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20050322

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050617

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20051003

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

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20091104

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20101104

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20111104

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20111104

Year of fee payment: 6

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D02

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

Free format text: PAYMENT UNTIL: 20121104

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20121104

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20131104

Year of fee payment: 8

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term