JP4311926B2 - データ管理装置並びにプログラムおよび記録媒体 - Google Patents
データ管理装置並びにプログラムおよび記録媒体 Download PDFInfo
- Publication number
- JP4311926B2 JP4311926B2 JP2002311340A JP2002311340A JP4311926B2 JP 4311926 B2 JP4311926 B2 JP 4311926B2 JP 2002311340 A JP2002311340 A JP 2002311340A JP 2002311340 A JP2002311340 A JP 2002311340A JP 4311926 B2 JP4311926 B2 JP 4311926B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- bucket
- chain
- information
- hash table
- 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
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
【発明の属する技術分野】
本発明は、データを登録し検索可能にするデータ管理装置並びにプログラムおよび記録媒体に関し、特に、ハッシュ関数を用いてデータの格納場所を求めるデータ管理装置に関する。
【0002】
【従来の技術】
コンピュータにおけるデータの登録、検索などのデータ管理を行う手法の一つにハッシュ法がある(非特許文献1および特許文献1を参照)。
ハッシュ法は、データをある一定の長さのハッシュ値に圧縮するため、ハッシュ値に衝突が起こる場合がある。
例えば、図13に示したように、ハッシュテーブルの大きさをnとしたとき、ハッシュテーブルはn個のバケットに分割され、それぞれのバケットは1からnまでのインデックスによって指し示される。
この図13の場合、インデックスnにおいてハッシュ値が衝突しており、チェイン法を用いて解決している。
【0003】
このハッシュ法を使って、あるデータを登録するときは、以下の手順で処理する。
(1)登録するデータに対してハッシュ関数を適用し、ハッシュ値を求める。
(2)求めたハッシュ値をインデックスとするバケットを求める。
(3)求めたバケットに登録されているものがあるか調べる。
(4)図13に示したインデックス2のバケットのように、空ポインタのゼロが記憶されており、何も登録されていないバケットへは、登録するデータ(またはそのデータへのポインタ)を格納した要素を生成し、その要素へのポインタをバケットに登録する(インデックス1または3を参照)。
(5)または、図13に示したインデックス1やインデックス3のバケットのように、すでにチェインの先頭要素へのポインタが記憶されているバケットへは、登録するデータ(またはそのデータへのポインタ)を格納した要素を生成し、その要素へのポインタをバケットに登録する。また、生成した要素には、元の先頭要素へのポインタを記憶する(インデックスnを参照)。その結果、新たに生成した要素がチェインの先頭となり、元の先頭要素はチェインの先頭から2番目の要素となる。
【0004】
以上のようにハッシュテーブルを使ってデータ値を登録すると、同じハッシュ値が得られるデータは、そのハッシュ値をインデックスとするバケットに格納されたチェインリストに登録されることになる。
【0005】
以上のようにして登録されたデータを取り出すには、以下の手順で処理する。
(1)現在処理中のバケットのインデックスを1に初期化する。
(2)現在処理中のバケットのインデックスがnより大きければ、すべてのバケットを処理しているので、データの取り出し処理を終了する。
(3)現在処理中のバケットに格納されているチェインリストの先頭要素へのポインタを取り出して、現在処理中の要素へのポインタとする。
(A)現在処理中の要素へのポインタが空ポインタのゼロであれば、現在処理中の要素をすべて処理したので、(4)へ進む。
(B)さもなければ、そのポインタが指す要素に格納されているデータを取り出す。
(C)ポインタが指す要素に格納されている、次の要素へのポインタを取り出し、現在処理中の要素へのポインタとし、(A)へ戻る。
(4)現在処理中のバケットのインデックスに1を加え、(2)へ戻る。
【0006】
特許文献2の「テーブル管理方式」では、ハッシュテーブルに登録されるすべての要素をその登録順に依存しない独立した順序で辿ることを可能にするために、それぞれの要素に次の要素を得るための情報(例えば、ポインタ)を格納するようにしている。この情報を使うことにより、ハッシュテーブルにデータがどのような順序に登録されているかとは無関係に、すべての要素を任意の順序、例えば、それらが保持するデータの昇順に並ぶような順序に並べることができる。
【0007】
【非特許文献1】
萩原宏、西原清一著「現代データ構造とプログラム技法」、
オーム社、1987年10月
【特許文献1】
特許第3056704号公報(従来技術)
【特許文献2】
特開平05−081102号公報
【0008】
【発明が解決しようとする課題】
上述したように、ハッシュテーブルに登録されているすべてのデータを取り出すとき、あるバケットにチェインの先頭要素へのポインタが格納されていない場合、そのバケットの(インデックス+1)のバケット以降にチェインの先頭要素へのポインタが登録されているかを、1つずつ調べていく必要がある。
【0009】
この調査は、ハッシュテーブルのサイズが大きくなるにつれ、また、ハッシュテーブルに格納されているデータの数が少なくなるにつれ、バケットにチェインの先頭要素へのポインタが登録されていない場合が多くなり、次のデータを得るために必要なバケットの探索に必要な時間が長くなっていく。
【0010】
特許文献2の技術は、この問題を解決するためのものであり、一般的なチェイン法を用いるハッシュテーブルと比較して、要素を次へ次へと辿るだけなので、登録されているすべてのデータを高速に取り出すことができる。
しかし、次の要素を得るための情報を要素ごとに格納するため、その情報のための領域が登録される要素の数に比例して必要となってくる。
【0011】
本発明は、上述の実情を考慮してなされたものであって、ハッシュテーブルに登録されているすべてのデータを取り出すとき、ハッシュテーブルのサイズやハッシュテーブルに格納されているデータの数に影響なく、データが登録されているバケットを高速に探索することができるデータ管理装置並びにプログラムおよび記録媒体を提供することを目的とする。
【0012】
【課題を解決するための手段】
上記の課題を解決するために、本発明の請求項1のデータ管理装置は、ハッシュ関数を用いて登録するデータの格納場所を決定するデータ管理装置において、データに関する情報を格納する要素をチェインによってリンクして記憶するチェインリストと、前記チェインリストの先頭の要素へのリンクを記憶する複数のバケットからなるハッシュテーブルと、後リンク開始情報および前記ハッシュテーブルの各バケットに対応した後リンク情報とからなるリンク情報を記憶するハッシュテーブル記憶手段と、データを前記ハッシュテーブル記憶手段へ登録するデータ登録手段と、前記ハッシュテーブル記憶手段に登録されたデータを検索するデータ検索手段と、を備え、前記後リンク情報は、バケットにリンクされたチェインリストのすべての要素を探索後、次に探索を開始するバケットの位置または探索対象のバケットなしの情報を記憶し、前記後リンク開始情報は、探索対象のバケットなしの情報を初期値とし、前記ハッシュテーブル記憶手段に登録されたすべてのデータを取り出すときの、最初に探索を開始するバケットの位置を記憶し、前記データ登録手段は、登録するデータに関する情報を格納する要素を生成し、前記登録するデータにハッシュ関数を適用してバケットを求め、該バケットにリンクされたチェインリストがある場合、前記生成した要素を該チェインリストの先頭に挿入してチェインを更新し、前記バケットにリンクされたチェインリストがない場合、前記生成した要素により構成したチェインリストを該バケットにリンクすると共に、該バケットに対応する後リンク情報に前記後リンク開始情報を記憶した後に、前記後リンク開始情報に該バケットの位置を記憶して前記リンク情報を更新し、前記データ検索手段は、指定されたデータを検索する場合、前記指定されたデータにハッシュ関数を適用してバケットを求め、該バケットにリンクしたチェインリストのチェインを辿りながら、前記指定されたデータを検索し、前記ハッシュテーブル記憶手段に登録されたすべてのデータを取り出す場合、前記後リンク開始情報を参照して、最初に探索を開始するバケットの位置を求め、該バケットにリンクされているチェインリストのチェインを辿りながらデータを取り出し、該チェインリストのチェインが終了したとき、該バケットの後リンク情報に記憶されたバケットの位置を次に取り出すデータのバケットの位置とし、探索対象のバケットがなくなるまでデータの取り出しを繰り返す
ことを特徴とする。
【0013】
また、本発明の請求項2は、請求項1に記載のデータ管理装置において、前記バケットの位置を表す情報が前記ハッシュテーブルのインデックスであることを特徴とする。
【0015】
また、本発明の請求項3は、請求項1または2に記載のデータ管理装置において、指定されたデータにハッシュ関数を適用してバケットを求め、該バケットにリンクされたチェインリストから前記指定されたデータに関する情報を格納する要素を削除した後に該チェインリストのチェインを更新し、該チェインリストにチェインされた要素がなくなった場合、前記バケットにリンクされたチェインリストを削除した後、前記リンク情報から該バケットの位置を削除するデータ削除手段を備えることを特徴とする。
【0016】
また、本発明の請求項4のプログラムは、請求項1に記載のデータ管理装置のハッシュテーブル記憶手段を備えるコンピュータを、請求項3に記載のデータ管理装置のデータ登録手段、データ検索手段およびデータ削除手段として機能させるためのプログラムである。
また、本発明の請求項5の記録媒体は、請求項4に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体である。
【0017】
したがって、ハッシュテーブルに登録されているすべてのデータを取り出すとき、ハッシュテーブルのサイズやハッシュテーブルに格納されているデータの数に影響なく、データが登録されているバケットを高速に探索することができる。
【0018】
さらに、データの取り出し順が正順でも逆順でも同様に、ハッシュテーブルのサイズやハッシュテーブルに格納されているデータの数に影響なく、バケットを高速に探索することができる。
【0019】
【発明の実施の形態】
以下、図面を参照して本発明に係るデータ管理装置の一実施形態を説明する。
図1は、本発明に係るデータ管理装置の実施形態を構成するコンピュータシステムのブロック図である。
図1において、本実施形態は、サーバ10および端末20とから構成される。
【0020】
端末20は、システムの利用者がサーバ10で実行されているデータ管理装置に対して登録・検索・削除するデータそのものやデータが記録されているデータファイルなどを指定したり、得られた操作の結果を出力するために利用するコンピュータである。
一般に、端末20には、問合せ要求を入力するためのキーボードおよびマウス等のポインティングデバイスや、問合せ結果を表示するためのディスプレイが装備されている。
また、端末20は、CPU、メモリ、ハードディスクを備え、プログラムが実行可能である。
【0021】
サーバ10は、端末20と通信網30で接続され、端末20からの操作要求に応じた処理を行い、その結果を端末20に返すためのコンピュータである。
また、サーバ10は、CPU、メモリ、ハードディスクを備え、データ管理のためのプログラムが実行可能である。
サーバ10によって管理されるデータは、ハードディスクなどの記録媒体に記録される。
【0022】
ここで、通信網30は、サーバ10および端末20間を結合するための伝送路であって、一般には、ケーブルで実現され、通信プロトコルにはTCP/IPが使われる。但し、伝送路としてはケーブルだけではなく、それらの間の通信プロトコルが一致するものであれば有線または無線のいずれでもよく、例えば、公衆回線や専用回線等によるLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどを用いることができる。
【0023】
また、本発明のデータ管理装置の各機能が端末20ですべて実行されるときには、上述したサーバ10および通信網30は必要としない。
【0024】
図2は、本発明に係るデータ管理装置の機能構成を示すブロック図であり、同図において、データ管理装置は、データ入出力手段21、データ登録手段11、ハッシュテーブル記憶手段14、データ検索手段12、データ削除手段13とを少なくとも含んでいる。
【0025】
データ入出力手段21は、端末20において動作し、利用者が端末20を介して入力する、データの登録、検索、削除要求を受け付け、この要求をそれぞれ処理し、その結果を出力する。
【0026】
データ登録手段11、データ検索手段12、データ削除手段13およびハッシュテーブル記憶手段14は、サーバ10で動作し、データ管理装置の機能の一部を構成する。
【0027】
まず、データ登録手段11、データ検索手段12およびデータ削除手段13で使うハッシュテーブル、チェインリストおよびリンク情報を記憶するハッシュテーブル記憶手段14のデータ構造について説明する。このハッシュテーブル記憶手段14は、サーバ10のメモリまたはハードディスク上に記憶される。
【0028】
図3は、本実施形態で使用するハッシュテーブル記憶手段14のデータ構造の一例であり、ハッシュテーブルHおよびチェインリストCのデータ構造は、従来の技術で説明したものと同じである。
【0029】
すなわち、ハッシュテーブルHの大きさをnとしたとき、ハッシュテーブルHはn個のバケットに分割され、それぞれのバケットは1からnまでのインデックスによって指し示される。
データが登録されていない各バケットはゼロが設定される。
データを登録するときは、データにハッシュ関数を適用し、ハッシュ値を求めてハッシュ値をインデックスとするバケットを求める。
(1)この求めたバケットに登録されているものがない(バケットに格納されている値がゼロ)場合には、要素Eを生成し、その要素Eへのポインタをバケットに登録する。
この要素Eは、登録するデータ(またはそのデータへのポインタ)Evと同じハッシュ値をもつデータの他の要素EへのポインタEpとから構成される。
要素EのポインタEpがゼロに設定されていれば、次にチェインされる要素がないことを示している。
【0030】
(2)または、この求めたバケットに登録されているものがある場合には、登録するデータ(またはそのデータへのポインタ)を格納した要素Eを生成し、生成した要素EのチェインポインタEpには、バケットに登録されているチェインリストの先頭要素へのポインタを格納し、バケットには生成した要素Eへのポインタを登録する。
【0031】
以下、本実施形態では、リンク情報の表現形式として、バケットを示すインデックスを使用するものとして説明する。
図3において、リンク情報は、後リンク開始インデックスBと後リンク情報N、および前リンク開始インデックスAと前リンク情報Pからなっている。
【0032】
後リンク開始インデックスBと後リンク情報Nは、それぞれインデックス0の要素、その後にインデックス1からnの各バケットに対応した要素をならべて1つの配列として構成する。
後リンク開始インデックスBは、ハッシュテーブルHに登録されているすべてのデータを取得するときに、最初に探索すべきバケットのインデックスが記憶される。後リンク情報Nは、バケットからチェインされている要素を探索後、次に探索を開始するバケットのインデックスを格納している。後リンク情報Nの値がゼロのときは、次に探索するバケットがないことを示す。
【0033】
例えば、図4において、後リンク開始インデックスB(インデックス0)の格納値は3であるから最初に探索されるのは、インデックス3のバケットから行われる。
インデックス3のバケットの後リンク情報Nにはnが格納されているので、このバケットの次に探索されるバケットはインデックスnのバケットである。
また、インデックス1の後リンク情報Nにはゼロが格納されているので、このバケットの次に探索するバケットが存在しない。
【0034】
同様に、前リンク開始インデックスAと前リンク情報Pは、それぞれインデックス0の要素、その後にインデックス1からnの各バケットに対応した要素をならべて1つの配列として構成する。
前リンク開始インデックスAは、ハッシュテーブルHに登録されているすべてのデータを取得するときに、後リンク情報で辿る順序の逆順にバケットを並べたときの最初に探索すべきバケットのインデックスが記憶される。前リンク情報Pは、バケットからチェインされている要素を探索後、次に探索を開始するバケットのインデックスを格納している。前リンク情報Pの値がゼロのときは、次に探索するバケットがないことを示す。
【0035】
例えば、図4において、前リンク開始インデックスA(インデックス0)の格納値は1であるから最初に探索されるのは、インデックス1のバケットから行われる。
インデックス1のバケットの前リンク情報Pにはnが格納されているので、このバケットの次に探索されるバケットはインデックスnのバケットである。
また、インデックス2の前リンク情報Pにはゼロが格納されているので、このバケットの次に探索するバケットが存在しない。
【0036】
データ登録手段11は、データ入出力手段21からのデータ登録要求に応じ、与えられたデータが登録されるべきチェインを求め、そのチェインの先頭要素としてデータを登録する。
データ登録手段11の処理手順を図5に示すフローチャートによって説明する。
ここで、データを登録するに先立ち、前リンク開始インデックスA、後リンク開始インデックスBおよびハッシュテーブルHの各バケットの値をゼロに初期化しておく。
【0037】
データ入出力手段21から渡された登録データに対してハッシュ関数を適用して、ハッシュ値を求める(ステップS1,S2)。
求めたハッシュ値をインデックスとするバケットを求める(ステップS3)。以下、求めたバケットのインデックスをiとする。
登録するデータ(またはそのデータへのポインタ)を格納する要素を生成する(ステップS3)。
この要素は、チェインリストCにおけるもので、図3における要素Eに対応するもので、登録するデータ(またはそのデータへのポインタ)をEvへ格納し、ゼロをEpへ格納している。
【0038】
インデックスiのバケットの内容がゼロであるかを調べる(ステップS5)。
インデックスiのバケットの内容がゼロでなければ(ステップS5のYES)、すでにチェインの先頭要素へのポインタが登録されているので、生成したチェインリストCの要素のEp領域にインデックスiのバケットの内容を格納し(ステップS6)、ステップS11へ進む。その結果、今生成した要素がチェインリストの先頭となる。
【0039】
一方、インデックスiのバケットの内容がゼロであれば(ステップS5のNO)、インデックスiの前リンク情報をゼロとして格納する(ステップS7)。
後リンク開始インデックスの内容をインデックスとする前リンク情報にiを格納する(ステップS8)。
インデックスiの後リンク情報として、後リンク開始インデックスの内容を格納する(ステップS9)。
後リンク開始インデックスにiを格納する(ステップS10)。
最後に、チェインリストに生成した要素へのポインタをインデックスiのバケットに登録し(ステップS11)、データの登録を終了する。
【0040】
例えば、図4の状態のハッシュテーブル記憶手段14に対して、ハッシュ値が2のデータを登録すると、図6のように登録される。
【0041】
データ検索手段12は、データ入出力手段21からのデータ検索要求が1つのデータを検索するものであれば、ハッシュテーブルから与えられたデータが登録されているチェインリスト中の要素を求め、その要素が検索対象となるデータを保持しているか否かによって、その結果をデータ入出力手段21に返す。
また、データ入出力手段21からの全データ取得要求があれば、リンク情報を参照しながらすべてのチェインの全要素を取り出し、その結果をデータ入出力手段21に返す。
【0042】
まず、1つのデータを検索する要求を受けたときのデータ検索手段12の処理手順を図7に示すフローチャートによって説明する。
検索対象となるデータに対してハッシュ関数を適用し、ハッシュ値を求める(ステップS21,S22)。
求めたハッシュ値をインデックスとするバケットを求める(ステップS23)。
現在処理中の要素へのポインタをバケットに格納されているチェインの先頭要素へのポインタとする(ステップS24)。
【0043】
現在処理中の要素へのポインタがゼロであるかを調べる(ステップS25)。
現在処理中の要素へのポインタがゼロであれば(ステップS25のNO)、検索しているデータは登録されていないとして処理を終了する(ステップS26)。
一方、現在処理中の要素へのポインタがゼロでなければ(ステップS25のYES)、そのポインタが示す要素に格納されているデータを取り出し、検索対象であるデータと等しければ(ステップS27のYES)、このデータが検索しているデータであるとして処理を終了する(ステップS28)。
ポインタで示された要素のデータが検索対象のデータでなければ、その要素に格納されている次の要素へのポインタを現在処理中の要素へのポインタとして置き換え(ステップS29)、ステップS25へ戻る。
【0044】
次に、すべてのデータを取り出す要求を受けたときのデータ検索手段12の処理手順を図8に示すフローチャートによって説明する。
以下、後リンク情報を使った全データの取得を説明するが、前リンク情報を使った全データの取得も同様にできる。すなわち、後リンク情報を使ったときの手順において、後リンク情報の代わりに前リンク情報を使えばよい。
【0045】
現在処理中のバケットのインデックスを後リンク開始インデックスの内容で初期化する(ステップS31)。
現在処理中のバケットのインデックスがゼロであれば(ステップS32のYES)、すべてのバケットを処理したとして処理を終了する。
これまでに取り出されたデータは、全データの取り出し要求したデータ入出力手段21へ戻される。
【0046】
現在処理中の要素へのポインタをバケットに格納されているチェインリストの先頭要素へのポインタで初期化する(ステップS33)。
現在処理中の要素へのポインタがゼロであるか調べ、空ポインタであるゼロであれば(ステップS34のNO)、現在処理中の要素へのポインタがなくなったので現在処理中のバケットのインデックスを現在処理中のバケットの後リンク情報に置き換えて(ステップS35)、ステップS32へ戻る。
この処理で、同じハッシュ値(インデックス)を持つデータを示すチェインリストに関するデータの取り出しを終了し、次のハッシュ値を持つデータの処理へ移る。
【0047】
一方、現在処理中の要素へのポインタがゼロでない場合(ステップS34のYES)、そのポインタで示される要素に格納されているデータを取り出す(ステップS36)。
要素に格納されている次の要素へのポインタを得て、現在処理中の要素へのポインタとし(ステップS37)、ステップS34へ戻る。
【0048】
データ削除手段13は、データ入出力手段21からのデータ削除要求に応じ、与えられたデータが登録されているチェインリストを求め、そのチェインリスト中に与えられた削除要求されたデータが登録されていれば、削除し、その結果をデータ入出力手段21に返す。
データ削除手段13の処理手順を図9および図10に示すフローチャートによって説明する。
【0049】
データ入出力手段21から渡された削除対象となるデータに対してハッシュ関数を適用し、ハッシュ値を求める(ステップS41,S42)。
求めたハッシュ値をインデックスとするバケットを求める(ステップS43)。以下、ここで求めたインデックスをiとする。
現在処理中の要素へのポインタをバケットに格納されているチェインの先頭要素へのポインタとする(ステップS44)。
【0050】
現在処理中の要素へのポインタがゼロであるかを調べる(ステップS45)。
現在処理中の要素へのポインタがゼロであれば(ステップS45のNO)、削除指定されたデータは登録されていないとして処理を終了する(ステップS46)。
一方、現在処理中の要素へのポインタがゼロでない場合(ステップS45のYES)、そのポインタで示される要素に格納されているデータが削除対象であるデータと一致しなければ(ステップS47のNO)、その要素に格納されている次の要素へのポインタを現在処理中の要素へのポインタとして置き換え(ステップS48)、ステップS45へ戻る。
一方、そのポインタで示される要素に格納されているデータが削除対象であるデータと一致していれば(ステップS47のYES)、このデータが削除しているデータであるので、以下の処理を行う。
【0051】
削除するデータを格納する要素がチェインリストの先頭であるか調べ、チェインの先頭であれば(ステップS49のYES)、削除する要素が示す次の要素のポインタをバケットへ格納し、この削除対象の要素を削除する(ステップS50)。
例えば、図11(A)に示すように、チェインリスト中の先頭の要素(値1を格納する要素)を削除する場合、この値1を格納する要素の次の要素(値2を格納する要素)へのポインタをバケットに格納する。
【0052】
また、削除する要素がチェインリストの先頭でなければ、(ステップS49のNO)削除するデータを格納する要素の直前の要素が指すポインタを、削除するデータを格納する要素の次の要素へのポインタとし、この削除対象の要素を削除する(ステップS51)。
例えば、図11(B)に示すように、チェインリスト中の2番目の要素(値2を格納する要素)を削除する場合、この値2を格納する要素の次の要素(値3を格納する要素)へのポインタを、1番目の要素(値1を格納する要素)の次の要素を指すポインタとする。
【0053】
次に、削除対象の要素を削除した後、まだチェインリスト中に要素があれば(ステップS52のNO)、削除処理を終了する。
一方、削除対象の要素を削除した結果、チェインリストにひとつも要素がなくなれば(ステップS52のYES)、図10のフローチャートで示す以下の処理を行う。
【0054】
インデックスiの後リンク情報をjとしたとき、インデックスjの前リンク情報をインデックスiの前リンク情報と置き換える(ステップS53)。
インデックスiの前リンク情報をkとしたとき、インデックスkの後リンク情報をインデックスiの後リンク情報と置き換える(ステップS54)。
【0055】
後リンク開始インデックスの内容がインデックスiであれば(ステップS55のYES)、後リンク開始インデックスをインデックスiの後リンク情報に置き換える(ステップS56)。
前リンク開始インデックスの内容がインデックスiであれば(ステップS57のYES)、前リンク開始インデックスをインデックスiの前リンク情報と置き換える(ステップS58)。
最後に、インデックスiの後リンク情報および前リンク情報にゼロを格納し(ステップS59,S60)、削除処理を終了する。
【0056】
例えば、図4に示した状態のハッシュテーブル記憶手段14の内容から、ハッシュ値が3のバケットの先頭に格納されているデータを削除すると、図12に示すようになる。
【0057】
本発明は、上述した実施形態のみに限定されたものではない。上述した実施形態のデータ管理装置を構成する各機能をそれぞれプログラム化し、あらかじめCD−ROM等の記録媒体に書き込んでおき、コンピュータに搭載したCD−ROMドライブのような媒体駆動装置にこのCD−ROM等を装着して、これらのプログラムをコンピュータのメモリあるいは記憶装置に格納し、それを実行することによって、本発明の目的が達成されることは言うまでもない。
この場合、記録媒体から読み出されたプログラム自体が上述した実施形態の機能を実現することになり、そのプログラムおよびそのプログラムを記録した記録媒体も本発明を構成することになる。
【0058】
なお、プログラムを格納する記録媒体としては半導体媒体(例えば、ROM、不揮発性メモリカード等)、光媒体(例えば、DVD、MO、MD、CD等)、磁気媒体(例えば、磁気テープ、フレキシブルディスク等)等のいずれであってもよい。
【0059】
また、ロードしたプログラムを実行することにより上述した実施形態の機能が実現されるだけでなく、そのプログラムの指示に基づき、オペレーティングシステムあるいは他のアプリケーションプログラム等と共同して処理することによって上述した実施形態の機能が実現される場合も含まれる。
【0060】
市場に流通させる場合には、可搬型の記録媒体にプログラムを格納して流通させたり、インターネット等の通信網を介して接続されたサーバコンピュータの記憶装置に格納しておき、通信網を通じて他のコンピュータに転送することもできる。この場合、このサーバコンピュータの記憶装置も本発明の記録媒体に含まれる。なお、可搬型の記録媒体上のプログラム、または転送されてくるプログラムを、コンピュータに内蔵する記録媒体へインストールし、そのインストールされたプログラムを実行することによって上述した実施形態の機能が実現される。
【0061】
【発明の効果】
以上説明したように本発明によれば、ハッシュテーブルに登録されているすべてのデータを取り出すとき、ハッシュテーブルのサイズやハッシュテーブルに格納されているデータの数に影響なく、データが登録されているバケットを高速に探索することができる。
【0062】
さらに、データの取り出し順が正順でも逆順でも同様に、ハッシュテーブルのサイズやハッシュテーブルに格納されているデータの数に影響なく、バケットを高速に探索することができる。
【図面の簡単な説明】
【図1】 本発明に係るデータ管理装置の実施形態を構成するコンピュータシステムのブロック図である。
【図2】 本発明に係るデータ管理装置の機能構成を示すブロック図である。
【図3】 ハッシュデータ記憶手段のデータ構造の一例である。
【図4】 ハッシュデータ記憶手段のデータ設定を説明するための図である。
【図5】 データ登録手段の処理手順を示すフローチャートである。
【図6】 図4のハッシュデータ記憶手段に新たなデータを登録した一例である。
【図7】 指定されたデータの検索要求を受けた場合のデータ検索手段の処理手順を示すフローチャートである。
【図8】 全データの取り出し要求を受けた場合のデータ検索手段の処理手順を示すフローチャートである。
【図9】 データ削除手段の処理手順を示すフローチャートである。
【図10】 データ削除手段の処理手順を示すフローチャートである(図9の続き)。
【図11】 チェインリストから要素を削除するときの説明図である。
【図12】 図4に示した状態のハッシュテーブル記憶手段からデータを削除したときの一例である。
【図13】 従来のハッシュテーブルの構成を説明するための図である。
【符号の説明】
A…前リンク開始インデックス、P…前リンク情報、B…後リンク開始インデックス、N…後リンク情報、H…ハッシュテーブル、E…チェインリストの要素、Ev…要素Eのデータ値またはデータへのポインタ、Ep…要素Eのチェインリスト中の次の要素へのポインタ、10…サーバ、11…データ登録手段、12…データ検索手段、13…データ削除手段、14…ハッシュテーブル記憶手段、20…端末、21…データ入出力手段、30…通信網。
Claims (5)
- ハッシュ関数を用いて登録するデータの格納場所を決定するデータ管理装置において、データに関する情報を格納する要素をチェインによってリンクして記憶するチェインリストと、前記チェインリストの先頭の要素へのリンクを記憶する複数のバケットからなるハッシュテーブルと、後リンク開始情報および前記ハッシュテーブルの各バケットに対応した後リンク情報とからなるリンク情報を記憶するハッシュテーブル記憶手段と、データを前記ハッシュテーブル記憶手段へ登録するデータ登録手段と、前記ハッシュテーブル記憶手段に登録されたデータを検索するデータ検索手段と、を備え、
前記後リンク情報は、バケットにリンクされたチェインリストのすべての要素を探索後、次に探索を開始するバケットの位置または探索対象のバケットなしの情報を記憶し、
前記後リンク開始情報は、探索対象のバケットなしの情報を初期値とし、前記ハッシュテーブル記憶手段に登録されたすべてのデータを取り出すときの、最初に探索を開始するバケットの位置を記憶し、
前記データ登録手段は、登録するデータに関する情報を格納する要素を生成し、前記登録するデータにハッシュ関数を適用してバケットを求め、該バケットにリンクされたチェインリストがある場合、前記生成した要素を該チェインリストの先頭に挿入してチェインを更新し、前記バケットにリンクされたチェインリストがない場合、前記生成した要素により構成したチェインリストを該バケットにリンクすると共に、該バケットに対応する後リンク情報に前記後リンク開始情報を記憶した後に、前記後リンク開始情報に該バケットの位置を記憶して前記リンク情報を更新し、
前記データ検索手段は、指定されたデータを検索する場合、前記指定されたデータにハッシュ関数を適用してバケットを求め、該バケットにリンクしたチェインリストのチェインを辿りながら、前記指定されたデータを検索し、前記ハッシュテーブル記憶手段に登録されたすべてのデータを取り出す場合、前記後リンク開始情報を参照して、最初に探索を開始するバケットの位置を求め、該バケットにリンクされているチェインリストのチェインを辿りながらデータを取り出し、該チェインリストのチェインが終了したとき、該バケットの後リンク情報に記憶されたバケットの位置を次に取り出すデータのバケットの位置とし、探索対象のバケットがなくなるまでデータの取り出しを繰り返す
ことを特徴とするデータ管理装置。 - 請求項1に記載のデータ管理装置において、前記バケットの位置を表す情報が前記ハッシュテーブルのインデックスであることを特徴とするデータ管理装置。
- 請求項1または2に記載のデータ管理装置において、指定されたデータにハッシュ関数を適用してバケットを求め、該バケットにリンクされたチェインリストから前記指定されたデータに関する情報を格納する要素を削除した後に該チェインリストのチェインを更新し、該チェインリストにチェインされた要素がなくなった場合、前記バケットにリンクされたチェインリストを削除した後、前記リンク情報から該バケットの位置を削除するデータ削除手段を備えることを特徴とするデータ管理装置。
- 請求項1に記載のデータ管理装置のハッシュテーブル記憶手段を備えるコンピュータを、請求項3に記載のデータ管理装置のデータ登録手段、データ検索手段およびデータ削除手段として機能させるためのプログラム。
- 請求項4に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002311340A JP4311926B2 (ja) | 2002-10-25 | 2002-10-25 | データ管理装置並びにプログラムおよび記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002311340A JP4311926B2 (ja) | 2002-10-25 | 2002-10-25 | データ管理装置並びにプログラムおよび記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004145729A JP2004145729A (ja) | 2004-05-20 |
JP4311926B2 true JP4311926B2 (ja) | 2009-08-12 |
Family
ID=32456605
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002311340A Expired - Fee Related JP4311926B2 (ja) | 2002-10-25 | 2002-10-25 | データ管理装置並びにプログラムおよび記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4311926B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7571299B2 (en) | 2006-02-16 | 2009-08-04 | International Business Machines Corporation | Methods and arrangements for inserting values in hash tables |
-
2002
- 2002-10-25 JP JP2002311340A patent/JP4311926B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2004145729A (ja) | 2004-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101681256B (zh) | It自动化装置成像系统和方法 | |
AU2013210018B2 (en) | Location independent files | |
JP5652220B2 (ja) | ファイル管理装置及びプログラム | |
JP2001313639A (ja) | ネットワーク構成データ管理システム及び方法並びに記録媒体 | |
JP2005302038A (ja) | Bツリー中の連続キーの名前を変更する方法およびシステム | |
JP2006344171A (ja) | 情報処理装置、情報処理装置の制御方法、コンピュータプログラム、記憶媒体 | |
US8977657B2 (en) | Finding lost objects in a file system having a namespace | |
US6606631B1 (en) | IMS on-line reorganization utility | |
JP2000357115A (ja) | ファイル検索装置及びファイル検索方法 | |
JP4311926B2 (ja) | データ管理装置並びにプログラムおよび記録媒体 | |
JP2001154893A (ja) | ファイル検索装置とコンピュータ読取可能な記録媒体 | |
US20020120612A1 (en) | Document management system, document management method, and computer-readable storage medium including the same | |
KR101299555B1 (ko) | 해시 함수 기반의 인덱스를 이용한 텍스트 검색 장치 및 방법 | |
CN111045991B (zh) | 一种基于命令行模式快速打开文件的实现方法 | |
JPH10289135A (ja) | 検索結果のキャッシュ機能を有するデータベース検索方式 | |
US20070033162A1 (en) | Methods and media for efficiently processing data selected for recording to optical media | |
JP2019197465A (ja) | シミュレーション制御方法及び計算機システム | |
EP2037378A1 (en) | Method and apparatus for updating data of portable media player | |
JPH1115851A (ja) | Wwwページリンク制御システムおよびその制御処理プログラムを記録した記録媒体 | |
JP6881124B2 (ja) | 検索制御プログラム、検索制御方法および検索制御装置 | |
EP3989074A1 (en) | Method for optimizing execution of high-performance computing workflows | |
JP2586330B2 (ja) | 論理削除データ管理方式 | |
JP2002014985A (ja) | 文書検索システムおよび検索文書登録制御方法 | |
JP2722684B2 (ja) | ファイルシステムの検索装置 | |
JPH10240596A (ja) | コンピュータシステムのデータ回復方式、データ回復方 法およびデータ回復プログラムを記録した記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050401 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080819 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081017 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20081202 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090120 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090217 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090406 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20090512 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20090512 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120522 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4311926 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120522 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130522 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130522 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |