(57)【要約】      （修正有）【課題】データベースの効率的な探索および更新を可能にする効率的なインデックス構造体を提供する。【解決手段】インデックスおよびデータを有するデータベースから情報を得る方法であって、該インデックスは、探索キーを用いて問合せされて、探索基準に合致するデータを見つけるようになっており、インデックスは決定ノードの階層的構造体であり、該構造体は結論セットに到達するまでナビゲートされ、ノードはキーのサブシーケンスを含むことが可能であり、とるべきアクションを決定するために候補キーが前記サブシーケンスと比較されることが可能であり、（Ｎ＋１）番目のレイヤにあるノードに記憶される前記キーの部分は、Ｎ番目のレイヤ内の先行するノードに記憶される部分と無関係であることを特徴とする。【選択図】図１３
2008071362.tif 000002
【特許請求の範囲】
【請求項１】
インデックスおよびデータを有するデータベースから情報を得る方法であって、該インデックスは、探索キーを用いて問合せされて、探索基準に合致するデータを見つけるようになっており、
前記インデックスは決定ノードの階層的構造体であり、該構造体は結論セットに到達するまでナビゲートされ、ノードはキーのサブシーケンスを含むことが可能であり、とるべきアクションを決定するために候補キーが前記サブシーケンスと比較されることが可能であり、（Ｎ＋１）番目のレイヤにあるノードに記憶される前記キーの部分は、Ｎ番目のレイヤ内の先行するノードに記憶される部分と無関係であることを特徴とする方法。
【請求項２】
データベース内でキーを符号化する方法であって、前記キーの記憶空間要件を縮小するように、キーデータが少なくとも１つの結論セットにハッシュ形式で記憶される方法。
【請求項３】
範囲の限界を表す第１キーと第２キーの間のキーの範囲を有するデータベースをナビゲートする方法であって、前記キーは縮小された範囲にマッピングされ、前記キーの順序が前記マッピング中に保存されない場合、前記キーの大きい方より大きいマッピングされた空間と、前記キーの小さい方より小さいマッピングされた空間とに対して探索が行われる方法。
【請求項４】
前記結論セットは前記キーをマッピングなしの形式で含む、請求項３に記載の方法。
【請求項５】
データベース内でキーを管理する方法であって、前記キーは、前記キーおよび前記キー関連データが前記データベース内に維持されるべき持続期間を示すデータフィールドを含むことを特徴とする方法。
【請求項６】
期限切れになったキーおよびデータは、新しいデータで上書きするために利用可能となる、請求項５に記載の方法。
【請求項７】
期限切れのキーおよびデータは、前記データベースから能動的には削除されない、請求項５または６に記載の方法。
【請求項８】
結論セットがアクセスされるとき、持続期間を有する各エントリのエイジが計算され、該計算の結果は、どのエントリが上書き可能かを判定するために記憶され、または使用されることが可能である、請求項５、６または７に記載の方法。
【請求項９】
キーインデックスおよび決定インデックスを備えるデータベース内でデータを編成する方法であって、使用時に、前記キーインデックス内のキーは圧縮された方式で記憶され、前記キーを用いて前記決定インデックスに質問する前に前記キーが存在するかどうかを確かめるチェックが前記キーインデックスに対して行われる方法。
【請求項１０】
使用時に前記キーインデックスは半導体メモリ内に保持される、請求項９に記載の方法。
【請求項１１】
前記キーが前記キーインデックス内に存在しない場合、前記決定インデックスは探索されない、請求項９に記載の方法。
【請求項１２】
キーを挿入する操作中に、前記キーインデックスのチェックが行われ、合致するエントリが見出される場合、該キーは重複として拒否される、請求項９、１０または１１に記載の方法。
【請求項１３】
前記キーインデックス内のキーは、圧縮、符号化またはマッピングされた形式で記憶される、請求項９ないし１２のいずれか一項に記載の方法。
【請求項１４】
前記キーはハッシュ関数を用いてマッピングされる、請求項１３に記載の方法。
【請求項１５】
前記キーインデックスは要素配列を備え、該配列内の要素の数は、前記インデックス内の一意的なキー要素の数と少なくとも同数である、請求項９ないし１０のいずれか一項に記載の方法。
【請求項１６】
２つの異なる関数が使用され、一方のハッシュ関数は、前記キーインデックス内の宛先要素Ｅ（Ｋ）を計算するプロセスの一部として使用され、他方のハッシュ関数は、前記キーを符号化するために使用され、その結果Ｂ（Ｋ）は前記宛先要素に記憶される、請求項１５に記載の方法。
【請求項１７】
前記キーインデックスの問合せ中に、前記宛先要素が目標キーについて計算され、前記第２のハッシュ関数を用いて符号化された値が前記目標キーについて計算され、前記符号化された値が前記宛先要素に既存の値に合致する場合に、前記キーは重複であるとみなされる、請求項１６に記載の方法。
【請求項１８】
データベース内でデータを編成する方法であって、インデックスがその作業負荷の一部を少なくとも１つの他のインデックスに代行させることができるように、インデックスは、インデックスの階層的構造体を備える方法。
【請求項１９】
作業を代行しているインデックスは、作業を他のインデックスに代行させることができる、請求項１８に記載の方法。
【請求項２０】
インデックスのキー目録は範囲によって定義され、前記範囲の外部のキーに対して操作するいかなる要求も前記インデックスにより拒否される、請求項１８または１９に記載の方法。
【請求項２１】
前記キーはデータベースのインデックス範囲内にあり、前記データベースは、前記キーがいずれかの代行インデックスの目録範囲内にある場合、前記キーに対する操作を自分自身で実行すること、またはそのタスクを代行させることが可能である、請求項２０に記載の方法。
【請求項２２】
各インデックスは、物理記憶デバイスに関連付けられることにより、複数の並行ディスクアクセスが起こることを可能にする、請求項１８ないし２１のいずれかに記載の方法。
【請求項２３】
請求項１に記載の方法をコンピュータに実行させるコンピュータ可読命令。
【請求項２４】
前記命令はデータキャリア上を運ばれる、請求項２３に記載のコンピュータ可読命令。
【請求項２５】
インデックスおよびデータを有するデータベースであって、前記インデックスは、探索キーを用いて問合せされて、探索基準に合致するデータを見つけるようになっており、
前記インデックスは決定ノードの階層的構造体であり、該構造体は結論セットに到達するまでナビゲートされ、ノードはキーのサブシーケンスを含むことが可能であり、とるべきアクションを定めるために候補キーが該サブシーケンスと比較されることが可能であり、記憶される前記キーの部分は、前記階層的構造体内のレイヤ間において単調な系列では変化しないことを特徴とするデータベース。
【請求項２６】
請求項３または４に記載の方法をコンピュータに実行させるコンピュータ可読命令。
【請求項２７】
前記命令はデータキャリア上を運ばれる、請求項２６に記載のコンピュータ可読命令。
【請求項２８】
キーの記憶空間要件を縮小するように、キーデータが少なくとも１つの結論セットに符号化形式で記憶されるデータベース。
【請求項２９】
請求項５ないし８のいずれか一項に記載の方法をコンピュータに実行させるコンピュータ可読命令。
【請求項３０】
前記命令はデータキャリア上を運ばれる、請求項２９に記載のコンピュータ可読命令。
【請求項３１】
データベースであって、該データベース内のキーは、該キーおよび該キーの関連データが前記データベース内に維持されるべき持続期間を示すデータフィールドを含むことを特徴とするデータベース。
【請求項３２】
請求項９ないし１７のいずれか一項に記載の方法をコンピュータに実行させるコンピュータ可読命令。
【請求項３３】
前記命令はデータキャリア上を運ばれる、請求項３２に記載のコンピュータ可読命令。
【請求項３４】
キーインデックスおよび決定インデックスを備えるデータベースであって、前記キーインデックス内のキーは圧縮された方式で記憶され、前記キーを用いて前記決定インデックスに質問する前に前記キーが存在するかどうかを確かめるチェックが前記キーインデックスに対して行われるデータベース。
【請求項３５】
請求項１８ないし２２のいずれか一項に記載の方法をコンピュータに実行させるコンピュータ可読命令。
【請求項３６】
前記命令はデータキャリア上を運ばれる、請求項３５に記載のコンピュータ可読命令。
【請求項３７】
インデックスを有するデータベースであって、前記インデックスは、階層的構造体内のインデックスがその作業負荷の一部を前記階層的構造体内の少なくとも１つの他のインデックスに代行させることができるように、インデックスの階層的構造体を備えるデータベース。
【請求項３８】
データベースを編成する方法であって、該データベースはインデックスを備え、該データベースは、所定サイズのブロック単位で記憶容量を割り当てるように編成された大容量記憶デバイスを有する計算システム上にホストされ、前記インデックスは少なくとも１つのブロック内に記憶され、所与のブロック内のインデックスのサイズが、さらなる記憶領域が要求されるほどに増大するとき、新しいブロックが作成され、前記インデックスの一部が該新しいブロックに移動される方法。
【請求項３９】
前記インデックス内への新しいノードの挿入時に、該ノードは新しいブロックの作成を引き起こし、前記新しいノードは前記新しいブロックに挿入され、前記インデックスの残りの部分は既存のブロック内にとどまる、請求項３８に記載の方法。
【請求項４０】
前記インデックス内への新しいノードの挿入時に、該ノードは既存のブロックからの新しいブロックの作成を引き起こし、前記インデックスは、前記新しいブロックと前記既存
のブロックとの間で実質的に均等に再分配される、請求項３８に記載の方法。
【請求項４１】
データベースであって、該データベースはインデックスを備え、該データベースは、所定サイズのブロック単位で記憶容量を割り当てるように編成された大容量記憶デバイスを有する計算システム上に編成され、前記インデックスは少なくとも１つのブロック内に記憶され、所与のブロック内のインデックスのサイズが、さらなる記憶領域が要求されるほどに増大するとき、新しいブロックが作成され、前記インデックスの一部が該新しいブロックに移動されるデータベース。
【請求項４２】
インデックスを有するデータベースを編成する方法であって、前記インデックスに対するキーを形成する要素は、可能な要素の少なくとも一部を構成する第１セットから該第１セットより小さい第２セットへマッピングされる方法。
【請求項４３】
前記マッピングは音声的に類似の文字を共通の値に変換することを含む、請求項４２に記載の方法。
【請求項４４】
前記マッピングはすべての母音を除去することを含む、請求項４２に記載の方法。
【請求項４５】
前記マッピングは母音を共通の値に変換することを含む、請求項４２に記載の方法。
【請求項４６】
前記マッピングは句読文字を除去することを含む、請求項４２に記載の方法。
【請求項４７】
前記マッピングは句読文字を共通の値に変換することを含む、請求項４２に記載の方法。
【請求項４８】
前記マッピングは数字を除去することを含む、請求項４２に記載の方法。
【請求項４９】
前記マッピングは数字を共通の値に変換することを含む、請求項４２に記載の方法。
【請求項５０】
データベースを編成する方法であって、インデックスをナビゲートするために使用されるキーは複合キーであり、該複合キー内の１つまたは複数のキーは圧縮形態で表現される方法。
【請求項５１】
主キーは非圧縮であり、前記複合キー内の他のキーは圧縮される、請求項９９に記載の方法。
【請求項５２】
前記または各圧縮されたキーは、前記データベースを用いて実行される探索を精緻化するために使用される修飾子として作用する、請求項５０または５１に記載の方法。
【請求項５３】
前記インデックスは主キーを用いて結論セットに到達するまでナビゲートされ、次に前記結論セット内の結果が前記または各修飾子を用いて質問される、請求項５２に記載の方法。
【請求項５４】
前記キーはハッシュ関数を用いて圧縮される、請求項５０に記載の方法。
【請求項５５】
請求項５０ないし５４のいずれか一項に記載の方法をコンピュータに実行させるコンピュータ可読命令。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データベースをインデックス付けし、データベース内に情報を配置し、データベースに問合せを行う方法に関する。特に、本発明はデータ記憶システム内のスカラーデータの効率的探索を可能にする。
【０００２】
スカラーデータタイプとしては、例えば、論理データ、テキストストリング、数値データ、および日時データがある。
【０００３】
データプロセッサは高速であるが、指定された属性またはある範囲の属性を有する特定の項目を見つけるために、記憶システムに保持されている全データを探索するのは非効率的であり時間がかかる。また、データは大容量記憶媒体に記憶されることになるのがほとんど不可避であり、これは、ＣＰＵ速度および半導体メモリへのアクセスに比べてディスクアクセスに起因する遅延を生じる。探索キーを用いて項目を検索することができるように、インデックスを作成する方がより効率的である。
【０００４】
インデックス機構は、内部インデックス構造体の作成および保守を必要とする。この構造体のナビゲーションおよび保守は、本来的に処理オーバーヘッドを被る。このオーバーヘッドは、使用されるインデックス付けメカニズムの関数として変動し得る。このオーバーヘッドはまた、データベースのサイズが変化するにつれて、または例えばデータベース内のデータが時間とともに変化するにつれて変動し得る。
【０００５】
簡単な例は、誕生日のような時間順の情報を記憶するデータベースの場合である。設計者は、例えば、西暦２０００年より前に生まれた人々に関係するデータが西暦２０００年より後に生まれた人々に関係するデータから分離されるようにデータを構造化するかもしれない。この戦略はしばらくはうまくいくかもしれないが、理解されるように、西暦２０００年より前に生まれた人の数は制約されたセットであるのに対して、この日の後に生まれた人数は無限定である。したがって、時間が経つにつれて、西暦２０００年より後に生まれた人々に関係するエントリの割合が増大すると、このインデックス付けキーは冗長になる可能性がある。
【０００６】
インデックス付け方法の有効性は、以下のようないくつかの属性に照らして判断され得る：
【０００７】
１）インデックスのサイズ。インデックスが大きいほど、ナビゲートするのにより長い時間を必要とする。大きいインデックスはまた、ハードディスクドライブのような大容量記憶媒体、および半導体メモリのようなより高速なメモリからの転送に関与する多数のデータスワップまたは読み出し操作も必要とすることがある。
【０００８】
２）インデックスの構造的制約。強く制約された構造は、最初は利点を提供するかもしれないが、データベースがより多くのデータを収容するように増大するにつれてインデックスを再構築することが要求される場合には、計算のオーバーヘッドが増大してしまう。
【０００９】
３）インデックスにより課されるキーデータ制限。つまり、キーの最大サイズもしくはキーのデータタイプまたはキーにより表現される範囲は、インデックスが増大するにつれて、またはデータベースのデータ数が多くなるにつれて、インデックスのパフォーマンスに影響し始めることがある。
【００１０】
４）インデックスにより課されるキー検索制限。いくつかのインデックスは厳密なキーマッチングしか許容しないのに対して、他のインデックスは範囲マッチングを許容する。
【００１１】
５）インデックスの増大限界。インデックスは、最大サイズにより制約されることがある。
【００１２】
６）同時処理限界。インデックスは、キーデータの同時挿入および検索を許容することも禁止することもある。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
知られている従来技術のシステムは通常、ノードがキーデータの１つまたは複数の項目を含むようなツリーグラフを使用する。データベースに質問するためには、訪問される各ノードにあるキー値を、要求される探索キーと比較することによりツリーはナビゲートされる。このような設計においては本質的に、各ノードがそのノードの作成に関連するキーの全体を含むため、ノードの「サイズ」がデータ記憶領域に関して相当大きくなることがある。
【００１４】
このようなインデックスの効率は、キーサイズと、データがインデックスに追加される順序に左右され得る。
【００１５】
さらに、いくつかの方法は、それが適正に動作するためには常にツリーが「均衡化」されていることを要求する。これらの方法は、キーの挿入および削除のためにかなりの保守オーバーヘッドを被ることがあるため、高スループットのシステムには不適当である。
【課題を解決するための手段】
【００１６】
ナビゲーション
本発明の第１の態様によれば、インデックスおよびデータを有するデータベースを編成する方法が提供される。この方法において、インデックスは、探索基準に合致するデータを見つけるために、複数のビットにより表現される少なくとも１つの記号を含む探索キーを用いて問合せされる。この方法は以下のことを特徴とする。すなわち、インデックスは決定ノードの階層的構造体であり、ノードの構造体は探索中に結論に到達するまでナビゲートされ、構造体は、キー記号が構造体内のノードに記憶されず、かつ各ノードが３個より少ない出口パスを有するように編成される。
【００１７】
こうして、データベースの効率的な探索および更新を可能にする効率的なインデックス構造体を提供することが可能となる。ノードが当該ノードに関連するキーの全体を記憶するのではないため、インデックス構造体は従来技術のインデックスよりもずっと小さい。実際、ノードは当該ノードに関連するいかなるキーも記憶する必要がない。さらに、ノードは、ノードの質問に関係する決定規則を記憶しない。これは、規則が、ノード固有のものではなくすべてのノードにより共有されるという点で大域的であるためである。
【００１８】
各決定ノードは二者択一を行う。すなわち、各ノードは最大２個の出口パスしか有さない。
【００１９】
好ましくは、各ノードで適用される決定は単純な問合せである。これは、問合せが、キーまたはキーの一部を、ノードにおける決定基準と比較することを意味し、２進数的に言えば、テストは通常（必ずしもこれに限るわけではないが）、テストされているキーまたはその一部が、決定基準より大きいかそれとも小さいかというテストであることを意味する。これは、インデックスの構造体自体の内部に探索キーの特徴を記憶する必要性を除去
する。
【００２０】
ノードからの各出口は、別の決定ノード、結論セットまたはヌル結果を指すことが可能である。
【００２１】
ノードからの出口が別のノードを指す場合、探索は継続する。しかし、ノードからの出口が結論セットを指す場合、インデックスのナビゲーションは一般に終了する。
【００２２】
どの結果も探索項目と合致しない可能性もあり、その場合、探索はヌル結果で終了する。
【００２３】
データベース内のあらゆる「レコード」は、ある結論セットに属する。結論セット自体は、特定の探索基準を満たすデータを指すか、または場合によっては、データ自体を記憶することがある。
【００２４】
決定ノードの階層的構造体は、決定グラフとみなし得る。決定グラフは、任意のサイズおよび内部構造のものでよい。しかし、決定グラフは一般に、そのサイズに関して、プロセッサのメモリ内の小さいエンティティである。
【００２５】
好ましくは、決定グラフは、使用時に、データプロセッサの電子メモリ内に保持される。比較的小さい決定グラフをＲＡＭ内に保持することにより、データプロセッサは問合せの結果を素早く見つけることができる。特に、決定グラフの解析が磁気または他の物理記憶媒体へのアクセスを必要としないため、このような媒体に関連するアクセス時間はそれにより除去され、それによってパフォーマンスが向上する。
【００２６】
好ましくは、各結論セットは、決定グラフを通る単一の経路によってのみ到達することができる。これにより、結論セット内のすべてのキーは、共有される一意的な決定のセットに適合することが保証される。
【００２７】
データベースインデックスは、時間とともに発展することがあり、そしてむしろ発展しなければならない。このことは、データベースが増大するにつれてパフォーマンスの劣化につながることがある。したがって、結論セット内でのデータの挿入および削除、ならびに新しい結論セットの作成を可能にする必要がある。
【００２８】
好ましくは、各結論セットは最大サイズを有する。この最大サイズは、ユーザまたは設計者により制御されるパラメータである。しかし、サイズは、１つまたは複数のハードディスクを備え得る磁気記憶装置のような記憶デバイスによって使用されるデータブロックまたはアドレシングブロックのサイズに有利には関係付けられてもよい。しかし、光記憶デバイスのような、いかなるランダムアクセスデータ記憶装置も使用され得る。
【００２９】
結論セットが所定サイズに近づくか、または到達すると、新しい決定ノードが決定ツリーに挿入され、結論セット内にあったデータは、その新しい決定ノードの出口パスを介して到達される新しい結論セット内に再インデックス付けされる。新しい決定ノードは、自己の最大サイズを超えてしまった結論セットを指していたノードの出口パスに挿入される。
【００３０】
こうして、結論セットは、良好に挙動するように構成される。
【００３１】
決定グラフは、いずれの探索キーデータ自体を含まない。すべてのキーデータは、決定グラフの構造から暗示されるか、または演繹される。これは、決定グラフをコンパクトに
保つ。またこれは、決定グラフのサイズがキーサイズとは無関係であることも意味する。
【００３２】
本発明のもう１つの利点は、決定グラフの構造に変更を加えることが可能であり、これらの変更は局所的であることである。すなわち、ただ１つまたは数個の決定ノードだけがその変更により影響される。これは、構造的再編成があまり計算のオーバーヘッドとはならないことを意味する。
【００３３】
好ましくは、決定ノードは、キーの部分に、より好ましくはキーの比較的小さい部分に、関係付けられる。この結果、決定グラフは、キーの構造体とは概ね無関係となる。これはまた、決定グラフが、キーの構造体に対して、あるとしても少ししか制約を課さないという利点も有する。さらに、ノードが関係付けられるキーの部分は、決定グラフがナビゲートされるのと同じ構造化された順序に従う必要はない。したがって、当該キーの部分は、グラフがナビゲートされるとともにキーに沿って単調な方式で進行する必要がない。
【００３４】
有利には、決定グラフは、キーシーケンスの意味論的順序が保存されるように構造化される。したがって、例えば、決定グラフは、第１のノードまたはノードのセットが探索キー内の第１のビットまたは第１のビット群をテストし、決定グラフが結論セットへ向かってナビゲートされるにつれて、後続のノードでテストされるキーのビットがますます下位になるように構造化され得る。こうして、決定グラフは、厳密マッチングまたは範囲マッチングのいずれによっても、キーを見つけるためにナビゲートされることが可能である。範囲は、探索中に部分的にまたは完全に限定され得る。
【００３５】
決定グラフの構造体、特にその構造体への変更が大域的ではなく１つ、または２つのノードにしか影響しないという点で局所的であることは、決定グラフを保守する計算タスクが概して少ないことを意味する。再編成の局所性は、インデックスを用いたデータの挿入、削除および検索を容易にする。実際、これらのイベントの２つ以上が並行して発生することもある。
【００３６】
好ましくは、決定グラフのサイズに機能的限界はない。決定グラフが大量のデータを収容するように増大するにつれて、インデックスの構造体の探索時間は良好な挙動で増大する。
【００３７】
本発明の第２の態様によれば、インデックスを有するデータベースであって、データを保持し、探索キーを用いてインデックスに質問することによりデータを見つけることができるように構成されたデータベースが提供される。キーは少なくとも１つの記号を含み、各記号は複数のビットにより表現される。このデータベースにおいて、インデックスは決定ノードの階層的構造体であり、ノードの構造体は探索中に結論に到達するまでナビゲートされ、各ノードの探索基準はインデックス内のノードの位置により符号化され、各ノードは２個以下の出口パスを有する。
【００３８】
インデックスにおける局所的な構造的変更は、インデックス内での並行する挿入、削除および検索イベントを容易にする。
【００３９】
好ましくは、データベース内のデータの各項目は、ただ１つの結論セットにのみ属し得る。
【００４０】
決定グラフの分割
決定グラフは全体として半導体メモリ内に存在することが強く望まれるにもかかわらず、これは常に可能であるとは限らない。それは、インデックスが大きすぎるためかもしれないし、ホストデータプロセッサがデータベースのために「仮想マシン」環境を実施して
いて、ホストがマルチタスク動作し得るようになっており、オペレーティングシステムがデータベースに十分なメモリリソースを割り当てないためかもしれない。
【００４１】
このような状況の下では、決定グラフは、コンピュータシステムの大容量記憶デバイス上のメモリのブロック内に保持され得る。ディスクコントローラは、データの不連続なブロックによってディスクを管理する。したがって、例えば、ディスクコントローラにより使用される最小ブロックサイズが６４Ｋバイトである場合、４０Ｋのインデックスと６０Ｋのインデックスは両方ともディスク上で同じ記憶空間、すなわち１ブロックを占有し、同様に６５Ｋのインデックスと１３０Ｋのインデックスもまた同じ記憶空間、すなわち２ブロックを占有する。
【００４２】
これらのシステム制約に対応しその下で作業するためには、インデックス内のキー数が増大するにつれてインデックスのサイズが増大するため、インデックスの変更は制御される必要がある。したがって、インデックスを増大させるには、より多くのメモリのブロックが必要となる。
【００４３】
新しい決定ノードを挿入することが要求され、かつブロックがフルであるときに、インデックスを増大させる第１の方式は、新しいブロックを作成し、その新しいブロック内に新しいノードを配置することである。決定グラフは、新しいブロックが半導体メモリ内にすでに存在しているのでなければ、新しいノードを指すノードによりそのブロックが磁気記憶装置からフェッチされるように、補正される。その場合、ナビゲーションはその新しいノードから継続する。
【００４４】
この方法は単純であるが、それぞれの親のフルブロックから、ほとんど空のメモリブロックが多数、おそらくは数百個も作成されることにつながる可能性が高いため、非効率的である。これは、占める空間に関しては、問題とみなされないかもしれない。というのは、ディスクドライブは驚くほど大量のデータを保持することができるからである。しかし、この方法は、インデックスをナビゲートするために必要なディスクＩ／Ｏ操作が多くなるので、インデックスパフォーマンスを損なう可能性がある。
【００４５】
１つの好ましい手法は、新しいブロックを作成した後、親ブロック（すなわち、フルブロック）を実質的に均等に２つのブロックに分割することである。この手法では、ブロックを最適に二分割するノードを見つけるために、元のブロックが質問される必要がある。これは、ブロック内のノードの最初からの解析から、または性質上より統計的な手法によって、行われるかもしれない。したがって、例えば、分割のためのテストノードを選び、そのノード選択から生じるインデックスの分割を計算し、その結果に基づいてテストノードの選択を修正し、以上をおよそ均等な分配が達成されるまで繰り返す、という再帰的アルゴリズムが使用され得る。
【００４６】
この第２の手法は、各インデックスブロックが相当数のノードを含むという利益を有する。これは、大幅により効率的なメモリの使用につながる。
【００４７】
パターンマッチング
本明細書で前述のように、従来技術のシステムは、所与のノードに関連する探索キーの全体を記憶する。
【００４８】
本発明の第１および第２の態様は、ノードが探索キーを記憶せず、キーデータはツリーの構造体に内在するようなツリー構造体を開示した。
【００４９】
本発明の第３の態様によれば、インデックスおよびデータを有するデータベースに質問
する方法が提供される。この方法において、インデックスは、探索基準に合致するデータを見つけるために探索キーを用いて問合せされる。この方法は以下のことを特徴とする。すなわち、インデックスは決定ノードの階層的構造体であり、構造体は結論セットに到達するまでナビゲートされ、ノードはキーのサブシーケンスを含むことが可能であり、とるべきアクションを定めるために候補キーがそのサブシーケンスと比較されることが可能であり、インデックスのＮ＋１番目のレイヤ内のノードに記憶されるキーの部分は、Ｎ番目のレイヤ内の先行するノードに記憶される部分と無関係である。
【００５０】
本明細書で用いられる場合、（Ｎ＋１）番目のノードにあるキーの部分は、そのキー部分が名目上異なる方式でキーの連続する部分を選択することによっては計算されないという意味で、Ｎ番目のノードにあるキーの部分とは無関係である。
【００５１】
したがって、各ノードはキー全体ではなくキーのサブシーケンスのみを記憶するので、決定ノードを比較的「小さく」維持することができるようなデータベースを提供することが可能となる。この構造体は、パターンマッチングによるデータベースのナビゲーション、挿入および検索を容易にする。
【００５２】
本発明の第４の態様によれば、インデックスおよびデータを有するデータベースが提供される。このデータベースにおいて、インデックスは、探索基準に合致するデータを見つけるために探索キーを用いて問合せされる。この方法は以下のことを特徴とする。すなわち、インデックスは決定ノードの階層的構造体であり、構造体は結論セットに到達するまでナビゲートされ、ノードはキーのサブシーケンスを含むことが可能であり、とるべきアクションを定めるために候補キーがそのサブシーケンスと比較されることが可能である。
【００５３】
拡張パターンマッチング
パターンマッチングのプロセスにおいて、パターンマッチングにおける計算負荷は、照合されるべきパターンの長さの関数であり、特に、文字または記号の短いストリングに対する照合は、長いストリングを照合するよりも計算量的に安価である。
【００５４】
さらに、データベース／インデックスの効率は、キー数が各ノードにどの程度適切に分割されているか、およびシーケンスが問合せ内に現れる可能性がどのくらい高いかにも左右される。
【００５５】
このことは、２つのかなり極端な例を考察することによって最も良く例示される。インデックスが、ある企業が通信を交わしたい顧客および他のエンティティの名前によって編成されていると仮定する。
【００５６】
頻繁に現れるパターンマッチングシーケンスは、インデックス問合せ中に走査されるキーの数を十分には減少させないであろう。例えば、パターンマッチングで用いられるシーケンスが「Ｅ」である場合、これがほとんどのキーに出現する可能性が高いことを考慮すれば、キー数を分割するのにはほとんど役に立たない。
【００５７】
もう１つの極端な例として、まれに出現するシーケンスもまた、ほとんどの問合せで走査されなければならないキーの数を減少させないであろう。したがって、例えば、「ＺＺ」は問合せに現れる可能性が低いため、パターンマッチング問合せに対する良い候補ではない。
【００５８】
本明細書で前述のように、シーケンスに関与する文字が多くなるほど、そのシーケンスがキーに現れる可能性は低くなる。したがって、単一の文字は多数の文字を有するキーに現れる可能性が高いが、４文字の特定のシーケンスは現れる可能性がずっと低い。
【００５９】
理想的な場合には、問合せストリングは、あるノードから到達されるキーの数を実質的に均等に分割するであろう。
【００６０】
ＡＳＣＩＩ文字セットの問題点は、セット内の全２５５文字を用いる適当なシーケンスを見つけるのがしばしば困難なことである。というのは、多くの文字があるけれども、いくつかの文字の現れる可能性は、多くの他の文字の現れる可能性よりずっと高いからである。
【００６１】
しかし、２文字の組合せはまれであり得る。
【００６２】
本発明の第５の態様によれば、データベースのインデックス内にキーまたはその一部を記憶する方法が提供される。この方法において、キーの要素は、それらの要素が取ることができる値のうちの少なくともいくつかのリストを構成する第１のセットから、その第１のセットより小さい第２のセットにマッピングされる。
【００６３】
したがって、キー内に出現し得る相異なる文字の数は減少する。マッピングは一意的ではないが、マッピングが適当に選択される場合、第２のセットの任意の単一文字が出現する可能性を適度に高くすることができ、２個以上の文字の組合せがシーケンスのために用いられ得る。
【００６４】
好ましくは、マッピングは、挿入、削除、または問合せ操作のための決定グラフのナビゲーション前に、キーに適用される。
【００６５】
有利には、元のキー値または変換されたキー値（このキー値は、これを記憶するのに要求される空間に関して、より小さい）のいずれが結論セットに記憶されることも可能である。
【００６６】
本発明の第６の態様によれば、インデックスナビゲーション前に、縮小された値の範囲にキーがマッピングされるデータベースが提供される。
【００６７】
キー圧縮
本明細書で前述のように、いくつかの従来技術のデータベースは、各決定ノードに完全な決定／探索キーを記憶する。これは、キーがそれ自体大きくなり得ることを考慮すると、比較的大きいインデックス構造体を生成し得る。同じくすでに述べたように、本発明の実施形態を構成するデータベースでは、探索キーの一部を決定ノードに記憶することは望ましいかもしれないが、探索キーが各決定ノードに記憶される必要はない。探索キーの一部を記憶するという選択からはなお、高速にナビゲートされ得る比較的コンパクトなデータベース決定ツリーが得られる。しかし、本発明者は、キーはそのネイティブな形態でインデックスに記憶される必要はないことを認識した。したがって、キーは、小さい空間を占める形式に符号化されてもよい。
【００６８】
本発明の第７の態様によれば、データベース内でキーを符号化する方法が提供される。この方法において、キーデータは、キーの記憶空間要件を縮小するように符号化された形態で少なくとも１つの結論セット内に記憶される。
【００６９】
したがって、よりコンパクトな結論セットを提供することが可能である。このデータベースは厳密マッチングをサポートする。
【００７０】
マッピング関数が良好に挙動すること、すなわち、マッピング関数が特定のキーに適用
されるとき、それが常に同じ結果を返すことが重要である。
【００７１】
しかし、マッピングが一意的であることは必要でない。実際、マッピングアルゴリズムが高度の圧縮を与える場合、マッピングが一意的となる可能性は非常に低くなる。
【００７２】
有利には、少なくとも２個の相異なるマッピングアルゴリズムが使用される。相異なるマッピングの使用は、結論セットでの使用に制限され得る。
【００７３】
例えばＣＲＣ３２およびＡｄｌｅｒ３２のような、既知の公表されているマッピングアルゴリズムが、マッピング関数を実施するために使用され得る。
【００７４】
好ましくは、マッピング関数は、インデックス内に保持される相異なるキーの数と少なくとも同じサイズの、正の整数（ゼロを含む）の範囲からの値を返すように構成される。したがって、各キーはアルゴリズムにより別の値にマッピングされる可能性を有し、どのキーも長すぎることはない。
【００７５】
例えば、マッピングは、長さＮバイトのスカラーから次の関数を用いて計算され得る：
［（Ｋ0×３１＾（Ｎ−１））＋（Ｋ1×３１＾（Ｎ−２））・・・＋ＫN-1］  ｍｏｄ
ｕｌｏ  Ｒ
【００７６】
ただしＫNは、キーＫの第ｎバイトの値（０〜２５５）である。Ｒは、インデックスに
保持される相異なるキーの数のサイズより大きい、最小の２のべき乗である。
【００７７】
推奨されるＲの値は以下の通りである：
６５０００個より少ないキーを含むインデックスの場合、２16。
４×１０9個より少ないキーを含むインデックスの場合、２32。
１．８×１０19個より少ないキーを含むインデックスの場合、２64。
【００７８】
有利には、結論セットに記憶されるキー情報は、従来技術のシステムに記憶されるような従来のキーであることも可能であるが、好ましくは、キーの別の符号化バージョンであって、適用されるマッピング関数は決定グラフでキーを符号化するために使用される関数とは異なる。
【００７９】
修飾子
インデックス問合せは多くのキーヒットにつながることがある。問合せから返されるそれぞれの結果は、大容量データ記憶デバイスからの関連データの検索を引き起こし得る。これは通常ハードディスクであるため、問合せから返されるそれぞれの結果ごとにディスクＩ／Ｏ操作が要求される可能性がある。
【００８０】
フェッチされたすべてのデータが必要であるとは限らないかもしれない。
【００８１】
例えば、ある多国籍組織が、ロンドンを拠点とし、かつ特定の給料範囲内にある従業員の数を求めるために、その人員データベースに問合せをしたい場合を考える。居所または給料のみに基づくインデックスは、所与の問合せに対する多くの従業員を返す可能性がある。問合せサイズを縮小するのは、ＡＮＤされた問合せの結果だけである。
【００８２】
このタイプの問合せに対して、インデックス内に複数のキーを記憶することによって、データベースインデックスを修正することが知られている。したがって、キーは、合成あるいは複合キーとみなすことができる。ある候補（すなわち、データベース内のエントリ）が２個のキーに合致する可能性は、ある候補が１個のキーにマッチする可能性に比べて
ずっと小さいため、問合せによって返されるヒットの数は減少し、必要なディスクＩ／Ｏ操作も少なくなる。
【００８３】
キーを互いに連結することによってこのような複合キーを作ることが知られている。簡単に言えば、インデックス作成時に第２の探索基準が第１の探索基準に追加される。しかし、個々のキーはかなり長い可能性もあり、連結キーのインデックスを生成することによりインデックスが実に非常に大きくなってしまう可能性がある。
【００８４】
本出願人は、キーデータがその元の形態で記憶される必要はなく、実際には、大幅に縮小された長さのワードすなわちビットシーケンスにより符号化すなわち表現され得ることを認識した。インデックス内の最初のキーと、連結キー内のあらゆる後続のキーは、このような修正された形態で表現され得る。
【００８５】
本発明の第８の態様によれば、データベースを編成する方法が提供される。この方法において、インデックスキーは、少なくとも１つのキーを含む複合キーであり、１つまたは複数のキーが、圧縮された形態で表現される。
【００８６】
好ましくは、複数のキーが圧縮形態で提供される。
【００８７】
好ましくは、キーは、非圧縮形態から圧縮形態にキーをマッピングすることにより圧縮される。このマッピングは一意的である必要はないが、良好に挙動するものでなければならない。適当なマッピングは、ハッシュアルゴリズムの使用により実行され得る。
【００８８】
相異なるキーが同じ縮小表現により表現され得るというまさにその事実によって、ある問合せが、その問合せに確かにマッチする結果と、その問合せにマッチしない何らかの結果の両方を返すというリスクが存在する。しかし、良好なランダム化ハッシュ符号化が使用されると仮定すると、１つのキーに関するミスマッチの確率は１／２５５であるが、Ｎ個の修飾子に対しては、ミスマッチの確率は（１／２５５）Nとなる。
【００８９】
したがって、誤り率は一般に小さい。
【００９０】
有利には、返されるすべてのヒットは、データを妥当性検査し、誤って返された結果を除去するように検査される。
【００９１】
挿入、削除または検索を実行するとき、新しいキーは、インデックスを構築するために使用されたのと同じキー変換プロセスを用いて圧縮されなければならない。
【００９２】
好ましくは、連結キーの最初の要素の後のそれぞれの追加要素は「修飾子」として表現され得る。各修飾子は好ましくは長さが１バイトのみである。
【００９３】
したがって、本発明を従来技術と比較すると、それぞれ８バイトからなる８個のキー要素を含む従来技術の連結キーは６４バイトを占有する。本発明では、主キーは非圧縮フォーマットで表現されてよく、それにより８バイトを占有するが、７個の追加キーはそれぞれ１バイトの修飾子として表現され得る。したがって全キー長はこの場合たった１５バイトである。
【００９４】
修飾子キーはオプションであり、インデックス問合せ中には、それらのキーのうちの一部または全部が提供されることもあり、全く提供されないこともあり得る。というのは、それらのキーはインデックス構造体のナビゲーションに影響しないからである。修飾子キーに対するヒットのテストは、結論セットを走査するときに実行される。
【００９５】
したがって、理解されるように、本発明のこの態様は、Ｂツリーのような従来のデータベース構造体とともに使用されることも、本明細書の他の箇所に開示されている構造体とともに使用されることも可能である。
【００９６】
追加的に、修飾子は、ノードに関係する情報が、ノード自体により明示的に定義されたりノード自体の内部に含まれたりするのではなく、（本発明の第１の態様の実施形態を構成するインデックスのような）ノードの位置から推論されるようなインデックスとともに使用され得る。
【００９７】
本発明の第９の態様によれば、インデックスが少なくとも１つのキーを含み、１つまたは複数のキーが圧縮形態で表現されるデータベースが提供される。
【００９８】
限定されたキー
本明細書で前述のように、データベースインデックスの効率は、それとともに使用されるキーの特性に大きく左右されることがあり、キー値が連続的に増大または減少する場合に潜在的に非効率的なインデックス付けシステムにつながる。このような無限定キーの例は、現在の時刻とともに絶えず増大する日時キーである。このようなキーがインデックスに追加されると、それにより新しいインデックスの領域が作成される。また、古いキーがインデックスから削除されると、それにより廃用になったインデックスの領域は新しいキー値のために再使用することができないような断片化を生じることがある。無限定キーの使用によりインデックスが不均衡にならないように、インデックス構造体を編成することができれば非常に有利であろう。
【００９９】
本発明の第１０の態様によれば、範囲の限界を表す第１キーと第２キーの間のキーの範囲を有するデータベースをナビゲートする方法が提供される。この方法において、キーは縮小された範囲にマッピングされ、キーの順序がマッピング中に保存されない場合、マッピングされた空間のうち大きい方のキーより大きい空間および小さい方のキーより小さい空間について探索が行われる。
【０１００】
有利には、キーは、キーがデータベース全体に実質的に均等に分配されるように、ハッシュあるいはモジュロ関数により作用される。したがって、例えば、無限定な日時（Ｋ）（これは例えば、１９７０年１月１日以来のミリ秒数としてよい）は、（Ｋ  ｍｏｄｕｌｏ  Ｎ）に変換される。ただしＮは、インデックスに対して選択されたモジュロである。したがって、変換されたキー値は常に範囲０〜（Ｎ−１）に入ることになる。
【０１０１】
好ましくは、キーに適用されるモジュロ値は、インデックス内に保持されるであろう相異なるキー値の最大数以上である。しかし、この条件は必須ではないことは指摘しておかなければならない。
【０１０２】
有利には、結論セット（ツリーインデックスの終端のノード）は、マッピングされていない形態のキーを含む。これは誤りの確率を減少させる。というのは、その場合、探索キーは結論セット内のキーデータと、両方ともそれらのネイティブな形態で比較されることができるため、マッピング誤りを回避することができるからである。
【０１０３】
本発明は、従来のＢツリーまたは他のインデックスに適用され得る。
【０１０４】
本発明の第１１の態様によれば、データベース内で使用するための無限定キーを符号化する方法を含むデータベースが提供される。このデータベースは、各キーが、限定された範囲にキーをマッピングする演算子により処理されることを特徴とする。
【０１０５】
一時キー
データの妥当性または有益性がある一定の時間範囲またはその他の値範囲に制限されるデータを処理することが必要になることがある。従来技術のデータベースでは、このような「一時」データは通常のデータと全く同様に処理され、結果として通常、廃用になった一時キーデータを明示的に削除すること、またはこのような廃用になったキーデータが存在するインデックスのセクションを除去することが必要である。このような操作は非常にプロセッサ集約的であることがあり、データベース内で相当のパフォーマンスオーバーヘッドを被るか、または設計制約を課することがある。
【０１０６】
本発明の第１２の態様によれば、データベース内でキーを管理する方法が提供される。この方法は、キーが、そのキーおよびそれに関連するデータがデータベース内に維持されるべき持続期間を示すデータフィールドを含むことを特徴とする。
【０１０７】
したがって、結論セットの一部または全部は、キーおよびそれに関連する属性が妥当であるとみなされ得る持続期間を示すデータを含むように修正され得る。
【０１０８】
好ましくは、期限切れのキーは結論セットから能動的に除去されるのではなく、いったん期限が切れた後は、新しいデータにより上書きするために利用可能となる。したがって、一時キーを明示的に削除する必要はなく、それゆえ削除プロセスに伴うパフォーマンスオーバーヘッドはない。むしろ、いったんマーカが、データがもはや妥当でないことを示すと、そのデータが占有する空間は再使用のために利用可能となる。
【０１０９】
情報が結論セット内にもはや検出されないであろうデータに対して明示的な日時マーカを提供することは可能であるが、この形式の符号化は、許容できないほど大量の空間を占める可能性がある。本発明の好ましい実施形態では、キーは、その現在のエイジの尺度を与えるエイジユニットと、データおよびキーがもはや妥当でなく上書きのために利用可能となるエイジを示すエイジ限界に関連付けられる。
【０１１０】
好ましくは、エイジユニットは、その長さが単一のエイジユニット内の秒数を表す変数である。エイジ限界は、その後にはキーがインデックスから除去されてもよいエイジユニット数を表す。
【０１１１】
有利には、各結論セットは、そのセット内でいちばん最近に挿入／更新されたエントリの日時スタンプであるエイジベースを含む。結論セットがアクセスされると、各エントリのエイジが計算され、有利にはその計算の結果がエントリエイジフィールドに記憶される。エントリがいつ上書き可能かを判定するために、エントリエイジとエイジ限界の間で比較を行うことが可能である。
【０１１２】
スカラーデータの重複の判定
本明細書において前述のように、従来技術（Ｂツリー）の決定グラフは、キー値およびポインタ情報を保持するリーフブロックへとナビゲートされる。決定インデックスをナビゲートすることは、選択されたキーを見つけるために１回または複数回のディスク入出力操作を必要とすることがある。インデックスが一意的なキー組合せの存在を記録するために使用され、重複組合せが頻繁である場合、インデックスのディスク構造体は、高いパフォーマンスのシステムにとって不適当なことがある。
【０１１３】
本発明の第１３の態様によれば、決定インデックスおよびキーインデックスを有するようなデータベースを編成する方法が提供される。この方法において、キーインデックス内のキーは圧縮された方式で記憶され、キーを用いて決定インデックスに質問する前にその
キーが存在するかどうかを確かめるチェックがキーインデックスに対して行われ得る。
【０１１４】
したがって、直接にキーを求めてインデックス自体を探索する必要性を回避することができるように、キーの存在をインデックスで判定する、メモリに基づく効率的な方法を提供することが可能となる。
【０１１５】
したがって、本発明は、符号化されたキー値を半導体メモリ内に保持することにより、標準的なインデックス構造体を効果的に補足する。キーの存在は、インデックスを探索する前にメモリに対してチェックされる。メモリ内にマッチするエントリが見つかった場合、キーは重複として拒否され、そうでない場合、エントリをインデックスに挿入する試みがなされる。
【０１１６】
効率的でコンパクトな構造体を提供するために、キーインデックスは、ハッシュ関数のような一方向性マッピング関数を使用する。ハッシュ関数または他のマッピング関数の特徴は次の通りである：
【０１１７】
・マッピング関数が同じキー値に対して複数回呼び出された場合には必ず、そのキー内の情報が変更されていないことを条件として、マッピング関数は一貫して同じ値を返さなければならない。
【０１１８】
・２つのキーが等しいとみなされる場合、その２つのキーのそれぞれに対するマッピング関数の呼出しは同じ結果を生成しなければならない。
【０１１９】
・２つの等しくないキーが相異なる値にマッピングされることは要求されないが、等しくないキーに対して異なる結果を提供することはインデックスの効率を改善するであろう。
【０１２０】
ＣＲＣ３２およびＡｄｌｅｒ３２のような公表されているハッシュ符号アルゴリズムは、適当な機能を提供するので、使用され得る。
【０１２１】
キーインデックスの実施態様において、メモリは、４バイトの要素からなる均質な配列として構成され得る。この配列は単位配列として知られている。好ましくは、単位配列内の要素の数は、インデックス構造体内に保持される一意的なキー要素の数の１．１倍以上である。しかし、単位配列は、少なくともインデックスと同じ大きさでありさえすれば十分であるということになる。２つのハッシュ関数ＡおよびＢが、この配列とともに使用される。これらの関数は次のように選択される：
【０１２２】
Ａ（Ｋ）＝Ａ（Ｌ）であるような任意の２つの等しくないキーＫおよびＬに対して、Ｂ（Ｋ）＝Ｂ（Ｌ）となる可能性は低い。
Ｂ（Ｋ）＝Ｂ（Ｌ）であるような任意の２つの等しくないキーＫおよびＬに対して、Ａ（Ｋ）＝Ａ（Ｌ）となる可能性は低い。
【０１２３】
ハッシュ関数Ａは、次式を用いてキーＫに対する単位配列内の要素オフセット（０〜Ｎ）を計算するために使用される：
要素番号＝ＡＢＳ（Ａ（Ｋ））  ｍｏｄｕｌｏ  Ｎ
【０１２４】
ただし、ＡＢＳ（・）は、数の符号なし絶対値を返し、Ｎは単位配列内の要素の数である。
【０１２５】
この関数は、要素関数Ｅ（Ｋ）として知られている。
【０１２６】
単位配列内の各要素はＢ（Ｋ）を記憶する。ただし、その要素オフセットはＥ（Ｋ）により与えられる。キー（Ｋ）は、オフセットＥ（Ｋ）にある要素がＥ（Ｋ）である場合、重複とみなされる。要素が任意の他の値である場合、その重複を判定するためにはインデックス構造体が探索されなければならない。
【０１２７】
キーＫをインデックスに挿入しようと試みる場合、以下のイベントのシーケンスが発生する。まず、Ｅ（Ｋ）が計算される。次にＢ（Ｋ）が計算される。単位配列内のＥ（Ｋ）にある要素がＢ（Ｋ）である場合、挿入は重複Ｋとして拒否される。しかし、単位配列内のＥ（Ｋ）にある要素がＢ（Ｋ）でない場合、その要素はＢ（Ｋ）で上書きされ、キーが重複であるかどうかを判定するためにインデックスに対して探索が行われる。
【０１２８】
単位配列の使用は、キーのリストを保持するのに必要な記憶領域を大幅に縮小する。データベースが１００万エントリを有し、各キーの長さが３２バイトである場合、インデックスをメモリにキャッシュするには３２Ｍｂを超えるメモリを必要とするであろう。しかし、等価な単位配列は、４．４Ｍｂのメモリしか占有しないであろう。
【０１２９】
階層によるインデックスの編成
本明細書に述べられているように、従来技術のインデックスは通常、４個のキーデータからなる１つまたは複数の項目を含むノードを有するツリーグラフを使用する。ツリーグラフ（決定グラフ）は、キー値と、記憶されているデータ構造体へのポインタ情報とを保持するリーフブロック（結論セット）へとナビゲートされる。インデックスをナビゲートすることは、選択されたキーを見つけるために１回または複数回のディスク入出力操作を必要とすることがある。ディスクアクセス操作は一般に、インデックスの最大のパフォーマンスオーバーヘッドを表す。というのは一般に、ディスクアクセスはメモリアクセスに比べて遅く、データボトルネックが発生することがあるからである。このオーバーヘッドを軽減するため、インデックスは分割されることが多く、各分割を異なる物理ディスクに割り当てることにより、ディスクＩ／Ｏがインデックス操作中にオーバーラップされて、インデックスの全体のスループットを増大できるようにしている。インデックスを細分するこの方法は、インデックス分割のフラットな一次元的見方を提示する。
【０１３０】
本発明の第１４の態様によれば、インデックスがその作業負荷の一部を１つまたは複数の他のインデックスに代行させ得るような、階層的構造体に分割されたデータベースインデックスが提供される。
【０１３１】
好ましくは、代行インデックスはそれ自体、その作業負荷の一部を１つまたは複数の他のインデックスに代行させ得る。
【０１３２】
このようなインデックスの階層に参加するインデックスは、ある範囲のサブキーを担当する。このようなインデックスは、別のインデックスに代わってあるサブ範囲のキーを処理している場合、それは代行インデックスとして知られ、そのキーサブ範囲はキー目録(manifest)として知られている。
【０１３３】
好ましくは、インデックスのキー目録は、キー内の連続するバイトのサブセットを、可能な値の連続する範囲に制限することにより定義される。インデックスキー目録に適合しないキーを挿入、削除もしくは更新または探索しようとするいかなる試みもインデックスにより拒否され、それ以外の試みの場合には、キー操作はインデックスまたはその代行インデックスの１つにより処理される。階層は、各インデックスが０個、１個または複数個の代行インデックスを有し得るように構成されてもよいが、各インデックスが他の１つのインデックスの代行であるだけであってもよい。
【０１３４】
インデックスが１つまたは複数の代行インデックスを有する場合、キーを挿入、更新または削除する操作は、適当なキー目録を有する代行インデックスに提出される。いずれの代行インデックスも適当なキー目録を有していない場合、操作はインデックス自体により処理されなければならない。
【０１３５】
インデックスが１つまたは複数の代行インデックスを有する場合、キー範囲を探索する操作は、適当なキー目録を有するすべての代行インデックスに提出され、探索はインデックス自体により行われる。探索代行インデックスからの問合せ結果は、インデックス自体の探索からの結果と組み合わされる。すべての問合せは同時に実行可能である。したがって、インデックス構造体を、その中のさまざまなサブインデックスにわたり作業が細分され得るように修正することが可能である。各サブインデックスは、関連する物理記憶デバイスを指すことが可能であることにより、複数の並行したディスクアクセスが発生することが可能となる。これは、ディスクボトルネックを減少させ、全体としてデータベースのより高速な操作を可能にする。
【発明を実施するための最良の形態】
【０１３６】
以下、本発明は、添付図面を参照し、例を用いてさらに説明される。
【０１３７】
図１は、本発明の実施形態を構成するインデックスと、データ記憶装置とを組み込んだデータベースを図式的に示す。インデックス２は、決定グラフ４および複数の結論セット６、８、１０、１２および１４を備える。各結論セットは、決定グラフを通って、１つの、かつただ１つのパスにより到達される。しかし、個の場合、各結論セットは、データ記憶装置１６内の関連するエントリを指す。
【０１３８】
図２は、概括的に２０で示される決定グラフの構造を図式的に示す。決定グラフは原点２２から始まる。決定グラフを通るすべてのナビゲーションは原点から出発しなければならない。原点は、決定グラフ内のさらなるノードまたは結論セットを指す０個（例えば、データベースが新規であるとき）、１個または２個の決定ポインタを有し得る。他のそれぞれの決定ノードは、０個、１個または２個の決定ポインタを含むことが可能であり、それぞれの決定ポインタは別の決定ノードまたは結論セットのいずれかを指す。決定ノードにある決定ポインタを本明細書では「ローポインタ」および「ハイポインタ」と呼ぶことにする。
【０１３９】
決定グラフ内の任意の決定ノードにある決定ポインタは、同じ決定グラフ内の他の１つの決定ノードか、または単一の結論セットのいずれかのみを指すことができる。任意の決定グラフノードは厳密に、同じ決定グラフ内の他の１つの決定ノードによって、または原点によって指されなければならない。同様に、任意の結論セットは厳密に、決定グラフ内のただ１つの決定ノードによって指されなければならない。したがって、任意の結論セットは、原点から決定グラフを通り単一かつ一意的なパスをたどることによってのみ到達されることができる。この一意的パスはナビゲーションパスとして知られる。
【０１４０】
図３は、概括的に４０で示される決定ノードの論理構造をさらに詳細に図式的に示す。決定ノードは、ローポインタタイプ、ローポインタ、ハイポインタタイプおよびハイポインタを有する。ローポインタタイプ４１は、ローポインタ４２の目的を示す。ローポインタタイプ４１は、ローポインタ４２が決定ノードまたは結論セットのいずれを指すかを示すことができる。ローポインタ４２は、それが指す決定ノードまたは結論セットのアドレスを与える。ポインタが存在しないことを示すためにゼロ値を挿入することができる。同様に、ハイポインタタイプ４４は、ハイポインタ４５が決定ノードまたは結論セットのいずれを指すかを示すことができる。ハイポインタは、それが指す決定ノードまたは結論セ
ットのアドレスを示す。こちらも、ポインタが存在しないことを示すためにゼロ値を使用することができる。これにより、決定グラフの「ツリー」状構造が、データプロセッサおよびそのメモリを用いて表現され記憶されることが可能となる。
【０１４１】
図４は、結論セットの構造を図式的に示す。結論セットは、複数のキーおよび属性エントリ６０、６２、６４、６６および６８を備え、それぞれ互いに結論セット内の次のエントリのアドレスを与える有向リンクにより連結される。図５は、結論セット内の各エントリの論理構造を図式的に示す。エントリは、３個のフィールド、すなわちリンクフィールド８０、キーフィールド８２および属性フィールド８４からなる。リンクフィールドは、次の結論セットエントリを指す。ゼロ値で、それ以上エントリがないことを示すことができる。キーフィールド８２は、キーの厳密な値を保持し、属性フィールド８４は、そのキーに関連する属性、例えばキーフィールド８２に対応するデータのアドレスを保持する。インデックスの構成要素を定義したので、次にインデックスを使用しナビゲートする方法について論ずる。
【０１４２】
インデックスに沿ってナビゲートするため、ナビゲーションパスに沿って訪問される各決定ノードはキー内の１つのビットまたはビット群を参照する。このビット群は「決定群」として知られる。決定群内のビット数は、単一ビットとキー内の全ビットの間の任意のビット数を含むように設定可能である。
【０１４３】
決定群が取る可能な値の範囲は「決定範囲」として知られ、決定範囲最小値および決定範囲最大値によって限定される。決定範囲最小値は、決定群で全ビットがセットされたものより小さい任意の値であることが可能であり、同様に決定範囲最大値は、決定範囲最小値より大きい任意の値であることが可能である。便宜上、最小値および最大値は、符号なし絶対値記数法で表され得る。
【０１４４】
各決定ノードは関連する決定値を有する。決定値は、その決定ノードを通ってナビゲートするときに、ローポインタまたはハイポインタのいずれがたどられるかを定める。キー内の検査された決定ビット群の値が決定値より大きいときにはハイポインタが使用され、そうでないときはローポインタが使用される。
【０１４５】
決定値の比較は、有利には、符号なし絶対値記数法を用いて実行される。決定値は、システム管理者、設計者またはオペレータにより選択される任意の値に設定され得るが、有利には、次のうちの１つから選択される：
１．決定群のすべての可能な値の数学的メジアン。
２．決定群のすべての期待値の数学的メジアン。
３．決定群のすべての期待値の数学的平均。
４．インデックスの作成時に指定される任意値。
５．現在の決定値（すなわちいちばん最近に使用された決定値）とそれに先行する決定値のメジアン。
【０１４６】
訪問される決定ノードにおける決定群の選択は、有利には（しかし必須ではない）、次のうちの１つまたは複数に基づくことが可能である：
ｉ．決定群はすべての決定ノードについて同じであり得る。
ｉｉ．決定群は決定ノードへの訪問ごとに変化し得る。
ｉｉｉ．決定群は、前の決定ノードからの決定値が現在の決定群の決定範囲最大値または決定範囲最小値に達するかまたは近づくときに、変化し得る。
ｉｖ．決定群は、連続するノード間で決定値が１単位未満だけ、または他の何らかの所定しきい値未満だけ変化するときに、変化し得る。
【０１４７】
決定ノードにある決定群のサイズは、１つまたは複数のパラメータに基づいて定められ得る。決定群のサイズは、例えばすべての決定ノードに対して固定されてもよい。しかし、このサイズは、新しい決定群が選択されるときに前の決定群から増大してもよく、あるいはこのサイズは、新しい決定群が選択されるときに前の決定群から減少してもよい。
【０１４８】
決定ノードにおける、キーに対する決定群の位置は、次のうちの１つまたは複数に基づくことができる。決定群の位置は、すべての決定ノードに対して固定されてもよい。追加的におよび／または別法として、決定群の位置は、新しい決定群が選択されるときに前の決定群からの固定オフセットであってもよい。
【０１４９】
有利には、インデックスが範囲マッチングによるキー検索をサポートすることになる場合には、さらなる制約が課され得る。特に、最上位ビットが、原点のような階層的に上位のノード内に含まれなければならない。その場合、キー全体の内部における決定群の桁位置は、桁位置が単調に減少するように変化すべきである。
【０１５０】
インデックスがどのようにナビゲートされ得るかについていくつかの例を考察することは有利である。図６は、厳密マッチング探索で４バイトキーがどのようにナビゲートされ得るかを示す。この例では、キーはＡＳＣＩＩ符号化で記憶され、各キーに対して示されている数字は、１６進記数法でのその値を示す。この例では、各決定群は４ビットの固定サイズを有する。決定群は、訪問されるそれぞれの新しいノードにおいて、次の下位４ビットに順次移動される。この例では、最上位ビットは０で指定され、次に上位のビットは１であり、次に上位のビットは２であり、以下同様である。さらに、簡単のため、あらゆるノードで適用される決定値は４である。したがって、決定群が値０、１、２、３または４を有する場合、グラフは左にトラバースされる。しかし、決定群が５〜１５の範囲の値を有する場合、グラフは右にトラバースされる。
【０１５１】
図６に示すように、いくつかの名前がデータベースに提示される。これらの名前すなわちキー値は、Ｆｒｅｄ、Ｊｏｈｎ、Ｂｉｌｌ、Ｚｏｅ、ＥｒｉｃおよびＰｅｔｅである。各キーに等価な１６進数が名前の隣りに配置されている。これから説明されるナビゲーションプロセスは、挿入、削除またはマッチングに適している。
【０１５２】
最初に、キーは第１の決定ノード１００に提示され、そこで、ビット０〜３がテストされる。各１６進ワードは１バイトを占有するため、明らかにビット０〜３はキーの最初の文字に対応する。したがって、Ｆｒｅｄ、Ｊｏｈｎ、ＢｉｌｌおよびＥｒｉｃはすべて「４」で始まるので、それらのキーは枝１０２に沿って左方へ伝搬し第２レベルのノード１０４に至る。しかし、ＺｏｅおよびＰｅｔｅは両方とも最初の４ビットが０〜３の範囲外に出るため、結果としてそれらのキーはハイポインタパス１０６に沿ってノード１０８へと伝搬する。
【０１５３】
ノード１０４および１０８は決定グラフの第２レベルを占有し、結果としてそれらの決定は、キー内の次の４ビットに基づく。これは、１６進表現において次の文字を見ることに対応する。したがって、ノード１０４で、Ｂｉｌｌは、キー内のビット４〜７が値２を符号化しているため、ローレベルポインタ１１０に沿って後続ノード（図示せず）に渡され、一方、Ｆｒｅｄ、ＪｏｈｎおよびＥｒｉｃは、それらのキー内のビット４〜７が１６進記数法でそれぞれ値６、Ａおよび５を符号化しているため、ハイレベルポインタ１１２に沿ってさらなるノード（図示せず）に渡される。同様に、ノード１０８で、キーＰｅｔｅは、その中のビット４〜７が値０を符号化しているため、ローレベルポインタ１１４に沿って渡され、一方、Ｚｏｅは、ビット４〜７が値「Ａ」を符号化しているため、ハイレベルポインタ１１６に沿って渡される。このプロセスは、キーが結論セットに到達するために十分なだけ探索されるまで繰り返すことができる。
【０１５４】
図７は、範囲マッチング探索で４バイトキーがどのようにナビゲートされ得るかを図式的に示す。図６と同様に、キーはＡＳＣＩＩ符号化で記憶され、各キーに対するＡＳＣＩＩ値は１６進記数法でのその値を示す。
【０１５５】
この例では、決定群は８ビットの固定サイズを有する。決定群は、決定範囲が尽くされたとき、すなわち、決定値が決定範囲のいずれかの境界に到達したときにのみ、次の下位８ビットに移動される。この例では、図６に示した例と同様に、最上位ビットはビット０で指定され、次に上位のビットは１であり、などとなる。あらゆるノードにおける決定範囲は、ＡＳＣＩＩフォーマットで表現されたすべての数字および大文字をカバーするために、１６進で３０〜５０である。あらゆるノードにおいて新しい決定群のために使用される決定値は、１６進で４８であり、その後、その同じ群に対してそれぞれの後続ノードにおいて、同じ決定群の前の決定値の平均であるように変更される。前の決定値が１つだけの知られている場合、直前に左または右のいずれにナビゲートしてきたかに応じて、決定値範囲の最小限界または最大限界が使用される。
【０１５６】
前の例と同じキーを使用すると、キーは第１ノード１１８に提示され、第１ノード１１８は、最初の８ビットすなわち０〜７を検査し、それらを決定値４８（１６進）と比較する。図示したキーの場合、Ｆｒｅｄ、ＢｉｌｌおよびＥｒｉｃはローポインタに沿ってノード１２２に進み、一方、Ｊｏｈｎ、ＺｏｅおよびＰｅｔｅはハイポインタ１２４に沿ってノード１２６に進む。
【０１５７】
ノード１２２で、決定値を変更することが必要となる。この新しい決定群のために使用される決定値は、同じパスに沿って到達される前の決定群のメジアン値に変更される。この場合のように、前の決定値が１つだけ知られている場合、決定値範囲の最小または最大限界が使用される。ノード１２２にはローポインタ１２０によってナビゲートされたことを考慮すると、決定範囲の下限が使用される。
【０１５８】
したがって、新しい決定値を計算するためには、３０（１６進）〜４８（１６進）の範囲内の数のメジアンを求めることが要求される。明示的には、この数の群は３０、３１、３２、３３、３４、３５、３６、３７、３８、３９、３Ａ、３Ｂ、３Ｃ、３Ｄ、３Ｅ、３Ｆ、４０、４１、４２、４３、４４、４５、４６、４７および４８である。これから、メジアン値は３Ｃであることがわかる。これを決定値として設定すると、Ｆｒｅｄ、ＢｉｌｌおよびＥｒｉｃはすべてハイポインタ１２７に沿って次のノード（図示せず）に進む。次のノードの決定値は、３Ｃ（１６進）から４８（１６進）までにわたる範囲のメジアン値となるであろう。
【０１５９】
同様に、ノード１１８からハイポインタ１２４に沿って到達されるノード１２６は新しい決定値を計算しなければならないが、この場合それは４Ｃ（１６進）となる。このノードでキーを適用すると、Ｊｏｈｎは、値４Ａを含み、これは決定値４Ｃより小さいため、左（ローポインタ）に進む。一方、ＺｏｅおよびＰｅｔｅは、それぞれ値５Ａおよび５０を有し、これらは決定値４Ｃより大きいため、右側（ハイポインタ）に進む。
【０１６０】
探索のもう１つの例は、文字探索に関して見ることができる。つまり、探索は以下の基準を用いて実行される：
・ＡＳＣＩＩ文字キーに関する厳密マッチインデックスで、各文字は８ビットを占有し、「Ａ」〜「Ｚ」の範囲にのみある。
・８ビットの固定された決定群。
・決定グラフの原点は、上位８ビット（第１文字）。
・決定群は、各決定ノードごとに８ビット（１文字）ずつ進む。
【０１６１】
「Ａ」および「Ｚ」に対するＡＳＣＩＩ符号はそれぞれ６５および９０である。したがって、この群に対する理に適った決定値はメジアン値（すなわち７８）である。
【０１６２】
この例では、決定群は、新しい決定ノードに到達するたびに１文字（８ビット）ずつ進む。いずれのポインタをたどるかを決めるために、キー内の決定群内のビットの値と、固定された決定値（７８）との比較が行われる。
【０１６３】
より洗練された手法は、新しい決定ノードへのそれぞれの移動ごとに決定値を変更することを含む。例えば、決定群の決定範囲は、決定範囲最小値および決定範囲最大値、すなわちそれぞれ６５〜９０によって制限される。次の決定ノードに移動すると、オペレータは、現在の決定値と前の決定値のメジアンを使用することにより新しい決定値を選択することを選び得る。これが新しい決定群であり、前の決定値が利用可能でないときには、決定範囲の最小値または最大値（それぞれローポインタまたはハイポインタのいずれをたどったかによって決まる）を使用し得る。新しい決定群の選択は、決定値が１または他の何らかのあらかじめ定義されたしきい値未満だけ変化したときに行われ得る。決定値がどのように変化するかの例を以下に示す。
【０１６４】
キー内の決定群は値８２を有する。新しい群に対する開始決定値は７８である。決定範囲は６５〜９０である。決定群は、決定値が１未満だけ変化したときに新しい群が選択されるように設定されている。
【０１６５】
【表１】
2008071362.tif 000003
【０１６６】
範囲マッチングによるキー検索をサポートすることが要求されないインデックスは、それが要求されるインデックスほど厳しく制約されないことに留意すべきである。特に、範囲マッチングをサポートすることが要求されないインデックスは、その原点で任意の決定群を有することが可能であり、決定群の位置を任意に変更可能であり、また決定値が決定範囲限界、すなわち決定範囲の最大値および最小値に近づいたとき（これは、システム設計者により定義されてもよく、また、ユーザまたは何らかの管理機能により選択されてもよい）、または決定値があらかじめ選択された量未満だけ変化したときに決定群を任意に変更することも可能である。
【０１６７】
候補キーを挿入、削除または検索する目的でナビゲーションパスをトラバースするとき、候補キーの決定群は、訪問される各決定ノードにおいて、決定ノードの決定値と比較され、ローポインタまたはハイポインタをたどって次の決定ノードまたは結論セットに進む。結論セットに到達すれば、ナビゲーションパスに沿った行程は完了する。ナビゲーションパスに沿った行程はまた、決定群の値が、存在しない決定ポインタの使用を示している
ときにも完了する。
【０１６８】
結論セットは、一連のキーおよび関連する属性からなる。結論セット内に含まれるキーの数は、次のうちの１つまたは複数の組合せによって決められる上限により制限される：
１．固定された限界。
２．インデックスが作成されるときに指定される限界。
３．インデックスの有効期間にわたり指定可能な限界。
４．インデックス増大の関数として変動する限界。
【０１６９】
図８は、キー（Ｋ）を属性（Ｑ）とともに挿入する手続きを示す。手続きは、ステップ１５０から始まり、ここではインデックスにその原点から入る。デフォルトすなわち初期決定群ＤＧは設計者により設定される。開始決定値ＤＶ0を計算するためのアルゴリズム
が実施される。次に制御はステップ１５２に移り、キー内の決定群が決定値より大きいかどうかをテストする。テストが満たされる場合、制御はステップ１５４に移り、ハイポインタＨＰが検査され、新しい決定値ＤＶ1が作成される。
【０１７０】
ステップ１５４から制御はステップ１５６に移り、ポインタ（これがハイポインタであるかローポインタであるかにかかわらず）が存在することを確かめるチェックが実行される。同様に、ステップ１５２が、キー内の決定群が決定値より大きくないことを示している場合、制御はステップ１５８に移り、ローポインタが検査され、新しい決定値ＤＶ1が
作成される。制御はステップ１５８からステップ１５６に移る。ポインタが存在する場合、ステップ１５６から制御はステップ１６０に移る。ステップ１６０は、ポインタがさらなる決定ノードを指しているかどうかを確かめるテストを行う。ポインタが決定ノードを指している場合、制御はステップ１６２に移り、次の決定ノードにテストを進める。ステップ１６２から制御はステップ１６４に移り、決定群が変更されるべきかどうかを確かめるテストを実行する。このテストへの答えがＹＥＳである場合、制御はステップ１６６に移り、上述の基準に従って新しい決定群の値を計算する。その後制御はステップ１６４または１６６のいずれかからステップ１５２に戻る。
【０１７１】
ステップ１５６が、ポインタが存在しないと判定した場合、制御はステップ１７０に移り、新しい結論セットの作成を引き起こした後、ステップ１７２に移り、新しい結論セットを指すようにポインタを更新する。その後、制御はステップ１７４に移り、キーおよびその属性を結論セットに追加する。
【０１７２】
さらに、ステップ１６０でポインタが決定ノードを指していない場合、それは結論セットを指していなければならず、制御はステップ１７６に移り、関連する結論セットへのジャンプが行われる。そこからステップ１７４に進み、キーおよびその属性が結論セットに追加される。
【０１７３】
ステップ１７５で、結論セットがそのサイズ限界を超えたかどうかを確かめるテストが行われる。結論セットが大きくなりすぎている場合、制御は、キー挿入手続きからの出口を表すステップ１７８に移るが、結論セットがそのサイズ限界に達している場合、制御はステップ１８０に移り、ポインタのない新しい決定ノードを作成する。ステップ１８０から制御はステップ１８２に移り、前の決定ノードのポインタを、旧結論セットではなく新しい決定ノードを指すように更新する。その後、制御はステップ１８４に移り、旧結論セットＣＳ（Ｓ）が空であるかどうかを確かめる検査を行う。旧結論セットＣＳ（Ｓ）が空でない場合、制御はステップ１８６に移り、結論セットＣＳ（Ｓ）内の最初のキーおよび属性エントリに進み、このエントリが配置されるべき新しい結論セットを見つけるためにインデックスを再ナビゲートする。いったんエントリが結論セットに再配置されると、ステップ１８８でそのエントリはその現在の結論セットＣＳ（Ｓ）から除去される。その後
、制御はステップ１８４に戻り、結論セットＣＳ（Ｓ）が空になるようなときまでプロセスは繰り返される。その後、制御は、キー挿入手続きからの出口点を表すステップ１９０に移る。
【０１７４】
こうして一般に、キーおよびその関連する属性をインデックスに挿入する手続きは、挿入されるべきキーに対する決定パスに沿ったナビゲーションを必要とする。ナビゲーションパスが結論セットに到着することなく終了する場合、新しい結論セットが作成されなければならず、決定ポインタはその新しい結論セットを指すように更新されなければならない。新しい決定ポインタは、決定グラフにおいて、決定グラフのトラバースが終了した点に配置されなければならない。しかし、ナビゲーションパスが結論セットで終了する場合、キーおよびその属性はこの結論セットに挿入される。結論セットのそれぞれの修正は、そのセットのサイズを変化させる。したがって、新しいキーが結論セットに挿入され、これによりそのセットがその上限を超えたか、または超えることになる場合、新しい決定ノードが作成されなければならない。新しい決定群および／または決定値は、新しい決定ノードに関連付けられなければならず、フルの結論セットを以前に指していた決定ポインタは新しい決定ノードを指すように補正されなければならない。その後、旧（今はフルの）結論セットからのあらゆる項目が、インデックスに沿ったナビゲーションパスをたどって、１つまたは複数の新しい結論セットに再挿入されなければならない。
【０１７５】
データベース内のデータは時間とともに発展し、この発展はキーおよびデータの削除を含むであろう。その削除の理由は、データがデータベースにとってもはや関連性がないか、または、データベースの「現行」バージョンが無関係または廃用になったデータで混乱しないようにする保管の目的で除去される必要があるかのいずれかである。図９は、キーを削除する手続きを図式的に示す。ステップのうちのいくつかは図８に関して説明したものと同一であるので、これらのステップには同じ参照番号が与えられている。したがって、ステップ１５０〜１６６は、すでに説明したものと同一である。ただし、ステップ１５６で行われるテストが、ポインタが存在しないことを示している場合、制御は、削除手続きからの出口を表すステップ２００に移る、という点が例外である。
【０１７６】
ステップ１６０におけるテストが、ポインタが決定ノードを指していない（キーを挿入する手続きの場合にそうであったように）と判定している場合、ステップ１６０は制御をステップ１７６に移す。ステップ１７６から制御はステップ２０２に移り、結論セットＣＳ（Ｓ）が空であるかどうかを確かめるテストが実行される。結論セットが空である場合、制御は、手続きからの出口を表すステップ２０４に移り、そうでない場合、制御は、結論セット内のエントリ全体の走査を実施するステップ２０６に移る。走査は、結論セット内の最初のキー（Ｌ）から始まる。その後、制御はステップ２０８に移り、キー（Ｌ）が削除キーに等しいかどうかを確かめるテストが行われる。等しい場合、制御はステップ２１０に移り、キー（Ｌ）およびその属性が結論セットから削除される。ステップ２１０から制御はステップ２１４に移り、キー（Ｌ）が結論セット内の最後のキーであるかどうかを確かめるテストが行われる。また、制御は、ステップ２０８から、キー（Ｌ）が最後の削除キーと同じでない場合にもステップ２１４に移る。その後、制御はステップ２１６に移り、次のキーが選択された後、制御はステップ２０８に移る。そうでない場合、制御はステップ２１４から、この手続きの出口を表すステップ２１８に移る。
【０１７７】
したがって一般的に言えば、キーおよびその関連する属性をインデックスから削除することは、削除されるべきキーに対するナビゲーションパスに沿ったナビゲーションを必要とする。ナビゲーションパスが結論セットに到着することなく終了する場合、キーはインデックス内に存在しないとみなされる。しかし、ナビゲーションパスが結論セットで終了する場合、削除されるべきキーに厳密に等しいすべてのキーを求めて、結論セット全体で走査が開始されなければならない。次に、これらのキーおよびそれらに関連する属性が結
論セットから除去される。
【０１７８】
図１０は、キーの厳密な問合せを行い、その結果を返す手続きを示す。この手続きは、キーを削除する手続きと非常に多くの類似点を共有し、ステップ１５０〜２０６は図９を参照して説明した通りである。しかし、追加ステップ１５１がステップ１５０と１５２の間に挿入され、このステップでは、結果セット（Ｒ）が空状態にリセットされる。結論セットまでのインデックスのナビゲーションの後、ステップ２０２で、制御はステップ２０６に移り、結論セット全体の順次走査を開始する。ステップ２０６から制御はステップ２３０に移り、現在検査中のキー（Ｌ）が探索キーに等しいかどうかを確かめるテストが行われる。ＹＥＳである場合、制御はステップ２３２に移り、そうでない場合、制御はステップ２３４に移る。ステップ２３２で、キーおよびその属性が探索問合せ結果リスト（Ｒ）に追加されて、その後、制御はステップ２３４に移る。ステップ２３４は、現在検査中のキーが結論セット内の最後のキーであるかどうかを確かめるテストを行う。ＮＯである場合、次のキーが検査され、制御はステップ２３０に移る。キーが最後のキーである場合、制御はステップ２３４から、このルーチンからの出口を表すステップ２３６に移る。
【０１７９】
図１１は、最小キー値（Ｉ）および最大キー値（Ａ）を有する範囲問合せを実行し、その結果（Ｒ）を返す手続きを図式的に示す。手続きはステップ３００から始まり、ここでは結果セット（Ｒ）がヌルすなわち空状態にリセットされる。その後、制御はステップ３０２に移り、決定群および決定値が計算され、そこから制御はステップ３０４に移り、範囲問合せにマッチする結果を見つけるためにインデックスがトラバースされる。インデックスをトラバースする手続きは図１２にさらに詳細に示される。この手続きはステップ３５０から始まり、その開始ノードから手続きに入る。その後、制御はステップ３５２に移り、最小キーが決定値より小さいまたは決定値に等しい（または省略）かどうか、かつ、最大キーがその関連する決定値より大きい（または省略）かどうかを確かめるテストが行われる。このテストの結果が、両方の条件が満たされているようなものである場合、制御はステップ３７０に移り、そうでない場合、制御はステップ３５４に移る。ステップ３７０は、ローポインタが設定されているかどうかを確かめるチェックを行う。設定されている場合、制御はステップ３７２に移り、ローポインタが結論セットを指しているかどうかを確かめるチェックが行われる。ＹＥＳである場合、制御はステップ４００に移る。ＮＯである場合、制御はステップ３７４に移り、決定群および決定値が再計算され、ポインタを介して到達されるノードからインデックスをトラバースするために使用される。手続きは自分自身を呼び出す能力を有し、したがって再帰的である。その後、制御はステップ３７６に移り、ハイポインタが存在するかどうかを確かめるチェックが行われる。ＮＯである場合、制御は、出口を表すステップ３７８に移る。ＹＥＳである場合、制御はステップ３９０に移り、ハイポインタが結論セットを指しているかどうかを確かめるテストが行われる。ＹＥＳである場合、制御はステップ４００に移るが、ハイポインタが結論セットを指していない場合、制御はステップ３９２に移り、新しい決定群および決定値が計算され、新しいノードを開始ノードとしてインデックスのさらなるトラバースが実行される。
【０１８０】
手続きの最初の近くに戻ると、ステップ３５２が制御をステップ３５４に移した場合、ステップ３５４は、最小キー値および最大キー値の両方が決定値より小さいまたは決定値に等しいかどうかを確かめるテストを実行する。その通りである場合、制御はステップ３５６に移り、そうでない場合、制御はステップ３５８に移る。ステップ３５６は、ローポインタが存在するかどうかを確かめるテストを実行し、存在しない場合、制御は、手続きからの出口を表す３５７に移り、そうでない場合、制御はステップ３６０に移る。ステップ３６０は、ローポインタが結論セットを指しているかどうかを確かめるテストを行う。ＹＥＳである場合、制御はステップ４００に移る。そうでない場合、制御はステップ４０２に移り、決定群および決定値を再計算して、トラバース手続きを再帰的に呼び出す。ステップ３５８に戻って、ハイポインタが存在するかどうかを確かめるテストが実行され、
ＹＥＳである場合、制御はステップ３６２に移り、そうでない場合、制御は、手続きからの出口を表すステップ３６４に移る。ステップ３６２は、ハイポインタが結論セットを指しているかどうかを確かめるテストを実行し、ＹＥＳである場合、制御はステップ４００に移る。そうでない場合、制御はステップ３６４に移り、新しい決定群および決定値を計算し、これらの新しい値から開始して、インデックスのさらなるトラバースが実行される。
【０１８１】
ステップ４００は、結論セット（Ｓ）が空であるかどうかを確かめるテストを実行し、ＹＥＳである場合、制御は、手続きからの出口を表すステップ４０４に移る。結論セットが空でない場合、結論セット内のエントリの順次走査が、ステップ４０６から出発して開始され、結論セット内の最初のキーが選択される。その後、制御はステップ４０８に移り、キー（Ｌ）が最小キー値および最大キー値により定義される範囲内にあるかどうかを確かめるテストが実行される。テストの結果が「ＹＥＳ」である場合、ステップ４１０で、キーおよびその属性が結論セット（Ｓ）に追加されるが、ステップ４０８のテスト結果が否定的である場合、制御はステップ４１２に移り、現在考慮中のキーが結論セット内の最後のキーであるかどうかを確かめるテストが行われ、その通りである場合、制御は、手続きからの出口を表すステップ４１４に移る。ステップ４１０もまた制御をステップ４１２に移す。ステップ４１２のテストが、考慮中のキーが最後のキーでないと判定している場合、ステップ４１６で、結論セット内の次のキーが選択され、制御はステップ４０８に戻る。
【０１８２】
したがって一般的に言えば、オプションの最小探索キー値およびオプションの最大探索キー値を用いた範囲マッチによってキーおよびそれらの範囲属性を検索することは、最小探索キーおよび最大探索キー内の決定群ビットを各決定ノードにおける決定値と継続的に比較して、決定グラフの原点から再帰的にトラバースすることを必要とする。決定群内の最小探索キービットの符号なし絶対値が決定値より小さいか、または決定値に等しく、かつ決定群内の最大探索キービットの符号なし絶対値が決定値より大きい場合、第１に、最小探索キーを用い、最大探索キーを省略して、ローポインタから到達される決定グラフをトラバースするアクションがとられる。そして第２に、最大探索キーを用い、最小探索キーを省略して、ハイポインタから到達される決定グラフをトラバースするアクションがとられる。
【０１８３】
決定群内の最小探索キービットおよび最大探索キービットの符号なし絶対値が両方とも決定値より小さいか、または決定値に等しい場合、最小探索キーおよび最大探索キーの両方を用いてローポインタから到達される決定グラフのトラバースが実行される。決定群内の最小探索キービットおよび最大探索キービットの符号なし絶対値が両方とも決定値より大きい場合、最小探索キーおよび最大探索キーの両方を用いて、ハイポインタから到達される決定グラフのトラバースが実行される。
【０１８４】
複数回の反復された決定グラフのトラバースが要求されることは明らかである。トラバースから生じるすべてのナビゲーションパスが結論セットに到着することなく終了する場合、マッチするキーがインデックス内に存在しないとみなされる。結論セットで終了するナビゲーションパスに対しては、結論セット内のすべてのキーにわたる走査が実行され、探索範囲内の要求される属性にマッチするすべてのキーが探索結果として返される。
【０１８５】
データプロセッサおよび記憶システム内でのデータベースの実施の一部として、結論セットのサイズが記憶デバイスブロック転送サイズの整数倍でなければならないとすることは、必須ではないが有利である。これは、物理メモリの最適な使用法を提供する。また、決定グラフが、記憶デバイスブロック転送サイズの整数倍であるサイズのブロックに分割されることもまた、必須ではないが有利であり、これは、決定ブロックがフルになったと
き、新しいブロックが作成され、新しい決定ポインタが適宜新しいブロックを指すことができるという利点を有する。
【０１８６】
データベースの高速動作を達成するため、決定グラフは全体として、または部分的に、使用時にデータ処理システムの半導体メモリ内に保持されることにより、ディスクアクセスに関連する時間オーバーヘッドを避けることが有利である。さらなる改善として、結論セットが半導体メモリ内に記憶されること、または少なくとも、いったん結論セットが識別された後は、結論セットの順次走査を素早く実行することができるように、結論セットが半導体メモリ内にスワップされることもまた好ましい。
【０１８７】
すべてのキータイプの範囲マッチングのための最適な構成は、固定された決定値０を有する１ビットの決定ビット群を使用することである。原点における決定群は最上位ビットであり、決定群は、訪問される決定ノードごとに１ビットずつ（最下位ビットへ向かって）進む。数値または日時の厳密キーマッチングの場合、最適なビット構成は、固定された決定値０を有する１ビットの決定ビット群を使用することであると思われる。原点における決定群は最下位ビットであり、決定群は、訪問される決定ノードごとに１ビットずつ（最上位ビットへ向かって）進む。ＡＳＣＩＩ系キーの探索の場合、厳密マッチングのための最適なビット構成は、８ビットの決定群を使用することである。最適な決定値は、期待される文字の範囲に左右されるであろう。
【０１８８】
パターンマッチング
これまでの図を参照して説明したデータベース構造体は、決定ノードが何らのキーデータも含まないような構造体に関するものである。しかし、１つまたは複数のノードが部分的なキーシーケンスを含むようにデータベース構造体を修正することが可能である。これは、パターンマッチングによるスカラーデータのインデックス付けおよび検索を容易にする。ツリー構造は依然として従来技術のデータベースに比べて小さいが、その理由は、各決定ノードは、従来技術のシステムの場合のようにキー全体ではなく比較的少量のデータしか含む必要がないからである。
【０１８９】
データベース構造体は、本明細書ですでに説明したものからほんの少しの修正しか必要としない。図１３は、決定グラフの構造を示す。これは、多くの点で、図２に示したのと同じ配置を維持している。しかし、原点および各決定ノードは今度はビットシーケンスを含む。ビットシーケンスは、候補キーが比較される相手となるサブキーの一部を表す。各決定ノードの論理構造は図１４に示されている。この構造は、図３に関して説明したものを強く想起させる。ノード（包括的に４４０で示す）は、決定ビットシーケンスのための記憶領域４５０を有する。決定ビットシーケンスは、任意の長さであることが可能である。しかし、留意すべき重要なことは、概して、決定ビットシーケンスは、決定ツリーに提示されるキーの長さよりもかなり短いであろうということである。ノードは、除外ポインタタイプ４５２および包含ポインタタイプ４５６を有する。これらは、それらの関連する除外ポインタまたは包含ポインタがさらなる決定ノードまたは結論セットのいずれを指しているかを示す。したがって、これらのポインタは、図３を参照して説明したローポインタタイプおよびハイポインタタイプ（それぞれ４１および４４）と同じ機能を実行する。除外ポインタ４５４および包含ポインタ４５８は、現在のノードに続く次のノードまたは結論セットのアドレスを指す。したがって、ポインタ４５４および４５８は、前述のローポインタおよびハイポインタ（それぞれ４２および４５）に類似している。しかし、用語の変更は、候補キーが決定ビットシーケンスを含む場合には一方のポインタがたどられるが、候補キーが決定ビットシーケンスを含まない場合には他方のポインタがたどられるということを単に明確化しているだけである。
【０１９０】
図１５は、キーをツリー構造に挿入する手続きを示す。この手続きは、図８に関して説
明したものと非常に類似しており、簡単のため同じ参照番号が同じ部分に対して使用されている。ただし、ステップ１５２はステップ１５２′となるように修正されているが、これは、テストが、決定ノードにある決定ビットシーケンスがキー内に含まれるかどうかを確かめるように変更されているからである。ＹＥＳである場合、制御はステップ１５４′に移り、包含ポインタがたどられる。その後、制御はステップ１５６に移る。ステップ１５２が、決定ビットシーケンスが候補キー内にないと判断した場合、制御はステップ１５８′に移り、除外ポインがたどられる。手続きへのもう１つの修正は、ステップ１６２がステップ１５２′の入力を直接指し、それによりステップ１６４および１６６を省略することができることである。しかし、他の点では、キー挿入手続きは前述の通りである。
【０１９１】
キーを削除する手続きもまた、図１６に示すように、前述のものと非常に類似しており、今度も同じ参照番号が同じ部分に対して使用される。キーを挿入する手続きの場合と同様に、ステップ１５２、１５４および１５８は、図１３を参照して説明したようにステップ１５２′、１５４′および１５８′となるように修正される。したがってステップ１５２は、候補キーが決定ビットシーケンスを含むかどうかを確かめるテストを行い、ＹＥＳである場合、包含ポインタがたどられ、そうでない場合、除外ポインタがたどられる。さらに、ステップ１６２は今度はステップ１５２′の入力を直接指し、それによりステップ１６４および１６６を省略している。
【０１９２】
インデックスは、もちろん、キーの厳密問合せマッチングのためにもナビゲートされ得る。図１７は、キーの厳密問合せを返すナビゲーション手続きを示す。この手続きは、図１０を参照して説明したものと非常に類似しており、前と同様、繰り返しを避けるために同じ参照番号が同じステップに対して使用される。ただし、ステップ１５２、１５４および１５８が修正されることは例外である。すなわち、ステップ１５２′は今度は候補キーを決定ビットシーケンスと比較し、決定ビットシーケンスが候補キー内にある場合、制御はステップ１５４′に移り、包含ポインタがたどられ、そうでない場合、制御はステップ１５８′に移り、除外ポインタがたどられる。さらに、ステップ１６２は今度はステップ１５２′の入力を直接指す。
【０１９３】
図１８は、パターンリスト（Ｌ）を有するノードからトラバースして結果（Ｒ）を返す手続きを示す。手続きはステップ５００から出発し、開始ノードに入る。次に制御はステップ５０２に移り、決定ビットシーケンスがパターンリスト（Ｌ）内に含まれるかどうかを確かめるテストが行われる。このテストの結果が否定的である場合、制御はステップ５０４に移り、決定ノードからの除外ポインタが存在するかどうかを確かめるテストが行われる。除外ポインタが存在しない場合、制御はステップ５０６に移り、ポインタが別の決定ノードを指しているかどうかを確かめるテストが行われ、指している場合、制御はステップ５０８に移り、そうでない場合、制御はステップ５１０に移る。ステップ５０８により、次の決定ノードが選択され、ステップ５１２でトラバース手続きが再帰的に呼び出される。ステップ５１２から制御はステップ５１４に移る。さらに、ステップ５０２でのテストが、決定ビットシーケンスがパターンリスト内に含まれると結論した場合、制御はステップ５１４に移り、同様に、ステップ５０４が、除外ポインタが存在しないことを示した場合にも、制御はステップ５１４に移る。
【０１９４】
ステップ５１０に戻ると、このステップによって、ステップ５０６で検査されたポインタにより指される結論セットへジャンプが行われ、その後ステップ５１６で、結論セット全体の探索が行われる。探索手続きは、図１９を参照して後述される。ステップ５１６から、制御はステップ５１４に移る。ステップ５１４は、包含ポインタが存在するかどうかを確かめるテストを実行し、存在する場合、制御はステップ５１８に移り、そうでない場合、制御は、手続きの出口を表すステップ５２０に移る。ステップ５１８は、ポインタがさらなる決定ノードを指しているかどうかを確かめるテストを行い、その通りである場合
、制御は、手続きを再び再帰的に呼び出すステップ５２２に移り、そうでない場合、制御はステップ５２４に移り、ポインタにより指される結論セットにジャンプする。ステップ５２４から、ステップ５２６で結論セットの探索が実行される。これはステップ５１６と同じである。ステップ５２６および５２２は両方とも、手続きの終了を表す出口ステップであるステップ５２８を指す。
【０１９５】
図１９は、ステップ５１６および５２６の探索手続きを図式的に示す。ステップ５３０で手続きに入り、そこから制御はステップ５３２に移る。ステップ５３２は、結論セットが空であるかどうかを確かめるテストを実行し、空である場合、手続きはステップ５３４で終了し、そうでない場合、制御はステップ５３６に移る。ステップ５３６は、結論セット内の最初のキーを選択した後、制御をステップ５３８に移し、キーがパターンリスト内のあらゆるパターンを含むかどうかを確かめるテストを実行する。その通りである場合、制御はステップ５４０に移り、そうでない場合、制御はステップ５４２に移る。ステップ５４０は、キーおよびその属性を結論セットから結果リストに追加した後、制御をステップ５４２に移す。ステップ５４２は、現在のキーが結論セット内の最後のキーであるかどうかを確かめるチェックを実行し、その通りである場合、手続きはステップ５４４で終了し、そうでない場合、制御はステップ５４６に移る。ステップ５４６は、結論セット内の次のキーを選択し、制御をステップ５３８に戻す。
【０１９６】
図２０は、範囲探索が本発明の実施形態を構成するデータベースを用いてどのように実行され得るかを図式的に示す。ノード５６０はその中に記憶されたビットパターンＲＥを有し、ノード５６２はビットパターンＯＨを有すると仮定する。ノードがｒｅｄ、Ｆｒｅｄ、ＢｉｌｌおよびＪｏｈｎという単語で問合せされると、単語ｒｅｄおよびＦｒｅｄは包含パスに沿ってさらなるノード５６４へ向かって送られるのに対して、単語ＢｉｌｌおよびＪｏｈｎは除外パスに沿ってノード５６２へ送られる。ノード５６２は単語Ｂｉｌｌを除外パスに沿って送り、単語Ｊｏｈｎを、それがビットパターン「ＯＨ」を含むので、包含パスに沿って送る。
【０１９７】
ここでデータベースがワイルドカード探索を用いて、例えば探索ストリング「＊ｒｅｄ＊」を用いて（ただし＊は複数文字ワイルドカードを表す）問合せされる場合、ノード５６０は、５６２へ向かう除外パスは探索される必要がないため、探索はノード５６４を含むパスに制限されることが可能であると判定することができる。しかし、インデックスが探索項目「＊ｌａｐ＊」を用いて問合せされる場合、ノード５６０は、ビットパターンＲＥが探索ストリング内にあるかどうかを判定することができず（それがワイルドカード部分の中に含まれているかもしれないため）、その結果、インデックスは包含および除外パスの両方に沿って探索しなければならない。
【０１９８】
キー内のビットパターンの位置が、データベース内でノードからノードへナビゲートするときにキーに沿って順次的に移動する必要がないことは留意されるべきである。
【０１９９】
キー圧縮
従来のデータベースシステムでは、キーの全体が各決定ノードに記憶される。これに対して、上記の本発明では、キーの一部が各決定ノードに記憶された。ただし、その部分の長さに制約はない。出願人は、キーの全体またはキーの一部をそのネイティブな形式で記憶するのではなく、マッピングプロセスの結果から導出されるそのキーの表現を記憶することによって、さらなる空間節約が得られることを認識した。ＣＲＣ３２およびＡｄｌｅｒ３２のようなハッシュ符号アルゴリズムは既知であり、キー値を符号化するマッピングの機能を提供する。これらのアルゴリズムは、長いビットシーケンスに作用して、ずっと短いビットシーケンスを導出する。マッピングアルゴリズムは、入力ビットシーケンスが常に同じであれば導出されるビットシーケンスが常に同じであるという点で決定論的であ
る。しかし、マッピングは、得られる高度の圧縮に起因して一意的ではあり得ず、結果としていくつかの入力シーケンスがずっと短い１つの出力シーケンスにマッピングされることになる。それにもかかわらず、この結果を受け入れることにより、インデックスの設計を大幅に縮小することができる。こうして、候補キーＫに対してツリーグラフをナビゲートするとき、Ｋの代わりに値Ａ（Ｋ）が使用されることを除いては、従来のトラバース方法に従う。ただし、Ａはそのツリーグラフに対して使用されるマッピング関数である。
【０２００】
２つ以上のキーが同じ関数をマッピングすることがあるため、結論セットは、もしマッピング関数が使用されていなかったら到達されなかったはずの情報を含む可能性がある。したがって、マッピングなしのキーに対応しないものを除外するために、結論セット内のそれらのエントリを検査することが必要である。これは、結論セット内にマッピングなしのキーを保持し、もとのマッピングなしの探索キーにマッチしない項目を除外するためにそれらのキーをもとのマッピングなしの探索キーと比較することによってなされ得る。しかし、結論セット内のキーを第２の符号化アルゴリズムＢ（ただし、ＢはＡとは異なる）で符号化することによっても、空間節約は達成され得る。両方のマッピングアルゴリズムの下で、２つの同一のマッピング値へ探索キーが不正にマッピングされる可能性は実に非常に小さく、結果として、誤ったマッピングが得られる可能性は非常に低い。実際、誤ったマッチの確率はおよそＲ2分の１である（ただし、Ｒは関数マッピングの値域サイズ）
。マッピングされたキーＡおよびＢが両方とも結論セットに記憶される。というのは、これにより、結論セットが最大サイズに達した場合にその結論セットの再マッピングが容易になるからである。
【０２０１】
キーをインデックスに挿入するため、キーは第１のハッシュ関数を用いて符号化される。その後、インデックスは、上記のナビゲーション方法または従来の方法により、符号化されたキーを用いて、結論セットに到達するまでナビゲートされる。その後、キーは、非符号化形式で、または第２のハッシュ関数を用いて符号化されて、結論セットに挿入され得る。
【０２０２】
削除も同様であり、キーはそのネイティブな形式で、または第２のハッシュ関数を用いたキーへの作用の結果として符号化された値の形式を用いて、結論セットから削除される。
【０２０３】
したがって、データベースキーを、それらのサイズが大幅に縮小されるような形式で符号化する効率的方法を提供することが可能であり、この方法では、相異なる関数を用いた二重符号化の使用は、誤ったマッチのリスクを許容可能なほど小さい頻度に縮小する。
【０２０４】
限定されたキー
図２１は、本発明の実施形態を構成するインデックスを図式的に示す。概念的には、インデックスは従来のＢツリーインデックスのもののように見える。しかし、ネイティブなキー全体が決定ツリーの各ノード内に含まれるのではなく、キーの符号化バージョンが使用される。ここでキーはモジュロ算術関数を用いてマッピングされる。また、キーの一部のみが無限定である場合、キーの一部のみが本発明に従ってマッピングされればよいということになる。したがって、キーが探索、削除または挿入のためにインデックスに提示されるとき、その使用前に標準的なモジュロ関数がキーに適用される。モジュロを文字ストリングキータイプに適用するには、ストリングを複数バイトの非常に大きい符号なし絶対値整数として扱い（最初の文字がその整数値の最上位バイトである）、それからモジュロを適用することが必要である。
【０２０５】
したがって、キーをインデックスに挿入するには、キーはインデックスに対して選択されたモジュロを用いて符号化される。その後、インデックス構造体は、標準的なインデッ
クス方法、または本明細書に提示される方法により、符号化されたキー値を用いて結論セット（リーフブロック）まで、前述のようにナビゲートされる。その後、キーは、そのネイティブな形式、またはその符号化された形式のいずれかで、結論セットに挿入される。削除および探索も同様に実行される。つまり、探索において、結論セットに到達した後、キーは、結論セット内のすべてのキー値と、それらのネイティブな形式、または符号化された形式のいずれかで比較される。
【０２０６】
図２２は、オペレータが、上記のような厳密マッチではなく範囲マッチを実行したいときに起こり得る可能性を図式的に示す。範囲の最小および最大探索キーはそれぞれＬ（下位）およびＵ（上位）と表される。これらのキーは、図２２に示すように、無限定すなわちマッピングなしの探索空間５８０に存在する。次にキーは、インデックスの限定された範囲内へそれらを変換するために、モジュロプロセス５８２を通じてマッピングされる。キーの順序がマッピングプロセスの後に保存されることは保証され得ない。これは２つの可能性を生じる。第１に、図式的に５８４で示されるマッピングされたセットに示されるように、マッピングされた下位キーはマッピングされた上位キーより小さい値を有する。この場合、インデックスは、標準的なインデックスナビゲーション方法を用いて結論セットまでナビゲートされる。しかし、同じく予想され、マッピングされたセット５８６に図式的に示されているように、マッピングされた下位キーＭＬは、マッピングされた上位キーＭＵより大きい値を有することがある。この場合、探索は、符号化された最小キーＭＬ以上の符号化値を有するすべての結論セットに対して行われなければならない。この探索は標準的なインデックスナビゲーション方法を用いて実行される。さらに、探索は、符号化された最大キーＭＵ以下の符号化値を有するすべての結論セットに対して行われなければならない。この場合も、これは標準的なナビゲーション方法を用いて実行される。
【０２０７】
この技法は、キーどうしの差がモジュロ符号化方式の定義域より小さいときにのみうまく働き得ることが留意されるべきである。したがって、自明な例として、キーがモジュロ１０を用いてマッピングされた場合、探索範囲内の下位キーと上位キーの間の差は１０より小さくなければならない。
【０２０８】
一時キー
図２３は、本発明の実施形態を構成する結論セット／リーフブロック６００のデータ構造を図式的に示す。結論セットはエイジベース６０２を含む。エイジベース６０２は、結論セット６００へのいちばん最近の更新の日時を表す。結論セットはまた、複数のキーエントリ６０４、６０６および６０８も含む。簡単のためキーエントリ６０８だけを考えると、これはさらに３つの部分、すなわちエントリエイジ６０８Ａ、エントリキー情報６０８Ｂおよびエントリ属性情報６０８Ｃに分割される。
【０２０９】
一時エントリが作られると、一時エントリはそれに関連するエントリエイジデータ６０８Ａを有する。このデータは、エイジユニットおよびエイジ限界を指し、これらは、インデックスに対して全体として設定されることも可能であるが、随意選択的に、個々の結論セットごとに設定されることも可能である。エイジユニットは、１エイジユニット内の秒数を指定する。例えば、６０という値は１分を意味し、一方８６４００は１日を意味する。エイジ限界は、その後にキーがインデックスから失われてもよいエイジユニット数を表す。これは通常、１〜２５４の範囲にあり、それにより８ビットワード内に収まることが可能となる。つまり、キーが３１日後に期限切れになるよう設定される場合、エイジユニットは８６４００秒に設定され、エイジ限界は３１に設定される。キーが１日後に期限切れになるためには、エイジユニットおよびエイジ限界はそれぞれ３６００秒および２４に設定されればよい。
【０２１０】
各エントリは、効率のために１バイトで表されるエントリエイジを含み、これは、この
例では、値０と２５５の間に設定されることが可能であるが、他の値範囲も適宜選択され得る。０はエントリが新しいこと、またはエイジベースよりも１エイジユニット未満しか経過していないことを示す。２５５はエントリが廃用になっていることを示す。
【０２１１】
結論セットにおけるそれぞれの更新および挿入ごとに、以下のシーケンスがたどられる。まず、現在の日時が記録され、エイジベースと現在の日時の間に経過したエイジユニット数が計算される。次に、結論セット内のあらゆるエントリで、そのエントリエイジが、経過したエイジユニット数だけインクリメントされる。計算されたエントリエイジが２５５以上であるエントリは、そのエントリエイジが２５５に設定される。このようなエントリはその後、再使用のために利用可能となる。次に、エイジベースが、手続きの最初に記録された日時に設定される。挿入されるべきキーが、結論セット内の利用可能なスロットに配置され、エントリエイジが０に設定される。利用可能なスロットは、まだ割り当てられていないスロット、または（そのエントリエイジが２５５に達したために）廃用になったスロットのいずれでもよい。さらに、更新されたエントリはそのエントリエイジが０にリセットされる。
【０２１２】
上記の実施形態では、エントリエイジは単一バイトとして記憶された。これは、あるタイプのデータが廃用になり得る２５４種類の期間の範囲を与える。１バイトより多くのバイトを使用して、より広い範囲のエイジ限界を与えることも可能であるが、記憶領域オーバーヘッドが増大する。別法として、エントリエイジとして１バイト未満を使用することも可能であり、それにより記憶領域オーバーヘッドは減少するが、個別に定義可能なエイジ限界の範囲もまた減少する。
【０２１３】
こうして、改善されたデータベースを提供することが可能である。
【０２１４】
決定グラフの分割
前述のように、決定グラフ（インデックス）の全体を半導体メモリ内に保持することが好ましい。これは高速アクセスを可能にするからである。しかし、データベースを動作させるハードウェアプラットフォームの能力またはデータベースのサイズが、インデックスの全体を半導体メモリなどの中に保持することが可能でないようなものであることがある。これは、例えば、マシンがマルチタスク動作を行い、他の機能を実行することが予想されるからであるかもしれない。
【０２１５】
ハードディスクドライブのような大容量記憶デバイスは、所定サイズのブロックに分割され、ブロックサイズ未満のいかなるサイズのファイルでも１ブロックを占有することは既知である。したがって、物理メモリは、ブロックサイズの整数倍単位で使用される。決定グラフの読み出しおよび書き込みをこのようなメモリで行うとき、決定グラフの全体、または可能な限り大部分が、単一ブロックに書き込まれるように、決定グラフが構造化されることが好ましい。こうして、決定グラフは、１ブロックのメモリ内に存在する可能性が高くなる。しかし、インデックスがますます増大すると、キー数が増えるにつれて決定グラフは大きくなる。それゆえ、決定グラフを単一ブロック内に収容することが不可能となるときが来る。したがって、複数ブロックにわたる決定グラフを収容する方法が要求される。
【０２１６】
図２４を参照して、メモリブロック７００はコンピュータシステムのハードディスク上の１ブロックの物理サイズを表し、ブロックは個々の部分７０２、７０４、７０６および７０８を含むように細分され、とりわけ、その各部分は決定グラフ内の関連するノードに関するデータに関係すると仮定する。さらに、インデックスは今、ブロック７００が完全にフルであるようなサイズに達していると仮定する。
【０２１７】
ここで、データベース挿入操作の結果として、さらなるノードを決定グラフに挿入することが要求されていると仮定する。ノード挿入はいかなる時点でも起こり得る。前述のように、各決定ノード（図３）は、決定値と、グラフ内の次のノードを示すローポインタおよびハイポインタとを備える。結果として、いかなる既存ノードの後にでも新しいノードを挿入することができるようなグラフに対する局所的補正を行うことが可能である。例えば、挿入の結果として、データ項目７０６によって表されるデータを有するノードの後に新しいノードを挿入することが要求されていると仮定する。まず、新しいノードが挿入されると、ノード７０６の出力ポインタの１つが新しいノードを指すように修正される。挿入プロセスの一部として、新しいノードの出力ポインタもまた、決定グラフが破壊されないように正しく設定される。しかし、新しいノード７１０に関係するデータをメモリブロック７００に記憶することがもはや不可能である場合、新しいノード７１０に関係する詳細は別のブロック７１２に記憶されなければならない。その新しいノードに関係するさらなるノードもまた作成され、情報はメモリブロック７１２に記憶され得る。
【０２１８】
後に、より以前から存在するノード７０８に関係する新しいノードを挿入することが要求される場合、再びメモリブロック７００はフルになり、その結果、さらなる新しいノード７１４の詳細はメモリブロック７００の外部に記憶されなければならない。このプロセスにより、決定グラフは増大することが可能となるが、それぞれのフル（親）ブロックから、ほとんど空のメモリブロックが多数生じる可能性がある。
【０２１９】
図２５は、インデックスを増大させる代替方法を示す。再び、メモリブロック７００はフルであり、今、新しいノードを挿入することが要求されていると仮定する。前と同様、新しいメモリグラフブロックが作成される。しかし今度は、親の決定グラフが均等な部分に分割される。一方の部分は旧ブロック７００内に配置されるが、他方の部分は新ブロック７１２内に配置される。
【０２２０】
図２５を参照して、最初にインデックス７２０はメモリブロック７００内に記憶されており、そのブロック７００が現在フルであると仮定する。インデックス挿入により新しいノード７２２が作成され、このプロセスでインデックスはメモリブロック７００のサイズを超えたと仮定する。しかし、インデックス増大を制御するこの方法では、インデックスの構造が、それをインデックスブロック間で実質的に均等に分割するように解析される。例えば、図２５に示すインデックスの部分を取ると、ノード７２４から出発して、一点鎖線７２６で囲まれる１０個のノードは、ノード７２４の左に延びるパスによって到達することができ、これに対して一点鎖線７２８で囲まれる１２個のノードは、ノード７２４の右に延びるパス中に見出されることがわかる。インデックスを分割するための適当な候補ノードを見つけるために、テストノードを選択した後、それにぶら下がっているノードを計算することによって、アルゴリズムはインデックス構造体を再帰的に走査する。図２５に示される例では、ノード７２４および線７２６で囲まれるノードは旧メモリブロック７００内に配置されるが、一点鎖線７２８で囲まれるノードは新メモリブロック７１２内に配置されることになる。このプロセスは、各メモリブロックが最適かつ公平に利用され、実質的に空のメモリブロックの急増を止めることを保証する。
【０２２１】
修飾子
しばしば、インデックス内の探索項目は、２個以上の探索基準を用いて実行されることが所望される。これらの基準は、一般にブール代数の原理に従って組み合わされる。
【０２２２】
問合せを個々の部分に分割し、１つの部分を実行してから次の部分を片づけ、最後に結果を組み合わせるようにすることが可能である。しかし、これは非常に計算量集約的となり、ハードディスクのようなブロックデータ記憶装置に対する多くの読み書き操作を必要とすることがある。例えば、１００ヒットを返した１つの問合せがある場合、インデック
ス問合せにより指されるデータをフェッチするために、さらに１００回の遅いディスクＩ／Ｏ操作を必要とする可能性がある。
【０２２３】
問合せによりフェッチされるすべてのデータが必要であるとは限らない。例えば、データベースに対する問合せが、１９９７年に登録されたメルセデス製のすべての車を見つけるために行われた場合、１９９７年に登録された車に対する問合せは何千もの結果を返すであろう。しかし、これらのうちの少数のみがメルセデス製のものである。さらに、多くの問合せについて、不要な結果の数を減少させるように問合せの順序を変更することは可能でないかもしれない。
【０２２４】
この問題は、連結キーを使用することにより克服することができる。しかし、従来、このような連結キーは、主探索キーおよび副探索キーの両方の全体を、組み合わされた連結キー内に維持しており、結果として、組み合わされたキーは特に長くなる。
【０２２５】
出願人は、主探索キーに修飾子を関連付けること、特に修飾子を付加することによって、探索パフォーマンスを改善することができることを認識した。修飾子は、第２のすなわち後続の探索項目を直接表すのではなく、むしろその後続項目の短縮形式である。本発明では、修飾子は、それぞれの後続の探索項目に対してハッシュ関数を実行することにより生成される。データベースに対するデータの挿入または削除を行うために使用されるのと同じハッシュ関数が、データベースに問合せを行うために使用される。したがって、データベースの作成中、インデックスは主キーとともに（前と同様）、および０個以上の修飾子キーとともに作成される。
【０２２６】
使用時に、インデックスは主キーを使用することによりナビゲートされ、データは結論セットに通常のように記憶される。しかし、各修飾子キーは単一バイトに、すなわち０〜２５５の範囲内の数にハッシュ符号化され、結論セットにキーエントリとともに記憶される。
【０２２７】
問合せ中に、主キーには０個以上の修飾子キーが提供される。そしてインデックスは、前と同様に主キーを用いてナビゲートされる。最後に、いったん正しい１つまたは複数の結論セットに到達した後、結論セットは、主キー値および修飾子キーハッシュ符号を結論セット内のエントリと照合することによって走査される。主キーの全体およびすべての修飾子ハッシュ符号にマッチするエントリのみが返される。
【０２２８】
複数の修飾子キーが同じ単一バイトのハッシュ符号にマッピングされる可能性があることが留意されるであろう。したがって、不要なデータが返される小さいが有限の確率が存在する。しかし、良好なランダム化ハッシュ符号化が使用されると仮定すると、誤ったマッチの確率は２５５分の１（すなわち０．５％未満）である。本発明は、すべての正しい結果を返すことを保証するが、小さい割合の不正な結果も返すことがわかる。したがって、返されるすべてのキーヒットをその後データ記憶装置内で検査して、不要なエントリがあればそれを除去しなければならない。しかし、インデックスのサイズの縮小および問合せプロセスの単純化は、返されるヒットの追加的解析を埋め合わせて余りある。この利点は、修飾子の数が増えるほど不正なヒットの確率が減少することを考慮すると、より多くの修飾子が使用されるにつれて増大する。誤った結果の確率は、理想的な状況の下では、（１／２５５）Nである。つまり、２個の修飾子（Ｎ＝２）の場合、誤った結果の確率は
６５０２５分の１すなわち０．００２％未満である。３個の修飾子の場合、不正なデータ項目を返す確率は約１４００万分の１にまで減少する。
【０２２９】
探索キーのサイズ、および結論セット内のデータ記憶要件が大幅に縮小されることが理解されるであろう。したがって、各項目の長さが８バイトまでになり得る８個の項目を探
索しようとしたとすると、従来ならばこれは各探索キーごとに６４バイトのデータの記憶領域を必要とするであろう。本発明では、この要件はたった１５バイトのデータまで縮小される。
【０２３０】
データベースに問合せを行うとき、各修飾子キーはオプションであり、それらのキーのうちの一部または全部が提供されることもあり、全く提供されないこともあり得る。というのは、それらのキーはインデックス構造体のナビゲーションに影響しないからである。修飾子キーは、結論セットを走査するときに返されるヒットの数にのみ影響する。したがって、提供される修飾子の数が多いほど、問合せ結果は正確になる。
【０２３１】
この修飾子技法は、任意のインデックス構造体、例えばＢツリーのような既知の構造体に適用可能であることが留意されるべきである。図２６は、本発明のこの態様による探索キーのフォーマットを図式的に示す。キーの最初の部分は主キーデータを含み、キーの残りの部分は修飾子Ｑ１、Ｑ２などからＱ７までを含み、これらのそれぞれは、もとの追加的キーにハッシュ関数を作用させることにより生成される、長さが１バイトのワードである。
【０２３２】
パターンマッチング
しばしば、データベース内でパターンマッチング問合せを行うことが所望される。例えば、探索キーの全体に対する探索ではなく、キーの一部を用いて探索が実行される。
【０２３３】
このような探索の効率は、キー数が決定グラフ内の各ノードにどの程度うまく分割されているかに左右される。
【０２３４】
ＡＳＣＩＩ文字セットの問題点は、それは２５５個の文字を含むが、一部の文字の現れる可能性が非常に高く、それにもかかわらず二重文字の組合せは特にまれであることである。
【０２３５】
出願人は、ＡＳＣＩＩ文字セット（または実際には同等のセット）がより小さいセットにマッピングされれば、パターンマッチングを大幅に改善することができることを認識した。
【０２３６】
出願人は、単一文字が４ビット（０〜１５）に収まる一方で、２文字シーケンスを単一バイト内に収めることができるように、セットを１６文字に縮小するいくつかのマッピングを定義した。
【０２３７】
そして、これらの修正された文字セットは、単一のインデックスでキー数を分割するために使用可能である。
【０２３８】
文字セットのマッピングは、挿入、削除または問合せ操作のための決定グラフのナビゲーションの直前にキーに適用される。正確な問合せ結果が要求されるか、それとも蓋然的な問合せ結果が要求されるかに応じて、もとのキー値または変換されたキー値（より小さいサイズである）のいずれが結論セットで記憶されることも可能である。２つの文字セットの例を以下に与える：
【０２３９】
【表２】
2008071362.tif 000004
【表３】
2008071362.tif 000005
【０２４０】
これらの方式のそれぞれにおいて、問合せが大文字と小文字を区別しないように、文字は大文字に変換される。さらに、改行および復帰のような非印字文字はマッピングから除去される。
【０２４１】
この縮小セットを利用することにより、パターンマッチングのパフォーマンスを大幅に改善することができる。キーが、挿入、問合せまたは削除操作の前にマッピングされた後、マッピングされたキーを用いてインデックスがナビゲートされる。                
〈その他〉
（態様１）  使用時にインデックス（２）およびデータ（１６）を備えるデータベースを編成する方法であって、前記インデックス（２）は、複数のビットにより表現される少なくとも１つの記号を含む探索キーを用いて問合せされて、探索基準に合致するデータを見つけるようになっており、
前記インデックス（２）は、探索中に結論セット（６〜１４）に到達するまでナビゲートされるノードの階層的構造体であり、該構造体は、キー記号が該構造体内のノードに記憶されず、かつ各ノードが該ノードからの３個より少ない出口パスを有するように編成されることを特徴とする方法。
（態様２）  前記ノードは、該ノードに関連するキーの全体を記憶しないことを特徴とする、態様１に記載の方法。
（態様３）  前記ノードは、該ノードの質問に関係する決定規則を記憶しない、態様１または２に記載の方法。
（態様４）  各ノードにおける決定は単純問合せであり、各ノードから最大２個の出口パスがある、先行する態様のいずれか一項に記載の方法。
（態様５）  ノードにおいて、問合せに使用される前記キーまたは前記キーの一部は前記ノードにおける決定基準と比較され、適用されるテストは、前記キーまたは前記キーの一部が前記決定基準より大きいかまたは小さい、態様４に記載の方法。
（態様６）  前記データベース内のあらゆるレコードが１つの結論セットに属する、先行する態様のいずれか一項に記載の方法。
（態様７）  使用時に、前記決定ノードの階層的構造体は、データプロセッサの電子メモリ内に保持される決定グラフを形成する、先行する態様のいずれか一項に記載の方法。
（態様８）  各結論セットは最大サイズを有する、態様６に記載の方法。
（態様９）  結論セットのサイズは、データ記憶デバイスで使用されるデータまたはアドレスブロックのサイズと同じか、またはその整数倍である、態様８に記載の方法。
（態様１０）  結論セットが所定サイズに近づくとき、新しい決定ノードが前記ノードの階層的構造体に挿入され、前記結論セット内にあったデータは、前記新しい決定ノードの出口パスを介して到達される新しい結論セット内に再インデックス付けされる、態様８に記載の方法。
（態様１１）  前記新しい決定ノードは、前記所定サイズに達した結論セットを指していたノードからの出口パスに挿入される、態様１０に記載の方法。
（態様１２）  前記データベースの構造的再編成は、一度に１個または２個の決定ノードにのみ影響する、先行する態様のいずれか一項に記載の方法。
（態様１３）  前記決定ノードは、前記探索キーの一部に関係付けられる、先行する態様のいずれか一項に記載の方法。
（態様１４）  前記決定グラフは、前記キーの構造に大きく依存しない、態様１３に記載の方法。
（態様１５）  前記ノードの階層的構造体は、キーシーケンスの意味論的順序が保存されるように構造化される、先行する態様のいずれか一項に記載の方法。
（態様１６）  前記結論セット内の各エントリは、前記結論セット内の次の項目を指すリンクフィールドと、前記結論セット内のエントリに関連するキーの厳密な値を保持するキーフィールドと、前記キーに対応するデータまたは前記キーに対応するデータを指すポインタの一方を保持する属性フィールドとを備える、態様６に記載の方法。
（態様１７）  各ノードは、使用時にキー内の決定ビット群と比較される関連する決定値を有し、前記比較の結果は前記ノードからの出口パスを選択するために使用される、先行する態様のいずれか一項に記載の方法。
（態様１８）  前記決定値は、
決定群のすべての可能な値の数学的メジアン、
決定群の期待値の数学的メジアン、
決定群のすべての期待値の数学的平均、
前記インデックスの作成時に選択される所定値、ならびに、
いちばん最近に使用された決定値およびそれに先行する決定値の関数として選択される値
のうちの１つから選択される、態様１７に記載の方法。
（態様１９）  訪問された決定ノードにおける決定群の選択は、
すべての決定ノードについて同じである決定群、
決定ノードへの訪問ごとに変化する決定群、
先行するノードにおける決定値が現在の決定群の決定範囲最大値または決定範囲最小値に達するときに変化する決定群、および、
連続するノード間で前記決定値が所定しきい値未満だけ変化するときに変化する決定群のうちの１つから選択される、態様１７または１８に記載の方法。
（態様２０）  データを追加するとき、前記インデックスは結論セットに到達するまで、または結論セットを作成する必要性が確認されるまでナビゲートされ、続いてデータが前記結論セットに追加される、先行する態様のいずれか一項に記載の方法。
（態様２１）  前記ノードのうちの１つまたは複数は、部分的なキーシーケンスを含む、先行する態様のいずれか一項に記載の方法。
（態様２２）  前記結論セットに記憶されるキーは圧縮形態で記憶される、態様１６に記載の方法。
（態様２３）  前記圧縮は、前記キーを前記キーのより小さい表現にマッピングする、態様２２に記載の方法。
（態様２４）  前記マッピングは、前記マッピングが所与のキーに適用されるときに常に同じ結果を返すように良好に挙動する、態様２３に記載の方法。
（態様２５）  前記キーは、少なくとも２つの異なるアルゴリズムを用いて圧縮される、態様２２、２３または２４に記載の方法。
（態様２６）  前記少なくとも２つの圧縮の結果は、前記結論セットに記憶される、態様２５に記載の方法。
（態様２７）  キーは、限定された範囲に該キーをマッピングする演算子によって処理される、先行する態様のいずれか一項に記載の方法。
（態様２８）  前記演算子は、キーを前記データベース全体にわたり実質的に一様に分配する、態様２７に記載の方法。
（態様２９）  前記演算子は、モジュロ関数およびハッシュ関数のうちの１つから選択される、態様２７または２８に記載の方法。
（態様３０）  前記結論セット内に記憶されるキーは、該キーおよび該キーデータが前記データベース内に維持されるべき持続期間を示すデータフィールドを含む、先行する態様のいずれか一項に記載の方法。
（態様３１）  期限切れになったキーおよびデータは、新しいデータで上書きするために利用可能となる、態様３０に記載の方法。
（態様３２）  期限切れのキーおよびデータは、前記データベースから能動的には削除されない、態様３０または３１に記載の方法。
（態様３３）  結論セットがアクセスされるとき、持続期間を有する各エントリのエイジが計算され、該計算の結果が、どのエントリが上書き可能かを判定するために記憶され、または使用されることが可能である、態様３０、３１または３２に記載の方法。
（態様３４）  前記データベースは、キーインデックスおよび決定インデックスを備え、前記キーインデックス内のキーは圧縮された方式で記憶され、前記キーを用いて前記決定インデックスに質問する前に前記キーが存在するかどうかを確かめるチェックが前記キーインデックスに対して行われる、先行する態様のいずれか一項に記載の方法。
（態様３５）  前記キーが前記キーインデックス内に存在しない場合、前記決定インデックスは探索されない、態様３４に記載の方法。
（態様３６）  キーを挿入する操作中に、前記キーインデックスのチェックが行われ、合致するエントリが見出される場合、前記キーは重複として拒否される、態様３４または３５に記載の方法。
（態様３７）  前記キーインデックス内のキーは、圧縮、符号化またはマッピングされた形式で記憶される、態様３４ないし３６のいずれか一項に記載の方法。
（態様３８）  前記キーはハッシュ関数を用いてマッピングされる、態様３７に記載の方法。
（態様３９）  前記キーインデックスは要素配列を備え、該配列内の要素の数は、前記インデックス内の一意的なキー要素の数と少なくとも同数である、態様３４ないし３８のいずれか一項に記載の方法。
（態様４０）  ２つの異なる関数が使用され、一方のハッシュ関数は、前記キーインデックス内の宛先要素Ｅ（Ｋ）を計算するプロセスの一部として使用され、他方のハッシュ関数は、前記キーを符号化するために使用され、その結果Ｂ（Ｋ）は前記宛先要素に記憶される、態様３９に記載の方法。
（態様４１）  前記キーインデックスの問合せ中に、前記宛先要素が目標キーについて計算され、前記第２のハッシュ関数を用いて符号化された値が前記目標キーについて計算され、前記符号化された値が前記宛先要素に既存の値に合致する場合に、前記キーは重複であるとみなされる、態様４０に記載の方法。
（態様４２）  前記インデックスは、インデックスがその作業負荷の一部を少なくとも１つの他のインデックスに代行させることができるように、インデックスの階層的構造体を備える、先行する態様のいずれか一項に記載の方法。
（態様４３）  作業を代行しているインデックスは、作業を他のインデックスに代行させることができる、態様４２に記載の方法。
（態様４４）  インデックスのキー目録は、範囲によって定義され、前記範囲の外部のキーに対して操作するいかなる要求も前記インデックスにより拒否される、態様４２または４３に記載の方法。
（態様４５）  前記キーはデータベースのインデックス範囲内にあり、前記データベースは、前記キーがいずれかの代行インデックスの目録範囲内にある場合、前記キーに対する操作を自分自身で実行すること、またはそのタスクを代行させることが可能である、態様４４に記載の方法。
（態様４６）  各インデックスは、物理記憶デバイスに関連付けられることにより、複数の並行ディスクアクセスが起こることを可能にする、態様４２ないし４５のいずれか一項に記載の方法。
（態様４７）  インデックスおよびデータを有するデータベースから情報を得る方法であって、該インデックスは、探索キーを用いて問合せされて、探索基準に合致するデータを見つけるようになっており、
前記インデックスは決定ノードの階層的構造体であり、該構造体は結論セットに到達するまでナビゲートされ、ノードはキーのサブシーケンスを含むことが可能であり、とるべきアクションを決定するために候補キーが前記サブシーケンスと比較されることが可能であり、（Ｎ＋１）番目のレイヤにあるノードに記憶される前記キーの部分は、Ｎ番目のレイヤ内の先行するノードに記憶される部分と無関係であることを特徴とする方法。
（態様４８）  データベース内でキーを符号化する方法であって、前記キーの記憶空間要件を縮小するように、キーデータが少なくとも１つの結論セットにハッシュ形式で記憶される方法。
（態様４９）  範囲の限界を表す第１キーと第２キーの間のキーの範囲を有するデータベースをナビゲートする方法であって、前記キーは縮小された範囲にマッピングされ、前記キーの順序が前記マッピング中に保存されない場合、前記キーの大きい方より大きいマッピングされた空間と、前記キーの小さい方より小さいマッピングされた空間とに対して
探索が行われる方法。
（態様５０）  前記結論セットは前記キーをマッピングなしの形式で含む、態様４９に記載の方法。
（態様５１）  データベース内でキーを管理する方法であって、前記キーは、前記キーおよび前記キー関連データが前記データベース内に維持されるべき持続期間を示すデータフィールドを含むことを特徴とする方法。
（態様５２）  期限切れになったキーおよびデータは、新しいデータで上書きするために利用可能となる、態様５１に記載の方法。
（態様５３）  期限切れのキーおよびデータは、前記データベースから能動的には削除されない、態様５１または５２に記載の方法。
（態様５４）  結論セットがアクセスされるとき、持続期間を有する各エントリのエイジが計算され、該計算の結果は、どのエントリが上書き可能かを判定するために記憶され、または使用されることが可能である、態様５１、５２または５３に記載の方法。
（態様５５）  キーインデックスおよび決定インデックスを備えるデータベース内でデータを編成する方法であって、使用時に、前記キーインデックス内のキーは圧縮された方式で記憶され、前記キーを用いて前記決定インデックスに質問する前に前記キーが存在するかどうかを確かめるチェックが前記キーインデックスに対して行われる方法。
（態様５６）  使用時に前記キーインデックスは半導体メモリ内に保持される、態様５５に記載の方法。
（態様５７）  前記キーが前記キーインデックス内に存在しない場合、前記決定インデックスは探索されない、態様５５に記載の方法。
（態様５８）  キーを挿入する操作中に、前記キーインデックスのチェックが行われ、合致するエントリが見出される場合、該キーは重複として拒否される、態様５５、５６または５７に記載の方法。
（態様５９）  前記キーインデックス内のキーは、圧縮、符号化またはマッピングされた形式で記憶される、態様５５ないし５８のいずれか一項に記載の方法。
（態様６０）  前記キーはハッシュ関数を用いてマッピングされる、態様５９に記載の方法。
（態様６１）  前記キーインデックスは要素配列を備え、該配列内の要素の数は、前記インデックス内の一意的なキー要素の数と少なくとも同数である、態様５５ないし６０のいずれか一項に記載の方法。
（態様６２）  ２つの異なる関数が使用され、一方のハッシュ関数は、前記キーインデックス内の宛先要素Ｅ（Ｋ）を計算するプロセスの一部として使用され、他方のハッシュ関数は、前記キーを符号化するために使用され、その結果Ｂ（Ｋ）は前記宛先要素に記憶される、態様６１に記載の方法。
（態様６３）  前記キーインデックスの問合せ中に、前記宛先要素が目標キーについて計算され、前記第２のハッシュ関数を用いて符号化された値が前記目標キーについて計算され、前記符号化された値が前記宛先要素に既存の値に合致する場合に、前記キーは重複であるとみなされる、態様６２に記載の方法。
（態様６４）  データベース内でデータを編成する方法であって、インデックスがその作業負荷の一部を少なくとも１つの他のインデックスに代行させることができるように、インデックスは、インデックスの階層的構造体を備える方法。
（態様６５）  作業を代行しているインデックスは、作業を他のインデックスに代行させることができる、態様６４に記載の方法。
（態様６６）  インデックスのキー目録は範囲によって定義され、前記範囲の外部のキーに対して操作するいかなる要求も前記インデックスにより拒否される、態様６４または６５に記載の方法。
（態様６７）  前記キーはデータベースのインデックス範囲内にあり、前記データベースは、前記キーがいずれかの代行インデックスの目録範囲内にある場合、前記キーに対する操作を自分自身で実行すること、またはそのタスクを代行させることが可能である、態
様６６に記載の方法。
（態様６８）  各インデックスは、物理記憶デバイスに関連付けられることにより、複数の並行ディスクアクセスが起こることを可能にする、態様６４ないし６７のいずれかに記載の方法。
（態様６９）  態様１ないし４６のいずれか一項に記載の方法をコンピュータに実行させるコンピュータ可読命令。
（態様７０）  前記命令はデータキャリア上を運ばれる、態様６９に記載のコンピュータ可読命令。
（態様７１）  使用時にインデックス（２）およびデータ（１６）を備えるデータベースであって、前記インデックス（２）は、探索基準に合致するデータを見つけるために、各記号が複数のビットにより表現される少なくとも１つの記号を含む探索キーを用いて問合せされ、
前記インデックス（２）は、探索中に結論セット（６〜１４）に到達するまでナビゲートされるノードの階層的構造体であり、該構造体は、キー記号が前記ノードに記憶されず、かつ各ノードが最大２個の出口パスを有するように編成されることを特徴とするデータベース。
（態様７２）  態様４７に記載の方法をコンピュータに実行させるコンピュータ可読命令。
（態様７３）  前記命令はデータキャリア上を運ばれる、態様７２に記載のコンピュータ可読命令。
（態様７４）  インデックスおよびデータを有するデータベースであって、前記インデックスは、探索キーを用いて問合せされて、探索基準に合致するデータを見つけるようになっており、
前記インデックスは決定ノードの階層的構造体であり、該構造体は結論セットに到達するまでナビゲートされ、ノードはキーのサブシーケンスを含むことが可能であり、とるべきアクションを定めるために候補キーが該サブシーケンスと比較されることが可能であり、記憶される前記キーの部分は、前記階層的構造体内のレイヤ間において単調な系列では変化しないことを特徴とするデータベース。
（態様７５）  態様４９または５０に記載の方法をコンピュータに実行させるコンピュータ可読命令。
（態様７６）  前記命令はデータキャリア上を運ばれる、態様７５に記載のコンピュータ可読命令。
（態様７７）  キーの記憶空間要件を縮小するように、キーデータが少なくとも１つの結論セットに符号化形式で記憶されるデータベース。
（態様７８）  態様５１ないし５４のいずれか一項に記載の方法をコンピュータに実行させるコンピュータ可読命令。
（態様７９）  前記命令はデータキャリア上を運ばれる、態様７８に記載のコンピュータ可読命令。
（態様８０）  データベースであって、該データベース内のキーは、該キーおよび該キーの関連データが前記データベース内に維持されるべき持続期間を示すデータフィールドを含むことを特徴とするデータベース。
（態様８１）  態様５５ないし６３のいずれか一項に記載の方法をコンピュータに実行させるコンピュータ可読命令。
（態様８２）  前記命令はデータキャリア上を運ばれる、態様８１に記載のコンピュータ可読命令。
（態様８３）  キーインデックスおよび決定インデックスを備えるデータベースであって、前記キーインデックス内のキーは圧縮された方式で記憶され、前記キーを用いて前記決定インデックスに質問する前に前記キーが存在するかどうかを確かめるチェックが前記キーインデックスに対して行われるデータベース。
（態様８４）  態様６４ないし６８のいずれか一項に記載の方法をコンピュータに実行
させるコンピュータ可読命令。
（態様８５）  前記命令はデータキャリア上を運ばれる、態様８４に記載のコンピュータ可読命令。
（態様８６）  インデックスを有するデータベースであって、前記インデックスは、階層的構造体内のインデックスがその作業負荷の一部を前記階層的構造体内の少なくとも１つの他のインデックスに代行させることができるように、インデックスの階層的構造体を備えるデータベース。
（態様８７）  データベースを編成する方法であって、該データベースはインデックスを備え、該データベースは、所定サイズのブロック単位で記憶容量を割り当てるように編成された大容量記憶デバイスを有する計算システム上にホストされ、前記インデックスは少なくとも１つのブロック内に記憶され、所与のブロック内のインデックスのサイズが、さらなる記憶領域が要求されるほどに増大するとき、新しいブロックが作成され、前記インデックスの一部が該新しいブロックに移動される方法。
（態様８８）  前記インデックス内への新しいノードの挿入時に、該ノードは新しいブロックの作成を引き起こし、前記新しいノードは前記新しいブロックに挿入され、前記インデックスの残りの部分は既存のブロック内にとどまる、態様８７に記載の方法。
（態様８９）  前記インデックス内への新しいノードの挿入時に、該ノードは既存のブロックからの新しいブロックの作成を引き起こし、前記インデックスは、前記新しいブロックと前記既存のブロックとの間で実質的に均等に再分配される、態様８７に記載の方法。
（態様９０）  データベースであって、該データベースはインデックスを備え、該データベースは、所定サイズのブロック単位で記憶容量を割り当てるように編成された大容量記憶デバイスを有する計算システム上に編成され、前記インデックスは少なくとも１つのブロック内に記憶され、所与のブロック内のインデックスのサイズが、さらなる記憶領域が要求されるほどに増大するとき、新しいブロックが作成され、前記インデックスの一部が該新しいブロックに移動されるデータベース。
（態様９１）  インデックスを有するデータベースを編成する方法であって、前記インデックスに対するキーを形成する要素は、可能な要素の少なくとも一部を構成する第１セットから該第１セットより小さい第２セットへマッピングされる方法。
（態様９２）  前記マッピングは音声的に類似の文字を共通の値に変換することを含む、態様９１に記載の方法。
（態様９３）  前記マッピングはすべての母音を除去することを含む、態様９１に記載の方法。
（態様９４）  前記マッピングは母音を共通の値に変換することを含む、態様９１に記載の方法。
（態様９５）  前記マッピングは句読文字を除去することを含む、態様９１に記載の方法。
（態様９６）  前記マッピングは句読文字を共通の値に変換することを含む、態様９１に記載の方法。
（態様９７）  前記マッピングは数字を除去することを含む、態様９１に記載の方法。
（態様９８）  前記マッピングは数字を共通の値に変換することを含む、態様９１に記載の方法。
（態様９９）  データベースを編成する方法であって、インデックスをナビゲートするために使用されるキーは複合キーであり、該複合キー内の１つまたは複数のキーは圧縮形態で表現される方法。
（態様１００）  主キーは非圧縮であり、前記複合キー内の他のキーは圧縮される、態様９９に記載の方法。
（態様１０１）  前記または各圧縮されたキーは、前記データベースを用いて実行される探索を精緻化するために使用される修飾子として作用する、態様９９または１００に記載の方法。
（態様１０２）  前記インデックスは主キーを用いて結論セットに到達するまでナビゲートされ、次に前記結論セット内の結果が前記または各修飾子を用いて質問される、態様１０１に記載の方法。
（態様１０３）  前記キーはハッシュ関数を用いて圧縮される、態様９９に記載の方法。
（態様１０４）  態様９９ないし１０３のいずれか一項に記載の方法をコンピュータに実行させるコンピュータ可読命令。
【図面の簡単な説明】
【０２４２】
【図１】本発明の図式的概観である。
【図２】決定グラフの論理構造の図式的表示である。
【図３】決定ノードの構造を図式的に示す。
【図４】結論セットの構造を図式的に示す。
【図５】結論セット内のエントリの構造を図式的に示す。
【図６】厳密探索手続きを図式的に示す。
【図７】範囲探索手続きを図式的に示す。
【図８Ａ】キーを挿入する手続きを図式的に示す。
【図８Ｂ】キーを挿入する手続きを図式的に示す。
【図９Ａ】キーを削除する手続きを図式的に示す。
【図９Ｂ】キーを削除する手続きを図式的に示す。
【図１０Ａ】厳密キー問合せの手続きを図式的に示す。
【図１０Ｂ】厳密キー問合せの手続きを図式的に示す。
【図１１】範囲問合せの手続きを図式的に示す。
【図１２Ａ】決定群Ｇ、決定値Ｖを有するノードを最小および最大キー範囲までトラバースし、結果を返す手続きを図式的に示す。
【図１２Ｂ】決定群Ｇ、決定値Ｖを有するノードを最小および最大キー範囲までトラバースし、結果を返す手続きを図式的に示す。
【図１３】決定グラフの一部の構造を示す。
【図１４】修正決定ノードの論理構造を示す。
【図１５Ａ】キーを挿入する手続きを示す。
【図１５Ｂ】キーを挿入する手続きを示す。
【図１６Ａ】キーを削除する手続きを示す。
【図１６Ｂ】キーを削除する手続きを示す。
【図１７Ａ】厳密問合せマッチの手続きを示す。
【図１７Ｂ】厳密問合せマッチの手続きを示す。
【図１８Ａ】パターンリストを有するツリーをトラバースし結果を返す手続きを示す。
【図１８Ｂ】パターンリストを有するツリーをトラバースし結果を返す手続きを示す。
【図１９】パターンリスト（Ｌ）の探索の手続きを示す。
【図２０】パターンマッチプロセスがデータをソートする際にどのように役立つかの例である。
【図２１】限定インデックスを有する決定グラフの図式的例示である。
【図２２】修正された結論セットの構造を示す。
【図２３】決定グラフを分割する第１の方法を図式的に示す。
【図２４】決定グラフを分割する第２の方法を図式的に示す。
【図２５】内部に修飾子を有する複合キーの構成を図式的に示す。
【図２６】探索キーのフォーマットを図式的に示す。
【図１】
2008071362.tif 000006
【図２】
2008071362.tif 000007
【図３】
2008071362.tif 000008
【図４】
2008071362.tif 000009
【図５】
2008071362.tif 000010
【図６】
2008071362.tif 000011
【図７】
2008071362.tif 000012
【図８Ａ】
2008071362.tif 000013
【図８Ｂ】
2008071362.tif 000014
【図９Ａ】
2008071362.tif 000015
【図９Ｂ】
2008071362.tif 000016
【図１０Ａ】
2008071362.tif 000017
【図１０Ｂ】
2008071362.tif 000018
【図１１】
2008071362.tif 000019
【図１２Ａ】
2008071362.tif 000020
【図１２Ｂ】
2008071362.tif 000021
【図１３】
2008071362.tif 000022
【図１４】
2008071362.tif 000023
【図１５Ａ】
2008071362.tif 000024
【図１５Ｂ】
2008071362.tif 000025
【図１６Ａ】
2008071362.tif 000026
【図１６Ｂ】
2008071362.tif 000027
【図１７Ａ】
2008071362.tif 000028
【図１７Ｂ】
2008071362.tif 000029
【図１８Ａ】
2008071362.tif 000030
【図１８Ｂ】
2008071362.tif 000031
【図１９】
2008071362.tif 000032
【図２０】
2008071362.tif 000033
【図２１】
2008071362.tif 000034
【図２２】
2008071362.tif 000035
【図２３】
2008071362.tif 000036
【図２４】
2008071362.tif 000037
【図２５】
2008071362.tif 000038
【図２６】
2008071362.tif 000039
【手続補正書】
【提出日】平成19年11月14日(2007.11.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項５１
【補正方法】変更
【補正の内容】
【請求項５１】
主キーは非圧縮であり、前記複合キー内の他のキーは圧縮される、請求項５０に記載の方法。