実施形態を説明する前に、本願明細書で用いる用語について説明する。
コンテンツ(Content)とは、多くの場合、自然言語における単語や、数のことである。例えば、“This is a book”というテキストにおいては、This、is、a、bookがそれぞれコンテンツである。なお、前述したように、コンテンツとは、多くの場合、自然言語における単語や、数のことであるが、用途に応じて任意に定義してよい。例えば、バイナリファイルにおいて、特定のビットパターンをコンテンツと定義しても良い。また、動画ファイルにおいて、人物などの特定画像パターンをコンテンツと定義しても良い。また、音声ファイルにおいて、場面切り替え時に特徴的な音声パターンなどの特定音声パターンをコンテンツと定義してもよい。
ファイル(File)とは、コンテンツを含む一般のファイルである。例えば、テキストからなるファイルや、テキストとその他アプリケーション特有の情報を含むファイルである。
形態素分析(Morphological Analysis)とは、ファイルからコンテンツを抽出して、コンテンツ毎に分離する処理のことである。
ファイル識別子(File ID)とは、ストレージ装置においてそのファイルを特定できる識別子である。例としては、階層的ディレクトリ構造におけるフルパスのファイル名、多くのファイルシステムで使用されるファイル識別子であるinode番号などが含まれる。また、任意長ビットデータをハッシュ関数によって固定長ビットデータに変換するハッシュ生成器を使い、ファイルを特定できる任意長ビットデータから生成した固定長ビットデータをファイル識別子としても良い。
転置ファイル(Inverted File)とは、コンテンツ毎に作成され、そのコンテンツを含むファイルの識別子を格納するファイルである。転置ファイルは、ファイル内におけるコンテンツの位置情報を含んでいても良い。
次に、転置ファイルの一例を示す。File 1: ”This is a book”、File 2: “This is a bag”という二つのファイルがある場合を考える。File 1のFile IDを0x001、File 2のFile IDを0x002とする。ファイル内におけるコンテンツの位置(pos)は、ゼロを基点とするコンテンツの出現順番とする。転置ファイルは、File IDとファイル内におけるコンテンツの位置情報の組、(File ID, pos)を格納する。このとき、“This”に対応する転置ファイルの内容は、{(0x001, 1), (0x002,1)}となる。この転置ファイルは、”This”というコンテンツが、0x001というFile IDのファイルの1番目の位置と、0x002というFile IDのファイルの1番目の位置にあることを意味している。
転置ファイル識別子(Inverted File ID)とは、ストレージ装置においてその転置ファイルを特定できる識別子である。例えば、任意長ビットデータをハッシュ関数によって固定長ビットデータに変換するハッシュ生成器を使い、コンテンツから生成した固定長ビットデータである。
以下、図面を参照して本発明の実施形態について説明する。説明に際し、全図にわたり、共通する部分には共通する参照符号を付す。
[1]第1実施形態
[1−1]ハードウェア構成
まず、本発明の第1実施形態のストレージ装置のハードウェア構成について説明する。
図1は、第1実施形態のストレージ装置のハードウェア構成を示すブロック図である。
図示するように、ストレージ装置10は、ホストインターフェース11、第1のメモリブロック12、第2のメモリブロック13、及びコントローラ14から構成されている。なお、ストレージ装置10には、CPU101、及びメインメモリ102を含むホストシステムが接続されている。ホストシステムとしては、例えばパーソナルコンピュータ、携帯電話、デジタルカメラ、携帯情報端末(PDA)等がある。
ホストインターフェース11は、ホストシステムからコンテンツの検索要求を入力として受け取り、コンテンツの検索結果をホストシステムに出力する。また、ホストインターフェース11は、アドレスを指定したファイルの書き込み/読み出しの要求を入力として受け取る。書き込み要求の際には、さらにファイルを入力として受け取る。また、読み出し要求の際には、アドレス指定されたファイルを出力する。
第1のメモリブロック12は、ファイル121、ファイル121のコンテンツリスト、及びコンテンツに対応する転置ファイル122を格納する。転置ファイル122は、コンテンツを含むファイル121のファイル識別子のリストを格納する。転置ファイル122は、ファイル121内におけるコンテンツの位置情報を含んでいても良い。
第2のメモリブロック13は、ファイル検索テーブル131を格納する。ファイル検索テーブル131は、コンテンツの検索で得られたファイル121のファイル識別子のリストを格納する。第2のメモリブロック13は、書き込み/読み出し時におけるバッファメモリを有している。
第1のメモリブロック12は、第2のメモリブロック13に比べて、不揮発・大容量であるがアクセス速度が遅い。第2のメモリブロック13は、ホストインターフェース11の通信速度と、第1のメモリブロック12のアクセス速度の速度差を補うために使用できる。例えば、第1のメモリブロック12は不揮発性のFlash memoryアレイであり、第2のメモリブロックは揮発性のDRAMもしくはSRAMである。
コントローラ14は、ホストインターフェース11と第1のメモリブロック12と第2のメモリブロック13との間の相互の信号送受信を制御する。コントローラ14は、ホストインターフェース11に入力されたコンテンツの検索要求に対して、コンテンツの検索処理を実行する。そして、ホストインターフェース11を介してコンテンツの検索結果を出力する。また、コントローラ14は、書き込み要求の際には、第1のメモリブロック12内のアドレス指定の位置にファイル121を書き込む。読み出しの際には、アドレス指定の位置のファイル121を読み出す。
[1−2]ファイル管理及びコンテンツ検索処理
次に、第1実施形態のストレージ装置におけるファイル管理及びコンテンツ検索処理について説明する。
ストレージ装置10には、ホストシステムからホストインターフェース11を介してファイルの書き込み、削除、及び更新の要求が入力される。そして、随時、ホストシステムからストレージ装置10に、ホストインターフェース11を介してコンテンツの検索要求が入力される。コンテンツの検索要求が入力されると、ストレージ装置10においてコンテンツの検索処理が行われ、コンテンツの検索結果がホストインターフェース11を介してホストシステムに出力される。
以下に、ストレージ装置10における処理を、検索対象のファイルの書き込み、検索対象のファイルの削除、検索対象のファイルの更新、及びコンテンツの検索の順で述べる。
[1−2−1]ファイルの書き込み・削除・更新
(ファイルの書き込み)
図2は、第1実施形態のストレージ装置におけるファイルの書き込み処理を示すフローチャートである。
(1)ホストインターフェース11は、ホストシステムからファイルの書き込み要求を受け取る(ステップS11)。ホストシステムからホストインターフェース11に、ファイル、及びそのファイルの格納アドレスが入力される。すると、コントローラ14は、ホストシステムから入力されたファイルの形態素分析を行い、コンテンツのリストを得る(ステップS12)。ここで、形態素分析とは、ファイルをコンテンツに分解する処理のことである。
(2)コントローラ14は、第1のメモリブロック12に、ファイル121と、ファイル121から得たコンテンツリストを格納する(ステップS13)。
(3)コントローラ14は、コンテンツリストのコンテンツ毎に、第1のメモリブロック12にそのコンテンツに対応する転置ファイル122があるか否かを調べる(ステップS14)。転置ファイルが既にある場合は、転置ファイル122にそのコンテンツを含むファイル121のファイル識別子を追記する(ステップS15)。一方、転置ファイルがない場合は、転置ファイルを作成する(ステップS16)。そして、作成した転置ファイルにそのコンテンツを含むファイル121のファイル識別子を記入する(ステップS15)。
また、前述した例では、ファイルの形態素分析をコントローラ14にて行ったが、ホストシステムのCPU101にて形態素分析を行っても良い。この場合、以下のような処理となる。
(1)ホストシステムは、ファイルの形態素分析を行い、コンテンツのリストを得る。ホストシステムは、ストレージ装置10に、ファイル、そのファイルの格納アドレス、及びコンテンツのリストを入力する。
(2)コントローラ14は、第1のメモリブロック12に、ファイル121とそのファイルから取得したコンテンツリストを格納する。
(3)コントローラ14は、コンテンツリストのコンテンツ毎に、第1のメモリブロック12にそのコンテンツに対応する転置ファイル122があるか否かを調べる。転置ファイルが既にある場合は、転置ファイル122にそのコンテンツを含むファイル121のファイル識別子を追記する。一方、転置ファイルがない場合は、転置ファイルを作成する。そして、作成した転置ファイルにそのコンテンツを含むファイル121のファイル識別子を記入する。
(ファイルの削除)
図3は、第1実施形態のストレージ装置におけるファイルの削除処理を示すフローチャートである。
(1)ホストインターフェース11は、ホストシステムからファイルの削除要求を受け取る(ステップS21)。すると、コントローラ14は、第1のメモリブロック12に格納された削除対象のファイルから得たコンテンツリストに従い、コンテンツ毎に対応する転置ファイル122から削除対象ファイルのファイル識別子を削除する(ステップS22)。
(2)コントローラ14は、第1のメモリブロック12から削除対象ファイルとコンテンツリストを削除する(ステップS23)。
(ファイルの更新)
図4は、第1実施形態のストレージ装置におけるファイルの更新処理を示すフローチャートである。
(1)ホストインターフェース11は、ホストシステムからファイルの更新要求を受け取る(ステップS31)。ホストシステムからホストインターフェース11に、更新ファイル、及び更新ファイルの格納アドレスが入力される。
(2)コントローラ14は、第1のメモリブロック12に格納された更新前のファイルから得たコンテンツリストに従い、コンテンツ毎に対応する転置ファイルから更新前のファイルのファイル識別子を削除する(ステップS32)。
(3)コントローラ14は、ホストシステムから入力された更新ファイルの形態素分析を行い、コンテンツのリストを得る(ステップS33)。
(4)コントローラ14は、第1のメモリブロック12に、更新ファイルとその更新ファイルから得たコンテンツリストを格納する(ステップS34)。
(5)コントローラ14は、コンテンツリストのコンテンツ毎に、第1のメモリブロック12にそのコンテンツに対応する転置ファイル122があるか否かを調べる(ステップS35)。転置ファイルが既にある場合は、その転置ファイル122にそのコンテンツを含むファイル121のファイル識別子を追記する(ステップS36)。一方、転置ファイルがない場合は、転置ファイルを作成する(ステップS37)。そして、作成した転置ファイルにそのコンテンツを含むファイル121のファイル識別子を記入する(ステップS36)。
[1−2−2]コンテンツ検索処理
次に、第1実施形態のストレージ装置におけるコンテンツ検索処理(全文検索機能)について説明する。
図5は、第1実施形態のストレージ装置におけるコンテンツの検索処理を示すフローチャートである。
(1)ホストインターフェース11は、ホストシステムからコンテンツの検索要求を受け取る(ステップS41)。コントローラ14は、検索対象のコンテンツに対応する転置ファイルに格納されたファイル識別子のリストを、第2のメモリブロック13のファイル検索テーブル131に格納する(ステップS42)。
(2)コントローラ14は、ファイル検索テーブル131に格納されているファイル識別子のリストを、コンテンツ検索結果としてホストインターフェース11を介して出力する(ステップS43)。
第1実施形態によれば、ストレージ装置内のコントローラが転置ファイルの管理及びコンテンツの検索処理を行うため、それらの処理をホストインターフェースの通信速度に制限されることなく高速に行うことができる。コンテンツ検索の際には、転置ファイルにアクセスすることにより、検索の都度、全ファイルを走査することなく、コンテンツ検索結果を得ることができる。すなわち、従来のストレージ装置の機能に加えて、全文検索機能を自らもつストレージ装置を実現することができる。
従来、ストレージ装置を管理するホストシステムのリソース(CPUやDRAM)を使って、転置ファイルの管理やブール演算による検索を行うソフトウェアが存在している。しかし、次の3点の問題があった。
(1)ホストシステムのリソースに負荷がかかる。これは、特にホスト機器のリソースが限られるモバイル用途で問題になる。(2)スケーラビリティが無い。ホストシステムにおけるリソースの負荷が、ストレージ装置の数の増大とともに増大する。(3)可搬性が低い。取り外し可能なストレージ装置であっても、転置ファイルの管理やブール演算による検索の実現法がホストシステムに依存する場合、任意のホストシステムで全文検索機能を使用することができない。
本実施形態では、これらの問題を解決することができる。すなわち、ホスト機器にてコンテンツの検索を行う際に、ホストシステムのリソースにかかる負荷を低減することができる。また、コンテンツ検索に関し、ストレージ装置の数が増大しても、ホストシステムにおけるリソースの負荷が増大しない。ストレージ装置で転置ファイルの管理やブール演算による検索を行うため、任意のホストシステムで全文検索機能を使用することができる。
[2]第2実施形態
次に、本発明の第2実施形態のストレージ装置について説明する。
第2実施形態のストレージ装置では、第1実施形態の処理にさらに加えて、複数のコンテンツの検索結果に対するAND、OR、NOTを含むブール演算の処理を行うことができる。
ホストインターフェースを介して複数のコンテンツの検索結果に対するAND、OR、NOTを含むブール演算の要求が入力されると、コントローラは、ブール演算要求の結果となるように、ファイル検索テーブルの内容を書き換える。そして、ホストインターフェースを介してブール演算の結果、すなわちコンテンツの検索結果を出力する。
[2−1]ハードウェア構成
第2実施形態のストレージ装置のハードウェア構成は、前記第1実施形態と同様であるため、記載は省略する。
[2−2]コンテンツ検索処理(ブール演算検索要求に対する処理)
第2実施形態のストレージ装置におけるコンテンツのAND、OR、NOTの検索処理について説明する。
図6、図7及び図8は、第2実施形態のストレージ装置におけるコンテンツの検索処理を示すフローチャートである。
(1)ホストインターフェース11は、ホストシステムからコンテンツのAND、OR、NOTの検索要求を受け取る(ステップS51)。
(2)コントローラ14は、検索対象の第1のコンテンツに対応する転置ファイルに格納されたファイル識別子のリストを、第2のメモリブロック13のファイル検索テーブル131に格納する(ステップS52)。
(3)コントローラ14は、検索対象の第2のコンテンツに対応する転置ファイルに格納されたファイル識別子毎に、ブール演算子に応じて、次の通りファイル検索テーブル131の内容を書き換える。
AND演算を図6中の処理21に示す。第2のコンテンツに対応する転置ファイルに格納されたファイル識別子が、ファイル検索テーブル131に既にあるか否かを調べる(ステップS53)。
そのファイル識別子があれば、バッファにそのファイル識別子を書き出す(ステップS54)。バッファ領域としては、第2のメモリブロック13の一部を割り当てる。一方、そのファイル識別子がなければ、なにもしない(ステップS55)。
最後に、ファイル検索テーブル131を初期化する(ステップS56)。そして、バッファに書き込まれたファイル識別子のリストを、ファイル検索テーブル131に格納する(ステップS57)。
OR演算を図7中の処理22に示す。第2のコンテンツに対応する転置ファイルに格納されたファイル識別子が、ファイル検索テーブル131に既にあるか否かを調べる(ステップS61)。
そのファイル識別子があれば、何もしない(ステップS62)。一方、そのファイル識別子がなければ、ファイル検索テーブル131にそのファイル識別子を追加する(ステップS63)。
NOT演算を図8中の処理23に示す。第2のコンテンツに対応する転置ファイルに格納されたファイル識別子が、ファイル検索テーブル131に既にあるか否かを調べる(ステップS71)。
そのファイル識別子があれば、ファイル検索テーブル131からファイル識別子を削除する(ステップS72)。一方、ファイル識別子がなければ、なにもしない(ステップS73)。
(4)コントローラ14は、ファイル検索テーブル131に格納されているファイル識別子のリストを、コンテンツ検索結果としてホストインターフェース11を介して出力する(ステップS58)。
第2実施形態によれば、ストレージ装置内のコントローラが転置ファイルの管理やブール演算を行うため、それらの処理をホストインターフェースの通信速度に制限されることなく高速に行うことができる。すなわち、第1の実施形態における効果に加えて、複数のコンテンツの検索結果に対するAND、OR、NOTを含むブール演算機能を備えるストレージ装置を実現することができる。その他の構成及び効果は前記第1実施形態と同様である。
[3]第3実施形態
次に、本発明の第3実施形態のストレージ装置について説明する。
第3実施形態のストレージ装置では、第2実施形態の処理にさらに加えて、コンテンツに対応する転置ファイルのアドレスの高速検索機能、及び複数のコンテンツの検索結果に対するAND、OR、NOTを含むブール演算の高速化が実現できる。
[3−1]ハードウェア構成
本発明の第3実施形態のストレージ装置のハードウェア構成について説明する。
図9は、第3実施形態のストレージ装置のハードウェア構成を示すブロック図である。
図示するように、ストレージ装置30は、ホストインターフェース11、第1のメモリブロック12、第2のメモリブロック15、第3のメモリブロック16、第4のメモリブロック17、及びコントローラ18から構成されている。
コントローラ18は、ハッシュ生成器181を含む。ハッシュ生成器181は、任意長ビットデータをハッシュ関数によって固定長ビットデータに変換する。ここでは、この機能を用いて、ハッシュ生成器181は、任意長ビットデータのコンテンツから、固定長ビットデータの転置ファイルの識別子を生成する。また、ハッシュ生成器181は、ファイルを特定できる任意長ビットデータから、固定長ビットデータのファイルの識別子を生成する。
ハッシュ関数としては、なるべく均一かつ疎な暗号学的ハッシュ関数(cryptologic hash)が好ましい。例えば、CRC(Cyclic Redundancy Check)、もしくはSHA−1(Secure Hash Algorithm-1)、SHA−2(Secure Hash Algorithm-1)、MD4(MessageDigest4)、MD5(MessageDigest5)を使用する。
ハッシュ生成器181は、ハッシュ関数に従い生成したある固定長ビットのビット列を、所望のビット長(BitLength)にする機能を有していても良い。例えば、次式の除算機能を有する。 <Key ID>= cryptologic_hash(<Key>) mod BitLength
また、第2のメモリブロック15は、ホストインターフェース11と第1のメモリブロック12と第3のメモリブロック16と第4のメモリブロック17とコントローラ18とに接続されている。第2のメモリブロック15は、ファイル識別子とブール演算の結果を格納する変数の組を要素とする配列であるファイル検索テーブル151を格納する。ファイル検索テーブル151中の各要素の格納位置は、各要素のファイル識別子が自ら含む情報によって決まっている。言い換えると、各ファイル識別子は、ファイル検索テーブル151中の各要素の格納位置情報を含んでいる。
第3のメモリブロック16は、ホストインターフェース11と第1のメモリブロック12と第2のメモリブロック15と第4のメモリブロック17とコントローラ18とに接続されている。第3のメモリブロック16は、転置ファイルの識別子とその転置ファイルの格納位置の組を要素とする配列である転置ファイル割り当てテーブル161を格納する。転置ファイル割り当てテーブル161中の各要素の格納位置は、各要素の転置ファイル識別子が自ら含む情報によって決まっている。言い換えると、各転置ファイル識別子は、転置ファイル割り当てテーブル161中の各要素の格納位置情報を含んでいる。
第4のメモリブロック17は、ホストインターフェース11と第1のメモリブロック12と第2のメモリブロック15と第3のメモリブロック16とコントローラ18とに接続されている。第4のメモリブロック17は、ファイルの識別子とそのファイルの格納位置の組を要素とする配列であるファイル割り当てテーブル171を格納する。ファイル割り当てテーブル171中の各要素の格納位置は、各要素のファイル識別子が自ら含む情報によって決まっている。言い換えると、各ファイル識別子は、ファイル割り当てテーブル171中の各要素の格納位置情報を含んでいる。
また、ファイル識別子と転置ファイル識別子のいずれかもしくは両方が、ハッシュ生成器181によって固定長ビットデータとされている。
[3−2]ハッシュテーブルデータ構造
ハッシュテーブルデータ構造は、転置ファイル割り当てテーブル161やファイル検索テーブル151、ファイル割り当てテーブル171に適用することができる。ハッシュテーブルデータ構造は、キー識別子とそれに対応する値の組を要素として格納する。
ハッシュテーブルデータ構造の特徴は、登録する各要素の格納位置が、各要素のキー識別子が自ら含む情報によって決まることである。このデータ構造の特徴により、検索対象のキー識別子が登録されているかの有無判定、登録されているならば検索対象のキー識別子に対応する値の取得(キー識別子から値への変換)を、高速に行うことができる。これを用いることにより、本実施形態ではコンテンツに対応する転置ファイルのアドレスの高速な検索、及び複数のコンテンツの検索結果に対するAND、OR、NOTを含むブール演算の高速化、ファイルの識別子に対応するファイルのアドレスの高速な検索、が実現できる。
[3−2−1]ハッシュテーブルデータ構造の第1例
図10A(a)は、ハッシュテーブルデータ構造の第1例を示す図である。
ハッシュテーブルデータ構造は、図10A(a)に示すように、有効フラグとキー識別子とそれに対応する値の組を要素とする配列である。配列における各要素の位置をスロット識別子で表す。
スロット識別子は、コントローラによりキー識別子から生成されたものである。ここでは、図10A(b)に示すように、キー識別子の接頭部12ビットをスロット識別子としている。キー識別子をmビットとし、スロット識別子をnビットとすると、m>nが成り立つ(m,nは1以上の整数)。図10A(c)は登録待ちのキー識別子を示し、図10A(a)は図10A(c)に示した登録待ちのキー識別子がハッシュテーブルデータ構造に登録された状態を示す。
以下に、ハッシュテーブルデータ構造(第1例)における要素登録及び要素検索の手順を説明する。
(要素登録手順)
ここでは、ハッシュテーブルデータ構造にキー識別子とそれに対応する値の組を登録する手続きを述べる。
図11は、第3実施形態における要素登録手続(第1例)を示すフローチャートである。
コントローラ18は、候補スロット識別子を保持する記憶領域を有し、候補スロット識別子の変数を管理する。
(1)(初期化)コントローラ18は、2n個の要素を持つ配列を用意し、すべての要素の有効フラグをFalseにする(ステップS81)。
(2)(候補スロット識別子)コントローラ18は、登録するmビットのキー識別子の一部からnビットのスロット識別子を生成する(ステップS82)。例えば、図10A(b)に示すように、24ビットのキー識別子の接頭部12ビットをスロット識別子とする。そのスロット識別子を、候補スロット識別子の変数に代入する(ステップS83)。
(3)(次期登録スロットの特定)コントローラ18は、候補スロット識別子で特定される要素の有効フラグがFalseか否かを判定する(ステップS84)。有効フラグがFalseのとき(Yes)、ステップS85に移行する。一方、有効フラグがFalseでなくTrueのとき(No)、候補スロット識別子をインクリメントして(ステップS86)、再度、ステップS84に戻る。
(4)(登録)コントローラ18は、候補スロット識別子で特定される要素に、登録するキー識別子と値を格納し、有効フラグをTrueに変える(ステップS85)。
(要素検索手順)
ここでは、検索対象のキー識別子に対して、対応する値を得る手続きを述べる。
図12は、第3実施形態における要素検索手続(第1例)を示すフローチャートである。
(1)(候補スロット識別子)コントローラ18は、図11に示した登録手順と同じ手続きで、検索するmビットのキー識別子の一部からnビットの候補スロット識別子を生成する(ステップS91、S92)。
(2)(検索キー対応スロットの特定)コントローラ18は、候補スロット識別子で特定される要素の有効フラグがTrueか否かを判定する(ステップS93)。有効フラグがTrueでなくFalseのとき(No)、コントローラ内部状態をUNMATCHとして検索手続き終了する(ステップS94、S95)。一方、有効フラグがTrueのとき(Yes)、ステップS96へ移行する。
コントローラ18は、候補スロット識別子で特定される要素のキー識別子が、検索対象のキー識別子と同じか判定する(ステップS96)。検索対象のキー識別子と同じとき(Yes)、ステップS97に移行する。一方、検索対象のキー識別子と違うとき(No)、候補スロット識別子をインクリメントして(ステップS98)、再度、ステップS93へ戻る。
(3)(出力)コントローラ18は、候補スロット識別子で特定される要素の値を、目的の値として得る(ステップS97)。
[3−2−2]ハッシュテーブルデータ構造の第2例
図10B(a)は、ハッシュテーブルデータ構造の第2例を示す図である。
ハッシュテーブルデータ構造は、図10B(a)に示すように、ポインタを要素とするポインタ配列と、ポインタとキー識別子とそれに対応する値の組を要素とする連結リストからなる。ポインタ配列における各要素の位置をスロット識別子で表す。
第1例と同様に、スロット識別子は、コントローラによりキー識別子から生成されたものである。ここでは、図10B(b)に示すように、キー識別子の接頭部12ビットをスロット識別子としている。キー識別子をmビットとし、スロット識別子をnビットとすると、m>nが成り立つ。図10B(a)は、図10A(c)に示した登録待ちのキー識別子がハッシュテーブルデータ構造に登録された状態を示す。
以下に、ハッシュテーブルデータ構造(第2例)における要素登録及び要素検索の手順を説明する。
(要素登録手順)
ここでは、キー識別子とそれに対応する値の組を登録する手続きを述べる。
図13は、第3実施形態における要素登録手続(第2例)を示すフローチャートである。
コントローラ18は、候補スロット識別子と候補ポインタを保持する記憶領域を有し、候補スロット識別子及び候補ポインタの変数を管理する。
(1)(初期化)コントローラ18は、2n個の要素を持つポインタ配列を用意し、すべての要素のポインタをNULLにする(ステップS101)。
(2)(スロット識別子)コントローラ18は、登録するmビットのキー識別子の一部からnビットのスロット識別子を生成する(ステップS102)。例えば、図10B(b)に示すように、24ビットのキー識別子の接頭部12ビットを抽出し、それを候補スロット識別子とする(ステップS103)。
(3)(次期登録エントリの特定)コントローラ18は、候補スロット識別子で特定されるポインタ配列の要素がNULLか否かを判定する(ステップS104)。ポインタ配列の要素がNULLのとき(Yes)、連結リストの要素を1つ作成し、そのポインタを、候補スロット識別子で特定されるポインタ配列の要素と、候補ポインタとに格納して(ステップS105)、ステップS110に移行する。一方、ポインタ配列の要素がNULLでないとき(No)、そのポインタを候補ポインタにセットして(ステップS106)、ステップS107に移行する。
候補ポインタで特定される連結リストの要素のポインタがNULLか否かを判定する(ステップS107)。ポインタがNULLのとき(Yes)、連結リストの要素を1つ作成し、そのポインタを、候補ポインタで特定される連結リストの要素のポインタと、候補ポインタに格納して(ステップS108)、ステップS110に移行する。一方、ポインタがNULLでないとき(No)、そのポインタを候補ポインタにセットして(ステップS109)、ステップS107に戻る。
(4)(登録)コントローラ18は、候補ポインタで特定される連結リストの要素にキー識別子と値を格納する(ステップS110)。
(要素検索手順)
ここでは、検索対象のキー識別子に対して、対応する値を得る手続きを述べる。
図14は、第3実施形態における要素検索手続(第2例)を示すフローチャートである。
(1)(候補スロット識別子)コントローラ18は、図13に示した登録手順と同じ手続きで、検索するmビットのキー識別子の一部からnビットの候補スロット識別子を生成する(ステップS111、S112)。
(2)(検索キー対応スロットの特定)コントローラ18は、候補スロット識別子で特定されるポインタ配列の要素のポインタがNULLか否かを判定する(ステップS113)。ポインタがNULLのとき(Yes)、コントローラ内部状態をUNMATCHとして検索手続きを終了する(ステップS114、S115)。一方、ポインタがNULLでないとき(No)、そのポインタを候補ポインタに格納して(ステップS116)、ステップS117に移行する。
ステップS117では、候補ポインタで特定される連結リストの要素のキー識別子が、検索対象のキー識別子と同じか否かを判定する。キー識別子と同じとき(Yes)、ステップS122に移行する。
一方、キー識別子と違うとき(No)、候補ポインタで特定される連結リストの要素のポインタがNULLか否かを判定する(ステップS118)。ポインタがNULLのとき(Yes)、コントローラ内部状態をUNMATCHとして検索手続きを終了する(ステップS119、S120)。一方、ポインタがNULLでないとき(No)、そのポインタを候補ポインタに格納して(ステップS121)、ステップS117に戻る。
(3)(出力)ステップS122では、コントローラ18は、候補ポインタで特定される要素の値を、目的の値として得る。
なお、ハッシュテーブルデータ構造の作成に必要な記憶容量を少なくするために、連結リストに格納するキー識別子の換わりに、キー識別子のうちのスロット識別子に使われなかった残りのm−nビットの部分を用いても良い。
[3−3]転置ファイル割り当てテーブル
第3のメモリブロック16の転置ファイル割り当てテーブル161に、ハッシュテーブルデータ構造を適用する場合の処理は以下のようになる。
ハッシュテーブルデータ構造におけるキー識別子と値を、それぞれ転置ファイル割り当てテーブル161内の転置ファイル識別子と転置ファイル格納位置にセットする。
(1)コントローラ18は、ハッシュ生成器181により、コンテンツが持つデータから転置ファイル識別子を生成する。
(2)コントローラ18は、転置ファイル割り当てテーブル161に従い、転置ファイル識別子を転置ファイル格納位置に変換する。すなわち、転置ファイル識別子から転置ファイルの格納位置を求める。これにより、コントローラ18は、コンテンツに対応する転置ファイルに高速にアクセスすることができる。
[3−4]ファイル割り当てテーブル
第4のメモリブロック17のファイル割り当てテーブル171に、ハッシュテーブルデータ構造を適用する場合の処理は以下のようになる。
ハッシュ生成器181により、ファイルを特定できる任意長ビットデータから生成された固定長ビットデータをファイル識別子として使用する場合、その逆にファイル識別子から元のファイルを特定できる必要がある。そのために、本実施形態ではファイル割り当てテーブル171を、第4のメモリブロック17に用意する。
既に説明したハッシュテーブルデータ構造におけるキー識別子と値を、それぞれファイル割り当てテーブル171内のファイル識別子とファイル格納位置にセットする。
(1)コントローラ18は、ハッシュ生成器181により、ファイルを特定できる任意長ビットデータからファイル識別子を生成する。
(2)コントローラ18は、ファイル割り当てテーブル171に従い、ファイル識別子からファイル格納位置を求める。このように、ファイル格納位置を求めることにより、コントローラ18は、ファイル識別子に対応するファイルに高速にアクセスすることができる。
[3−5]ファイル検索テーブル
第2のメモリブロック15のファイル検索テーブル151に、ハッシュテーブルデータ構造を適用する場合の処理は以下のようになる。
図15、図16及び図17は、第3実施形態のストレージ装置におけるコンテンツの検索処理を示すフローチャートである。
既に説明したハッシュテーブルデータ構造におけるキー識別子と値を、それぞれ第2のメモリブロック15内のファイル識別子とブール演算の結果の変数(以下、ブール変数と記す)にセットする。コントローラ18は、ブール演算結果の判定値(以下、ブール判定値と記す)を保持する記憶領域を有し、ブール判定値を管理する。
(1)コントローラ18は、検索対象の第1のコンテンツに対応する転置ファイルに格納されたファイル識別子のリストから、ファイル識別子を一つずつ取り出す。既に述べた登録手順に従い、各ファイル識別子を、ブール変数値を1としてファイル検索テーブル151に登録する。また、ブール判定値は1とする(ステップS131)。
(2)コントローラ18は、検索対象の第2のコンテンツに対応する転置ファイルに格納されたファイル識別子毎に、ブール演算子に応じて、次の通りファイル検索テーブル151の内容を書き換える。
AND演算を図15中の処理24に示す。第2のコンテンツに対応する転置ファイルに格納されたファイル識別子が、ファイル検索テーブル151に既に登録されているか否かを調べる(ステップS132)。ファイル識別子が登録されていれば(Yes)、対応するブール変数値をインクリメントする。さらに、ブール判定値をインクリメントする(ステップS133)。一方、ファイル識別子が登録されていなければ(No)、なにもせず(ステップS134)、ステップS135に移行する。
OR演算を図16中の処理25に示す。第2のコンテンツに対応する転置ファイルに格納されたファイル識別子が、ファイル検索テーブル151に既に登録されているか否かを調べる(ステップS141)。ファイル識別子が登録されていれば(Yes)、なにもせず(ステップS142)、ステップS135に移行する。一方、ファイル識別子が登録されていなければ(No)、そのファイル識別子対応するブール変数値を現在のブール判定値として登録する(ステップS143)。
NOT演算を図17中の処理26に示す。第2のコンテンツに対応する転置ファイルに格納されたファイル識別子が、ファイル検索テーブル151に既に登録されているか否かを調べる(ステップS151)。ファイル識別子が登録されていれば(Yes)、そのファイル識別子に対応するブール変数値をデクリメントする(ステップS152)。一方、ファイル識別子が登録されていなければ(No)、なにもせず(ステップS153)、ステップS135に移行する。
(3)ステップS135では、コントローラ18は、第2のコンテンツに対応する転置ファイルに格納されたファイル識別子をすべて処理したか判定する。ファイル識別子をすべて処理したならば(Yes)、ブール変数値がブール判定値と等しい要素のファイル識別子を出力する(ステップS136)。一方、ファイル識別子をすべて処理していなければ(No)、AND演算ではステップS132に戻り、OR演算ではステップS141に、NOT演算ではステップS151にそれぞれ戻る。
第3実施形態によれば、第2実施形態の効果にさらに加えて、検索対象のコンテンツに対応する転置ファイルのアドレスを、転置ファイル割り当てテーブル161を用いて高速に検索することができる。さらに、複数のコンテンツの検索結果に対するAND、OR、NOTを含むブール演算を、ファイル検索テーブル151を用いて高速化に実行することができる。その他の構成及び効果は前記第1,第2実施形態と同様である。
[4]第4実施形態
次に、本発明の第4実施形態のストレージ装置について説明する。
第4実施形態のストレージ装置では、第3実施形態の処理にさらに加えて、複数のコンテンツの検索結果に対するAND、OR、NOTを含むブール演算のさらなる高速化が実現できる。
[4−1]ハードウェア構成
本発明の第4実施形態のストレージ装置のハードウェア構成について説明する。
図18は、第4実施形態のストレージ装置のハードウェア構成を示すブロック図である。
図示するように、ストレージ装置40は、インターフェース11、第1のメモリブロック12、第2のメモリブロック19、第3のメモリブロック16、第4のメモリブロック17、及びコントローラ18から構成されている。
第2のメモリブロック19は、コンテンツ連想メモリ(CAM: Content-Addressable Memory)とRAMを組み合わせたCAM−RAMシステムによって構成されている。
図19を用いて、CAM−RAMシステムについて説明する。図19はCAM−RAMシステムの一例を示す。
コンテンツ連想メモリ(CAM)とは、アドレスの入力に対してそのアドレスが指定するデータを出力する通常メモリとは異なり、検索データの入力に対して、その検索データと全ての格納データとの一致・不一致の比較演算を同時並列に行い、一致した格納データのアドレスを出力する機能を持つ高速検索用途の特殊メモリである。また、CAMは、データの一致検索に対して、一致データの有無をMatch Flagとして出力する。
CAM−RAMシステムとは、前述したCAMとアドレス指定アクセスのRAMを組み合わせたシステムである。CAMの1つのエントリとRAMの1つのエントリとが一対一対応するように、CAMのアドレスデコーダーとRAMのアドレスエンコーダーが設計されている。
キー識別子(Key ID)とそれに対応する値(value)の組をCAM−RAMシステムに格納する。すなわち、キー識別子と対応する値を、それぞれCAMのエントリと対応するRAMのエントリに格納する。
このようなCAM−RAMシステムを用いれば、検索対象のキー識別子が登録されているかの有無判定、登録されているならば検索対象のキー識別子に対応する値の取得(キー識別子から値への変換)を、既に述べたハッシュテーブルデータ構造の場合よりも、さらに高速に行うことができる。
[4−2]コンテンツ検索処理
第2のメモリブロック19のファイル検索テーブル191にCAM−RAMシステムを適用した場合、以下のようになる。
CAM−RAMシステムにおけるキー識別子と値を、それぞれファイル検索テーブル191内のファイル識別子とブール変数にセットする。
コントローラ18は、ブール判定値を保持する記憶領域を有し、ブール判定値を管理する。そして、コントローラ18は、第3実施形態の場合と同じ手順により、複数のコンテンツの検索結果に対するAND、OR、NOTを含むブール演算を実施する。
第4実施形態では、ファイル検索テーブル191にCAM−RAMシステムを用いることにより、検索対象のキー識別子が登録されているかの有無判定や、登録されているならば検索対象のキー識別子に対応する値の取得を、第3実施形態で述べたハッシュテーブルデータ構造を用いた場合よりも、さらに高速に行うことができる。これにより、複数のコンテンツの検索結果に対するAND、OR、NOTを含むブール演算のさらなる高速化が実現できる。
なおここでは、ファイル検索テーブル191にCAM−RAMシステムを用いる例を示したが、転置ファイル割り当てテーブル161やファイル割り当てテーブル171にCAM−RAMシステムを用いることももちろん可能である。この場合、転置ファイル割り当てテーブル161やファイル割り当てテーブル171にハッシュテーブルデータ構造を用いた場合よりも、さらに高速にコンテンツの検索処理を行うことができる。その他の構成及び効果は前記第3実施形態と同様である。
以上説明したように本発明の実施形態によれば、ホストインターフェースの通信速度に制限されることなく、転置ファイルの管理及びブール演算を高速に行うことができるストレージ装置を提供できる。また、従来のストレージ装置が備えるアドレス指定書き込み/読み出し機能だけでなく、全文検索機能も備えるストレージ装置およびその効率的な実現法を提供できる。
なお、前述した各実施形態はそれぞれ、単独で実施できるばかりでなく、適宜組み合せて実施することも可能である。さらに、前述した各実施形態には種々の段階の発明が含まれており、各実施形態において開示した複数の構成要件の適宜な組み合わせにより、種々の段階の発明を抽出することも可能である。