(57)【要約】【課題】アクセラレータ装置を利用した場合のカラムストアデータベースの処理性能を向上する。【解決手段】カラムストアデータベースを実行する計算機システムにカラムストア処理部が実現され、一つ以上のアクセラレータ装置の各々にローストア処理部が実現される。少なくとも一つのアクセラレータ装置において、ローストア処理部が、該当の一つ以上のカラムデータセットを、当該アクセラレータ装置のメモリに読み出し、当該一つ以上のカラムデータセットから抽出された値で構成された一つ以上のローデータセットを含む処理結果を送信する。計算機システムにおけるカラムストア処理部が、一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成してそれらをカラムストアデータベースに送信する。【選択図】図１
2020098479.tif 000002
【特許請求の範囲】
【請求項１】
インターフェース装置、メモリ及びそれらに接続されたプロセッサを有しカラムストアデータベースを当該プロセッサにより実行する計算機システムに実現されるカラムストア処理部と、
前記インターフェース装置に接続されそれぞれメモリを有する一つ以上のアクセラレータ装置の各々において実現されるローストア処理部と
を有し、
少なくとも一つのアクセラレータ装置において、前記ローストア処理部が、
一つ以上の表の複数のカラムのカラムデータのうちの該当の一つ以上のカラムにそれぞれ対応した一つ以上のカラムデータセットを、当該アクセラレータ装置のメモリに読み出し、
前記一つ以上のカラムデータセットの各々から条件に適合する値を抽出し、
当該抽出された値で構成された一つ以上のローデータセットを含む処理結果を送信し、
前記カラムストア処理部が、
前記少なくとも一つのアクセラレータ装置から送信された一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成し、
当該一つ又は複数のカラムデータセットを前記カラムストアデータベースに送信する、
カラムストアデータベースシステム。
【請求項２】
前記一つ又は複数の処理結果の各々は、当該処理結果に含まれるローデータセットの数である結果行数を含み、
前記一つ又は複数の処理結果の各々について、
当該処理結果に含まれる結果行数が、前記カラムストア処理部により前記カラムストアデータベースに通知され、
カラム毎に、当該結果行数分の値が、当該処理結果から前記カラムストア処理部により取得される、
請求項１に記載のカラムストアデータベースシステム。
【請求項３】
前記カラムストアデータベースは、クエリ発行元から受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成し、当該生成されたクエリプランに基づいて前記クエリを実行し前記クエリの実行結果を前記クエリ発行元に返すようになっており、
前記クエリプランは、一つ以上のデータベース演算子と、データベース演算子の実行順序の関係とを含む情報であり、
前記一つ以上のデータベース演算子のうちの、前記一つ以上のアクセラレータ装置のいずれかで実行可能なデータベース演算子毎に、
前記カラムストア処理部が、当該データベース演算子の処理に必要な一つ以上のカラムのデータを前記計算機システムのメモリに読み出し、当該読み出されたデータのアドレスが記述され当該データベース演算子に基づくコマンドを、前記一つ以上のアクセラレータ装置のいずれかに送信し、
当該コマンドを受信したアクセラレータ装置における前記ローストア処理部が、当該コマンドに応答して、前記各カラムのデータについて処理が完了するまで、前記一つ以上のカラムについての一つ以上のカラムデータセットを当該アクセラレータ装置のメモリに読み出すことと、当該一つ以上のカラムデータセットの各々から条件に適合する値を抽出することと、当該一つ以上のカラムデータセットからそれぞれ抽出された一つ以上の値でそれぞれが構成されている一つ以上の値群を送信することとを行う、
請求項１に記載のカラムストアデータベースシステム。
【請求項４】
前記実行可能なデータベース演算子は、当該データベース演算子について特定される演算子属性が前記一つ以上のアクセラレータ装置の仕様に基づき定められた所定の要件を満たしているデータベース演算子であり、
前記一つ以上のデータベース演算子の各々について、前記演算子属性は、当該データベース演算子の種別と、当該データベース演算子の処理において抽出される値に関する条件と、当該データベース演算子についてのカラム属性との少なくとも一つであり、
前記一つ以上のデータベース演算子の各々について、前記カラム属性は、当該データベース演算子の処理の対象となるカラムの数と、当該データベース演算子の処理の対象となる各カラムのデータ型とのうちの少なくとも一つである、
請求項３に記載のカラムストアデータベースシステム。
【請求項５】
前記実行可能なデータベース演算子毎に、
前記カラムストアデータベースによって当該データベース演算子に基づくコマンドが生成され、
当該生成されたコマンドに、当該データベース演算子について読み出されたデータのアドレスが前記カラムストア処理部によって記述され、
当該アドレスが記述されたコマンドが、前記一つ以上のアクセラレータ装置のいずれかに前記カラムストア処理部により送信される、
請求項３に記載のカラムストアデータベースシステム。
【請求項６】
前記カラムストアデータベースシステムに送信される前記一つ又は複数のカラムデータセットの各々について、当該カラムデータセットから取得可能な値の数は、いずれのアクセラレータ装置のメモリに読み出されるいずれのカラムデータセットから取得可能な値の数よりも多い、
請求項１に記載のカラムストアデータベースシステム。
【請求項７】
前記カラムストア処理部は、
前記一つ又は複数の処理結果から一つ又は複数のカラムデータセットを抽出するカラム抽出部と、
当該抽出された一つ又は複数のカラムデータセットを前記カラムストアデータベース向けの一つ又は複数のカラムデータセットに変換するカラム変換部と
を含み、
前記生成された一つ又は複数のカラムデータセットは、前記カラムストアデータベース向けの一つ又は複数のカラムデータセットであり、
前記カラム抽出部は、第一の管理領域で動作し、
前記カラム変換部は、前記カラムストアデータベースが動作する管理領域と同じ管理領域であり前記第一の管理領域と異なる管理領域である第二の管理領域で動作する、
請求項１に記載のカラムストアデータベースシステム。
【請求項８】
前記カラムストア処理部は、
前記一つ又は複数の処理結果から一つ又は複数のカラムデータセットを抽出するカラム抽出部と、
当該抽出された一つ又は複数のカラムデータセットを前記カラムストアデータベース向けの一つ又は複数のカラムデータセットに変換するカラム変換部と
を含み、
前記生成された一つ又は複数のカラムデータセットは、前記カラムストアデータベース向けの一つ又は複数のカラムデータセットであり、
前記カラム抽出部は、第一のプログラミング言語で記述された一つ以上のプログラムが前記プロセッサによって実行されることで実現され、
前記カラム変換部は、前記第一のプログラミング言語と異なるプログラミング言語である第二のプログラミング言語で記述された一つ以上のプログラムが前記プロセッサによって実行されることで実現される、
請求項１に記載のカラムストアデータベースシステム。
【請求項９】
前記第二のプログラミング言語は、前記カラムストアデータベースについてのプログラミング言語と同じである、
請求項８に記載のカラムストアデータベースシステム。
【請求項１０】
前記第一のプログラミング言語は、Ｃ言語であり、
前記第二のプログラミング言語は、ＪＡＶＡ言語である、
請求項９に記載のカラムストアデータベースシステム。
【請求項１１】
前記一つ以上のアクセラレータ装置は、それぞれメモリ及びＦＰＧＡ（Field Programmable Gate Array）チップを有する一つ以上のＦＰＧＡボードであり、
前記一つ以上のＦＰＧＡボードの各々において、前記ローストア処理部は、当該ＦＰＧＡボードのＦＰＧＡチップに実現される、
請求項１に記載のカラムストアデータベースシステム。
【請求項１２】
インターフェース装置、メモリ及びそれらに接続されたプロセッサを有しカラムストアデータベースを当該プロセッサにより実行する計算機システムの前記インターフェース装置に接続されそれぞれメモリを有する一つ以上のアクセラレータ装置の少なくとも一つにより、
一つ以上の表の複数のカラムのカラムデータのうちの該当の一つ以上のカラムにそれぞれ対応した一つ以上のカラムデータセットを、当該アクセラレータ装置のメモリに読み出し、
前記一つ以上のカラムデータセットの各々から条件に適合する値を抽出し、
当該抽出された値で構成された一つ以上のローデータセットを含む処理結果を送信し、
前記プロセッサにより、
少なくとも一つのアクセラレータ装置から送信された一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成し、
当該一つ又は複数のカラムデータセットを前記カラムストアデータベースに送信する、
データベース処理高速化方法。
【請求項１３】
インターフェース装置、メモリ及びそれらに接続されたプロセッサを有しカラムストアデータベースを当該プロセッサにより実行する計算機システムの前記プロセッサに、
一つ以上のアクセラレータ装置の少なくとも一つから送信された一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成し、
前記一つ以上のアクセラレータ装置の各々は、メモリを有し、ローストア処理部を当該アクセラレータ装置に実現し、
少なくとも一つのアクセラレータ装置において、前記ローストア処理部が、一つ以上の表の複数のカラムのカラムデータのうちの該当の一つ以上のカラムにそれぞれ対応した一つ以上のカラムデータセットを、当該アクセラレータ装置のメモリに読み出し、前記一つ以上のカラムデータセットの各々から条件に適合する値を抽出し、当該抽出された値で構成された一つ以上のローデータセットを含む処理結果を送信するようになっており、
前記一つ又は複数のカラムデータセットを前記カラムストアデータベースに送信する、
ことを実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、カラムストアデータベースの処理の高速化に関する。
【背景技術】
【０００２】
データベース処理に関する技術として、例えば、特許文献１〜３に開示の技術がある。特に、特許文献１及び２は、カラムストアデータベース処理に関する技術を開示している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−２０９８０７号公報
【特許文献２】特開２０１４−１９１５９３号公報
【特許文献３】ＵＳ２００７／０１１８５００
【発明の概要】
【発明が解決しようとする課題】
【０００４】
カラムストアデータベースは、ローストアデータベースと比較して、次の二点の違いがある。
【０００５】
第一に、カラムストアデータベースは、カラム毎に当該カラムに属する値で構成されたカラムデータを記憶装置に格納する。例えば、LINEITEM表が、L_ORDERKEY、L_PARTKEY、及び、L_SUPPKEYの三つのカラムを有する場合に、それら三つのカラムの各々についてカラムデータを記憶装置に格納する。
【０００６】
第二に、カラムストアデータベースは、カラムデータセットを連続して処理する。例えば、「SELECT L_PARTKEY FROM LINEITEM WHERE L_ORDERKEY < 1000 AND L_SUPPKEY ＝ 500」というクエリ（典型的にはＳＱＬ文）を実行する場合に、カラムストアデータベースは、「L_ORDERKEY < 1000」の条件判定を連続して実行し、「L_SUPPKEY = 500」の条件判定を連続して実行する。
【０００７】
以上の二点の特徴により、カラムストアデータベースは高効率にデータベース処理を実行できる。
【０００８】
データベース処理を高速化するために、Field Programmable Gate Array（以下、ＦＰＧＡと略す）ボード（アクセラレータ装置の一例）を用いること、具体的には、ＦＰＧＡボードがサーバ装置（計算機システムの一例）に代わってカラムデータセットを生成することを検討することができる。
【０００９】
カラムデータセットを構成する値の数が多いほどデータベース処理の効率が向上する。しかしながら、サーバ装置が有するメモリの容量と、ＦＰＧＡボードが有するメモリの容量を比較すると、通常、ＦＰＧＡボードが有するメモリの容量の方が小さい。そのため、ＦＰＧＡボードがカラムデータセットを生成する場合、少数の値しかカラムデータセットとしてまとめる（生成する）ことができない。結果として、カラムストアデータベースの処理効率が低下する問題がある。
【００１０】
この問題を避ける方法として、カラムストアデータベースの処理にＦＰＧＡボードを用いない方法が考えられる。しかし、カラムデータセットを連続して処理する速度は、一般に、サーバ装置よりもＦＰＧＡボードの方が速い。このため、カラムストアデータベースの処理にＦＰＧＡボードを用いない方法でも、カラムストアデータベースの処理効率が低下する問題がある。
【００１１】
以上のような問題は、ＦＰＧＡボード以外のアクセラレータ装置、及び、サーバ装置以外の計算機システムについてもあり得る。
【課題を解決するための手段】
【００１２】
カラムストアデータベースを実行する計算機システムにカラムストア処理部が実現され、計算機システムに関する一つ以上のアクセラレータ装置の各々にローストア処理部が実現される。少なくとも一つのアクセラレータ装置において、ローストア処理部が、一つ以上の表のうちの該当の一つ以上のカラムデータセットを、当該アクセラレータ装置のメモリに読み出し、当該一つ以上のカラムデータセットの各々から条件に適合する値を抽出し、当該抽出された値で構成された一つ以上のローストアデータセットを含む処理結果を送信する。計算機システムにおけるカラムストア処理部が、少なくとも一つのアクセラレータ装置から送信された一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成し、当該一つ又は複数のカラムデータセットをカラムストアデータベースに送信する。
【発明の効果】
【００１３】
本発明により、アクセラレータ装置を利用した場合のカラムストアデータベースの処理性能が向上する。
【図面の簡単な説明】
【００１４】
【図１】実施例１におけるカラムストアデータベースシステムの構成の概要を示す。
【図２】実施例１におけるカラムストアデータベースシステムの構成を示す。
【図３】表の一例を示す。
【図４】表の別の例を示す。
【図５】カラムストアデータの例を示す。
【図６】カラムストアデータベースが受信するクエリの例を示す。
【図７】カラムストアデータベースが行う処理のフローを示す。
【図８】クエリプランの例を示す。
【図９】図７のＳ７０３のフローを示す。
【図１０】図９のＳ９０３のフローを示す。
【図１１】図９のＳ９０５で生成されたＦＰＧＡコマンドの例を示す。
【図１２】データ読出し部が行う処理のフローを示す。
【図１３】コマンド送信部が行う処理のフローを示す。
【図１４】ＦＰＧＡ制御部が行う処理のフローを示す。
【図１５】データ処理部が行う処理のフローを示す。
【図１６】結果送信部が行う処理のフローを示す。
【図１７】処理結果の論理的な構成を示す。
【図１８】カラムデータ生成部が行う処理のフローを示す。
【図１９】実施例２におけるカラムストアデータベースシステムの構成を示す。
【図２０】カラム抽出部が行う処理のフローを示す。
【図２１】カラム変換部が行う処理のフローを示す。
【発明を実施するための形態】
【００１５】
以下の説明では、「インターフェース装置」は、一つ以上のインターフェースデバイスでよい。
【００１６】
また、以下の説明では、「メモリ」は、一つ以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも一つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
【００１７】
また、以下の説明では、「永続記憶装置」は、一つ以上の永続記憶デバイスである。永続記憶デバイスは、典型的には、不揮発性の記憶デバイス（例えば補助記憶デバイス）であり、具体的には、例えば、ＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）である。
【００１８】
また、以下の説明では、「記憶装置」は、メモリと永続記憶装置の少なくともメモリでよい。
【００１９】
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサデバイスである。少なくとも一つのプロセッサデバイスは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサデバイスであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセッサデバイスでもよい。少なくとも一つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサデバイスは、プロセッサコアでもよい。
【００２０】
また、以下の説明では、「ｋｋｋ部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、一つ以上のハードウェア回路（例えばＦＰＧＡ又はＡＳＩＣ）によって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置及び／又はインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。各機能の説明は一例であり、複数の機能が一つの機能にまとめられたり、一つの機能が複数の機能に分割されたりしてもよい。
【００２１】
また、以下の説明では、「計算機システム」は、一つ以上の物理的な計算機でもよいし、少なくとも一つの物理的な計算機が所定のソフトウェアを実行することで実現されるソフトウェアディファインドのシステムでもよい。
【００２２】
また、以下の説明では、「表」は、複数のカラムと一つ以上のローとで構成されており、各ローには、複数のカラムにそれぞれ属する複数の値が格納される。表において、「値」は、数値に限らず、例えば文字列でもよく、典型的には、データ型（例えば、“INTEGER”）に従う種類の値である。
【００２３】
また、以下の説明では、表の各カラムについて、「カラムデータ」とは、当該カラム全体についてのデータであり、当該カラムに属する値で構成されるカラム形式のデータである。各カラムについて、「カラムデータセット」は、当該カラムについてのカラムデータの全部又は一部である。複数のカラムの各々のカラムデータとそれらのメタデータとで構成されたデータ（例えば図５に例示のデータ）を、「カラムストアデータ」と呼ぶことができる。また、以下の説明では、カラム名“α”のカラムに属する値を、「α値」と呼ぶことがある。
【００２４】
また、以下の説明では、表の各ローについて、「ローデータ」とは、当該ロー全体についてのデータであって、当該ローに属する値で構成されるロー形式のデータである。各ローについて、「ローデータセット」は、当該ローについてのローデータの全部又は一部である。
【００２５】
また、以下の説明では、「カラムストアデータベース」とは、いわゆるカラムナデータベースであり、列指向データベース管理システムである。カラムストアデータベースが受け付けるクエリの発行元は、カラムストアデータベースの外部のコンピュータプログラム（例えばアプリケーションプログラム）でよい。外部のコンピュータプログラムは、計算機システム内で実行されるプログラムでもよいし、計算機システムに接続された装置（例えばクライアント）で実行されるプログラムでもよい。
【００２６】
以下、幾つかの実施例を説明する。以下の実施例では、計算機システムの一例としてサーバ装置が採用され、アクセラレータ装置の一例としてＦＰＧＡボードが採用される。サーバ装置のインターフェース装置に一つ又は複数のＦＰＧＡボードが接続可能であるが、以下の実施例では、説明の簡単化のために、サーバ装置に接続されるＦＰＧＡボードは一つとする。
【実施例１】
【００２７】
図１は、実施例１におけるカラムストアデータベースシステムの構成の概要を示す。
【００２８】
カラムストアデータベースシステムは、サーバ装置１０１に実現されるカラムストア処理部２５０と、ＦＰＧＡボード１１１に実現されるローストア処理部２６０とを有する。サーバ装置１０１は、インターフェース装置１０５、メモリ１０３、及び、それらに接続されたプロセッサ１０２を有する。ＦＰＧＡボード１１１は、インターフェース装置１１２、メモリ１１４、及び、それらに接続されたＦＰＧＡチップ１１６を有する。ＦＰＧＡボード１１１には、更にＦＰＧＡ制御部１１５も実現される。ＦＰＧＡボード１１１のインターフェース装置１１２が、サーバ装置１０１のインターフェース装置１０５に接続される。
【００２９】
サーバ装置１０１のプロセッサ１０２が、カラムストアデータベースシステム６を実行する。また、プロセッサ１０２が一つ以上のプログラムを実行することでカラムストア処理部２５０が実現される。カラムストアデータベース１０６が、クエリ発行元からクエリを受け付け、当該クエリを実行する。当該クエリの実行処理において、カラムストアデータベース１０６が、ＦＰＧＡボード１１１に対するコマンド（以下、ＦＰＧＡコマンド）を発行する。カラムストア処理部２５０が、当該ＦＰＧＡコマンドを必要に応じて加工し（例えば後述するようにアドレスを追記し）、当該ＦＰＧＡコマンドをＦＰＧＡボード１１１に送信する。
【００３０】
ＦＰＧＡ制御部１１５は、例えばメモリ１１４内の一つ以上のプログラムがＦＰＧＡチップ１１６内のソフトプロセッサ（図示せず）に実行されることで実現される。ローストア処理部２６０は、処理の高速化実現のため、例えばＦＰＧＡチップ１１６に対するコンフィグデータに従いＦＰＧＡチップ１１６に実現（構築）される。ＦＰＧＡ制御部１１５が、サーバ装置１０１からのＦＰＧＡコマンドを基にローストア処理部２６０を開始する。ローストア処理部２６０は、ＦＰＧＡコマンドを基に、一つ以上の表の複数のカラムのカラムデータのうちの該当の一つ以上のカラム（例えば、L_PARTKEY、L_SUPPKEY、…）にそれぞれ対応した一つ以上のカラムデータセットをメモリ１１４に読み出し、当該一つ以上のカラムデータセットの各々から条件に適合する値を抽出し、当該抽出された値で構成された一つ以上のローデータセットを含む処理結果を送信する。当該処理結果は、ＦＰＧＡ制御部１１５経由又は非経由で、サーバ装置１０１に送信される。
【００３１】
サーバ装置１０１において、カラムストア処理部２５０が、ＦＰＧＡボード１１１からの一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成し、当該一つ又は複数のカラムデータセットをカラムストアデータベース１０６に送信する。
【００３２】
本実施例によれば、サーバ装置１０１に代えてＦＰＧＡボード１１１が、一つ以上のカラムデータセットの各々を連続して処理する。このようにＦＰＧＡボード１１１が利用された場合、ＦＰＧＡボード１１１の一つ又は複数の処理結果から一つ以上のカラムデータセットを生成することは、ＦＰＧＡボード１１１に代えてサーバ装置１０１が行う。これにより、カラムストアデータベース１０６が処理するカラムデータセットを構成する値の数を、ＦＰＧＡボード１１１がカラムデータセットを生成することに比べて増やすことが可能になる。結果として、カラムストアデータベース１０６の処理効率を向上することが可能になる。
【００３３】
以下、本実施例を詳細に説明する。
【００３４】
図２は、実施例１におけるカラムストアデータベースシステムの構成を示す。
【００３５】
サーバ装置１０１のインターフェース装置１０５とＦＰＧＡボード１１１のインターフェース装置１１２同士の接続は、コネクタ同士の接続のような直接的な接続でもよいし、ＰＣＩ（Peripheral Component Interconnect）バスのような通信媒体を介した間接的な接続でもよい。
【００３６】
サーバ装置１０１及びＦＰＧＡボード１１１のうちの少なくともサーバ装置１０１に、一つ以上の表の各々についてカラムストアデータ１２０を格納した永続記憶装置１１９が接続される。
【００３７】
サーバ装置１０１において、カラムストア処理部２５０は、一つ以上のカラムのカラムデータをメモリ１０３に読み出すデータ読出し部１０７、ＦＰＧＡコマンドを送信するコマンド送信部１０８、処理結果中の少なくとも結果行数を受信する結果受信部１１０、及び、一つ以上のカラムデータセットを生成するカラム生成部１０９を含む。
【００３８】
ＦＰＧＡボード１１１において、ローストア処理部２６０は、カラムデータセットをメモリ１１４に読み出し当該カラムデータセットから条件に適合する値を抽出するデータ処理部１１７、及び、抽出された値で構成されたローデータセットを含む処理結果を送信する結果送信部１１８を含む。
【００３９】
このカラムストアデータベースシステムでは、カラムストアデータベース１０６が、クエリ発行元からクエリ（典型的にはＳＱＬ文）を受け付け、当該クエリの処理の一部をＦＰＧＡボード１１１に実行させ、当該クエリの実行結果を、クエリ発行元に返す。
【００４０】
図３は、表の一例を示す。
【００４１】
当該表は、LINEITEM表であり、複数のカラムとして、L_ORDERKEY、L_PARTKEY、及び、L_SUPPKEYの三つのカラムを有する。
【００４２】
図４は、表の別の例を示す。
【００４３】
当該表は、PART表であり、複数のカラムとして、P_PARTKEY、P_SIZE、及び、P_RETAILPRICEの三つのカラムを有する。
【００４４】
図５は、カラムストアデータ１２０の例を示す。
【００４５】
図５に例示のカラムストアデータ１２０は、LINEITEM表のカラムストアデータ（典型的にはファイル）である。カラムストアデータ１２０は、メタデータ５０１と、当該カラムストアデータに対応した表の複数のカラムの各々についてのカラムデータ５０２とで構成される。
【００４６】
メタデータ５０１は、表名５１１、格納カラム名５１２、行数５１３、カラムデータ型５１４及びカラムオフセット５１５といった情報を含む。表名５１１は、このカラムストアデータ１２０に含まれるの表の名称を示す。格納カラム名５１２は、当該表を構成する複数のカラムの各々の名称を示す。行数５１３は、当該表を構成する行（ロー）の数を示す。カラムデータ型５１４は、当該表を構成する複数のカラムの各々について当該カラムに属する値のデータ型を示す。カラムオフセット５１５は、当該表を構成する複数のカラムの各々について当該カラムのカラムデータ５０２の先頭の値の位置（当該カラムストアデータ１２０における位置）を示す。
【００４７】
複数のカラムの各々について、当該カラムのカラムデータ５０２は、当該カラムに属する値で構成されている。
【００４８】
図６は、カラムストアデータベース１０６が受信するクエリの例を示す。
【００４９】
図６に例示のクエリによれば、LINEITEM表及びPART表が参照され、「L_PARTKEY = P_PARTKEY」、「L_ORDERKEY < 1000」、及び、「P_SIZE = 50」という条件に適合するP_RETAILPRICE値がP_RETAILPRICEのカラムデータから選択される。
【００５０】
以下、本実施例で行われる処理の一例を説明する。なお、以下の説明では、図６に例示のクエリをカラムストアデータベース１０６が受け付けるとする。
【００５１】
図７は、カラムストアデータベース１０６が行う処理のフローを示す。
【００５２】
カラムストアデータベース１０６は、クエリをクエリ発行元から受け付ける（Ｓ７０１）。
【００５３】
カラムストアデータベース１０６は、受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成する（Ｓ７０２）。クエリプランは、例えば、一つ以上のデータベース演算子と、データベース演算子の実行順序の関係を含む情報である。
【００５４】
カラムストアデータベース１０６は、生成されたクエリプランに基づいてクエリを実行する（Ｓ７０３）。Ｓ７０３では、ＦＰＧＡボード１１１から受信する一つ又は複数の処理結果が含む一つ以上（典型には複数）のローデータセットが、カラム生成部１０９によりカラムストアデータベース１０６向けに一つ以上（典型的には複数）のカラムデータセットに変換され、当該一つ以上のカラムデータセットを含む複数のカラムデータセットを基にカラムストアデータベース１０６によりクエリ実行結果（クエリに対する応答）が生成される。クエリ実行結果は、例えばロー形式のデータである。
【００５５】
カラムストアデータベース１０６は、当該クエリ実行結果をクエリ発行元に返す（Ｓ７０４）。
【００５６】
図８は、Ｓ７０２で生成されたクエリプランの例を示す。
【００５７】
本実施例では、クエリプランは、データベース演算子をノード８０１、データベース演算子の実行順序の関係をエッジ８０２とする木構造で表される。各ノード８０１は、ノード種別８１１、表名８１２、条件８１３及び抽出カラム名８１４のうちの少なくとも一つといった情報を含む。以下、一つのノード８０１を例に取る（図８の説明において「対象ノード８０１」）。
【００５８】
ノード種別８１１は、対象ノード８０１の種別（データベース演算子の種別）を示す。表名８１２は、対象ノード８０１の処理において参照される一つ以上の表の各々の名称を示す。
【００５９】
条件８１３は、対象ノード８０１の処理において抽出される値についての条件を示す。条件８１３は、ノード種別８１１に依存する。例えば、ノード種別８１１が“FILTER”であれば、条件８１３は、フィルタ条件を意味する。また、例えば、ノード種別８１１が“JOIN”であれば、条件８１３は、結合条件を意味する。
【００６０】
抽出カラム名８１４は、対象ノード８０１の処理において抽出される値の抽出元のカラムの名称を示す。
【００６１】
図９は、図７のＳ７０３のフローを示す。
【００６２】
カラムストアデータベース１０６は、クエリプランの最終のノード８０１を処理済か否かを判断する（Ｓ９０１）。
【００６３】
Ｓ９０１の判断結果が偽の場合（Ｓ９０１：ＮＯ）、カラムストアデータベース１０６は、クエリプランにおける一つ以上の未処理のノード８０１のうちの最先のノード８０１を取得し（Ｓ９０２）、当該ノード８０１がＦＰＧＡボード１１１で実行可能なノード８０１か否かを判断する（Ｓ９０３）。Ｓ９０３の判断結果が偽の場合（Ｓ９０３：ＮＯ）、カラムストアデータベース１０６は、当該ノード８０１を実行する（Ｓ９０４）。当該ノード８０１の実行結果として得られた一つ以上のカラムデータセットが、メモリ１０３に格納される。
【００６４】
Ｓ９０３の判断結果が真の場合（Ｓ９０３：ＹＥＳ）、カラムストアデータベース１０６は、ＦＰＧＡコマンドを生成し（Ｓ９０５）、当該ＦＰＧＡコマンドを発行する（Ｓ９０６）。発行されたＦＰＧＡコマンドは、データ読出し部１０７を介してコマンド送信部１０８に送信され、コマンド送信部１０８からＦＰＧＡボード１１１に送信される。
【００６５】
カラムストアデータベース１０６は、Ｓ９０６で発行されたＦＰＧＡコマンドに対する応答としてカラム生成部１０９から一つ以上のカラムデータセットを受信する（Ｓ９０７）。受信された一つ以上のカラムデータセットはメモリ１０３に格納される。その後、処理がＳ９０１に戻る。
【００６６】
Ｓ９０１の判断結果が真の場合（Ｓ９０１：ＹＥＳ）、カラムストアデータベース１０６は、Ｓ９０４やＳ９０７においてメモリ１０３に格納された全てのカラムデータセットを基にクエリ実行結果（例えばロー形式のデータ）を生成する（Ｓ９０８）。この結果、Ｓ７０３が終了する。
【００６７】
図１０は、図９のＳ９０３のフローを示す。図１０の説明において、一つのノード８０１を例に取る（図１０の説明において「対象ノード８０１」）。また、本実施例では、カラムストアデータベース１０６に対して、ＦＰＧＡボード１１１で実行可能なノードに関する属性（ここでは、ノード種別８１１、条件８１２及びカラム数についてのパラメータ）を示す設定データが関連付けられており、Ｓ９０３では、当該設定データが適宜参照されるとする。設定データの中身（すなわち、ＦＰＧＡボード１１１で実行可能なノードに関する属性としてのパラメータ）は、典型的には、ＦＰＧＡボード１１１に依存する。
【００６８】
カラムストアデータベース１０６は、対象ノード８０１のノード種別８１１が、ＦＰＧＡボード１１１で実行可能な種別（設定データが示すノード種別）に適合するか否かを判断する（Ｓ１００１）。「ＦＰＧＡボード１１１で実行可能な種別」は、ＦＰＧＡボード１１１の構成（典型的には、ＦＰＧＡチップ１１６に実現されるローストア処理部２６０の構成）に依存する。具体的には、例えば、ノード種別８１１が、カラムストアデータベース１０６の中身を知らなくても処理設計が可能な種別（例えば、“FILTER”又は“AGGREGATION”）であれば、Ｓ１００１の判断結果は真となる。一方、ノード種別８１１が、カラムストアデータベース１０６の中身を知らないと処理設計が不可能な種別（例えば、“JOIN”）であれば、Ｓ１００１の判断結果は偽となる。Ｓ１００１の判断結果が偽の場合（Ｓ１００１：ＮＯ）、Ｓ９０３の判断結果も偽となる。
【００６９】
Ｓ１００１の判断結果が真の場合（Ｓ１００１：ＹＥＳ）、カラムストアデータベース１０６は、対象ノード８０１の条件８１２が、ＦＰＧＡボード１１１で実行可能な条件（設定データが示す条件）に適合するか否かを判断する（Ｓ１００２）。例えば、条件８１２が、“P_SIZE = 50”のような数値の等価演算子であれば、Ｓ１００２の判断結果が真となり、条件８１２が、文字列の正規表現の検索に関するものであれば、Ｓ１００２の判断結果が偽となる。Ｓ１００２の判断結果が偽の場合（Ｓ１００２：ＮＯ）、Ｓ９０３の判断結果も偽となる。
【００７０】
Ｓ１００２の判断結果が真の場合（Ｓ１００２：ＹＥＳ）、カラムストアデータベース１０６は、対象ノード８０１の抽出カラム名８１４から特定されるカラム数が、ＦＰＧＡボード１１１で実行可能なカラム数（設定データが示すカラム数）に適合するか否かを判断する（Ｓ１００３）。当該実行可能なカラム数は、ＦＰＧＡボード１１１（例えば、論理の大きさやメモリ１１４の容量）に依存する。Ｓ１００３の判断結果が偽の場合（Ｓ１００３：ＮＯ）、Ｓ９０３の判断結果も偽となる。
【００７１】
Ｓ１００３の判断結果が真の場合（Ｓ１００３：ＹＥＳ）、Ｓ９０３の判断結果も真となる。
【００７２】
図１１は、図９のＳ９０５で生成されたＦＰＧＡコマンドの例を示す。図１１に例示のＦＰＧＡコマンドに対応したノード８０１を、図１１の説明において「対象ノード８０１」と言う。
【００７３】
ＦＰＧＡコマンドは、例えば、ファイル名１１０１、表名１１０２、ノード種別１１０３、条件１１０４、抽出カラム名１１０５及びデータアドレス１１０６といった情報を含む。
【００７４】
ファイル名１１０１は、データ読出し元のカラムストアデータ１２０としてのファイルの名称を示す。表名１１０２は、当該カラムストアデータ１２０に関しデータ読出し元の表の名称を示し、対象ノード８０１に含まれる表名８１２と同じである。ノード種別１１０３は、対象ノード８０１に含まれるノード種別８１１と同じである。条件１１０４は、対象ノード８０１に含まれる条件８１３と同じである。抽出カラム名１１０５は、対象ノード８０１に含まれる抽出カラム名８１４と同じである。
【００７５】
データアドレス１１０６は、読出し元のカラムデータのアドレスを示す。本実施例では、ＦＰＧＡボード１１１により読み出されるカラムデータセットを含むカラムデータは、後述するように、データ読出し部１０７により永続記憶装置１１９内のカラムストアデータ１２０からサーバ装置１０１のメモリ１０３に読み出されるため、データアドレス１１０６は、当該メモリ１０３における領域のアドレスを示す。図９のＳ９０５で生成されたＦＰＧＡコマンドでは、データアドレス１１０６はブランクである。データアドレス１１０６は、データ読出し部１０７により記述される。
【００７６】
図１２は、データ読出し部１０７が行う処理のフローを示す。
【００７７】
データ読出し部１０７は、Ｓ９０５で発行されたＦＰＧＡコマンドのファイル名１１０１が示すカラムストアデータ１２０のメタデータ５０１を永続記憶装置１１９からメモリ１０３に読み出す（Ｓ１２０１）。
【００７８】
データ読出し部１０７は、当該メタデータ５０１と、当該ＦＰＧＡコマンドの表名１１０２、条件１１０４及び抽出カラム名１１０５とを基に、当該ＦＰＧＡコマンドの処理に必要なカラムのカラムデータ５０２を永続記憶装置１１９からメモリ１０３に読み出す（Ｓ１２０２）。例えば、条件１１０４及び抽出カラム名１１０５から特定される全てのカラムのカラムデータ５０２がメモリ１０３に読み出される。
【００７９】
データ読出し部１０７は、Ｓ１２０２で読み出したカラムデータ５０２の格納領域のアドレスを、当該ＦＰＧＡコマンドにデータアドレス１１０６として記述する（Ｓ１２０３）。
【００８０】
データ読出し部１０７は、データアドレス１１０６が記述されたＦＰＧＡコマンドを、コマンド送信部１０８に送信する（Ｓ１２０４）。
【００８１】
図１３は、コマンド送信部１０８が行う処理のフローを示す。
【００８２】
コマンド送信部１０８は、データ読出し部１０７からのＦＰＧＡコマンドの抽出カラム名１１０５と、当該抽出カラム名１１０５が示す各カラムについて、メモリ１０３に読み出されているメタデータ５０１のカラムデータ型５１４から特定されるデータ型とを、カラム生成部１０９に対して設定する（Ｓ１３０１）。
【００８３】
コマンド送信部１０８は、当該ＦＰＧＡコマンドを、ＦＰＧＡボード１１１のＦＰＧＡ制御部１１５に送信する（Ｓ１３０２）。
【００８４】
図１４は、ＦＰＧＡ制御部１１５が行う処理のフローを示す。
【００８５】
ＦＰＧＡ制御部１１５が、ＦＰＧＡコマンドに応答して、データ処理部１１７に処理を開始させ（Ｓ１４０１）、データ処理部１１７の処理の完了を待つ（Ｓ１４０２）。Ｓ１４０１では、当該ＦＰＧＡコマンド内のノード種別１１０３、条件１１０４、抽出カラム名１１０５及びデータアドレス１１０６がデータ処理部１１７に通知される。
【００８６】
データ処理部１１７の処理が完了したら、ＦＰＧＡ制御部１１５は、メモリアドレスと結果行数とを結果受信部１１０に通知する（Ｓ１４０３）。当該メモリアドレスは、ＦＰＧＡボード１１１（ローストア処理部２６０）によりサーバ装置１０１のメモリ１０３に格納された処理結果の格納領域のアドレスを示す。結果行数は、当該処理結果に含まれる結果行数を示す。ＦＰＧＡ制御部１１５から結果受信部１１０に通知されるメモリアドレス及び結果行数は、後述のＳ１６０６においてローストア処理部２６０（具体的には結果送信部１１８）からＦＰＧＡ制御部１１５に通知されたメモリアドレス及び結果行数である。結果行数は、例えば、ＦＰＧＡコマンド内の条件１１０４が“P_SIZE = 50”の場合、当該条件１１０４に該当したP_SIZE値の数である。
【００８７】
図１５は、データ処理部１１７が行う処理のフローを示す。
【００８８】
データ処理部１１７が、ＦＰＧＡ制御部１１５から通知されたデータアドレス１１０６が示す領域の全てのカラムデータ（サーバ装置１０１のメモリ１０３に読み出されているカラムデータ）から、処理に必要な全てのカラムの各々について、このフローにおいて未だメモリ１１４に読み出されたことがないカラムデータセットを、ＦＰＧＡボード１１１のメモリ１１４に、例えばＤＭＡ（Direct Memory Access）によりコピーする（Ｓ１５０１）。ここで言う「処理に必要な全てのカラム」は、条件１１０４及び抽出カラム名１１０５から特定される全てのカラムである。例えば、処理対象のＦＰＧＡコマンドが図１１に例示のＦＰＧＡコマンドの場合、「処理に必要な全てのカラム」は、P_SIZE、P_PARTKEY及びP_RETAILPRICEである。各カラムについて、Ｓ１５０１で読み出されたカラムデータセットを構成する値の最大数は、メモリ１１４の容量（例えばメモリ１１４に設けられるバッファの容量）に応じた数でよい。具体的には、例えば、各カラムについて、サーバ装置１０１のメモリ１０３に読み出されているカラムデータを構成する値の数が10,000であり、Ｓ１５０１で読み出されたカラムデータセットを構成する値の最大数が1,000の場合、当該カラムデータの全ての処理のために、Ｓ１５０１のコピーが、10回（＝10,000/1,000）行われることになる。
【００８９】
データ処理部１１７は、条件１１０４から特定されるカラムのカラムデータセットの未処理の値（Ｓ１５０２の条件判定が行われていない値）のうちの先頭の値について、条件１１０４に従う条件判定を行う（Ｓ１５０２）。例えば、条件１１０４が“P_SIZE = 50”の場合、条件判定は、当該先頭のP_SIZE値が50か否かの判定である。
【００９０】
Ｓ１５０２の条件判定の結果が真の場合（Ｓ１５０２：ＹＥＳ）、データ処理部１１７は、条件判定の結果が真となった値に対応した抽出カラム値群（一つ以上の抽出カラム値）を結果送信部１１８に送信する（Ｓ１５０３）。例えば、条件１１０４が“P_SIZE = 50”で、抽出カラム名１１０５が“P_PARTKEY”及び“P_RETAILPRICE”の場合、「抽出カラム値群」は、P_SIZE値“50”が属するローに属するP_PARTKEY値とP_RETAILPRICE値という二つの値である。
【００９１】
Ｓ１５０３の後（又は、Ｓ１５０２の条件判定の結果が偽（Ｓ１５０２：ＮＯ）のためにＳ１５０３がスキップされた後）、データ処理部１１７は、各カラムについて、Ｓ１５０１で取得されたカラムデータセットに未処理の値があるか否かを判断する（Ｓ１５０４）。Ｓ１５０４の判断結果が真の場合（Ｓ１５０４：ＹＥＳ）、処理がＳ１５０２に戻る。
【００９２】
Ｓ１５０４の判断結果が偽の場合（Ｓ１５０４：ＮＯ）、データ処理部１１７は、処理に必要な全てのカラムの各々について、このフローにおいて未だメモリ１１４に読み出されたことがないカラムデータセットがあるか否かを判断する（Ｓ１５０５）。Ｓ１５０５の判断結果が真の場合（Ｓ１５０５：ＹＥＳ）、処理がＳ１５０１に戻る。
【００９３】
Ｓ１５０５の判断結果が偽の場合（Ｓ１５０５：ＮＯ）、データ処理部１１７は、処理の完了をＦＰＧＡ制御部１１５及び結果送信部１１８に通知する（Ｓ１５０６）。
【００９４】
図１６は、結果送信部１１８が行う処理のフローを示す。
【００９５】
結果送信部１１８は、Ｓ１５０３でデータ処理部１１７から送信された抽出カラム値群を受信した場合、当該受信した抽出カラム値群を、バッファ（例えばメモリ１１４から確保しされている領域）に格納する（Ｓ１６０１）。その際、結果送信部１１８は、抽出カラム値群を受信したカウント値（初期値は例えば“0”）をインクリメントする。このカウント値が、結果行数に相当する。
【００９６】
結果送信部１１８は、バッファが満杯か否かを判断する（Ｓ１６０２）。Ｓ１６０２の判断結果が真の場合（Ｓ１６０２：ＹＥＳ）、結果送信部１１８は、バッファ内の全ての抽出カラム値群を、サーバ装置１０１に送信する（Ｓ１６０３）。Ｓ１６０３では、例えば、バッファ内の全ての抽出カラム値群が、ＤＭＡによりサーバ装置１０１のメモリ１０３に送信される。Ｓ１６０３が行われた場合、バッファは空となる。
【００９７】
Ｓ１６０２の判断結果が偽の場合（Ｓ１６０２：ＮＯ）、又は、Ｓ１６０３の後、結果送信部１１８は、データ処理部１１７から処理の完了の通知を受けたか否かを判断する（Ｓ１６０４）。Ｓ１６０４の判断結果が偽の場合（Ｓ１６０４：ＮＯ）、処理がＳ１６０１に戻る。
【００９８】
Ｓ１６０４の判断結果が真の場合（Ｓ１６０４：ＹＥＳ）、結果送信部１１８は、バッファ内の全ての抽出カラム値群と、結果行数とを含んだ処理結果を、サーバ装置１０１に送信する（Ｓ１６０５）。Ｓ１６０５でも、例えば、Ｓ１６０３と同様に、バッファ内の全ての抽出カラム値群が、ＤＭＡによりサーバ装置１０１のメモリ１０３に送信される。
【００９９】
結果送信部１１８は、メモリアドレス及び結果行数をＦＰＧＡ制御部１１５に通知する（Ｓ１６０６）。メモリアドレスは、Ｓ１６０３やＳ１６０５で送信された抽出カラム値群の格納領域（サーバ装置１０１のメモリ１０３における領域）のアドレスである。Ｓ１６０６が行われた場合、結果行数としてのカウント値が初期値にリセットされる。
【０１００】
図１７は、処理結果の論理構成を示す。
【０１０１】
ＦＰＧＡコマンドの処理結果は、ＦＰＧＡボード１１１から通知された結果行数と、ＦＰＧＡボード１１１からサーバ装置１０１のメモリ１０３に格納された一つ以上の抽出カラム値群とで構成される。一つの抽出カラム値群は、一つの行に対応する一つのローデータセットに相当する。このような構成から、処理結果は、一つ以上のローデータセットを含むデータであると言える。
【０１０２】
なお、Ｓ１６０３及びＳ１６０５の各々で、抽出カラム値群の他に結果行数もサーバ装置１０１に送信されてもよい（つまり、結果行数を含む処理結果がサーバ装置１０１に送信されてもよい）。この場合、サーバ装置１０１（例えばカラム生成部１０９）は、一つのＦＰＧＡコマンドについて受信した全ての結果行数の合計を、当該ＦＰＧＡコマンド（対応するノード）についての結果行数と扱うことができる。
【０１０３】
図１８は、カラム生成部１０９が行う処理のフローを示す。
【０１０４】
ＦＰＧＡ制御部１１５から結果受信部１１０が受信したメモリアドレス及び結果行数は、結果受信部１１０からカラム生成部１０９に通知され、カラム生成部１０９が、当該結果行数をカラムストアデータベース１０６に通知する（Ｓ１８０１）。
【０１０５】
カラム生成部１０９は、Ｎ＝１を設定する（Ｓ１８０２）。Ｎは、カラムの番号である。ここでは、便宜上、一つの処理結果について、ＦＰＧＡボード１１１からメモリ１０３に格納された抽出カラム値群が属する全てのカラムに“１”からシーケンシャルな番号が割り振られるとする。
【０１０６】
カラム生成部１０９は、Ｎ番目のカラムに属しカラムストアデータベース１０６に未送信の抽出カラム値のうち先頭の抽出カラム値を取得し（例えば、結果受信部１１０からのメモリアドレスを基に取得し）、取得された抽出カラム値をカラムストアデータベース１０６に送信する（Ｓ１８０３）。カラム生成部１０９は、Ｎ番目のカラムについてすべての抽出カラム値を送信したか否か（送信した抽出カラム値の数が結果行数に達したか）を判断する（Ｓ１８０４）。Ｓ１８０４の判断結果が偽の場合（Ｓ１８０４：ＮＯ）、処理がＳ１８０３に戻る。Ｓ１８０４の判断結果が真の場合（Ｓ１８０４：ＹＥＳ）、Ｎ番目のカラムについて、Ｎ番目のカラムに属する全ての抽出カラム値（結果行数分の抽出カラム値）で構成されたデータセットであるカラムデータセットが、カラムストアデータベース１０６に送信されたことになる。なお、Ｓ１８０１で結果行数がカラムストアデータベース１０６に通知されているので、カラムストアデータベース１０６は、Ｎ番目のカラムについて抽出カラム値を受信する都度に、受信した抽出カラム値の数をカウントし、カウント値が結果行数に達したら、Ｎ番目のカラムについて全ての抽出カラム値を受信したこと（つまりカラムデータセットを受信したこと）を検知できる。
【０１０７】
Ｓ１８０４：ＹＥＳの場合、カラム生成部１０９は、全てのカラムについてカラムデータセットの送信が完了したか否かを判断する（Ｓ１８０５）。Ｓ１８０５の判断結果が偽の場合（Ｓ１８０５：ＮＯ）、Ｎが、カラム生成部１０９によりＮ＋１に更新され（Ｓ１８０６）、処理がＳ１８０３に戻る。Ｓ１８０５の判断結果が真の場合（Ｓ１８０５：ＹＥＳ）、処理が終了する。
【０１０８】
図１７に例示の処理結果を例に取ると、図１８のフローでは、１番目のカラムであるP_PARTKEYについて、奇数番目のアドレスにある抽出カラム値がP_PARTKEY値であり、２番目のカラムの一例であるP_RETAILPRICEについて、偶数番目のアドレスにある抽出カラム値が、P_RETAILPRICE値である。
【０１０９】
なお、図１８には示していないが、カラム生成部１０９は、カラム毎にカラムデータセットをカラムストアデータベース１０６に送信する際に、当該カラムデータセットをカラムストアデータベース１０６向けに変換してから送信してもよいし（その変換は、例えば図１３のＳ１３０１で登録されたカラム名とデータ型を基に行われ）、カラム毎にカラムデータセットをカラムストアデータベース１０６に送信することに代えて、複数のカラムデータセットをまとめて（例えばカラムストアデータベース１０６向けに変換した上で）カラムストアデータベース１０６に送信してもよい。
【０１１０】
以上の実施例１を、例えば下記のように総括することができる。
【０１１１】
一つ又は複数の処理結果の各々は、当該処理結果に含まれる抽出カラム値群（ローデータセットの一例）の数である結果行数を含む。一つ又は複数の処理結果の各々について、当該処理結果に含まれる結果行数が、カラムストア処理部２５０によりカラムストアデータベース１０６に通知され、カラム毎に、当該結果行数分の値が、処理結果からカラムストア処理部２５０により取得される。このようにして、各カラムについて、カラムデータセットがサーバ装置１０１において生成されることになる。
【０１１２】
カラムストアデータベース１０６は、クエリ発行元から受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成し、当該生成されたクエリプランに基づいてクエリを実行し当該クエリの実行結果をクエリ発行元に返すようになっている。クエリプランは、一つ以上のノード８０１（データベース演算子）と、ノード８０１の実行順序の関係とを含む情報である。ＦＰＧＡボード１１１で実行可能なノード８０１毎に、下記が行われる。
・カラムストア処理部２５０が、当該ノード８０１の処理に必要な一つ以上のカラムのデータをメモリ１０３に読み出し、当該読み出されたデータのアドレス１１０６が記述され当該ノード８０１に基づくＦＰＧＡコマンドを、ＦＰＧＡボード１１１（一つ以上のアクセラレータ装置のいずれかの一例）に送信する。
・当該ＦＰＧＡコマンドを受信したＦＰＧＡボード１１１におけるローストア処理部２６０が、当該ＦＰＧＡコマンドに応答して、各カラムのデータについて処理が完了するまで、各カラムのカラムデータセットをメモリ１１４に読み出すことと、一つ以上の抽出カラムのカラムデータセットの各々から条件１１０４に適合する抽出カラム値を抽出することと、当該一つ以上のカラムデータセットからそれぞれ抽出された一つ以上の抽出カラム値でそれぞれが構成されている一つ以上の抽出カラム値群を送信することとを行う。
【０１１３】
「ＦＰＧＡボード１１１で実行可能なノード８０１」は、当該ノード８０１について特定されるノード属性（演算子属性の一例）がＦＰＧＡボード１１１の仕様（例えば、メモリ１１４の容量、及び、ＦＰＧＡチップ１１６の規模）に基づき定められた所定の要件を満たしているノード８０１である。各ノード８０１について、ノード属性は、ノード種別８１１と、条件８１３と、カラム属性との少なくとも一つである。各ノード８０１について、カラム属性は、当該ノード８０１の処理の対象となるカラムの数（抽出カラム名８１４から特定されるカラムの数の一例）と、当該ノード８０１の処理の対象となる各カラムのデータ型とのうちの少なくとも一つである。
【０１１４】
ＦＰＧＡボード１１１で実行可能なノード８０１毎に、下記が行われる。
・カラムストアデータベース１０６によって当該ノード８０１に基づくＦＰＧＡコマンドが生成される。
・当該生成されたＦＰＧＡコマンドに、当該ノード８０１について読み出されたデータのアドレス１１０６がカラムストア処理部２５０によって記述される。
・当該アドレス１１０６が記述されたＦＰＧＡコマンドが、ＦＰＧＡボード１１１にカラムストア処理部２５０により送信される。
【０１１５】
カラムストアデータベースシステム６に送信される一つ又は複数のカラムデータセットの各々について、当該カラムデータセットから取得可能な値（抽出カラム値）の数は、ＦＰＧＡボード１１１のメモリ１１４に読み出されるいずれのカラムデータセットから取得可能な値の数よりも多い。つまり、サーバ装置１０１では、各カラムについて多くの値をカラムデータセットとしてまとめることができる。
【０１１６】
以上が、実施例１の説明である。カラムストアデータベース１０６として様々な仕様のカラムストアデータベースが考えられるが、いずれの仕様のカラムストアデータベースがカラムストアデータベース１０６として採用されても、カラム生成部１０９の変更で対処することが期待できる、言い換えれば、同じＦＰＧＡボード１１１を採用することが期待できる。カラムストア処理部２５０は、ＦＰＧＡボード１１１からの応答（処理結果）をデバッグダンプとしてメモリ１０３（又は永続記憶装置１１９）に格納してよい。
【実施例２】
【０１１７】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。
【０１１８】
図１９は、実施例２におけるカラムストアデータベースシステムの構成を示す。
【０１１９】
カラムストア処理部２５０が、カラム生成部１０９に代えて、カラム抽出部１９０１とカラム変換部１９０２とを含む。カラム抽出部１９０１は、一つ又は複数の処理結果から一つ又は複数のカラムデータセットを抽出する。カラム変換部１９０２は、当該抽出された一つ又は複数のカラムデータセットをカラムストアデータベース１０６向けの一つ又は複数のカラムデータセットに変換する。カラム抽出部１９０１は、第一の管理領域１９１１で動作する。カラム変換部１９０２は、カラムストアデータベース１０６が動作する管理領域と同じ管理領域であり第一の管理領域１９１１と異なる管理領域である第二の管理領域１９１２で動作する。
【０１２０】
サーバ装置１０１で動作するソフトウェアの管理領域として、ＦＰＧＡボード１１１との通信を高速に実行できる第一の管理領域１９１１と、カラムストアデータベース１０６との通信を高速に実行できる第二の管理領域１９１２とが存在する。例えば、Ｃ言語で開発された機能は、ＦＰＧＡボード１１１との通信を高速に実行可能であり、ＪＡＶＡ言語で開発された機能は、カラムストアデータベース１０６との通信を高速に実行できる、といった場合がある（「ＪＡＶＡ」は登録商標）。詳細に述べると、例えば、Ｃ言語によれば、ＪＡＶＡ言語と違い、メモリに関し連続したアドレス（連続したアドレス空間）を確保できるため、ＦＰＧＡボード１１１からＤＭＡでデータをサーバ装置１０１のメモリ１０３に送信する機能を記述することができる。一方、ＪＡＶＡ言語によれば、Ｃ言語に比べてソフトウェア開発効率が高く、故に、例えば、カラムストアデータベース１０６は、ＪＡＶＡのＯＳＳ（Open Source Software）である。
【０１２１】
このような場合に、第一の管理領域１９１１と第二の管理領域１９１２の間の通信回数が増大するとカラムストアデータベース１０６の処理性能が低下する問題が生じる。例えば、一比較例では、第一の管理領域１９１１と第二の管理領域１９１２間で、抽出カラム値毎に、通信が発生する。具体的には、例えば、抽出カラム値毎に、ＪＮＩ（Java Native Interface）が呼び出される。
【０１２２】
そこで、本実施例では、上述したように、カラム生成部１０９に代えて、第一の管理領域１９１１に対して、ＦＰＧＡボード１１１からの処理結果からカラムデータセットを抽出するカラム抽出部１９０１が用意され、カラムストアデータベース１０６が動作する第二の管理領域１９１２に対して、抽出されたカラムデータセットをカラムストアデータベース１０６向けに変換するカラム変換部１９０２が用意される。これにより、第一の管理領域１９１１と第二の管理領域１９１２の間の通信回数が上記比較例に比べて削減される。これにより、通信回数の増大によりカラムストアデータベース１０６の処理性能が低下することを抑えることが可能になる。
【０１２３】
図２０は、カラム抽出部１９０１が行う処理のフローを示す。
【０１２４】
ＦＰＧＡ制御部１１５から結果受信部１１０が受信したメモリアドレス及び結果行数は、結果受信部１１０からカラム抽出部１９０１に通知され、カラム抽出部１９０１が、当該結果行数をカラム変換部１９０２に通知する（Ｓ２００１）。
【０１２５】
カラム抽出部１９０１は、Ｎ＝１を設定する（Ｓ２００２）。Ｎは、カラムの番号である。
【０１２６】
カラム抽出部１９０１は、Ｎ番目のカラムに属しカラム変換部１９０２に未送信の抽出カラム値のうち先頭の抽出カラム値をメモリ１０３から抽出してバッファ（例えばメモリ１０３に設けられたバッファ）に格納する（Ｓ２００３）。当該抽出は、例えば、結果受信部１１０からのメモリアドレスを基に行われる。カラム抽出部１９０１は、バッファ内の抽出カラム値をカラム変換部１９０２に送信し（Ｓ２００４）、バッファを空にする（Ｓ２００５）。
【０１２７】
カラム抽出部１９０１は、Ｎ番目のカラムについてすべての抽出カラム値を送信したか否か（送信した抽出カラム値の数が結果行数に達したか）を判断する（Ｓ２００６）。Ｓ２００６の判断結果が偽の場合（Ｓ２００６：ＮＯ）、処理がＳ２００３に戻る。Ｓ２００６の判断結果が真の場合（Ｓ２００６：ＹＥＳ）、Ｎ番目のカラムについて、Ｎ番目のカラムに属する全ての抽出カラム値（結果行数分の抽出カラム値）で構成されたデータセットであるカラムデータセットが、カラム変換部１９０２に送信されたことになる。なお、Ｓ２００１で結果行数がカラム変換部１９０２に通知されているので、カラム変換部１９０２は、Ｎ番目のカラムについて抽出カラム値を受信する都度に、受信した抽出カラム値の数をカウントし、カウント値が結果行数に達したら、Ｎ番目のカラムについて全ての抽出カラム値を受信したこと（つまりカラムデータセットを受信したこと）を検知できる。
【０１２８】
Ｓ２００６：ＹＥＳの場合、カラム抽出部１９０１は、全てのカラムについてカラムデータセットの送信が完了したか否かを判断する（Ｓ２００７）。Ｓ２００７の判断結果が偽の場合（Ｓ２００７：ＮＯ）、Ｎが、カラム抽出部１９０１によりＮ＋１に更新され（Ｓ２００８）、処理がＳ２００３に戻る。Ｓ２００７の判断結果が真の場合（Ｓ２００７：ＹＥＳ）、処理が終了する。
【０１２９】
図２１は、カラム変換部１９０２が行う処理のフローを示す。
【０１３０】
結果行数がカラム抽出部１９０１からカラム変換部１９０２に通知され、カラム変換部１９０２が、当該結果行数をカラムストアデータベース１０６に通知する（Ｓ２１０１）。
【０１３１】
カラム変換部１９０２は、カラム抽出部１９０１からの一つ以上のカラムデータセットを、カラムストアデータベース１０６向けに変換し（Ｓ２１０２）、変換された一つ以上のカラムデータセットをカラムストアデータベース１０６に送信する（Ｓ２１０３）。例えば、カラム変換部１９０２は、一つ以上のカラムデータセットから、それぞれが一つ以上の抽出カラム値で構成された一つ以上のデータ本体と、一つ以上のヌルフラグ列とを生成し、当該一つ以上のデータ本体と当該一つ以上のヌルフラグ列とをフォーマット変換後の一つ以上のカラムデータセットとしてカラムストアデータベース１０６に送信してもよい。
【０１３２】
以上の実施例２について、管理領域に代えてプログラミング言語を使用した表現にすると、例えば次の通りである。すなわち、カラム抽出部１９０１は、第一のプログラミング言語で記述された一つ以上のプログラムがプロセッサ１０２によって実行されることで実現される。カラム変換部１９０２は、第一のプログラミング言語と異なるプログラミング言語である第二のプログラミング言語で記述された一つ以上のプログラムがプロセッサ１０２によって実行されることで実現される。例えば、第二のプログラミング言語は、カラムストアデータベース１０６についてのプログラミング言語と同じである。具体的には、例えば、第一のプログラミング言語は、Ｃ言語であり、第二のプログラミング言語は、ＪＡＶＡ言語である。
【０１３３】
以上が、実施例２の説明である。実施例２では、様々な仕様のカラムストアデータベース１０６に対処するための機能変更は、カラム変換部１９０２の変更でよい。実施例２でも、いずれの仕様のカラムストアデータベースについても同じＦＰＧＡボード１１１を採用することが期待できる。
【０１３４】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【０１３５】
例えば、一つのＦＰＧＡコマンドに対して、一つ又は複数の処理結果が受信されてもよい。また、複数のＦＰＧＡボード１１１がサーバ装置１０１に接続されている場合、一つのクエリの実行において複数のＦＰＧＡボード１１１に複数のＦＰＧＡコマンドが並行して発行され、その結果として複数のＦＰＧＡボード１１１から複数の処理結果がサーバ装置１０１において受信されてもよい。
【０１３６】
また、例えば、ＦＰＧＡボード１１１には、サーバ装置１０１のメモリ１０３に代えて、永続記憶装置１１９から、カラムデータセットが読み出されてもよい。
【０１３７】
また、例えば、ＦＰＧＡボード以外のアクセラレータ装置として、ＦＰＧＡボード以外のＰＬＤ（Programmable Logic Device）が採用されてもよいし、ＡＳＩＣ（Application Specific Integrated Circuit）が採用されてもよい。
【符号の説明】
【０１３８】
１０１：サーバ装置
１１１：ＦＰＧＡボード
【図１】
2020098479.tif 000003
【図２】
2020098479.tif 000004
【図３】
2020098479.tif 000005
【図４】
2020098479.tif 000006
【図５】
2020098479.tif 000007
【図６】
2020098479.tif 000008
【図７】
2020098479.tif 000009
【図８】
2020098479.tif 000010
【図９】
2020098479.tif 000011
【図１０】
2020098479.tif 000012
【図１１】
2020098479.tif 000013
【図１２】
2020098479.tif 000014
【図１３】
2020098479.tif 000015
【図１４】
2020098479.tif 000016
【図１５】
2020098479.tif 000017
【図１６】
2020098479.tif 000018
【図１７】
2020098479.tif 000019
【図１８】
2020098479.tif 000020
【図１９】
2020098479.tif 000021
【図２０】
2020098479.tif 000022
【図２１】
2020098479.tif 000023