(57)【要約】【課題】  チェイン付きハッシュ法によるデータ検索を高速化する。【解決手段】  ハッシュ表１１とチェイン付きインデックス１２と実データファイル１３とを有するデータ構造であって、ハッシュ表１１は検索キーのハッシュ値を構成するビット列の一部分である部分ビット列が指すアドレスにチェイン付きインデックス１２へのポインタhpを保持し、ポインタhpが指すチェイン付きインデックスのレコードIRに、検索キーのハッシュ値を構成するビット列の残りのビット列が上位ハッシュ値uhとして保持されている。【選択図】  図２
2006099524.tif 000002
【特許請求の範囲】
【請求項１】
ハッシュ表とチェイン付きインデックスと実データファイルとを有するデータ構造であって、前記ハッシュ表は検索キーのハッシュ値を構成するビット列の一部分である部分ビット列が指すアドレスに前記チェイン付きインデックスへのポインタを保持し、該ポインタが指す前記チェイン付きインデックスのレコードに、前記検索キーのハッシュ値を構成するビット列の残りのビット列の全部あるいは一部を保持することを特徴とするデータ構造。
【請求項２】
前記チェイン付きインデックスのレコードに、前記部分ビット列が同じになる他のインデックスレコードを指すインデックスポインタと、前記実データファイルのレコードへのポインタとを保持し、前記実データファイルのレコードに、登録キーと、実データと、前記ハッシュ値が同じになる他のデータレコードを指すポインタとを保持することを特徴とする請求項１記載のデータ構造。
【請求項３】
前記チェイン付きインデックスのレコードに、自レコードに保持された前記ハッシュ値にかかるビット列が前記ハッシュ値のどのビット位置のビット列であるかを示すビット位置情報を保持することを特徴とする請求項１または２記載のデータ構造。
【請求項４】
ａ）検索キーからハッシュ値を計算するステップ、
ｂ）ハッシュ表における前記ハッシュ値を構成するビット列の一部分である部分ビット列が指すアドレスに保持されたポインタを取得するステップ、
ｃ）前記取得したポインタが指すチェイン付きインデックスのインデックスレコードを処理対象インデックスレコードとするステップ、
ｄ）前記処理対象インデックスレコードに保持されたビット列と、前記ハッシュ値を構成するビット列の残りのビット列の全部あるいは一部とを比較するステップ、
ｅ）前記ステップｄで比較一致した場合に前記インデックスレコードに保持された実データポインタが指す実データファイルのデータレコードを処理対象データレコードとするステップ、
ｆ）前記処理対象データレコードに保持された登録キーと前記検索キーとを比較するステップ、
を含むことを特徴とするデータ検索方法。
【請求項５】
前記ステップｆで比較不一致した場合、前記処理対象データレコードに保持された次ポインタが指すデータレコードを次の処理対象データレコードとして前記ステップｆを繰り返すことを特徴とする請求項４記載のデータ検索方法。
【請求項６】
前記ステップｄで比較不一致した場合、前記処理対象インデックスレコードに保持されたインデックスポインタが指すインデックスレコードを次の処理対象インデックスレコードとして前記ステップｄを繰り返すことを特徴とする請求項４または５記載のデータ検索方法。
【請求項７】
前記ステップｄにおいては、前記処理対象インデックスレコードに保持されたビット列と、前記ハッシュ値を構成するビット列の残りのビット列のうち前記処理対象インデックスレコードに保持されたビット位置情報が示すビット列とを比較することを特徴とする請求項４、５または６記載のデータ検索方法。
【請求項８】
コンピュータに下記の処理を行わせるためのプログラム。
ａ）検索キーからハッシュ値を計算するステップ
ｂ）ハッシュ表における前記ハッシュ値を構成するビット列の一部分である部分ビット列が指すアドレスに保持されたポインタを取得するステップ
ｃ）前記取得したポインタが指すチェイン付きインデックスのインデックスレコードを処理対象インデックスレコードとするステップ
ｄ）前記処理対象インデックスレコードに保持されたビット列と、前記ハッシュ値を構成するビット列の残りのビット列の全部あるいは一部とを比較するステップ
ｅ）前記ステップｄで比較一致した場合に前記インデックスレコードに保持された実データポインタが指す実データファイルのデータレコードを処理対象データレコードとするステップ
ｆ）前記処理対象データレコードに保持された登録キーと前記検索キーとを比較するステップ
【請求項９】
前記ステップｆで比較不一致した場合、前記処理対象データレコードに保持された次ポインタが指すデータレコードを次の処理対象データレコードとして前記ステップｆを繰り返すことを特徴とする請求項８記載のプログラム。
【請求項１０】
前記ステップｄで比較不一致した場合、前記処理対象インデックスレコードに保持されたインデックスポインタが指すインデックスレコードを次の処理対象インデックスレコードとして前記ステップｄを繰り返すことを特徴とする請求項８または９記載のプログラム。
【請求項１１】
前記ステップｄにおいては、前記処理対象インデックスレコードに保持されたビット列と、前記ハッシュ値を構成するビット列の残りのビット列のうち前記処理対象インデックスレコードに保持されたビット位置情報が示すビット列とを比較することを特徴とする請求項８、９または１０記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ検索に関し、特にチェイン付きハッシュ法によるデータ検索およびそれに好適なデータ構造に関する。
【背景技術】
【０００２】
検索キーに基づくデータ検索を高速に行えるデータ構造として、ハッシュ法が知られている。ハッシュ法は、チェイン付きハッシュ法とオープンハッシュ法とに大別され、一般に同じハッシュ値となる検索キーの数が多い、つまりキー衝突が多い場合には、チェイン付きハッシュ法が採用されている。
【０００３】
従来のチェイン付きハッシュ法は、全体集合ＵからＺｍ＝｛０，１，…，ｍ−１｝へのハッシュ関数を用いて、集合Ｕの部分集合Ｓをｍ本のチェイン（リスト）と、そのチェインへのポインタを格納するサイズｍのハッシュ表Ｈからなる構造で管理する。検索キーをｘ、そのハッシュ値をＨ［h(x)］とすると、ｘによる検索はＨ［h(x)］で指されるリストを走査すればよく、ｘの挿入はＨ［h(x)］で指されるリストに挿入すればよく、ｘの削除はＨ［h(x)］で指されるリストからｘを削除すればよい。ただし、実データを二次記憶装置にファイルとして格納する場合には、チェインから実データを取り除き、チェイン付きインデックスから実データファイルのレコードをポイントする構成が採用される。
【０００４】
チェイン付きハッシュ法によるデータ検索を高速化するには、キー衝突自体を減らすか、キー衝突時の処理を高速化する必要がある。ハッシュ演算結果のビット数を増大してハッシュ表のエントリ数を増加させると、１つのチェインに繋がるデータ数が少なくなるので、キー衝突自体を減らすことができる。しかし、ハッシュ表のサイズが指数関数的に拡大するため、メモリの制限から、増やすにしても１〜２ビット程度が限度である。このため、キー衝突した際の処理をいかに高速化するかが重要である。
【０００５】
チェイン付きハッシュ法におけるキー衝突時の高速化手法の一例が特許文献１に記載されている。この特許文献１では、チェイン付きインデックス内のチェインポインタに、実データファイルのデータが持つ登録キーの情報を示す識別子を付加する。具体的には登録キーの文字コード列に含まれる各文字コードの下位１バイトと００８０Ｈの論理和のバイト列を識別子として付加する。そして、検索キーに基づくデータ検索時には、検索キーからハッシュ値を求め、そのハッシュ値をアドレスとしてハッシュ表からチェイン付きインデックスのチェインポインタをアクセスし、そのチェインポインタに付加されている上記識別子と、検索キーから同様に求めた識別子、つまり検索キーの文字コード列に含まれる各文字コードの下位１バイトと００８０Ｈの論理和のバイト列との一致をチェックし、若し一致すればデータポインタが指し示す実データを検索データとして読み込む。
【０００６】
ハッシュを用いたデータ検索技術に関する他の文献として、特許文献２および特許文献３があるが、これらの文献はチェイン付きハッシュ法に関するものではなく、またキー衝突時における処理高速化を図る技術ではない。
【特許文献１】特開平５−２８１９４号公報
【特許文献２】特開平９−９１３０３号公報
【特許文献３】特開２０００−９０１１５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
チェイン付きハッシュ法におけるキー衝突時の高速化手法として特許文献１に記載された方法が知られているが、この特許文献１記載の技術では、検索キーからハッシュ値を求める計算以外に、検索キーから識別子を求める計算、具体的には検索キーの文字コード列に含まれる各文字コードの下位１バイトと００８０Ｈの論理和のバイト列を求める計算が必要になる。このため、検索を行う際の計算量が増加し、高速な検索が困難になるという課題がある。
【０００８】
本発明の目的は、チェイン付きハッシュ法によるデータ検索を高速に行えるようにすることにある。
【課題を解決するための手段】
【０００９】
本発明の第１のデータ構造は、ハッシュ表とチェイン付きインデックスと実データファイルとを有するデータ構造であって、前記ハッシュ表は検索キーのハッシュ値を構成するビット列の一部分である部分ビット列が指すアドレスに前記チェイン付きインデックスへのポインタを保持し、該ポインタが指す前記チェイン付きインデックスのレコードに、前記検索キーのハッシュ値を構成するビット列の残りのビット列の全部あるいは一部を保持することを特徴とする。
【００１０】
本発明の第２のデータ構造は、第１のデータ構造において、前記チェイン付きインデックスのレコードに、前記部分ビット列が同じになる他のインデックスレコードを指すインデックスポインタと、前記実データファイルのレコードへのポインタとを保持し、前記実データファイルのレコードに、登録キーと、実データと、前記ハッシュ値が同じになる他のデータレコードを指すポインタとを保持することを特徴とする。
【００１１】
本発明の第３のデータ構造は、第１または第２のデータ構造において、前記チェイン付きインデックスのレコードに、自レコードに保持された前記ハッシュ値にかかるビット列が前記ハッシュ値のどのビット位置のビット列であるかを示すビット位置情報を保持することを特徴とする。
【００１２】
本発明の第１のデータ検索方法は、ａ）検索キーからハッシュ値を計算するステップ、ｂ）ハッシュ表における前記ハッシュ値を構成するビット列の一部分である部分ビット列が指すアドレスに保持されたポインタを取得するステップ、ｃ）前記取得したポインタが指すチェイン付きインデックスのインデックスレコードを処理対象インデックスレコードとするステップ、ｄ）前記処理対象インデックスレコードに保持されたビット列と、前記ハッシュ値を構成するビット列の残りのビット列の全部あるいは一部とを比較するステップ、ｅ）前記ステップｄで比較一致した場合に前記インデックスレコードに保持された実データポインタが指す実データファイルのデータレコードを処理対象データレコードとするステップ、ｆ）前記処理対象データレコードに保持された登録キーと前記検索キーとを比較するステップ、を含むことを特徴とする。
【００１３】
本発明の第２のデータ検索方法は、第１のデータ検索方法において、前記ステップｆで比較不一致した場合、前記処理対象データレコードに保持された次ポインタが指すデータレコードを次の処理対象データレコードとして前記ステップｆを繰り返すことを特徴とする。
【００１４】
本発明の第３のデータ検索方法は、第１または第２のデータ検索方法において、前記ステップｄで比較不一致した場合、前記処理対象インデックスレコードに保持されたインデックスポインタが指すインデックスレコードを次の処理対象インデックスレコードとして前記ステップｄを繰り返すことを特徴とする。
【００１５】
本発明の第４のデータ検索方法は、第１、第２または第３のデータ検索方法において、前記ステップｄにおいては、前記処理対象インデックスレコードに保持されたビット列と、前記ハッシュ値を構成するビット列の残りのビット列のうち前記処理対象インデックスレコードに保持されたビット位置情報が示すビット列とを比較することを特徴とする。
【００１６】
『作用』
本発明にあっては、ハッシュ表は、検索キーのハッシュ値を構成するビット列の一部分である部分ビット列が指すアドレスにチェイン付きインデックスへのポインタを保持し、そのポインタが指すチェイン付きインデックスのレコードに、検索キーのハッシュ値を構成するビット列の残りのビット列の全部あるいは一部を保持するため、ハッシュ表の同じアドレスを引くこととなる複数の異なる検索キーであっても、ハッシュ値のビット列のうちハッシュ表のアドレスとして使用していない残りのビット列に相違があれば、チェイン付きインデックス上のハッシュビット列の比較により区別することができる。また、検索キーのハッシュ値の一部をチェイン付きインデックス上に保持するため、特許文献１のようにハッシュ演算とは別に識別子のための特別な演算を行う必要がない。
【発明の効果】
【００１７】
本発明によれば、チェイン付きハッシュ法によるデータ検索を高速化することができる。その理由は、ハッシュ表の同じアドレスを引くこととなる複数の異なる検索キーであっても、ハッシュ値のビット列のうちハッシュ表のアドレスとして使用していないビット列に相違があれば、チェイン付きインデックス上のハッシュビット列の比較により区別することができるからであり、かつ、特許文献１のようにハッシュ演算とは別に識別子のための特別な演算を行う必要がないからである。
【発明を実施するための最良の形態】
【００１８】
『第１の実施の形態』
次に本発明のデータ構造およびデータ検索方法をルータ装置に適用した場合の実施の形態について図面を参照して説明する。
【００１９】
図１を参照すると、本実施の形態にかかるルータ装置２０は、イーサネット（登録商標）などのネットワークから転送対象パケットを含むフレームを送受信するインタフェース部であるファイ／マック（ＰＨＹ／ＭＡＣ）２１、２６と、パケットのルーティングプロトコル（ＯＳＰＦなど）を制御する制御部２２と、処理過程のパケットや制御情報など高速に処理することが必要な情報を格納するＲＡＭなどの高速メモリ２４と、大量のデータやプログラムなどを記憶する磁気ディスクなどの低速メモリ２５と、パケットの転送処理を行う転送装置２３とを含んで構成される。
【００２０】
転送装置２３では、入力されたパケットが転送可能なパケットかどうかを判断するために、入力されたパケットの情報と低速メモリ２５に予め登録されているパケット情報とを比較する。例えば、送信元ＩＰアドレスや送信先ＩＰアドレス或いはその組み合わせ又はそれらの一部毎に、それらのアドレスを持つパケットの取り扱いを記述したアクションデータを低速メモリ２５に保持し、入力されたパケットの送信元ＩＰアドレスや送信先ＩＰアドレス或いはその組み合わせ又はそれらの一部に一致するアクションデータを低速メモリ２５から検索し、そのアクションデータに従った転送制御を実施する。本実施の形態では、転送装置２３におけるこのようなデータ検索に対して、本発明のデータ構造およびデータ検索方法を適用する。
【００２１】
図２に本実施の形態にかかるデータ構造の例を示す。この例のデータ構造は、ハッシュ表１１とチェイン付きインデックス１２と実データファイル１３とから構成される。このうち、ハッシュ表１１とチェイン付きインデックス１２は、高速メモリ２４に記憶され、実データファイル１３は、低速メモリ２５に記憶される。
【００２２】
ハッシュ表１１は、オフセットアドレス0x00〜0xffを持ち、各オフセットアドレス0x00〜0xffの箇所にチェイン付きインデックス１２へのポインタhpを保持する。ポイントするインデックスがない箇所のポインタhpはNULLである。
【００２３】
チェイン付きインデックス１２は、ハッシュ表１１のポインタhpによってポイントされる箇所毎に、少なくとも１つのインデックスレコードIRから構成されるインデックスレコードのチェインが設けられている。１つのインデックスレコードIRは、実データポインタrp、上位ハッシュ値uhおよびインデックスポインタipを保持する。
【００２４】
実データポインタrpは、実データファイル１３へのポインタである。上位ハッシュ値uhは、ハッシュ値の上位４ビットの値である。ハッシュ値の下位４ビットは、前述したオフセットアドレス0x00〜0xffである。従って、ハッシュ値は合計８ビットである。インデックスポインタipは、インデックスレコードのチェインにおける次のインデックスレコードIRへのポインタである。次のインデックスレコードIRが存在しない場合、インデックスポインタipはNULLである。
【００２５】
実データファイル１３は、チェイン付きインデックス１２の実データポインタrpによってポイントされる箇所毎に、少なくとも１つのデータレコードDRから構成されるデータレコードのチェインが設けられている。１つのデータレコードDRは、登録キーrk、アクションデータadおよび次ポインタnpを保持する。
【００２６】
登録キーrkは、例えば１２ビットで構成される。登録キーrkに所定のハッシュ演算を施して求めた８ビットのハッシュ値の上位４ビットが、この登録キーrkを持つデータレコードのチェインをポイントするインデックスレコードIRに上位ハッシュ値uhとして保持され、このインデックスレコードをポインタするハッシュ表１１のオフセットアドレスが前記ハッシュ値の下位４ビットとなる。アクションデータadは、登録キーrkと一致する検索キーを持つパケットに対して施すべき処理、つまり転送装置２３がそのパケットに行うべき動作方法を示す。次ポインタnpは、データレコードのチェインにおける次のデータレコードDRへのポインタである。次のデータレコードDRが存在しない場合、次ポインタnpはNULLである。
【００２７】
図３は本実施の形態にかかるデータ検索の処理例を示すフローチャートである。図３に示される処理は、転送装置２３に含まれるＣＰＵによって実行される。転送装置２３に含まれるＣＰＵにそのような処理を行わせるプログラムは、高速メモリ２４あるいは低速メモリ２５に記憶され、実行時にＣＰＵによって読み取られる。以下、図１乃至図３を参照して本実施の形態の動作を説明する。
【００２８】
転送装置２３は、ファイ／マック２１から入力した転送対象パケットについて、その取り扱い方法を調べるために、例えば、転送対象パケットの送信元IPアドレス、送信先IPアドレス或いはその組み合わせ、またはその一部分を検索キーkkとして、図３に示されるデータ検索処理を開始する。ここでは、検索キーkkは１２ビットの値である。
【００２９】
まず転送装置２３は、検索キーkkに所定のハッシュ演算を施して、８ビットのハッシュ値hを求める（ステップＳ１０１）。次に転送装置２３は、ハッシュ値hの下位４ビットをオフセットアドレスとしてハッシュ表１１をアクセスし、チェイン付きインデックス１１へのポインタhpを取得する（ステップＳ１０２）。
【００３０】
次に転送装置２３は、ポインタhpが指すチェイン付きインデックス１２のインデックスレコードIDを処理対象インデックスレコードとし（ステップＳ１０３）、ハッシュ値hの上位４ビットと処理対象インデックスレコード中の上位ハッシュ値uhとを比較する（ステップＳ１０４）。双方が一致した場合（ステップＳ１０５でYES）、ステップ１０８へ処理を進める。双方が異なる場合（ステップＳ１０５でNO）、処理対象インデックスレコードのインデックスポインタipがNULLであれば（ステップＳ１０６でYES）、検索に失敗したのでデータ不一致とし、NULLでなければ（ステップＳ１０６でNO）、インデックスポインタipが指すインデックスレコードIDを処理対象インデックスレコードとし（ステップＳ１０７）、ステップＳ１０４に戻って上述した処理と同様の処理を繰り返す。
【００３１】
ステップＳ１０８において転送装置２３は、処理対象インデックスレコードIDの実データポインタrpが指す実データファイル１３のデータレコードDRを処理対象データレコードとする。次に転送装置２３は、検索キーkkと処理対象データレコードDRに記録された登録キーrkとを比較する（ステップＳ１０９）。双方が一致した場合（ステップＳ１１０でYES）、処理対象データレコードDRに記録されたアクションデータadを読み出し（ステップＳ１１３）、データ検索の処理を終える。双方が異なる場合（ステップＳ１１０でNO）、処理対象データレコードの次ポインタnpがNULLであれば（ステップＳ１１１でYES）、検索に失敗したのでデータ不一致とし、NULLでなければ（ステップＳ１１１でNO）、次ポインタnpが指すデータレコードDRを処理対象データレコードとし（ステップＳ１１２）、ステップＳ１０８に戻って上述した処理と同様の処理を繰り返す。
【００３２】
図４に検索キー0xabcと検索キー0xffcによる検索時の様子を示す。図４では、検索キー0xabcと検索キー0xffcをハッシュ演算した結果が、それぞれ、0xbcと0xfcとなり、オフセットアドレスとして下位の４ビットを使用するようにしているため、ハッシュ表１１の同じオフセットアドレス0xcという値になっている。このようにハッシュ表１１のオフセットアドレスが同じになる検索キー0xabcと検索キー0xffcは、キー衝突しているため、一般的なハッシュ法では実データファイル１３上の登録キーを読み出して比較する必要がある。しかし、本実施の形態では、チェイン付きインデックス１２内にハッシュ演算結果の上位の４ビットが格納されているため、検索キーから計算したハッシュ値の上位４ビットと格納されている上位ハッシュ値を比較することにより、実データファイル上の登録キーと比較する前に、候補を絞り込むことができる。
【００３３】
具体的には、検索キー0xabcによる検索時、そのハッシュ値の上位４ビットは0xbであり、下位４ビット0xcをオフセットアドレスとしてハッシュ表１１をアクセスして得られるチェイン付きインデックス１２のインデックスレコード中の上位ハッシュ値0xbと一致するため、このインデックスレコード中の実データポインタでポイントされている実データファイル１３のデータレコードのチェインを走査すればよい。他方、検索キー0xffcによる検索時は、そのハッシュ値の上位４ビットは0xfであり、下位４ビット0xcをオフセットアドレスとしてハッシュ表１１をアクセスして得られるチェイン付きインデックス１２のインデックスレコード中の上位ハッシュ値0xbとは相違するが、このインデックスレコード中のインデックスポインタが指す次のインデックスレコード中の上位ハッシュ値が0xfで一致するため、そのインデックスレコード中の実データポインタでポイントされている実データファイル１３のデータレコードのチェインを走査すればよい。そして、何れの場合も、すでにチェイン付きインデックス上で候補を絞り込んでいるため、データレコードのチェインにおける検索数は少なくて済むことになる。
【００３４】
次に本実施の形態の効果を説明する。
【００３５】
本実施の形態では、ハッシュ表１１は、検索キーのハッシュ値を構成する８ビットのうちの下位４ビットが指すオフセットアドレスにチェイン付きインデックス１２へのポインタhpを保持し、そのポインタhpが指すチェイン付きインデックスのレコードIDに、検索キーのハッシュ値を構成する８ビットのうちの上位４ビットを保持しているため、ハッシュ表１１の同じオフセットアドレスを引くこととなる複数の異なる検索キーであっても、ハッシュ値のビット列のうちハッシュ表のアドレスとして使用していない残りのビット列に相違があれば、チェイン付きインデックス１２上の上位ハッシュ値の比較により区別することができ、キー衝突時の処理の高速化が可能である。また、検索キーのハッシュ値の一部をチェイン付きインデックス１２上に保持するため、特許文献１のようにハッシュ演算とは別に識別子のための特別な演算を行う必要がない。このように、チェイン付きインデックス１２中にオフセットアドレスに使用していないハッシュ演算結果の一部を置き、チェイン付きインデックス１２上でハッシュ演算値を比較することにより、衝突した検索キーを高速に検索比較することができる。
【００３６】
また、実データファイル１３のデータレコードに登録キーrkと次ポインタnpを持ち、検索キーと登録キーrkとが一致するデータレコードを検索するので、検索キーに一致する登録キーを持つデータを正確に検索することが可能である。
【００３７】
このように高速なデータ検索が可能になり、また低速メモリ２５上の実データファイル１３へのアクセス回数が低減するため、本実施の形態にかかるルータ装置の性能（パケットのスループットなど）を向上させることができる。
【００３８】
『第２の実施の形態』
第１の実施の形態では、検索キーのハッシュ値の一部をハッシュ表のオフセットアドレスに使用し、残りの全ビットをチェイン付きインデックスに保持するようにしたが、本実施の形態では、残りの全ビットのうちの一部をチェイン付きインデックスに保持する。
【００３９】
本実施の形態のデータ構造は、第１の実施の形態のデータ構造と比較して、チェイン付きインデックスのインデックスレコードの構成が相違し、その他は第１の実施の形態のデータ構造と同じである。
【００４０】
図５を参照すると、本実施の形態のデータ構造におけるチェイン付きインデックスを構成するインデックスレコードIRは、上位ハッシュ値uhの代わりに、部分ハッシュ値bhおよびビット位置情報ssを保持する点で第１の実施の形態におけるインデックスレコードと相違する。
【００４１】
部分ハッシュ値bhは、検索キーのハッシュ値を構成するビット列のうち、ハッシュ表のオフセットアドレスに使用したビット列を除くビット列の任意の１ビットあるいは数ビットである。ハッシュ値を構成するビット列のどのビットが部分ハッシュ値bhであるかは、ビット位置情報ssで示される。例えば、ハッシュ値を１６ビットとし、その下位４ビットをハッシュ表のオフセットアドレスに使用し、残りの１２ビットのうち、或るインデックスレコードIRにおいては上位４ビットだけを部分ハッシュ値bhとして使う場合、ビット位置情報ssには、上位４ビットを示す、bit#＜15−12＞といったデータが設定される。
【００４２】
本実施の形態の場合、図３のステップＳ１０４において、転送装置２３は、処理対象インデックスレコード中のビット位置情報ssを参照して、ハッシュ値のビット列のうち、ビット位置情報ssで指定されるビット列を、部分ハッシュ値bhと比較する。
【００４３】
次に本実施の形態の効果を説明する。
【００４４】
本実施の形態によれば、第１の実施の形態と同様の効果が得られるのに加えて、チェイン付きインデックスに保持する部分ハッシュ値を検索キー毎に設定できる効果がある。キー衝突をより低減するためにハッシュ値のビット列を８ビットから１６ビットに拡大すると、第１の実施の形態では上位ハッシュ値uhが４ビットから１２ビットに増加し、インデックスレコードIRのサイズが拡大するが、若し、１２ビットのうちで上位４ビットで相違があれば、本実施の形態ではこの４ビットだけを部分ハッシュ値bhとして設定することで同様の効果が得られる。
【００４５】
以上本発明の実施の形態について説明したが、本発明は以上の実施の形態にのみ限定されず、その他各種の付加変更が可能である。例えば、本発明のデータ構造およびデータ検索方法はチェイン付きハッシュ法一般に適用可能であり、上記実施の形態に示したルータ装置だけに限定されず、各種の辞書システムやデータベースシステムにおけるデータ構造およびデータ検索に適用可能である。
【００４６】
また以上の実施の形態では、データ検索のみ説明したが、データ構造へのデータの挿入、データ構造からのデータの削除を同時に実施するシステムに対しても適用可能である。この場合、データの挿入時は、実データファイル１３へのデータレコードの追加以外にチェイン付きインデックス１２へのインデックスレコードの追加が必要になる場合があり、データの削除時は、実データファイル１３からのデータレコードの削除以外にチェイン付きインデックス１２からのインデックスレコードの削除が必要になる場合がある。従って、チェイン付きインデックス１２の１つのインデックスレコードの読み出しに２度アクセスが必要になる場合には、アクセスとアクセスの間に違う書き込みが入った場合にコヒーレンシ（データの整合性）がとれなくなってしまう問題が発生するため、２度のアクセス間に書き込みが入らないようにメモリのアクセスロックを行う必要がある。ただし、インデックスレコードのサイズをＣＰＵが１度に読み出すことのできるサイズ（例えば６４ビットを１度にリード可能なＣＰＵであれば６４ビット）に納めることにより、アクセスロックを行う必要はなく、チェイン付きインデックスの管理が容易になる。
【図面の簡単な説明】
【００４７】
【図１】本発明のデータ構造およびデータ検索方法を適用したルータ装置のブロック図である。
【図２】本発明の第１の実施の形態のデータ構造を示す図である。
【図３】本発明の第１の実施の形態にかかるデータ検索の処理例を示すフローチャートである。
【図４】本発明の第１の実施の形態にかかるデータ検索における検索キー0xabcと検索キー0xffcによる検索時の様子を示す図である。
【図５】本発明の第２の実施の形態にかかるデータ構造におけるチェイン付きインデックスを構成するインデックスレコードの構成図である。
【符号の説明】
【００４８】
１１…ハッシュ表
１２…チェイン付きインデックス
１３…実データファイル
【図１】
2006099524.tif 000003
【図２】
2006099524.tif 000004
【図３】
2006099524.tif 000005
【図４】
2006099524.tif 000006
【図５】
2006099524.tif 000007