IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

特許7146611カラムストアデータベースシステム及びデータベース処理高速化方法
<>
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図1
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図2
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図3
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図4
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図5
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図6
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図7
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図8
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図9
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図10
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図11
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図12
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図13
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図14
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図15
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図16
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図17
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図18
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図19
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図20
  • 特許-カラムストアデータベースシステム及びデータベース処理高速化方法 図21
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-09-26
(45)【発行日】2022-10-04
(54)【発明の名称】カラムストアデータベースシステム及びデータベース処理高速化方法
(51)【国際特許分類】
   G06F 16/21 20190101AFI20220927BHJP
【FI】
G06F16/21
【請求項の数】 13
(21)【出願番号】P 2018236457
(22)【出願日】2018-12-18
(65)【公開番号】P2020098479
(43)【公開日】2020-06-25
【審査請求日】2021-06-25
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110002365
【氏名又は名称】特許業務法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】渡辺 聡
(72)【発明者】
【氏名】仲川 和志
(72)【発明者】
【氏名】藤川 義文
【審査官】鹿野 博嗣
(56)【参考文献】
【文献】特表2015-535999(JP,A)
【文献】特開2018-055648(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/21
(57)【特許請求の範囲】
【請求項1】
インターフェース装置、メモリ及びそれらに接続されたプロセッサを有しカラムストアデータベースを当該プロセッサにより実行する計算機システムに実現されるカラムストア処理部と、
前記インターフェース装置に接続されそれぞれメモリを有する一つ以上のアクセラレータ装置の各々において実現されるローストア処理部と
を有し、
少なくとも一つのアクセラレータ装置において、前記ローストア処理部が、
一つ以上の表の複数のカラムのカラムデータのうちの該当の一つ以上のカラムにそれぞれ対応した一つ以上のカラムデータセットを、当該アクセラレータ装置のメモリに読み出し、
前記一つ以上のカラムデータセットの各々から条件に適合する値を抽出し、
当該抽出された値で構成された一つ以上のローデータセットを含む処理結果を送信し、
前記カラムストア処理部が、
前記少なくとも一つのアクセラレータ装置から送信された一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成し、
当該一つ又は複数のカラムデータセットを前記カラムストアデータベースに送信する、
カラムストアデータベースシステム。
【請求項2】
前記一つ又は複数の処理結果の各々は、当該処理結果に含まれるローデータセットの数である結果行数を含み、
前記一つ又は複数の処理結果の各々について、
当該処理結果に含まれる結果行数が、前記カラムストア処理部により前記カラムストアデータベースに通知され、
カラム毎に、当該結果行数分の値が、当該処理結果から前記カラムストア処理部により取得される、
請求項1に記載のカラムストアデータベースシステム。
【請求項3】
前記カラムストアデータベースは、クエリ発行元から受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成し、当該生成されたクエリプランに基づいて前記クエリを実行し前記クエリの実行結果を前記クエリ発行元に返すようになっており、
前記クエリプランは、一つ以上のデータベース演算子と、データベース演算子の実行順序の関係とを含む情報であり、
前記一つ以上のデータベース演算子のうちの、前記一つ以上のアクセラレータ装置のいずれかで実行可能なデータベース演算子毎に、
前記カラムストア処理部が、当該データベース演算子の処理に必要な一つ以上のカラムのデータを前記計算機システムのメモリに読み出し、当該読み出されたデータのアドレスが記述され当該データベース演算子に基づくコマンドを、前記一つ以上のアクセラレータ装置のいずれかに送信し、
当該コマンドを受信したアクセラレータ装置における前記ローストア処理部が、当該コマンドに応答して、前記各カラムのデータについて処理が完了するまで、前記一つ以上のカラムについての一つ以上のカラムデータセットを当該アクセラレータ装置のメモリに読み出すことと、当該一つ以上のカラムデータセットの各々から条件に適合する値を抽出することと、当該一つ以上のカラムデータセットからそれぞれ抽出された一つ以上の値でそれぞれが構成されている一つ以上の値群を送信することとを行う、
請求項1に記載のカラムストアデータベースシステム。
【請求項4】
前記実行可能なデータベース演算子は、当該データベース演算子について特定される演算子属性が前記一つ以上のアクセラレータ装置の仕様に基づき定められた所定の要件を満たしているデータベース演算子であり、
前記一つ以上のデータベース演算子の各々について、前記演算子属性は、当該データベース演算子の種別と、当該データベース演算子の処理において抽出される値に関する条件と、当該データベース演算子についてのカラム属性との少なくとも一つであり、
前記一つ以上のデータベース演算子の各々について、前記カラム属性は、当該データベース演算子の処理の対象となるカラムの数と、当該データベース演算子の処理の対象となる各カラムのデータ型とのうちの少なくとも一つである、
請求項3に記載のカラムストアデータベースシステム。
【請求項5】
前記実行可能なデータベース演算子毎に、
前記カラムストアデータベースによって当該データベース演算子に基づくコマンドが生成され、
当該生成されたコマンドに、当該データベース演算子について読み出されたデータのアドレスが前記カラムストア処理部によって記述され、
当該アドレスが記述されたコマンドが、前記一つ以上のアクセラレータ装置のいずれかに前記カラムストア処理部により送信される、
請求項3に記載のカラムストアデータベースシステム。
【請求項6】
前記カラムストアデータベースに送信される前記一つ又は複数のカラムデータセットの各々について、当該カラムデータセットから取得可能な値の数は、いずれのアクセラレータ装置のメモリに読み出されるいずれのカラムデータセットから取得可能な値の数よりも多い、
請求項1に記載のカラムストアデータベースシステム。
【請求項7】
前記カラムストア処理部は、
前記一つ又は複数の処理結果から一つ又は複数のカラムデータセットを抽出するカラム抽出部と、
当該抽出された一つ又は複数のカラムデータセットを前記カラムストアデータベース向けの一つ又は複数のカラムデータセットに変換するカラム変換部と
を含み、
前記生成された一つ又は複数のカラムデータセットは、前記カラムストアデータベース向けの一つ又は複数のカラムデータセットであり、
前記カラム抽出部は、第一の管理領域で動作し、
前記カラム変換部は、前記カラムストアデータベースが動作する管理領域と同じ管理領域であり前記第一の管理領域と異なる管理領域である第二の管理領域で動作する、
請求項1に記載のカラムストアデータベースシステム。
【請求項8】
前記カラムストア処理部は、
前記一つ又は複数の処理結果から一つ又は複数のカラムデータセットを抽出するカラム抽出部と、
当該抽出された一つ又は複数のカラムデータセットを前記カラムストアデータベース向けの一つ又は複数のカラムデータセットに変換するカラム変換部と
を含み、
前記生成された一つ又は複数のカラムデータセットは、前記カラムストアデータベース向けの一つ又は複数のカラムデータセットであり、
前記カラム抽出部は、第一のプログラミング言語で記述された一つ以上のプログラムが前記プロセッサによって実行されることで実現され、
前記カラム変換部は、前記第一のプログラミング言語と異なるプログラミング言語である第二のプログラミング言語で記述された一つ以上のプログラムが前記プロセッサによって実行されることで実現される、
請求項1に記載のカラムストアデータベースシステム。
【請求項9】
前記第二のプログラミング言語は、前記カラムストアデータベースについてのプログラミング言語と同じである、
請求項8に記載のカラムストアデータベースシステム。
【請求項10】
前記第一のプログラミング言語は、C言語であり、
前記第二のプログラミング言語は、JAVA言語である、
請求項9に記載のカラムストアデータベースシステム。
【請求項11】
前記一つ以上のアクセラレータ装置は、それぞれメモリ及びFPGA(Field Programmable Gate Array)チップを有する一つ以上のFPGAボードであり、
前記一つ以上のFPGAボードの各々において、前記ローストア処理部は、当該FPGAボードのFPGAチップに実現される、
請求項1に記載のカラムストアデータベースシステム。
【請求項12】
インターフェース装置、メモリ及びそれらに接続されたプロセッサを有しカラムストアデータベースを当該プロセッサにより実行する計算機システムの前記インターフェース装置に接続されそれぞれメモリを有する一つ以上のアクセラレータ装置の少なくとも一つにより、
一つ以上の表の複数のカラムのカラムデータのうちの該当の一つ以上のカラムにそれぞれ対応した一つ以上のカラムデータセットを、当該アクセラレータ装置のメモリに読み出し、
前記一つ以上のカラムデータセットの各々から条件に適合する値を抽出し、
当該抽出された値で構成された一つ以上のローデータセットを含む処理結果を送信し、
前記プロセッサにより、
少なくとも一つのアクセラレータ装置から送信された一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成し、
当該一つ又は複数のカラムデータセットを前記カラムストアデータベースに送信する、
データベース処理高速化方法。
【請求項13】
インターフェース装置、メモリ及びそれらに接続されたプロセッサを有しカラムストアデータベースを当該プロセッサにより実行する計算機システムの前記プロセッサに、
一つ以上のアクセラレータ装置の少なくとも一つから送信された一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成し、
前記一つ以上のアクセラレータ装置の各々は、メモリを有し、ローストア処理部を当該アクセラレータ装置に実現し、
少なくとも一つのアクセラレータ装置において、前記ローストア処理部が、一つ以上の表の複数のカラムのカラムデータのうちの該当の一つ以上のカラムにそれぞれ対応した一つ以上のカラムデータセットを、当該アクセラレータ装置のメモリに読み出し、前記一つ以上のカラムデータセットの各々から条件に適合する値を抽出し、当該抽出された値で構成された一つ以上のローデータセットを含む処理結果を送信するようになっており、
前記一つ又は複数のカラムデータセットを前記カラムストアデータベースに送信する、
ことを実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、カラムストアデータベースの処理の高速化に関する。
【背景技術】
【0002】
データベース処理に関する技術として、例えば、特許文献1~3に開示の技術がある。特に、特許文献1及び2は、カラムストアデータベース処理に関する技術を開示している。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2011-209807号公報
【文献】特開2014-191593号公報
【文献】US2007/0118500
【発明の概要】
【発明が解決しようとする課題】
【0004】
カラムストアデータベースは、ローストアデータベースと比較して、次の二点の違いがある。
【0005】
第一に、カラムストアデータベースは、カラム毎に当該カラムに属する値で構成されたカラムデータを記憶装置に格納する。例えば、LINEITEM表が、L_ORDERKEY、L_PARTKEY、及び、L_SUPPKEYの三つのカラムを有する場合に、それら三つのカラムの各々についてカラムデータを記憶装置に格納する。
【0006】
第二に、カラムストアデータベースは、カラムデータセットを連続して処理する。例えば、「SELECT L_PARTKEY FROM LINEITEM WHERE L_ORDERKEY < 1000 AND L_SUPPKEY = 500」というクエリ(典型的にはSQL文)を実行する場合に、カラムストアデータベースは、「L_ORDERKEY < 1000」の条件判定を連続して実行し、「L_SUPPKEY = 500」の条件判定を連続して実行する。
【0007】
以上の二点の特徴により、カラムストアデータベースは高効率にデータベース処理を実行できる。
【0008】
データベース処理を高速化するために、Field Programmable Gate Array(以下、FPGAと略す)ボード(アクセラレータ装置の一例)を用いること、具体的には、FPGAボードがサーバ装置(計算機システムの一例)に代わってカラムデータセットを生成することを検討することができる。
【0009】
カラムデータセットを構成する値の数が多いほどデータベース処理の効率が向上する。しかしながら、サーバ装置が有するメモリの容量と、FPGAボードが有するメモリの容量を比較すると、通常、FPGAボードが有するメモリの容量の方が小さい。そのため、FPGAボードがカラムデータセットを生成する場合、少数の値しかカラムデータセットとしてまとめる(生成する)ことができない。結果として、カラムストアデータベースの処理効率が低下する問題がある。
【0010】
この問題を避ける方法として、カラムストアデータベースの処理にFPGAボードを用いない方法が考えられる。しかし、カラムデータセットを連続して処理する速度は、一般に、サーバ装置よりもFPGAボードの方が速い。このため、カラムストアデータベースの処理にFPGAボードを用いない方法でも、カラムストアデータベースの処理効率が低下する問題がある。
【0011】
以上のような問題は、FPGAボード以外のアクセラレータ装置、及び、サーバ装置以外の計算機システムについてもあり得る。
【課題を解決するための手段】
【0012】
カラムストアデータベースを実行する計算機システムにカラムストア処理部が実現され、計算機システムに関する一つ以上のアクセラレータ装置の各々にローストア処理部が実現される。少なくとも一つのアクセラレータ装置において、ローストア処理部が、一つ以上の表のうちの該当の一つ以上のカラムデータセットを、当該アクセラレータ装置のメモリに読み出し、当該一つ以上のカラムデータセットの各々から条件に適合する値を抽出し、当該抽出された値で構成された一つ以上のローストアデータセットを含む処理結果を送信する。計算機システムにおけるカラムストア処理部が、少なくとも一つのアクセラレータ装置から送信された一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成し、当該一つ又は複数のカラムデータセットをカラムストアデータベースに送信する。
【発明の効果】
【0013】
本発明により、アクセラレータ装置を利用した場合のカラムストアデータベースの処理性能が向上する。
【図面の簡単な説明】
【0014】
図1】実施例1におけるカラムストアデータベースシステムの構成の概要を示す。
図2】実施例1におけるカラムストアデータベースシステムの構成を示す。
図3】表の一例を示す。
図4】表の別の例を示す。
図5】カラムストアデータの例を示す。
図6】カラムストアデータベースが受信するクエリの例を示す。
図7】カラムストアデータベースが行う処理のフローを示す。
図8】クエリプランの例を示す。
図9図7のS703のフローを示す。
図10図9のS903のフローを示す。
図11図9のS905で生成されたFPGAコマンドの例を示す。
図12】データ読出し部が行う処理のフローを示す。
図13】コマンド送信部が行う処理のフローを示す。
図14】FPGA制御部が行う処理のフローを示す。
図15】データ処理部が行う処理のフローを示す。
図16】結果送信部が行う処理のフローを示す。
図17】処理結果の論理的な構成を示す。
図18】カラムデータ生成部が行う処理のフローを示す。
図19】実施例2におけるカラムストアデータベースシステムの構成を示す。
図20】カラム抽出部が行う処理のフローを示す。
図21】カラム変換部が行う処理のフローを示す。
【発明を実施するための形態】
【0015】
以下の説明では、「インターフェース装置」は、一つ以上のインターフェースデバイスでよい。
【0016】
また、以下の説明では、「メモリ」は、一つ以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも一つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
【0017】
また、以下の説明では、「永続記憶装置」は、一つ以上の永続記憶デバイスである。永続記憶デバイスは、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)であり、具体的には、例えば、HDD(Hard Disk Drive)又はSSD(Solid State Drive)である。
【0018】
また、以下の説明では、「記憶装置」は、メモリと永続記憶装置の少なくともメモリでよい。
【0019】
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサデバイスである。少なくとも一つのプロセッサデバイスは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサデバイスであるが、GPU(Graphics Processing Unit)のような他種のプロセッサデバイスでもよい。少なくとも一つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサデバイスは、プロセッサコアでもよい。
【0020】
また、以下の説明では、「kkk部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、一つ以上のハードウェア回路(例えばFPGA又はASIC)によって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置及び/又はインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体(例えば非一時的な記録媒体)であってもよい。各機能の説明は一例であり、複数の機能が一つの機能にまとめられたり、一つの機能が複数の機能に分割されたりしてもよい。
【0021】
また、以下の説明では、「計算機システム」は、一つ以上の物理的な計算機でもよいし、少なくとも一つの物理的な計算機が所定のソフトウェアを実行することで実現されるソフトウェアディファインドのシステムでもよい。
【0022】
また、以下の説明では、「表」は、複数のカラムと一つ以上のローとで構成されており、各ローには、複数のカラムにそれぞれ属する複数の値が格納される。表において、「値」は、数値に限らず、例えば文字列でもよく、典型的には、データ型(例えば、“INTEGER”)に従う種類の値である。
【0023】
また、以下の説明では、表の各カラムについて、「カラムデータ」とは、当該カラム全体についてのデータであり、当該カラムに属する値で構成されるカラム形式のデータである。各カラムについて、「カラムデータセット」は、当該カラムについてのカラムデータの全部又は一部である。複数のカラムの各々のカラムデータとそれらのメタデータとで構成されたデータ(例えば図5に例示のデータ)を、「カラムストアデータ」と呼ぶことができる。また、以下の説明では、カラム名“α”のカラムに属する値を、「α値」と呼ぶことがある。
【0024】
また、以下の説明では、表の各ローについて、「ローデータ」とは、当該ロー全体についてのデータであって、当該ローに属する値で構成されるロー形式のデータである。各ローについて、「ローデータセット」は、当該ローについてのローデータの全部又は一部である。
【0025】
また、以下の説明では、「カラムストアデータベース」とは、いわゆるカラムナデータベースであり、列指向データベース管理システムである。カラムストアデータベースが受け付けるクエリの発行元は、カラムストアデータベースの外部のコンピュータプログラム(例えばアプリケーションプログラム)でよい。外部のコンピュータプログラムは、計算機システム内で実行されるプログラムでもよいし、計算機システムに接続された装置(例えばクライアント)で実行されるプログラムでもよい。
【0026】
以下、幾つかの実施例を説明する。以下の実施例では、計算機システムの一例としてサーバ装置が採用され、アクセラレータ装置の一例としてFPGAボードが採用される。サーバ装置のインターフェース装置に一つ又は複数のFPGAボードが接続可能であるが、以下の実施例では、説明の簡単化のために、サーバ装置に接続されるFPGAボードは一つとする。
【実施例1】
【0027】
図1は、実施例1におけるカラムストアデータベースシステムの構成の概要を示す。
【0028】
カラムストアデータベースシステムは、サーバ装置101に実現されるカラムストア処理部250と、FPGAボード111に実現されるローストア処理部260とを有する。サーバ装置101は、インターフェース装置105、メモリ103、及び、それらに接続されたプロセッサ102を有する。FPGAボード111は、インターフェース装置112、メモリ114、及び、それらに接続されたFPGAチップ116を有する。FPGAボード111には、更にFPGA制御部115も実現される。FPGAボード111のインターフェース装置112が、サーバ装置101のインターフェース装置105に接続される。
【0029】
サーバ装置101のプロセッサ102が、カラムストアデータベースシステム6を実行する。また、プロセッサ102が一つ以上のプログラムを実行することでカラムストア処理部250が実現される。カラムストアデータベース106が、クエリ発行元からクエリを受け付け、当該クエリを実行する。当該クエリの実行処理において、カラムストアデータベース106が、FPGAボード111に対するコマンド(以下、FPGAコマンド)を発行する。カラムストア処理部250が、当該FPGAコマンドを必要に応じて加工し(例えば後述するようにアドレスを追記し)、当該FPGAコマンドをFPGAボード111に送信する。
【0030】
FPGA制御部115は、例えばメモリ114内の一つ以上のプログラムがFPGAチップ116内のソフトプロセッサ(図示せず)に実行されることで実現される。ローストア処理部260は、処理の高速化実現のため、例えばFPGAチップ116に対するコンフィグデータに従いFPGAチップ116に実現(構築)される。FPGA制御部115が、サーバ装置101からのFPGAコマンドを基にローストア処理部260を開始する。ローストア処理部260は、FPGAコマンドを基に、一つ以上の表の複数のカラムのカラムデータのうちの該当の一つ以上のカラム(例えば、L_PARTKEY、L_SUPPKEY、…)にそれぞれ対応した一つ以上のカラムデータセットをメモリ114に読み出し、当該一つ以上のカラムデータセットの各々から条件に適合する値を抽出し、当該抽出された値で構成された一つ以上のローデータセットを含む処理結果を送信する。当該処理結果は、FPGA制御部115経由又は非経由で、サーバ装置101に送信される。
【0031】
サーバ装置101において、カラムストア処理部250が、FPGAボード111からの一つ又は複数の処理結果から、一つ又は複数のカラムデータセットを生成し、当該一つ又は複数のカラムデータセットをカラムストアデータベース106に送信する。
【0032】
本実施例によれば、サーバ装置101に代えてFPGAボード111が、一つ以上のカラムデータセットの各々を連続して処理する。このようにFPGAボード111が利用された場合、FPGAボード111の一つ又は複数の処理結果から一つ以上のカラムデータセットを生成することは、FPGAボード111に代えてサーバ装置101が行う。これにより、カラムストアデータベース106が処理するカラムデータセットを構成する値の数を、FPGAボード111がカラムデータセットを生成することに比べて増やすことが可能になる。結果として、カラムストアデータベース106の処理効率を向上することが可能になる。
【0033】
以下、本実施例を詳細に説明する。
【0034】
図2は、実施例1におけるカラムストアデータベースシステムの構成を示す。
【0035】
サーバ装置101のインターフェース装置105とFPGAボード111のインターフェース装置112同士の接続は、コネクタ同士の接続のような直接的な接続でもよいし、PCI(Peripheral Component Interconnect)バスのような通信媒体を介した間接的な接続でもよい。
【0036】
サーバ装置101及びFPGAボード111のうちの少なくともサーバ装置101に、一つ以上の表の各々についてカラムストアデータ120を格納した永続記憶装置119が接続される。
【0037】
サーバ装置101において、カラムストア処理部250は、一つ以上のカラムのカラムデータをメモリ103に読み出すデータ読出し部107、FPGAコマンドを送信するコマンド送信部108、処理結果中の少なくとも結果行数を受信する結果受信部110、及び、一つ以上のカラムデータセットを生成するカラム生成部109を含む。
【0038】
FPGAボード111において、ローストア処理部260は、カラムデータセットをメモリ114に読み出し当該カラムデータセットから条件に適合する値を抽出するデータ処理部117、及び、抽出された値で構成されたローデータセットを含む処理結果を送信する結果送信部118を含む。
【0039】
このカラムストアデータベースシステムでは、カラムストアデータベース106が、クエリ発行元からクエリ(典型的にはSQL文)を受け付け、当該クエリの処理の一部をFPGAボード111に実行させ、当該クエリの実行結果を、クエリ発行元に返す。
【0040】
図3は、表の一例を示す。
【0041】
当該表は、LINEITEM表であり、複数のカラムとして、L_ORDERKEY、L_PARTKEY、及び、L_SUPPKEYの三つのカラムを有する。
【0042】
図4は、表の別の例を示す。
【0043】
当該表は、PART表であり、複数のカラムとして、P_PARTKEY、P_SIZE、及び、P_RETAILPRICEの三つのカラムを有する。
【0044】
図5は、カラムストアデータ120の例を示す。
【0045】
図5に例示のカラムストアデータ120は、LINEITEM表のカラムストアデータ(典型的にはファイル)である。カラムストアデータ120は、メタデータ501と、当該カラムストアデータに対応した表の複数のカラムの各々についてのカラムデータ502とで構成される。
【0046】
メタデータ501は、表名511、格納カラム名512、行数513、カラムデータ型514及びカラムオフセット515といった情報を含む。表名511は、このカラムストアデータ120に含まれるの表の名称を示す。格納カラム名512は、当該表を構成する複数のカラムの各々の名称を示す。行数513は、当該表を構成する行(ロー)の数を示す。カラムデータ型514は、当該表を構成する複数のカラムの各々について当該カラムに属する値のデータ型を示す。カラムオフセット515は、当該表を構成する複数のカラムの各々について当該カラムのカラムデータ502の先頭の値の位置(当該カラムストアデータ120における位置)を示す。
【0047】
複数のカラムの各々について、当該カラムのカラムデータ502は、当該カラムに属する値で構成されている。
【0048】
図6は、カラムストアデータベース106が受信するクエリの例を示す。
【0049】
図6に例示のクエリによれば、LINEITEM表及びPART表が参照され、「L_PARTKEY = P_PARTKEY」、「L_ORDERKEY < 1000」、及び、「P_SIZE = 50」という条件に適合するP_RETAILPRICE値がP_RETAILPRICEのカラムデータから選択される。
【0050】
以下、本実施例で行われる処理の一例を説明する。なお、以下の説明では、図6に例示のクエリをカラムストアデータベース106が受け付けるとする。
【0051】
図7は、カラムストアデータベース106が行う処理のフローを示す。
【0052】
カラムストアデータベース106は、クエリをクエリ発行元から受け付ける(S701)。
【0053】
カラムストアデータベース106は、受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成する(S702)。クエリプランは、例えば、一つ以上のデータベース演算子と、データベース演算子の実行順序の関係を含む情報である。
【0054】
カラムストアデータベース106は、生成されたクエリプランに基づいてクエリを実行する(S703)。S703では、FPGAボード111から受信する一つ又は複数の処理結果が含む一つ以上(典型には複数)のローデータセットが、カラム生成部109によりカラムストアデータベース106向けに一つ以上(典型的には複数)のカラムデータセットに変換され、当該一つ以上のカラムデータセットを含む複数のカラムデータセットを基にカラムストアデータベース106によりクエリ実行結果(クエリに対する応答)が生成される。クエリ実行結果は、例えばロー形式のデータである。
【0055】
カラムストアデータベース106は、当該クエリ実行結果をクエリ発行元に返す(S704)。
【0056】
図8は、S702で生成されたクエリプランの例を示す。
【0057】
本実施例では、クエリプランは、データベース演算子をノード801、データベース演算子の実行順序の関係をエッジ802とする木構造で表される。各ノード801は、ノード種別811、表名812、条件813及び抽出カラム名814のうちの少なくとも一つといった情報を含む。以下、一つのノード801を例に取る(図8の説明において「対象ノード801」)。
【0058】
ノード種別811は、対象ノード801の種別(データベース演算子の種別)を示す。表名812は、対象ノード801の処理において参照される一つ以上の表の各々の名称を示す。
【0059】
条件813は、対象ノード801の処理において抽出される値についての条件を示す。条件813は、ノード種別811に依存する。例えば、ノード種別811が“FILTER”であれば、条件813は、フィルタ条件を意味する。また、例えば、ノード種別811が“JOIN”であれば、条件813は、結合条件を意味する。
【0060】
抽出カラム名814は、対象ノード801の処理において抽出される値の抽出元のカラムの名称を示す。
【0061】
図9は、図7のS703のフローを示す。
【0062】
カラムストアデータベース106は、クエリプランの最終のノード801を処理済か否かを判断する(S901)。
【0063】
S901の判断結果が偽の場合(S901:NO)、カラムストアデータベース106は、クエリプランにおける一つ以上の未処理のノード801のうちの最先のノード801を取得し(S902)、当該ノード801がFPGAボード111で実行可能なノード801か否かを判断する(S903)。S903の判断結果が偽の場合(S903:NO)、カラムストアデータベース106は、当該ノード801を実行する(S904)。当該ノード801の実行結果として得られた一つ以上のカラムデータセットが、メモリ103に格納される。
【0064】
S903の判断結果が真の場合(S903:YES)、カラムストアデータベース106は、FPGAコマンドを生成し(S905)、当該FPGAコマンドを発行する(S906)。発行されたFPGAコマンドは、データ読出し部107を介してコマンド送信部108に送信され、コマンド送信部108からFPGAボード111に送信される。
【0065】
カラムストアデータベース106は、S906で発行されたFPGAコマンドに対する応答としてカラム生成部109から一つ以上のカラムデータセットを受信する(S907)。受信された一つ以上のカラムデータセットはメモリ103に格納される。その後、処理がS901に戻る。
【0066】
S901の判断結果が真の場合(S901:YES)、カラムストアデータベース106は、S904やS907においてメモリ103に格納された全てのカラムデータセットを基にクエリ実行結果(例えばロー形式のデータ)を生成する(S908)。この結果、S703が終了する。
【0067】
図10は、図9のS903のフローを示す。図10の説明において、一つのノード801を例に取る(図10の説明において「対象ノード801」)。また、本実施例では、カラムストアデータベース106に対して、FPGAボード111で実行可能なノードに関する属性(ここでは、ノード種別811、条件812及びカラム数についてのパラメータ)を示す設定データが関連付けられており、S903では、当該設定データが適宜参照されるとする。設定データの中身(すなわち、FPGAボード111で実行可能なノードに関する属性としてのパラメータ)は、典型的には、FPGAボード111に依存する。
【0068】
カラムストアデータベース106は、対象ノード801のノード種別811が、FPGAボード111で実行可能な種別(設定データが示すノード種別)に適合するか否かを判断する(S1001)。「FPGAボード111で実行可能な種別」は、FPGAボード111の構成(典型的には、FPGAチップ116に実現されるローストア処理部260の構成)に依存する。具体的には、例えば、ノード種別811が、カラムストアデータベース106の中身を知らなくても処理設計が可能な種別(例えば、“FILTER”又は“AGGREGATION”)であれば、S1001の判断結果は真となる。一方、ノード種別811が、カラムストアデータベース106の中身を知らないと処理設計が不可能な種別(例えば、“JOIN”)であれば、S1001の判断結果は偽となる。S1001の判断結果が偽の場合(S1001:NO)、S903の判断結果も偽となる。
【0069】
S1001の判断結果が真の場合(S1001:YES)、カラムストアデータベース106は、対象ノード801の条件812が、FPGAボード111で実行可能な条件(設定データが示す条件)に適合するか否かを判断する(S1002)。例えば、条件812が、“P_SIZE = 50”のような数値の等価演算子であれば、S1002の判断結果が真となり、条件812が、文字列の正規表現の検索に関するものであれば、S1002の判断結果が偽となる。S1002の判断結果が偽の場合(S1002:NO)、S903の判断結果も偽となる。
【0070】
S1002の判断結果が真の場合(S1002:YES)、カラムストアデータベース106は、対象ノード801の抽出カラム名814から特定されるカラム数が、FPGAボード111で実行可能なカラム数(設定データが示すカラム数)に適合するか否かを判断する(S1003)。当該実行可能なカラム数は、FPGAボード111(例えば、論理の大きさやメモリ114の容量)に依存する。S1003の判断結果が偽の場合(S1003:NO)、S903の判断結果も偽となる。
【0071】
S1003の判断結果が真の場合(S1003:YES)、S903の判断結果も真となる。
【0072】
図11は、図9のS905で生成されたFPGAコマンドの例を示す。図11に例示のFPGAコマンドに対応したノード801を、図11の説明において「対象ノード801」と言う。
【0073】
FPGAコマンドは、例えば、ファイル名1101、表名1102、ノード種別1103、条件1104、抽出カラム名1105及びデータアドレス1106といった情報を含む。
【0074】
ファイル名1101は、データ読出し元のカラムストアデータ120としてのファイルの名称を示す。表名1102は、当該カラムストアデータ120に関しデータ読出し元の表の名称を示し、対象ノード801に含まれる表名812と同じである。ノード種別1103は、対象ノード801に含まれるノード種別811と同じである。条件1104は、対象ノード801に含まれる条件813と同じである。抽出カラム名1105は、対象ノード801に含まれる抽出カラム名814と同じである。
【0075】
データアドレス1106は、読出し元のカラムデータのアドレスを示す。本実施例では、FPGAボード111により読み出されるカラムデータセットを含むカラムデータは、後述するように、データ読出し部107により永続記憶装置119内のカラムストアデータ120からサーバ装置101のメモリ103に読み出されるため、データアドレス1106は、当該メモリ103における領域のアドレスを示す。図9のS905で生成されたFPGAコマンドでは、データアドレス1106はブランクである。データアドレス1106は、データ読出し部107により記述される。
【0076】
図12は、データ読出し部107が行う処理のフローを示す。
【0077】
データ読出し部107は、S905で発行されたFPGAコマンドのファイル名1101が示すカラムストアデータ120のメタデータ501を永続記憶装置119からメモリ103に読み出す(S1201)。
【0078】
データ読出し部107は、当該メタデータ501と、当該FPGAコマンドの表名1102、条件1104及び抽出カラム名1105とを基に、当該FPGAコマンドの処理に必要なカラムのカラムデータ502を永続記憶装置119からメモリ103に読み出す(S1202)。例えば、条件1104及び抽出カラム名1105から特定される全てのカラムのカラムデータ502がメモリ103に読み出される。
【0079】
データ読出し部107は、S1202で読み出したカラムデータ502の格納領域のアドレスを、当該FPGAコマンドにデータアドレス1106として記述する(S1203)。
【0080】
データ読出し部107は、データアドレス1106が記述されたFPGAコマンドを、コマンド送信部108に送信する(S1204)。
【0081】
図13は、コマンド送信部108が行う処理のフローを示す。
【0082】
コマンド送信部108は、データ読出し部107からのFPGAコマンドの抽出カラム名1105と、当該抽出カラム名1105が示す各カラムについて、メモリ103に読み出されているメタデータ501のカラムデータ型514から特定されるデータ型とを、カラム生成部109に対して設定する(S1301)。
【0083】
コマンド送信部108は、当該FPGAコマンドを、FPGAボード111のFPGA制御部115に送信する(S1302)。
【0084】
図14は、FPGA制御部115が行う処理のフローを示す。
【0085】
FPGA制御部115が、FPGAコマンドに応答して、データ処理部117に処理を開始させ(S1401)、データ処理部117の処理の完了を待つ(S1402)。S1401では、当該FPGAコマンド内のノード種別1103、条件1104、抽出カラム名1105及びデータアドレス1106がデータ処理部117に通知される。
【0086】
データ処理部117の処理が完了したら、FPGA制御部115は、メモリアドレスと結果行数とを結果受信部110に通知する(S1403)。当該メモリアドレスは、FPGAボード111(ローストア処理部260)によりサーバ装置101のメモリ103に格納された処理結果の格納領域のアドレスを示す。結果行数は、当該処理結果に含まれる結果行数を示す。FPGA制御部115から結果受信部110に通知されるメモリアドレス及び結果行数は、後述のS1606においてローストア処理部260(具体的には結果送信部118)からFPGA制御部115に通知されたメモリアドレス及び結果行数である。結果行数は、例えば、FPGAコマンド内の条件1104が“P_SIZE = 50”の場合、当該条件1104に該当したP_SIZE値の数である。
【0087】
図15は、データ処理部117が行う処理のフローを示す。
【0088】
データ処理部117が、FPGA制御部115から通知されたデータアドレス1106が示す領域の全てのカラムデータ(サーバ装置101のメモリ103に読み出されているカラムデータ)から、処理に必要な全てのカラムの各々について、このフローにおいて未だメモリ114に読み出されたことがないカラムデータセットを、FPGAボード111のメモリ114に、例えばDMA(Direct Memory Access)によりコピーする(S1501)。ここで言う「処理に必要な全てのカラム」は、条件1104及び抽出カラム名1105から特定される全てのカラムである。例えば、処理対象のFPGAコマンドが図11に例示のFPGAコマンドの場合、「処理に必要な全てのカラム」は、P_SIZE、P_PARTKEY及びP_RETAILPRICEである。各カラムについて、S1501で読み出されたカラムデータセットを構成する値の最大数は、メモリ114の容量(例えばメモリ114に設けられるバッファの容量)に応じた数でよい。具体的には、例えば、各カラムについて、サーバ装置101のメモリ103に読み出されているカラムデータを構成する値の数が10,000であり、S1501で読み出されたカラムデータセットを構成する値の最大数が1,000の場合、当該カラムデータの全ての処理のために、S1501のコピーが、10回(=10,000/1,000)行われることになる。
【0089】
データ処理部117は、条件1104から特定されるカラムのカラムデータセットの未処理の値(S1502の条件判定が行われていない値)のうちの先頭の値について、条件1104に従う条件判定を行う(S1502)。例えば、条件1104が“P_SIZE = 50”の場合、条件判定は、当該先頭のP_SIZE値が50か否かの判定である。
【0090】
S1502の条件判定の結果が真の場合(S1502:YES)、データ処理部117は、条件判定の結果が真となった値に対応した抽出カラム値群(一つ以上の抽出カラム値)を結果送信部118に送信する(S1503)。例えば、条件1104が“P_SIZE = 50”で、抽出カラム名1105が“P_PARTKEY”及び“P_RETAILPRICE”の場合、「抽出カラム値群」は、P_SIZE値“50”が属するローに属するP_PARTKEY値とP_RETAILPRICE値という二つの値である。
【0091】
S1503の後(又は、S1502の条件判定の結果が偽(S1502:NO)のためにS1503がスキップされた後)、データ処理部117は、各カラムについて、S1501で取得されたカラムデータセットに未処理の値があるか否かを判断する(S1504)。S1504の判断結果が真の場合(S1504:YES)、処理がS1502に戻る。
【0092】
S1504の判断結果が偽の場合(S1504:NO)、データ処理部117は、処理に必要な全てのカラムの各々について、このフローにおいて未だメモリ114に読み出されたことがないカラムデータセットがあるか否かを判断する(S1505)。S1505の判断結果が真の場合(S1505:YES)、処理がS1501に戻る。
【0093】
S1505の判断結果が偽の場合(S1505:NO)、データ処理部117は、処理の完了をFPGA制御部115及び結果送信部118に通知する(S1506)。
【0094】
図16は、結果送信部118が行う処理のフローを示す。
【0095】
結果送信部118は、S1503でデータ処理部117から送信された抽出カラム値群を受信した場合、当該受信した抽出カラム値群を、バッファ(例えばメモリ114から確保しされている領域)に格納する(S1601)。その際、結果送信部118は、抽出カラム値群を受信したカウント値(初期値は例えば“0”)をインクリメントする。このカウント値が、結果行数に相当する。
【0096】
結果送信部118は、バッファが満杯か否かを判断する(S1602)。S1602の判断結果が真の場合(S1602:YES)、結果送信部118は、バッファ内の全ての抽出カラム値群を、サーバ装置101に送信する(S1603)。S1603では、例えば、バッファ内の全ての抽出カラム値群が、DMAによりサーバ装置101のメモリ103に送信される。S1603が行われた場合、バッファは空となる。
【0097】
S1602の判断結果が偽の場合(S1602:NO)、又は、S1603の後、結果送信部118は、データ処理部117から処理の完了の通知を受けたか否かを判断する(S1604)。S1604の判断結果が偽の場合(S1604:NO)、処理がS1601に戻る。
【0098】
S1604の判断結果が真の場合(S1604:YES)、結果送信部118は、バッファ内の全ての抽出カラム値群と、結果行数とを含んだ処理結果を、サーバ装置101に送信する(S1605)。S1605でも、例えば、S1603と同様に、バッファ内の全ての抽出カラム値群が、DMAによりサーバ装置101のメモリ103に送信される。
【0099】
結果送信部118は、メモリアドレス及び結果行数をFPGA制御部115に通知する(S1606)。メモリアドレスは、S1603やS1605で送信された抽出カラム値群の格納領域(サーバ装置101のメモリ103における領域)のアドレスである。S1606が行われた場合、結果行数としてのカウント値が初期値にリセットされる。
【0100】
図17は、処理結果の論理構成を示す。
【0101】
FPGAコマンドの処理結果は、FPGAボード111から通知された結果行数と、FPGAボード111からサーバ装置101のメモリ103に格納された一つ以上の抽出カラム値群とで構成される。一つの抽出カラム値群は、一つの行に対応する一つのローデータセットに相当する。このような構成から、処理結果は、一つ以上のローデータセットを含むデータであると言える。
【0102】
なお、S1603及びS1605の各々で、抽出カラム値群の他に結果行数もサーバ装置101に送信されてもよい(つまり、結果行数を含む処理結果がサーバ装置101に送信されてもよい)。この場合、サーバ装置101(例えばカラム生成部109)は、一つのFPGAコマンドについて受信した全ての結果行数の合計を、当該FPGAコマンド(対応するノード)についての結果行数と扱うことができる。
【0103】
図18は、カラム生成部109が行う処理のフローを示す。
【0104】
FPGA制御部115から結果受信部110が受信したメモリアドレス及び結果行数は、結果受信部110からカラム生成部109に通知され、カラム生成部109が、当該結果行数をカラムストアデータベース106に通知する(S1801)。
【0105】
カラム生成部109は、N=1を設定する(S1802)。Nは、カラムの番号である。ここでは、便宜上、一つの処理結果について、FPGAボード111からメモリ103に格納された抽出カラム値群が属する全てのカラムに“1”からシーケンシャルな番号が割り振られるとする。
【0106】
カラム生成部109は、N番目のカラムに属しカラムストアデータベース106に未送信の抽出カラム値のうち先頭の抽出カラム値を取得し(例えば、結果受信部110からのメモリアドレスを基に取得し)、取得された抽出カラム値をカラムストアデータベース106に送信する(S1803)。カラム生成部109は、N番目のカラムについてすべての抽出カラム値を送信したか否か(送信した抽出カラム値の数が結果行数に達したか)を判断する(S1804)。S1804の判断結果が偽の場合(S1804:NO)、処理がS1803に戻る。S1804の判断結果が真の場合(S1804:YES)、N番目のカラムについて、N番目のカラムに属する全ての抽出カラム値(結果行数分の抽出カラム値)で構成されたデータセットであるカラムデータセットが、カラムストアデータベース106に送信されたことになる。なお、S1801で結果行数がカラムストアデータベース106に通知されているので、カラムストアデータベース106は、N番目のカラムについて抽出カラム値を受信する都度に、受信した抽出カラム値の数をカウントし、カウント値が結果行数に達したら、N番目のカラムについて全ての抽出カラム値を受信したこと(つまりカラムデータセットを受信したこと)を検知できる。
【0107】
S1804:YESの場合、カラム生成部109は、全てのカラムについてカラムデータセットの送信が完了したか否かを判断する(S1805)。S1805の判断結果が偽の場合(S1805:NO)、Nが、カラム生成部109によりN+1に更新され(S1806)、処理がS1803に戻る。S1805の判断結果が真の場合(S1805:YES)、処理が終了する。
【0108】
図17に例示の処理結果を例に取ると、図18のフローでは、1番目のカラムであるP_PARTKEYについて、奇数番目のアドレスにある抽出カラム値がP_PARTKEY値であり、2番目のカラムの一例であるP_RETAILPRICEについて、偶数番目のアドレスにある抽出カラム値が、P_RETAILPRICE値である。
【0109】
なお、図18には示していないが、カラム生成部109は、カラム毎にカラムデータセットをカラムストアデータベース106に送信する際に、当該カラムデータセットをカラムストアデータベース106向けに変換してから送信してもよいし(その変換は、例えば図13のS1301で登録されたカラム名とデータ型を基に行われ)、カラム毎にカラムデータセットをカラムストアデータベース106に送信することに代えて、複数のカラムデータセットをまとめて(例えばカラムストアデータベース106向けに変換した上で)カラムストアデータベース106に送信してもよい。
【0110】
以上の実施例1を、例えば下記のように総括することができる。
【0111】
一つ又は複数の処理結果の各々は、当該処理結果に含まれる抽出カラム値群(ローデータセットの一例)の数である結果行数を含む。一つ又は複数の処理結果の各々について、当該処理結果に含まれる結果行数が、カラムストア処理部250によりカラムストアデータベース106に通知され、カラム毎に、当該結果行数分の値が、処理結果からカラムストア処理部250により取得される。このようにして、各カラムについて、カラムデータセットがサーバ装置101において生成されることになる。
【0112】
カラムストアデータベース106は、クエリ発行元から受け付けたクエリに基づいて当該クエリを実行するために必要なクエリプランを生成し、当該生成されたクエリプランに基づいてクエリを実行し当該クエリの実行結果をクエリ発行元に返すようになっている。クエリプランは、一つ以上のノード801(データベース演算子)と、ノード801の実行順序の関係とを含む情報である。FPGAボード111で実行可能なノード801毎に、下記が行われる。
・カラムストア処理部250が、当該ノード801の処理に必要な一つ以上のカラムのデータをメモリ103に読み出し、当該読み出されたデータのアドレス1106が記述され当該ノード801に基づくFPGAコマンドを、FPGAボード111(一つ以上のアクセラレータ装置のいずれかの一例)に送信する。
・当該FPGAコマンドを受信したFPGAボード111におけるローストア処理部260が、当該FPGAコマンドに応答して、各カラムのデータについて処理が完了するまで、各カラムのカラムデータセットをメモリ114に読み出すことと、一つ以上の抽出カラムのカラムデータセットの各々から条件1104に適合する抽出カラム値を抽出することと、当該一つ以上のカラムデータセットからそれぞれ抽出された一つ以上の抽出カラム値でそれぞれが構成されている一つ以上の抽出カラム値群を送信することとを行う。
【0113】
「FPGAボード111で実行可能なノード801」は、当該ノード801について特定されるノード属性(演算子属性の一例)がFPGAボード111の仕様(例えば、メモリ114の容量、及び、FPGAチップ116の規模)に基づき定められた所定の要件を満たしているノード801である。各ノード801について、ノード属性は、ノード種別811と、条件813と、カラム属性との少なくとも一つである。各ノード801について、カラム属性は、当該ノード801の処理の対象となるカラムの数(抽出カラム名814から特定されるカラムの数の一例)と、当該ノード801の処理の対象となる各カラムのデータ型とのうちの少なくとも一つである。
【0114】
FPGAボード111で実行可能なノード801毎に、下記が行われる。
・カラムストアデータベース106によって当該ノード801に基づくFPGAコマンドが生成される。
・当該生成されたFPGAコマンドに、当該ノード801について読み出されたデータのアドレス1106がカラムストア処理部250によって記述される。
・当該アドレス1106が記述されたFPGAコマンドが、FPGAボード111にカラムストア処理部250により送信される。
【0115】
カラムストアデータベースシステム6に送信される一つ又は複数のカラムデータセットの各々について、当該カラムデータセットから取得可能な値(抽出カラム値)の数は、FPGAボード111のメモリ114に読み出されるいずれのカラムデータセットから取得可能な値の数よりも多い。つまり、サーバ装置101では、各カラムについて多くの値をカラムデータセットとしてまとめることができる。
【0116】
以上が、実施例1の説明である。カラムストアデータベース106として様々な仕様のカラムストアデータベースが考えられるが、いずれの仕様のカラムストアデータベースがカラムストアデータベース106として採用されても、カラム生成部109の変更で対処することが期待できる、言い換えれば、同じFPGAボード111を採用することが期待できる。カラムストア処理部250は、FPGAボード111からの応答(処理結果)をデバッグダンプとしてメモリ103(又は永続記憶装置119)に格納してよい。
【実施例2】
【0117】
実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略又は簡略する。
【0118】
図19は、実施例2におけるカラムストアデータベースシステムの構成を示す。
【0119】
カラムストア処理部250が、カラム生成部109に代えて、カラム抽出部1901とカラム変換部1902とを含む。カラム抽出部1901は、一つ又は複数の処理結果から一つ又は複数のカラムデータセットを抽出する。カラム変換部1902は、当該抽出された一つ又は複数のカラムデータセットをカラムストアデータベース106向けの一つ又は複数のカラムデータセットに変換する。カラム抽出部1901は、第一の管理領域1911で動作する。カラム変換部1902は、カラムストアデータベース106が動作する管理領域と同じ管理領域であり第一の管理領域1911と異なる管理領域である第二の管理領域1912で動作する。
【0120】
サーバ装置101で動作するソフトウェアの管理領域として、FPGAボード111との通信を高速に実行できる第一の管理領域1911と、カラムストアデータベース106との通信を高速に実行できる第二の管理領域1912とが存在する。例えば、C言語で開発された機能は、FPGAボード111との通信を高速に実行可能であり、JAVA言語で開発された機能は、カラムストアデータベース106との通信を高速に実行できる、といった場合がある(「JAVA」は登録商標)。詳細に述べると、例えば、C言語によれば、JAVA言語と違い、メモリに関し連続したアドレス(連続したアドレス空間)を確保できるため、FPGAボード111からDMAでデータをサーバ装置101のメモリ103に送信する機能を記述することができる。一方、JAVA言語によれば、C言語に比べてソフトウェア開発効率が高く、故に、例えば、カラムストアデータベース106は、JAVAのOSS(Open Source Software)である。
【0121】
このような場合に、第一の管理領域1911と第二の管理領域1912の間の通信回数が増大するとカラムストアデータベース106の処理性能が低下する問題が生じる。例えば、一比較例では、第一の管理領域1911と第二の管理領域1912間で、抽出カラム値毎に、通信が発生する。具体的には、例えば、抽出カラム値毎に、JNI(Java Native Interface)が呼び出される。
【0122】
そこで、本実施例では、上述したように、カラム生成部109に代えて、第一の管理領域1911に対して、FPGAボード111からの処理結果からカラムデータセットを抽出するカラム抽出部1901が用意され、カラムストアデータベース106が動作する第二の管理領域1912に対して、抽出されたカラムデータセットをカラムストアデータベース106向けに変換するカラム変換部1902が用意される。これにより、第一の管理領域1911と第二の管理領域1912の間の通信回数が上記比較例に比べて削減される。これにより、通信回数の増大によりカラムストアデータベース106の処理性能が低下することを抑えることが可能になる。
【0123】
図20は、カラム抽出部1901が行う処理のフローを示す。
【0124】
FPGA制御部115から結果受信部110が受信したメモリアドレス及び結果行数は、結果受信部110からカラム抽出部1901に通知され、カラム抽出部1901が、当該結果行数をカラム変換部1902に通知する(S2001)。
【0125】
カラム抽出部1901は、N=1を設定する(S2002)。Nは、カラムの番号である。
【0126】
カラム抽出部1901は、N番目のカラムに属しカラム変換部1902に未送信の抽出カラム値のうち先頭の抽出カラム値をメモリ103から抽出してバッファ(例えばメモリ103に設けられたバッファ)に格納する(S2003)。当該抽出は、例えば、結果受信部110からのメモリアドレスを基に行われる。カラム抽出部1901は、バッファ内の抽出カラム値をカラム変換部1902に送信し(S2004)、バッファを空にする(S2005)。
【0127】
カラム抽出部1901は、N番目のカラムについてすべての抽出カラム値を送信したか否か(送信した抽出カラム値の数が結果行数に達したか)を判断する(S2006)。S2006の判断結果が偽の場合(S2006:NO)、処理がS2003に戻る。S2006の判断結果が真の場合(S2006:YES)、N番目のカラムについて、N番目のカラムに属する全ての抽出カラム値(結果行数分の抽出カラム値)で構成されたデータセットであるカラムデータセットが、カラム変換部1902に送信されたことになる。なお、S2001で結果行数がカラム変換部1902に通知されているので、カラム変換部1902は、N番目のカラムについて抽出カラム値を受信する都度に、受信した抽出カラム値の数をカウントし、カウント値が結果行数に達したら、N番目のカラムについて全ての抽出カラム値を受信したこと(つまりカラムデータセットを受信したこと)を検知できる。
【0128】
S2006:YESの場合、カラム抽出部1901は、全てのカラムについてカラムデータセットの送信が完了したか否かを判断する(S2007)。S2007の判断結果が偽の場合(S2007:NO)、Nが、カラム抽出部1901によりN+1に更新され(S2008)、処理がS2003に戻る。S2007の判断結果が真の場合(S2007:YES)、処理が終了する。
【0129】
図21は、カラム変換部1902が行う処理のフローを示す。
【0130】
結果行数がカラム抽出部1901からカラム変換部1902に通知され、カラム変換部1902が、当該結果行数をカラムストアデータベース106に通知する(S2101)。
【0131】
カラム変換部1902は、カラム抽出部1901からの一つ以上のカラムデータセットを、カラムストアデータベース106向けに変換し(S2102)、変換された一つ以上のカラムデータセットをカラムストアデータベース106に送信する(S2103)。例えば、カラム変換部1902は、一つ以上のカラムデータセットから、それぞれが一つ以上の抽出カラム値で構成された一つ以上のデータ本体と、一つ以上のヌルフラグ列とを生成し、当該一つ以上のデータ本体と当該一つ以上のヌルフラグ列とをフォーマット変換後の一つ以上のカラムデータセットとしてカラムストアデータベース106に送信してもよい。
【0132】
以上の実施例2について、管理領域に代えてプログラミング言語を使用した表現にすると、例えば次の通りである。すなわち、カラム抽出部1901は、第一のプログラミング言語で記述された一つ以上のプログラムがプロセッサ102によって実行されることで実現される。カラム変換部1902は、第一のプログラミング言語と異なるプログラミング言語である第二のプログラミング言語で記述された一つ以上のプログラムがプロセッサ102によって実行されることで実現される。例えば、第二のプログラミング言語は、カラムストアデータベース106についてのプログラミング言語と同じである。具体的には、例えば、第一のプログラミング言語は、C言語であり、第二のプログラミング言語は、JAVA言語である。
【0133】
以上が、実施例2の説明である。実施例2では、様々な仕様のカラムストアデータベース106に対処するための機能変更は、カラム変換部1902の変更でよい。実施例2でも、いずれの仕様のカラムストアデータベースについても同じFPGAボード111を採用することが期待できる。
【0134】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【0135】
例えば、一つのFPGAコマンドに対して、一つ又は複数の処理結果が受信されてもよい。また、複数のFPGAボード111がサーバ装置101に接続されている場合、一つのクエリの実行において複数のFPGAボード111に複数のFPGAコマンドが並行して発行され、その結果として複数のFPGAボード111から複数の処理結果がサーバ装置101において受信されてもよい。
【0136】
また、例えば、FPGAボード111には、サーバ装置101のメモリ103に代えて、永続記憶装置119から、カラムデータセットが読み出されてもよい。
【0137】
また、例えば、FPGAボード以外のアクセラレータ装置として、FPGAボード以外のPLD(Programmable Logic Device)が採用されてもよいし、ASIC(Application Specific Integrated Circuit)が採用されてもよい。
【符号の説明】
【0138】
101:サーバ装置
111:FPGAボード
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21