JP6028567B2 - データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法 - Google Patents
データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法 Download PDFInfo
- Publication number
- JP6028567B2 JP6028567B2 JP2012288075A JP2012288075A JP6028567B2 JP 6028567 B2 JP6028567 B2 JP 6028567B2 JP 2012288075 A JP2012288075 A JP 2012288075A JP 2012288075 A JP2012288075 A JP 2012288075A JP 6028567 B2 JP6028567 B2 JP 6028567B2
- Authority
- JP
- Japan
- Prior art keywords
- hash
- data
- value
- key
- data set
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Description
ここで、ハッシュテーブルとは、テーブルにデータの格納する位置を決定する手段として、また、テーブルからデータを取得する位置を決定する手段として、ハッシュ関数を用いるテーブル型データ構造の一種である。
一方、ハッシュテーブルを用いたデータ検索方法は、ハッシュ関数によって求められたハッシュ値に基づいて特定される格納位置にデータを格納して作成されたハッシュテーブルを用いる。このハッシュ関数によって求められるハッシュ値が、異なるデータで同一になる場合があり、この場合に、これらのデータをハッシュテーブルにどのように格納し、検索するかによって、データ検索効率が低下することになる。
これに対し、完全ハッシュ関数を算出する場合の算出コストを抑える方法として、大規模データセットを複数の小規模データセットに分割し、複数の小規模データセットのそれぞれに対して個別の完全ハッシュ関数を算出するCHDアルゴリズムがある。
本実施形態にかかるデータ検索装置は、例えばサーバなどの情報処理装置に備えられ、データの格納及び検索を行なうのに用いられるものである。なお、データ検索装置をデータ格納装置ともいう。
本データ検索装置を備える情報処理装置は、例えばサーバなどのコンピュータを用いて実現することができ、そのハードウェア構成は、例えば図2に示すように、CPU(Central Processing Unit)102、メインメモリ101、通信制御部109、入力装置106、表示制御部103、表示装置104、記憶装置105、可搬型記録媒体108のドライブ装置107を備え、これらがバス110によって相互に接続された構成になっている。なお、本装置のハードウェア構成はこれに限られるものではない。
通信制御部109(通信インターフェース)は、例えばLANやインターネットなどのネットワークを介して、他の装置と通信するために用いられるものである。この通信制御部109は、コンピュータに元から組み込まれていても良いし、後からコンピュータに取り付けられたNIC(Network Interface Card)でも良い。
表示装置104は、例えば液晶ディスプレイなどの表示装置である。
表示制御部103は、例えば分析結果などを表示装置104に表示させるための制御を行なうものである。
なお、これらの入力装置106や表示装置104は、ネットワークに接続された別のコンピュータに備えられている入力装置や出力装置であっても良い。
このようなハードウェア構成を備えるコンピュータにおいて、CPU102が、例えば記憶装置105に格納されているデータ格納プログラムやデータ検索プログラムをメインメモリ101に読み出して実行することで、本データ検索装置の各機能、即ち、データ格納処理機能、データ検索処理機能、ハッシュ係数値表記憶機能、対応表記憶機能、ハッシュテーブル記憶機能という各機能が実現される。
ここで、データ格納処理部2は、データ分割部7と、ハッシュ関数決定部8と、ハッシュ係数値表作成部9と、対応表作成部10と、ハッシュテーブル作成部11とを備える。
ハッシュ関数決定部8は、複数のデータセットのそれぞれに対する複数のハッシュ関数を決定する。特に、ハッシュ関数決定部8は、データセット毎に、データセットに含まれる複数のデータのそれぞれのキーに基づいて候補ハッシュ関数によってハッシュ値を求め、ハッシュ値に基づいて特定される第1格納位置又は第1格納位置に連続する第2格納位置に複数のデータの全てを格納することができるか否かを判定し、第1格納位置又は第2格納位置に複数のデータの全てを格納することができると判定したデータセットに対するハッシュ関数として候補ハッシュ関数を決定する。ここで、ハッシュ関数決定部8は、データのキー列(キー文字列){x1,x2,x3,...,xn}をxK(1≦K≦n)として、ハッシュ係数R(1≦R≦256)の値によって特定され、fR(xK)=fR(xK−1)×R+xK[但し、fR(x0)=R0(R0は初期値)]で表される関数族に含まれるハッシュ関数を候補ハッシュ関数として用いるのが好ましい。また、ハッシュ関数決定部8は、第1格納位置又は第2格納位置に複数のデータの全てを格納することができると判定したデータセットが2つ以上ある場合に、候補ハッシュ関数を2つ以上のデータセットのそれぞれに対するハッシュ関数として決定するのが好ましい。また、ハッシュ関数決定部8は、複数のデータセットのそれぞれに対する複数のハッシュ関数として16個又は32個のハッシュ関数を決定するのが好ましい。
このうち、ハッシュテーブル特定部12は、データセットを分割した複数のデータセットをそれぞれ格納する複数のハッシュテーブル22の中から、検索対象データのキーに基づいて、検索対象データを含む一のデータセットを格納する一のハッシュテーブル22を特定する。なお、ハッシュテーブル特定部12を、ハッシュ情報特定部ともいう。
読出部15は、一のハッシュテーブル22から、ハッシュ値に基づいて特定される第1格納位置及び第1格納位置に連続する第2格納位置に格納されているデータ及びキーを読み出す。
ハッシュ係数値表記憶部4は、複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を格納するハッシュ係数値表20(図6参照)を記憶する。つまり、ハッシュ係数値表記憶部4は、上述のハッシュ係数値表作成部9によって作成されるハッシュ係数値表20(図6参照)を記憶する。なお、ハッシュ係数の値は、ハッシュ関数の実体であるため、ハッシュ係数値表記憶部4を、ハッシュ関数実体管理表記憶部ともいう。また、ハッシュ係数値表記憶部4を、ハッシュ係数値情報記憶部ともいう。本実施形態では、CPUキャッシュメモリ111の記憶領域の一部がハッシュ係数値表記憶部4として使用される。つまり、上述のハッシュ係数値表作成部9によって作成されるハッシュ係数値表20(図6参照)は、CPUキャッシュメモリ111上に保持される。
まず、本データ検索装置に備えられるデータ格納処理部2による処理、即ち、本データ検索装置1においてCPU102がメインメモリ101に読み込まれたデータ格納プログラムに従って実行する処理(データ格納方法)について、図3〜図8を参照しながら説明する。
まず、データ格納処理部2は、格納対象のデータセットを受けとったら、図3に示すように、データ分割部7によって、格納対象のデータセットを複数のデータセットに分割する(ステップS10)。
なお、ここでは、「i」を「1」から「16」まで1つずつインクリメントしていくことで(1≦i≦16)、インデックス番号1〜16のそれぞれに対応する16個のハッシュ関数を決定する。
例えば、データ格納処理部2は、ハッシュ関数決定部8によって、まず、選出した候補ハッシュ関数によって1番目の小規模データセットに含まれる1つ目のデータのキーに基づいて算出したハッシュ値を、1番目の小規模データセットに対するハッシュテーブルのサイズで割った余りの値を算出し(ステップB10)、この余りの値に相当する仮格納用ハッシュテーブルの番地(行;格納位置)に1つ目のデータを格納する(ステップB20)。ここで、1番目の小規模データセットに含まれるデータの数n′が「4」の場合、1番目の小規模データセットに対するハッシュテーブルのサイズを例えばROUND(n′÷0.8)で「5」にすれば良い。なお、ハッシュテーブルのサイズが「5」とは、5つのデータを格納しうるハッシュテーブルであることを意味する。次に、選出した候補ハッシュ関数によって、1番目の小規模データセットに含まれる2つ目のデータのキーに基づいて算出したハッシュ値を、1番目の小規模データセットに対するハッシュテーブルのサイズで割った余りの値を算出し(ステップB10)、この余りの値に相当する仮格納用テーブルの番地に2つ目のデータを格納する(ステップB20)。以後、同様の処理を、1番目の小規模データセットに含まれる複数のデータの全てに対して行なう。これにより、1番目の小規模データセットに対する仮格納用テーブルが作成される。
この判定の結果、この条件を満たしていないと判定した場合、NOルートへ進み、(i)1番目の小規模データセットに対する仮格納用テーブルの次の番地に格納されているデータの数が3つ以上であるか、(ii)次の番地に格納されているデータが2つで、かつ、最初の番地に格納されているデータが2つであるか、を判定する(ステップB40)。
なお、候補ハッシュ関数として、データのキー列{x1,x2,x3,...,xn}をxK(1≦K≦n)として、ハッシュ係数R(1≦R≦256)の値によって特定され、fR(xK)=fR(xK−1)×R+xK[但し、fR(x0)=R0(R0は初期値)]で表される関数族に含まれる1つのハッシュ関数を選出する場合、ハッシュ係数Rの値を「1」から順番に大きくなるようにしても良いし、ハッシュ係数Rの値として1〜256の中の任意の値を順番に選ぶようにしても良い。但し、候補ハッシュ関数として選出され、上述の処理を行なったハッシュ関数が再度選出されることがないように、上述の処理を行なった後に(例えばステップA70やステップA90のNOルートで)、そのハッシュ関数を使用済みとするのが好ましい。これにより、ステップA20で候補ハッシュ関数を選出する際に未使用のハッシュ関数が選出されるようにすることができる。また、上述のように、インデックス番号1から16まで順番にハッシュ関数を決定していく場合、インデックス番号1のハッシュ関数を決定する処理では、全ての小規模データセットに対して、ハッシュ値を算出するなどの上述の処理を行なう必要があるが、インデックス番号2以降のハッシュ関数を決定する処理では、ハッシュ関数が割り当てられていない小規模データセットに対して、ハッシュ値を算出するなどの上述の処理を行なえば良い。また、上述のように、i=16の場合、閾値thdを「0」とすることで、未割り当ての全ての小規模データセットが上述のステップA40の条件を満たしている場合にインデックス番号16のハッシュ関数が決定されるようにして、ハッシュ関数が割り当てられていない小規模データセットがないようにしているが、これに限られるものではなく、ハッシュ関数が割り当てられていない小規模データセットがないようにすれば良い。例えば、閾値thdは変化させずに一定とし、i=16であるかの判定(ステップA90)を、ステップA80の前に入れ、i=16でないと判定した場合は、ステップA100へ進み、i=16であると判定した場合は、さらに、ハッシュ関数が割り当てられていない小規模データセットがあるかを判定し、ハッシュ関数が割り当てられていない小規模データセットはないと判定したときに、ステップA80へ進み、ハッシュ関数が割り当てられていない小規模データセットがあると判定したときは、ステップA20へ戻り、ハッシュ関数が割り当てられていない小規模データセットがないと判定されるまで同様の処理を繰り返すようにしても良い。
この段階では、全てのデータを格納していないため、ステップC20へ戻る。そして、この段階は、1番目の小規模データセットに対する仮格納用テーブルの2番目の番地に格納されている1つ目のデータを、メインメモリ101上の1番目の小規模データセットに対する1番目のハッシュテーブル22の2番目の番地に格納する段階であるため、ステップC20で、メインメモリ101上の1番目の小規模データセットに対する1番目のハッシュテーブル22の2番目の番地に既にデータが格納されているか否かを判定する(ステップC20)。
以後、同様の処理を繰り返して、1番目の小規模データセットに対する仮格納用テーブルの3番目以降の番地に格納されているデータを、メインメモリ101上の1番目の小規模データセットに対する1番目のハッシュテーブル22の対応する番地又はその次の番地に格納する。
これにより、各小規模データセットに対する各ハッシュテーブル22として、各小規模データセットに対して割り当てられたハッシュ関数によって算出したハッシュ値に基づいて特定される番地(第1格納位置)又は次の番地(第2格納位置)に複数のデータの全てを格納したハッシュテーブル22を、メインメモリ101上に作成することができる。このような準完全ハッシュ関数に基づいて作成されるハッシュテーブル22は、データがハッシュ値に基づいて特定される番地(第1格納位置)又は次の番地(第2格納位置)に格納されていることを保証する。このため、後述するように、データ検索時には、これらの番地に格納されているデータを一度に読み出し、どちらの番地にデータが格納されているかを判定すれば良いため、完全ハッシュ関数を用いる場合と比較して、データ検索効率の低下を抑えることができる。つまり、上述のように、完全ハッシュ関数を選出する場合よりもハッシュ関数の選出条件を緩めることで、ハッシュ関数の選出を容易に、かつ、高速に行なうことができるようにしながら、完全ハッシュ関数を用いる場合と比較して、データ検索効率の低下を抑えることができる。
ここでは、データ検索処理部3は、データの検索依頼を受けると、以下の手順で、メインメモリ101上の複数のハッシュテーブル22に対してデータ検索を行なう。
ここでは、データ検索処理部3は、ハッシュ値計算部14によって、検索対象データのキー、及び、上述のようにして取得した、検索対象データを含むデータセットに対応するハッシュ関数を特定するハッシュ係数の値(ここではR1〜R8の各値)を用いて、データのキー列{x1,x2,x3,...,xn}をxK(1≦K≦n)として、ハッシュ係数R(1≦R≦256)の値によって特定され、fR(xK)=fR(xK−1)×R+xK[但し、fR(x0)=R0(R0は初期値)]で表される関数族に含まれる1つのハッシュ関数によってハッシュ値を計算する(ステップE40)。そして、算出したハッシュ値を、検索対象データを含むデータセットに対するハッシュテーブルのサイズ(ここでは5)で割った余りの値を算出する(ステップE50)。なお、ハッシュ値の計算は、上述のデータ格納処理部2のハッシュ関数決定部8におけるハッシュ値の計算と同様に行なえば良い。このように、単一のハッシュ関数fR(x)によってハッシュ値を計算するため、f1(x)+αf2(x)+βで表される完全ハッシュ関数によってハッシュ値を計算する、即ち、2つのハッシュ関数f1(x)、f2(x)の計算を必要とする、上述のCHDアルゴリズムと比較して、ハッシュ値の計算を高速に行なうことができる。
ここでは、データ検索処理部3は、出力部16によって、上述のようにしてハッシュ値に基づいて特定される番地(第1格納位置)及び次の番地(第2格納位置)から読み出したキーが、検索対象データのキーと一致するかを判定する。つまり、まず、ハッシュ値に基づいて特定される番地から読み出したキーが、検索対象データのキーと一致するかを判定し(ステップE70)、次に、ハッシュ値に基づいて特定される番地の次の番地から読み出したキーが、検索対象データのキーと一致するかを判定する(ステップE90)。これらの判定の結果、ハッシュ値に基づいて特定される番地から読み出したキーが、検索対象データのキーと一致すると判定した場合は、ハッシュ値に基づいて特定される番地から読み出したキーに対応づけられているデータを、検索対象データとして出力する(ステップE80)。また、ハッシュ値に基づいて特定される番地の次の番地から読み出したキーが、検索対象データのキーと一致すると判定した場合は、ハッシュ値に基づいて特定される番地の次の番地から読み出したキーに対応づけられているデータを、検索対象データとして出力する(ステップE100)。さらに、ハッシュ値に基づいて特定される番地から読み出したキー、及び、ハッシュ値に基づいて特定される番地の次の番地から読み出したキーが、いずれも、検索対象データのキーと一致しないと判定した場合は、検索失敗メッセージ(エラーメッセージ)を出力する(ステップE110)。
特に、上述のように、本実施形態にかかるデータ検索装置、データ格納方法及びデータ検索方法では、上述の準完全ハッシュ関数を用いて少数のハッシュ関数を再利用し、上述の対応表21及びハッシュ係数値表20(図6参照)を用いることで、データ検索効率を低下させずに、データ格納効率を下げずに、ハッシュ関数によってハッシュ値を計算する際にCPUキャッシュメモリ111へのアクセスだけで済むようにしてデータ検索速度を向上させることができるという利点がある。
しかしながら、CHDアルゴリズムでは、小規模データセットの数に応じた数の完全ハッシュ関数を用いることになり、データセットが大規模になるほど、各小規模データセットにハッシュ関数を対応づけるのに必要な情報量が増大し、メモリ領域を多く使用することになる。この場合、読み出し速度の速いCPUキャッシュメモリに全体を格納するのが困難となる。このため、ハッシュ関数によってハッシュ値を計算する際に、一定の確率でメインメモリへのアクセスが発生し、メインメモリへのアクセスはCPUキャッシュメモリへのアクセスと比較して数十倍から数百倍低速であるため、結果的に、データ検索速度が低下してしまう。
しかしながら、CHDアルゴリズムのようにハッシュ関数として完全ハッシュ関数を用いる限り、それほどハッシュ関数の数を減らすことができず、情報量を十分に低減するのは難しい。つまり、情報量を十分に削減するためには、使用するハッシュ関数の数を数十以下にすることが必要である。しかし、あるハッシュ関数が所与の小規模データセットに対する完全ハッシュ関数である確率は非常に低いため、数十以下のハッシュ関数から全ての小規模データセットの完全ハッシュ関数を選出するのは困難である。このため、ハッシュ関数として完全ハッシュ関数を用いる限り、情報量を十分に低減できるほど、使用するハッシュ関数の数を減らすのは難しい。
また、例えば10個のデータを格納できるサイズのハッシュテーブルに8個のデータを格納する代わりに7個のデータを格納するなど、ハッシュテーブルの格納率を下げることで、あるハッシュ関数が所与の小規模データセットに対する完全ハッシュ関数である確率を高め、使用するハッシュ関数の数を減らし、情報量を低減することも考えられる。しかしながら、データの格納効率が低下してしまう。そして、格納効率の低いハッシュテーブルを用いると、メモリ使用量を圧迫することになる。
[完全一致検索の一例としての従業員ID検索システム]
ここで、データ検索装置としての従業員ID検索システムは、従業員IDからその従業員IDを持つ従業員の氏名を検索するシステムである。
まず、従業員ID検索システムのデータ格納処理部2は、図10に示すような格納対象のデータセットを受けとったら、データ分割部7によって、図12に示すように、格納対象のデータセットを複数のデータセットに分割する。
次に、データ格納処理部2は、ハッシュ係数値表作成部9(ハッシュ関数実体管理表作成部)によって、図14に示すように、複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を格納するハッシュ係数値表(ハッシュ関数実体管理表)を作成する。
次に、データ格納処理部2は、ハッシュテーブル作成部11によって、複数のデータセットのそれぞれに対する複数のハッシュテーブル22を作成する。
ここでは、小規模データセットの識別番号であるCRC値を用いて対応表から取得したインデックス番号を用いて、ハッシュ係数値表から、小規模データセットに割り当てられたハッシュ関数を特定するハッシュ係数の値を取得し、これを用いて小規模データセットに割り当てられたハッシュ関数によって小規模データセットに含まれる各データのキーに基づいてハッシュ値を算出し、このハッシュ値を小規模データセットに対するハッシュテーブルのサイズで割った余りの値を算出し、この余りの値が小さい順に、メインメモリ上の小規模データセットに対するハッシュテーブルのハッシュ値に基づいて特定される番地(第1格納位置)又は次の番地(第2格納位置)に格納して、各小規模データセットに対するハッシュテーブルを作成する。
ここでは、検索対象データのキーとして従業員ID「0110」を受け取った場合を例に挙げて説明する。
まず、図26に示すように、従業員ID検索システムのデータ検索処理部3は、ハッシュテーブル特定部12によって、データセットを分割した複数のデータセットをそれぞれ格納する複数のハッシュテーブル22の中から、検索対象データのキーに基づいて、検索対象データを含む一のデータセットを格納する一のハッシュテーブル22を特定する。
ここでは、データ検索処理部3は、ハッシュ値計算部14によって、検索対象データのキー(ここでは従業員ID「0110」)、及び、上述のようにして取得した、検索対象データを含むデータセットに対応するハッシュ関数を特定するハッシュ係数の値(ここではR1〜R8の各値)を用いて、データのキー列{x1,x2,x3,...,xn}をxK(1≦K≦n)として、ハッシュ係数R(1≦R≦256)の値によって特定され、fR(xK)=fR(xK−1)×R+xK[但し、fR(x0)=R0(R0は初期値)]で表される関数族に含まれる1つのハッシュ関数によってハッシュ値を計算する(ステップF60)。そして、算出したハッシュ値を、検索対象データを含むデータセットに対するハッシュテーブル22のサイズ(ここでは「5」)で割った余りの値を算出し、この余りの値として「1」を得る(ステップF60)。
ここでは、データ検索処理部3は、読出部15によって、上述のようにして検索対象データのキーに基づいて算出したCRC値(ここでは「4」)によって特定されたハッシュテーブル(4番目のハッシュテーブル)22から、上述のようにして算出したハッシュ値をハッシュテーブル22のサイズで割った余りの値(ここでは「1」)によって特定される番地(第1格納位置;ここでは「1」)及び次の番地(第2格納位置;ここでは「2」)に格納されているデータ及びキーをメインメモリ101から読み出す(ステップF70)。
ここでは、データ検索処理部3は、出力部16によって、まず、ハッシュ値に基づいて特定される番地(ここでは「1」)から読み出したキー(ここでは「0106」)が、検索対象データのキー(ここでは「0110」)と一致するかを判定し(ステップF80)、次に、ハッシュ値に基づいて特定される番地の次の番地(ここでは「2」)から読み出したキー(ここでは「0110」)が、検索対象データのキー(ここでは「0110」)と一致するかを判定する(ステップF90)。これらの判定の結果、ハッシュ値に基づいて特定される番地の次の番地(ここでは「2」)から読み出したキーが、検索対象データのキーと一致すると判定し、ハッシュ値に基づいて特定される番地の次の番地(ここでは「2」)から読み出したキー(ここでは「0110」)に対応づけられているデータ(ここでは「山本聡」)を得て(ステップF90)、検索対象データとして出力する(ステップF100)。
[最長一致文字列検索の一例としての辞書式データ圧縮システム]
ここで、辞書式データ圧縮システムでは、上述のデータ検索装置1(データ格納方法及びデータ検索方法)をデータ圧縮のための辞書として用い、これに文字列(圧縮文字列)を与えることで、この文字列に対する圧縮符号を得ることができるようになっている。この場合、格納対象データは圧縮符号であり、そのキーは圧縮文字列である。なお、辞書式データ圧縮システムについては、例えば、特開平9−218877号公報、特開2011−221845号公報などに記載されたものがある。
まず、辞書式データ圧縮システムに備えられる上述のデータ検索装置1のデータ格納処理部2は、図27に示すような格納対象のデータセットを受けとったら、データ分割部7によって、図29に示すように、格納対象のデータセットを複数のデータセットに分割する。
次に、データ格納処理部2は、ハッシュ係数値表作成部9(ハッシュ関数実体管理表作成部)によって、図31に示すように、複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を格納するハッシュ係数値表(ハッシュ関数実体管理表)を作成する。
次に、データ格納処理部2は、ハッシュテーブル作成部11によって、複数のデータセットのそれぞれに対する複数のハッシュテーブル22を作成する。
ここでは、小規模データセットの識別番号であるCRC値を用いて対応表から取得したインデックス番号を用いて、小規模データセットに割り当てられたハッシュ関数を特定するハッシュ係数の値を取得し、これを用いて小規模データセットに割り当てられたハッシュ関数によって小規模データセットに含まれる各データのキーに基づいてハッシュ値を算出し、このハッシュ値を小規模データセットに対するハッシュテーブル22のサイズで割った余りの値を算出し、この余りの値が小さい順に、メインメモリ101上の小規模データセットに対するハッシュテーブル22のハッシュ値に基づいて特定される番地(第1格納位置)又は次の番地(第2格納位置)に格納して、各小規模データセットに対するハッシュテーブル22を作成する。
ここでは、検索対象データ(圧縮符号)のキーとして圧縮文字列「aa」を受け取った場合を例に挙げて説明する。
ここでは、データ検索処理部3は、ハッシュ値計算部14によって、検索対象データのキー(ここでは圧縮文字列「aa」)、及び、上述のようにして取得した、検索対象データを含むデータセットに対応するハッシュ関数を特定するハッシュ係数の値(ここではR1〜R8の各値)を用いて、データのキー列{x1,x2,x3,...,xn}をxK(1≦K≦n)として、ハッシュ係数R(1≦R≦256)の値によって特定され、fR(xK)=fR(xK−1)×R+xK[但し、fR(x0)=R0(R0は初期値)]で表される関数族に含まれる1つのハッシュ関数によってハッシュ値を計算する(ステップG60)。そして、算出したハッシュ値を、検索対象データを含むデータセットに対するハッシュテーブル22のサイズ(ここでは「5」)で割った余りの値を算出し、この余りの値として「1」を得る(ステップG60)。
ここでは、データ検索処理部3は、読出部15によって、上述のようにして検索対象データのキーに基づいて算出したCRC値(ここでは「3」)によって特定されたハッシュテーブル(3番目のハッシュテーブル)22から、上述のようにして算出したハッシュ値をハッシュテーブル22のサイズで割った余りの値(ここでは「1」)によって特定される番地(第1格納位置;ここでは「1」)及び次の番地(第2格納位置;ここでは「2」)に格納されているデータ及びキーをメインメモリ101から読み出す。
ここでは、データ検索処理部3は、出力部16によって、まず、ハッシュ値に基づいて特定される番地(ここでは「1」)から読み出したキー(ここでは「aab」)が、検索対象データのキー(ここでは「aa」)と一致するかを判定し(ステップG80)、次に、ハッシュ値に基づいて特定される番地の次の番地(ここでは「2」)から読み出したキー(ここでは「aa」)が、検索対象データのキー(ここでは「aa」)と一致するかを判定する(ステップG90)。これらの判定の結果、ハッシュ値に基づいて特定される番地の次の番地(ここでは「2」)から読み出したキーが、検索対象データのキーと一致すると判定し、ハッシュ値に基づいて特定される番地の次の番地(ここでは「2」)から読み出したキー(ここでは「aa」)に対応づけられているデータ(ここでは「C」)を得て(ステップG90)、検索対象データである圧縮符号として出力する(ステップG100)。
まず、辞書式データ圧縮システムは、文字列「aabbabb」の圧縮依頼を受け取ると(ステップH10)、まず、文字列「aabb」を、上述のデータ検索装置1に入力する(ステップH20)。そして、上述のデータ検索装置1は、検索対象データ(圧縮符号)のキーとして圧縮文字列「aabb」を受け取ると、上述と同様の処理を行なって、エラーメッセージを出力する。このため、辞書式データ圧縮システムは、文字列「aabb」に対してエラーメッセージを得る(ステップH20)。
次に、辞書式データ圧縮システムは、文字列「bab」を、上述のデータ検索装置1に入力する(ステップH60)。そして、上述のデータ検索装置1は、検索対象データ(圧縮符号)のキーとして圧縮文字列「bab」を受け取ると、上述と同様の処理を行なって、検索対象データである圧縮符号として「L」を出力する。このため、辞書式データ圧縮システムは、文字列「bab」に対して圧縮符号として「L」を得る(ステップH60)。
次に、辞書式データ圧縮システムは、文字列「b」を、上述のデータ検索装置1に入力する(ステップH90)。そして、上述のデータ検索装置1は、検索対象データ(圧縮符号)のキーとして圧縮文字列「b」を受け取ると、上述と同様の処理を行なって、検索対象データである圧縮符号として「B」を出力する。このため、辞書式データ圧縮システムは、文字列「b」に対して圧縮符号として「B」を得る(ステップH90)。
したがって、このような辞書式データ圧縮システムにおいて、上述のデータ検索装置1をデータ圧縮のための辞書として用いることで、データ検索効率の低下をできるだけ抑えながら、データ格納速度やデータ検索速度を向上させることができるという利点がある。例えば、辞書式データ圧縮機能を有するデータベースシステムにおいて、辞書を構成するハッシュテーブル22にアクセスするためのハッシュ値の計算に用いる対応表及びハッシュ係数値表をCPUキャッシュメモリ111上に格納することで、データ圧縮処理を高速化し、ユーザからのデータ更新要求やデータ挿入要求に対する応答性を向上させることができる。
例えば、上述の実施形態では、データ検索装置を、コンピュータにデータ格納プログラムやデータ検索プログラムをインストールしたものとして構成しているが、上述の実施形態における処理をコンピュータに実行させるデータ格納プログラムやデータ検索プログラム(上述のような機能をコンピュータに実現させるためのデータ格納プログラムやデータ検索プログラム)は、コンピュータ読取可能な記録媒体に格納した状態で提供される場合もある。
例えば、プログラム提供者が例えばサーバなどの他のコンピュータ上で提供しているデータ格納プログラムやデータ検索プログラムを、例えばインターネットやLAN等のネットワーク及び通信インタフェースを介して、記憶装置にインストールしても良い。これにより、上述の実施形態で説明したデータ検索装置、データ格納方法及びデータ検索方法が実現され、上述の実施形態の場合と同様に、記憶装置にインストールされたデータ格納プログラムやデータ検索プログラムを、CPUがメインメモリ上に読み出して実行することで、上述の実施形態の各処理が行なわれることになる。なお、コンピュータは、例えばサーバなどの他のコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
(付記1)
コンピュータに、
データセットを複数のデータセットに分割し、
前記複数のデータセットのそれぞれに対する複数のハッシュ関数を決定し、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を作成し、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値と前記複数のデータセットとを対応づける対応情報を作成し、
前記複数のデータセットのそれぞれに対する複数のハッシュ情報を作成する、処理を実行させ、
前記複数のハッシュ関数を決定する処理において、
前記データセット毎に、前記データセットに含まれる複数のデータのそれぞれのキーに基づいて候補ハッシュ関数によってハッシュ値を求め、前記ハッシュ値に基づいて特定される第1格納位置又は前記第1格納位置に連続する第2格納位置に前記複数のデータの全てを格納することができるか否かを判定し、
前記第1格納位置又は前記第2格納位置に前記複数のデータの全てを格納することができると判定した前記データセットに対する前記ハッシュ関数として前記候補ハッシュ関数を決定する、処理を前記コンピュータに実行させ、
前記複数のハッシュ情報を作成する処理において、前記データセット毎に、前記複数のデータのそれぞれのキーに基づいて前記データセットに対する前記ハッシュ関数によって求められるハッシュ値に基づいて特定される前記第1格納位置又は前記第2格納位置に前記データ及び前記キーを格納して前記データセットに対する前記ハッシュ情報を作成する処理を前記コンピュータに実行させることを特徴とするデータ格納プログラム。
前記対応情報を作成する処理において、キャッシュメモリ上に保持しうる情報量の対応情報を作成する処理を前記コンピュータに実行させ、
前記ハッシュ係数値情報を作成する処理において、キャッシュメモリ上に保持しうる情報量のハッシュ係数値情報を作成する処理を前記コンピュータに実行させることを特徴とする、付記1に記載のデータ格納プログラム。
前記複数のハッシュ関数を決定する処理において、データのキー列{x1,x2,x3,...,xn}をxK(1≦K≦n)として、ハッシュ係数R(1≦R≦256)の値によって特定され、fR(xK)=fR(xK−1)×R+xK[但し、fR(x0)=R0(R0は初期値)]で表される関数族に含まれるハッシュ関数を前記候補ハッシュ関数として用いることを特徴とする、付記1又は2に記載のデータ格納プログラム。
前記複数のハッシュ関数を決定する処理において、前記第1格納位置又は前記第2格納位置に前記複数のデータの全てを格納することができると判定した前記データセットが2つ以上ある場合に、前記候補ハッシュ関数を前記2つ以上のデータセットのそれぞれに対する前記ハッシュ関数として決定する処理を含む処理を前記コンピュータに実行させ、
前記対応情報を作成する処理において、一つのハッシュ関数を特定するハッシュ係数の値と前記2つ以上のデータセットとを対応づけている対応情報を作成する処理を前記コンピュータに実行させることを特徴とする、付記1〜3のいずれか1項に記載のデータ格納プログラム。
前記複数のハッシュ関数を決定する処理において、前記複数のデータセットのそれぞれに対する複数のハッシュ関数として16個又は32個のハッシュ関数を決定する処理を前記コンピュータに実行させ、
前記対応情報を作成する処理において、前記複数のハッシュ関数のそれぞれを特定する前記複数のハッシュ係数の値と前記複数のデータセットとを対応づけ、かつ、4ビット又は5ビットで構成されている複数のインデックスを含む対応情報を作成する処理を前記コンピュータに実行させることを特徴とする、付記1〜4のいずれか1項に記載のデータ格納プログラム。
コンピュータに、
データセットを分割した複数のデータセットをそれぞれ格納する複数のハッシュ情報の中から、検索対象データのキーに基づいて、前記検索対象データを含む一のデータセットを格納する一のハッシュ情報を特定し、
前記検索対象データのキーに基づいて、前記複数のデータセットと複数のハッシュ関数のそれぞれを特定するハッシュ係数の値とを対応づける対応情報及び前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を用いて、前記一のデータセットに対応する一のハッシュ関数を特定する一のハッシュ係数の値を取得し、
前記検索対象データのキー及び前記一のハッシュ係数の値を用いて前記一のハッシュ関数によってハッシュ値を計算し、
前記一のハッシュ情報から、前記ハッシュ値に基づいて特定される第1格納位置及び前記第1格納位置に連続する第2格納位置に格納されているデータ及びキーを読み出し、
前記第1格納位置又は前記第2格納位置から読み出したキーが前記検索対象データのキーと一致すると判定した場合に、一致すると判定したキーに対応づけられているデータを前記検索対象データとして出力する、
処理を実行させることを特徴とするデータ検索プログラム。
前記対応情報及び前記ハッシュ係数値情報は、キャッシュメモリ上に保持しうる情報量になっていることを特徴とする、付記6に記載のデータ検索プログラム。
(付記8)
前記複数のハッシュ関数は、データのキー列{x1,x2,x3,...,xn}をxK(1≦K≦n)として、ハッシュ係数R(1≦R≦256)の値によって特定され、fR(xK)=fR(xK−1)×R+xK[但し、fR(x0)=R0(R0は初期値)]で表される関数族に含まれることを特徴とする、付記6又は7に記載のデータ検索プログラム。
前記対応情報は、一つのハッシュ関数を特定するハッシュ係数の値と2つ以上のデータセットとを対応づけていることを特徴とする、付記6〜8のいずれか1項に記載のデータ検索プログラム。
(付記10)
前記複数のハッシュ関数は、16個又は32個のハッシュ関数であり、
前記対応情報は、前記複数のデータセットと前記複数のハッシュ関数のそれぞれを特定する前記ハッシュ係数の値とを対応づける複数のインデックスを含み、前記複数のインデックスは、それぞれ、4ビット又は5ビットで構成されていることを特徴とする、付記6〜9のいずれか1項に記載のデータ検索プログラム。
データセットを複数のデータセットに分割するデータ分割部と、
前記複数のデータセットのそれぞれに対する複数のハッシュ関数を決定するハッシュ関数決定部と、 前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を作成するハッシュ係数値情報作成部と、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値と前記複数のデータセットとを対応づける対応情報を作成する対応情報作成部と、
前記複数のデータセットのそれぞれに対する複数のハッシュ情報を作成するハッシュ情報作成部とを備え、
前記ハッシュ関数決定部は、
前記データセット毎に、前記データセットに含まれる複数のデータのそれぞれのキーに基づいて候補ハッシュ関数によってハッシュ値を求め、前記ハッシュ値に基づいて特定される第1格納位置又は前記第1格納位置に連続する第2格納位置に前記複数のデータの全てを格納することができるか否かを判定し、
前記第1格納位置又は前記第2格納位置に前記複数のデータの全てを格納することができると判定した前記データセットに対する前記ハッシュ関数として前記候補ハッシュ関数を決定し、
前記ハッシュ情報作成部は、前記データセット毎に、前記複数のデータのそれぞれのキーに基づいて前記データセットに対する前記ハッシュ関数によって求められるハッシュ値に基づいて特定される前記第1格納位置又は前記第2格納位置に前記データ及び前記キーを格納して前記データセットに対する前記ハッシュ情報を作成することを特徴とするデータ格納装置。
前記対応情報作成部は、キャッシュメモリ上に保持しうる情報量の対応情報を作成し、
前記ハッシュ係数値情報作成部は、キャッシュメモリ上に保持しうる情報量のハッシュ係数値情報を作成することを特徴とする、付記11に記載のデータ格納装置。
(付記13)
前記ハッシュ関数決定部は、データのキー列{x1,x2,x3,...,xn}をxK(1≦K≦n)として、ハッシュ係数R(1≦R≦256)の値によって特定され、fR(xK)=fR(xK−1)×R+xK[但し、fR(x0)=R0(R0は初期値)]で表される関数族に含まれるハッシュ関数を前記候補ハッシュ関数として用いることを特徴とする、付記11又は12に記載のデータ格納装置。
前記ハッシュ関数決定部は、前記第1格納位置又は前記第2格納位置に前記複数のデータの全てを格納することができると判定した前記データセットが2つ以上ある場合に、前記候補ハッシュ関数を前記2つ以上のデータセットのそれぞれに対する前記ハッシュ関数として決定し、
前記対応情報作成部は、一つのハッシュ関数を特定するハッシュ係数の値と前記2つ以上のデータセットとを対応づけている対応情報を作成することを特徴とする、付記11〜13のいずれか1項に記載のデータ格納装置。
データセットを分割した複数のデータセットをそれぞれ格納する複数のハッシュ情報の中から、検索対象データのキーに基づいて、前記検索対象データを含む一のデータセットを格納する一のハッシュ情報を特定するハッシュ情報特定部と、
前記検索対象データのキーに基づいて、前記複数のデータセットと複数のハッシュ関数のそれぞれを特定するハッシュ係数の値とを対応づける対応情報及び前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を用いて、前記一のデータセットに対応する一のハッシュ関数を特定する一のハッシュ係数の値を取得するハッシュ係数値取得部と、
前記検索対象データのキー及び前記一のハッシュ係数の値を用いて前記一のハッシュ関数によってハッシュ値を計算するハッシュ値計算部と、
前記一のハッシュ情報から、前記ハッシュ値に基づいて特定される第1格納位置及び前記第1格納位置に連続する第2格納位置に格納されているデータ及びキーを読み出す読出部と、
前記第1格納位置又は前記第2格納位置から読み出したキーが前記検索対象データのキーと一致すると判定した場合に、一致すると判定したキーに対応づけられているデータを前記検索対象データとして出力する出力部とを備えることを特徴とするデータ検索装置。
コンピュータが、
データセットを複数のデータセットに分割し、
前記複数のデータセットのそれぞれに対する複数のハッシュ関数を決定し、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を作成し、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値と前記複数のデータセットとを対応づける対応情報を作成し、
前記複数のデータセットのそれぞれに対する複数のハッシュ情報を作成する、処理を実行し、
前記複数のハッシュ関数を決定する処理において、
前記データセット毎に、前記データセットに含まれる複数のデータのそれぞれのキーに基づいて候補ハッシュ関数によってハッシュ値を求め、前記ハッシュ値に基づいて特定される第1格納位置又は前記第1格納位置に連続する第2格納位置に前記複数のデータの全てを格納することができるか否かを判定し、
前記第1格納位置又は前記第2格納位置に前記複数のデータの全てを格納することができると判定した前記データセットに対する前記ハッシュ関数として前記候補ハッシュ関数を決定する、処理を前記コンピュータが実行し、
前記複数のハッシュ情報を作成する処理において、前記データセット毎に、前記複数のデータのそれぞれのキーに基づいて前記データセットに対する前記ハッシュ関数によって求められるハッシュ値に基づいて特定される前記第1格納位置又は前記第2格納位置に前記データ及び前記キーを格納して前記データセットに対する前記ハッシュ情報を作成する処理を前記コンピュータが実行することを特徴とするデータ格納方法。
前記対応情報を作成する処理において、キャッシュメモリ上に保持しうる情報量の対応情報を作成する処理を前記コンピュータが実行し、
前記ハッシュ係数値情報を作成する処理において、キャッシュメモリ上に保持しうる情報量のハッシュ係数値情報を作成する処理を前記コンピュータが実行することを特徴とする、付記16に記載のデータ格納方法。
前記複数のハッシュ関数を決定する処理において、データのキー列{x1,x2,x3,...,xn}をxK(1≦K≦n)として、ハッシュ係数R(1≦R≦256)の値によって特定され、fR(xK)=fR(xK−1)×R+xK[但し、fR(x0)=R0(R0は初期値)]で表される関数族に含まれるハッシュ関数を前記候補ハッシュ関数として用いることを特徴とする、付記16又は17に記載のデータ格納方法。
前記複数のハッシュ関数を決定する処理において、前記第1格納位置又は前記第2格納位置に前記複数のデータの全てを格納することができると判定した前記データセットが2つ以上ある場合に、前記候補ハッシュ関数を前記2つ以上のデータセットのそれぞれに対する前記ハッシュ関数として決定する処理を含む処理を前記コンピュータが実行し、
前記対応情報を作成する処理において、一つのハッシュ関数を特定するハッシュ係数の値と前記2つ以上のデータセットとを対応づけている対応情報を作成する処理を前記コンピュータが実行することを特徴とする、付記16〜18のいずれか1項に記載のデータ格納方法。
コンピュータが、
データセットを分割した複数のデータセットをそれぞれ格納する複数のハッシュ情報の中から、検索対象データのキーに基づいて、前記検索対象データを含む一のデータセットを格納する一のハッシュ情報を特定し、
前記検索対象データのキーに基づいて、前記複数のデータセットと複数のハッシュ関数のそれぞれを特定するハッシュ係数の値とを対応づける対応情報及び前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を用いて、前記一のデータセットに対応する一のハッシュ関数を特定する一のハッシュ係数の値を取得し、
前記検索対象データのキー及び前記一のハッシュ係数の値を用いて前記一のハッシュ関数によってハッシュ値を計算し、
前記一のハッシュ情報から、前記ハッシュ値に基づいて特定される第1格納位置及び前記第1格納位置に連続する第2格納位置に格納されているデータ及びキーを読み出し、
前記第1格納位置又は前記第2格納位置から読み出したキーが前記検索対象データのキーと一致すると判定した場合に、一致すると判定したキーに対応づけられているデータを前記検索対象データとして出力する、
処理を実行することを特徴とするデータ検索方法。
2 データ格納処理部
3 データ検索処理部
4 ハッシュ係数値表記憶部(ハッシュ関数実体管理表記憶部)
5 対応表記憶部(ハッシュ関数インデックス表記憶部)
6 ハッシュテーブル記憶部
7 データ分割部
8 ハッシュ関数決定部
9 ハッシュ係数値作成部
10 対応表作成部
11 ハッシュテーブル作成部
12 ハッシュテーブル特定部
13 ハッシュ係数値取得部
14 ハッシュ値計算部
15 読出部
16 出力部
20 ハッシュ係数値表(ハッシュ関数実体管理表)
21 対応表(ハッシュ関数インデックス表)
22 ハッシュテーブル
101 メインメモリ
102 CPU
103 表示制御部
104 表示装置
105 記憶装置
106 入力装置
107 ドライブ装置
108 可搬型記録媒体
109 通信制御部
110 バス
111 キャッシュメモリ(CPUキャッシュメモリ)
Claims (10)
- コンピュータに、
データセットを複数のデータセットに分割し、
前記複数のデータセットのそれぞれに対する複数のハッシュ関数を決定し、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を作成し、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値と前記複数のデータセットとを対応づける対応情報を作成し、
前記複数のデータセットのそれぞれに対する複数のハッシュ情報を作成する、処理を実行させ、
前記複数のハッシュ関数を決定する処理において、
前記データセット毎に、前記データセットに含まれる複数のデータのそれぞれのキーに基づいて候補ハッシュ関数によってハッシュ値を求め、前記ハッシュ値に基づいて特定される第1格納位置又は前記第1格納位置に連続する第2格納位置に前記複数のデータの全てを格納することができるか否かを判定し、
前記第1格納位置又は前記第2格納位置に前記複数のデータの全てを格納することができると判定した前記データセットに対する前記ハッシュ関数として前記候補ハッシュ関数を決定する、処理を前記コンピュータに実行させ、
前記複数のハッシュ情報を作成する処理において、前記データセット毎に、前記複数のデータのそれぞれのキーに基づいて前記データセットに対する前記ハッシュ関数によって求められるハッシュ値に基づいて特定される前記第1格納位置又は前記第2格納位置に前記データ及び前記キーを格納して前記データセットに対する前記ハッシュ情報を作成する処理を前記コンピュータに実行させることを特徴とするデータ格納プログラム。 - 前記対応情報を作成する処理において、キャッシュメモリ上に保持しうる情報量の対応情報を作成する処理を前記コンピュータに実行させ、
前記ハッシュ係数値情報を作成する処理において、キャッシュメモリ上に保持しうる情報量のハッシュ係数値情報を作成する処理を前記コンピュータに実行させることを特徴とする、請求項1に記載のデータ格納プログラム。 - 前記複数のハッシュ関数を決定する処理において、データのキー列{x1,x2,x3,...,xn}をxK(1≦K≦n)として、ハッシュ係数R(1≦R≦256)の値によって特定され、fR(xK)=fR(xK−1)×R+xK[但し、fR(x0)=R0(R0は初期値)]で表される関数族に含まれるハッシュ関数を前記候補ハッシュ関数として用いることを特徴とする、請求項1又は2に記載のデータ格納プログラム。
- 前記複数のハッシュ関数を決定する処理において、前記第1格納位置又は前記第2格納位置に前記複数のデータの全てを格納することができると判定した前記データセットが2つ以上ある場合に、前記候補ハッシュ関数を前記2つ以上のデータセットのそれぞれに対する前記ハッシュ関数として決定する処理を含む処理を前記コンピュータに実行させ、
前記対応情報を作成する処理において、一つのハッシュ関数を特定するハッシュ係数の値と前記2つ以上のデータセットとを対応づけている対応情報を作成する処理を前記コンピュータに実行させることを特徴とする、請求項1〜3のいずれか1項に記載のデータ格納プログラム。 - 前記複数のハッシュ関数を決定する処理において、前記複数のデータセットのそれぞれに対する複数のハッシュ関数として16個又は32個のハッシュ関数を決定する処理を前記コンピュータに実行させ、
前記対応情報を作成する処理において、前記複数のハッシュ関数のそれぞれを特定する前記複数のハッシュ係数の値と前記複数のデータセットとを対応づけ、かつ、4ビット又は5ビットで構成されている複数のインデックスを含む対応情報を作成する処理を前記コンピュータに実行させることを特徴とする、請求項1〜4のいずれか1項に記載のデータ格納プログラム。 - コンピュータに、
データセットを分割した複数のデータセットをそれぞれ格納する複数のハッシュ情報の中から、検索対象データのキーに基づいて、前記検索対象データを含む一のデータセットを格納する一のハッシュ情報を特定し、
前記検索対象データのキーに基づいて、前記複数のデータセットと複数のハッシュ関数のそれぞれを特定するハッシュ係数の値とを対応づける対応情報及び前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を用いて、前記一のデータセットに対応する一のハッシュ関数を特定する一のハッシュ係数の値を取得し、
前記検索対象データのキー及び前記一のハッシュ係数の値を用いて前記一のハッシュ関数によってハッシュ値を計算し、
前記一のハッシュ情報から、前記ハッシュ値に基づいて特定される第1格納位置及び前記第1格納位置に連続する第2格納位置に格納されているデータ及びキーを読み出し、
前記第1格納位置又は前記第2格納位置から読み出したキーが前記検索対象データのキーと一致すると判定した場合に、一致すると判定したキーに対応づけられているデータを前記検索対象データとして出力する、
処理を実行させることを特徴とするデータ検索プログラム。 - データセットを複数のデータセットに分割するデータ分割部と、
前記複数のデータセットのそれぞれに対する複数のハッシュ関数を決定するハッシュ関数決定部と、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を作成するハッシュ係数値情報作成部と、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値と前記複数のデータセットとを対応づける対応情報を作成する対応情報作成部と、
前記複数のデータセットのそれぞれに対する複数のハッシュ情報を作成するハッシュ情報作成部とを備え、
前記ハッシュ関数決定部は、
前記データセット毎に、前記データセットに含まれる複数のデータのそれぞれのキーに基づいて候補ハッシュ関数によってハッシュ値を求め、前記ハッシュ値に基づいて特定される第1格納位置又は前記第1格納位置に連続する第2格納位置に前記複数のデータの全てを格納することができるか否かを判定し、
前記第1格納位置又は前記第2格納位置に前記複数のデータの全てを格納することができると判定した前記データセットに対する前記ハッシュ関数として前記候補ハッシュ関数を決定し、
前記ハッシュ情報作成部は、前記データセット毎に、前記複数のデータのそれぞれのキーに基づいて前記データセットに対する前記ハッシュ関数によって求められるハッシュ値に基づいて特定される前記第1格納位置又は前記第2格納位置に前記データ及び前記キーを格納して前記データセットに対する前記ハッシュ情報を作成することを特徴とするデータ格納装置。 - データセットを分割した複数のデータセットをそれぞれ格納する複数のハッシュ情報の中から、検索対象データのキーに基づいて、前記検索対象データを含む一のデータセットを格納する一のハッシュ情報を特定するハッシュ情報特定部と、
前記検索対象データのキーに基づいて、前記複数のデータセットと複数のハッシュ関数のそれぞれを特定するハッシュ係数の値とを対応づける対応情報及び前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を用いて、前記一のデータセットに対応する一のハッシュ関数を特定する一のハッシュ係数の値を取得するハッシュ係数値取得部と、
前記検索対象データのキー及び前記一のハッシュ係数の値を用いて前記一のハッシュ関数によってハッシュ値を計算するハッシュ値計算部と、
前記一のハッシュ情報から、前記ハッシュ値に基づいて特定される第1格納位置及び前記第1格納位置に連続する第2格納位置に格納されているデータ及びキーを読み出す読出部と、
前記第1格納位置又は前記第2格納位置から読み出したキーが前記検索対象データのキーと一致すると判定した場合に、一致すると判定したキーに対応づけられているデータを前記検索対象データとして出力する出力部とを備えることを特徴とするデータ検索装置。 - コンピュータが、
データセットを複数のデータセットに分割し、
前記複数のデータセットのそれぞれに対する複数のハッシュ関数を決定し、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を格納するハッシュ係数値情報を作成し、
前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値と前記複数のデータセットとを対応づける対応情報を作成し、
前記複数のデータセットのそれぞれに対する複数のハッシュ情報を作成する、処理を実行し、
前記複数のハッシュ関数を決定する処理において、
前記データセット毎に、前記データセットに含まれる複数のデータのそれぞれのキーに基づいて候補ハッシュ関数によってハッシュ値を求め、前記ハッシュ値に基づいて特定される第1格納位置又は前記第1格納位置に連続する第2格納位置に前記複数のデータの全てを格納することができるか否かを判定し、
前記第1格納位置又は前記第2格納位置に前記複数のデータの全てを格納することができると判定した前記データセットに対する前記ハッシュ関数として前記候補ハッシュ関数を決定する、処理を前記コンピュータが実行し、
前記複数のハッシュ情報を作成する処理において、前記データセット毎に、前記複数のデータのそれぞれのキーに基づいて前記データセットに対する前記ハッシュ関数によって求められるハッシュ値に基づいて特定される前記第1格納位置又は前記第2格納位置に前記データ及び前記キーを格納して前記データセットに対する前記ハッシュ情報を作成する処理を前記コンピュータが実行することを特徴とするデータ格納方法。 - コンピュータが、
データセットを分割した複数のデータセットをそれぞれ格納する複数のハッシュ情報の中から、検索対象データのキーに基づいて、前記検索対象データを含む一のデータセットを格納する一のハッシュ情報を特定し、
前記検索対象データのキーに基づいて、前記複数のデータセットと複数のハッシュ関数のそれぞれを特定するハッシュ係数の値とを対応づける対応情報及び前記複数のハッシュ関数のそれぞれを特定する複数のハッシュ係数の値を含むハッシュ係数値情報を用いて、前記一のデータセットに対応する一のハッシュ関数を特定する一のハッシュ係数の値を取得し、
前記検索対象データのキー及び前記一のハッシュ係数の値を用いて前記一のハッシュ関数によってハッシュ値を計算し、
前記一のハッシュ情報から、前記ハッシュ値に基づいて特定される第1格納位置及び前記第1格納位置に連続する第2格納位置に格納されているデータ及びキーを読み出し、
前記第1格納位置又は前記第2格納位置から読み出したキーが前記検索対象データのキーと一致すると判定した場合に、一致すると判定したキーに対応づけられているデータを前記検索対象データとして出力する、
処理を実行することを特徴とするデータ検索方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012288075A JP6028567B2 (ja) | 2012-12-28 | 2012-12-28 | データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法 |
US14/057,784 US9235651B2 (en) | 2012-12-28 | 2013-10-18 | Data retrieval apparatus, data storage method and data retrieval method |
EP13190257.9A EP2750053B1 (en) | 2012-12-28 | 2013-10-25 | Data storage program, data retrieval program, data retrieval apparatus, data storage method and data retrieval method |
CN201310739206.1A CN103914506B (zh) | 2012-12-28 | 2013-12-26 | 数据检索装置、数据存储方法和数据检索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012288075A JP6028567B2 (ja) | 2012-12-28 | 2012-12-28 | データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014130489A JP2014130489A (ja) | 2014-07-10 |
JP6028567B2 true JP6028567B2 (ja) | 2016-11-16 |
Family
ID=49485593
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012288075A Active JP6028567B2 (ja) | 2012-12-28 | 2012-12-28 | データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US9235651B2 (ja) |
EP (1) | EP2750053B1 (ja) |
JP (1) | JP6028567B2 (ja) |
CN (1) | CN103914506B (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210294783A1 (en) * | 2020-03-19 | 2021-09-23 | Red Hat, Inc. | Scalable Object Storage |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10515231B2 (en) * | 2013-11-08 | 2019-12-24 | Symcor Inc. | Method of obfuscating relationships between data in database tables |
US10078613B1 (en) * | 2014-03-05 | 2018-09-18 | Mellanox Technologies, Ltd. | Computing in parallel processing environments |
US9330104B2 (en) * | 2014-04-30 | 2016-05-03 | International Business Machines Corporation | Indexing and searching heterogenous data entities |
CN104317795A (zh) * | 2014-08-28 | 2015-01-28 | 华为技术有限公司 | 一种二维过滤器的生成方法、查询方法及装置 |
US9443092B2 (en) * | 2014-11-18 | 2016-09-13 | Pitney Bowes Inc. | System and method for matching data sets while maintaining privacy of each data set |
JP6742692B2 (ja) * | 2015-01-30 | 2020-08-19 | 富士通株式会社 | 符号化プログラムおよび伸長プログラム |
JP6334431B2 (ja) * | 2015-02-18 | 2018-05-30 | 株式会社日立製作所 | データ分析装置、データ分析方法、およびデータ分析プログラム |
KR101649128B1 (ko) * | 2015-03-06 | 2016-08-19 | 인하대학교 산학협력단 | 충돌이 없는 해시 함수를 이용한 빅데이터 분석 방법 및 장치 |
WO2017017738A1 (ja) * | 2015-07-24 | 2017-02-02 | 富士通株式会社 | 符号化プログラム、符号化装置、及び符号化方法 |
CN107229663B (zh) * | 2016-03-25 | 2022-05-27 | 阿里巴巴集团控股有限公司 | 数据处理方法和装置以及数据表处理方法和装置 |
EP3476051A1 (en) * | 2016-07-14 | 2019-05-01 | Huawei Technologies Co., Ltd. | General purpose data compression using simd engine |
KR102565005B1 (ko) * | 2016-08-04 | 2023-08-07 | 에스케이하이닉스 주식회사 | 저항 변화 메모리의 수명 연장 방법 및 그 방법을 이용하는 데이터 저장 시스템 |
CN106557332A (zh) * | 2016-11-30 | 2017-04-05 | 上海寒武纪信息科技有限公司 | 一种指令生成过程的复用方法及装置 |
CN108874803B (zh) * | 2017-05-09 | 2023-05-12 | 腾讯科技(深圳)有限公司 | 数据存储方法、装置及存储介质 |
US11030714B2 (en) * | 2018-01-27 | 2021-06-08 | Microsoft Technology Licensing, Llc. | Wide key hash table for a graphics processing unit |
US11816103B1 (en) * | 2018-03-01 | 2023-11-14 | Amazon Technologies, Inc. | Dynamic prefetching for database queries |
KR102388458B1 (ko) * | 2019-10-31 | 2022-04-21 | 울산과학기술원 | 데이터 키 값 변환 방법 및 장치 |
CN111090397B (zh) * | 2019-12-12 | 2021-10-22 | 苏州浪潮智能科技有限公司 | 一种数据重删方法、系统、设备及计算机可读存储介质 |
US11630864B2 (en) | 2020-02-27 | 2023-04-18 | Oracle International Corporation | Vectorized queues for shortest-path graph searches |
US11222070B2 (en) * | 2020-02-27 | 2022-01-11 | Oracle International Corporation | Vectorized hash tables |
CN113465609B (zh) * | 2020-03-30 | 2024-08-09 | 浙江菜鸟供应链管理有限公司 | 一种针对目标对象的时序匹配方法及装置 |
CN113568561B (zh) * | 2020-04-29 | 2024-05-17 | 伊姆西Ip控股有限责任公司 | 用于信息处理的方法、电子设备和计算机存储介质 |
US11533173B2 (en) * | 2020-06-11 | 2022-12-20 | Lognovations Holdings, Llc | Systems and methods for compression and encryption of data |
CN112165387B (zh) * | 2020-09-28 | 2022-11-08 | 百行征信有限公司 | 数据散列值的转换方法、装置及计算机设备 |
US20220107738A1 (en) * | 2020-10-06 | 2022-04-07 | Kioxia Corporation | Read controller and input/output controller |
CN112417227B (zh) * | 2021-01-21 | 2021-06-01 | 国能信控互联技术有限公司 | 一种基于哈希表和红黑树的实时数据存储与查询方法 |
CN114666011B (zh) * | 2022-03-23 | 2024-04-16 | 锐捷网络股份有限公司 | 一种数据处理方法、装置及电子设备 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07168841A (ja) * | 1993-12-14 | 1995-07-04 | Shikoku Nippon Denki Software Kk | ハッシュテーブル生成方法 |
JP3835489B2 (ja) | 1996-02-13 | 2006-10-18 | 富士通株式会社 | データ圧縮装置及び復元装置の辞書検索登録方法 |
US5914938A (en) * | 1996-11-19 | 1999-06-22 | Bay Networks, Inc. | MAC address table search unit |
US5893120A (en) * | 1997-01-02 | 1999-04-06 | Nemes; Richard Michael | Methods and apparatus for information storage and retrieval using a hashing technique with external chaining and on-the-fly removal of expired data |
US5897637A (en) * | 1997-03-07 | 1999-04-27 | Apple Computer, Inc. | System and method for rapidly identifying the existence and location of an item in a file |
US6275919B1 (en) * | 1998-10-15 | 2001-08-14 | Creative Technology Ltd. | Memory storage and retrieval with multiple hashing functions |
JP3983987B2 (ja) | 2001-03-12 | 2007-09-26 | 株式会社東芝 | サーバ側プロキシ装置、データ転送方法及びプログラム |
US7054912B2 (en) | 2001-03-12 | 2006-05-30 | Kabushiki Kaisha Toshiba | Data transfer scheme using caching technique for reducing network load |
US7792877B2 (en) * | 2007-05-01 | 2010-09-07 | Microsoft Corporation | Scalable minimal perfect hashing |
US8238237B2 (en) * | 2007-06-18 | 2012-08-07 | Sony Computer Entertainment Inc. | Load balancing distribution of data to multiple recipients on a peer-to-peer network |
JP5544998B2 (ja) | 2010-04-12 | 2014-07-09 | 富士通株式会社 | テキスト処理装置、テキスト処理方法、およびテキスト処理プログラム |
JP5526985B2 (ja) * | 2010-04-28 | 2014-06-18 | 富士通株式会社 | 検索プログラム、検索装置、および検索方法 |
EP2410453A1 (en) * | 2010-06-21 | 2012-01-25 | Samsung SDS Co. Ltd. | Anti-malware device, server, and method of matching malware patterns |
KR101274348B1 (ko) * | 2010-06-21 | 2013-07-30 | 삼성에스디에스 주식회사 | 안티멀웨어 디바이스, 서버 및 멀웨어 패턴 매칭 방법 |
-
2012
- 2012-12-28 JP JP2012288075A patent/JP6028567B2/ja active Active
-
2013
- 2013-10-18 US US14/057,784 patent/US9235651B2/en active Active
- 2013-10-25 EP EP13190257.9A patent/EP2750053B1/en active Active
- 2013-12-26 CN CN201310739206.1A patent/CN103914506B/zh active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210294783A1 (en) * | 2020-03-19 | 2021-09-23 | Red Hat, Inc. | Scalable Object Storage |
Also Published As
Publication number | Publication date |
---|---|
CN103914506B (zh) | 2017-09-12 |
JP2014130489A (ja) | 2014-07-10 |
US9235651B2 (en) | 2016-01-12 |
US20140188893A1 (en) | 2014-07-03 |
CN103914506A (zh) | 2014-07-09 |
EP2750053A1 (en) | 2014-07-02 |
EP2750053B1 (en) | 2019-03-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6028567B2 (ja) | データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法 | |
KR101467589B1 (ko) | 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체 | |
JP5798503B2 (ja) | ファイルリスト生成方法及びシステム、ファイルリスト生成装置並びにプログラム | |
JP5844824B2 (ja) | Sparqlクエリ最適化方法 | |
JP5790755B2 (ja) | データベース管理装置及びデータベース管理方法 | |
KR20140038441A (ko) | 압축 매치 열거 기법 | |
JP5980520B2 (ja) | 効率的にクエリを処理する方法及び装置 | |
CN108304384B (zh) | 拆词方法及设备 | |
JP5287071B2 (ja) | データベース管理システムおよびプログラム | |
JPWO2019073967A1 (ja) | k−匿名化装置、方法及びプログラム | |
KR100859710B1 (ko) | 데이터에 대한 검색을 수행하기 위한 자료구조를 이용하여 데이터를 검색, 저장, 삭제하는 방법 | |
JPWO2012049883A1 (ja) | データ構造、インデックス作成装置、データ検索装置、インデックス作成方法、データ検索方法、インデックス作成プログラムおよびデータ検索プログラム | |
JP2011257877A (ja) | 情報検索装置、情報検索方法、及びプログラム | |
JP5655764B2 (ja) | サンプリング装置、サンプリングプログラム、およびその方法 | |
KR101242860B1 (ko) | 누적 이동 평균에 기반하여 다원 탐색 트리의 노드를 분할하는 방법 및 장치 | |
JPWO2016043121A1 (ja) | 情報処理装置、情報処理方法、及びプログラム | |
JP5736589B2 (ja) | 数列データ検索装置、数列データ検索方法及びプログラム | |
EP3995972A1 (en) | Metadata processing method and apparatus, and computer-readable storage medium | |
US20110029570A1 (en) | Systems and methods for contextualized caching strategies | |
JPWO2013172309A1 (ja) | ルール発見システムと方法と装置並びにプログラム | |
JP2009175896A (ja) | 情報検索装置及び方法及びプログラム及びコンピュータ読取可能な記録媒体 | |
JP2010191624A (ja) | 情報検索方法とその装置、プログラム、記録媒体 | |
CN109815225B (zh) | 基于前缀树结构的并行化前缀数据检索方法和系统 | |
CN106777131A (zh) | 一种高维空间数据的查询方法、装置及计算机可读介质 | |
EP3036663B1 (en) | Thin database indexing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20150903 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20160729 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20160823 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160830 |
|
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: 20160920 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20161003 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6028567 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |