(57)【特許請求の範囲】
【請求項１】
コマンドを受け付けるインターフェースと、
受け付けたコマンドを基に特定された検索条件に適合するデータを、実体としてのデータベースである通常データベースから探し、見つかったデータへのアドレスポインタの一覧である仮想データベースを生成し、生成した仮想データベースを保存するコントローラとを有し、
前記コントローラは、前記受け付けたコマンドを基に仮想データベース容量上限が特定された場合、
生成された仮想データベースの容量がその上限を超えていれば、生成された仮想データベースを、前記通常データベースが保存されている記憶デバイスに保存せず、
生成された仮想データベースの容量がその上限以下であれば、生成された仮想データベースを、前記通常データベースが保存されている記憶デバイスに保存する、
データベース検索システム。
【請求項２】
前記コントローラは、前記受け付けたコマンドを基に特定された読出し元が仮想データベースの場合、又は、前記特定された検索条件に適合するデータを探した結果を含んだ仮想データベースが有る場合、読出し元として特定された仮想データベース内のアドレスポインタを用いてアクセスされたデータが、前記特定された検索条件に適合するか否かを判断する、
請求項１記載のデータベース検索システム。
【請求項３】
前記インターフェースは、ホストシステムからコマンドを受け付け、
前記通常データベースが格納されている不揮発性半導体メモリを更に有し、前記コントローラが、読出し元として特定された仮想データベース内のアドレスポインタを用いたデータアクセスとして前記不揮発性半導体メモリにアクセスするようになっているストレージである、請求項２記載のデータベース検索システム。
【請求項４】
前記コントローラは、前記受け付けたコマンドを基に特定された読出し元が通常データベースの場合、又は、前記特定された検索条件に適合するデータを探した結果を含んだ仮想データベースが無い場合、前記特定された検索条件に適合するデータを、読出し元として特定された通常データベースから探す、
請求項３記載のデータベース検索システム。
【請求項５】
前記コントローラは、前記受け付けたコマンドを基に特定された書込み先が仮想データベースを表している場合、又は、前記特定された検索条件に適合するデータを探した結果を含んだ仮想データベースが無い場合、見つかったデータへのアドレスポインタの一覧である前記仮想データベースを生成する、
請求項１記載のデータベース検索システム。
【請求項６】
前記コマンドでは、読出し元として通常データベース及び仮想データベースのうちのいずれかが指定されており、
前記コントローラは、
前記コマンドにおいて指定されている読出し元が通常データベースであれば、そのコマンドで指定された検索条件に適合するデータの検索対象としての通常データベースを選択し、
前記コマンドにおいて指定されている読出し元が仮想データベースであれば、そのコマンドで指定された検索条件に適合するデータの検索対象としての仮想データベースを選択する、
請求項１記載のデータベース検索システム。
【請求項７】
前記コマンドにおいて指定された検索条件は、複数の条件を含む、
請求項６記載のデータベース検索システム。
【請求項８】
前記生成された仮想データベースのフォーマットは、２以上の仮想ＤＢ割当てモードのうちの指定された仮想ＤＢ割当てモードに従うフォーマットであり、
前記２以上の仮想ＤＢ割当てモードは、以下の（Ｘ）乃至（Ｚ）、
（Ｘ）仮想データベースが保持するアドレスポインタそれ自体を保存するモードである直接アドレスモード、
（Ｙ）アドレスポインタの並びである仮想データベースにおいて隣り合うアドレスポインタ間の差分値を用いて圧縮された仮想データベースを保存するモードである直接アドレス圧縮モード、
（Ｚ）仮想データベースにおけるアドレスポインタ毎にそのアドレスポインタを構成する複数のブロックにそれぞれ対応した複数のビットで構成されたビットマップを保存するモードであるビットマップモード、
のうちの２以上の仮想ＤＢ割当てモードである、
請求項１記載のデータベース検索システム。
【請求項９】
前記コントローラは、少なくとも１つの仮想データベースを含んだ複数のデータベースを入力とした論理演算を実行する、
請求項１記載のデータベース検索システム。
【請求項１０】
前記複数のデータベースは、複数の仮想データベースであり、
前記論理演算は、前記複数の仮想データベースが有する複数のアドレスポインタを入力とした論理演算である、
請求項９記載のデータベース検索システム。
【請求項１１】
前記複数のデータベースは、少なくとも１つの仮想データベースと、少なくとも１つの通常データベースである、
請求項９記載のデータベース検索システム。
【請求項１２】
前記インターフェースは、ホストシステムからコマンドを受け付け、
前記コントローラは、前記生成した仮想データベースを前記ホストシステムに返送し、
前記インターフェースが、前記仮想データベースが有するアドレスポインタがアドレスとして指定されたリードコマンドを前記ホストシステムから受け付け、
前記コントローラが、受け付けたリードコマンドで指定されているアドレスポインタを用いて読み出されたデータを、前記ホストシステムに返す、
請求項１記載のデータベース検索システム。
【請求項１３】
コマンドを受け付け、
受け付けたコマンドを基に特定された検索条件に適合するデータを、実体としてのデータベースである通常データベースから探し、
見つかったデータへのアドレスポインタの一覧である仮想データベースを生成し、
生成した仮想データベースを保存し、
前記受け付けたコマンドを基に仮想データベース容量上限が特定された場合、
生成された仮想データベースの容量がその上限を超えていれば、生成された仮想データベースを、前記通常データベースが保存されている記憶デバイスに保存せず、
生成された仮想データベースの容量がその上限以下であれば、生成された仮想データベースを、前記通常データベースが保存されている記憶デバイスに保存する、
データベース検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データベース処理に関し、例えば、データベース検索に関する。
【背景技術】
【０００２】
例えば、ソーシャルメディアの広まりや、金融、流通及び通信などの各種業界におけるＩＴ活用により、収集及び蓄積されるデータ量は急速に増大している。これに伴い、大容量コンテンツや工場などに設置されたセンサから収集される膨大なデータを統合的に解析するビッグデータ解析がトレンドの１つとなっている。代表的なアプリケーションは、ソーシャルメディアデータ分析によるトレンド予測や、産業機器やＩＴから収集されたビッグデータの分析による機器故障予知や在庫管理などである。【０００３】
このようなビッグデータ解析を行うシステムは、一般に、解析を行うホストサーバと、解析対象データを保持するストレージとを有する。解析として、一般に、リレーショナルデータベースを用いたデータベース解析が用いられる。【０００４】
データベースは、一般に、スキーマ（又はラベル）と呼ばれる一般名を示す列と、インスタンスと呼ばれる実データを示す行からなる２次元のデータ配列で構成される。この２次元構造のデータベースに対し、クエリ言語を用いてデータベースの操作が行われる。データベース操作の１つにデータベース検索処理がある。例えば、スキーマが“価格”である列に対し、そのコンテンツ値が10,000以上の行を抽出するなどの検索を伴う処理などである。【０００５】
データベース検索処理の高速化のため、次の技術を採用することができる。例えば、データベースが格納されるストレージとして、ハードディスクを記憶メディアとするストレージ（例えば、ＨＤＤ（Hard Disk Drive）、又は、１以上のＨＤＤを有するストレージシステム）の代わりに、フラッシュメモリのような不揮発性半導体メモリを記憶メディアとするストレージ（例えば、ＳＳＤ（Solid State Drive）、又は、１以上のＳＳＤを有するストレージシステム）を用いることが考えられる。また、インメモリ型データベースと呼ばれる技術を採用することも考えられる。また、非特許文献１及び非特許文献２が示すように、ホストサーバが行うデータベース検索処理をストレージにオフロードすることで、データベース検索処理の高速化を図ることも考えられる。また、特許文献１が示すように、Hadoop（登録商標）の１機能であるMap-Reduction演算をストレージにオフロードすることも考えられる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】US8, 819, 335
【非特許文献】
【０００７】
【非特許文献１】“Fast, Energy Efficient Scan inside Flash Memory SSDs”, ADMS (2011)
【非特許文献２】Ibex: “An Intelligent Storage Engine with Support for Advantage SQL Offloading”, VLDB, Volume 7 Issue 11, July 2014
【発明の概要】
【発明が解決しようとする課題】
【０００８】
一般に、ビッグデータ解析では、まず、大容量のデータベースから意味のあるデータや価値の高いデータを検出し、検出した小容量のデータに対してデータマイニングやクラスタリングなどの解析処理を実施する。最初のデータ検出過程では、解析者が、キーワードの追加や閾値の設定などの検索条件を変更しながら、検出されるデータ（検索結果）が最終的に小容量になるまで試行を繰り返してデータ検索を行う。このような解析過程では、大容量のデータベースに対し、繰り返し検索処理が必要となる。そして、一連の検索過程では、データベース全容量に対する全検索を繰り返し実施する必要がある。全検索では、データベースの全ての行に対して検索を行う必要があり、処理量が非常に大きい。【０００９】
この課題を解決する方法として、一定量以下の検索結果（データベースから取得されたデータ）のみで構成されたスナップショットデータを新たなデータベースとして格納する方法が考えられる。なぜなら、以降の検索では、その新たな小容量のデータベースに対して検索することで、検索の処理量を削減でき、以って、検索時間を短縮できる。【００１０】
しかし、その方法によれば、オリジナルのデータベースに加えてそのオリジナルのデータベースの一部と重複した新たなデータベース（スナップショットデータ）を格納する記憶容量が必要になる。このため、ストレージの記憶容量を圧迫するという別の課題が生じる。ビッグデータ解析では、検索過程で生成されるスナップショットデータ自身のデータ容量も大容量であると考えられる。【００１１】
以上の課題は、いずれも、ビッグデータ解析のためのデータベース検索以外のデータベース検索においても存在し得る課題である。
【課題を解決するための手段】
【００１２】
データベース検索システムは、コマンドを受け付け、受け付けたコマンドを基に特定された検索条件に適合するデータを、実体としてのデータベースである通常データベースから探す。データベース検索システムは、見つかったデータへのアドレスポインタの一覧である仮想データベースを生成し、生成した仮想データベースを保存する。
【発明の効果】
【００１３】
検索結果のデータベース化により２回目以降の検索処理量を削減でき、且つ、検索結果をデータベース化しても追加されるデータ量を削減できる。
【図面の簡単な説明】
【００１４】
【図１】データベース検索システムの構成例を示す。
【図２】ＬＢＡとＰＢＡの関係の一例と、アドレス変換方法の一例とを示す。
【図３】データベースに含まれるテーブルの一例を示す。
【図４】検索指示クエリの一例を示す。
【図５】仮想ＤＢ割当てモードとアドレスポインタ一覧の格納フォーマットとの関係例を示す。
【図６】ＤＢ検索アクセラレータの構成例を示す。
【図７】ＤＢ検索アクセラレータ管理情報が含む構成要素の構成例を示す。
【図８】ＤＢ検索アクセラレータ管理情報の構成要素間の関係例を示す。
【図９】ＤＢポインタ制御部の構成例を示す。
【図１０】第１のデータバッファの構成例を示す。
【図１１】ＤＢ検索器の構成例を示す。
【図１２】第１のテーブル制御部の動作フローの一例を示す。
【図１３】第２のテーブル制御部の動作フローの一例を示す。
【図１４】ＤＢ操作アクセラレータの構成例を示す。
【図１５】アドレスポインタ生成器の構成例を示す。
【図１６】アドレスポインタ生成器の制御の一例を示す。
【図１７】ＤＢ操作コマンドの一例の概念を示す。
【図１８】ホストサーバからストレージへの基本的なＩＯコマンドの一例を示す。
【図１９】データベースの構造や状態を定義並びに取得するコマンドの一例を示す。
【図２０】データベースの検索に関するコマンドの一例を示す。
【図２１】仮想ＤＢの操作コマンドの一例を示す。
【発明を実施するための形態】
【００１５】
以下、図面を参照しながら、幾つかの実施形態を説明する。
【００１６】
以下の説明では、「×××管理テーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「×××管理テーブル」を「×××管理情報」と呼ぶことができる。また、以下の説明において、１つの管理テーブルは、２以上の管理テーブルに分割されてもよいし、２以上の管理テーブルの全部又は一部が１つの管理テーブルであってもよい。
【００１７】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号における共通符号を使用し（例えばアドレスポインタ一覧５８１）、同種の要素を区別して説明する場合は、参照符号を使用する（例えばアドレスポインタ一覧５８１Ａ、５８１Ｂ、…）ことがある。
【００１８】
また、以下の説明では、「データベース」が適宜「ＤＢ」と略記される。また、以下の説明では、管理情報としてのテーブルが「管理テーブル」と呼ばれ、ＤＢテーブル（ＤＢの構成要素としてのテーブル）が単に「テーブル」と呼ばれる。
【００１９】
また、以下の説明では、「ｂｂｂ部」（又はｂｂｂアクセラレータ）を主語として説明を行う場合があるが、これら機能部は、プロセッサによって実行されることで定められた処理をメモリ及び通信ポート（ネットワークＩ／Ｆ）を用いながら行うことができるため、プロセッサを主語とした説明としてもよい。プロセッサは、典型的には、マイクロプロセッサ（例えばＣＰＵ（Central Processing Unit））を含んでおり、更に、専用ハードウェア（例えばＡＳＩＣ（Application Specific Integrated Circuit）又はＦＰＧＡ（Field-Programmable GateArray））を含んでもよい。また、これら機能部を主語として開示された処理は、ストレージ又はホストサーバが行う処理としてもよい。また、これら機能部の一部又は全ては、専用ハードウェアによって実現されてもよい。また、各種機能部は、プログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各計算機にインストールされてもよい。また、各種機能部及びサーバは１つの計算機にインストールされ実行されても良いし、複数の計算機にインストールされ実行されても良い。プロセッサは、制御部の一例であり、処理の一部又は全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ（例えばＣＰＵ）と記憶部を含み、記憶部はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００２０】
また、以下の説明において、「記憶部」は、メモリを含んだ１以上の記憶デバイスでよい。例えば、記憶部は、主記憶デバイス（典型的には揮発性のメモリ）及び補助記憶デバイス（典型的には不揮発性の記憶デバイス）のうちの少なくとも主記憶デバイスでよい。
【００２１】
一実施形態を図面に基づいて説明する。
【００２２】
図１は、データベース検索システムの構成例を示す。
【００２３】
データベース検索システムは、ホストサーバ１００とストレージ２００とのうちの少なくとも１つを有する。ホストサーバ１００とストレージ２００間は、ホストバス１４０で接続する。ホストバス１４０に代えて、インターネット１２２やＬＡＮ（Local Area Network）のような通信ネットワークが採用されてよい。
【００２４】
ホストサーバ１００は、ホストシステムの一例であり、１以上の計算機でよい。ホストサーバ１００は、データベースソフトウェア１２０などのプログラムを記憶する記憶部（図示せず）と、データベースソフトウェア１２０などのプログラムを実行するＣＰＵ１１０と、ストレージ２００と接続するインターフェースであるストレージインターフェース１３０とを有する。データベースソフトウェア１２０は、記憶メディア（例えば磁気メディア）１２１や通信ネットワーク（例えばインターネット）１２２上のサーバから入力されてよい。ＣＰＵ１１０は、プロセッサの一例である。
【００２５】
ストレージ２００は、本実施形態では、１以上のフラッシュメモリチップ（ＦＭ）２４１を含んだフラッシュメモリ２４２を記憶メディアとする記憶デバイスである。ただし、記憶メディアとしては、フラッシュメモリ２４２に代えて又は加えて、他種の記憶メディア（例えば他の半導体メモリ）が採用されてよい。また、ストレージ２００は、複数の記憶デバイスを有するストレージシステムでもよい。複数の記憶デバイスにより、１以上のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループが構成されてもおい。ＲＡＩＤグループにおける各記憶デバイスは、ＨＤＤであってもよいし、フラッシュメモリ２４２を記憶メディアとする記憶デバイス（例えばＳＳＤ）であってもよい。
【００２６】
ストレージ２００は、ホストサーバ１００からコマンドを受け付けるホストインターフェース２０１と、ホストインターフェース２０１が受け付けた要求の処理において必要に応じてフラッシュメモリ２４２にＩＯアクセスするストレージコントローラ１０６とを有する。ストレージコントローラ１０６は、データベース検索システムのコントローラの一例である。ホストインターフェース２０１や、ストレージコントローラ１０６内の各構成要素は、ストレージ２００の内部バス２３０を介して通信可能に接続される。
【００２７】
ホストインターフェース２０１は、ホストバス１４０を介してホストサーバ１００と接続するインターフェースである。
【００２８】
ストレージコントローラ１０６の構成要素として、例えば、ストレージ２００の全体制御を行う組込みＣＰＵ２１０と、組込みＣＰＵ２１０のキャッシュメモリやローカルメモリとして使用されるＳＲＡＭ（Static Random Access Memory）２１１と、ストレージ２００を制御するためのファームウェアやホストサーバ１００から発行されるＩＯアクセスに対するアドレスやデータを一時格納するＤＲＡＭ（Dynamic Random Access Memory）２１３と、ＤＲＡＭ２１３を制御するＤＲＡＭコントローラ２１２と、ＦＭ２４１を制御するフラッシュコントローラ２４０と、ホストサーバ１００で実行するデータベース処理の一部（特にデータベース検索）を担当するＤＢ検索アクセラレータ２５０と、後述する仮想ＤＢ（仮想データベース）の操作を補助するＤＢ操作アクセラレータ３５０と、フラッシュメモリ２４２へのアクセス性能を向上するＩＯアクセラレータ２１４とがある。アクセラレータ２５０、３５０及び２１４のうちの少なくとも１つが、ハードウェアである。ＩＯアクセラレータ２１４は、組込みＣＰＵ２１０の処理の一部を補佐する機能を有し、フラッシュメモリ２４２に対するＩＯアクセス性能を向上するアクセラレータである。なお、本実施形態において、ＤＲＡＭ２１３は、ファームウェアやＩＯデータを保持するが、実際には、ストレージ２００を制御するための種々の情報を保持してよく、保持される情報は制限されないでよい。ＤＲＡＭ２１３及びＳＲＡＭ２１１のうちの少なくとも１つが、記憶部の一例である。また、ＤＲＡＭ２１３及びＳＲＡＭ２１１のうちの少なくとも１つに代えて又は加えて他種の記憶メディアが採用されてよく、記憶部は、他種の記憶メディアを含んでよい。組込みＣＰＵ２１０が、プロセッサの一例である。
【００２９】
１つのフラッシュコントローラ２４０には、複数のＦＭ２４１が接続される。複数のフラッシュコントローラ２４０が、並列に複数のＦＭ２４１にアクセスである。１つのフラッシュコントローラ２４０と複数のＦＭ２４１とが１つの組であり、これらの組が並列に配置されており、結果として、ＦＭ２４１はアレイ状に配置されている。これらアレイ状に配置されたＦＭ２４１に複数のフラッシュコントローラ２４０が並列にアクセスできるため、ストレージ２００全体としてのスループットが向上する。
【００３０】
ここで、ＦＭ２４１の特徴を説明する。ＦＭ２４１は、本実施形態ではＮＡＮＤ型のＦＭである。このため、ＦＭ２４１への書込みは、ページ（典型的にはキロバイトオーダ）単位で実施される。また、ＮＡＮＤ型のＦＭ２４１は、上書きができない記憶素子であり、故に、ブロック（典型的にはメガバイトオーダ）単位でデータ消去が行われ、その後に、そのブロック内のページへの書込みが可能となる。ＦＭ２４１は、複数のブロックを含み、各ブロックが、複数のページを含む。加えて、データ信頼性の観点から、ブロック内への書き込みは、シーケンシャルライトが用いられる。また、ストレージ２００に対する書込み単位は、例えばバイトからメガバイトのランダムライトが主体である。そこで、ホストサーバ１００が指定する論理アドレスと、ストレージ２００内の物理アドレス（ＦＭ２４１のページへの物理アドレス）との対応により、ＦＭ２４１への書込みは制御される。以下、論理アドレスの一例として、ＬＢＡ（Logical Block Address）が採用され、物理アドレスの一例として、ＰＢＡ（Physical Block Address）が採用される。
【００３１】
以上のように、本実施形態では、データベース処理のうちの一部（例えば検索処理）が、ストレージ２００にオフロードされている。しかし、そのような構成に限定する必要は無い。データベース処理の全てが、ホストサーバ１００によって行われてもよいし、ストレージ２００によって行われてもよい。前者の場合、ホストサーバ１００内のデータベースソフトウェア１２０が、データベース管理システム（ＤＢＭＳ）であり、検索指示クエリなどのクエリをクエリ発行元（例えば、図示しないクライアントシステム、又は、データベースソフトウェア１２０とは別のアプリケーションプログラム）から受け付け、そのクエリに従い、ＩＯ（Input/Output）要求（つまり、書込み要求又は読出し要求）を、ストレージ２００に発行してもよい。後者の場合、ストレージ２００内のＤＢＭＳが、検索指示クエリなどのクエリをクエリ発行元から受け付け、そのクエリに従い、フラッシュメモリ２４２に対するＩＯアクセスを行ってもよい。少なくともストレージ２００内でＤＢＭＳが実現される場合、ＤＢＭＳの少なくとも一部が、ＤＢ検索アクセラレータ２５０のようなハードウェアで実現されてもよい。
【００３２】
図２は、ＬＢＡとＰＢＡの関係の一例と、アドレス変換方法の一例とを示す。
【００３３】
メモリ配置イメージ２２１が示すように、ホストサーバ１００がアクセスするＬＢＡ空間２２２は、連続したＬＢＡの集合であり、ストレージ２００内のＰＢＡ空間２２３も、同様に、連続したＰＢＡの集合である。同一ＬＢＡが書込み先である異なるデータが、同一のＰＢＡ領域（ページ）に格納されることはなく、異なるＬＢＡには異なるＰＢＡが割り当てられる。従って、例えば、ＬＢＡ１にＰＢＡ４が割り当てられている場合、ＰＢＡ４が異なるＬＢＡ２には割り当てられない。これを認識するため、ＬＢＡ／ＰＢＡマッピング管理テーブル２２４が使用される。ＬＢＡ／ＰＢＡマッピング管理テーブル２２４は、ＬＢＡとＰＢＡの対応関係を表す管理テーブルであり、例えば、ＳＲＡＭ２１１に格納され、組込みＣＰＵ２１０により参照可能である。ＬＢＡ／ＰＢＡマッピング管理テーブル２２４を用いることで、ＬＢＡからＰＢＡへのアドレス変換を行うことができ、アドレス変換を経ることで、指定されたＬＢＡに対応する格納位置を認識することができる。ここで、ＬＢＡは連続しているため、実際には、マッピング管理テーブル２２４は、ＬＢＡとＰＢＡのペアを保持する必要は無く、ＰＢＡのみを保持すればよい。
【００３４】
次に、データベース処理の一例を、図３と図４を参照して説明する。
【００３５】
図３は、データベースに含まれるテーブルの一例を示す。
【００３６】
図３のように、データベースは水平方向を列とし、垂直方向を行とする２次元のデータ構造で構成する。最上段はスキーマと呼ばれ、各列のラベルを意味する。行方向は、各スキーマに対するコンテンツで、文字列や数値など、様々なデータ幅で定義できる。例えば、本例で言えば、“ｎａｍｅ”スキーマが“ＮＡＭＥ１”の“ｈｅｉｇｈｔ”スキーマのコンテンツ値は”１０”であることを示す。また、本データベースのテーブル名をＴＡＢＬＥ１という名前で定義する。なお、スキーマ名やスキーマ数、各スキーマのデータ幅及びテーブル名などのメタ情報は、汎用データベース言語のＳＱＬ（Structured Query Language）により予め定義される。また、各スキーマのデータ幅の定義により、１行あたりのデータ量は決定される。本実施形態では、この１行あたりのデータ量は２５６バイトとであるとする。
【００３７】
図４は、検索指示クエリの一例を示す。
【００３８】
本クエリは、汎用データベース言語のＳＱＬフォーマットである。１行目の文字列ＳＥＬＥＣＴは出力形式をを示し、ワイルドカード（＊）は、その行全体を示す。なお、ワイルドカードの代わりに、スキーマ名（例えば“ｄｉａｍｅｔｅｒ”）を指定した場合、そのスキーマに対する値が出力となる。２行目のＦＲＯＭ文字列は、テーブル名を示し、テーブル名がＴＡＢＬＥ１のデータベースを対象とすることを示す。３行目のＷＨＥＲＥ文字列は検索条件を示し、スキーマ名“ｓｈａｐｅ”が“球体”であるものを検索対象とする。また４行目の“ＡＮＤ”文字列は、３行目のＷＨＥＲＥの追加条件であり、スキーマ名“ｗｅｉｇｈｔ”が“数値９”よりも大きい行を検索対象とする。本検索指示クエリの実行結果では、図３に定義したデータベース：ＴＡＢＬＥ１では、“ｓｈａｐｅ”が“球体”であり、“ｗｅｉｇｈｔ”が“数値９”よりも大きい行である１行目のデータが出力となる。本実施形態のデータベース処理では、本検索指示クエリを対話的に複数回追加しながら、検索対象を絞っていくプロセスに関するものであり、ビッグデータ解析における、有効なデータの抽出を行うプロセスにて使用される。以下、本データベース検索例を対象として説明する。
【００３９】
次に、本実施形態において制御対象とされるコマンドに関し、図１８から図２０を用いて説明する。以下に示すコマンドは、ホストサーバ１００がストレージ２００に対して発行するコマンドで、ストレージ２００はコマンドに応じた処理を実行する。なお図中で使用するオペコードはコマンドの種類を示し、オペランドはそのコマンドに必要なパラメータを示し、戻り値は、そのコマンドに対するストレージ２００からの返送値を示す。なお、これらのコマンドは、ホストサーバ１００がストレージ２００に対し、全情報を送信する一般的なインターフェースを使用してもよいし、ＮＶＭｅ（Non-Volatile Memory express）規格で使用されるドアベルを用いたインターフェースのどちらを使用してもよい。ドアベルを使用したインターフェースでは、ホストサーバ１００がオペコードとオペランドの一部及びオペランドの主体が格納されたアドレスポインタを指示し、コマンドを受信したストレージ２００は、アドレスポインタが示すメモリ領域からデータを主体的に読み出すことで、オペランドを認識できる。同様に、戻り値に関しても、返送データの主体をホストサーバ１００に返送してもよいし、ストレージ２００内の格納領域に保持し、ドアベル・インターフェースでホストサーバ１００が読み出してもよい。また、図に示すコマンド種とオペランド、オペコード、戻り値は、本実施形態を説明するために最低限必要な情報のみを示し、これらの情報の拡張に関しては、制限を持たない。
【００４０】
図１８は、ホストサーバ１００からストレージ２００への基本的なＩＯコマンドの一例を示す。
【００４１】
メモリライト指示コマンドは、ホストサーバ１００からストレージ２００への通常ＩＯライトである。ホストサーバ１００はベースアドレスからライトデータ容量分のデータをストレージ２００に転送する。ストレージ２００は、内部のフラッシュメモリ２４２にそのデータを格納する。この時、組込みＣＰＵ２１０が、フラッシュメモリ２４２内の物理領域を確保し、確保した物理領域に書込み対象データを書込む。この時、図２を参照して説明したアドレス変換のため、ＬＢＡ／ＰＢＡマッピング管理テーブル２２４が更新される。
【００４２】
メモリリード指示コマンドは、ストレージ２００のデータをホストサーバ１００に返送する一般的なＩＯリードコマンドである。ベースアドレスからリードデータ容量分のデータが返送される。
【００４３】
トリム指示コマンドは、ベースアドレスからトリムデータ容量分のデータを無効化するコマンドである。フラッシュメモリ２４２を使用したストレージ２００では、論理容量よりも物理容量が大きくてよい。そこで、ストレージ２００のデータ使用量に伴い、ストレージ２００内の物理容量に空きを作るためのデフラグ処理が必要となる。ここで物理容量の空き容量が大きい場合、バックグラウンドで動作するデフラグ処理の自由度が高くなるため、性能は高い。本トリム指示コマンドは、積極的に空き容量を増加させるコマンドである。
【００４４】
残物理容量取得コマンドは、割当て可能な物理容量値及び連続的に割当て可能な空きの物理容量の最大値をホストサーバ１００に返送するためのコマンドである。ホストサーバ１００側のアプリケーションは、返送された値から、新たに割当て可能な物理容量を知ることができる。
【００４５】
なお、これらメモリライト指示、メモリリード指示及び残物理容量取得コマンドは、データ転送を伴うコマンドであり、本データ転送においても、ドアベルを使用したデータ転送が可能である。
【００４６】
図１９は、データベースの構造や状態を定義並びに取得するコマンドの一例を示す。
【００４７】
図１９に示すコマンド群は、ホストサーバ１００からストレージ２００への特殊コマンドとして定義される。
【００４８】
ＤＢフォーマット指示コマンドは、ＤＢテーブルのフォーマットを定義するコマンドである。例えば、図３で定義したＤＢテーブルは、スキーマ数５と各スキーマのデータ幅（スキーマ型）で定義できる。また、テーブル名はＴＡＢＬＥ１であるが、これをＤＢフォーマット識別番号（例えば“１”）として数値化し、関連付けすることにより、図３で定義したＴＡＢＬＥ１の構造を定義することができる。なお、スキーマ型の前後に存在する中括弧“｛”、“｝”は、複数のスキーマ数に対応するため、複数の値で構成する。また、これらの順序は、列方向と同じである。このＤＢフォーマットは、汎用データベースにて用いられるＳＱＬ言語における、ＣＥＲＡＴＥ文のフォーマットと同様である。
【００４９】
ＤＢポインタ指示コマンドは、先のＤＢフォーマット指示コマンドで定義した、ＤＢフォーマット認識番号が示すＤＢの実体領域を定義するコマンドを示し、物理的なベースアドレスとＤＢ行数を用い、ストレージ２００内にデータベース領域の実体領域を割当てるコマンドである。なお、本実体領域を関連付けるため、ＤＢ識別番号が付与される。
【００５０】
ＤＢフォーマット指示コマンド及びＤＢポインタ指示コマンドは、汎用データベース言語のＳＱＬで定義されるＤＢのフォーマットを表現するためのコマンドである。
【００５１】
仮想ＤＢ割当て指示コマンドは、ストレージ２００内に仮想ＤＢを割当てるコマンドである。オペランドに示すＤＢ識別番号は、割当てる仮想ＤＢを識別するための識別番号である。ＤＢフォーマット識別番号は、先のＤＢフォーマット指示コマンドで定義したＤＢフォーマットの構造の仮想ＤＢを割当てることを意味する。ベースアドレスは、仮想ＤＢを割当てる開始ＬＢＡを示す。ＤＢ行数は、その仮想ＤＢの行数を示す。ここで、「仮想ＤＢ」は、データベースのＤＢコンテンツ実体（例えばＤＢテーブル又はその一部を構成するデータの集合）ではなく、データベースのＤＢコンテンツ実体へのアドレスポインタの一覧である。アドレスポインタ一覧の表現方法（格納フォーマット）は複数存在し、後述する仮想ＤＢ割当てモードにより、アドレスポインタ一覧の格納フォーマットが一義的に決まる。
【００５２】
ＤＢ開放指示コマンドは、ＤＢ識別番号が示す仮想ＤＢの実体領域を開放するコマンドである。具体的には、ＤＢ開放指示コマンドは、仮想ＤＢに対するトリム指示コマンドと同様に、ベースアドレスとデータ容量の代わりに、ＤＢ識別番号が示す仮想ＤＢを無効化する。また、仮想ＤＢメタ情報取得コマンドは、ＤＢ識別番号が示す仮想ＤＢの状態などのメタ情報をホストサーバ１００に返送するコマンドである。
【００５３】
図２０は、データベースの検索に関するコマンドの一例を示す。
【００５４】
データベースの検索とは、例えば、図４で示したデータベースの検索例を意味する。図２０に示すコマンドは、例えば、ホストサーバ１００からストレージ２００へのコマンドでもよいし、ホストサーバ１００からのコマンドに基づきストレージ２００内部で生成されたコマンド（例えば組込みＣＰＵ２１０により生成されたコマンド）でもよい。
【００５５】
ＤＢ検索条件指示コマンドは、ＤＢ検索の条件を指示するコマンドである。図４の例では、列数２のデータが“球体”であり、列数５のデータが“９”よりも大きいなど、複数の検索条件を指定することができる。従って、検索条件列として、複数の検索条件はを指定を可能とする。また、本検索条件列を検索条件識別番号として関連付ける。
【００５６】
ＤＢ検索指示コマンドは、読出しＤＢ識別番号が示すＤＢに対し、検索条件識別番号が示す検索条件にて検索を行い、検索条件に合致したＤＢ行のアドレスポインタを、書込みＤＢ識別番号が示す仮想ＤＢに順次追記するコマンドである。本コマンドにより、ＤＢ検索にてヒットしたＤＢ行のみへのアドレスポインタ群を取得できる。ここで、読出しＤＢ識別番号が示すＤＢは、通常ＤＢと仮想ＤＢのいずれでもよい。「通常ＤＢ」とは、上述したデータベース（実体としてのデータベース）である。
【００５７】
ＤＢ検索指示コマンドの戻り値としてストレージ２００からホストサーバ１００に返送される情報は、ＤＢ検索結果の概要を示すメタ情報を含む。メタ情報は、ヒットしたＤＢ行数を含む。ホストサーバ１００は、本ヒットＤＢ行数により、ＤＢ検索結果のデータ容量を認識できる。ここで、仮想ＤＢ拡張モードが通常モードであり、且つ、検索結果を格納する仮想ＤＢが仮想ＤＢ割当て指示コマンドにより指定されたＤＢ行数よりも大きい場合、検索が終了し、メタ情報としてバッファオーバフローという状態が返送される。ホストサーバ１００は、このバッファオーバフロー状態を認知すると、本ＤＢ検索指示コマンドでは、検索条件が曖昧なため、十分に検索が終了していない事を認識できる。また、仮想ＤＢ拡張モードが拡張モードの場合、残物理容量以下においては検索が終了せず、ＤＢ識別番号が示す仮想ＤＢのＤＢ行数が更新される。
【００５８】
図５は、仮想ＤＢ割当てモードとアドレスポインタ一覧の格納フォーマットとの関係例を示す。
【００５９】
仮想ＤＢ割当てモードは３種類存在する。実施形態では、以下の３種類の仮想ＤＢ割当てモードのうちの少なくとも２種類の仮想ＤＢ割当てモードから選択可能でよい。仮想ＤＢ割当てモードは、検索コマンド３０３で指定されてもよいし（検索の都度に指定されてもよいし）、ストレージ２００に対してホストサーバ１００又は図示しない管理システムから、複数の検索処理に共通の仮想ＤＢ割当てモードとして、ユーザ（例えばホストサーバ１００又は管理システムのユーザ）から選択された仮想ＤＢ割当てモードが指定されてもよい。指定された仮想ＤＢ割当てモードの種類を表す情報が、ストレージコントローラ１０６の記憶部に保存され、その情報に従い、仮想ＤＢ（アドレスポインタ一覧５８１）の格納フォーマットが決定されてよい。
【００６０】
アドレスポインタ一覧５８１の格納フォーマットは、仮想ＤＢ割当てモードとしていずれのモードが指定されたかによって、参照符号５８１Ａ〜５８１Ｃに示す通り異なる。本実施形態の説明では、ストレージ２００内のフラッシュメモリ２４２の記憶容量（ＦＭ２４１の総記憶容量）を８ＴＢとし、データベースの各１行の容量を図３の説明にて示した通り、２５６Ｂとして説明する。
【００６１】
仮想ＤＢ割当てモードとして直接アドレスモードが指定された場合、アドレスポインタ一覧５８１Ａが採用される。直接アドレスモードでは、アドレスポインタ一覧５８１Ａは、８ＫＢのアドレスタグを保持する３０ビット幅の８ＫＢタグ部と、６ビット幅のオフセット部とで構成される。総記憶容量８ＴＢには、８ＫＢのデータは２３０個存在するため、３０ビット幅の８ＫＢタグ部で８ＫＢ単位のアドレス管理が可能である。また、８ＫＢ内には、２５６Ｂのデータが２５個存在するため、オフセットを６ビットとする。この３０ビット幅の８ＫＢタグ部と６ビット幅のオフセット部の計３６ビットのアドレスにより、２５６Ｂの行データが８ＴＢのフラッシュメモリ２４２のどの位置に存在するか管理できる。この様に、１行のデータに対し１つのアドレスを直接割当てることから、本モードは、本実施形態において「直接アドレスモード」と呼ばれる。
【００６２】
仮想ＤＢ割当てモードとして直接アドレス圧縮モードが指定された場合、アドレスポインタ一覧５８１Ｂが採用される。直接アドレス圧縮モードは、直接アドレスモードと基本的には同じである。ここで、アドレスポインタ一覧５８１Ｂにおいて、アドレスポインタが昇順若しくは降順で正規化されている場合、前後行のアドレスの差分は３６ビット幅のアドレスポインタよりも小さい。特に、アドレスポインタ一覧５８１Ｂ（仮想ＤＢ）が保持する総行数が大きい場合、この差分値の絶対値は値“０”に近づく。この様な値の変化の小さな数列、並びに、２進数で表現した場合の“０”と“１”のビット値ばらつきが大きい場合、そのデータの圧縮率は大きい。従って、本直接アドレス圧縮モードでは、仮想ＤＢの初期値と、以降の差分値を用いて仮想ＤＢを圧縮することにより、仮想ＤＢの容量を削減できる。
【００６３】
仮想ＤＢ割当てモードとしてビットマップモードが指定された場合、アドレスポインタ一覧５８１Ｃが採用される。ビットマップモードにおける８ＫＢタグ部は他のモードと同一である。一方、６ビット幅のオフセット部の代わりに３２ビット幅のビットマップ部を使用する。これは８ＫＢのデータに対し、２５６Ｂのデータは２５個、すなわち、３２個のデータで構成され、対象行が存在する場合は１をセットし、対象行が存在しない場合には０をセットする。例えば、２５６Ｂ幅のＤＢ行が３２個連続で仮想ＤＢとして管理する場合、１つの８ＫＢタグと３２ビットのビットマップ部で表現できる。直接アドレスモードでは３２×（３０＋６）の１１５２ビットの情報量が必要であるのに対し、本ビットマップモードでは１×（３０＋３２）の６２ビットの情報量で表現でき、データ量を０．０５３倍に圧縮できる。なお、直接アドレス圧縮モードでは、直接アドレスモードとビットマップモードの間のデータ量となる。
【００６４】
なお、ビットマップモードにおいても、特に８ＫＢタグ部分を圧縮することによりデータ容量を削減可能である。
【００６５】
図６は、ＤＢ検索アクセラレータ２５０の構成例を示す。
【００６６】
ＤＢ検索アクセラレータ２５０は、第１の内部バスインターフェース２５１と、ＤＢ検索アクセラレータ管理情報２５２と、ＤＢポインタ制御部２５３と、第１のデータバッファ２５６と、ＤＢ検索器２５７とを有する。
【００６７】
第１の内部バスインターフェース２５１が、内部バス２３０に接続される。第１の内部バスインターフェース２５１は、ＤＢ検索アクセラレータ２５０を起動及び実行するための処理内容が示された情報である。ＤＢポインタ制御部２５３は、データベースの位置情報を示す。第１のデータバッファ２５６は、データベースのデータ（以下、ＤＢソースデータ）の一部を格納する。ＤＢ検索器２５７は、第１のデータバッファ２５６に格納されたＤＢソースデータに対して、ＤＢ検索アクセラレータ管理情報２５２が出力する検索条件２５９を入力としたデータベース検索処理を行い、検索条件が成り立った場合に検索ヒット情報２６１をＤＢポインタ制御部２５３に出力する。
【００６８】
第１の内部バスインターフェース２５１に、ＤＢ検索アクセラレータ管理情報２５２と、ＤＢポインタ制御部２５３と、第１のデータバッファ２５６とが接続される。ＤＢ検索器２５７が、ＤＢ検索アクセラレータ管理情報２５２、ＤＢポインタ制御部２５３及び第１のデータバッファ２５６と通信可能である。
【００６９】
図７は、ＤＢ検索アクセラレータ管理情報２５２が含む構成要素の構成例を示す。
【００７０】
ＤＢ検索アクセラレータ管理情報２５２は、ＤＢフォーマット管理テーブル３００と、ＤＢ管理テーブル３０１と、検索条件管理テーブル３０２と、検索コマンド３０３とを含む。
【００７１】
ＤＢフォーマット管理テーブル３００は、ＤＢフォーマット指示コマンドにより設定され、ＤＢフォーマット識別番号毎に１エントリを有する表である。格納される情報は、スキーマ数とスキーマ型列である。スキーマ型列は、複数のスキーマに対応することから、列として値を保持する。
【００７２】
ＤＢ管理テーブル３０１は、ＤＢポインタ指示コマンド並びに仮想ＤＢ割当て指示コマンドにより設定され、ＤＢ識別番号毎に１エントリを有する表である。格納される情報は、ＤＢフォーマットを識別するためのＤＢフォーマット識別番号と、そのＤＢを格納するベースアドレスと、そのＤＢの行数であるＤＢ行数と、本ＤＢが通常ＤＢ（値０）か仮想ＤＢ（値１）かを示す仮想ＤＢと、仮想ＤＢの場合に有効な値とされる仮想ＤＢ割当てモードである。ＤＢフォーマット識別番号は、ＤＢフォーマット管理テーブル３００における行の番号を指す。ＤＢ管理テーブル３０１により、ストレージ２００内に定義される複数のデータベースの構造や格納場所を管理できる。
【００７３】
検索条件管理テーブル３０２は、ＤＢ検索条件指示コマンドにより設定され、検索条件識別番号毎に１エントリを有する表である。格納される情報は、検索条件列である。スキーマ型列は複数のスキーマに対応することから、本値は列として値を保持する。
【００７４】
検索コマンド３０３は、ＤＢ検索指示コマンド（図２０参照）により設定される。格納される情報は、検索対象のＤＢを示す読出しＤＢ識別番号３０４と、検索結果を格納するＤＢを示す書込みＤＢ識別番号３０５と、検索条件を示す検索条件識別番号３０６と、ＤＢ検索時に書込みＤＢ識別番号３０５が示す書込み先ＤＢの拡張方法を指示する仮想ＤＢ拡張モード３０７である。番号３０４及び３０５は、ＤＢ管理テーブル３０１における行の番号を指す。このため、例えば、番号３０４及び３０５は、いずれも、“１”を指している場合、通常ＤＢを対象とすることを意味しており、“３”又は“４”を指している場合、仮想ＤＢを対象とすることを意味している。番号３０６は、検索条件管理テーブル３０２における行の番号を指す。図７の例によれば、番号３０６は“２”であるが、これは、検索条件として、検索条件管理テーブル３０２における行２に記載されている条件が指定されていることを意味する。仮想ＤＢ拡張モード３０７として、例えば、仮想ＤＢ容量の上限（例えばアドレスポインタ数の上限）が指定されていた場合、生成された仮想ＤＢの容量（例えばアドレスポインタ数）がその上限以下であれば仮想ＤＢの生成が成功となり、生成された仮想ＤＢの容量がその上限を超えていれば仮想ＤＢの生成が失敗（エラー）となってよい。これにより、生成された仮想ＤＢの容量を所望の容量以下に制限することができる。ＤＢ検索指示コマンドを受信すると、ＤＢ検索シーケンスが起動される。
【００７５】
図８は、ＤＢ検索アクセラレータ管理情報２５２の構成要素間の関係例を示す。
【００７６】
ＤＢ検索アクセラレータ管理情報２５２は、上述したように、ＤＢフォーマット管理テーブル３００と、ＤＢ管理テーブル３０１と、検索条件管理テーブル３０２と、検索コマンド３０３とを含む。
【００７７】
ＤＢ検索アクセラレータ管理情報２５２の出力は、読出しＤＢ情報２５５ａと、書込みＤＢ情報２５５ｂと、ＤＢ操作向けＤＢ情報２５５ｃと、スキーマ情報３１１と、検索条件２５９である。読出しＤＢ情報２５５ａは、検索コマンド３０３内の読出しＤＢ識別番号３０４に対応したＤＢである読出しＤＢの情報、具体的には、その番号３０４をキーに特定された情報（ＤＢ管理テーブル３０１内の情報）である。書込みＤＢ情報２５５ｂは、検索コマンド３０３内の書込みＤＢ識別番号３０５に対応したＤＢである書込みＤＢの情報、具体的には、その番号３０５をキーに特定された情報（ＤＢ管理テーブル３０１内の情報）である。ＤＢ操作向けＤＢ情報２５５ｃは、ＤＢ管理テーブル３０１で定義されるＤＢを操作するための管理情報である。スキーマ情報３１１は、読出しＤＢ識別番号３０４をキーに特定されたＤＢフォーマット識別番号に対応する行（ＤＢフォーマット管理テーブル３００における行）内の情報、すなわち、スキーマ数及びスキーマ型列を表す情報である。検索条件２５９は、検索コマンド３０３内の検索条件識別番号３０６をキーに特定された行（検索条件管理テーブル３０２内の行）における検索条件を表す情報である。ＤＢ検索アクセラレータ管理情報２５２は、主たる機能はなく、その情報２５２からは、検索コマンド３０３内の各識別番号を基に特定された情報２５５ａ、２５５ｂ、２５５ｃ、３１１及び２５９が出力される。なお、読出しＤＢ及び書込みＤＢのいずれも、通常ＤＢ及び仮想ＤＢのいずれかに該当する。以下、通常ＤＢである読出しＤＢを「読出し通常ＤＢ」と言い、仮想ＤＢである読出しＤＢを「読出し仮想ＤＢ」と言い、読出し通常ＤＢ及び読出し仮想ＤＢを「読出しＤＢ」と総称できる。同様に、通常ＤＢである書込みＤＢを「書込み通常ＤＢ」と言い、仮想ＤＢである書込みＤＢを「書込み仮想ＤＢ」と言い、書込み通常ＤＢ及び書込み仮想ＤＢを「書込みＤＢ」と総称できる。
【００７８】
図９は、ＤＢポインタ制御部２５３の構成例を示す。
【００７９】
ＤＢポインタ制御部２５３の基本機能は、読出しＤＢからデータを読み出すための読出し要求を生成することの制御と、検索ヒットしたＤＢ行のアドレスポインタを書込み仮想ＤＢへ格納することの制御と、書込み仮想ＤＢをフラッシュメモリ２４２に格納することの制御とを行う。読出しＤＢに関する制御は、第１のテーブル制御部２７０が担い、書込みＤＢに関する制御は、第２のテーブル制御部２７４が担う。
【００８０】
第１のテーブル制御部２７０は、読出しＤＢ情報２５５ａを第１のテーブルエントリカウンタ２７１に入力し、読出しＤＢが格納されたベースアドレスを取得する。読出しＤＢが通常ＤＢの場合、第１のテーブル制御部２７０は、ベースアドレスを起点として第１のデータバッファ２５６分のデータ読出し要求を生成し、第１のセレクタ２７９を経由して第１の内部バスインターフェース２５１にバス要求２５４ａとして発行する。本バス要求２５４ａに対するデータが、第１のデータバッファ２５６経由で返送される。
【００８１】
一方、読出しＤＢが仮想ＤＢの場合、第１のテーブル制御部２７０は、ベースアドレスを起点として、まず、第１の仮想ＤＢポインタバッファ２７２容量分の仮想ＤＢのアドレスポインタ群をリードするバス要求を生成し、第１の内部バスインターフェース２５１にバス要求２５４ａとして発行する。本バス要求２５４ａに対するデータ２５４ｂは、第１の仮想ＤＢポインタバッファ２７２に格納される。なお、読出しＤＢ情報２５５ａ内の仮想ＤＢ割当てモードが直接アドレス圧縮モードの場合、伸張部２８０によりデータ２５４ｂが伸張され、伸張されたデータが、第１の仮想ＤＢポインタバッファ２７２に書き込まれる。その他の仮想ＤＢ割当てモードの場合、伸張は行われない。次に、第１の仮想ＤＢアドレス生成器２７３が、第１の仮想ＤＢポインタバッファ２７２に格納された仮想ＤＢ（アドレスポインタ）を用いて、仮想ＤＢの１行分のデータをリードするバス要求２５４ａを、第１のセレクタ２７９経由で、第１の内部バスインターフェース２５１に発行する。同様に、本バス要求２５４ａに対するデータが、第１のデータバッファ２５６経由で返送される。
【００８２】
この様に、読出しＤＢが通常ＤＢの場合と仮想ＤＢの場合において、それぞれ異なるアドレス生成が用いられるが、読出しＤＢのＤＢコンテンツ実体が第１のデータバッファ２５６に格納されるいう点では、両者は同一である。また、第１のテーブルエントリカウンタ２７１に、第１のデータバッファ２５６が生成する読出しＤＢ更新要求２６３が入力されると、再度、第１のデータバッファ２５６に対して後続のデータが読み込まれる。このため、新たに読出しＤＢのデータ若しくは仮想ＤＢのアドレスポインタ群をリードするためのバス要求２５４ａが発行される。以降、読出しＤＢが通常ＤＢと仮想ＤＢのいずれであるかに応じて、対応するＤＢ種類に対応した読出し方式に従うデータ読出しが順次繰り返えされる。なお、本実施形態の説明では、第１の仮想ＤＢポインタバッファ２７２は、シングルバッファ（１面）であるが、ダブルバッファなど複数バッファ（複数面）を使用した読出しＤＢ先読みを行う方式が採用されてもよい。
【００８３】
次に、第２のテーブル制御部２７４の動作を説明する。書込みＤＢ情報２５５ｂが第２のテーブルエントリカウンタ２７５に入力される。また、ＤＢ検索器２５７が出力した検索ヒット情報２６１がテーブル有効カウンタ２７６に入力される。検索ヒット情報２６１は、ＤＢ検索処理において、対象行（第１の仮想ＤＢポインタが示す読出しＤＢの行データ）がヒットしたことを示す情報である。このため、検索ヒット情報２６１が入力されたときに、第２のテーブル制御部２７４は、対象の読出しＤＢヒット行のアドレスポインタ情報２７８を、第２の仮想ＤＢポインタバッファ２７７に格納し、且つ、テーブル有効カウンタ２７６をインクリメントする。第２の仮想ＤＢポインタバッファ２７７の容量と第２の仮想ＤＢポインタバッファ２７７への書込み容量が同一となった場合、すなわち、テーブル有効カウンタ２７６が、第２の仮想ＤＢポインタバッファ２７７の容量まで達した場合、第２のテーブル制御部２７４は、第２のテーブルエントリカウンタ２７５が示すベースアドレス（書込み仮想ＤＢのベースアドレス）を起点に、第２の仮想ＤＢポインタバッファ２７７内のデータをフラッシュメモリ２４２に書き込むためのバス要求２５４ａを第１のセレクタ２７９経由で出力する。本バス要求２５４ａに従い、第２の仮想ＤＢポインタバッファ２７７に格納された仮想ＤＢ（アドレスポインタ一覧）が、フラッシュメモリ２４２に格納される。再度、第２の仮想ＤＢポインタバッファにデータが埋まった場合、先の格納アドレスの次の領域から、仮想ＤＢのアドレスポインタが順次格納される。このように、ＤＢ検索してヒットしたＤＢ行のアドレスポインタのみが、新たな仮想ＤＢとしてフラッシュメモリ２４２に格納される。なお、本実施形態において、第２の仮想ＤＢポインタバッファ２７７は、シングルバッファ（１面）であるが、ダブルバッファなどの複数バッファ（複数面）を使用したパイプライン書込み（フラッシュメモリ２４２への書込み）により、性能改善を図ることができる。
【００８４】
図１０は、第１のデータバッファ２５６の構成例を示す。
【００８５】
第１のデータバッファ２５６は、読出しＤＢのＤＢコンテンツ実体である内部バスデータ２６６を入力とするシンプルなＦＩＦＯ（First-In First-Out）構造のメモリ２６８と、そのメモリ２６８のリードポインタ制御を行うリードポインタ制御部２６９とを有する。メモリ２６８から読出しＤＢのＤＢ行データ２６５が出力され、そのデータ２６５が、ＤＢ検索器２５７に送信される。リードポインタ制御部２６９は、ＤＢ検索器２５７が出力する読出しＤＢの行データ取得要求２６２が入力されると、リードポインタ２６７を順次インクリメントし、本リードポインタ２６７を用いてメモリ２６８をリードし、且つ、読出しＤＢの行データ取得要求２６２をバイパスして、読出しＤＢ更新要求２６３をＤＢポインタ制御部２５３に対して出力する。このように、第１のデータバッファ２５６の制御方法は、シンプルなＦＩＦＯ制御のみである。
【００８６】
図１１は、ＤＢ検索器２５７の構成例を示す。
【００８７】
ＤＢ検索器２５７は、検索条件２５９に適合するデータを読出しＤＢから探す。ヒットした場合、ＤＢ検索器２５７は、その検索ヒット情報２６１を出力し、その情報２６１をＤＢポインタ制御部２５３に返送する。ＤＢ検索器２５７は、ＤＢ検索器２５７を制御するＤＢ検索制御部２９５と、読出しＤＢのＤＢ行データ２６５のデータシフト処理を行うバレルシフタ２９０と、バレルシフタ２９０の出力値であるシフトデータ２９１を入力とし検索ヒット情報２６１を出力するインテリジェント比較器２９２とを有する。インテリジェント比較器２９２は、図４に示した検索指示クエリのような、複数の検索条件を同時に検証可能な比較器である。この複雑な比較を行うために、ＤＢ検索制御部２９５は、検索条件２５９とスキーマ情報３１１を入力として、バレルシフタ２９０を制御するためのシフト制御２９３と、インテリジェント比較器２９２を制御するための比較制御２９４とを生成し、各構成要素を制御する。これらシフト制御２９３と比較制御２９４は組合せデコーディングにより生成できる。なお、読出しＤＢの各データ行は、読出しＤＢの行データ取得要求２６２の出力に伴い、読出しＤＢのＤＢ行データ２６５として順次提供される。
【００８８】
図１２は、第１のテーブル制御部２７０の動作フローの一例を示す。
【００８９】
Ｓ１００で、第１のテーブル制御部２７０は、検索コマンド３０３内の読出しＤＢ識別番号３０４が示す読出しＤＢ情報２５５ａを第１のテーブルエントリカウンタ２７１に格納する。読出しＤＢ情報２５５ａとは、読出しＤＢの格納されるベースアドレスやＤＢ行数などの基本情報であり、ＤＢ管理テーブル３０１から取得された情報である。
【００９０】
Ｓ１０１で、第１のテーブル制御部２７０が、対象とする検索コマンド３０３が示す読出しＤＢが、通常ＤＢか仮想ＤＢかを判断する。この判断結果に応じたＤＢリードモードが実行される。
【００９１】
通常モードの場合、Ｓ１０３で、第１のテーブル制御部２７０は、ＤＢリードモードとして通常リードモードを設定する。一方、仮想ＤＢモードの場合、Ｓ１０２で、第１のテーブル制御部２７０は、ＤＢリードモードとして仮想リードモードを設定する。
【００９２】
Ｓ１０４で、第１のテーブル制御部２７０は、設定されたＤＢリードモードに従い、第１のテーブル制御部２７０の読出しＤＢの参照方式に従い、その参照アドレスを第１の仮想ＤＢポインタバッファ２７２に格納する。Ｓ１０５で、第１のテーブル制御部２７０は、第１の仮想ＤＢポインタバッファ２７２に格納された読出しＤＢのアドレスに従ってバス要求２５４ａを発行し、最終的に読出しＤＢのＤＢコンテンツ実体を第１のデータバッファ２５６に格納する。Ｓ１０６で、第１のテーブル制御部２７０は、第１のデータバッファ２５６から１行分のＤＢ行データ２６５を読み出し、読み出したデータ２６５をＤＢ検索器２５７に送信する。第１のデータバッファ２５６から読み出した行データが、第１のデータバッファ２５６の容量に達するまで、Ｓ１０６が繰り返される（Ｓ１０７）。また、読出しＤＢの全行データが読み出されるまで、Ｓ１０４以降の処理が繰り返される（Ｓ１０８）。
【００９３】
図１３は、第２のテーブル制御部２７４の動作フローの一例を示す。
【００９４】
Ｓ１１０で、第２のテーブル制御部２７４は、第２のテーブルエントリカウンタ２７５と、テーブル有効カウンタ２７６と、第２の仮想ＤＢポインタバッファ２７７を初期化する。これは、検索処理前は、書込みＤＢには有効なデータが存在しないためである。なお、第２のテーブルエントリカウンタ２７５の初期化とは、書込みＤＢのベースアドレスを設定することである。
【００９５】
Ｓ１１１で、第２のテーブル制御部２７４は、全ての読出しＤＢから検索が終了したか否かを判断する。
【００９６】
Ｓ１１１の判断結果が否定の場合、Ｓ１１２で、第２のテーブル制御部２７４は、リードポインタ２６７をインクリメントする。Ｓ１１３で、第２のテーブル制御部２７４は、リードポインタ２６７に従い、読出しＤＢのＤＢ行データ２６５を取得し、そのデータ２６５をＤＢ検索器２５７に入力する。Ｓ１１４で、第２のテーブル制御部２７４は、読出しＤＢのＤＢ行データ２６５に対し、検索条件２５９にて比較を行う。検索にてヒットした場合、Ｓ１１５で、第２のテーブル制御部２７４は、ＤＢ管理テーブル３０１が示す書込みＤＢの仮想ＤＢ割当モードに従い、読出しＤＢの行データに対するアドレスポインタを第２の仮想ＤＢポインタバッファ２７７に格納する。Ｓ１１６で、第２のテーブル制御部２７４は、第２の仮想ＤＢポインタバッファ２７７に空きがあるか否かを判断する。空きが無い場合、Ｓ１１７で、第２のテーブル制御部２７４は、生成した第２の仮想ＤＢポインタバッファ２７７のアドレスポインタ列をフラッシュメモリ２４２に格納する。
【００９７】
Ｓ１１１の判断結果が肯定の場合（全検索が終了した場合）、Ｓ１１８で、第２のテーブル制御部２７４は、第２の仮想ＤＢポインタバッファ２７７に残った書込みＤＢのアドレスポインタをフラッシュメモリ２４２に格納する。Ｓ１１９で、第２のテーブル制御部２７４は、書込みＤＢのメタ情報を保持する。書込みＤＢのメタ情報とは、最終的に生成された書込みＤＢの行数を表す情報を含んだ情報である。
【００９８】
第２のテーブル制御部２７４は、本メタ情報をホストサーバ１００に返送できる。これにより、データベース検索処理が終了する。
【００９９】
本実施形態によれば、データ検索処理にて、データ検索結果が、仮想ＤＢに格納される。本実施形態では、通常ＤＢの１行のデータ容量が２５６バイトである。直接アドレスモードでは、同一のデータを３６ビットで表現可能である。このため、仮想ＤＢにおける１行のデータ容量は、通常ＤＢにおける１行のデータ容量の約５６分の１である。例えば、検索結果を新たなＤＢとして生成しそのＤＢ（検索結果）のデータ容量が通常ＤＢの２分の１まで削減された場合、約１１０分の１のデータ量のデータ増加に留まる。ビッグデータ解析においては、一般に、通常ＤＢのデータ量が非常に大きいため、ビッグデータ解析におけるＤＢ検索過程では、この検索結果自身も容量が大きく、ストレージの残容量を圧迫する。また、ＤＢ検索過程の途中データを新ＤＢ化しない場合、２度目の検索では、再度、ＤＢ全体の全検索が必要となり、処理量が非常に大きい。従って、本実施形態によれば、検索結果のＤＢ化により２回目以降の検索処理量を削減でき、且つ、検索結果をＤＢ化しても追加されるデータ量を削減できる。
【０１００】
なお、本実施形態によれば、仮想ＤＢにおけるアドレスポインタの並びは、検索シーケンスに従い昇順になる。
【０１０１】
また、２回目以降の検索処理では、検索範囲（検索対象）を、仮想ＤＢにすることができる。具体的には、ストレージ２００が、ＤＢ検索指示コマンドをホストサーバ１００から受けて、ＤＢ検索アクセラレータ２５０により、通常ＤＢのうちの、仮想ＤＢ（アドレスポインタ一覧）が指すデータにだけアクセスすればよい。このようなアクセスによれば、通常ＤＢが格納される記憶メディアに対してランダムリードアクセスが発生する。そして、本実施形態によれば、記憶メディアは、ランダムアクセスを高速に行うことができる記憶メディアの一種であるフラッシュメモリ２４２である。このため、仮想ＤＢを用いた検索を高速に行うことが期待できる。
【０１０２】
さて、次に、仮想ＤＢの操作方法に関して説明する。まず、仮想ＤＢを操作する仮想ＤＢ操作コマンドについて説明する。
【０１０３】
図２１は、ＤＢ操作コマンドの一例を示す。図１７は、ＤＢ操作コマンドの一例の概念を示す。なお、図１７の灰色領域は、灰色領域が示す仮想ＤＢが生成されることを意味する。
【０１０４】
仮想ＤＢ論理和コマンドは、読出しＤＢ識別番号１と読出しＤＢ識別番号２が示す２つの仮想ＤＢを論理和的にマージすることにより書込みＤＢ識別番号が示す仮想ＤＢを生成するコマンドである。このマージ方法は、２つの仮想ＤＢの各ＤＢ行アドレスポインタを読み出しながら、互いにアドレスポインタを監視して昇順に並ぶように組み合わせ、書込みＤＢ識別番号が示す新たな仮想ＤＢに結果が保存される。論理和の意味は、二つの仮想ＤＢに同一のＤＢ行コンテンツ（アドレスポインタ）が存在した場合、どちらか一方のＤＢ行コンテンツのみが格納される。結果として、同一ＤＢ行コンテンツが重複して格納されることを回避できる。なお本仮想ＤＢ論理和コマンドでは、読出しＤＢ識別番号１が示すＤＢと読出しＤＢ識別番号２が示すＤＢは、共に仮想ＤＢである。従って、本論理和的マージでは、ＤＢのＤＢコンテンツ実体をマージするのではなく、仮想ＤＢのアドレスポインタのみをマージするものである（図１７の参照符号５０２の行を参照）。
【０１０５】
ＤＢ除去コマンドは、読出しＤＢ識別番号２が示す仮想ＤＢ内のＤＢ行を、読出しＤＢ識別番号１が示すＤＢ内のＤＢ行から除去することにより書込みＤＢ識別番号が示す仮想ＤＢを生成するコマンドである。読出しＤＢ識別番号１が示すＤＢは、通常ＤＢと仮想ＤＢのいずれでもよい。また、読出しＤＢ識別番号２が示すＤＢ並びに書込みＤＢ識別番号が示すＤＢは、仮想ＤＢに限定する。読出しＤＢ識別番号１が示すＤＢが通常ＤＢの場合、通常ＤＢから仮想ＤＢ２を除いた領域のＤＢコンテンツが生成される（図１７の参照符号５００の行を参照）。主としてソースＤＢ１が主ＤＢであり、ソースＤＢ２がノイズＤＢであり、ノイズ除去のような操作が行われる。読出しＤＢ識別番号１が示すＤＢが仮想ＤＢの場合、先と同様に、ソースＤＢ２をノイズとし、ソースＤＢ１からノイズ除去として操作が行われる（図１７の参照符号５０１の行を参照）。以上のようなＤＢ除去コマンドの目的は、読出しＤＢ識別番号１が示すベースとなるＤＢから、読出しＤＢ識別番号２が示すノイズ的なＤＢを除去する場合に使用する。また、逆に、読出しＤＢ識別番号１が示すベースとなるＤＢから、上述したデータベース検索過程によって生成された仮想ＤＢ（読出しＤＢ識別番号２が示す仮想ＤＢ）を除去したＤＢを生成可能となる。前者はデータベース検索過程で生成された仮想ＤＢをノイズ的に扱うことで、本ＤＢ除去コマンドにより生成された新仮想ＤＢ自身が価値のあるＤＢデータと扱うことができる。後者は、データベース検索過程で生成された仮想ＤＢを価値の高いＤＢとして扱い、本ＤＢ除去コマンドにより生成された新仮想ＤＢを価値の低いデータとして、他の低コストなストレージ領域に移動させるなどの操作が可能となる。
【０１０６】
仮想ＤＢ実体化コマンドは、仮想ＤＢを実体化するコマンドである。上述したように、仮想ＤＢは、データベースのＤＢコンテンツ実体ではなく、ＤＢコンテンツ実体へのアドレスポインタの一覧である。そこで、読出しＤＢ識別番号が示す仮想ＤＢのアドレスポインタから、ＤＢコンテンツ実体を読み出し、書込みＤＢ識別番号が示すデータベースにそのＤＢコンテンツ実体を格納することで、新ＤＢを実体化できる。本実体化により、ホストサーバ１００は、あたかも通常のＤＢのごとく、仮想ＤＢを参照することができる。
【０１０７】
仮想ＤＢ実体読出しコマンドは、読出しＤＢ識別番号が示す仮想ＤＢに対し、そのアドレスポインタ群を使用して、そのＤＢコンテンツ実体をフラッシュメモリ２４２から読み込み、ホストサーバ１００に返送するコマンドである。基本的処理フローは、仮想ＤＢ実体化コマンドと同一で、最後のフラッシュメモリ２４２への書込みの代わりに、ホスト戻り先情報を使用して、ホストサーバ側にデータ転送することが行われる。
【０１０８】
ここで、本実施形態におけるストレージ２００の記憶メディアは、フラッシュメモリ２４２である。フラッシュメモリ２４２のランダムリード性能は、シーケンシャルリード性能とほぼ同等であり、また、ＨＤＤと比較して十分に高い。従って、ＤＢコンテンツ実体の格納されたアドレスポインタがランダムな仮想ＤＢの場合においても、仮想ＤＢ実体読出しコマンドによるデータ読出し性能は高い。
【０１０９】
図２１には詳細なコマンドを示していないが、図１７に示すように、本実施形態では、論理積（参照符号５０３）や排他的論理和（参照符号５０４）など、２つの仮想ＤＢを入力として、１つのＤＢを生成することも可能である。特に、ＤＢコンテンツ実体ではなく、ＤＢコンテンツ実体の配置されるアドレスポインタのみで構成する仮想ＤＢによるＤＢの操作を可能とし、ＤＢのスナップショット生成などにおいて、総ＤＢ容量の削減を実現できる。
【０１１０】
また、本実施形態では、説明を容易にするため、入力としてのＤＢは、ソースＤＢ１とソースＤＢ２の２つであるが、３以上ののＤＢが入力とされてもよい。
【０１１１】
図１４は、ＤＢ操作アクセラレータ３５０の構成例を示す。なお、本実施形態では、ＤＢ操作アクセラレータ３５０はＤＢ検索アクセラレータ２５０と異なる構成要素であるが、それらのアクセラレータ３５０及び２５０は、一体であってもよい。
【０１１２】
ＤＢ操作アクセラレータ３５０は、内部バス２３０に接続される構成要素の１つで、仮想ＤＢの操作に係るコマンドを制御する。ＤＢ操作アクセラレータ３５０は、第２の内部バスインターフェース３９９と、ＤＢ操作アクセラレータ管理情報３６０と、アドレスポインタ生成器３７０と、ＤＢ操作向けアドレス生成器３８０と、第２のデータバッファ３９０とを有する。各構成要素と第２の内部バスインターフェース３９９は、インターフェース３９１、３９２、３９３、３９４として通信を行う。
【０１１３】
第２の内部バスインターフェース３９９は、内部バス２３０とのインターフェースである。ＤＢ操作アクセラレータ管理情報３６０は、ＤＢ操作コマンドの情報を含む。アドレスポインタ生成器３７０は、仮想ＤＢが保持するＤＢ行のアドレスポインタに関する制御を行う。ＤＢ操作向けアドレス生成器３８０は、ＤＢ操作アクセラレータ３５０が内部バス２３０に対してアクセスするためのアドレスを生成する。第２のデータバッファ３９０は、仮想ＤＢが保持するアドレスポインタが示すＤＢコンテンツ実体を保持する。
【０１１４】
ＤＢ操作アクセラレータ３５０は、ＤＢ管理テーブル３０１で定義されるＤＢを操作する。このため、その管理情報であるＤＢ操作向けＤＢ情報２５５ｃが入力される。また、アドレスポインタ生成器３７０は、後述する第５の仮想ＤＢポインタバッファ４１６が保持する第６の仮想ＤＢアドレスポインタ３７１を出力し、ＤＢ操作向けアドレス生成器３８０に入力する。
【０１１５】
また、図２１に示した仮想ＤＢ操作コマンドは、３種のオペコードと２つの読出しＤＢ識別番号及び書込みＤＢ識別番号の３種のオペランドで表現できる。ＤＢ操作アクセラレータ管理情報３６０は、これらの情報を保持し、各ＤＢ識別番号が示すＤＢ管理情報を選択して制御を行う。
【０１１６】
図１５は、アドレスポインタ生成器３７０の構成例を示す。
【０１１７】
アドレスポインタ生成器３７０は、ベースアドレスカウンタ４００と、第３の仮想ＤＢポインタバッファ４０１と、第４の仮想ＤＢポインタバッファ４０２と、第２のセレクタ４０３と、第１の比較器４２０と、第３のセレクタ４０４と、レジスタ４０５と、第２の比較器４２１と、第５の仮想ＤＢポインタバッファ４１６とを有する。
【０１１８】
ベースアドレスカウンタ４００は、通常ＤＢのＤＢコンテンツ実体が格納されたアドレスを管理するカウンタである。ＤＢ除去コマンドにおいて、読出しＤＢ識別番号１が示すＤＢが通常ＤＢの場合に、その通常ＤＢのベースアドレスがベースアドレスカウンタ４００に設定される。ベースアドレスカウンタ４００は、図１６にて後述する指示に従ってインクリメントされ、順次、通常ＤＢのＤＢコンテンツ実体が格納された通常ＤＢアドレスポインタ４１０を生成する。第３の仮想ＤＢポインタバッファ４０１は、読出しＤＢ識別番号１が示すＤＢが仮想ＤＢの場合に、その仮想ＤＢが保持するアドレスポインタ群を保持するバッファである。第３の仮想ＤＢポインタバッファ４０１は、図１６にて後述する指示に従ってインクリメントされ、順次、第１のアドレスポインタ４１１を生成する。第４の仮想ＤＢポインタバッファ４０２は、読出しＤＢ識別番号２が示す仮想ＤＢが保持するアドレスポインタ群を保持するバッファである。第４の仮想ＤＢポインタバッファ４０２は、図１６にて後述する指示に従ってインクリメントされ、順次、第３の仮想ＤＢアドレスポインタ４１３を生成する。
【０１１９】
第２のセレクタ４０３は、通常ＤＢアドレスポインタ４１０と第１のアドレスポインタ４１１を選択し、第２の仮想ＤＢアドレスポインタ４１２を生成する。第３のセレクタ４０４は、第２の仮想ＤＢアドレスポインタ４１２と第３の仮想ＤＢアドレスポインタ４１３を選択し、第４の仮想ＤＢアドレスポインタ４１４を生成する。第４の仮想ＤＢアドレスポインタ４１４は、レジスタ４０５に保持され、第５の仮想ＤＢアドレスポインタ４１５が生成される。第５の仮想ＤＢアドレスポインタ４１５は、後述する指示に従い、第５の仮想ＤＢポインタバッファ４１６に格納される。第５の仮想ＤＢポインタバッファ４１６に格納されたアドレスポインタは、ＤＢ操作向けアドレス生成器３８０に対して出力される第６の仮想ＤＢアドレスポインタ３７１と、第２の内部バスインターフェース３９９とのインターフェース３９２である。
【０１２０】
第１の比較器４２０は、第２の仮想ＤＢアドレスポインタ４１２と第３の仮想ＤＢアドレスポインタ４１３を比較する。第２の比較器４２１は、第４の仮想ＤＢアドレスポインタ４１４と第５の仮想ＤＢアドレスポインタ４１５を比較する。それぞれの比較結果は、後述する制御に使用される。
【０１２１】
図１６は、アドレスポインタ生成器３７０の制御の一例を示す。なお、本実施形態では、データベース検索過程で生成される仮想ＤＢのＤＢコンテンツ実体は、昇順に配置される。このため、本説明では、この昇順配置という特徴が利用される。
【０１２２】
本図は、仮想ＤＢ論理和コマンドとＤＢ除去コマンドにおいて、第１の比較器４２０と第２の比較器４２１の比較結果（入力条件）と、第３のセレクタ４０４、レジスタ４０５、ベースアドレスカウンタ４００、第３の仮想ＤＢポインタバッファ４０１、第４の仮想ＤＢポインタバッファ４０２及び第５の仮想ＤＢ４１６の制御方法との関係を示す。なお、第２のセレクタ４０３は、オペランドの１つである読出しＤＢ識別番号１が示すＤＢが通常ＤＢか仮想ＤＢかに応じた選択を実行するセレクタである。通常ＤＢに対する除去コマンドの場合のみ、通常ＤＢの通常ＤＢアドレスポインタ４１０が選択される。
【０１２３】
まず、除去コマンドにおいて、読出しＤＢ識別番号１が示すＤＢが通常ＤＢの場合の制御方法を説明する。除去コマンドによれば、読出しＤＢ識別番号１が示すＤＢから、読出しＤＢ識別番号２が示すＤＢを除去して、書込みＤＢ識別番号が示す仮想ＤＢを生成することが行われる。本説明では、読出しＤＢ識別番号１が示すＤＢをソースＤＢ１とし、読出しＤＢ識別番号２が示すＤＢをソースＤＢ２とし、書込みＤＢ識別番号が示すＤＢを書込みＤＢとして説明する。また、レジスタ４０５の無効化と有効化とは、レジスタ４０５が有効か無効かを示し、本レジスタ４０５が有効な場合のみ、第５の仮想ＤＢポインタバッファ４１６の書込み判断が行われる。
【０１２４】
第１の比較器４２０にて、第２の仮想ＤＢアドレスポインタ４１２が第３の仮想ＤＢアドレスポインタ４１３よりも大きい場合（Ｓ１２００）、ソースＤＢ１はソースＤＢ２の範囲外である。このため、レジスタ４０５が無効であり、第４の仮想ＤＢポインタバッファ４０２のリードポインタが更新される。結果として、ソースＤＢ２のアドレスポインタが先に進む。
【０１２５】
Ｓ１２００での処理が繰り返されることで、やがて、第２の仮想ＤＢアドレスポインタ４１２と第３の仮想ＤＢアドレスポインタ４１３が等しくなる。第２の仮想ＤＢアドレスポインタ４１２と第３の仮想ＤＢアドレスポインタ４１３が等しくなった場合（Ｓ１２０１）、除去コマンドでは、ソースＤＢ１のＤＢ行を書込みＤＢに格納する必要がない。このため、レジスタ４０５が無効であり、第３の仮想ＤＢポインタバッファ４０１と第４の仮想ＤＢポインタバッファ４０２のリードポインタが更新される。
【０１２６】
第２の仮想ＤＢアドレスポインタ４１２が第３の仮想ＤＢアドレスポインタ４１３よりも小さい場合（Ｓ１２０２）、ソースＤＢ１の対象行（第２の仮想ＤＢポインタ４１２が示すソースＤＢ１の行データ）を書込みＤＢに保持する必要がある。このため、第３のセレクタ４０４は、第２の仮想ＤＢアドレスポインタ４１２を選択し、レジスタ４０５が有効であり、ベースアドレスカウンタ４００が更新（インクリメント）される。レジスタ４０５は有効なため、レジスタ４０５内のポインタ４１５が、第５の仮想ＤＢポインタバッファ４１６の格納対象になる。なお、第２の比較器４２１は、重複したデータ行の格納を回避するため、第４の仮想ＤＢアドレスポインタ４１４と第５の仮想ＤＢアドレスポインタ４１５が等しくない時のみ、第５の仮想ＤＢアドレスポインタ４１５を格納し、合わせて、第４の仮想ＤＢアドレスポインタ４１４のライトポインタを更新する。
【０１２７】
以上のＳ１２００、Ｓ１２０１、Ｓ１２０２を繰り返すことで、除去が実行される。なお、ソースＤＢ１の読出しが終了した場合（第２の仮想ＤＢアドレスポインタの読出しが終了した場合）、処理が終了する。
【０１２８】
次に、除去コマンドにおいて、読出しＤＢ識別番号１が示すＤＢが仮想ＤＢの場合の制御方法を説明する。その制御方法は、読出しＤＢ識別番号１が示すＤＢが通常ＤＢの場合の制御方法と比較して、２つの違いを有する。１つの違いは、第２のセレクタ４０３が第１の仮想ＤＢアドレスポインタ４１１を選択することである。もう１つの違いは、ベースアドレスカウンタ４００の代わりに第３の仮想ＤＢポインタバッファ４０１のリードポインタを更新することである。本コマンドにより、仮想ＤＢに対しても除去を実行できる。
【０１２９】
次に、論理和コマンドの制御方法を示す。論理和コマンドでは、ソースＤＢ１とソースＤＢ２は共に仮想ＤＢである。第１の比較器４２０にて、第２の仮想ＤＢアドレスポインタ４１２が第３の仮想ＤＢアドレスポインタ４１３よりも大きい場合（Ｓ１２００）、第３のセレクタ４０４は、ソースＤＢ２であるを示す第３の仮想ＤＢアドレスポインタ４１３を選択し、レジスタ４０５が有効であり、第４の仮想ＤＢポインタバッファ４０２のリードポインタが更新される。また、第２の仮想ＤＢアドレスポインタ４１２と第３の仮想ＤＢアドレスポインタ４１３が等しくなった場合（Ｓ１２０１）と、第２の仮想ＤＢアドレスポインタ４１２が第３の仮想ＤＢアドレスポインタ４１３よりも小さい場合（Ｓ１２０２）のいずれの場合でも、第２の仮想ＤＢアドレスポインタ４１２が選択され、レジスタ４０５が有効化である。なお、ベースアドレスカウンタ４００、第３の仮想ＤＢポインタバッファ４０１、第４の仮想ＤＢポインタバッファ４０２のリードポインタの更新、並びに、第５の仮想ＤＢアドレスポインタ４１５のライトポインタの更新は、除去コマンドと同じである。
【０１３０】
また、ＤＢ実体化コマンドは、読出しＤＢ識別番号が示す仮想ＤＢのアドレスポインタ群を第５の仮想ＤＢポインタバッファ４１６に読み出し、次に、本アドレスポインタ群を用いて、ＤＢコンテンツ実体をフラッシュメモリ２４２から読み出し、第２のデータバッファ３９０に書き込む。最後に第２のデータバッファ３９０に格納されたＤＢコンテンツ実体を、書込みＤＢ識別番号が示す通常ＤＢに対し、そのベースアドレスを使用して書き込むことが実行される。
【０１３１】
なお、ＤＢ操作向けアドレス生成器３８０の制御の一例は、以下の通りである。
【０１３２】
コマンドが、仮想ＤＢ論理和コマンド、又は、ＤＢ除去コマンドの場合、ＤＢ操作向けアドレス生成器３８０は、読出しＤＢ識別番号１が示すソースＤＢ１（仮想）のアドレスポインタ群を、内部バス２３０から第３の仮想ＤＢポインタバッファ４０１に読み出す（なお、ソースＤＢ１が通常ＤＢの場合、このような読出しは不要である）。また、ＤＢ操作向けアドレス生成器３８０は、読出しＤＢ識別番号２が示すソースＤＢ２（仮想）のアドレスポインタ群を内部バス２３０から第３の仮想ＤＢポインタバッファ４０１に読み出す。また、ＤＢ操作向けアドレス生成器３８０は、書込みＤＢ識別番号が示す書込みＤＢのアドレスポインタ群を、書込みＤＢのベースアドレスを用いて、内部バス２３０経由でフラッシュメモリ２４２に書き込む。
【０１３３】
コマンドが、仮想ＤＢ実体化コマンドの場合、ＤＢ操作向けアドレス生成器３８０は、読出しＤＢ識別番号１が示すソースＤＢ１（仮想）のアドレスポインタ群を、内部バス２３０から第５の仮想ＤＢポインタバッファ４１６に読み出す（なおソースＤＢ１が通常ＤＢの場合、このような読出しは不要である）。また、ＤＢ操作向けアドレス生成器３８０は、第５の仮想ＤＢポインタバッファ４１６に格納されたアドレスポインタ群を用い、そのＤＢコンテンツ実体を内部バス２３０経由で第２のデータバッファ３９０に読み出す。また、ＤＢ操作向けアドレス生成器３８０は、データバッファ３９０に格納されたＤＢコンテンツ実体を、書込みＤＢ識別番号が示す書込みＤＢのベースアドレスを用いて、内部バス２３０経由でフラッシュメモリ２４２に書き込む。
【０１３４】
コマンドが、仮想ＤＢ実体読出しコマンドの場合、ＤＢ操作向けアドレス生成器３８０は、読出しＤＢ識別番号１が示すソースＤＢ１（仮想）のアドレスポインタ群を、内部バス２３０から第５の仮想ＤＢポインタバッファ４１６に読み出す（なおソースＤＢ１が通常ＤＢの場合は、このような読出しは不要である）。また、ＤＢ操作向けアドレス生成器３８０は、第５の仮想ＤＢポインタバッファ４１６に格納されたアドレスポインタ群を用い、そのＤＢコンテンツ実体を内部バス２３０経由で第２のデータバッファ３９０に読み出す。また、ＤＢ操作向けアドレス生成器３８０は、データバッファ３９０に格納されたＤＢコンテンツ実体を、ホスト戻り先情報を用いて、内部バス２３０経由でホストサーバ１００に返送する。
【０１３５】
以下、実施形態を総括する。なお、総括の説明において、適宜、実施形態の変形例等の新たな記載を追加することができる。
【０１３６】
ストレージ２００が、コマンドを受け付けるホストインターフェース２０１と、ストレージコントローラ１０６とを有する。ストレージコントローラ１０６が、受け付けたコマンドを基に特定された検索条件に適合するデータを、通常ＤＢ（実体としてのデータベース）から探し、見つかったデータへのアドレスポインタの一覧である仮想ＤＢを生成し、生成した仮想ＤＢを保存する。検索結果のＤＢ化により２回目以降の検索処理量を削減でき、且つ、検索結果をＤＢ化しても追加されるデータ量を削減できる。
【０１３７】
ストレージコントローラ１０６は、受け付けたコマンドを基に特定された読出し元が仮想ＤＢの場合、又は、特定された検索条件に適合するデータを探した結果を含んだ仮想ＤＢが有る場合、読出し元として特定された仮想ＤＢ内のアドレスポインタを用いてアクセスされたデータが、特定された検索条件に適合するか否かを判断する。このように、ストレージコントローラ１０６は、仮想ＤＢを検索対象（検索範囲）にすることができる。
【０１３８】
ストレージ２００が、通常ＤＢが格納されているフラッシュメモリ２４２を有している。ストレージコントローラ１０６が、読出し元として特定された仮想ＤＢ内のアドレスポインタを用いたデータアクセスとしてフラッシュメモリ２４２にアクセスするようになっている。仮想ＤＢを検索対象とした検索ではランダムリードが発生するが、通常ＤＢがフラッシュメモリ２４２のように高速なランダムリードが可能な記憶メディア（記憶デバイス）に存在するので、高速な検索が期待できる。
【０１３９】
ストレージコントローラ１０６は、受け付けたコマンドを基に特定された読出し元が通常ＤＢの場合、又は、特定された検索条件に適合するデータを探した結果を含んだ仮想ＤＢが無い場合、特定された検索条件に適合するデータを、読出し元として特定された通常ＤＢから探す。このように、ストレージコントローラ１０６は、コマンドの内容又は仮想ＤＢの有無に応じて、通常ＤＢを検索対象とすることができる。
【０１４０】
ストレージコントローラ１０６は、受け付けたコマンドを基に特定された書込み先が仮想ＤＢを表している場合、又は、前記特定された検索条件に適合するデータを探した結果を含んだ仮想ＤＢが無い場合、見つかったデータへのアドレスポインタの一覧である前記仮想ＤＢを生成する。このように、ストレージコントローラ１０６は、コマンドの内容又は仮想ＤＢの有無に応じて、仮想ＤＢを生成するか否かを制御できる。
【０１４１】
ストレージコントローラ１０６は、受け付けたコマンドを基に仮想ＤＢ容量上限が特定された場合、生成された仮想ＤＢの容量がその上限を超えていれば、生成された仮想ＤＢを、通常ＤＢが保存されているフラッシュメモリ２４２に保存せず、生成された仮想ＤＢの容量がその上限以下であれば、生成された仮想ＤＢを、通常ＤＢが保存されているフラッシュメモリ２４２に保存する。このように、仮想ＤＢの容量が上限を超えていれば仮想ＤＢがフラッシュメモリ２４２に保存されないので、フラッシュメモリ２４２の大きな容量圧迫を回避できる。
【０１４２】
コマンドでは、読出し元として通常ＤＢ及び仮想ＤＢのうちのいずれかが指定されている。ストレージコントローラ１０６は、コマンドにおいて指定されている読出し元が通常ＤＢであれば、そのコマンドで指定された検索条件に適合するデータの検索対象としての通常ＤＢを選択する。ストレージコントローラ１０６は、コマンドにおいて指定されている読出し元が仮想ＤＢであれば、そのコマンドで指定された検索条件に適合するデータの検索対象としての仮想ＤＢを選択する。このように、コマンドを通じて、ストレージ２００は、検索対象を通常ＤＢとするか仮想ＤＢとするかを受け付けることができる。
【０１４３】
コマンドにおいて指定された検索条件は、複数の条件を含む。つまり、同時に複数の条件を検索条件として指定できる。
【０１４４】
生成された仮想ＤＢのフォーマットは、２以上の仮想ＤＢ割当てモードのうちの指定された仮想ＤＢ割当てモードに従うフォーマットである。２以上の仮想ＤＢ割当てモードは、以下の（Ｘ）乃至（Ｚ）、
（Ｘ）仮想ＤＢが保持するアドレスポインタそれ自体を保存するモードである直接アドレスモード、
（Ｙ）アドレスポインタの並びである仮想ＤＢにおいて隣り合うアドレスポインタ間の差分値を用いて圧縮された仮想ＤＢを保存するモードである直接アドレス圧縮モード、
（Ｚ）仮想ＤＢにおけるアドレスポインタ毎にそのアドレスポインタを構成する複数のブロックにそれぞれ対応した複数のビットで構成されたビットマップを保存するモードであるビットマップモード、
のうちの２以上の仮想ＤＢ割当てモードである。このように、仮想ＤＢの容量の大きさや、仮想ＤＢの生成の負荷の観点から、仮想ＤＢのフォーマットを選択することができる。
【０１４５】
ストレージコントローラ１０６は、少なくとも１つの仮想ＤＢを含んだ複数のＤＢを入力とした論理演算を実行する。論理演算としては、上述したように、論理和、論理積、除去等がある。これにより、異なる複数の検索条件に対応した新たなＤＢであって重複データが排除された新たなＤＢ等を作成することができる。
【０１４６】
複数のＤＢは、複数の仮想ＤＢである。論理演算は、複数の仮想ＤＢが有する複数のアドレスポインタを入力とした論理演算である。これにより、複数の検索条件に対応した新たなＤＢを高速に作成することが期待される。
【０１４７】
複数のＤＢは、少なくとも１つの仮想ＤＢと、少なくとも１つの通常ＤＢである。通常ＤＢの少なくとも一部を用いて、複数の検索条件に対応した新たなＤＢを作成することができる。
【０１４８】
ストレージコントローラ１０６は、生成した仮想ＤＢをホストサーバ１００に返送する。ホストインターフェース２０１が、仮想ＤＢが有するアドレスポインタがアドレスとして指定されたリードコマンドをホストサーバ１００から受け付ける。ストレージコントローラ１０６が、受け付けたリードコマンドで指定されているアドレスポインタを用いて通常ＤＢ（フラッシュメモリ２４２）から読み出されたデータを、ホストサーバ１００に返す。このように、一旦仮想ＤＢが作成された場合、ホストサーバ１００からの通常のリードコマンドを受けても、検索結果と同様の結果を返すことができる。
【０１４９】
以上、一実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【０１５０】
例えば、生成された仮想ＤＢは、ストレージコントローラ１０６の記憶部に保存されてもよいし、フラッシュメモリ２４２に保存されてもよい。
【０１５１】
例えば、仮想ＤＢは、ＤＢコンテンツ実体ではなく、ＤＢコンテンツ実体が格納されたアドレスポインタのみで構成された仮想的なＤＢである。仮想ＤＢの一例は、図５を参照して説明したように、８ＫＢタグ部とオフセット部（若しくはビットマップ部でラベル化された２次元配列）で構成される。従って、仮想ＤＢが通常ＤＢとして定義されてよい。そこで、ホストサーバ１００は、仮想ＤＢを通常ＤＢとして割当て、ストレージ２００に対して、通常のＩＯコマンドを用いて仮想ＤＢにアクセスできる。また、仮想ＤＢ実体読出しコマンドを使用して、仮想ＤＢをホストサーバ１００に読み込み、アドレスポインタ群で構成される本仮想ＤＢ自身を、ホストサーバ１００にて通常処理のように操作することができる。従って、通常ＩＯコマンドと、ＤＢ検索コマンドと、ＤＢ操作コマンドを使用したデータベース検索プログラム（例えば、ホストサーバ１００で実行されるデータベースソフトウェア１２０）により、様々な組み合わせのデータベース処理が可能である。つまり、ホストサーバ１００も、仮想ＤＢを保存してよい。この場合、ホストサーバ１００（例えば、データベースソフトウェア１２０を実行するＣＰＵ１１０）が、仮想ＤＢを検索対象とする場合、その仮想ＤＢ（アドレスポインタ一覧）をアドレスとして指定したリードコマンドをストレージ２００に送信してよい。ストレージコントローラ１０６が、そのリードコマンドで指定されているアドレスポインタ一覧から取得されたデータを、ホストサーバ１００に返してよい。
【０１５２】
また、上述した実施形態によれば、ホストサーバ１００からのＤＢ検索指示コマンドに従い検索コマンド３０３が設定され、検索コマンド３０３に、検索条件及び読出しＤＢが指定される。従って、ストレージコントローラ１０６は、指定された検索条件に従うデータを、指定された読出しＤＢから探すことになる。指定された読出しＤＢが仮想ＤＢであれば、検索範囲は仮想ＤＢとなり、指定された読出しＤＢが通常ＤＢであれば、検索範囲は通常ＤＢ（全検索）となる。このような仕組みに代えて、例えば、検索条件毎に、その検索条件に対応した仮想ＤＢを生成済か否かと、生成済であれば仮想ＤＢへのポインタとの対応関係を表す情報を含んだ検索制御情報が、ストレージコントローラ１０６の記憶部に格納されてよい。ストレージコントローラ１０６は、検索条件が指定された場合、指定された検索条件に従う検索結果を含んだ仮想ＤＢが生成済か否かを、指定された検索条件を用いて検索制御情報を参照することにより判断してよい。その判断結果が肯定の場合、ストレージコントローラ１０６は、指定された検索条件を用いて特定された仮想ＤＢを検索範囲としてよい。一方、その判断結果が否定の場合、ストレージコントローラ１０６は、通常ＤＢを検索範囲としてよい。
【０１５３】
また、上述した実施形態によれば、ホストサーバ１００からのＤＢ検索指示コマンドに従い検索コマンド３０３が設定され、検索コマンド３０３に、書込みＤＢが指定される。書込みＤＢとして仮想ＤＢが指定されていれば、仮想ＤＢが生成され、書込みＤＢとして仮想ＤＢが指定されていなければ、仮想ＤＢは生成されない。それに代えて、例えば、書込みＤＢの指定は無くてもよい。そして、ストレージコントローラ１０６は、指定された検索条件に適合するデータを探す検索処理を行う都度に、その指定された検索条件の検索範囲となる仮想ＤＢが無ければ、常に、その指定された検索条件の検索結果としての仮想ＤＢを生成してもよい。
【０１５４】
また、例えば、アクセラレータ２５０、３５０及び２１４のうちの少なくとも１つが無くてもよい。アクセラレータ２５０、３５０及び２１４のうちの少なくとも１つが行う処理が、組込みＣＰＵ２１０によって行われてもよい。具体的には、例えば、ストレージコントローラ１０６が行う処理の全てが、コンピュータプログラムを実行するＣＰＵ２１０によって行われてもよい。この場合、アクセラレータ２５０、３５０及び２１４のうちの少なくとも１つが有する情報は、ストレージコントローラ１０６の記憶部（例えば、ＤＲＡＭ２１３及びＳＲＡＭ２１１のうちの少なくとも１つ）に格納されてよい。
【符号の説明】
【０１５５】
１００…ホストサーバ、２００…ストレージ
【図１】
0006507245.tif 000002
【図２】
0006507245.tif 000003
【図３】
0006507245.tif 000004
【図４】
0006507245.tif 000005
【図５】
0006507245.tif 000006
【図６】
0006507245.tif 000007
【図７】
0006507245.tif 000008
【図８】
0006507245.tif 000009
【図９】
0006507245.tif 000010
【図１０】
0006507245.tif 000011
【図１１】
0006507245.tif 000012
【図１２】
0006507245.tif 000013
【図１３】
0006507245.tif 000014
【図１４】
0006507245.tif 000015
【図１５】
0006507245.tif 000016
【図１６】
0006507245.tif 000017
【図１７】
0006507245.tif 000018
【図１８】
0006507245.tif 000019
【図１９】
0006507245.tif 000020
【図２０】
0006507245.tif 000021
【図２１】
0006507245.tif 000022