JP3164257B2 - 索引方法 - Google Patents
索引方法Info
- Publication number
- JP3164257B2 JP3164257B2 JP01515393A JP1515393A JP3164257B2 JP 3164257 B2 JP3164257 B2 JP 3164257B2 JP 01515393 A JP01515393 A JP 01515393A JP 1515393 A JP1515393 A JP 1515393A JP 3164257 B2 JP3164257 B2 JP 3164257B2
- Authority
- JP
- Japan
- Prior art keywords
- bucket
- value
- data
- depth
- work variable
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
【0001】
【産業上の利用分野】本発明は、記憶装置に格納された
データの中から条件を満たすデータを取り出すアクセス
手段における索引方法に関するものである。
データの中から条件を満たすデータを取り出すアクセス
手段における索引方法に関するものである。
【0002】
【従来の技術】一つまたは複数のフィールドから構成さ
れるデータを記憶装置に格納し、一つまたは複数のフィ
ールドからなるキーが指定した値であるようなデータが
該記憶装置に格納されている位置を検索したり新しいデ
ータを格納する位置を決定する処理を高速に行なう索引
方法としては、ツリー構造を用いたものと、ハッシュを
用いたもの等がある。
れるデータを記憶装置に格納し、一つまたは複数のフィ
ールドからなるキーが指定した値であるようなデータが
該記憶装置に格納されている位置を検索したり新しいデ
ータを格納する位置を決定する処理を高速に行なう索引
方法としては、ツリー構造を用いたものと、ハッシュを
用いたもの等がある。
【0003】データ数をnとすると検索に要する時間
は、ツリーではO(log n)、ハッシュでは最短ではO
(1)となり、アクセス時間を短縮するためには、ハッシ
ュが有効である。
は、ツリーではO(log n)、ハッシュでは最短ではO
(1)となり、アクセス時間を短縮するためには、ハッシ
ュが有効である。
【0004】ところが、データを格納する領域が静的に
割り当てられる静的ハッシュではデータ量が増減する環
境には適応できない。割り当てられた領域サイズを越え
てデータを追加する場合、領域を再構成する必要があ
る。
割り当てられる静的ハッシュではデータ量が増減する環
境には適応できない。割り当てられた領域サイズを越え
てデータを追加する場合、領域を再構成する必要があ
る。
【0005】そこで、領域サイズが可変で、再構成の必
要がない動的ハッシュ法が R.J.Enbody,H.G.Du, "Dynamic Hashing Schemes" ACM C
omputingServeys,Vol.20,No.2,pp.85-113 に示されてい
る。
要がない動的ハッシュ法が R.J.Enbody,H.G.Du, "Dynamic Hashing Schemes" ACM C
omputingServeys,Vol.20,No.2,pp.85-113 に示されてい
る。
【0006】動的ハッシュ法の1つに拡張可能ハッシュ
がある。拡張可能ハッシュは、図7に示す如く、大域深
さと、{2の(大域深さ)乗}個のエントリを持つディ
レクトリと、該エントリからポイントされデータまたは
データの格納されるアドレスと局所深さを記憶するバケ
ットと、キーの値からハッシュ値を計算するハッシュ関
数計算手段とから構成される。
がある。拡張可能ハッシュは、図7に示す如く、大域深
さと、{2の(大域深さ)乗}個のエントリを持つディ
レクトリと、該エントリからポイントされデータまたは
データの格納されるアドレスと局所深さを記憶するバケ
ットと、キーの値からハッシュ値を計算するハッシュ関
数計算手段とから構成される。
【0007】キーが所望の値を持つデータを検索する際
には、ハッシュ関数計算手段を用いてキーの値からハッ
シュ値を計算し、ハッシュ値の下位から大域深さ分のビ
ットを用いてエントリを参照し、該エントリが指すバケ
ット内のデータを検索して所望のデータを得る。
には、ハッシュ関数計算手段を用いてキーの値からハッ
シュ値を計算し、ハッシュ値の下位から大域深さ分のビ
ットを用いてエントリを参照し、該エントリが指すバケ
ット内のデータを検索して所望のデータを得る。
【0008】データを挿入する際には、ハッシュ関数計
算手段を用いて該データのキーの値からハッシュ値を計
算し、ハッシュ値の下位から大域深さ分のビットを用い
てエントリを参照し、該バケットに格納領域があれば該
バケットに該データを格納する(図8(a)参照)。
算手段を用いて該データのキーの値からハッシュ値を計
算し、ハッシュ値の下位から大域深さ分のビットを用い
てエントリを参照し、該バケットに格納領域があれば該
バケットに該データを格納する(図8(a)参照)。
【0009】該バケットに格納領域がなければ、該バケ
ット内の全てのデータまたはポインタと挿入したいデー
タまたは該データへのポインタに関してハッシュ値の下
位から{(該バケットの局所深さ)+1}ビットの値に
よって該データまたはポインタを2つのバケットに分割
し、2つのバケットの局所深さを{(該バケットの局所
深さ)+1}とする。
ット内の全てのデータまたはポインタと挿入したいデー
タまたは該データへのポインタに関してハッシュ値の下
位から{(該バケットの局所深さ)+1}ビットの値に
よって該データまたはポインタを2つのバケットに分割
し、2つのバケットの局所深さを{(該バケットの局所
深さ)+1}とする。
【0010】そして、該2つのバケットの局所深さが大
域深さ以下であれば(図8(b)参照)、該分割された
バケットを指していた全てのエントリを、エントリ番号
の下位から(該2つのバケットの局所深さ)ビットの値
と該エントリが指すバケット内のポインタが指すデータ
またはデータのハッシュ値の下位から(該バケットの局
所深さ)ビットの値が等しくなるように更新する。
域深さ以下であれば(図8(b)参照)、該分割された
バケットを指していた全てのエントリを、エントリ番号
の下位から(該2つのバケットの局所深さ)ビットの値
と該エントリが指すバケット内のポインタが指すデータ
またはデータのハッシュ値の下位から(該バケットの局
所深さ)ビットの値が等しくなるように更新する。
【0011】該2つのバケットの局所深さが大域深さよ
り大きければ(図8(c)参照)、(2の大域深さ乗)
番から[{2の(該2つのバケットの局所深さ)乗}−
1]番までのエントリをディレクトリに追加し、追加し
た全てのエントリと該分割されたバケットを指していた
エントリを該エントリが指すバケット内のポインタが指
すデータまたはデータのハッシュ値の下位から(該バケ
ットの局所深さ)ビットの値とエントリ番号の下位から
(該バケットの局所深さ)ビットの値が等しくなるよう
に更新し、大域深さを該2つのバケットの局所深さと等
しくする。
り大きければ(図8(c)参照)、(2の大域深さ乗)
番から[{2の(該2つのバケットの局所深さ)乗}−
1]番までのエントリをディレクトリに追加し、追加し
た全てのエントリと該分割されたバケットを指していた
エントリを該エントリが指すバケット内のポインタが指
すデータまたはデータのハッシュ値の下位から(該バケ
ットの局所深さ)ビットの値とエントリ番号の下位から
(該バケットの局所深さ)ビットの値が等しくなるよう
に更新し、大域深さを該2つのバケットの局所深さと等
しくする。
【0012】拡張可能ハッシュでは、複数のエントリが
1つのバケットを指す場合があり、その場合、エントリ
番号の(該バケットの局所深さ)ビット以下が全て等し
いエントリが、該バケットを指す。
1つのバケットを指す場合があり、その場合、エントリ
番号の(該バケットの局所深さ)ビット以下が全て等し
いエントリが、該バケットを指す。
【0013】
【発明が解決しようとする課題】上記拡張可能ハッシュ
では、バケットの分割時に多くのエントリの更新を必要
とする場合があり、また、ディレクトリ拡張の際に多数
のエントリをコピーする必要があるため、挿入の処理時
間が長くなっていた。さらに、その間、他のプロセスは
該バケットおよびディレクトリの更新ができないため、
プロセス間の同時走行性が低下するという問題があっ
た。
では、バケットの分割時に多くのエントリの更新を必要
とする場合があり、また、ディレクトリ拡張の際に多数
のエントリをコピーする必要があるため、挿入の処理時
間が長くなっていた。さらに、その間、他のプロセスは
該バケットおよびディレクトリの更新ができないため、
プロセス間の同時走行性が低下するという問題があっ
た。
【0014】本発明は、上記に鑑みてなされたもので、
その目的としては、データを挿入する時間を短縮し、プ
ロセス間の同時走行性を高めた索引方法を提供すること
にある。
その目的としては、データを挿入する時間を短縮し、プ
ロセス間の同時走行性を高めた索引方法を提供すること
にある。
【0015】
【課題を解決するための手段】上記目的を達成するた
め、データを格納する記憶装置と、該記憶装置に格納さ
れたデータのうち所望のキー値を持つデータの格納場所
を調べるためのアクセス手段を具備する計算機システム
において、本発明は、前記アクセス手段を、キー値から
ハッシュ値を計算するハッシュ関数計算手段と、データ
の格納場所を保持するポインタまたはデータおよび局所
深さを保持するバケットと、前記バケットの格納場所を
保持する0番から2の整数(≧大域深さ)乗−1番まで
の2の整数乗個のエントリおよび大域深さを持ちエント
リ数を変化させうるディレクトリと、作業用変数とで構
成し、所望のキー値を持つデータを検索する際には、キ
ー値からハッシュ値を計算し、大域深さを作業用変数に
代入し、ハッシュ値の下位から該作業用変数値分のビッ
トを用いてエントリを参照し、該エントリがポイントす
るバケットの局所深さと該作業用変数値を比較し、該作
業用変数値を越えている場合には該作業用変数値に1を
加えたものを該作業用変数値の新しい値として再度上記
エントリの参照を行ない、該バケットの局所深さが該作
業用変数値以下の場合には該バケット内のデータを検索
して所望のデータを得るようにし、また、データを挿入
する際には、該データのキー値からハッシュ値を計算
し、前記大域深さを作業用変数に代入し、ハッシュ値の
下位から該作業用変数値分のビットを用いてエントリを
参照し、該エントリがポイントするバケットの局所深さ
と該作業用変数値を比較し、該作業用変数値を越えてい
る場合には該作業用変数値に1を加えたものを該作業用
変数値の新しい値として再度上記エントリの参照を行な
い、該バケットの局所深さが該作業用変数値以下の場合
には該バケットに格納領域があれば該バケットに該デー
タを格納し、該バケットに格納領域がなければ、該バケ
ット内の全てのデータまたはポインタと挿入したいデー
タまたは該データへのポインタに関してハッシュ値の下
位から該バケットの局所深さ+1ビットの値によって該
データまたはポインタを2つのバケットに分割し、2つ
のバケットの局所深さを該バケットの局所深さ+1と
し、該バケットを指していた全てのエントリを、エント
リ番号の下位から該2つのバケットの局所深さビットの
値と該エントリが指すバケット内のポインタが指すデー
タまたはデータのハッシュ値の下位から該バケットの局
所深さビットの値が等しくなるように更新することを要
旨とする。
め、データを格納する記憶装置と、該記憶装置に格納さ
れたデータのうち所望のキー値を持つデータの格納場所
を調べるためのアクセス手段を具備する計算機システム
において、本発明は、前記アクセス手段を、キー値から
ハッシュ値を計算するハッシュ関数計算手段と、データ
の格納場所を保持するポインタまたはデータおよび局所
深さを保持するバケットと、前記バケットの格納場所を
保持する0番から2の整数(≧大域深さ)乗−1番まで
の2の整数乗個のエントリおよび大域深さを持ちエント
リ数を変化させうるディレクトリと、作業用変数とで構
成し、所望のキー値を持つデータを検索する際には、キ
ー値からハッシュ値を計算し、大域深さを作業用変数に
代入し、ハッシュ値の下位から該作業用変数値分のビッ
トを用いてエントリを参照し、該エントリがポイントす
るバケットの局所深さと該作業用変数値を比較し、該作
業用変数値を越えている場合には該作業用変数値に1を
加えたものを該作業用変数値の新しい値として再度上記
エントリの参照を行ない、該バケットの局所深さが該作
業用変数値以下の場合には該バケット内のデータを検索
して所望のデータを得るようにし、また、データを挿入
する際には、該データのキー値からハッシュ値を計算
し、前記大域深さを作業用変数に代入し、ハッシュ値の
下位から該作業用変数値分のビットを用いてエントリを
参照し、該エントリがポイントするバケットの局所深さ
と該作業用変数値を比較し、該作業用変数値を越えてい
る場合には該作業用変数値に1を加えたものを該作業用
変数値の新しい値として再度上記エントリの参照を行な
い、該バケットの局所深さが該作業用変数値以下の場合
には該バケットに格納領域があれば該バケットに該デー
タを格納し、該バケットに格納領域がなければ、該バケ
ット内の全てのデータまたはポインタと挿入したいデー
タまたは該データへのポインタに関してハッシュ値の下
位から該バケットの局所深さ+1ビットの値によって該
データまたはポインタを2つのバケットに分割し、2つ
のバケットの局所深さを該バケットの局所深さ+1と
し、該バケットを指していた全てのエントリを、エント
リ番号の下位から該2つのバケットの局所深さビットの
値と該エントリが指すバケット内のポインタが指すデー
タまたはデータのハッシュ値の下位から該バケットの局
所深さビットの値が等しくなるように更新することを要
旨とする。
【0016】
【作用】本発明の索引方法では、データを検索する際に
バケットの局所深さが作業変数値以下であるバケットを
見つけるまでバケット探索を繰り返すことにより、バケ
ット分割時に更新する必要のあるエントリ数を削減でき
る。また、ディレクトリのメンテナンスを行なうことに
よって、バケット探索を繰り返す回数を削減できる。
バケットの局所深さが作業変数値以下であるバケットを
見つけるまでバケット探索を繰り返すことにより、バケ
ット分割時に更新する必要のあるエントリ数を削減でき
る。また、ディレクトリのメンテナンスを行なうことに
よって、バケット探索を繰り返す回数を削減できる。
【0017】また、ディレクトリのメンテナンスを行な
うことによって、バケット探索を繰り返す回数を削減で
きる。
うことによって、バケット探索を繰り返す回数を削減で
きる。
【0018】
【実施例】以下、図面を用いて本発明の実施例を説明す
る。
る。
【0019】図1は本発明の一実施例の構成を示す図
で、1はディレクトリ、1−1は大域深さ、1−2〜1
−9はエントリ、2は作業変数、3〜6はバケット、3
−1〜6−1は局所深さ、3−2〜6−2はデータであ
る。なお、エントリ1−4,1−6,1−8,1−9は
使用されていないものとする。
で、1はディレクトリ、1−1は大域深さ、1−2〜1
−9はエントリ、2は作業変数、3〜6はバケット、3
−1〜6−1は局所深さ、3−2〜6−2はデータであ
る。なお、エントリ1−4,1−6,1−8,1−9は
使用されていないものとする。
【0020】次に、本実施例の作用を、データの検索、
データの挿入およびディレクトリのメンテナンスの処理
に大別して説明する。
データの挿入およびディレクトリのメンテナンスの処理
に大別して説明する。
【0021】まず、データの検索について、図2に示す
処理フローチャートを用いて説明する。
処理フローチャートを用いて説明する。
【0022】作業変数2に大域深さ1−1の値を代入し
て(ステップ100)、ハッシュ値の下位から作業変数
2の値ビットを用いてディレクトリ1を検索し、エント
リの指すバケットを参照する(ステップ110)。
て(ステップ100)、ハッシュ値の下位から作業変数
2の値ビットを用いてディレクトリ1を検索し、エント
リの指すバケットを参照する(ステップ110)。
【0023】局所深さが作業変数2の値を越えていれば
(ステップ120)、作業変数2の値に1を加えてステ
ップ110に戻るが(ステップ130)、局所深さが作
業変数2の値以下であれば(ステップ120)、ステッ
プ140に進んで、バケットの中にあるデータを検索す
る。
(ステップ120)、作業変数2の値に1を加えてステ
ップ110に戻るが(ステップ130)、局所深さが作
業変数2の値以下であれば(ステップ120)、ステッ
プ140に進んで、バケットの中にあるデータを検索す
る。
【0024】具体例として、図1でハッシュ値の下位3
ビットが000,011のデータを検索する場合で更
に、説明することにする。
ビットが000,011のデータを検索する場合で更
に、説明することにする。
【0025】まず、ハッシュ値が000のデータを検索
する場合、作業変数2に大域深さ1−1の値を代入する
(ステップ100)。
する場合、作業変数2に大域深さ1−1の値を代入する
(ステップ100)。
【0026】作業変数2の値は1であるので、ハッシュ
値の下位1ビット0を用いてエントリ1−2の指すバケ
ット3を参照する(ステップ110)。
値の下位1ビット0を用いてエントリ1−2の指すバケ
ット3を参照する(ステップ110)。
【0027】ここで、局所深さ3−1が作業変数2の値
以下であるので、バケット3の中にあるデータを検索す
ることになる(ステップ120,140)。
以下であるので、バケット3の中にあるデータを検索す
ることになる(ステップ120,140)。
【0028】次に、ハッシュ値が011のデータを検索
する場合、作業変数2に大域深さ1−1の値を代入する
(ステップ100)。
する場合、作業変数2に大域深さ1−1の値を代入する
(ステップ100)。
【0029】作業変数2の値は1であるので、ハッシュ
値の下位1ビット1を用いてエントリ1−3の指すバケ
ット4を参照する(ステップ110)。
値の下位1ビット1を用いてエントリ1−3の指すバケ
ット4を参照する(ステップ110)。
【0030】しかし、この場合、局所深さ4−1が作業
変数2の値より大きいので、作業変数2の値に1を加え
てステップ110に戻る(ステップ120,130)。
変数2の値より大きいので、作業変数2の値に1を加え
てステップ110に戻る(ステップ120,130)。
【0031】今度は、作業変数2の値は2であるので、
ハッシュ値の下位2ビット11を用いてエントリ1−5
の指すバケット5を参照する(ステップ110)。
ハッシュ値の下位2ビット11を用いてエントリ1−5
の指すバケット5を参照する(ステップ110)。
【0032】そして、局所深さ5−1が作業変数2の値
以下であるので、バケット5の中にあるデータを検索す
ることになる(ステップ120,140)。
以下であるので、バケット5の中にあるデータを検索す
ることになる(ステップ120,140)。
【0033】次にデータの挿入について、図3に示す処
理フローチャートを用いて説明する。
理フローチャートを用いて説明する。
【0034】挿入するデータのキー値を用いて、図2の
ステップ100〜130に示した検索手順でバケット
(バケットAとする)を検索する(ステップ200)。
ステップ100〜130に示した検索手順でバケット
(バケットAとする)を検索する(ステップ200)。
【0035】バケットAにデータを挿入する空き領域が
あれば(ステップ210)、バケットAにデータを挿入
して処理を終了するが(ステップ270)、空き領域が
ない場合には、新しいバケット(バケットBとする)を
作成し、局所深さをバケットAの局所深さ+1とし、バ
ケットAのデータの内、ハッシュ値の下位からバケット
Aの局所深さ+1ビット目が1のものをバケットBに移
動する(ステップ210〜240)。そして、新しいデ
ータのハッシュ値の下位からバケットAの局所深さ+1
ビット目が0であればバケットAに、1であればバケッ
トBに、データを挿入することになる(ステップ25
0)。
あれば(ステップ210)、バケットAにデータを挿入
して処理を終了するが(ステップ270)、空き領域が
ない場合には、新しいバケット(バケットBとする)を
作成し、局所深さをバケットAの局所深さ+1とし、バ
ケットAのデータの内、ハッシュ値の下位からバケット
Aの局所深さ+1ビット目が1のものをバケットBに移
動する(ステップ210〜240)。そして、新しいデ
ータのハッシュ値の下位からバケットAの局所深さ+1
ビット目が0であればバケットAに、1であればバケッ
トBに、データを挿入することになる(ステップ25
0)。
【0036】この後、大域深さ<バケットAの局所深さ
の場合、作業変数2の大域深さ未満のエントリのうちエ
ントリ番号の下位バケットBの局所深さビットの値がバ
ケットB内のポインタが指すデータまたはデータのハッ
シュ値の下位かバケットBの局所深さビットの値と等し
いエントリがバケットBを指すように更新し、大域深さ
≧バケットAの局所深さの場合、バケットAのエントリ
番号+2のバケットAの局所深さ乗番目のエントリをバ
ケットBを指すように更新し、バケットAの局所深さに
1を加えて処理を終了する(ステップ260)。
の場合、作業変数2の大域深さ未満のエントリのうちエ
ントリ番号の下位バケットBの局所深さビットの値がバ
ケットB内のポインタが指すデータまたはデータのハッ
シュ値の下位かバケットBの局所深さビットの値と等し
いエントリがバケットBを指すように更新し、大域深さ
≧バケットAの局所深さの場合、バケットAのエントリ
番号+2のバケットAの局所深さ乗番目のエントリをバ
ケットBを指すように更新し、バケットAの局所深さに
1を加えて処理を終了する(ステップ260)。
【0037】具体例として、ハッシュ値が0001のデ
ータを挿入する場合を図4を用いて更に説明する。
ータを挿入する場合を図4を用いて更に説明する。
【0038】作業変数2に大域深さ1−1の値を代入す
る(図2のステップ100)。
る(図2のステップ100)。
【0039】作業変数2の値は1であるので、ハッシュ
値の下位1ビット1を用いてエントリ1−3の指すバケ
ット4を参照する(図2のステップ110)。
値の下位1ビット1を用いてエントリ1−3の指すバケ
ット4を参照する(図2のステップ110)。
【0040】ここで、局所深さ4−1が作業変数2の値
より大きいので、作業変数2の値に1を加えて図2のス
テップ110に戻ることで、作業変数2の値は2となる
ので、ハッシュ値の下位2ビット01を用いてエントリ
1−3の指すバケット4を再び参照する(図2のステッ
プ120,130)。ここでも、局所深さ4−1が作業
変数2の値より大きいので、作業変数2の値に1を加え
て再度図2のステップ110に戻ることで、作業変数2
の値は3となるので、ハッシュ値の下位3ビット001
を用いてエントリ1−3の指すバケット4を参照する
(図2のステップ120,130)。
より大きいので、作業変数2の値に1を加えて図2のス
テップ110に戻ることで、作業変数2の値は2となる
ので、ハッシュ値の下位2ビット01を用いてエントリ
1−3の指すバケット4を再び参照する(図2のステッ
プ120,130)。ここでも、局所深さ4−1が作業
変数2の値より大きいので、作業変数2の値に1を加え
て再度図2のステップ110に戻ることで、作業変数2
の値は3となるので、ハッシュ値の下位3ビット001
を用いてエントリ1−3の指すバケット4を参照する
(図2のステップ120,130)。
【0041】今度は、局所深さ4−1が作業変数2の値
以下であるので、バケット4にデータを挿入する空き領
域があれば、バケット4にデータを挿入して処理を終了
するが(ステップ200,210,270)、空き領域
がない場合には、新しいバケット7を作成し、局所深さ
7−1を4とし、バケット4のデータ4−1の内ハッシ
ュ値の下位4ビットが1001のものをバケット7に移
動した上で、新しいデータをバケット4に挿入するので
ある(ステップ210〜250)。
以下であるので、バケット4にデータを挿入する空き領
域があれば、バケット4にデータを挿入して処理を終了
するが(ステップ200,210,270)、空き領域
がない場合には、新しいバケット7を作成し、局所深さ
7−1を4とし、バケット4のデータ4−1の内ハッシ
ュ値の下位4ビットが1001のものをバケット7に移
動した上で、新しいデータをバケット4に挿入するので
ある(ステップ210〜250)。
【0042】この後、バケット4の局所深さ4−1を4
とし、エントリ1−11がバケット7を指すように更新
して処理を終了する(ステップ260)。
とし、エントリ1−11がバケット7を指すように更新
して処理を終了する(ステップ260)。
【0043】次に、ディレクトリのメンテナンスについ
て図5に示す処理フローチャートを用いて説明する。
て図5に示す処理フローチャートを用いて説明する。
【0044】大域深さをGにするとし、変数m,n,i
をそれぞれm=2のG−1乗、n=2のG乗、i=0に
初期設定する(ステップ300)。
をそれぞれm=2のG−1乗、n=2のG乗、i=0に
初期設定する(ステップ300)。
【0045】i番目のエントリが指すバケット(バケッ
トAとする)の局所深さをL,2のL乗をKとして、L
とGの値を比較する(ステップ310,320)。
トAとする)の局所深さをL,2のL乗をKとして、L
とGの値を比較する(ステップ310,320)。
【0046】L≧Gでなければ、iの下位から(L+
1)〜Gビットが全て0か否か判断し、全て0であれ
ば、変数j(j≠m,j≠n,j≠i)を(i+K)と
した上で、変数jの値が変数nの値を越えない範囲で変
数jについて(j+K)なる演算を行いつつj番目のエ
ントリがバケットAを指すように更新する(ステップ3
20〜370)。
1)〜Gビットが全て0か否か判断し、全て0であれ
ば、変数j(j≠m,j≠n,j≠i)を(i+K)と
した上で、変数jの値が変数nの値を越えない範囲で変
数jについて(j+K)なる演算を行いつつj番目のエ
ントリがバケットAを指すように更新する(ステップ3
20〜370)。
【0047】一方、L≧Gである場合、iの下位から
(L+1)〜Gビットに0でないビットがある場合、お
よび変数jの値が変数nの値を越えた場合には、いずれ
もステップ380に進んで、変数iの値を1だけインク
リメントして、i≦mが成立している間はステップ31
0に戻り処理を繰り返す(ステップ320,330,3
50,380,390)。
(L+1)〜Gビットに0でないビットがある場合、お
よび変数jの値が変数nの値を越えた場合には、いずれ
もステップ380に進んで、変数iの値を1だけインク
リメントして、i≦mが成立している間はステップ31
0に戻り処理を繰り返す(ステップ320,330,3
50,380,390)。
【0048】そして、i≧mが成立しなくなった場合に
は、大域深さをGにして処理を終了する(ステップ39
0,400)。
は、大域深さをGにして処理を終了する(ステップ39
0,400)。
【0049】ディレクトリ1をメンテナンスする具体例
を図6を用いて更に説明する。
を図6を用いて更に説明する。
【0050】大域深さGを3とすると、変数m,nはm
=4,n=8となり、iを0として初期設定を終了する
(ステップ300)。
=4,n=8となり、iを0として初期設定を終了する
(ステップ300)。
【0051】0(000)番めのエントリ1−2の指す
バケット3の局所深さ3−1は1なので、L=1,K=
2となる。ここでは、L≧Gが成立せず(ステップ32
0)、iの下位から(L+1)〜Gビットがすべて0な
ので(ステップ330)、ステップ340〜370の処
理が行なわれる結果、2,4,6番目のエントリ1−
4,1−6,1−8がバケット3を指すように更新され
る(図6(a)参照)。
バケット3の局所深さ3−1は1なので、L=1,K=
2となる。ここでは、L≧Gが成立せず(ステップ32
0)、iの下位から(L+1)〜Gビットがすべて0な
ので(ステップ330)、ステップ340〜370の処
理が行なわれる結果、2,4,6番目のエントリ1−
4,1−6,1−8がバケット3を指すように更新され
る(図6(a)参照)。
【0052】この後、ステップ380に進んで、変数i
がインクリメントされてi≦mなのでステップ310に
処理が戻るが、1(001)番めのエントリ1−3の指
すバケット4の局所深さ4−1は3なので、L=3とな
り、L≧Gなので(ステップ320)、ステップ38
0,390を経てステップ310に再び戻る。2(01
0)番めのエントリ1−4の指すバケット3の局所深さ
3−1は1なので、L=1となり、L≧Gではないが、
2の下位からL+1〜Gビットに0でないビットがある
ので(ステップ330)、やはりステップ380,39
0を経てステップ310に戻る。
がインクリメントされてi≦mなのでステップ310に
処理が戻るが、1(001)番めのエントリ1−3の指
すバケット4の局所深さ4−1は3なので、L=3とな
り、L≧Gなので(ステップ320)、ステップ38
0,390を経てステップ310に再び戻る。2(01
0)番めのエントリ1−4の指すバケット3の局所深さ
3−1は1なので、L=1となり、L≧Gではないが、
2の下位からL+1〜Gビットに0でないビットがある
ので(ステップ330)、やはりステップ380,39
0を経てステップ310に戻る。
【0053】3(011)番めのエントリ1−5の指す
バケット5の局所深さ5−1は2なので、L=2,K=
4となる。ここでは、L≧Gが成立せず(ステップ32
0)、iの下位から(L+1)〜Gビットがすべて0な
ので(ステップ330)、ステップ340〜370の処
理が行なわれる結果、7番目のエントリ1−9がバケッ
ト5を指すように更新される(図6(b)参照)。
バケット5の局所深さ5−1は2なので、L=2,K=
4となる。ここでは、L≧Gが成立せず(ステップ32
0)、iの下位から(L+1)〜Gビットがすべて0な
ので(ステップ330)、ステップ340〜370の処
理が行なわれる結果、7番目のエントリ1−9がバケッ
ト5を指すように更新される(図6(b)参照)。
【0054】この後、i=4でi≧mとなるので、図6
(c)に示す如く、大域深さをG=3にして処理が終了
する(ステップ390,400)。
(c)に示す如く、大域深さをG=3にして処理が終了
する(ステップ390,400)。
【0055】したがって、本実施例によれば、ディレク
トリ拡張時に1つのエントリを更新するだけで良く、従
来の拡張可能ハッシュのようにエントリ1−2,1−4
〜1−9をそれぞれエントリ1−10,1−12〜1−
17にコピーする必要がないので、データを挿入する時
の処理を少なくすることができる。
トリ拡張時に1つのエントリを更新するだけで良く、従
来の拡張可能ハッシュのようにエントリ1−2,1−4
〜1−9をそれぞれエントリ1−10,1−12〜1−
17にコピーする必要がないので、データを挿入する時
の処理を少なくすることができる。
【0056】
【発明の効果】以上説明したように、本発明の索引方法
によれば、データを検索する際にバケットの局所深さが
作業変数値以下であるバケットを見つけるまでバケット
探索を繰り返すと共に、ディレクトリのメンテナンスを
行なうことで、バケット分割時に更新するエントリ数や
ディレクトリ拡張時にコピーするエントリ数を少なく
し、エントリの更新やコピーを省略または後回しにする
ことによって、データを挿入する時間を短縮し、プロセ
ス間の同時走行性を高めることができる。
によれば、データを検索する際にバケットの局所深さが
作業変数値以下であるバケットを見つけるまでバケット
探索を繰り返すと共に、ディレクトリのメンテナンスを
行なうことで、バケット分割時に更新するエントリ数や
ディレクトリ拡張時にコピーするエントリ数を少なく
し、エントリの更新やコピーを省略または後回しにする
ことによって、データを挿入する時間を短縮し、プロセ
ス間の同時走行性を高めることができる。
【図1】本発明の一実施例の構成を示す図である。
【図2】データを検索する場合の処理フローチャートを
示す図である。
示す図である。
【図3】データを挿入する場合の処理フローチャートを
示す図である。
示す図である。
【図4】図1にデータを挿入した場合の具体例を示す図
である。
である。
【図5】ディレクトリをメンテナンスする場合の処理フ
ローチャートを示す図である。
ローチャートを示す図である。
【図6】図1でディレクトリのメンテナンスを行なった
場合の具体例を示す図である。
場合の具体例を示す図である。
【図7】従来例を示す図である。
【図8】当該従来例の作用を説明するための図である。
1 ディレクトリ 1−1 大域深さ 1−2〜1−17 エントリ 2 作業用変数 3〜7 バケット 3−1〜7−1 局所深さ 3−2〜7−2 データ
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 R.Fagin,J.Nieverg elt,N.Pippenger,H. R.Strong,”Extendib le Hashing−−A Fast Access Method for Dynamic Files”,AC M Transactions on Database Systems,V ol.4,No.3 1979年9月,p. 315−344 遠山訳,R.J.Enbody,H. C.Du,「動的ハッシュ法」,bit 別冊 コンピュータ・サイエンス(ac m computing survey s ’88),平成2年5月10日,p.44 −68 (58)調査した分野(Int.Cl.7,DB名) G06F 17/30 JICSTファイル(JOIS)
Claims (2)
- 【請求項1】 データを格納する記憶装置と、該記憶装
置に格納されたデータのうち所望のキー値を持つデータ
の格納場所を調べるためのアクセス手段を具備する計算
機システムにおいて、 前記アクセス手段を、キー値からハッシュ値を計算する
ハッシュ関数計算手段と、データの格納場所を保持する
ポインタまたはデータおよび局所深さを保持するバケッ
トと、前記バケットの格納場所を保持する0番から2の
整数(≧大域深さ)乗−1番までの2の整数乗個のエン
トリおよび大域深さを持ちエントリ数を変化させうるデ
ィレクトリと、作業用変数とで構成し、 所望のキー値を持つデータを検索する際には、キー値か
らハッシュ値を計算し、大域深さを作業用変数に代入
し、ハッシュ値の下位から該作業用変数値分のビットを
用いてエントリを参照し、該エントリがポイントするバ
ケットの局所深さと該作業用変数値を比較し、該作業用
変数値を越えている場合には該作業用変数値に1を加え
たものを該作業用変数値の新しい値として再度上記エン
トリの参照を行ない、該バケットの局所深さが該作業用
変数値以下の場合には該バケット内のデータを検索して
所望のデータを得るようにし、 また、データを挿入する際には、該データのキー値から
ハッシュ値を計算し、前記大域深さを作業用変数に代入
し、ハッシュ値の下位から該作業用変数値分のビットを
用いてエントリを参照し、該エントリがポイントするバ
ケットの局所深さと該作業用変数値を比較し、該作業用
変数値を越えている場合には該作業用変数値に1を加え
たものを該作業用変数値の新しい値として再度上記エン
トリの参照を行ない、該バケットの局所深さが該作業用
変数値以下の場合には該バケットに格納領域があれば該
バケットに該データを格納し、該バケットに格納領域が
なければ、該バケット内の全てのデータまたはポインタ
と挿入したいデータまたは該データへのポインタに関し
てハッシュ値の下位から該バケットの局所深さ+1ビッ
トの値によって該データまたはポインタを2つのバケッ
トに分割し、2つのバケットの局所深さを該バケットの
局所深さ+1とし、該バケットを指していた全てのエン
トリを、エントリ番号の下位から該2つのバケットの局
所深さビットの値と該エントリが指すバケット内のポイ
ンタが指すデータまたはデータのハッシュ値の下位から
該バケットの局所深さビットの値が等しくなるように更
新することを特徴とする索引方法。 - 【請求項2】 前記アクセス手段にあっては、全てのバ
ケットに関して、2のn乗番目未満のエントリの内、エ
ントリ番号の該バケットの局所深さビット以下が全て等
しいエントリが該バケットを指すように更新して大域深
さをnとするディレクトリのメンテナンスを任意の時点
で行なうことを特徴とする請求項1記載の索引方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP01515393A JP3164257B2 (ja) | 1993-02-02 | 1993-02-02 | 索引方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP01515393A JP3164257B2 (ja) | 1993-02-02 | 1993-02-02 | 索引方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH06231172A JPH06231172A (ja) | 1994-08-19 |
JP3164257B2 true JP3164257B2 (ja) | 2001-05-08 |
Family
ID=11880861
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP01515393A Expired - Fee Related JP3164257B2 (ja) | 1993-02-02 | 1993-02-02 | 索引方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3164257B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102548603B1 (ko) * | 2021-08-31 | 2023-07-05 | 주식회사 코리아라이프라인 | 축광식 비상구 유도등 표지판 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101367450B1 (ko) * | 2009-04-08 | 2014-02-25 | 인텔 코오퍼레이션 | 멀티 스레드 어플리케이션을 위한 해시 테이블의 동시 리해싱의 수행 |
CN115935200B (zh) * | 2023-01-12 | 2023-09-08 | 北京三维天地科技股份有限公司 | 一种基于哈希和海明距离的海量数据相似性计算方法 |
-
1993
- 1993-02-02 JP JP01515393A patent/JP3164257B2/ja not_active Expired - Fee Related
Non-Patent Citations (2)
Title |
---|
R.Fagin,J.Nievergelt,N.Pippenger,H.R.Strong,"Extendible Hashing−−A Fast Access Method for Dynamic Files",ACM Transactions on Database Systems,Vol.4,No.3 1979年9月,p.315−344 |
遠山訳,R.J.Enbody,H.C.Du,「動的ハッシュ法」,bit別冊 コンピュータ・サイエンス(acm computing surveys ’88),平成2年5月10日,p.44−68 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102548603B1 (ko) * | 2021-08-31 | 2023-07-05 | 주식회사 코리아라이프라인 | 축광식 비상구 유도등 표지판 |
Also Published As
Publication number | Publication date |
---|---|
JPH06231172A (ja) | 1994-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9672235B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
US5542087A (en) | Linear hashing for distributed records | |
US9575976B2 (en) | Methods and apparatuses to optimize updates in a file system based on birth time | |
US7469253B2 (en) | Associative hash partitioning using pseudo-random number generator | |
AU608872B2 (en) | Device for enabling concurrent access of indexed sequential data files | |
US4611272A (en) | Key-accessed file organization | |
JPH10198587A (ja) | ファイル・システムの間接アドレシング方法及び装置 | |
JPH0554076A (ja) | メモリ内のデータサーチ及びデータ保持方法 | |
CN103902623A (zh) | 用于在存储系统上存取文件的方法和系统 | |
KR20090048624A (ko) | 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체 | |
US6745198B1 (en) | Parallel spatial join index | |
US20030182292A1 (en) | Method, system, data structures, and article of manufacture for implementing a persistent object | |
JP2000357115A (ja) | ファイル検索装置及びファイル検索方法 | |
CN112231400B (zh) | 分布式数据库的访问方法、装置、设备及存储介质 | |
JP3164257B2 (ja) | 索引方法 | |
US6282536B1 (en) | System and method for interfacing index based and iterator based application programming interfaces | |
JP3115599B2 (ja) | 拡張テーブルを使用するページングシステム | |
JPH08235040A (ja) | データファイル管理システム | |
US6397216B1 (en) | Ordering keys in a table using an ordering mask | |
CN114416741A (zh) | 基于多级索引的kv数据写入读取方法、装置及存储介质 | |
JPH06215037A (ja) | インデックスの自動更新装置 | |
CN113536058A (zh) | 一种空间索引修改方法、装置、设备及存储介质 | |
Lin | Concurrent frame signature files | |
EP0117906B1 (en) | Key-accessed file organization | |
US20050060314A1 (en) | System and methods involving a data structure searchable with O(logN) performance |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |