(57)【要約】  それぞれがメモリを有する１以上のハードウェア回路に計算機の処理のうちのデータベース処理がオフロードされるシステムにおいて、計算機が、複数のレコード及び複数のカラムで構成されたカラムストアデータベースを複数のデータセグメントに分割する。複数のカラムのうちの１以上のカラムが、それぞれ、１以上の圧縮対象カラムである。複数のデータセグメントの各々は、複数のレコードのうちの１以上のレコードで構成されたカラムストアデータベース部分と、そのカラムストアデータベース部分のうちの１以上の圧縮対象カラム部分を伸長するため辞書である圧縮辞書とを含む。複数のデータセグメントの各々において、圧縮辞書のサイズは、メモリのサイズ以下である。
2017154065.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが第１メモリを有する１以上のハードウェア回路に接続された１以上のインターフェースであるインターフェース部と、
前記インターフェース部に接続された１以上のプロセッサであるプロセッサ部と
を有し、
前記プロセッサ部は、複数のレコード及び複数のカラムで構成されたカラムストアデータベースを複数のデータセグメントに分割し、
前記１以上のハードウェア回路の各々は、前記プロセッサ部からのコマンドに応じたデータベース処理を実行する回路であり、
前記複数のカラムのうちの１以上のカラムが、それぞれ、１以上の圧縮対象カラムであり、
前記複数のデータセグメントの各々は、
前記複数のレコードのうちの１以上のレコードで構成されたカラムストアデータベース部分と、
そのカラムストアデータベース部分のうちの１以上の圧縮対象カラム部分を伸長するため辞書である圧縮辞書と
を含み、
前記複数のデータセグメントの各々において、前記圧縮辞書のサイズは、前記第１メモリのサイズ以下である、
計算機。
【請求項２】
前記プロセッサ部は、前記複数のデータセグメントの各々を、下記（Ａ）及び（Ｂ）の繰り返しにより作成する、
（Ａ）前記カラムストアデータベースのうちのｍ個のレコード（ｍは自然数）を構成するカラムストアデータベース部分の１以上の圧縮対象カラム部分の各々においてのユニークカラム値の数に基づき、前記ｍ個のレコードで構成されたカラムストアデータベース部分に対応した圧縮辞書のサイズを算出する、
（Ｂ）前記算出されたサイズと前記第１メモリのサイズとの比較の結果に基づいて、データセグメントを作成するか否かを決定する、
請求項１記載の計算機。
【請求項３】
前記プロセッサ部は、（Ｂ）において、
（ｂ１）前記ｍ個のレコードについて前記算出されたサイズが、前記第１メモリのサイズを超えたか否かを判断し、
（ｂ２）（ｂ１）の判断結果が真の場合、（ｍ−ｘ）個のレコード（ｘは自然数且つｍ未満）で構成されたカラムストアデータベース部分とそれに対応した圧縮辞書とを含んだデータセグメントを作成する、
請求項２記載の計算機。
【請求項４】
前記プロセッサ部は、
（ｂ３）（ｂ１）の判断結果が偽の場合、前記ｍ個のレコードで構成されたカラムストアデータベース部分とそれに対応した圧縮辞書とを含んだデータセグメントのサイズが所定のセグメントサイズを超えたか否かを判断し、
（ｂ４）（ｂ３）の判断結果が真の場合、前記ｍ個のレコードで構成されたカラムストアデータベース部分とそれに対応した圧縮辞書とを含んだデータセグメントを作成する、
請求項３記載の計算機。
【請求項５】
前記１以上のハードウェア回路の各々が、更に、前記第１メモリより低速の第２メモリを有し、
前記所定のセグメントサイズは、前記複数のデータセグメントの各々において、前記カラムストアデータベース部分のサイズが、所定サイズ以下となるためのサイズであり、
前記所定サイズは、
前記第１メモリのサイズと前記圧縮辞書のサイズとの差分と、前記第２メモリのサイズとの合計値以下、又は、
前記第２メモリのサイズ以下、
である、
請求項４記載の計算機。
【請求項６】
前記１以上のハードウェア回路の各々は、内部メモリを含んだＦＰＧＡ（Field-Programmable Gate Array）と、外部メモリとを含んだ回路であり、
前記内部メモリが、前記第１メモリであり、
前記外部メモリが、前記第２メモリである、
請求項５記載の計算機。
【請求項７】
前記プロセッサ部は、
クエリソースからクエリに対応した１以上のデータセグメントの各々について前記クエリを基にコマンドを作成し、
前記１以上のデータセグメントにそれぞれ対応した１以上のコマンドを前記１以上のハードウェア回路に送信し、
前記１以上のコマンドにそれぞれ対応した１以上のデータベース処理結果を前記１以上のハードウェア回路から受信し、
前記受信した１以上のデータベース処理結果に基づく結果を前記クエリに対する応答として前記クエリソースに返す、
請求項１記載の計算機。
【請求項８】
前記クエリは、検索クエリであり、
前記１以上のコマンドは、前記複数のデータセグメントにそれぞれ対応した複数のコマンドであり、
前記１以上のハードウェア回路は、複数のハードウェア回路であり、
請求項７記載の計算機。
【請求項９】
前記１以上のハードウェア回路の各々が、更に、前記第１メモリより低速の第２メモリを有し、
前記複数のデータセグメントの少なくとも１つにおいて、前記カラムストアデータベース部分のサイズは、所定サイズ以下であり、
前記所定サイズは、
前記第１メモリのサイズと前記圧縮辞書のサイズとの差分と、前記第２メモリのサイズとの合計値、又は、
前記第２メモリのサイズ、
である、
請求項１記載の計算機。
【請求項１０】
前記１以上のハードウェア回路の各々は、内部メモリを含んだＦＰＧＡ（Field-Programmable Gate Array）と、外部メモリとを含んだ回路であり、
前記内部メモリが、前記第１メモリである、
請求項１記載の計算機。
【請求項１１】
それぞれが第１メモリを有する１以上のハードウェア回路に計算機の処理のうちのデータベース処理がオフロードされるシステムでのデータベース管理方法であって、
複数のレコード及び複数のカラムで構成されたカラムストアデータベースを入力し、
前記入力されたカラムストアデータベースを複数のデータセグメントに分割し、
前記複数のカラムのうちの１以上のカラムが、それぞれ、１以上の圧縮対象カラムであり、
前記複数のデータセグメントの各々は、
前記複数のレコードのうちの１以上のレコードで構成されたカラムストアデータベース部分と、
そのカラムストアデータベース部分のうちの１以上の圧縮対象カラム部分を伸長するため辞書である圧縮辞書と
を含み、
前記複数のデータセグメントの各々において、前記圧縮辞書のサイズは、前記第１メモリのサイズ以下である、
データベース管理方法。
【請求項１２】
それぞれが第１メモリを有する１以上のハードウェア回路に計算機の処理のうちのデータベース処理がオフロードされるシステムにおける前記計算機に、
複数のレコード及び複数のカラムで構成されたカラムストアデータベースを入力し、
前記入力されたカラムストアデータベースを複数のデータセグメントに分割する
ことを実行させるコンピュータプログラムを記録した計算機読取り可能な非一時的な記録媒体であって、
前記複数のカラムのうちの１以上のカラムが、それぞれ、１以上の圧縮対象カラムであり、
前記複数のデータセグメントの各々は、
前記複数のレコードのうちの１以上のレコードで構成されたカラムストアデータベース部分と、
そのカラムストアデータベース部分のうちの１以上の圧縮対象カラム部分を伸長するため辞書である圧縮辞書と
を含み、
前記複数のデータセグメントの各々において、前記圧縮辞書のサイズは、前記第１メモリのサイズ以下である、
記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、データ管理技術に関する。
【背景技術】
【０００２】
計算機の処理の一部をハードウェア回路にオフロードする技術が知られている。例えば、特許文献１には、ＦＰＧＡ（Field-Programmable Gate Array）を活用してデータベースの処理を行うシステムが記載されている。【０００３】
また、カラムストアデータベース（カラムストア型のデータベース）も知られている。例えば、特許文献２には、カラムストアデータベースの制御方法が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００７−５２４９２３号公報
【特許文献２】米国特許公開第８，６３１，０００明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
カラムストアデータベースの１つの利点は、ローストアデータベース（ローストア型のデータベース）よりも、１つのカラムにおいて同一の値（カラム値）が出現する頻度が高いため、圧縮効果が高いことが考えられる。【０００６】
特許文献１及び２に開示の技術によれば、カラムストアデータベースに関する処理の一部をＦＰＧＡにオフロードすることが考えられる。【０００７】
しかし、通常、ＦＰＧＡの内部メモリ（例えばＳＲＡＭ）の容量は小さい。カラムストアデータベースの処理（典型的には検索処理）では、各カラムの伸長のための辞書である圧縮辞書が使用されるが、圧縮辞書が、ＦＰＧＡの内部メモリには収まらない。圧縮辞書の一部が、ＦＰＧＡの外部メモリ（例えばＤＲＡＭ）、又は、ＦＰＧＡと通信可能な不揮発記憶デバイスに格納される。このため、ＦＰＧＡが、圧縮辞書の参照のために、外部メモリ又は不揮発記憶デバイスにアクセスする必要があり、その結果、処理性能が低下する。【０００８】
同様の問題は、ＦＰＧＡ以外のハードウェア回路が採用される場合にもあり得る。
【課題を解決するための手段】
【０００９】
それぞれがメモリを有する１以上のハードウェア回路に計算機の処理のうちのデータベース処理がオフロードされるシステムにおいて、計算機が、複数のレコード及び複数のカラムで構成されたカラムストアデータベースを複数のデータセグメントに分割する。複数のカラムのうちの１以上のカラムが、それぞれ、１以上の圧縮対象カラムである。複数のデータセグメントの各々は、複数のレコードのうちの１以上のレコードで構成されたカラムストアデータベース部分と、そのカラムストアデータベース部分のうちの１以上の圧縮対象カラム部分を伸長するため辞書である圧縮辞書とを含む。複数のデータセグメントの各々において、圧縮辞書のサイズは、メモリのサイズ以下である。【００１０】
なお、「計算機」は、１以上の物理計算機であってよく、少なくとも１つの仮想計算機を含んでもよい。
【発明の効果】
【００１１】
データセグメントについてのデータベース処理において、そのデータセグメント内の圧縮辞書全体が、そのデータベース処理を行うハードウェア回路のメモリに収まる。このため、カラムストアデータベースの処理の性能低下を回避できる。
【図面の簡単な説明】
【００１２】
【図１】実施形態に係る計算機システムの構成例を示す。
【図２】ＤＢ表（カラムストアデータベース）とデータセグメントとの対応関係の一例を示す。
【図３】ＤＢ表定義管理テーブルの構成例を示す。
【図４】データセグメントの構成例を示す。
【図５】セグメント構成管理情報の構成例を示す。
【図６】サブ圧縮辞書の構成例を示す。
【図７】クエリの一例を示す。
【図８】コマンド作成部により作成されるコマンドの構成例を示す。
【図９】クエリ処理の流れの一例を示すフローチャートである。
【図１０】データロード処理の流れの一例を示すフローチャートである。
【図１１】データロード部に入力される入力ファイルの構成例を示す。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、本発明の一実施形態を説明する。但し、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではない。
【００１４】
以下の説明では、「インターフェース部」は、１以上のインターフェースを含む。１以上のインターフェースは、１以上の同種のインターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種のインターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１５】
また、以下の説明では、「記憶資源」は、１以上のメモリを含む。少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。記憶資源は、１以上のメモリに加えて、１以上のＰＤＥＶを含んでもよい。「ＰＤＥＶ」は、物理的な記憶デバイスを意味し、典型的には、不揮発性の記憶デバイス（例えば補助記憶デバイス）でよい。ＰＤＥＶは、例えば、ＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）でよい。
【００１６】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサを含む。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）である。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【００１７】
また、以下の説明では、「ｋｋｋ部」の表現にて処理部（機能）を説明することがあるが、処理部は、コンピュータプログラムがプロセッサ部によって実行されることで実現されてもよいし、ハードウェア回路（例えばＦＰＧＡ又はＡＳＩＣ（Application Specific Integrated Circuit））によって実現されてもよい。プログラムがプロセッサ部によって処理部が実現される場合、定められた処理が、適宜に記憶資源（例えばメモリ）及び／又は通信インターフェイスデバイス（例えば通信ポート）等を用いながら行われるため、処理部はプロセッサ部の少なくとも一部とされてもよい。処理部を主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としてもよい。また、プロセッサ部は、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースからプロセッサにインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機または計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。各処理部の説明は一例であり、複数の処理部が１つの処理部にまとめられたり、１つの処理部が複数の処理部に分割されたりしてもよい。
【００１８】
また、以下の説明では、「ｘｘｘ管理テーブル」といった表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘ管理テーブル」を「ｘｘｘ管理情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部又は一部が１つのテーブルであってもよい。
【００１９】
また、以下の説明では、「データベース」を「ＤＢ」と略記する。また、ＤＢとしての表を「ＤＢ表」と言う。
【００２０】
図１は、実施形態に係る計算機システムの構成例を示す。
【００２１】
複数（又は１つ）のＳＳＤ１４０（Solid State Drive）と、複数（又は１つ）のＤＢ処理ボード１５０と、サーバ１００とを有する。各ＳＳＤ１４０は、不揮発記憶デバイスの一例である。各ＤＢ処理ボード１５０は、ハードウェア回路の一例である。各ＤＢ処理ボード１５０は、ＳＲＡＭ（Static Random Access Memory）１６４を含んだＦＰＧＡ１６０と、ＤＲＡＭ（Dynamic Random Access Memory）１７０とを有する。ＳＲＡＭ１６４は、内部メモリの一例である。内部メモリは、第１メモリの一例である。ＤＲＡＭ１７０は、外部メモリの一例である。外部メモリは、第２メモリ（第１メモリより低速のメモリ）の一例である。メモリの高速／低速は、メモリがＦＰＧＡ１６０内にあるか否かと、メモリの種類とのうちの少なくとも１つに依存する。サーバ１００は、計算機の一例である。サーバ１００は、Ｉ／Ｆ１８０と、メモリ１２０と、それらに接続されたＣＰＵ１１０とを有する。Ｉ／Ｆ１８０は、インターフェース部の一例である。メモリ１２０は、記憶資源の一例である。ＣＰＵ１１０は、プロセッサ部の一例である。メモリ１２０に、ＣＰＵ１１０に実行されるＤＢＭＳ（Database management system）１３０が格納される。ＤＢＭＳ１３０は、コマンド作成部１３１、クエリ処理部１３２及びデータロード部１３３を有し、セグメント管理テーブル１３４及びＤＢ表定義管理テーブル１３５を管理する。
【００２２】
本実施形態の概要は、以下の通りである。
【００２３】
データロード部１３３が、Ｍ個のレコード及びＮ個のカラムで構成されたＤＢ表（カラムストアデータベース）を複数のデータセグメントに分割し、複数のデータセグメントを複数のＳＳＤ１４０に格納する。Ｍ及びＮは、それぞれ、２以上の整数である。ＭとＮは、同じ値でもよいし異なる値であってもよい。Ｎ個のカラムのうちの１以上のカラムが、それぞれ、１以上の圧縮対象カラムである。複数のデータセグメントの各々は、ＤＢ表部分と、そのＤＢ表部分のうちの１以上の圧縮対象カラム部分を伸長するため辞書である圧縮辞書とを含む。複数のデータセグメントの各々において、圧縮辞書のサイズは、ＳＲＡＭ１６４のサイズ以下である。このため、ＦＰＧＡ１６０において、データセグメントについてのＤＢ処理の際、そのデータセグメント内の圧縮辞書全体が、必ず、ＦＰＧＡ１６０内のＳＲＡＭ１６４に収まる。故に、処理性能の低下を回避できる。
【００２４】
ＤＢ表の分割は、次のように行われる。データロード部１３３は、ｍ個のレコード（ｍは自然数且つＭ未満）を構成するＤＢ表部分の１以上の圧縮対象カラム部分の各々においてのユニークカラム値の数に基づき、圧縮辞書の辞書サイズを算出する。算出された辞書サイズがＳＲＡＭ１６４のサイズを超えた場合、データロード部１３３は、（ｍ−ｘ）個のレコードで構成されたＤＢ表部分に対応した圧縮辞書を作成する（ｘは自然数且つｍ未満）。結果として、作成された圧縮辞書の辞書サイズがＳＲＡＭ１６４のサイズ以下となる。
【００２５】
クエリ処理部１３２は、クエリソース（図示せず）からクエリを受信した場合に、コマンド作成部１３１を呼び出す。コマンド作成部１３１が、そのクエリを基に、そのクエリに対応した１以上のデータセグメントの各々についてのコマンドを作成する。つまり、１つのコマンドは、１つのデータセグメントに対するＤＢ処理のためのコマンドである。故に、ＤＢ処理はデータセグメントについて行われ、データセグメント内の圧縮辞書全体は、上述したように、そのＤＢ処理を実行するＦＰＧＡ１６０内のＳＲＡＭ１６４に収まる。このため、処理性能の低下を回避できる。クエリ処理部１３２が、その１以上のデータセグメントにそれぞれ対応した１以上のコマンドを１以上のＦＰＧＡ１６０（１以上のＤＢ処理ボード１５０）に送信する。クエリ処理部１３２は、その１以上のコマンドにそれぞれ対応した１以上のＤＢ処理結果を１以上のＦＰＧＡ１６０から受信する。クエリ処理部１３２は、受信した１以上のＤＢ処理結果を集約することにより、クエリの実行結果を作成する。クエリ処理部１３２は、その作成された実行結果を、クエリソースに返す。１つのクエリに基づく複数のコマンドを複数のＦＰＧＡ１６０に送信することにより、複数のＦＰＧＡ１６０で並列に複数のＤＢ処理が実行することができる。故に、クエリを高速に処理することが期待でき、また、複数のＦＰＧＡ１６０を効率的に使用できる。なお、クエリソースは、サーバ１００で実行されるアプリケーションプログラム（図示せず）でもよいし、サーバ１００に接続されたクライアント（図示せず）であってもよい。
【００２６】
以下、本実施形態を詳細に説明する。なお、以下の説明では、Ｎ＝６、すなわち、ＤＢ表が有するカラムの数は６であるとする。
【００２７】
複数のＳＳＤ１４０の各々は、上述したように、不揮発記憶デバイスの一例である。複数のＳＳＤ１４０の少なくとも１つに代えて、他種の不揮発記憶デバイス、例えばＨＤＤ（Hard Disk Drive）を採用することができる。複数のＳＳＤ１４０に、ＤＢ表（カラムストアデータベース）に基づく複数のデータセグメントが格納される。
【００２８】
ＤＢ処理ボード１５０は、一種のアクセラレータである。ＤＢ処理ボード１５０は、上述したように、ＦＰＧＡ１６０とＤＲＡＭ１７０とを有する。ＦＰＧＡ１６０は、ＳＲＡＭ１６４を含む。ＦＰＧＡ１６０内のＳＲＡＭ１６４は、ＦＰＧＡ１６０にとって、ＦＰＧＡ１６０外のＤＲＡＭ１７０よりも高速である。ＦＰＧＡ１６０は、データ読出し部１６１、データ伸長部１６２及びＤＢ処理部１６３を有する。データ読出し部１６１は、ＳＳＤ１４０からデータセグメントを読み出し、データセグメント内の圧縮辞書を、ＳＲＡＭ１６４に格納する。データ伸長部１６２は、ＳＲＡＭ１６４内の圧縮辞書を参照し、データセグメント内の圧縮カラム部分（圧縮されているカラム部分）を伸長する。ＤＢ処理部１６３は、伸長されたカラム部分を用いたＤＢ処理を実行する。
【００２９】
上述したように、サーバ１００のＣＰＵ１１０によりＤＢＭＳ１３０が実行される。ＤＢＭＳ１３０は、コンピュータプログラムの一例である。ＤＢＭＳ１３０は、上述したように、コマンド作成部１３１、クエリ処理部１３２及びデータロード部１３３を有し、セグメント管理テーブル１３４及びＤＢ表定義管理テーブル１３５を管理する。コマンド作成部１３１は、１つのデータセグメントにつき１つのコマンドを作成する。クエリ処理部１３２は、クエリソースからのクエリを処理する。データロード部１３３は、ＤＢ表（カラムストアデータベース）を含んだ複数のデータセグメントを複数のＳＳＤ１４０に格納する。セグメント管理テーブル１３４は、ＤＢ表に基づく複数のデータセグメントの各々に関する情報（例えば、データセグメント毎の格納先情報（例えば、ＳＳＤ１４０のＩＤ及び論理アドレス））を保持する。ＤＢ表定義管理テーブル１３５は、ＤＢ表定義に関する情報を保持する。
【００３０】
図２は、ＤＢ表（カラムストアデータベース）とデータセグメントとの対応関係の一例を示す。
【００３１】
ＤＢ表が複数のデータセグメント２１０に分割されるが、各データセグメント２１０は、ＤＢ表部分２２０と、圧縮辞書（図２では不図示）とを含む。例えば、図２に例示のように、ＤＢ表が４０００個以上のレコードで構成されている場合、１番目のＤＢ表部分２２０は、レコード１〜３２で構成された６個のカラム部分を含む。各データセグメント２１０において、６個のカラム部分は、少なくとも１つの圧縮カラム部分を含む。「圧縮カラム部分」は、圧縮されたカラム部分である。圧縮対象のカラム部分が圧縮されてデータセグメント２１０に含まれる。「カラム部分」は、カラムの一部分である。
【００３２】
１つのデータセグメント２１０において、６個のカラム部分を構成するレコードの数は、６個のカラム部分の各々におけるユニークカラム値の数に依存する。少なくとも１つのカラム部分が圧縮対象のためである。１つのカラム部分において、「ユニークカラム値」とは、そのカラム部分においてユニークなカラム値である。
【００３３】
図３は、ＤＢ表定義管理テーブル１３５の構成例を示す。
【００３４】
ＤＢ表定義管理テーブル１３５は、ＤＢ表が有するカラム毎にエントリを有する。各エントリは、カラムＩＤ４０１、カラム名４０２及びデータ型４０３といった情報を保持する。カラムＩＤ４０１は、カラムのＩＤを示す。カラム名４０２は、カラムの名前を示す。データ型４０３は、カラムのデータ型を示す。
【００３５】
図４は、データセグメント２１０の構成例を示す。なお、「カラム部分ｎ」は、カラムｎ（ｎは１〜６のうちのいずれかの整数）のカラム部分を意味する。「カラムｎ」は、カラムＩＤ“ｎ”のカラムである。
【００３６】
データセグメント２１０は、セグメント構成管理情報４１０と、圧縮辞書４２０と、６個のカラム部分４３０とを含む。６個のカラム部分４３０は、１以上の圧縮カラム部分４３０を含む。圧縮辞書４２０は、１以上の圧縮カラム部分４３０にそれぞれ対応した１以上のサブ圧縮辞書４２１で構成される。
【００３７】
図４の例示によれば、カラム部分１〜６のうち、圧縮されているカラム部分は、カラム部分１、２、４及び５のため、圧縮辞書４２０は、カラム部分１、２、４及び５にそれぞれ対応した４個のサブ圧縮辞書４２１を含む。
【００３８】
図５は、セグメント構成管理情報４１０の構成例を示す。
【００３９】
セグメント構成管理情報４１０は、この情報を含んだデータセグメント２１０の構成に関する情報を保持するテーブルである。セグメント構成管理情報４１０は、カラム部分４３０毎に、エントリを有する。各エントリは、カラムＩＤ６０１、カラムオフセット６０２、及び辞書オフセット６０３といった情報を保持する。
【００４０】
カラムＩＤ６０１は、カラム部分４３０を含んだカラムのＩＤを示す。カラムオフセットは、カラム部分４３０のオフセット（データセグメント２１０の先頭からカラム部分４３０の先頭までの差分）、つまり、データセグメント２１０における、カラム部分４３０の位置、を表す。辞書オフセットは、カラム部分４３０に対応したサブ圧縮辞書４２１のオフセット（データセグメント２１０の先頭からサブ圧縮辞書４２１の先頭までの差分）、つまり、データセグメント２１０における、サブ圧縮辞書４２１の位置、を表す。辞書オフセットが有効な値（例えば“NULL”以外の値）であるカラム部分４３０が、圧縮されているカラム部分４３０である。辞書オフセットが無効な値（例えば“NULL”）であるカラム部分４３０は、非圧縮のカラム部分４３０である。
【００４１】
図６は、サブ圧縮辞書４２１の構成例を示す。
【００４２】
サブ圧縮辞書４２１は、このサブ圧縮辞書４２１に対応する圧縮カラム部分４３０について、圧縮値７０１と伸長値７０２との関係を表す。圧縮値７０１は、圧縮後のカラム値である。伸長値７０２は、伸長後のカラム値である。
【００４３】
以上のようなデータセグメント２１０１つにつき、上述したように、クエリに基づき１つのコマンドが作成される。
【００４４】
図７は、クエリの一例を示す。
【００４５】
クエリは、例えば、構造化問合せ言語（ＳＱＬ、Structured Query Language）によって記述される。クエリには、例えば、SELECT文が記述されている。
【００４６】
図８は、コマンド作成部１３１により作成されるコマンドの構成例を示す。
【００４７】
コマンドは、ＳＳＤ＿ＩＤ８０１、開始論理アドレス８０２、終了論理アドレス８０３、結果格納サーバメモリアドレス８０４及びＤＢ処理内容を含む。
【００４８】
ＳＳＤ＿ＩＤ８０１は、対象データセグメント２１０（このコマンドに対応したデータセグメント２１０）が格納されているＳＳＤ１４０のＩＤを示す。開始論理アドレス８０２は、対象データセグメント２１０の先頭論理アドレス（ＳＳＤ１４０における論理アドレス）を示す。終了論理アドレス８０３は、対象データセグメント２１０の終了論理アドレス（ＳＳＤ１４０における論理アドレス）を示す。結果格納サーバメモリアドレス８０４は、ＤＢ処理結果の格納先アドレス（メモリ１２０における領域のアドレス）を示す。ＤＢ処理内容８０５は、対象データセグメント２１０内のＤＢ表部分に対して行うＤＢ処理の内容を示す。ＤＢ処理内容８０５は、例えば、データ検索条件、検索条件結合方法及びデータ抽出条件のうちの少なくとも１つを含む。
【００４９】
図９は、クエリ処理の流れの一例を示すフローチャートである。クエリ処理は、クエリ処理部１３２がクエリソースからクエリを受信した場合に開始される。以下、クエリは、検索クエリであるとする。そして、検索クエリに従い全てのデータセグメント２１０の各々におけるＤＢ表部分に対してＤＢ処理が実行されるとする。
【００５０】
クエリ処理部１３２は、コマンド作成部１３１を呼び出し、コマンド作成部１３１が、そのクエリを基に、そのクエリに対応した複数のデータセグメント２１０の各々についてのコマンドを作成する（Ｓ９０１）。つまり、１つのコマンドは、１つのデータセグメント２１０に対するＤＢ処理のためのコマンドである。
【００５１】
クエリ処理部１３２が、作成された複数のコマンドを複数のＦＰＧＡ１６０（複数のＤＢ処理ボード１５０）に送信する（Ｓ９０２）。コマンドを受信したＦＰＧＡ１６０は、例えば次の処理を行う。データ読出し部１６１が、コマンドに従うデータセグメント２１０をＳＳＤ１４０（コマンドに記載のＳＳＤ＿ＩＤ８０１、開始論理アドレス８０２及び終了論理アドレス８０３が示す読出し元）から読み出す。データ読出し部１６１が、そのデータセグメント２１０内の圧縮辞書４２０をＳＲＡＭ１６４に格納する。データ伸長部１６２が、ＳＲＡＭ１６４内の圧縮辞書４２０を参照して、そのデータセグメント２１０内のＤＢ表部分における圧縮カラム部分４３０を伸長し、そのデータセグメント２１０内のＤＢ表部分をＤＲＡＭ１７０に格納する。後述の理由から、ＤＢ表部分全体（伸長されたカラム部分を含む）が、ＤＲＡＭ１７０（又は、ＤＲＡＭ１７０と、ＳＲＡＭ１６４の一部）に収まる。ＤＢ処理部１６３が、コマンド内のＤＢ処理内容８０５に従い、ＤＢ処理ボード１５０におけるＤＢ表部分に対するＤＢ処理を実行する。ＤＢ処理部１６３が、ＤＢ処理結果を返す。具体的には、ＤＢ処理部１６３が、ＤＭＡ（Direct Memory Access）により、結果格納サーバメモリアドレス８０４が示す領域（サーバ１００のメモリ１２０における領域）にＤＢ処理結果を格納する。
【００５２】
サーバ１００が、Ｓ９０２で送信した複数のコマンドの各々について、ＤＢ処理結果をＦＰＧＡ１６０から受信する（Ｓ９０３）。具体的には、各コマンドについて、ＤＢ処理結果が、そのコマンド内の結果格納サーバメモリアドレス８０４が示す領域に格納される。全てのコマンドについてＤＢ処理結果を受信した場合（Ｓ９０４：ＹＥＳ）、クエリ処理部１３２は、複数のコマンドにそれぞれ対応した複数のＤＢ処理結果を集約することにより（Ｓ９０５）、クエリの実行結果を作成する。クエリ処理部１３２は、その作成された実行結果を、クエリソースに返す（Ｓ９０６）。
【００５３】
１つのクエリに基づく複数のコマンドを複数のＦＰＧＡ１６０に送信することにより、複数のＦＰＧＡ１６０で並列に複数のＤＢ処理が実行することができる。故に、クエリを高速に処理することが期待でき、また、複数のＦＰＧＡ１６０を効率的に使用できる。また、上述したように、データセグメント２１０から得られたＤＢ表部分全体が、ＤＲＡＭ１７０（又は、ＤＲＡＭ１７０と、ＳＲＡＭ１６４の一部）に収まるので、高速な処理が一層期待できる。
【００５４】
図１０は、データロード処理の流れの一例を示すフローチャートである。
【００５５】
データロード部１３３は、入力ファイルを受信する（Ｓ１００１）。入力ファイルは、ＤＢ表のファイルである。入力ファイルの構成例を図１１に示す。
【００５６】
データロード部１３３は、入力ファイルが表すＭ個のレコードのうち未抽出のレコードから１レコード（行）を抽出する（Ｓ１００２）。Ｓ１００２で抽出され未だデータセグメント２１０に含められていないレコードを、「候補レコード」と言う。
【００５７】
データロード部１３３は、ｍ個の候補レコード（ｍは自然数且つＭ以下）が構成する６個のカラム部分４３０のうちの各圧縮対象カラム部分におけるユニークカラム値の数に基づき、ｍ個の候補レコードで構成されたＤＢ表部分に対応した圧縮辞書４２０のサイズを算出する（Ｓ１００３）。具体的には、例えば、データロード部１３３は、各圧縮対象カラム部分４３０について、ユニークカラム値の数に基づきサブ圧縮辞書４２１のサイズを算出する。データロード部１３３は、全てのサブ圧縮辞書４２１のサイズの合計を算出することで、圧縮辞書４２０のサイズを算出する。
【００５８】
データロード部１３３は、算出されたサイズがＳＲＡＭ１６４のサイズを超えたか否かを判断する（Ｓ１００４）。ＳＲＡＭ１６４のサイズは、データロード処理において、ＤＢＭＳ１３０からの問合せに応答してＦＰＧＡ１６０からＤＢＭＳ１３０に通知されてもよいし、ＤＢＭＳ１３０が予め把握していてもよい。
【００５９】
Ｓ１００４の判断結果が真の場合（Ｓ１００４：ＹＥＳ）、データロード部１３３は、（ｍ−ｘ）個の候補レコード（ｘは自然数且つｍ未満）で構成されたＤＢ表部分とそれに対応した圧縮辞書４２０とを含んだデータセグメント２１０を作成し、作成したデータセグメント２１０をいずれかのＳＳＤ１４０に格納する（Ｓ１００５）。つまり、Ｓ１００５では、データセグメント２１０に含まれるセグメント構成管理情報４１０、圧縮辞書４２０及び圧縮カラム部分４３０が作成される。なお、ｘを減算する理由は、辞書サイズをＳＲＡＭサイズ以下とするためである。ｘの値は、可変値でよく、各圧縮対象カラム部分４３０におけるユニークカラム値の数に基づいて決定されてよい。Ｓ１００５の後、Ｓ１００５でデータセグメント２１０に含まれなかったｘ個の候補レコードについて、Ｓ１００３が実行される。
【００６０】
Ｓ１００４の判断結果が偽の場合（Ｓ１００４：ＮＯ）、データロード部１３３は、ｍ個の候補レコードで構成されたＤＢ表部分とそれに対応した圧縮辞書４２０とを含んだデータセグメント２１０のサイズが閾値（所定のセグメントサイズ）を超えたか否かを判断する（Ｓ１００６）。閾値は、複数のデータセグメント２１０の各々において、ＤＢ表部分のサイズが、所定サイズ以下となるための値である。所定サイズは、（ｐ）ＳＲＡＭサイズと圧縮辞書サイズとの差分と、ＤＲＡＭサイズとの合計値、又は、（ｑ）ＤＲＡＭサイズ、である。つまり、データセグメント２１０から得られたＤＢ表部分全体がＤＢ処理ボード１５０の記憶領域に収まるような閾値（所定のセグメントサイズ）が決定されている。
【００６１】
Ｓ１００６の判断結果が真の場合（Ｓ１００６：ＹＥＳ）、データロード部１３３は、ｍ個の候補レコードで構成されたＤＢ表部分とそれに対応した圧縮辞書４２０とを含んだデータセグメント２１０を作成し、そのデータセグメント２１０をいずれかのＳＳＤ１４０に格納する（Ｓ１００５）。つまり、圧縮辞書サイズがＳＲＡＭサイズより小さくても（言い換えれば、候補レコードが増えても圧縮辞書サイズがＳＲＡＭサイズ以下となり得ても）、データセグメント２１０が作成されＳＳＤ１４０に格納される。
【００６２】
データロード部１３３は、Ｓ１００２で読み出されたレコードが、入力ファイルが表すＭ個のレコードのうちの最終レコードであるか否かを判断する（Ｓ１００７）。Ｓ１００７の判断結果が偽の場合（Ｓ１００７：ＮＯ）、Ｓ１００２に戻る。
【００６３】
Ｓ１００７の判断結果が真の場合（Ｓ１００７：ＹＥＳ）、データロード部１３３は、全ての候補レコードで構成されるＤＢ表部分とそれに対応した圧縮辞書４２０とを含んだデータセグメント２１０を作成し、そのデータセグメント２１０をいずれかのＳＳＤ１４０に格納する。
【００６４】
以上、一実施形態を説明したが、本発明は上述した実施形態に限られず、他の様々な態様に適用可能である。例えば、ＤＢ表部分のサイズがＤＲＡＭ１７０のサイズを超えることがあってもよい。その場合、ＤＢ表部分の一部がＳＳＤ１４０に格納されてよい。
【符号の説明】
【００６５】
１００…サーバ
【図１】
2017154065.tif 000003
【図２】
2017154065.tif 000004
【図３】
2017154065.tif 000005
【図４】
2017154065.tif 000006
【図５】
2017154065.tif 000007
【図６】
2017154065.tif 000008
【図７】
2017154065.tif 000009
【図８】
2017154065.tif 000010
【図９】
2017154065.tif 000011
【図１０】
2017154065.tif 000012
【図１１】
2017154065.tif 000013
【国際調査報告】
2017154065.tif 000014
2017154065.tif 000015
2017154065.tif 000016
2017154065.tif 000017