(57)【要約】【課題】  ルーティング用のデータベースの検索時間の不確定性を低減する。【解決手段】  データの登録時、検索キーを用いて検索される登録データをｎ−１個の０と１個の１とからなるｎ桁のワンホット表現に変換する。その検索キーを所定桁数ごとに区切る。区切られた検索キーを順次用いてメモリ空間上のアドレスを指定する。そのアドレスからｎ桁のデータを抽出してワンホット表現と各桁ごとに論理和を取り同じアドレスに書き込む。データの検索時、検索キーを所定桁数ごとに区切る。区切られた第１番目の検索キーを用いてメモリ空間上のアドレスを指定する。そのアドレスからｎ桁のデータを抽出して全ての桁が１からなるデータと各桁ごとに論理積を取り、同じアドレスに書き込む。区切られた第２番目以降の検索キーを順次用いてメモリ空間上のアドレスを指定する。そのアドレスからｎ桁のデータを抽出して各桁ごとに論理積を取り、同じアドレスに書き込む。【選択図】図１
2005328149.tif 000002
【特許請求の範囲】
【請求項１】
登録用プログラムと、
検索用プログラム
とを具備し、
前記登録用プログラムは、
検索キーを用いて検索される登録データを、ｎ−１個の０と１個の１とからなるｎ桁のワンホット表現に変換するステップと、
前記検索キーを所定桁数ごとに区切るステップと、
区切られた前記検索キーを順次、用いてメモリ空間上のアドレスを指定する指定ステップと、
前記指定ステップにおいて指定された前記アドレスから前記ｎ桁のデータを抽出して前記ワンホット表現と各桁ごとに論理和を取り、同じ前記アドレスに書き込むステップ
とを備え、
前記検索用プログラムは、
入力された前記検索キーを前記所定桁数ごとに区切るステップと、
区切られた第１番目の前記検索キーを用いて前記メモリ空間上のアドレスを指定する第２指定ステップと、
前記第２指定ステップにおいて指定された前記アドレスから前記ｎ桁のデータを抽出して、全ての桁が１からなるデータと各桁ごとに論理積を取り、一時データに書き込むステップと、
区切られた第２番目以降の前記検索キーを順次又は並列して用いて前記メモリ空間上のアドレスを指定する第３指定ステップと、
前記第３指定ステップにおいて指定された前記アドレスから前記ｎ桁のデータを抽出して前記一時データと各桁ごとに論理積を取って前記一時データを更新するステップと、
前記第３指定ステップにおいて前記検索キーの全ての区切りが用いられたとき、前記一時データを出力するステップ
とを備える
検索プログラム。
【請求項２】
登録部と、
検索部
とを具備し、
前記登録部は、
検索キーを用いて検索される登録データを、ｎ−１個の０と１個の１とからなるｎ桁のワンホット表現に変換するワンホット表現変換部と、
前記検索キーを所定桁数ごとに区切る検索キー区切り部と、
区切られた前記検索キーを順次、用いてメモリ空間上のアドレスを指定するアドレス指定部と、
前記アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して前記ワンホット表現と各桁ごとに論理和を取り、同じ前記アドレスに書き込む論理和書込部
とを備え、
前記検索部は、
入力された前記検索キーを前記所定桁数ごとに区切る第２検索キー区切り部と、
区切られた第１番目の前記検索キーを用いて前記メモリ空間上のアドレスを指定する第２アドレス指定部と、
前記第２アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して、全ての桁が１からなるデータと各桁ごとに論理積を取り、一時データとして保存する論理積書込部と、
区切られた第２番目以降の前記検索キーを順次又は並列して用いて前記メモリ空間上のアドレスを指定する第３アドレス指定部と、
前記第３アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して前記一時データと各桁ごとに論理積を取って前記一時データを更新する第２論理積書込部と、
前記第３アドレス指定部により前記検索キーの全ての区切りが用いられたとき、前記一時データを出力する出力部
とを備える
検索用回路。
【請求項３】
登録部と、
検索部
とを具備し、
前記登録部は、
検索キーを用いて検索される登録データを、ｎ−１個の０と１個の１とからなるｎ桁のワンホット表現に変換するワンホット表現変換部と、
前記検索キーを所定桁数ごとに区切る検索キー区切り部と、
区切られた前記検索キーを順次、用いてメモリ空間上のアドレスを指定するアドレス指定部と、
前記アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して前記ワンホット表現と各桁ごとに論理和を取り、同じ前記アドレスに書き込む論理和書込部
とを備え、
前記検索キー区切り部は更に、入力された前記検索キーを所定桁数ごとに区切り、
前記アドレス指定部は更に、区切られた第１番目の前記検索キーを用いて前記メモリ空間上のアドレスを指定し、
前記検索部は、
前記アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して、全ての桁が１からなるデータと各桁ごとに論理積を取り、一時データとして保存する論理積書込部を備え、
前記アドレス指定部は更に、区切られた第２番目以降の前記検索キーを順次又は並列して用いて前記メモリ空間上のアドレスを指定し
前記検索部は更に、
前記アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して前記一時データと各桁ごとに論理積を取って前記一時データを更新する第２論理積書込部と、
前記アドレス指定部により前記検索キーの全ての区切りが用いられたとき、前記一時データを出力する出力部
とを備える
検索用回路。
【請求項４】
登録部と、
検索部
とを具備し、
前記登録部は、
検索キーを用いて検索される登録データを、ｎ−１個の０と１個の１とからなるｎ桁のワンホット表現に変換するワンホット表現変換部と、
前記検索キーを所定桁数ごとに区切る検索キー区切り部と、
区切られた前記検索キーを順次、用いてメモリ空間上のアドレスを指定するアドレス指定部と、
前記アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して前記ワンホット表現と各桁ごとに論理和を取り、同じ前記アドレスに書き込む論理和書込部
とを備え、
前記検索部は、
入力された前記検索キーを前記所定桁数ごとに区切る検索キー区切り部と、
区切られた第１番目の前記検索キーを用いて前記メモリ空間上のアドレスを指定する第２アドレス指定部と、
前記第２アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して、全ての桁が１からなるデータと各桁ごとに論理積を取り、一時データとして保存する論理積書込部と、
区切られた第２番目以降の前記検索キーを順次又は並列して用いて前記メモリ空間上のアドレスを指定する第３アドレス指定部と、
前記第３アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して前記一時データと各桁ごとに論理積を取って前記一時データを更新する第２論理積書込部と、
前記第３アドレス指定部により前記検索キーの全ての区切りが用いられたとき、前記一時データを出力する出力部
とを備える
ルータ。
【請求項５】
登録部と、
検索部
とを具備し、
前記登録部は、
検索キーを用いて検索される登録データを、ｎ−１個の０と１個の１とからなるｎ桁のワンホット表現に変換するワンホット表現変換部と、
前記検索キーを所定桁数ごとに区切る検索キー区切り部と、
区切られた前記検索キーを順次、用いてメモリ空間上のアドレスを指定するアドレス指定部と、
前記アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して前記ワンホット表現と各桁ごとに論理和を取り、同じ前記アドレスに書き込む論理和書込部
とを備え、
前記検索キー区切り部は更に、入力された前記検索キーを所定桁数ごとに区切り、
前記アドレス指定部は更に、区切られた第１番目の前記検索キーを用いて前記メモリ空間上のアドレスを指定し、
前記検索部は、
前記アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して、全ての桁が１からなるデータと各桁ごとに論理積を取り、一時データとして保存する論理積書込部を備え、
前記アドレス指定部は更に、区切られた第２番目以降の前記検索キーを順次又は並列して用いて前記メモリ空間上のアドレスを指定し
前記検索部は更に、
前記アドレス指定部により指定された前記アドレスから前記ｎ桁のデータを抽出して前記一時データと各桁ごとに論理積を取って前記一時データを更新する第２論理積書込部と、
前記アドレス指定部により前記検索キーの全ての区切りが用いられたとき、前記一時データを出力する出力部
とを備える
ルータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＰルータのパケット転送動作での経路決定に用いられるような、テーブル構築／検索方法に関する。
【背景技術】
【０００２】
ＩＰパケットのルーティングには、データベースを検索することが必要とされる。ＩＰルータの場合、一例として、パケットに含まれるＩＰヘッダに書かれたあて先ＩＰアドレスは、データベースにより、装置内で複数ある次段の処理回路のうちそのパケットを転送すべき処理回路を特定するデータに関連づけられる。
【０００３】
このような処理のうち最も単純な方法は線形探索法である。線形探索法においては、あて先ＩＰアドレスと次段の処理回路のアドレスとを結合したデータをメモリの１アドレスに書き込んだメモリ空間上の表が用意される。パケットが受け取られたとき、そのヘッダからあて先ＩＰアドレスが取り出される。次に、上記メモリ空間上の表のあて先ＩＰアドレスが端から順次読み出され、読み出されたＩＰアドレスと上記ヘッダから取り出されたＩＰアドレスとが照合され、一致したものに上記メモリ空間上の表で関連づけられた次段の処理回路に、そのパケットが転送される。
【０００４】
線形探索法よりも高速に動作する検索方法がいくつか存在する。基本的で効果的な方法として、ハッシュ方式が知られている。以降、上記のような照合対象となるデータはキーと呼ばれる。
【０００５】
ハッシュ方式では、線形探索法におけるメモリ空間上の表に似た表を格納するメモリ空間が用意される。さらに、ハッシュ関数が用意される。ハッシュ関数により、大きなサイズのキー（例示：ＩＰルータにおけるＩＰｖ４でのアドレス（３２ｂｉｔ））と小さいサイズのデータ（ハッシュ値）とに多対一の対応が与えられる。
【０００６】
図１を参照すると、ハッシュ方式のデータベースを示すイメージ図が示されている。線形探索法でのメモリ空間上の表においてあて先ＩＰアドレスと次段の処理回路のアドレスとを関連づけたデータに相当するのが、図１における登録キー域２、データ域４、ポインタ域６を持った結合データ（構造体）である。メモリ空間には他に、ハッシュ値をアドレスとして指されるそのサイズに見合った小さい領域（ハッシュ表）が用意され、この領域は運用前に特定の末尾記号８で初期化されている。
【０００７】
図２を参照すると、ハッシュ方式のデータベースにデータを登録する手順を示すフローチャートが示されている。
【０００８】
ステップＳ１０２：登録が必要になるとまずこの構造体のメモリＰが一領域確保される。
【０００９】
ステップＳ１０４：登録キーからハッシュ関数によって小さいサイズのハッシュ値が計算される。
【００１０】
ステップＳ１０６：あて先ＩＰアドレスに当る登録キーが登録キー域２に書き込まれる。
【００１１】
ステップＳ１０８：次段の処理回路のアドレスに当たる登録データがデータ域４に書き込まれる。
【００１２】
ステップＳ１１０：ハッシュ表上でハッシュ値の指す位置にある記憶域の内容はこのＰを指すポインタに変更され、初期にハッシュ表にあった末尾記号は構造体上のＰのポインタ域に移される。
【００１３】
ステップＳ１１２：複数の登録キーに対して繰り返されるこのフローにおいて、ハッシュ値が以前の登録キーのハッシュ値と同一であった場合（シノニムと呼ばれる）には、ハッシュ表上のハッシュ値の指す位置にある記憶域の内容はそのとき新たに確保された領域Ｐを指す構造体上のポインタ域に移される。
【００１４】
結果として、ハッシュ値が指すハッシュ表の位置から始まって最初に確保された領域（ポインタ域に末尾記号が登録されている）までの、図１に示されるような連鎖（シノニムチェーン）が出来上がる。
【００１５】
図３を参照すると、ハッシュ方式のデータベースを検索する手順を示すフローチャートが示されている。
【００１６】
ステップＳ１２２：検索キーが与えられると、ハッシュ関数によってハッシュ値が計算され、ハッシュ表上においてそのハッシュ値の指す位置にある記憶域の内容が参照される。
【００１７】
ステップＳ１２４：ハッシュ表内容が末尾記号の場合は検索キーが登録されていないと判断され、失敗が通知されて検索が終了される。
【００１８】
ステップＳ１２６：ハッシュ表内容が末尾記号以外の場合、その内容をポインタとしてメモリから構造体Ｐが読み出される。
【００１９】
ステップＳ１２８：検索キーと読み出された構造体Ｐの登録キー域２とが照合される。
【００２０】
ステップＳ１３４：照合の結果が一致であった場合、領域Ｐのデータ域４が検索結果として出力され、検索が終了される。
【００２１】
ステップＳ１３０：照合の結果が一致しない場合、ポインタ域６が参照され、末尾記号であるか否かの判定（末尾記号であったら失敗が通知されて終了）が行われる。
【００２２】
ステップＳ１３２：末尾記号でなかったら領域Ｐのポインタ域の指す構造体の次の領域が新たにＰとして読み取られ、ステップＳ１２８に戻る。
【００２３】
以上に示されるようなハッシュ方式のデータベース構築／検索手順は、線形探索に比べればはるかに高速だが、キーの一致判定や末尾記号の判定の結果によって検索動作自身を繰り返す手順によって低速になる要素もある。
【００２４】
さらに、検索が終了するまでの時間が一定でないという性質もある。そのため、検索の終了を監視する手順と手段が必要である。
【００２５】
他に高速なデータベースの検索方法としては、特殊な回路構成のメモリセルの配列に前面アクセスする連想メモリ方式や、データをツリー構造に登録することで読み出し回数を減らすツリー検索方式などがある。
【００２６】
同一キーに対してデータチェーンを作る方法、アドレスレジスタにある最新のデータベースアクセス痕跡を使って、登録キー／検索キー比較の結果が早く一致するようにシノニムチェーンを再構成する方法が知られている（特許文献１参照）。
【００２７】
特定のアプリケーション（ＭＰＥＧ４）において、検索キーがもつ特定の強い性質：ＲＵＮ／ＬＥＶＥＬ／ＬＡＳＴの領域を持ちこれらを分離することで簡単な処理系が得られるという性質を使った処理速度改善方法が知られている（特許文献２参照）。
【００２８】
似通った文字列に対しても偏りの少ないハッシュ値を確実に発生するための工夫が知られている（特許文献３参照）。
【００２９】
連想メモリとパトリシアツリーの組み合わせが知られている（特許文献４参照）。
【００３０】
【特許文献１】特開平０５−１４３６４８号公報
【特許文献２】特開２０００−１０５７７０号公報
【特許文献３】特開２００２−４９６４５号公報
【特許文献４】特開２００３−２３４７６２号公報
【発明の開示】
【発明が解決しようとする課題】
【００３１】
本発明の目的は、検索が一定の時間で終了する検索プログラム、検索用回路、及びルータを提供することである。
【００３２】
本発明の他の目的は、検索が終了したタイミングを監視する手段を必要としない検索プログラム、検索用回路、及びルータを提供することである。
【００３３】
本発明のさらに他の目的は、検索動作が高速な検索プログラム、検索用回路、及びルータを提供することである。
【課題を解決するための手段】
【００３４】
以下に、［発明を実施するための最良の形態］で使用される番号を括弧付きで用いて、課題を解決するための手段を説明する。これらの番号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために付加されたものである。ただし、それらの番号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００３５】
本発明による検索プログラム（２２）は、登録用プログラム（２４）と、検索用プログラム（２６）とを備えている。
登録用プログラム（２４）は、検索キーを用いて検索される登録データを、ｎ−１個の０と１個の１とからなるｎ桁のワンホット表現に変換するステップ（Ｓ２、Ｓ４２）と、検索キーを所定桁数ごとに区切るステップ（Ｓ６、Ｓ１６、Ｓ４６、Ｓ５６）と、区切られた検索キーを順次、用いてメモリ空間上のアドレスを指定する指定ステップ（Ｓ８、Ｓ４８）と、指定ステップにおいて指定されたアドレスからｎ桁のデータを抽出してワンホット表現と各桁ごとに論理和を取り、同じアドレスに書き込むステップ（Ｓ１０、Ｓ５０）とを備えている。
検索用プログラム（２６）は、入力された検索キーを所定桁数ごとに区切るステップ（Ｓ２４、Ｓ３４、Ｓ６８、Ｓ７８）と、区切られた第１番目の検索キーを用いてメモリ空間上のアドレスを指定する第２指定ステップ（Ｓ２６の一回目、Ｓ７０の一回目）と、第２指定ステップにおいて指定されたアドレスからｎ桁のデータを抽出して、全ての桁が１からなるデータと各桁ごとに論理積を取り、一時データに書き込むステップ（Ｓ２８の一回目、Ｓ７２の一回目）と、区切られた第２番目以降の検索キーを順次又は並列して用いてメモリ空間上のアドレスを指定する第３指定ステップ（Ｓ２６の二回目以降、Ｓ７０の二回目以降）と、第３指定ステップにおいて指定されたアドレスからｎ桁のデータを抽出して一時データと各桁ごとに論理積を取って一時データを更新するステップ（Ｓ２８の二回目以降、Ｓ７２の二回目以降）と、第３指定ステップにおいて検索キーの全ての区切りが用いられたとき、一時データを出力するステップ（Ｓ３６Ｙｅｓ、Ｓ８０Ｙｅｓ）とを備えている。
【００３６】
本発明による検索用回路（５０）は、登録部（６０）と、検索部（７０）とを備えている。
登録部（６０）は、検索キーを用いて検索される登録データを、ｎ−１個の０と１個の１とからなるｎ桁のワンホット表現に変換するワンホット表現変換部（６２）と、検索キーを所定桁数ごとに区切る検索キー区切り部（６３）と、区切られた検索キーを順次、用いてメモリ空間上のアドレスを指定するアドレス指定部（６４）と、アドレス指定部により指定されたアドレスからｎ桁のデータを抽出してワンホット表現と各桁ごとに論理和を取り、同じアドレスに書き込む論理和書込部（６５）とを備えている。
検索部（７０）は、入力された検索キーを所定桁数ごとに区切る第２検索キー区切り部（７１）と、区切られた第１番目の検索キーを用いてメモリ空間上のアドレスを指定する第２アドレス指定部（７２）と、第２アドレス指定部により指定されたアドレスからｎ桁のデータを抽出して、全ての桁が１からなるデータと各桁ごとに論理積を取り、一時データとして保存する論理積書込部（７３）と、区切られた第２番目以降の検索キーを順次又は並列して用いてメモリ空間上のアドレスを指定する第３アドレス指定部（７４）と、第３アドレス指定部により指定されたアドレスからｎ桁のデータを抽出して一時データと各桁ごとに論理積を取って一時データを更新する第２論理積書込部（７５）と、第３アドレス指定部により検索キーの全ての区切りが用いられたとき、一時データを出力する出力部（７７）を備えている。
【００３７】
本発明によるルータは、登録部（６０）と、検索部（７０）とを備えている。
登録部（６０）は、検索キーを用いて検索される登録データを、ｎ−１個の０と１個の１とからなるｎ桁のワンホット表現に変換するワンホット表現変換部（６２）と、検索キーを所定桁数ごとに区切る検索キー区切り部（６３）と、区切られた検索キーを順次、用いてメモリ空間上のアドレスを指定するアドレス指定部（６４）と、アドレス指定部により指定されたアドレスからｎ桁のデータを抽出してワンホット表現と各桁ごとに論理和を取り、同じアドレスに書き込む論理和書込部（６５）とを備えている。
検索部（７０）は、入力された検索キーを所定桁数ごとに区切る検索キー区切り部（７１）と、区切られた第１番目の検索キーを用いてメモリ空間上のアドレスを指定する第２アドレス指定部（７２）と、第２アドレス指定部により指定されたアドレスからｎ桁のデータを抽出して、全ての桁が１からなるデータと各桁ごとに論理積を取り、一時データとして保存する論理積書込部（７３）と、区切られた第２番目以降の検索キーを順次又は並列して用いてメモリ空間上のアドレスを指定する第３アドレス指定部（７４）と、第３アドレス指定部により指定されたアドレスからｎ桁のデータを抽出して一時データと各桁ごとに論理積を取り、一時データを更新する第２論理積書込部（７５）と、第３アドレス指定部により検索キーの全ての区切りが用いられたとき、一時データを出力する出力部（７７）とを備えている。
【発明の効果】
【００３８】
本発明によれば、検索が一定の時間で終了する検索プログラム、検索用回路、及びルータが提供される。
【００３９】
さらに本発明によれば、検索が終了したタイミングを監視する手段を必要としない検索プログラム、検索用回路、及びルータが提供される。
【００４０】
さらに本発明によれば、検索動作が高速な検索プログラム、検索用回路、及びルータが提供される。
【発明を実施するための最良の形態】
【００４１】
以下、図面を参照しながら本発明を実施するための最良の形態における検索プログラム、検索用回路、ルータについて説明する。
【００４２】
（第１実施例）
図４を参照すると、本実施例における検索プログラム又は検索用回路の構成が示されている。検索プログラム又は検索用回路５０は、登録部６０と検索部７０とを備えている。
【００４３】
登録部６０は、入力部６１と、ワンホット表現変換部６２と、検索キー区切り部６３と、アドレス指定部６４と、論理和書込部６５を備えている。検索部７０は、第２検索キー区切り部７１と、第２アドレス指定部７２と、論理積書込部７３と、第３アドレス指定部７４と、第２論理積書込部７５と、ワンホット表現逆変換部７６と、出力部７７とを備えている。検索キー区切り部６３と、第２検索キー区切り部７１とは同一のプログラム又は回路により実現されていてもよい。アドレス指定部６４と、第２アドレス指定部７２と、第３アドレス指定部７４とは、同一のプログラム又は回路により実現されていてもよい。論理積書込部７３と、第２論理積書込部７５とは同一のプログラム又は回路により実現されていてもよい。
【００４４】
検索プログラム又は検索用回路５０は、検索キーを入力して対応する登録データを出力する検索動作を行う。検索キーは例えばネットワーク中でデータが送られるあて先アドレスを表し、登録データは例えばデータが次に送られる回路のアドレスを表す。検索プログラム又は検索用回路５０はさらに、検索キーとそれに対応する登録データとを登録する登録動作も行う。
【００４５】
登録動作において、入力部６１は、検索キーと対応する登録データとを読み込む。ワンホット表現変換部６２は、読み込まれた登録データ（バイナリデータ等の形式をしている）を、ｎ−１個の０と１個の１とからなるｎ桁のワンホット表現に変換する。検索キー区切り部６３は、検索キーを所定桁数ごとに区切る。アドレス指定部６４は、区切られた検索キーを順次、用いてメモリ空間上のアドレスを指定する。論理和書込部６５は、アドレス指定部により指定されたアドレスからｎ桁のデータを抽出して、登録データから得られたワンホット表現と各桁ごとに論理和を取り、同じアドレスに書き込む。
【００４６】
検索動作において、入力部６１は、検索キーを読み込む。第２検索キー区切り部７１は、入力された検索キーを所定桁数ごとに区切る。第２アドレス指定部７２は、区切られた第１番目の検索キーを用いてメモリ空間上のアドレスを指定する。論理積書込部７３は、第２アドレス指定部により指定されたアドレスからｎ桁のデータを抽出して、全ての桁が１からなるデータと各桁ごとに論理積を取り、同じアドレスに書き込む。第３アドレス指定部７４は、区切られた第２番目以降の検索キーを順次、用いてメモリ空間上のアドレスを指定する。第２論理積書込部７５は、第３アドレス指定部により指定されたアドレスからｎ桁のデータを抽出して各桁ごとに論理積を取り、同じアドレスに書き込む。この動作が検索キーの最後の区切りまで行われたとき、ワンホット表現逆変換部７６は、得られた論理積をワンホット表現から元のバイナリデータ等のデータに戻す。これにより登録データが得られる。得られた登録データは、出力部７７により出力される。
【００４７】
こうした構成は、電子回路によってハードウェア的に（半導体上の回路構成として）実現することも可能であり、ソフトウェアによって実現することも可能である。一部はソフトウェア、他の一部は電子回路によって構成されてもよい。
【００４８】
図５を参照すると、本実施例におけるルータの構成が示されている。ルータ２は、通信部８と、入力部１０と、出力部１２と、検索部１４とを備えている。検索部１４は、演算制御部１６と記憶部１８とを備えている。
【００４９】
外部回路４から検索キー（ＩＰアドレスなどのあて先アドレス）を含むデータを通信部８が受信すると、入力部１０はその検索キー１１を抽出して検索部１４に送る。検索部１４では、後述するテーブルとプログラムを用いて、検索キー１１に対応づけられた次段の送り先のアドレスである登録データを検索する。検索された登録データは出力部１２に出力される。通信部８は、出力部１２から登録データ１３を受け取り、その登録データ１３に示されるアドレス（次段の処理回路のアドレス）を有する外部回路６に、外部回路４から受け取ったデータを転送する。以下の記述において、この動作は検索動作と呼ばれる。
【００５０】
さらに、ルータ２は、外部回路４を経由して送られてくるデータを用いて、検索キー１１と登録データ１３との関連づけを変更する。以下の記述において、この動作は登録動作と呼ばれる。
【００５１】
図６を参照すると、記憶部１８は、テーブル２０と、検索プログラム２２とを格納している。検索プログラム２２は、登録用プログラム２４と、検索用プログラム２６と、ワンホット表現プログラム２８とを含んでいる。
【００５２】
以下の説明においては、図４に示される構成は検索プログラム２２により実現されているものとして説明がなされるが、検索プログラム２２に代えて、電子回路によりハードウェア的に実現されることも可能である。
【００５３】
以下において、記憶部１８に格納されたプログラムを演算制御部１６が読み出し、そのプログラムに記述された手順に従って行う動作は、当該プログラム自身が行う動作として記述される。
【００５４】
ワンホット表現プログラム２８は、バイナリデータ等のデータを、“０００・・・０”の中のいずれか一つ、そして唯一つの桁が“１”である表現（ワンホット表現）に変換する機能を有する。ワンホット表現プログラム２８はさらに、ワンホット表現をバイナリデータ等のデータに逆変換する機能を有する。
【００５５】
図７を参照すると、ワンホット表現プログラム２８が行う変換の最も簡単な例が示されている。十進数で０、すなわちバイナリ表現で０の値は、ワンホット表現では最も下位の桁のみ１で他の桁はすべて０の表現、“０００００１”で表現される。十進数で１、すなわちバイナリ表現で１の値は、ワンホット表現では二桁目のみ１で他の桁はすべて０の表現、“００００１０”で表現されている。十進数で２、すなわちバイナリ表現で１０の値は、ワンホット表現では三桁目のみ１で他の桁はすべて０の表現、“０００１００”で示されている。以下同様である。
【００５６】
図８を参照すると、検索キー１１（以下、データベースにデータが登録される登録動作について述べる場合には登録キー、データベースのデータを検索する検索動作について述べる場合には検索キーと称される。図８には両者の場合を合わせて登録／検索キーと書かれている）、登録データ１３、テーブル２０、及びそれらの関係を示す矢印の一例が示されている。
【００５７】
図９は、登録用プログラム２４が行う、データをテーブル２０に登録する際の登録動作を示すフローチャートである。テーブル２０の初期値は、全て０である。
【００５８】
ステップＳ２：登録用プログラム２４は、ワンホット表現プログラム２８を用いて、外部回路４から入力部１０を介して入力された登録データをワンホット表現に変換する。図８に対応して例示すれば、登録データ“１”はワンホット表現“００・・・０００００１０”に変換され、登録データ“５”はワンホット表現“００・・・０１０００００”に変換される。まず図８における登録／検索キー１、登録データ＝１の例を挙げて、以下の説明を行う。
【００５９】
ステップＳ４：あらかじめ定義された値であるオフセット値を、テーブル２０に使用するメモリ空間の先頭アドレスに設定する。図８においてアドレスを指定することは、行を指定することに相当する。
【００６０】
ステップＳ６：登録用プログラム２４は、外部回路から入力部１０を介して入力された登録キー（例えば３２ビットのバイナリデータ）の最初の部分（本例ではＭＳＢ側８ビット）を抽出する。抽出された部分は説明上、ａ１と表現される。
【００６１】
ステップＳ８：テーブル２０から、ａ１にオフセット値を加算した値のアドレスに登録されているデータが読み出される。登録キーから抽出する部分を８ビットであるとすると、アドレスはオフセット値＋０からオフセット値＋２５５までの、２＾８＝２５６のアドレスのうちのいずれかのアドレス（このアドレスにより指示されるテーブル２０のメモリ空間が図８においてメモリ空間Ｔ１として示されている）に登録されたデータが読み出される。最初に読み出されるデータは、テーブル２０の初期値が全て０だから、“００・・・０００００００”という行である。
【００６２】
ステップＳ１０：読み出されたデータ“００・・・０００００００と登録データ“００・・・０００００１０”とに対して、桁ごとに論理和が取られ、読み出されたデータと同じアドレスに演算の結果が書き込まれる。図８においては、メモリ空間Ｔ１のなかの“００・・・０００００１０”と書かれた行が、書き込まれた結果である。
【００６３】
ステップＳ１２：登録キーがすべて取り込まれたか否かが判定される。登録キーの取り込みが終了した場合（図８でａ１からａｎまで登録された場合）、登録動作は完了する。登録キーの取り込みが終了していない場合、例えばａ１のみ取り込みが終了している場合、動作はステップＳ１４に移行する。
【００６４】
ステップＳ１４：オフセット値に２５６を加算した値が新たなオフセット値として設定される。その結果、登録されるメモリ空間は例えばメモリ空間Ｔ１からＴ２に移動する。
【００６５】
ステップＳ１６：登録キーの次の部分ａ２（例えば８ビットのバイナリデータ）が抽出される。以下、ステップＳ８、Ｓ１０の動作が行われる。但し、上記の説明中、ａ１はａ２に読み替えられ、Ｔ１はＴ２に読み替えられる。その後、ａ３、ａ４、…ａｎと登録キーがすべて取り込まれるまで、ステップＳ１２の動作により、ステップＳ８からステップＳ１６までの動作が繰り返される。
【００６６】
以上の動作により、図８に示される登録／検索キー１、登録データ＝１の登録が完了する。登録／検索キー２、登録データ＝５についても、同様に登録される。但し、上記の説明中、ａ１、ａ２、…ａｎはｂ１、ｂ２、…ｂｎに、“００・・・０００００１０”は“００・・・０１０００００”にそれぞれ読み替えられる。
【００６７】
以上の登録動作により構築されたデータベースは、登録キーのａ１の部分に対応して登録データのワンホット表現がメモリ空間Ｔ１に現れ、登録キーのａ２の部分に対応して登録データのワンホット表現がメモリ空間Ｔ２に現れ、以下同様、となっている。
【００６８】
異なる登録／検索キーから、偶発的に同じアドレスに対する書き込みが行われる場合がある。図８の例では、ａ２とｂ２とが同じ値であったために、メモリ領域Ｔ２において、“００・・・０００００１０”が書き込まれた後で“００・・・０１０００００”との論理和が取られ、”００・・・０１０００１０”と、１が二箇所に現れる「ツーホット表現」となっているアドレスが示されている。登録される登録／検索キーが多くなれば、１が二箇所以上に現れるアドレスが多くなる。
【００６９】
図１０は、検索用プログラム２６が行う、データをテーブル２０から検索する際の検索動作を示すフローチャートである。
【００７０】
ステップＳ２０：検索用プログラム２６は、全ての桁が１からなる一時データ“１１・・・１１１１１１１”を用意する。
【００７１】
ステップＳ２２：あらかじめ定義された値であるオフセット値を、テーブル２０に使用するメモリ空間の先頭アドレスに設定する。
【００７２】
ステップＳ２４：外部回路から入力部１０を介して入力された検索キー（例えば３２ビットのバイナリデータ）の最初の部分（本例ではＭＳＢ側８ビット）を抽出する。抽出された部分は説明上、ａ１と表現される。
【００７３】
ステップＳ２６：テーブル２０から、ａ１にオフセット値を加算した値のアドレスに登録されているデータが読み出される。登録キーが８ビットであるとすると、アドレスはオフセット値＋０からオフセット値＋２５５までの、２＾８＝２５６のアドレスのうちのいずれかのアドレス（このアドレスにより指示されるテーブル２０のメモリ空間が図８においてメモリ空間Ｔ１として示されている）に登録されたデータが読み出される。
【００７４】
ステップＳ２８：読み出されたデータと一時データ“１１・・・１１１１１１１”とに対して、桁ごとに論理積が取られ、新たな一時データとして保存される。例えば読み出されたデータが“００・・・０１００１１０”であった場合、一時データとして、論理積の結果“００・・・０１００１１０”が保存される。
【００７５】
ステップＳ３０：検索キーがすべて取り込まれたか否かが判定される。検索キーの取り込みが終了した場合（図８でａ１からａｎまで検索された場合）、動作はステップＳ３６に移行する。検索キーの取り込みが終了していない場合、例えばａ１のみ取り込みが終了している場合、動作はステップＳ３２に移行する。
【００７６】
ステップＳ３２：オフセット値に２５６を加算した値が新たなオフセット値として設定される。
【００７７】
ステップＳ３４：検索キーの次の部分ａ２（例えば８ビットのバイナリデータ）が抽出される。以下、ステップＳ２６、Ｓ２８の動作が行われる。但し、上記の説明中、ａ１はａ２に読み替えられ、Ｔ１はＴ２に読み替えられる。その後、ａ３、ａ４、…ａｎと検索キーがすべて取り込まれるまで、ステップＳ３０の動作により、ステップＳ２６からステップＳ３４までの動作が繰り返される。
【００７８】
ある検索キーに対して、ステップＳ３４でその検索キーの中から８ビットづつ順次、抽出され、ステップＳ２８で順次、論理積を取られる過程で、一時データに含まれる“１”の桁は徐々に減り、ワンホット表現に近づく。
【００７９】
ステップＳ３６：入力された検索キーの取り込みが完了したら、その時点での一時データがワンホット表現となっているか否かが判定される。ワンホット表現となっていなかったら、検索が失敗したことを示す信号が出力される。ワンホット表現になっていたら、ステップＳ３８の処理に移行する。
【００８０】
ステップＳ３８：検索用プログラム２６は、ワンホット表現プログラム２８を用いて、以上の手順で得られたワンホット表現をバイナリデータ等にエンコードし、出力部１２に登録データとして出力する。
【００８１】
以上が、本実施の形態における検索動作である。尚、テーブル２０に登録されているデータのうち不要になったものは、登録の手順をわずかに変更した次の手順で削除することができる。即ち、登録の手順において用意されたワンホット表現を、削除データのワンホット表現の反転（“１１１１１・・・１”の中に一つの“０”がある表現）に変える。これと、テーブル２０に登録されているデータとの論理積を取ることにより、登録データを示す位置の“１”が“０”に換わり、削除が実現される。
【００８２】
本発明による検索プログラムでは、登録時、図８のメモリ領域Ｔ２にあるような登録データの重ね合わせがメモリ上に記憶される。検索時、読み出しデータと一時データとの論理積を検索キーの最後の部分まで繰り返した時点で、重ね合わせが解消しワンホット表現が現れるようになっている。即ち、登録データをワンホット表現にしたことにより、メモリ中のデータはハッシュ方式におけるシノニムと性質の異なる分離可能な重ね合わせとなる。これによって、ハッシュ方式の検索手順にあった登録／検索キーの一致判定結果による処理手順の分岐が不要となり、検索が一定の論理積繰り返し回数で決まる時間で終了する。
【００８３】
さらに、上記の説明では検索結果がワンホット表現でない場合検索失敗と判定する方式が説明されたが、ワンホット表現による重ね合わせは分離可能であることを最も重要な性質としている。例えば、図７に示されるようにワンホット表現→バイナリ表現の対応が“００００１０”→“００１”、“００１０００”→“０１１”であるとき、“００１０１０”→“００１”、“０１１”というように、ツーホット表現からは２つのバイナリデータがエンコードによって得られる。このとき、一つのワンホット表現“００１０１０”から二つの登録データ“００１”、“０１１”が得られる。そのため、二つ以上のデータが登録されているとして、各“１”の位置についてバイナリ表現に戻す方式は、例えば１対多通信方式として充分に動作する。
【００８４】
さらに、検索結果はワンホット表現のまま他の回路等に送信されてもよい。この場合も、ハッシュ方式の検索手順にあった登録／検索キーの一致判定結果による分岐が不要となり、検索が一定の論理積繰り返し回数で決まる時間で終了する点は同じである。
【００８５】
（実施の第２形態）
実施の第２形態は、実施の第１形態におけるアドレスオフセットの動作を、書き込み・読み出しデータのビット方向の操作に変更した形態になっている。
【００８６】
実施の第２形態における検索プログラムを使用するルータの構成は、図５に示されたものと同じである。図６に示された記憶部１８の構成のうち、テーブル２０の構成、登録用プログラム２４と検索用プログラム２６の動作が実施の第１形態と異なっている。
【００８７】
図１１を参照すると、検索キー１１（以下、データベースにデータが登録される動作（登録時の動作）について述べる場合には登録キー、データベースのデータを検索する動作（検索時の動作）について述べる場合には登録キーと称される。図１１には両者の場合を合わせて登録／検索キーと書かれている）、登録データ１３、テーブル２０、及びそれらの関係を示す矢印の一例が示されている。
【００８８】
図１２は、登録用プログラム２４が行う、データをテーブル２０に登録する際の登録動作を示すフローチャートである。テーブル２０の初期値は、全て０である。
【００８９】
ステップＳ４２：登録用プログラム２４は、ワンホット表現プログラム２８を用いて、外部回路４から入力部１０を介して入力された登録データをワンホット表現に変換する。図８に対応して例示すれば、登録データ“１”はワンホット表現“００・・・０００００１０”に変換され、登録データ“５”はワンホット表現“００・・・０１０００００”に変換される。まず図８における登録／検索キー１、登録データ＝１の例を挙げて、以下の説明を行う。
ワンホット表現に変換された登録データは、その登録データの幅のｎ倍（ｎは２以上の整数）の、すべての桁が“０”であるデータの左端に埋め込まれる。以後、この登録データが埋め込まれたデータをＤと呼ぶ。
【００９０】
ステップＳ４４：あらかじめ定義された値であるオフセット値を、テーブル２０に使用するメモリ空間の先頭アドレスに設定する。図１１においてアドレスを指定することは、行を指定することに相当する。
【００９１】
ステップＳ４６：登録用プログラム２４は、外部回路から入力部１０を介して入力された登録キー（例えば３２ビットのバイナリデータ）の最初の部分（例えばＭＳＢ側８ビット。その場合、図１１に示されるテーブル２０の縦は２＾８＝２５６行）を抽出する。抽出された部分は説明上、ａ１と表現される。
【００９２】
ステップＳ４８：テーブル２０から、ａ１にオフセット値を加算した値のアドレスに登録されているデータが読み出される。最初に読み出されるデータは、テーブル２０の初期値が全て０だから、“００・・・０００００００”という行である。
【００９３】
ステップＳ５０：読み出されたデータ“００・・・０００００００”とＤとに対して、桁ごとに論理和が取られ、読み出されたデータと同じアドレスに演算の結果が書き込まれる。最初のＤは、左端に登録データが埋め込まれているから、図１１において左端のメモリ空間Ｔ１に“０・・・０００００１０”と書かれた行が、登録キーのａ１の部分に対応している。
【００９４】
ステップＳ５２：登録キーがすべて取り込まれたか否かが判定される。登録キーの取り込みが終了した場合（図１１でａ１からａｎまで登録された場合）、登録動作は完了する。登録キーの取り込みが終了していない場合、例えばａ１のみ取り込みが終了している場合、動作はステップＳ５４に移行する。
【００９５】
ステップＳ５４：登録データのワンホット表現をその幅分右に移動し、左に０を埋め込んだものが新たなＤとされる。図１４に示されているのはこの操作の一例である。これにより、テーブル２０においてワンホット表現が登録される部分が、例えばメモリ領域Ｔ１からＴ２へ、ひとつぶん右に移動する。
【００９６】
ステップＳ５６：登録キーの次の部分ａ２（例えば８ビットのバイナリデータ）が抽出される。以下、ステップＳ４８、Ｓ５０の動作が行われる。但し、上記のステップＳ４８、Ｓ５０の説明中、ａ１はａ２に読み替えられ、Ｔ１はＴ２に読み替えられる。さらにステップＳ５２の動作により、登録キーがすべて取り込まれるまでステップＳ４８からステップＳ５６までの動作が繰り返される。
【００９７】
以上の動作により、図１１に示される登録／検索キー１、登録データ＝１の登録が完了する。登録／検索キー２、登録データ＝５についても、同様に登録される。但し、上記の説明中、ａ１、ａ２、…ａｎはｂ１、ｂ２、…ｂｎに、“００・・・０００００１０”は“００・・・０１０００００”にそれぞれ読み替えられる。
【００９８】
以上の登録動作により構築されたデータベースは、登録キーのａ１の部分に対応して登録データのワンホット表現がメモリ空間Ｔ１に現れ、登録キーのａ２の部分に対応して登録データのワンホット表現がメモリ空間Ｔ２に現れ、以下同様、となっている。
【００９９】
異なる登録／検索キー２から、偶発的にテーブル２０の中の同じ位置に対する書き込みが行われる場合がある。図８の例では、ａ２とｂ２とが同じ値であったために、メモリ領域Ｔ２において、“００・・・０００００１０”が書き込まれた後で“００・・・０１０００００”との論理和が取られ、”００・・・０１０００１０”と、１が二箇所に現れる「ツーホット」となっているアドレスが示されている。登録される登録／検索キーが多くなれば、１が二箇所以上に現れるアドレスが多くなる。
【０１００】
図１３は、検索用プログラム２６が行う、データをテーブル２０から検索する際の検索動作を示すフローチャートである。
【０１０１】
ステップＳ６２：検索用プログラム２６は、全ての桁が１からなり登録データの区切りと同じ桁数の一時データ“１１・・・１１１１１１１”を用意する。
【０１０２】
ステップＳ６４：登録データのワンホット表現のｎ倍の幅の読み出しデータ中から、後述するステップＳ７２において一時データと論理積を取る部分を説明上、「指定部分」と名づける。指定部分は、最初は左端に設定される。
【０１０３】
ステップＳ６６：あらかじめ定義された値であるオフセット値を、テーブル２０に使用するメモリ空間の先頭アドレスに設定する。
【０１０４】
ステップＳ６８：外部回路から入力部１０を介して入力された検索キー（例えば３２ビットのバイナリデータ）の最初の部分（例えばＭＳＢ側８ビット）を抽出する。抽出された部分は説明上、ａ１と表現される。
【０１０５】
ステップＳ７０：テーブル２０から、ａ１にオフセット値を加算した値のアドレスに登録されているデータが読み出される。
【０１０６】
ステップＳ７２：読み出されたデータと一時データ“１１・・・１１１１１１１”とに対して、指定部分に関して桁ごとに論理積が取られ、新たな一時データとして保存される。
【０１０７】
ステップＳ７３：指定部分が登録データのワンホット表現の幅分、右に移される。
【０１０８】
ステップＳ７４：検索キーがすべて取り込まれたか否かが判定される。検索キーの取り込みが終了した場合（図１１でａ１からａｎまで検索された場合）、動作はステップＳ８０に移行する。検索キーの取り込みが終了していない場合、例えばａ１のみ取り込みが終了している場合、動作はステップＳ７６に移行する。
【０１０９】
ステップＳ７６：指定部分が登録データのワンホット表現の幅分、右に移される。
【０１１０】
ステップＳ７８：検索キーの次の部分ａ２（例えば８ビットのバイナリデータ）が抽出される。以下、ステップＳ７０、Ｓ７２の動作が行われる。但し、上記の説明中、ａ１はａ２に読み替えられ、Ｔ１はＴ２に読み替えられる。さらにステップＳ７４の動作により、検索キーがすべて取り込まれるまでステップＳ７０からステップＳ７８までの動作が繰り返される。
【０１１１】
ある検索キーに対して、ステップＳ７８でその検索キーの中から所定幅、例えば８ビットづつ順次、抽出され、ステップＳ７２で順次、論理積を取られる過程で、一時データに含まれる“１”の桁は徐々に減り、ワンホット表現に近づく。
【０１１２】
ステップＳ８０：入力された検索キーの取り込みが完了したら、その時点での一時データがワンホット表現となっているか否かが判定される。ワンホット表現となっていなかったら、検索が失敗したことを示す信号が出力される。ワンホット表現になっていたら、ステップＳ８２の処理に移行する。
【０１１３】
ステップＳ８２：検索用プログラム２６は、ワンホット表現プログラム２８を用いて、以上の手順で得られたワンホット表現をバイナリデータ等にエンコードし、出力部１２に登録データとして出力する。
【０１１４】
以上の説明においては、検索キーをａ１、ａ２、…ａｎと逐次に区切って抽出する動作が説明された。しかし、検索キーを最初にａ１、ａ２、…ａｎと区切っておき、区切りの全てに対してテーブルへの登録動作を並列に行っても、登録動作は全く同じように行われる。同様に検索動作においても、ある検索キーに対応するテーブルのＴ１、Ｔ２、…Ｔｎに書き込まれた登録内容をすべて並列して読み出して一時データとして保存し、それらの論理積を取ることにより、検索動作が行われる。回路、ソフトウェア等の構成によっては、こうした並列動作が行われたほうが登録・検索動作が高速となり好ましい。
【０１１５】
実施の第２形態において、登録／検索キーの区切りが８ビットである例を挙げたが、この区切りはもっと大きくてもよい。この区切りが大きくても、テーブル２０が使用するメモリのアドレス（行を指定）が実施の第１形態に比べて少なくてすむためである。
【０１１６】
実施の第２形態における検索プログラムは、幅の広いメモリを用いる点で、半導体チップ内で実現する方法に適している。
【０１１７】
本発明による検索プログラム、その検索用回路、及びルータによれば、データベースの検索に要する時間が揺らがないという効果がある。これにより、検索の終了を監視する手順、手段を用意することなく効率的にシステム全体を構成することができる。
【図面の簡単な説明】
【０１１８】
【図１】図１は、ハッシュ方式のデータベースを示すイメージ図である。
【図２】図２は、ハッシュ方式のデータベースを登録する手順を示すフローチャートである。
【図３】図３は、ハッシュ方式のデータベースを検索する手順を示すフローチャートである。
【図４】図４は、検索プログラム又は検索用回路の構成を示す。
【図５】図５は、ルータの構成を示す。
【図６】図６は、記憶部の構成を示す。
【図７】図７は、ワンホット表現を説明するための図である。
【図８】図８は、実施の第１形態におけるテーブル検索方法を説明するためのメモリマップのイメージ図である。
【図９】図９は、実施の第１形態におけるデータベースを登録する手順を示すフローチャートである。
【図１０】図１０は、実施の第１形態におけるデータベースを検索する手順を示すフローチャートである。
【図１１】図１１は、実施の第２形態におけるテーブル検索方法を説明するためのメモリマップのイメージ図である。
【図１２】図１２は、実施の第２形態におけるデータベースを登録する手順を示すフローチャートである。
【図１３】図１３は、実施の第２形態におけるデータベースを検索する手順を示すフローチャートである。
【図１４】図１４は、実施の第２形態における登録動作を説明するための図である。
【符号の説明】
【０１１９】
２…ルータ
１１…検索キー
１３…登録データ
１４…検索部
２２…検索プログラム
５０…検索プログラム又は検索用回路
６０…登録部
７０…検索部
【図１】
2005328149.tif 000003
【図２】
2005328149.tif 000004
【図３】
2005328149.tif 000005
【図４】
2005328149.tif 000006
【図５】
2005328149.tif 000007
【図６】
2005328149.tif 000008
【図７】
2005328149.tif 000009
【図８】
2005328149.tif 000010
【図９】
2005328149.tif 000011
【図１０】
2005328149.tif 000012
【図１１】
2005328149.tif 000013
【図１２】
2005328149.tif 000014
【図１３】
2005328149.tif 000015
【図１４】
2005328149.tif 000016