(57)【要約】      （修正有）【課題】データの検索速度を向上させる。【解決手段】情報処理装置は、プロセッサと複数の記憶デバイスとＦＰＧＡとを備え、複数の記憶デバイスは複数のセグメントデータを格納し、各セメントデータは当該セグメントデータの構成に関する構成情報を含み、ホスト計算機から検索対象のセグメントデータとデータベースに対する検索式とを受領し、ＦＰＧＡにおいて、検索対象のセグメントデータの構成情報をリードし、検索式を解析して検索で使用するカラムデータを特定し、リードした構成情報からその特定したカラムデータの検索対象のセグメントデータにおける格納位置を特定し、検索対象のセグメントデータが格納された記憶デバイスからその特定した検索対象で使用するカラムデータをリードして検索を実行し、その検索結果をホスト計算機へ返す。【選択図】図１
2017138892.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、複数の記憶デバイスと、プログラマブルロジックデバイスとを備え、
複数の記憶デバイスは、データベースの構成要素である複数のセグメントデータを格納し、
各セグメントデータは、当該セグメントデータの構成に関する構成情報を含み、
前記プロセッサは、
ホスト計算機から検索対象のセグメントデータとデータベースに対する検索式とが記述された検索コマンドを受領し、
その受領した検索コマンドを前記プログラマブルロジックデバイスに渡し、
前記プログラマブルロジックデバイスによる検索結果を前記ホスト計算機に返し、
前記プログラマブルロジックデバイスは、
検索対象のセグメントデータの構成情報をリードし、
前記検索式を解析して検索で使用するカラムデータを特定し、
前記リードした構成情報から、前記特定したカラムデータの検索対象のセグメントデータにおける格納位置を特定し、
検索対象のセグメントデータが格納された前記記憶デバイスから、前記特定した検索対象で使用するカラムデータをリードして検索を実行する
情報処理装置。
【請求項２】
前記データベースは、カラムストアデータベースであり、
前記セグメントデータに含まれるカラムデータは、前記カラムストアデータベースを構成するカラムデータの少なくとも一部である
請求項１に記載の情報処理装置。
【請求項３】
前記セグメントデータは、当該セグメントデータに含まれるカラムデータの解読のための辞書情報をさらに含み、
前記プログラマブルロジックデバイスは、複数の記憶デバイスから構成情報及び辞書情報をリードする
請求項２に記載の情報処理装置。
【請求項４】
前記プログラマブルロジックデバイスは、複数の記憶デバイスから構成情報及び辞書情報をリードする処理と、前記検索式を解析する処理と、を並列に実行する
請求項３に記載の情報処理装置。
【請求項５】
前記セグメントデータ内において、構成情報と辞書情報とが連続して配置されている
請求項３に記載の情報処理装置。
【請求項６】
前記プログラマブルロジックデバイスは、記憶デバイスから構成情報及び辞書情報をまとめてリードする
請求項５に記載の情報処理装置。
【請求項７】
前記構成情報は、前記セグメントデータ内における各カラムデータの位置と、各カラムデータのページ数と、各カラムデータの圧縮形式と、を含む
請求項３に記載の情報処理装置。
【請求項８】
前記プログラマブルロジックデバイスは内部メモリを有し、
前記プログラマブルロジックデバイスは、前記内部メモリに辞書情報をリードし、前記セグメントデータに含まれるカラムデータを解読する
請求項３に記載の情報処理装置。
【請求項９】
プロセッサと、プログラマブルロジックデバイスとを備え、
データベースの構成要素である複数のセグメントデータが複数の記憶デバイスに格納されており、
各セグメントデータは、当該セグメントデータの構成に関する構成情報を含み、
前記プロセッサは、
ホスト計算機から検索対象のセグメントデータとデータベースに対する検索式とが記述された検索コマンドを受領し、
その受領した検索コマンドを前記プログラマブルロジックデバイスに渡し、
前記プログラマブルロジックデバイスによる検索結果を前記ホスト計算機に返し、
前記プログラマブルロジックデバイスは、
検索対象のセグメントデータの構成情報をリードし、
前記検索式を解析して検索で使用するカラムデータを特定し、
前記リードした構成情報から、前記特定したカラムデータの検索対象のセグメントデータにおける格納位置を特定し、
検索対象のセグメントデータが格納された前記記憶デバイスから、前記特定した検索対象で使用するカラムデータをリードして検索を実行する
処理装置。
【請求項１０】
プロセッサと、プログラマブルロジックデバイスとを備える処理装置がデータを検索する方法であって、
データベースの構成要素である複数のセグメントデータが複数の記憶デバイスに格納されており、
各セグメントデータは、当該セグメントデータの構成に関する構成情報を含み、
前記プロセッサが、
ホスト計算機から検索対象のセグメントデータとデータベースに対する検索式とが記述された検索コマンドを受領し、
その受領した検索コマンドを前記プログラマブルロジックデバイスに渡し、
前記プログラマブルロジックデバイスによる検索結果を前記ホスト計算機に返し、
前記プログラマブルロジックデバイスが、
検索対象のセグメントデータの構成情報をリードし、
前記検索式を解析して検索で使用するカラムデータを特定し、
前記リードした構成情報から、前記特定したカラムデータのセグメントデータにおける格納位置を特定し、
検索対象のセグメントデータが格納された前記記憶デバイスから、前記特定した検索対象で使用するカラムデータをリードして検索を実行する
データ検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、処理装置のデータ検索の技術に関する。
【背景技術】
【０００２】
企業活動において、大量に生じる業務データの活用は不可欠になっている。大量の業務データを効率良く蓄積及び解析するためのデータベース（以下、「ＤＢ」）として、カラムストアデータベース（以下、「カラムストアＤＢ」）が知られている。一般に、データベースは、表を含み、表は、複数のローを有し、各ローに、複数のデータ項目（カラム）にそれぞれ対応した複数の値（カラム値）が記録されている。カラムストアＤＢでは、複数のレコード内の複数のカラム値が、カラム毎に、カラムに対応した領域に格納される。カラムストアＤＢは、サーバのメインメモリに格納することも可能である。しかし、メインメモリは、通常、外部ストレージ装置と比較して単位容量当たり価格（例えばビットコスト）が高い。このため、大規模データを扱うシステムでは、一般に、カラムストアＤＢは、ＨＤＤやフラッシュストレージで構成された外部ストレージ装置に格納される。
【０００３】
特許文献１には、インメモリのカラムストアＤＢにおいて、各クエリは少なくとも１つのカラム述部を有しており、各クエリについてスキャンに必要なカラムを決定し、その決定に基づいて複数のクエリをスキャングループに集め、スケジュール計画に従ってスキャングループのクエリに関してカラム述部を評価するインメモリカラムＤＢシステムが開示されている。特許文献２には、コントローラと記憶媒体とを有し、記憶媒体がデータベース演算部を備える一つ以上のフラッシュモジュールを含み、コントローラがローストアＤＢに対する演算要求を受信して、フラッシュモジュールに受信したローストアＤＢに対する演算要求を実行させるストレージ装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１２／８４２７８号明細書
【特許文献２】国際公開第２０１５／１６２７５２号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１は、インメモリのカラムストアＤＢであり、プロセッサがサーバ内のメモリに格納されたデータを読出し、各クエリ処理を実行している。しかし、外部ストレージ装置にデータを格納する場合、データの読み出しのスループットは格段に低下してしまう。一方、特許文献２では、記憶媒体のデータベース演算部がローストアＤＢに対する演算を実行しているが、ローストアＤＢとカラムストアＤＢとではデータ構造が異なる。すなわち、ローストアＤＢは、ローの単位でデータを管理するのに対し、カラムストアＤＢは、カラムの単位でデータを管理する。したがって、特許文献２に開示されているローストアＤＢに対するデータ演算処理を、同じようにカラムストアＤＢに適用することはできない。また、データベース演算部は各記憶媒体に備えられており、各記憶媒体に跨ったデータの演算は考慮されていない。そこで、本発明の目的は、プロセッサの負荷を抑えつつ、データの検索スループットを向上させることにある。他の目的については、以降の説明で明らかになるであろう。
【課題を解決するための手段】
【０００６】
一実施例に係る情報処理装置は、プロセッサと、複数の記憶デバイスと、プログラマブルロジックデバイスとを備える。複数の記憶デバイスは、データベースの構成要素である複数のセグメントデータを格納する。各セグメントデータは、当該セグメントデータの構成に関する構成情報を含む。プロセッサは、ホスト計算機から検索対象のセグメントデータとデータベースに対する検索式とが記述された検索コマンドを受領し、その受領した検索コマンドをプログラマブルロジックデバイスに渡し、プログラマブルロジックデバイスによる検索結果をホスト計算機に返す。プログラマブルロジックデバイスは、検索対象のセグメントデータの構成情報をリードし、検索式を解析して検索で使用するカラムデータを特定し、リードした構成情報からその特定したカラムデータの検索対象のセグメントデータにおける格納位置を特定し、検索対象のセグメントデータが格納された記憶デバイスからその特定した検索で使用するカラムデータをリードして検索を実行する。
【発明の効果】
【０００７】
本発明によれば、データの検索速度を向上させることができる。
【図面の簡単な説明】
【０００８】
【図１】本実施例に係る情報処理装置の概要を説明するための図。
【図２】情報処理装置の構成例を示す図。
【図３】情報処理装置の動作の一例を示すシーケンスチャート。
【図４】検索コマンド及び検索式の構成例を示す図。
【図５】セグメントデータの構成の一例を示す図。
【図６】エントリページの構成の一例を示す図。
【図７】ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）の動作の一例を示す図。
【図８】制御データ構造体の構成の一例を示す図。
【図９】検索コマンド及び検索式の変形例を示す図。
【図１０】検索コマンド及び検索式の変形例を示す図。
【図１１】情報処理装置の動作の変形例を示すシーケンスチャート。
【発明を実施するための形態】
【０００９】
以下、実施例を説明する。なお、以下の説明では、「ｘｘｘテーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。また、以下の説明では、同種の要素を区別して説明する場合には、「検索コマンド１００Ａ」、「検索コマンド１００Ｂ」のように、参照符号を使用し、同種の要素を区別しないで説明する場合には、「検索コマンド１００」のように参照符号のうちの共通番号のみを使用することがある。
【００１０】
図１は、本実施例に係る情報処理装置１の概要を説明するための図である。
【００１１】
情報処理装置１は、記憶デバイスの例であるフラッシュストレージ１４と、メモリの例であるＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１２と、プログラマブルロジックデバイスの例であるＦＰＧＡ１０とを備える。
【００１２】
ここで、フラッシュストレージ１４のアクセスタイムは、ＤＲＡＭ１２のアクセスタイムと比較して桁違いに大きい。また、フラッシュストレージ１４のリードスループットについても、高性能でデータ転送を行うためには、連続領域に格納されたサイズの大きいデータのリード要求を複数発行して、複数のフラッシュストレージ１４からのリードが並列に行われるようにする必要がある。フラッシュストレージ１４に格納されたデータベース検索の場合には、テーブルを一定のサイズ（例えば８ＭＢ）のセグメントデータ２００に分割して複数のフラッシュストレージ１４に分散して格納しておき、同時に複数のセグメントデータに対するリード要求を発行してスループットを向上する必要がある。
【００１３】
そこで、複数のセグメントデータ２００に対して並列に読み出したデータのバッファ領域としてフラッシュストレージ１４よりもＩ／Ｏ性能の高いＤＲＡＭ１２を使用し、ＤＲＡＭ１２からロードしたデータをＦＰＧＡ１０内部のＤＲＡＭ１２よりもＩ／Ｏ性能の高いＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３２に格納してＦＰＧＡ１０が検索を行う、データ容量とアクセスタイムに関して階層的なメモリ構成を持つ、大容量のデータベース検索を高速化する装置が考えられる。このような装置でローストアＤＢを検索する場合、検索で使用するカラムデータだけをリードしようとすると、アクセス単位が細かくなってスループットが出ないため、全てのカラムデータを一定のサイズに分割してリードすることになり、使用しないカラムデータが多い場合の検索スループットが低下する。
【００１４】
一方、カラムストアＤＢでは、カラムごとに連続領域にデータが格納されるため、検索に使用するカラムデータのみを高スループットでリードすることが可能となる。さらに、カラムごとに最適な方式で圧縮することによって、リードデータ量が削減され検索スループットが向上し得る。
【００１５】
しかしながら、一般にはカラムごとに全てのレコードのデータ（つまり、１つのカラムデータ全体）をフラッシュストレージの連続領域に格納するため、辞書式圧縮された１つのカラムデータ全体の辞書サイズが増大する。この格納形式のカラムストア検索をＦＰＧＡ１０で高速化するには、辞書をＦＰＧＡ１０の内部メモリの例であるＳＲＡＭ３２に保持して、検索条件にヒットしたレコードについて辞書を引いてデコードすることが考えられるが、１つのカラムデータ全体の辞書サイズが比較的大きく、ＳＲＡＭ３２に格納しきれないことがある。
【００１６】
また、ローストア高速化ＦＰＧＡと同様にカラムごとに連続領域に格納されたデータを一定サイズに区切ってリードする場合、カラムごとにデータサイズあたりのレコード数が異なるため、圧縮率が低くデータ長が大きいカラムを格納した領域に対するリードが全体の処理時間に占める割合が大きくなり、検索処理が高速化できない。
【００１７】
本実施例に係る情報処理装置１は、カラムストアＤＢを複数のセグメントデータに分割して複数のフラッシュストレージ１４に分散して格納することにより、ＦＰＧＡ１０のＳＲＡＭ３２の容量に収まるように各セグメントデータ２００の辞書の最大サイズに制限が設けられるようにしてよい。セグメントデータ２００は、リード単位である複数のページから構成されてよい。ＦＰＧＡ１０は、セグメントデータ２００の先頭のエントリページ２０２に格納されている構成情報とこれに続く辞書格納ページ２０４に格納されている辞書情報とをリードしている間に、ホスト計算機２から与えられる検索式を解析してカラム番号を取得して検索に使用するカラムデータのみをリードする処理を、複数のセグメントデータ２００について実行してよい。これにより、フラッシュストレージ１４のアクセスタイムが隠蔽されるとともに必要なデータのみが高スループットでリードされるので、検索スループットが向上する。
【００１８】
次に、図１を参照しながら動作概要を説明する。
【００１９】
ホスト計算機２は、データベースの検索コマンド１００を発行する。それぞれの検索コマンド１００は、プロセッサ１６に対し、セグメントデータ２００のフラッシュストレージ１４における格納位置と、検索式と、検索結果を格納するページリストと、を与える。セグメントデータ２００は、検索対象のデータベースを一定のサイズで分割したものである。ページリストは、ホスト計算機２がアクセス可能なメモリにおけるページのリストである。ホスト計算機２は、フラッシュストレージ１４からのリードデータがバッファされるＤＲＡＭ１２の容量が許す限り、複数の検索コマンド１００を一度に発行することができる。
【００２０】
プロセッサ１６は、それぞれの検索式をＦＰＧＡ１０の内部のＳＲＡＭ３２にキューイングするとともに、フラッシュストレージ１４に対して、検索対象のセグメントデータの先頭のページ（エントリページ２０２）に格納されている各構成情報（カラムデータの格納位置情報）をＤＲＡＭ１２にリードする旨の要求を送信する。
【００２１】
ここで、各セグメントデータ２００についてカラムデータの格納位置情報のリード状態を管理し、次に行う処理として、カラムデータのリード又は検索回路の起動を選択する。
【００２２】
ここで、フラッシュストレージ１４のアクセスタイムが大きいため、リード性能を上げるためには、リードデータのサイズを大きくすることが望ましい。そこで、カラムデータの格納位置情報が格納されているエントリページ２０２の直後のページに、カラムデータの解読（例えば、圧縮されているカラムデータの伸張）に用いる辞書２０４が格納されてよい。これにより、辞書２０４が一定のサイズ以下である場合、カラムデータの格納位置情報及び辞書を１回のアクセスでリードすることができる。
【００２３】
上記リードアクセスタイムの間に、プロセッサ１６は、検索式を解析して検索に使用するカラムを特定し、カラム番号でソートする処理を行ってよい。これにより、この後に行うカラムデータリード要求の作成の処理量を削減することができる。
【００２４】
カラムデータ格納位置情報のリード完了を検知すると、当該セグメントデータ２００に対する検索式解析結果を基にＤＲＡＭ１２からロードを行い、検索に使用するカラムの格納位置とサイズを取得する。
【００２５】
そして、１つのセグメントデータ２００に対する検索コマンド１００を、それぞれが連続領域のカラムデータリード要求であるサブコマンドに分割し、フラッシュストレージ１４に対して、使用カラムデータリード要求をカラムデータ格納順（カラム番号順）に送信する。ここで、サイズの小さい連続番号のカラムリード要求についてはまとめて送信することにより、データサイズを大きくしてよい。
【００２６】
また、「ｒｅａｄ  ｓｕｂｍｉｓｓｉｏｎ  ｅｎｔｒｙ」のＩＤをリードデータ格納先のページ番号としてもよい。これにより、リード完了通知に含まれる当該ＩＤにより、当該リード完了通知が、何れのセグメントデータ又はカラムに対するものであるかを区別することができる。
【００２７】
カラム格納位置とサイズとを抽出する処理において、（検索式に依存しない情報である）テーブルのカラム数と辞書サイズを含むワードをＤＲＡＭ１２からロードしている間に、検索式に現れるカラムの格納位置情報を含むワードを特定する処理を行うことによりロードのレイテンシを隠蔽する。
【００２８】
さらに、カラム格納位置情報を含むワードをロードしている間に、検索に使用するカラムの格納位置情報の当該ワードにおけるバイト位置を算出する処理を行うことによりレイテンシを隠蔽し、プロセッサ１６が行うカラム選択処理のオーバーヘッドを削減する。
【００２９】
プロセッサ１６は、サブコマンドのリード完了を監視して、最初に検索に使用する全てのカラムデータのリードが完了したセグメントデータ２００について、ＦＰＧＡ１０のカラムストアデータベース検索回路に処理開始を指示する。
【００３０】
その後、対応する検索コマンド１００がポイントする検索結果格納先を示すホストメモリページリストを、ＦＰＧＡ検索回路が参照可能なＳＲＡＭ３２に転送する。
【００３１】
これにより、ページリスト格納に使用するＳＲＡＭ３２の容量を削減し、フラッシュストレージ１４に対するリードを同時に行えるセグメントデータ２００の多重度を増大して、検索対象テーブル３００のカラム数、あるいは、検索式に依存して使用するデータの割合が小さい場合があるカラムストアデータベースの検索スループットを維持することができる。
【００３２】
ＦＰＧＡ検索回路は、プロセッサ１６が与える、検索対象のセグメントデータ２００が格納されたＤＲＡＭ１２のアドレスから、各カラムデータの格納位置情報をロードして、検索式に現れるカラム格納アドレスを算出した後、検索に使用するカラムデータをページ単位でロードしてＦＰＧＡ１０の内部のＳＲＡＭ３２に格納する。
【００３３】
このＳＲＡＭ３２は、１つのセグメントデータ２００のデータをパイプライン処理するのに必要な容量であってもよい。ＳＲＡＭ３２はアクセスタイムが小さいので、ＦＰＧＡ検索回路は、ＳＲＡＭ３２からデータを一定数のレコードの分だけロードして検索条件を判定し、ヒットしたレコードについて集約演算を行ってよい。
【００３４】
ＦＰＧＡ検索回路は、必要なカラムデータのＤＲＡＭ１２へのリードが完了したセグメントデータ２００について、順次処理を行う。すなわち、プロセッサ１６は、処理開始したセグメントデータ２００の検索処理完了応答を監視して、完了応答を検知すると次のセグメントデータ２００についてＦＰＧＡ検索回路に処理開始を指示する。
【００３５】
図２は、情報処理装置１の構成例を示す。
【００３６】
情報処理装置１は、プロセッサの例であるＣＰＵ１６、半導体メモリの例であるＤＲＡＭ１２、プログラマブルロジックデバイスの例であるＦＰＧＡ１０、及び記憶デバイスの例である複数のフラッシュストレージ１４を備える。当該半導体メモリの他の例は、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＣＭ（Ｐｈａｓｅ−Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）である。当該記憶デバイスの他の例は、ＨＤＤ、又は、フラッシュストレージとＨＤＤとの組み合わせなどである。なお、ＦＰＧＡ１０の構成は、実施例中で説明する構成に限定されない。例えば、ＦＰＧＡ内の１つの装置が行う処理を複数の装置で行うようＦＰＧＡを構成してもよい。また、複数の装置が行う処理を１つの装置で行うようにＦＰＧＡを構成してもよい。
【００３７】
ＣＰＵ１６は、ＤＲＡＭ１２あるいはＳＲＡＭ３２に格納されているプログラムを実行することにより、情報処理装置１の有する様々な機能を実現する。ＣＰＵ１６は、ＦＰＧＡ１０に内蔵される組込みプロセッサであってもよい。
【００３８】
ＦＰＧＡ１０は、ＦＰＧＡコントローラ３０及び半導体メモリの例であるＳＲＡＭ３２を有する。当該半導体メモリの他の例は、ＭＲＡＭ，ＲｅＲＡＭ、ＰＣＭである。ＳＲＡＭ３２は、内部バスを介して、ＤＲＡＭ１２と接続されている。ＤＲＡＭ１２は、スイッチ１８を介して、複数のフラッシュストレージ１４と接続されている。すなわち、ＦＰＧＡコントローラ３０から見てアクセスタイムの小さい順に、ＳＲＡＭ３２とＤＲＡＭ１２とフラッシュストレージ１４とが階層的に接続されている。ＦＰＧＡコントローラ３０は、カラムストアデータベースの検索を高速化する機能を実現する論理回路である。ＳＲＡＭ３２には、ＦＰＧＡコントローラ３０から使用されるデータが格納される。
【００３９】
フラッシュストレージ１４は、ＦＭ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ）コントローラ４０及び複数のＦＭ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ）チップ４２を有する。ＦＭコントローラ４０は、ＦＭチップ４２に対するデータのリード、ライト及び消去等を制御する。ＦＭチップ４２は、データのリード、ライト及び消去が可能な不揮発記憶デバイスである。ＦＭチップ４２は、ＮＡＮＤ型やＮＯＲ型など、何れの構成であってもよい。
【００４０】
１つのデータベーステーブルは、複数のセグメントデータ２００に分割され、複数のフラッシュストレージ１４に分散して格納されてよい。これにより、１つのテーブルが１つのフラッシュストレージ１４に格納される場合と比較して、ＦＰＧＡコントローラ３０は、より高速にデータを読み出すことができる。なぜなら、ＦＰＧＡ１０は、複数のフラッシュストレージ１４から並列にセグメントデータ２００をリードすることができるからである。
【００４１】
ホスト２は、計算機装置であり、情報処理装置１に対してネットワーク等を介して検索コマンド１００を発行し、その情報処理装置１から検索結果を受領することができる。
【００４２】
図３は、情報処理装置１の動作の一例を示すシーケンスチャートである。
【００４３】
（Ｓ１０）ホスト２は、検索コマンド１００、結果格納ページリストを作成する。そして、Ｓ１２の処理へ進む。
（Ｓ１２）ホスト２は、検索コマンド１００をキューにセットする。そして、Ｓ１４の処理へ進む。
（Ｓ１４）ホスト２は、ＦＰＧＡ１０に、ｔａｉｌ更新を通知する。そして、Ｓ１６の処理へ進む。
【００４４】
（Ｓ１６、Ｓ１８）ＦＰＧＡ１０は、ホスト２からｔａｉｌ更新通知を受領すると、ホスト２から検索コマンド１００と検索式１５０を取得する。そして、Ｓ２０の処理へ進む。
（Ｓ２０）ＦＰＧＡ１０は、フラッシュストレージ１４に、エントリページ及び辞書のリード要求を発行する。そして、Ｓ２２の処理へ進む。
（Ｓ２２）ＦＰＧＡ１０は、フラッシュストレージ１４の下記のＳ２４の処理完了を待つことなく、検索式１５０を解析し、使用カラムを特定する。そして、Ｓ２６の処理へ進む。これにより、ＦＰＧＡ１０のリソースを効率的に利用することができる。
【００４５】
（Ｓ２４）フラッシュストレージ１４は、ＦＰＧＡ１０からエントリページ及び辞書のリード要求を受領すると、セグメントデータ２００内のエントリページ２０２及び辞書２０４をリードし、ＤＲＡＭ１２に格納する。フラッシュストレージ１４は、その格納が完了したら、ＦＰＧＡ１０に完了通知を発行する。
【００４６】
（Ｓ２６）ＦＰＧＡ１０は、フラッシュストレージ１４からＳ２４の処理の完了通知を受領すると、Ｓ２８の処理へ進む。
（Ｓ２８）ＦＰＧＡ１０は、ＤＲＡＭ１２に格納されたエントリページ２０２及び辞書２０４から、セグメントデータ２００内における使用カラムの格納位置を特定する。
（Ｓ３０）ＦＰＧＡ１０は、Ｓ２２の処理で特定した使用カラムのリード要求を発行する。その使用カラムのリード要求には、Ｓ２８の処理で特定したセグメントデータ２００内における使用カラムの格納位置が含まれてよい。
【００４７】
（Ｓ３２）フラッシュストレージ１４は、ＦＰＧＡ１０から使用カラムのリード要求を受領すると、そのリード要求に含まれるセグメントデータ２００の格納位置から使用カラムをリードし、ＤＲＡＭ１２に格納する。フラッシュストレージ１４は、その格納が完了したら、ＦＰＧＡ１０に完了通知を発行する。
【００４８】
（Ｓ３４）ＦＰＧＡ１０は、フラッシュストレージ１４からＳ３２の処理の完了通知を受領すると、Ｓ３６の処理へ進む。
（Ｓ３６）ＦＰＧＡ１０は、ＤＲＡＭ１２に格納されている使用カラムに対して検索を実行する。また、ＦＰＧＡ１０は、ホスト２から、結果格納ページリストを取得する。そして、Ｓ３８の処理へ進む。
（Ｓ３８）ＦＰＧＡ１０は、Ｓ３６の検索結果を、結果格納ページリストに格納する。そして、Ｓ４０の処理へ進む。
（Ｓ４０、Ｓ４２）ＦＰＧＡ１０は、検索完了を確認すると、ホスト２に、その完了通知を発行する。
【００４９】
（Ｓ４４、Ｓ４６）ホスト２は、検索完了キューを確認し、完了している場合、検索結果を取得する。
【００５０】
図４は、検索コマンド１００及び検索式１５０の構成例を示す。
【００５１】
検索コマンド１００は、ホスト２が、ＦＰＧＡ１０に検索を要求するためのコマンドである。１つの検索コマンド１００は、１つのセグメントデータ２００に対して発行される。
【００５２】
検索コマンド１００は、項目値として、コマンドＩＤ、検索対象セグメントデータ格納位置、検索対象セグメントデータサイズ、検索式ポインタ、及び結果格納ページリストポインタを含んでよい。コマンドＩＤは、検索コマンド１００の識別子である。検索対象セグメントデータ格納位置は、検索対象のセグメントデータ２００が格納されている位置の情報である。検索対象セグメントデータサイズは、検索対象のセグメントデータ２００のサイズである。検索式ポインタは、検索式の格納先アドレスを示すポインタである。結果格納ページリストポインタは、検索結果ページリストの確保先を示すポインタである。結果格納ページリストは、ホスト２のメモリ上に確保されてよい。
【００５３】
検索式１５０は、項目値として、検索条件数、検索条件、検索条件組み合わせ指定、出力カラム数、カラム番号及びデータ型、グループ化カラム数、集約演算数、及び集約演算記述を有してよい。検索条件数は、検索条件の個数である。検索条件は、検索の条件を示す情報であり、カラム番号、データ型、比較演算タイプ及び比較値から構成されてよい。検索条件組み合わせ指定は、検索条件の組み合わせを指定する情報である。出力カラム数は、カラム番号及びデータ型のセットの個数である。カラム番号及びデータ型は、カラムストアＤＢにおけるカラム番号とそのカラムのデータ型を示す情報である。グループ化カラム数は、検索結果のグループ化に使用するカラムの数である。集約演算数は、集約演算記述の個数である。集約演算記述は、集約演算の記述を示す情報であり、集約演算タイプ、数値演算指定、オペランドから構成されてよい。
【００５４】
図５は、セグメントデータ２００の構成の一例を示す。
【００５５】
セグメントデータ２００は、エントリページ２０２、各カラムの辞書格納ページ２０４、各カラムのデータ格納ページ２０６を含んでよい。各ページのサイズは、リードの単位に対応するサイズであってよい。
【００５６】
エントリページ２０２には、セグメントデータ２００の構成に関する情報である構成情報が格納される。エントリページ２０２に格納される構成情報の詳細については後述する（図６参照）。エントリページ２００は、セグメントデータ２００の先頭の１ページであってよい。すなわち、構成情報のサイズは、１ページ分のサイズ以下であってよい。
【００５７】
辞書格納ページ２０４には、データ格納ページ２０６に格納されているデータを解読するための辞書情報が格納される。セグメントデータ２００において、エントリページ２０２と複数の辞書格納ページ２０４とは連続して配置されてよい。これにより、構成情報と辞書情報とをまとめて（シーケンシャル）リードすることができる。
【００５８】
データ格納ページ２０６には、カラムデータが格納される。セグメントデータ２００は、複数のデータ格納ページ２０６に、異なるカラム番号のカラムデータの少なくとも一部を格納してよい。これにより、或るカラムデータをリードする際に、複数のフラッシュストレージ１４に分散格納されている、そのカラムデータを含むセグメントデータを、並列にリードすることができる。
【００５９】
１つの辞書格納ページ２０４の辞書情報と、少なくとも１つのデータ格納ページ２０６に格納されている１つのカラム番号のカラムデータとが、（カラム単位で）１対１に対応付けられてよい。例えば、少なくとも１つのデータ格納ページ２０６に格納されているカラム番号「１」のカラムデータは、１つの辞書格納ページ２０４に格納されているカラム番号「１」の辞書情報に基づいて圧縮されていてよい。言い換えると、少なくとも１つのデータ格納ページ２０６に格納されているカラム番号「１」のカラムデータは、１つの辞書格納ページ２０４に格納されているカラム番号「１」の辞書情報によって伸張可能であってよい。これにより、セグメントデータ２００に含まれる１つの辞書情報は、当該セグメントデータに含まれる分のカラムデータを解読するための情報のみを有せば良いので、辞書情報のサイズに上限が設けられる。よって、ＦＰＧＡ１０は、セグメントデータ２００から辞書情報を内部のＳＲＡＭ（内部メモリ）にリードして、そのセグメントデータ２００のカラムデータを解読することができる。すなわち、ＦＰＧＡ１０を用いて、圧縮されているカラムデータを高速に伸張することができる。
【００６０】
図６は、エントリページ２０２に格納される構成情報の一例を示す。
【００６１】
構成情報は、カラム数、各カラムの先頭ページ番号、各カラムのページ数、及び各カラムの圧縮形式を含んでよい。カラム数は、セグメントデータ２００に含まれるカラムの個数である。カラムの先頭ページ番号は、セグメントデータ２００における、そのカラムのデータ格納ページの先頭のページ番号である。カラムのページ数は、セグメントデータ２００における、そのカラムのデータ格納ページの個数である。カラムの圧縮形式は、そのカラムのデータ格納ページのデータの圧縮形式を示す情報である。構成情報を参照することにより、セグメントデータ２００内の所望のカラムデータを取得することができる。またカラム０先頭ページ番号は、エントリページと辞書格納ページが格納領域のページ数を示し、エントリページとともに全ての辞書ページがＤＲＡＭ１２にリードされたかの判定に用いることができる。
【００６２】
図７は、ＦＰＧＡ１０の動作の一例を示す。
【００６３】
検索コマンド取得部３０２は、ドアベルレジスタの更新を検知すると、ホストメモリにおけるホスト検索コマンドキューに格納されている１つの検索コマンド１００を、ＦＰＧＡ１０内のＦＰＧＡ検索コマンドキューにＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送する。そして、検索コマンド取得部３０２は、検索式取得部３０４に、検索式ポインタを渡す。なお、ドアベルレジスタは、ホスト２によるホスト検索コマンドキューのｔａｉｌ更新時に、更新されてよい。
【００６４】
検索式取得部３０４は、検索コマンド取得部３０２から検索式ポインタを受領すると、その検索式ポインタが示すホストメモリに格納されている検索式を、ＦＰＧＡ１０内のＳＲＡＭ３２にＤＭＡ転送する。そして、検索式取得部３０４は、ＦＰＧＡ検索状態管理キューに、その検索式のＳＲＡＭ３２の格納先をエンキューする。
【００６５】
エントリリード要求部３０６は、ＦＰＧＡ検索コマンドキューから１つの検索コマンド１００をデキューし、ＦＰＧＡ検索状態管理キューから１つの検索式の情報をデキューする。エントリリード要求部３０６は、その検索コマンド１００から、検索対象のセグメントデータ２００を特定する。エントリリード要求部３０６は、その特定した検索対象のセグメントデータ２００のエントリ及び辞書のリード要求を生成する。このエントリ及び辞書のリード要求には、リード結果の格納先とするＤＲＡＭ１２のページリスト（エントリ及び辞書の格納先ページリスト）が含まれてよい。エントリリード要求部３０６は、そのエントリ及び辞書のリード要求を、ｓｓｄ＿ｓｑにエンキューする。
【００６６】
ＦＭコントローラ４０は、ｓｓｄ＿ｓｑからエントリ及び辞書のリード要求をデキューすると、ＦＭから検索対象のセグメントデータ２００のエントリ及び辞書をリードし、エントリ及び辞書の格納先ページリストに格納する。そして、ＦＭコントローラ４０は、エントリ及び辞書のリード要求に対する完了応答を、ＦＰＧＡ１０のｓｓｄ＿ｃｑにエンキューする。
【００６７】
上記の処理と共に、エントリリード要求部３０６は、検索式解析部３０８に、検索式１５０のＳＲＡＭ３２の格納先を渡す。
【００６８】
検索式解析部３０８は、エントリリード要求部３０６から検索式１５０のＳＲＡＭ３２の格納先を受領すると、そのＳＲＡＭ３２の格納先から検索式１５０を取得し、解析する。この解析により、検索対象のセグメントデータ２００内において、この検索式１５０が検索対象とするカラム（検索対象カラム）が判明する。検索式解析部３０８は、その検索対象カラムをカラム番号の順番にソートしてよい。検索式解析部３０８は、その検索対象カラムを、カラム位置取得部３１０へ渡す。
【００６９】
エントリリード完了確認部３１２は、ｓｓｄ＿ｃｑから、エントリ及び辞書のリード要求に対する完了応答をデキューし、その完了応答に対応するエントリ及び辞書の格納先ページリストを、カラム位置取得部３１０へ渡す。
【００７０】
カラム位置取得部３１０は、検索式解析部３０８から検索対象カラムを受領する。また、カラム位置取得部３１０は、エントリリード完了確認部３１２から受領したエントリ及び辞書の格納先ページリストより、エントリ及び辞書のリード結果を取得する。カラム位置取得部３１０は、その検索対象カラムと、そのエントリ及び辞書のリード結果とに基づき、検索対象のセグメントデータ２００から検索対象カラムのみを選択してリードするための制御データ構造体３００（図８参照）を生成する。
【００７１】
カラム位置取得部３１０は、その生成した制御データ構造体３００を、カラムリード要求部３１４に渡す。
【００７２】
カラムリード要求部３１４は、カラム位置取得部３１０から制御データ構造体３００を受領すると、その制御データ構造体３００を、カラム番号が連続する部分毎に分割する。そして、カラムリード要求部３１４は、カラム番号が連続する部分毎に、連続カラムリード要求を生成する。カラム番号が連続している部分はバルク転送が可能なため、これにより、フラッシュストレージ１４からＤＲＡＭ１２への転送効率が向上する。この連続カラムリード要求には、リード結果の格納先とするＤＲＡＭ１２のページリスト（連続カラムの格納先ページリスト）が含まれてよい。カラムリード要求部３１４は、その分割数を、ＦＭリード分割数のレジスタに登録しておく。カラムリード要求部３１４は、その連続カラムリード要求を、ｓｓｄ＿ｓｑにエンキューする。また、エントリページとともにリードした辞書ページ数が、制御データ構造体３００にある辞書ページ数より小さい場合は、不足分の辞書ページリード要求をあわせて行う。
【００７３】
ＦＭコントローラ４０は、上記同様、ｓｓｄ＿ｓｑから連続カラムリード要求をデキューすると、ＦＭチップ４２から検索対象のセグメントデータ２００の連続カラムをリードし、連続カラムの格納先ページリストに格納する。そして、ＦＭコントローラ４０は、連続カラムリード要求に対する完了応答を、ＦＰＧＡ１０のｓｓｄ＿ｃｑにエンキューする。
【００７４】
カラムリード完了確認部３１６は、ｓｓｄ＿ｃｑから、連続カラムリード要求に対する完了応答をデキューし、その完了応答に対応する連続カラムリードの格納先ページリストを、サブコマンドキューにエンキューする。
【００７５】
検索回路起動部３１８は、サブコマンドキューに、ＦＭリード分割数のレジスタに登録されている分の連続カラムリードの格納先ページリストが格納されたことを確認すると、ＦＰＧＡ検索回路５００の起動レジスタをＯＮにする。すなわち、検索回路起動部３１８は、検索対象のセグメントデータ２００内の検索に使用される全てのカラムがＤＲＡＭ１２に格納されたら、ＦＰＧＡ検索回路５００を起動させる。検索回路起動部３１８は、ページリスト取得部３２０に、結果格納ページリストの取得を指示する。
【００７６】
ページリスト取得部３２０は、検索回路起動部３１８から結果格納ページリストの取得指示を受領すると、ホストメモリ内の結果格納ページリストを、ＦＰＧＡ１０内のＳＲＡＭ３２にＤＭＡ転送する。
【００７７】
ＦＰＧＡ検索回路５００は、各カラムデータの格納位置情報をロードして、検索式１５０に現れるカラム格納アドレスを算出した後、検索に使用するカラムデータをページ単位でロードしてＦＰＧＡ１０内のＳＲＡＭ３２に格納する。このＳＲＡＭ３２は、１つのセグメントデータ２００をパイプライン処理するのに必要な容量しかないが、アクセスタイムが小さく、ここからデータを一定数のレコードの分だけロードして検索条件を判定し、ヒットしたレコードについて集約演算を行う。ＦＰＧＡ検索回路５００は、セグメントデータ２００に対する検索処理を完了したら、完了応答を、ＦＰＧＡ検索完了キューにエンキューする。
【００７８】
検索回路完了処理部３２２は、ＦＰＧＡ検索完了キューから、１つのセグメントデータ２００（つまり、１つのホスト２の検索コマンド１００）に対する検索処理の完了応答をデキューし、ホスト応答部３２４に指示する。
【００７９】
ホスト応答部３２４は、検索回路完了処理部３２２から実行を指示されると、ホスト２の検索コマンド１００に対する完了応答を、ホスト検索完了キューにＤＭＡ転送する。以上の処理により、ホスト２は、検索コマンド１００に対する検索結果１０１を取得することができる。
【００８０】
図８は、検索に使用するカラムデータのみを選択してリードするための制御データ構造体３００の一例を示す。
【００８１】
制御データ構造体３００は、検索対象のカラムを管理するための構造体である。制御データ構造体３００は、項目値として、検索式出現カラム数、検索対象テーブルのカラム数、辞書ページ数、カラム番号、カラム先頭ページ番号、カラムページ数を有してよい。検索式出現カラム数は、検索式に出現するカラムの個数である。検索対象テーブルのカラム数は、検索対象とするデータベーステーブルに含まれるカラムの個数である。辞書ページ数は、辞書ページの個数である。各カラム番号は、検索対象セグメントデータ２００内の検索対象カラムの番号である。これらのカラム番号は、番号の小さい順にソートされてよい。各カラム先頭ページ番号は、検索対象セグメントデータ２００における各カラム番号に対応するカラム格納領域のの先頭のページ番号である。各カラムページ数は、検索対象セグメントデータにおける各カラム番号に対応するカラム格納領域のページ数である。カラム番号と、カラム先頭ページ番号と、カラムページ数とは、１対１対１で関連付けられてよい。図８の例では、カラム番号「０」と、カラム先頭ページ「０」と、カラムページ数「０」とが関連付けられている。検索式に出現するカラム数、各カラム番号は、検索式解析部３０８によって特定されてよい。制御データ構造体３００のカラム数、辞書ページ数、各カラム先頭ページ番号、各カラムページ数は、カラム位置取得部３１０によって特定されてよい。
【００８２】
図９及び図１０は、検索コマンド１００及び検索式１５０の変形例を示す。
【００８３】
図９の検索コマンド１００Ｂ及び検索式１５０Ｂは、図５の検索コマンド１００Ａ及び検索式１５０Ａと対比して、検索式を識別するための検索式ＩＤを有する点が相違する。  図１０の検索コマンド１００Ｃは、図９の検索コマンド１００Ｂと対比して、検索対象テーブルを識別するためのテーブルＩＤを有する点が相違する。次に、図１０の構成における動作例を述べる。
【００８４】
図１１は、図１０に示す検索コマンド１００Ｃ及び検索式１５０Ｃを用いた情報処理装置の動作の一例を示すシーケンスチャートである。
【００８５】
（Ｓ１００〜Ｓ１０４）ホスト２は、図３のＳ１０〜Ｓ１４と同様の処理を行う。
【００８６】
（Ｓ１０６）ＦＰＧＡ１０は、ホスト２からｔａｉｌ更新通知を受領すると、ホスト２から検索コマンド１００Ｃを取得する。そしてＳ１０８の処理へ進む。
（Ｓ１０８）ＦＰＧＡ１０は、検索コマンド１００ＣのコマンドＩＤ、テーブルＩＤ、及び検索式ＩＤが前回の検索コマンド１００Ｃと一致する場合、前回の使用カラム格納位置を特定する。そしてＳ１１０の処理へ進む。
（Ｓ１１０）ＦＰＧＡ１０は、フラッシュストレージ１４に、エントリページ及び辞書のリード要求を発行する。そしてＳ１１２の処理へ進む。
（Ｓ１１２）ＦＰＧＡ１０は、フラッシュストレージ１４の下記Ｓ１１４の処理完了を待つことなく、使用カラムのリード要求を発行する。この使用カラムのリード要求には、Ｓ１０８で特定した前回の使用カラム格納位置が含まれてよい。これにより、図３のＳ２２の処理を省略することができる。
【００８７】
（Ｓ１１４）フラッシュストレージ１４は、ＦＰＧＡ１０からエントリページ及び辞書のリード要求を受領すると、セグメントデータ２００内のエントリ２０２及び辞書２０４をリードし、ＤＲＡＭ１２に格納する。フラッシュストレージ１４は、その格納が完了したら、ＦＰＧＡ１０に完了通知を発行する。
【００８８】
（Ｓ１２０）ＦＰＧＡ１０は、フラッシュストレージ１４からＳ１１４の完了通知を受領すると、Ｓ１３０の処理へ進む。
（Ｓ１３０）ＦＰＧＡ１０は、ＤＲＡＭ１２に格納されたエントリページ２０２及び辞書２０４を用いて、Ｓ１０８で特定した前回の使用カラム格納位置との差分データの格納位置を特定する。そして、Ｓ１３２の処理へ進む。
（Ｓ１３２）ＦＰＧＡ１０は、フラッシュストレージ１４に、差分データのリード要求を発行する。その差分データのリード要求には、Ｓ１３０で特定した差分データの格納位置が含まれてよい。
【００８９】
（Ｓ１３４）フラッシュストレージ１４は、ＦＰＧＡ１０から差分データのリード要求を受領すると、そのリード要求に含まれる差分データの格納位置から差分データをリードし、ＤＲＡＭ１２に格納する。これにより、フラッシュストレージ１４からＤＲＡＭ１２へのデータ転送量を削減することができる。フラッシュストレージ１４は、その格納が完了したら、ＦＰＧＡ１０に完了通知を発行する。
【００９０】
（Ｓ１３６）ＦＰＧＡ１０は、フラッシュストレージ１４からＳ１３４の完了通知を受領すると、Ｓ１３８の処理へ進む。
（Ｓ１３８〜Ｓ１４４）ＦＰＧＡ１０は、図３のＳ３６〜Ｓ４２と同様の処理を行う。
（Ｓ１４６〜Ｓ１４８）ホスト２は、図３のＳ４４〜Ｓ４６と同様の処理を行う。
【００９１】
上述した実施例は、本発明の説明のための例示であり、本発明の範囲を実施例のみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【符号の説明】
【００９２】
１：情報処理装置  ２：ホスト  １０：ＦＰＧＡ  １２：ＤＲＡＭ  １４：フラッシュストレージ  １６：ＣＰＵ  ３０：ＦＰＧＡコントローラ  ３２：ＳＲＡＭ
【図１】
2017138892.tif 000003
【図２】
2017138892.tif 000004
【図３】
2017138892.tif 000005
【図４】
2017138892.tif 000006
【図５】
2017138892.tif 000007
【図６】
2017138892.tif 000008
【図７】
2017138892.tif 000009
【図８】
2017138892.tif 000010
【図９】
2017138892.tif 000011
【図１０】
2017138892.tif 000012
【図１１】
2017138892.tif 000013