"keyと前記keyに対応するvalueの組であるkeyvalue型データを含むkeyvalueストアを備えたメモリシステムにおいて、データを記憶するデータ領域と、前記keyvalue型データを含むテーブル領域とを格納する第1のメモリと、前記第1のメモリに対する、アドレス指定による書き込み及び読み出し、および前記keyvalueストアに基づく要求を実行する制御回路と、前記制御回路からの命令により前記keyvalue型データを格納する第2のメモリとを具備し、前記制御回路は、前記第1のメモリに格納された前記keyvalue型データと、前記第2のメモリに格納された前記keyvalue型データとを用いて集合演算を行うことを特徴とするメモリシステム。前記テーブル領域は、第1のアドレスと、前記第1のアドレスに記憶された、前記key、及び前記keyに対応するvalueとを有し、前記valueには第2のアドレスが記憶され、前記第2のアドレスにより指定された前記データ領域の記憶場所を参照することにより、前記valueを得ることを特徴とする請求項1に記載のメモリシステム。前記keyをハッシュ関数によって前記第1のアドレスに変換するハッシュ生成器をさらに具備することを特徴とする請求項2に記載のメモリシステム。前記第1のメモリはDRAMであることを特徴とする請求項1乃至3のいずれかに記載のメモリシステム。前記第1のメモリは、前記keyの入力に対して、前記keyと、前記第1のメモリ内に格納されたデータとの比較を行い、一致したデータが記憶された第3のアドレスを出力する連想メモリと、前記第3のアドレスの指定により前記書き込み及び読み出しが行われるRAMとを備えることを特徴とする請求項1または2に記載のメモリシステム。前記第2のメモリは、前記制御回路により制御されるメインメモリであることを特徴とする請求項1乃至5のいずれかに記載のメモリシステム。前記メインメモリはDRAMであることを特徴とする請求項6に記載のメモリシステム。前記第2のメモリは、前記keyの入力に対して、前記keyと、前記第2のメモリ内に格納されたデータとの比較を行い、一致したデータが記憶された第3のアドレスを出力するコンテンツ連想メモリと、前記第3のアドレスの指定により前記書き込み及び読み出しが行われるRAMとを備えることを特徴とする請求項1乃至5のいずれかに記載のメモリシステム。前記第2のメモリはNAND型フラッシュメモリであることを特徴とする請求項8に記載のメモリシステム。前記制御回路と前記第1のメモリとの間に接続されたメモリコントローラをさらに具備し、前記メモリコントローラはダイレクトメモリアクセスDMA回路を有し、前記ダイレクトメモリアクセスDMA回路は前記制御回路を介さずに第2のメモリを制御することを特徴とする請求項1乃至7のいずれかに記載のメモリシステム。前記制御回路は、前記keyvalueストアに基づく要求に応じて前記第1のメモリに格納された前記テーブル領域の記憶容量を可変することを特徴とする請求項1乃至10のいずれかに記載のメモリシステム。前記制御回路は、バスを介して第1、第2のメモリに接続されたCPUであることを特徴とする請求項1乃至10のいずれかに記載のメモリシステム。前記制御回路が行う前記集合演算は、AND、OR、及びNOTのいずれかであることを特徴とする請求項1乃至12のいずれかに記載のメモリシステム。全文検索システム等で多発する集合演算に係るシステム負荷を著しく低減でき、さらに集合演算を高速に行うことが可能なメモリシステムを提供する。一実施態様のメモリシステムは、keyと前記keyに対応するvalueの組であるkeyvalue型データを含むkeyvalueストアを備えたメモリシステムにおいて、データを記憶するデータ領域と、前記keyvalue型データを含むテーブル領域とを格納する第1のメモリと、前記第1のメモリに対する、アドレス指定による書き込み及び読み出し、および前記keyvalueストアに基づく要求を実行する制御回路と、前記制御回路からの命令により前記keyvalue型データを格納する第2のメモリとを具備し、前記制御回路は、前記第1のメモリに格納された前記keyvalue型データと、前記第2のメモリに格納された前記keyvalue型データとを用いて集合演算を行うことを特徴とする。以下の説明において、同一の機能及び構成を有する構成要素については、同一符号を付し、重複説明は必要な場合にのみ行う。本実施形態に係る、集合演算が可能なメモリシステム検索メモリは、少なくとも1つのkeyvalueストア機能以下、KVSと記すを有するメモリを備えている。KVSとは、キーkeyと値valueの組を書き込み、キーを指定することで値を読み出せるデータベース管理方式のことを意味する。KVSでは、データはkeyとkeyに対応するvalueの組であるkeyvalue型データとして管理され、検索要求としてkeyが与えられると、それに対応付けられていたvalueを出力することが可能である。ここでは、このようなKVSを有するメモリを、以降、KVSメモリと記す。以下に、KVSメモリ及びその命令について詳しく説明する。KVSメモリは通常のメモリアクセスの命令に加え、少なくともGET、PUT、DELETEなどのKVS命令を備えたメモリであり、各命令の意味は次の通りである。1GET:要素が指定されなかった場合は、keyに対応するデータ集合を得る。要素が指定された場合は、データ集合の中にvalueが存在したらvalueそのもの、あるいはTRUEを返す。データ集合の中にvalueが存在しなかったら、空集合あるいはFALSEを返す。keyに対応するデータ集合が無い場合も、空集合あるいはFALSEを返す。2PUT:keyに対応するデータ集合に要素を追加する。要素がデータ集合中に既に存在する場合は何もしない。3DELETE:keyに対応するデータ集合から要素を削除する。要素がデータ集合中に存在しなければ何もしない。以下に、KVSメモリの具体的な構成例と動作例を示す。図1は、実施形態に用いられるKVSメモリの第1構成例を示す図である。図示するように、KVSメモリ14には、例えば、メモリコントローラ13及びハッシュ生成器16が接続されている。さらに、メモリコントローラ13には、上位システム100が接続されている。ハッシュ生成器16は、任意長のデータを固定長のビット列に変換する、いわゆるハッシュ関数の機能を持つ。上位システム100は、例えば、中央演算処理装置CPU及びメインメモリ等を備えたホストシステムである。KVSメモリ14には、例えばDRAM等の汎用メモリが用いられる。KVSメモリ14は、少なくともハッシュテーブル領域14Aと実データ領域14Bの2つの記憶領域に分けられる。これらの記憶領域は複数持つことができるが、ハッシュテーブル領域14Aのサイズは、ハッシュ生成器16が生成するハッシュ値が表現できるサイズよりも大きい。ハッシュテーブル領域14Aは、keyの実アドレスを記憶できる領域とvalueの実アドレスを記憶できる領域とに分けられる。ハッシュテーブル領域14Aの記憶容量は、固定されているわけではなく、keyvalueストアに基づく要求に応じて可変拡張あるいは縮小することができる。また、実データ領域14Bにはデータが記憶される。メモリコントローラ13は、上位システム100から受け取ったKVS命令を解釈し、KVSメモリ14及びハッシュ生成器16に対して、次に述べるような動作を行う。いま、animalというkeyがKVSメモリ14中にまだ存在しない場合を考える。ここで、PUT、PUTという命令をメモリコントローラ13が順に受け取ると、ハッシュ生成器16によって、animal、dog、catのそれぞれに対応するハッシュ値が生成される。これらが順に、158、98、188という固定長のビット列だったとする。ここで、ハッシュテーブル領域14A中のハッシュ値に対応するアドレスの内容が調べられ、animalというkeyが既にストアされているかどうかを調べる。ここではまだ存在していないため値が0なので、それぞれの実データを記憶するための領域が確保され、これらの先頭アドレスがハッシュテーブル領域14Aのkey領域に記憶される。確保された領域には、animal、dog、cat等の実データが記憶される。さらに、animalというkeyとデータ集合dogcatとを関連付けるため、実データ領域14Bに各要素用の領域を確保し、その先頭アドレスをハッシュテーブル領域14Aのanimalに相当するvalue領域に書き込む。そして、各要素の先頭アドレスを書き並べたもの10551090が実データ領域14B中に記憶される。これで、KVSメモリ14内にanimalというkeyに対応するデータ集合dogcatが作られたことになる。図1には、このときのKVSメモリ14内の状態が示されている。次に、GETという命令をメモリコントローラ13が受け取ったとすると、ハッシュテーブル領域14Aのanimalのハッシュ値であるアドレスに書かれたvalue領域の中身要素の実データの先頭アドレスから実データが読み出される。すなわちdogcatが上位システム100に出力される。もしここで、命令がGETである場合は、メモリコントローラ13は各要素を出力せずに、第二引数であるdogと一致する要素があったときだけ、dogまたはTRUEを上位システム100に出力する。また、命令がGETである場合は、一致する要素がないため、NULLまたはFALSEを上位システム100に出力する。さらに、DELETEという命令をメモリコントローラ13が受け取ると、animalに対応するデータ集合よりdogが削除される。具体的には、アドレスから始まる各要素が調べられ、dogを除いた残りが値として書き込まれる。あるいは、このとき、新たに実データ領域14B中に確保されたメモリ領域にdogを除いた要素を順に書き出して行き、最後にハッシュテーブル領域14Aのanimalのvalue領域を書き換え、元のアドレスを開放する、というやり方もある。なお、DELETEの際、dogの要素そのものがanimal以外の集合に属していない場合に、dogという要素が使用しているメモリを開放するガベージコレクションという動作が伴う場合がある。ここで、命令がGETである場合、catが上位システム100に返される。さらに、命令がDELETEである場合、ハッシュテーブル領域14A内のanimalのkey領域、value領域が開放され、animalというkeyに対応するデータ集合は無くなる。すなわち、命令がGETである場合、空集合が上位システム100に返される。また、KVSメモリの構成例としては上記のほかにもいくつかの実現方法がある。具体的には、図1に示した構成において、ハッシュテーブル領域14Aを連想メモリCAM:ContentAddressableMemoryを用いて構成する方法を以下に説明する。図2は、実施形態に用いられるKVSメモリの第2構成例を示す図である。本構成例は,KVSメモリとしてのCAM-RAM142と、上位システム100から入力されたKVS命令を解釈し、CAM-RAM142及び他のモジュールを制御するメモリコントローラ13とを備える。CAM-RAM142は、テーブル領域としてのCAM部142Aと、データ領域としてのRAM部142Bとを有する。RAM部142Bには、DRAMやNAND型フラッシュメモリなどの汎用メモリを用いることができる。連想メモリCAM部にはいくつか種類があるが、ここではCAM部142Aに、アドレスを介した通常の読み書きに加え、入力されたデータがCAM中に含まれていた場合に固定長のデータを返す種類のCAMを用いる。すなわち、CAM部142Aは、データの入力に対して、そのデータと全ての格納データとの一致不一致の比較演算を同時並列に行い、一致した格納データのvalueを出力する機能を持つ。CAM-RAMとは、コンテンツ連想メモリCAMでアドレスを出力させ、アドレス指定アクセスのRAMでデータを出力させるように組み合わせたシステムである。CAM-RAMでは、ハッシュ値を介さずに、keyとvalueを直接読み書きできるため、図1に示した構成例と比べてハッシュ生成器16が不要となる。次に、第2構成例でのKVS命令の動作について説明する。いま、animal、dog、catというkeyがCAM部142Aにまだ存在しない場合を考える。ここで、PUT、PUTという命令をメモリコントローラ13が順に受け取ると、keyがCAM部142Aに既にストアされているかどうかを調べる。ここではまだ存在していないため、それぞれのkeyをCAM部142Aにストアする。そして、CAM部中の各要素のvalueをRAM部142Bに記憶領域を確保して、集合としてストアする。さらに、この集合の先頭アドレスをCAM部142Aのkeyのvalueとしてストアする。このとき、前記の集合はCAM部中にストアすることもできるが、一般にCAMはRAMに比べてビットあたりのコストが高いため、上記のような実現方法を用いたほうがよい。図2には、このときのCAM-RAM142内の状態が示されている。次に、GETという命令をメモリコントローラ13が受け取ったとすると、CAM部142Aのanimalに対するvalueである1100をRAM部142Bのアドレスと読み替えたときに、集合10551090が読み出せ、さらに集合10551090をCAM部142Aのアドレスとして読み替えたkey領域、すなわちdogcatが上位システム100に出力される。もしここで、命令がGETである場合、メモリコントローラ13は各要素を出力せずに,第二引数であるdogと一致する要素があったときだけ、dogまたはTRUEを上位システム100に出力する。また、命令がGETである場合は、一致する要素がないため、NULLまたはFALSEを上位システム100に出力する。さらに、DELETEという命令をメモリコントローラ13が受け取ると,animalに対応するデータ集合よりdogが削除される.具体的には、アドレスから始まる各要素が調べられ、dogを除いた残りが値として書き込まれる。あるいは、このとき、新たにRAM部中に確保されたメモリ領域にdogを除いた要素を順に書き出して行き、最後にCAM部142Aのanimalのvalue領域を書き換え、元のアドレスを開放する、というやり方もある。なお、DELETEの際、dogの要素そのものがanimal以外の集合に属していない場合に、dogという要素が使用しているメモリを開放するガベージコレクションという動作が伴う場合がある。ここで、命令がGETである場合、catが上位システム100に返される。さらに、命令がDELETEである場合、CAM部142A内のanimalのkey領域、value領域が開放され、animalというkeyに対応するデータ集合は無くなる。すなわち、GETの場合、空集合が上位システム100に返される。[第1実施形態][1]ハードウェア構成まず、第1実施形態のメモリシステムのハードウェア構成について説明する。図3は、第1実施形態のメモリシステムのハードウェア構成を示すブロック図である。図示するように、メモリシステムは、CPU11、メインメモリ12、メモリコントローラ13、及びKVSメモリ14を備える。さらに、CPU11、メインメモリ12、及びメモリコントローラ13の間は、バス15にて接続されている。CPU11は、メインメモリ12、メモリコントローラ13、及びKVSメモリ14を制御し、後述する集合演算を行う。メモリコントローラ13は、KVSメモリ14及びその他のメモリ図示しないを制御する。メモリコントローラ13は、ダイレクトメモリアクセスDMA:DirectMemoryAccess機能を持つ回路を有する。DMA機能を用いれば、メモリコントローラ13とメインメモリ12との間のデータ転送を、CPU11を介さずに、直接制御することができる。KVSメモリ14は、図1または図2に示したようなデータ領域を格納している。KVSメモリ14の構成及び動作は、図1または図2を用いて説明した通りであり、その説明は省略する。また、図4はメインメモリ12におけるデータ領域の構成例を示す。CPU11とメインメモリ12は、keyvalueストアKVSを有するメモリを構成する。例えば、CPU11がハッシュ値を生成する機能を有する場合、図4に示すように、メインメモリ12はハッシュテーブル領域12Aと実データ領域12Bとを有する。また、メインメモリ12は、主記憶としてデータや命令コードを記憶する。[2]集合演算次に、第1実施形態のメモリシステムにおける集合演算について説明する。いま、KVSメモリ14中に、animaldogtunacatと、fishporgytunasalmonという2つのデータ集合がストアされていたとする。以下に、AND演算、OR演算、及びNOT演算の動作を述べる。1AND演算図5は、第1実施形態におけるAND演算の動作を示すフローチャートである。具体的な例として、animalANDfishという演算を行う場合の処理を示す。まず、CPU11はメモリコントローラ13を介してKVSメモリ14に対して、GETという命令を発行するステップS1。続いて、CPU11は、GETの命令に対して、KVSメモリ14から出力されたデータ集合を前述したKVS命令の動作と同様にハッシュ関数等をソフトウェア的に処理して、answer集合としてメインメモリ12に記憶させる。すなわち、CPU11はメインメモリ12に対して、PUT、PUT、PUTという命令を発行する。この結果、answerdogtunacatという集合がメインメモリ12に記憶されるステップS2。これにより、メインメモリ12はkeyvalue型データを有するメモリとして機能する。すなわち、メインメモリ12には、keyとしてのanswerとvalueとしてのdogtunacatのペアが記憶される。次に、CPU11は、メインメモリ12中のanswer集合の中の各要素が、KVSメモリ14内のfish集合の中に存在するかどうか調べる。最初は、CPU11がKVSメモリ14に対して、GETという命令を発行するステップS3。この返り値はFALSEであるため、CPU11はメインメモリ12中のanswer集合の中の要素dogを削除する。すなわち、CPU11はメインメモリ12に対して、DELETEの命令を発行するステップS4。続いて、CPU11は、メインメモリ12中のanswer集合の中の全ての要素の処理が終了したかを判定するステップS5。ここでは、answer集合の中の全ての要素の処理が終了していないため、ステップS3に戻り、ステップS3以降の処理を繰り返す。CPU11は、KVSメモリ14中のfish集合の中からtunaを探す。すなわち、CPU11はKVSメモリ14に対して、GETという命令を発行するステップS3。すると、この返り値はTRUEであるため、次に進む。catについても同様に、CPU11はKVSメモリ14中のfish集合の中からcatを探す。すなわち、CPU11はKVSメモリ14に対して、GETという命令を発行するステップS3。すると、この返り値はFALSEであるため、CPU11はメインメモリ12中のanswer集合の中の要素catを削除する。すなわち、CPU11はメインメモリ12に対して、DELETEの命令を発行するステップS4。ステップS5において、answer集合の中の全ての要素の処理が終了すると、結果として、メインメモリ12中のanswer集合はanswertunaとなり、AND演算の解となるステップS6。なお、answerと別の名前の解集合を用意すれば、同時に複数のAND演算を行うことも可能である。2OR演算図6は、第1実施形態におけるOR演算の動作を示すフローチャートである。具体的な例として、animalORfishという演算を行う場合の処理を示す。まず、CPU11はメモリコントローラ13を介してKVSメモリ14に対して、GETという命令を発行するステップS11。続いて、GETの命令に対して、KVSメモリ14から出力されたデータ集合を、CPU11はanswer集合としてメインメモリ12に記憶させる。すなわち、CPU11はメインメモリ12に対して、PUT、PUT、PUTという命令を発行する。この結果、answerdogtunacatという集合がメインメモリ12に記憶されるステップS12。これにより、メインメモリ12はkeyvalue型データを有するメモリとして機能する。すなわち、メインメモリ12には、keyとしてのanswerとvalueとしてのdogtunacatのペアが記憶される。次に、CPU11は、KVSメモリ14中のfish集合の中の各要素がメインメモリ12中のanswer集合の中に存在するかどうかを調べる。最初は、CPU11がメインメモリ12に対して、GETという命令を発行するステップS13。この返り値はFALSEであるため、CPU11はporgyをメインメモリ12中のanswer集合に入れる。すなわち、CPU11はメインメモリ12に対して、PUTの命令を発行するステップS14。続いて、CPU11は、KVSメモリ14中のfish集合の中の全ての要素の処理が終了したかを判定するステップS15。ここでは、fish集合の中の全ての要素の処理が終了していないため、ステップS13に戻り、ステップS13以降の処理を繰り返す。CPU11は、KVSメモリ14中のfish集合の中のtunaがメインメモリ12中のanswer集合の中に存在するかどうかを調べる。すなわち、CPU11はメインメモリ12に対して、GETという命令を発行するステップS13。すると、返り値はTRUEであるため、次に進む。salmonについても同様に、CPU11はfish集合の中のsalmonがメインメモリ12中のanswer集合の中に存在するかどうかを調べる。すなわち、CPU11はメインメモリ12に対して、GETという命令を発行するステップS15。すると、この返り値はFALSEであるため、CPU11はsalmonをメインメモリ12中のanswer集合に入れる。すなわち、CPU11はメインメモリ12に対して、PUTの命令を発行するステップS14。ステップS15において、fish集合の中の全ての要素の処理が終了すると、結果として、メインメモリ12中のanswer集合はanswerdogtunacatporgysalmonとなり、OR演算の解となるステップS16。なお、answerと別の名前の解集合を用意すれば、同時に複数のOR演算を行うことも可能である。3NOT演算図7は、第1実施形態におけるNOT演算の動作を示すフローチャートである。具体的な例として、animalNOTfishという演算を行う場合の処理を示す。まず、CPU11はメモリコントローラ13を介してKVSメモリ14に対して、GETという命令を発行するステップS21。続いて、GETの命令に対して、KVSメモリ14から出力されたデータ集合を、CPU11はanswer集合としてメインメモリ12に記憶させる。すなわち、CPU11はメインメモリ12に対して、PUT、PUT、PUTという命令を発行する。この結果、answerdogtunacatという集合がメインメモリ12に記憶されるステップS22。これにより、メインメモリ12はkeyvalue型データを有するメモリとして機能する。すなわち、メインメモリ12には、keyとしてのanswerとvalueとしてのdogtunacatのペアが記憶される。次に、CPU11は、KVSメモリ14中のfish集合の中の各要素を、メインメモリ12中のanswer集合から削除する。最初は、CPU11がメインメモリ12に対して、DELETEという命令を発行するステップS23。続いて、CPU11は、KVSメモリ14中のfish集合の中の全ての要素の処理が終了したかを判定するステップS24。ここでは、fish集合の中の全ての要素の処理が終了していないため、ステップS23に戻り、ステップS23以降の処理を繰り返す。CPU11は、KVSメモリ14中のfish集合の中のtunasalmonについても同様に、メインメモリ12中のanswer集合から削除するステップS23。ステップS24において、fish集合の中の全ての要素の処理が終了すると、結果として、メインメモリ12中のanswer集合はanswerdogcatとなり、NOT演算の解となるステップS25。なお、answerと別の名前の解集合を用意すれば、同時に複数のNOT演算を行うことも可能である。また、前述したCPU11が行っている作業は、メモリコントローラ13が有するダイレクトメモリアクセスDMA機能によりすべて実行することができる。CPU11が行っている作業を、メモリコントローラ13のDMA機能によって全て行うことにより、CPU11に負荷をかけることなく、前述の集合演算を行うことが可能である。[3]変形例1図8は、第1実施形態における変形例1のメモリシステムのハードウェア構成を示すブロック図である。図示するように、変形例1は、図3に示した第1実施形態のメモリシステムにおいて、ハッシュ生成器16を備える構成を有する。ハッシュ生成器16は、任意長のデータを固定長のビット列に変換する、いわゆるハッシュ関数の機能を持つ。ここでは、ハッシュ生成器16は、データの入力に対して、keyvalue型データが記憶されたアドレスを生成する。図8におけるKVSメモリ14は、図1に示したKVSメモリ14と同様な構成を有する。また、メインメモリ12は、図4に示したメインメモリ12と同様な構成を有する。したがってここでは、図8のKVSメモリ14及びメインメモリ12の詳細な構成及び動作の説明は省略する。変形例1における集合演算の動作は、第1実施形態における動作と同様である。変形例1では、ハッシュ生成器16を備えることにより、集合演算の実行時におけるCPU11の負荷を低減することができる。その他の構成及び効果は前述した第1実施形態と同様である。[4]変形例2図9は、第1実施形態における変形例2のメモリシステムのハードウェア構成を示すブロック図である。図示するように、変形例2は、図3に示した第1実施形態のメモリシステムにおいて、ハッシュ生成器16を備え、KVSメモリとしてDRAM141を用いている。さらに、メモリコントローラ13に接続されたメモリ装置としてNANDフラッシュメモリ17を備える。図9におけるDRAM141は、図1に示したKVSメモリ14と同様な構成を有する。また、メインメモリ12は、図4に示したメインメモリ12と同様な構成を有する。したがってここでは、図9のDRAM141及びメインメモリ12の詳細な構成及び動作の説明は省略する。変形例2では、第1実施形態におけるKVSメモリ14としてDRAM141が用いられており、変形例2における集合演算の動作は、第1実施形態における動作と同様である。さらに、ハッシュ生成器16を備えることにより、集合演算の実行時におけるCPU11の負荷を低減することができる。その他の構成及び効果は前述した第1実施形態と同様である。[5]変形例3図10は、第1実施形態における変形例3のメモリシステムのハードウェア構成を示すブロック図である。図示するように、変形例3は、図3に示した第1実施形態のメモリシステムにおいて、KVSメモリとしてCAM-RAM142を用いている。さらに、メモリコントローラ13に接続されたメモリ装置としてNANDフラッシュメモリ17を備える。図10におけるCAM-RAM142は、図2に示したCAM-RAM142と同様な構成を有する。また、メインメモリ12は、図4に示したメインメモリ12と同様な構成を有する。したがってここでは、図10のCAM-RAM142及びメインメモリ12の詳細な構成及び動作の説明は省略する。変形例3では、第1実施形態におけるKVSメモリ14としてCAM-RAM142が用いられており、変形例3における集合演算の動作は、第1実施形態における動作と同様である。さらに、CAM-RAM142を備えることにより、集合演算の実行時におけるCPU11の負荷を低減することができる。その他の構成及び効果は前述した第1実施形態と同様である。[第2実施形態][1]ハードウェア構成第2実施形態のメモリシステムのハードウェア構成について説明する。図11は、第2実施形態のメモリシステムのハードウェア構成を示すブロック図である。図示するように、メモリシステムは、CPU11、メインメモリ12、メモリコントローラ13、第1のKVSメモリ24、及び第2のKVSメモリ34を備える。さらに、CPU11、メインメモリ12、及びメモリコントローラ13の間は、バス15にて接続されている。CPU11は、メインメモリ12、メモリコントローラ13、及び第1、第2のKVSメモリ24、34を制御し、後述する集合演算を行う。メモリコントローラ13は、KVSメモリ24、34及びその他のメモリ図示しないを制御する。メモリコントローラ13は、ダイレクトメモリアクセスDMA:DirectMemoryAccess機能を持つ回路を有する。DMA機能を用いれば、メモリコントローラ13とメインメモリ12との間のデータ転送を、CPU11を介さずに、直接制御することができる。第1、第2のKVSメモリ24、34は、図1または図2に示したようなデータ領域を格納している。KVSメモリ24、34の構成及び動作は、図1または図2を用いて説明した通りであり、その説明は省略する。[2]集合演算次に、第2実施形態のメモリシステムにおける集合演算について説明する。第2実施形態における集合演算の動作は、前述した第1実施形態の集合演算の動作において、CPU11をメモリコントローラ13に置き換え、KVSメモリ14を第1のKVSメモリ24に、メインメモリ12を第2のKVSメモリ34にそれぞれ置き換えたものである。いま、第1のKVSメモリ24中に、animaldogtunacatと、fishporgytunasalmonという2つのデータ集合がストアされていたとする。以下に、図3~図5を参照してAND演算、OR演算、及びNOT演算の動作を述べる。1AND演算具体的な例として、animalANDfishという演算を行う場合の処理を示す。まず、メモリコントローラ13は第1のKVSメモリ24に対して、GETという命令を発行するステップS1。続いて、GETの命令に対して、第1のKVSメモリ24から出力されたデータ集合を、メモリコントローラ13はanswer集合として第2のKVSメモリ34に記憶させる。すなわち、answerdogtunacatという集合が第2のKVSメモリ34に記憶されるステップS2。次に、メモリコントローラ13は、第2のKVSメモリ34中のanswer集合の中の各要素が第1のKVSメモリ24内のfish集合の中に存在するかどうか調べる。最初は、メモリコントローラ13が第1のKVSメモリ24に対して、GETという命令を発行するステップS3。この返り値はFALSEであるため、メモリコントローラ13は第2のKVSメモリ34中のanswer集合の中の要素dogを削除するステップS4。続いて、メモリコントローラ13は、第2のKVSメモリ34中のanswer集合の中の全ての要素の処理が終了したかを判定するステップS5。ここでは、answer集合の中の全ての要素の処理が終了していないため、ステップS3に戻り、ステップS3以降の処理を繰り返す。メモリコントローラ13は、第1のKVSメモリ24中のfish集合の中からtunaを探す。すなわち、メモリコントローラ13は第1のKVSメモリ24に対して、GETという命令を発行するステップS3。すると、この返り値はTRUEであるため、次に進む。catについても同様に、メモリコントローラ13は第1のKVSメモリ24中のfish集合の中からcatを探す。すなわち、メモリコントローラ13は第1のKVSメモリ24に対して、GETという命令を発行するステップS3。すると、この返り値はFALSEであるため、メモリコントローラ13は第2のKVSメモリ34中のanswer集合の中の要素catを削除するステップS4。ステップS5において、answer集合の中の全ての要素の処理が終了すると、結果として、第2のKVSメモリ34中のanswer集合はanswertunaとなり、AND演算の解となるステップS6。2OR演算具体的な例として、animalORfishという演算を行う場合の処理を示す。まず、メモリコントローラ13は第1のKVSメモリ24に対して、GETという命令を発行するステップS11。続いて、GETの命令に対して、第1のKVSメモリ24から出力されたデータ集合を、メモリコントローラ13はanswer集合として第2のKVSメモリ34に記憶させる。すなわち、answerdogtunacatという集合が第2のKVSメモリ34に記憶されるステップS12。次に、メモリコントローラ13は、第1のKVSメモリ24中のfish集合の中の各要素が第2のKVSメモリ34中のanswer集合の中に存在するかどうかを調べる。最初は、メモリコントローラ13が第2のKVSメモリ34に対して、GETという命令を発行するステップS13。この返り値はFALSEであるため、メモリコントローラ13はporgyを第2のKVSメモリ34中のanswer集合に入れるステップS14。続いて、メモリコントローラ13は、第1のKVSメモリ24中のfish集合の中の全ての要素の処理が終了したかを判定するステップS15。ここでは、fish集合の中の全ての要素の処理が終了していないため、ステップS13に戻り、ステップS13以降の処理を繰り返す。メモリコントローラ13は、第1のKVSメモリ24中のfish集合の中のtunaが第2のKVSメモリ34中のanswer集合の中に存在するかどうかを調べる。すなわち、メモリコントローラ13は第2のKVSメモリ34に対して、GETという命令を発行するステップS13。すると、返り値はTRUEであるため、次に進む。salmonについても同様に、メモリコントローラ13はfish集合の中のsalmonが第2のKVSメモリ34中のanswer集合の中に存在するかどうかを調べる。すなわち、メモリコントローラ13は第2のKVSメモリ34に対して、GETという命令を発行するステップS15。すると、この返り値はFALSEであるため、メモリコントローラ13はsalmonを第2のKVSメモリ34中のanswer集合に入れるステップS14。ステップS15において、fish集合の中の全ての要素の処理が終了すると、結果として、第2のKVSメモリ34中のanswer集合はanswerdogtunacatporgysalmonとなり、OR演算の解となるステップS16。3NOT演算具体的な例として、animalNOTfishという演算を行う場合の処理を示す。まず、メモリコントローラ13は第1のKVSメモリ24に対して、GETという命令を発行するステップS21。続いて、GETの命令に対して、第1のKVSメモリ24から出力されたデータ集合を、メモリコントローラ13はanswer集合として第2のKVSメモリ34に記憶させる。すなわち、answerdogtunacatという集合が第2のKVSメモリ34に記憶されるステップS22。次に、メモリコントローラ13は、第1のKVSメモリ24中のfish集合の中の各要素を、第2のKVSメモリ34中のanswer集合から削除する。最初は、メモリコントローラ13が第2のKVSメモリ34に対して、DELETEという命令を発行するステップS23。続いて、メモリコントローラ13は、第1のKVSメモリ24中のfish集合の中の全ての要素の処理が終了したかを判定するステップS24。ここでは、fish集合の中の全ての要素の処理が終了していないため、ステップS23に戻り、ステップS23以降の処理を繰り返す。メモリコントローラ13は、第1のKVSメモリ24中のfish集合の中のtunasalmonについても同様に、第2のKVSメモリ34中のanswer集合から削除するステップS23。ステップS24において、fish集合の中の全ての要素の処理が終了すると、結果として、第2のKVSメモリ34中のanswer集合はanswerdogcatとなり、NOT演算の解となるステップS25。また、前述のメモリコントローラ13が行っている作業は、メモリコントローラ13が有するダイレクトメモリアクセスDMA機能によりすべて実行することができる。メモリコントローラ13が行っている作業を、メモリコントローラ13のDMA機能によって全て行うことにより、メモリコントローラ13に負荷をかけることなく、前述の集合演算を行うことが可能である。[3]変形例1図12は、第2実施形態における変形例1のメモリシステムのハードウェア構成を示すブロック図である。図示するように、変形例1は、図11に示した第2実施形態のメモリシステムにおいて、ハッシュ生成器16を備え、KVSメモリとしてDRAM241とCAM-RAM型のNANDフラッシュメモリ341を用いている。図12におけるDRAM241は、図1に示したKVSメモリ14と同様な構成を有する。また、CAM-RAM型のNANDフラッシュメモリ341は、図2に示したCAM-RAM142と同様な構成を有する。したがってここでは、図12のDRAM241及びCAM-RAM型のNANDフラッシュメモリ341の詳細な構成及び動作の説明は省略する。変形例1における集合演算の動作は、第2実施形態における動作と同様である。さらに、ハッシュ生成器16及びCAM-RAM型のNANDフラッシュメモリ341を備えることにより、集合演算の実行時におけるCPU11の負荷を低減することができる。その他の構成及び効果は前述した第2実施形態と同様である。[4]変形例2図13は、第2実施形態における変形例2のメモリシステムのハードウェア構成を示すブロック図である。図示するように、変形例2は、図11に示した第2実施形態のメモリシステムにおいて、KVSメモリとしてCAM-RAM242とCAM-RAM型のNANDフラッシュメモリ341を用いている。図13におけるCAM-RAM242とCAM-RAM型のメモリ341は、図2に示したCAM-RAM142と同様な構成を有する。したがってここでは、図12のCAM-RAM242とCAM-RAM型のメモリ341の詳細な構成及び動作の説明は省略する。変形例2における集合演算の動作は、第2実施形態における動作と同様である。さらに、CAM-RAM242及びCAM-RAM型のNANDフラッシュメモリ341を備えることにより、集合演算の実行時におけるCPU11の負荷を低減することができる。その他の構成及び効果は前述した第2実施形態と同様である。実施形態によれば、全文検索システム等で多発する集合演算に係るシステム負荷を著しく低減し、さらに高速に集合演算を行うことが可能なメモリシステムを提供できる。本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。"