(57)【要約】【課題】ハードウェア回路の複雑化を抑制しつつ、大規模なデータに対する処理を実行できるとともに処理効率を向上できるようにする。【解決手段】プロセッサと、プロセッサに接続されたＦＰＧＡ２３０とを有するサーバ２００において、プロセッサを、処理対象データを特定する対象特定情報と、処理対象データに対する処理内容とを含むクエリプランを取得し、クエリプランに基づいて、対象特定情報により特定される処理対象データを構成する複数のロウグループ２４２のデータのそれぞれを処理対象とするＦＰＧＡコマンドを生成し、ＦＰＧＡコマンドをＦＰＧＡ２３０に送信するように構成し、ＦＰＧＡ２３０を、送信されたＦＰＧＡコマンドに基づいて、ロウグループ２４２に対する処理を実行し、処理結果をプロセッサに返すように構成する。【選択図】図５
2020135318.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、前記プロセッサに接続されたハードウェア回路とを有するデータ処理装置であって、
前記プロセッサは、
処理対象データを特定する対象特定情報と、前記処理対象データに対する処理内容とを含む第１コマンドを取得し、
前記第１コマンドに基づいて、前記対象特定情報により特定される前記処理対象データを構成する複数の部分データのそれぞれを処理対象とする複数の第２コマンドを生成し、
前記第２コマンドを前記ハードウェア回路に送信し、
前記ハードウェア回路は、
送信された前記第２コマンドに基づいて、前記部分データに対する処理を実行し、処理結果を前記プロセッサに返す、
データ処理装置。
【請求項２】
主記憶装置をさらに備え、
前記プロセッサは、前記第２コマンドの処理対象の前記部分データを前記主記憶装置の前記ハードウェア回路への転送用のバッファに格納し、
前記ハードウェア回路は、メモリを有し、前記主記憶装置の前記バッファから前記第２コマンドの処理対象の前記部分データを前記メモリに転送し、前記第２コマンドに基づく処理を実行する請求項１に記載のデータ処理装置。
【請求項３】
前記第１コマンドにおける処理対象データは、テーブルを構成するテーブルデータであって、前記処理対象データの前記テーブルデータにおける１以上のロウを含むロウグループのデータを複数含み、
前記部分データは、それぞれの前記ロウグループのデータである
請求項２に記載のデータ処理装置。
【請求項４】
前記ロウグループのデータの位置を特定可能なメタ情報が、前記処理対象データのファイル内又は、前記処理対象データと対応させて記憶されており、
前記プロセッサは、前記メタ情報に基づいて、前記処理対象データにおけるロウグループのデータの位置を特定し、前記ロウグループのデータを取得して、前記主記憶装置の前記バッファに格納する
請求項３に記載のデータ処理装置。
【請求項５】
前記メタ情報は、前記ロウグループにおけるカラムデータの位置を特定可能な情報をさらに含み、
前記プロセッサは、前記第１コマンドの処理内容と、前記メタ情報とに基づいて、前記部分データ中の前記処理内容が示す処理に必要なカラムデータの位置を特定し、前記処理に必要なカラムデータを前記バッファに格納する
請求項４に記載のデータ処理装置。
【請求項６】
前記カラムデータは、前記ロウグループのカラムの値に対応するデータと、前記カラムの値に対する圧縮内容を示す辞書とを含み、
前記ハードウェア回路は、
前記カラムデータの辞書に基づいて、前記カラムの値に対応するデータを、前記カラムの値に伸張し、前記処理を実行する
請求項５に記載のデータ処理装置。
【請求項７】
前記第１コマンドにおける処理対象データは、複数の下位ファイルから構成される分散ファイルシステムにおける上位ファイルとして管理されており、
前記部分データは、前記下位ファイルである
請求項１に記載のデータ処理装置。
【請求項８】
前記プロセッサは、前記第１コマンドに基づいて生成された複数の前記第２コマンドによる前記ハードウェア回路の処理結果をまとめて、前記第１コマンドの要求元に送信する
請求項１から請求項７のいずれか一項に記載のデータ処理装置。
【請求項９】
前記ハードウェア回路は、プログラマブルゲイトアレイである
請求項１から請求項８のいずれか一項に記載のデータ処理装置。
【請求項１０】
プロセッサと、前記プロセッサに接続されたハードウェア回路とを有するデータ処理装置によるデータ処理方法であって、
前記プロセッサが、
処理対象データを特定する対象特定情報と、前記処理対象データに対する処理内容とを含む第１コマンドを取得し、
前記第１コマンドに基づいて、前記対象特定情報により特定される前記処理対象データを構成する複数の部分データのそれぞれを処理対象とする複数の第２コマンドを生成し、
前記第２コマンドを前記ハードウェア回路に送信し、
前記ハードウェア回路が、
送信された前記第２コマンドに基づいて、前記部分データに対する処理を実行し、処理結果を前記プロセッサに返す、
データ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサとは別のハードウェア回路を備え、データ処理を実行する技術に関する。
【背景技術】
【０００２】
日々生成、蓄積、更新される基幹業務データや、製造現場や顧客の情報、ソーシャルメディアを介して収集される情報等の、大規模かつ多様なデータ（いわゆるビッグデータ）を有効活用し、ビジネスの遂行に必要な情報を迅速に抽出、分析することが求められている。このようなビジネスデータ分析には、変化をいち早く捉えて状況判断を行うために、リアルタイムに近い応答と、様々に視点を変えてデータを解釈するためのインタラクティブな分析環境が必要となる。また今後のビジネスデータ分析は、多数のビジネスユーザがセルフサービスで実行し、結果をただちに実ビジネスに活用する方向にシフトしていくことが見込まれている。
【０００３】
大量のデータを高速に処理するためには、通常は、計算性能を確保するために高性能なプロセッサを備えたデータ処理用サーバを用いるか、汎用のデータ処理用サーバを多数用意することが必要である。特に、大規模データを対象にデータ分析を行う場合では、多数のデータ処理サーバを用いた分散基盤を用いて並列にデータ処理を行う、Ｈａｄｏｏｐ（登録商標）等の分散データ処理システムが用いられることがある。この結果として、システム規模が増大し、導入コストや維持コストが増加する。
【０００４】
これに対し、高速なデータ処理が可能なＦＰＧＡ（Field programmable gate array：プログラマブルゲイトアレイ）やＧＰＧＰＵ（General-purpose computing on graphics processing units）、専用ＡＳＩＣ（Application specific integrated circuit）等のアクセラレータをサーバに搭載することにより計算性能を向上することにより、システム規模を抑える技術が考えられる。
【０００５】
例えば、特許文献１には、メタ情報およびデータのストレージ上の格納位置情報を、ＦＰＧＡがデータベース管理ソフトウェアから取得し、ＦＰＧＡがメタ情報を解読し、ＦＰＧＡが処理可能なデータサイズを決定して、ストレージ（あるいはストレージからサーバメモリに取り込んだ処理対象データ）から、決定したサイズ単位でデータを取り込んで順番に処理する技術が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１７−１３８８９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１に記載された技術では、テーブルのデータを予めサイズの決まったセグメントで管理することにより、計算性能を向上することができる。
【０００８】
しかしながら、大規模データ処理で用いられるＨａｄｏｏｐ等の分散データ処理システムでは、データベースのデータを複数ファイルに分割して複数のサーバに保存するが、これらのファイルは、格納されているデータ形式が様々で、データやメタ情報の構造も可変長である。このため、特許文献１に記載の技術では対応することができない。
【０００９】
このような、可変長のデータやメタ情報等に対して、ＦＰＧＡ等のハードウェア回路で対応可能とするためには、対象とする形式や構造に応じた処理を実行できるように回路を用意しておく必要がある。このため、ハードウェア回路が複雑となり作成コストが高くなるといった問題や、ハードウェア回路に作成可能な回路規模には限界があるため、このような構造に対応することが困難であるといった問題もある。
【００１０】
本発明は、上記事情に鑑みなされたものであり、その目的は、ハードウェア回路の複雑化を抑制しつつ、大規模なデータに対する処理を実行できるとともに処理効率を向上することのできる技術を提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、一観点に係るデータ処理装置は、プロセッサと、プロセッサに接続されたハードウェア回路とを有するデータ処理装置であって、プロセッサは、処理対象データを特定する対象特定情報と、処理対象データに対する処理内容とを含む第１コマンドを取得し、第１コマンドに基づいて、対象特定情報により特定される処理対象データを構成する複数の部分データのそれぞれを処理対象とする複数の第２コマンドを生成し、第２コマンドを前記ハードウェア回路に送信し、ハードウェア回路は、送信された第２コマンドに基づいて、部分データに対する処理を実行し、処理結果を前記プロセッサに返す。
【発明の効果】
【００１２】
本発明によれば、ハードウェア回路の複雑化を抑制しつつ、大規模なデータに対する処理を実行できるとともに処理効率を向上することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、一実施形態に係る分散データベースシステムの全体構成図である。
【図２】図２は、一実施形態に係る分散データベースシステムの機能構成図である。
【図３】図３は、一実施形態に係る分散データベースシステムの全体の処理の概要を説明する図である。
【図４】図４は、一実施形態に係るサーバのハードウェア構成図である。
【図５】図５は、一実施形態に係るサーバの機能構成図である。
【発明を実施するための形態】
【００１４】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１５】
図１は、一実施形態に係る分散データベースシステムの全体構成図である。
【００１６】
分散データベースシステム１は、クライアントノード１０１、ジョブ管理ノード１０３、リソース管理ノード１０４、データ管理ノード１０５、データ処理ノード１１１〜１１４、およびデータ格納ノード１１５〜１１８を備える。これらノードは、物理的な計算機でもよく、ＶＭ等の仮想計算機でもよい。これらのノードの間は、イーサネット（登録商標）等の一般的な計算機のネットワークを介して接続（図示省略）され、このネットワークを介して、制御信号や、データを送受信できるようになっている。例えば、複数のノードをローカルなドメイン内で閉じたネットワーク（LAN：Local area network）で接続してもよいし、複数のノードを異なるデータセンタ等のドメインに配置するようにし、各ドメインのノード間をグローバルなネットワーク（WAN：Wide area network）で接続してもよい。また、データ処理ノードとデータ格納ノードとの間は、ＳＡＮ（Storage area network）を介して接続してもよい。
【００１７】
クライアントノード１０１は、例えば、プロセッサ、メモリ、ネットワークインタフェースを備えた計算機である。クライアントノード１０１は、さらにストレージ装置や計算機を操作するためのユーザインタフェースを備えてもよい。クライアントノード１０１は、プロセッサがメモリにロードされたアプリケーションプログラム１０２を実行することにより各種処理を実行する。アプリケーションプログラム１０２は、例えば、ネットワーク経由で伝送されてもよいし、予めクライアントノード１０１のストレージ装置に格納されていてもよいし、ユーザインタフェースを介して入力されてもよい。
【００１８】
アプリケーションプログラム１０２には、分散データベースシステム１を用いてデータ処理を実行する命令が含まれており、プロセッサが、アプリケーションプログラム１０２を実行することによって、データ処理を実行する命令が呼び出され、この命令に基づいて分散データベースシステム１においてデータ処理が実行される。
【００１９】
ジョブ管理ノード１０３は、例えば、プロセッサ、メモリ、ネットワークインタフェースを備えた計算機である。ジョブ管理ノード１０３は、さらにストレージ装置や計算機を操作するためのユーザインタフェースを備えてもよい。ジョブ管理ノード１０３は、クライアントノード１０１上のアプリケーション１０２が発行したデータ処理命令を受け、分散データベースシステム１上でデータ処理を実行するためのジョブ１０７〜１１０等を構成する。また、ジョブ管理ノード１０３は、ジョブにおけるデータ処理を、複数のデータ処理ノード１１１〜１１４等に分散して実行させる単位であるタスクを生成する。例えば、Ｈａｄｏｏｐ分散処理システムにおいては、Ｍａｐ処理、およびＲｅｄｕｃｅ処理を組み合わせてデータ処理を実行する単位がジョブに相当する。また、Ｍａｐ処理、およびＲｅｄｕｃｅ処理が、それぞれがタスクに相当する。タスクは、複数のデータ処理ノード１１１〜１１４等において分散実行される。ジョブ管理ノード１０３は、生成したタスクを実行させるにあたって、リソース管理ノード１０４にデータ処理ノード１１１〜１１４等の使用を要求する。
【００２０】
リソース管理ノード１０４は、例えば、プロセッサ、メモリ、ネットワークインタフェースを備えた計算機である。リソース管理ノード１０４は、さらにストレージ装置や計算機を操作するためのユーザインタフェースを備えてもよい。リソース管理ノード１０４は、ジョブ管理ノード１０３からタスクを実行させるデータ処理ノード１１１〜１１４の使用要求を受け、リソース管理情報に基づいて使用可能なデータ処理ノードを選択し、タスクを選択したデータ処理ノードに配置して実行させる。また、リソース管理ノード１０４は、ジョブ管理ノード１０３が構成した１つ以上のジョブの実行順や実行割合等を優先度や諸条件に基づいてスケジューリングする。
【００２１】
データ管理ノード１０５は、例えば、プロセッサ、メモリ、ネットワークインタフェースを備えた計算機である。データ管理ノード１０５は、さらにストレージ装置や計算機を操作するためのユーザインタフェースを備えてもよい。データ管理ノード１０５は、分散データベースシステム１が処理するデータをデータソース１０６から取得し、指定された分割サイズのブロック（データブロック）に分割してデータ格納ノード１１５〜１１８に格納する。この時、データの可用性、信頼性を担保するために、特定のノードが停止した時等にデータを失わないように、ブロックごとに１つ以上の複製を作成し、複製を複数のノードに分散して配置してもよい。
【００２２】
なお、分散データベースシステム１において、ジョブ管理ノード１０３と、リソース管理ノード１０４と、データ管理ノード１０５との全てのノード、あるいはこのうちのいずれかの２つのノードを、同一の物理計算機に構成してもよい。また、クライアントノード１０１も、これらのうちの何れかのノード、あるいはこれら全てのノードと同一の物理計算機に構成してもよい。
【００２３】
データ処理ノード１１１〜１１４は、リソース管理ノード１０４によって設定されたタスクを実行する。この時、タスク毎に、予め設定された論理的なデータ単位であるパーティション１２３〜１３４に接続してデータ処理を行う。
【００２４】
データ格納ノード１１５〜１１８は、データ管理ノード１０５が指定して配置したデータブロックを、各データ格納ノードが備えるハードディスクドライブや、フラッシュメモリデバイス等のストレージ装置１１９〜１２２に格納する。各データ格納ノードのデータブロックは、データ処理ノード１１１〜１１４において設定されたパーティション１２３〜１３４のそれぞれに１つ以上割り当てられる。データ処理ノード１１１〜１１４のタスクは、論理データであるパーティションを介して、割り当てられたデータブロックにアクセスする。
【００２５】
なお、図１は、分散データベースシステムの構成の一例であり、例えば、他の構成例として、データ処理ノードとデータ格納ノードとを同一の物理計算機に構成してもよい。データ処理ノード上のタスクと、タスクが処理するデータが、同じ物理計算機上にあれば、ノード間のネットワーク帯域性能によってデータ転送速度が制限されることが無いため、タスクがデータにアクセスする速度が高速になる場合がある。また、各データ処理ノードでは、ノードのリソースを管理するノード管理プログラム（図示省略）が実行されるが、これらのノード管理プログラムを実行するノードを、データ処理ノードとは別に用意し、ネットワークを介して接続して、データ処理ノードを管理してもよい。この場合、ノード管理プログラムの負荷によってデータ処理ノードにおけるジョブ実行性能が影響を受けることが無くなる。
【００２６】
図２は、一実施形態に係る分散データベースシステムの機能構成図である。
【００２７】
クライアントノード１０１は、プロセッサがアプリケーション１０２を実行することにより構成されるアプリケーション実行部１０２１を有する。クライアントノード１０１のアプリケーション実行部１０２１は、ジョブ管理ノード１０３に対してデータ処理命令（例えば、ＳＱＬ）を発行する。
【００２８】
ジョブ管理ノード１０３は、データ処理命令解釈部１００１と、ジョブ構成部１００２と、タスク生成部１００３と、ジョブ発行部１００４とを有する。ジョブ管理ノード１０３では、データ処理命令解釈部１００１は、アプリケーション実行部１０２１により発行されたデータ処理命令を解釈する。ジョブ構成部１００２は、データ処理命令解釈部１００１によるデータ処理命令の解釈結果に基づいて、実行可能なジョブを構成する。タスク生成部１００３は、構成されたジョブに対応付けて、１つ以上のデータ処理ノード１１１〜１１４等に分散配置して実行させるタスクを生成する。ジョブ発行部１００４は、リソース管理ノード１０４に対して、リソース管理ノード１０４が管理するデータ処理ノード１１１〜１１４等のリソースを要求し、割り当てられたデータ処理ノードに対してジョブ、およびジョブの構成要素であるタスクを発行する。
【００２９】
リソース管理ノード１０４は、ジョブ管理部１００５と、リソース管理部１００６と、タスク分配部１００８とを有する。ジョブ管理部１００５は、発行された１つ以上のジョブを、優先度や発行順、計算リソース占有率等の条件に従ってスケジューリングし、割り当てられたデータ処理ノードにおいて実行する。リソース管理部１００６は、分散データベースシステム１に存在するデータ処理ノード１１１〜１１４等の、計算デバイスやメモリ等のリソース要素を管理する。タスク分配部１００８は、各データ処理ノード１１１〜１１４等の使用可能なリソースに応じてタスクを分配する。
【００３０】
データ管理ノード１０５は、アプリケーション実行部１０２１が処理する対象のデータソースを分散データベースシステム１内で分散配置する。データ管理ノード１０５は、データ入力部１００９と、ブロック分割部１０１０と、データ配置部１０１１とを有する。データ入力部１００９は、データソース１０６からデータを取り込み、必要に応じて分散処理に適したフォーマットに変換する。ブロック分割部１０１０は、データソース１０６のデータを、予め設定したブロックサイズに分割する。データ配置部１０１１は、データブロック１０６をデータ処理ノード１１１〜１１４等のデータ処理性能に応じたデータ量毎に各データ処理ノード１１１〜１１４等とペアリングされているデータ格納ノード１１５〜１１８等に格納する。
【００３１】
データ格納ノード１１５〜１１８等は、ブロック管理部１０１６と、ストレージ部１１９とを有する。ストレージ部１１９は、データブロックを格納する。ブロック管理部１０１６は、データ格納ノードに格納されたデータブロックに対する、データ処理ノード１１１〜１１４等で実行されるタスクからのアクセスを管理する。
【００３２】
データ処理ノード１１１〜１１４等は、タスク管理部１０１２と、タスク実行部１０１５とを有する。タスク管理部１０１２は、データ処理ノード１１１〜１１４等に配置されたタスクの実行順や、実行する計算デバイスへのタスク割り当てを管理する。タスク実行部１０１５は、データ処理ノードに配置されたタスクを実行し、このタスクに対応づけられたパーティション（１２４，１２５，１２６等）に割り当てられたデータブロックのデータを用いてタスクを実行する。
【００３３】
図３は、一実施形態に係る分散データベースシステムの全体の処理の概要を説明する図である。
【００３４】
図３に示す分散データベースシステム１は、クライアントノード１０１と、データ処理装置の一例としてのサーバ２００と、サーバ３００とを有する。図３の例では、サーバ２００は、例えば、図１のジョブ管理ノード１０３、リソース管理ノード１０４、データ管理ノード１０５と、１つのデータ処理ノード（１１１〜１１４等）と、１つのデータ格納ノード（１１５〜１１８等）とを含む構成となっている。サーバ３００は、例えば、図１のデータ処理ノードとデータ格納ノードとを含む構成となっている。
【００３５】
サーバ２００は、ＤＢ管理部２１０と、ＦＰＧＡ制御部２２０と、ハードウェア回路の一例としてのＦＰＧＡ２３０と、分散ファイルシステム２４０とを有する。
【００３６】
分散ファイルシステム２４０は、例えば、ＨＤＦＳ（Hadoop Distributed File System）であり、ファイル（ＨＤＦＳファイル：上位ファイル）を単位としてデータを管理する。ここで、分散ファイルシステム２４０は、ＨＤＦＳファイルに属するデータが分散して格納されているデータ格納ノード１１５〜１１８等のデータブロックを特定可能に管理する。本実施例では、分散ファイルシステム２４０は、ＨＤＦＳファイルのファイル名と、そのＨＤＦＳファイルを構成するデータブロックのデータを管理するサーバ２００，３００において認識可能なファイル（例えば、サーバにおけるＯＳが管理するファイル）のファイル名との対応関係を示すテーブルを管理している。
【００３７】
ＤＢ管理部２１０は、分散データベースシステム１におけるデータの検索等の処理を管理する。ＤＢ管理部２１０は、ＳＱＬパーサ部２１１と、クエリオプティマイザ部２１２と、クエリ実行エンジン部２１３と、ＦＰＧＡ処理オフロードプラグイン部２１４とを有する。ＳＱＬパーサ部２１１と、クエリオプティマイザ部２１２と、クエリ実行エンジン部２１３とは、例えば、既存のデータベース管理ソフトウェア（例えば、ｄｒｉｌｌなどのＯＳＳ（Open Source Software））をＣＰＵが実行することにより構成される。ＦＰＧＡ処理オフロードプラグイン部２１４は、既存のデータベース管理ソフトウェアに対してプラグイン可能なプログラムをＣＰＵが実行することにより構成される。ＦＰＧＡ処理オフロードプラグイン部２１４は、クエリプランの中におけるＦＰＧＡ制御部２２０及びＦＰＧＡ２３０による処理が有効な部分を、ＦＰＧＡ制御部２２０及びＦＰＧＡ２３０により処理をさせるためのパスにオフロードする仕組みを組み込んだクエリプランに変更する。
【００３８】
分散データベースシステム１における処理を説明する。
【００３９】
クライアントノード１０１では、ＢＩ（Business Intelligence）ツール等のアプリケーションを実行するアプリケーション実行部１０２１がサーバ２００に対して、ＳＱＬを発行する（図３（１））。
【００４０】
サーバ２００のＤＢ管理部２１０のＳＱＬパーサ部２１１は、ＳＱＬを受信して、解析し、解析結果をクエリオプティマイザ部２１２に渡す。クエリオプティマイザ部２１２は、ＳＱＬの解析結果に基づいて、クエリの実行計画（クエリプラン）を生成し、生成したクエリプランをＦＰＧＡ処理オフロードプラグイン部２１４に送信する。
【００４１】
ＦＰＧＡ処理オフロードプラグイン部２１４は、クエリプランにおけるＦＰＧＡ制御部２２０及びＦＰＧＡ２３０による処理が有効な部分について、ＦＰＧＡ制御部２２０及びＦＰＧＡ２３０に実行させるためのクエリプランを生成し、クエリオプティマイザ部２１２に渡す（図３（２））。
【００４２】
クエリオプティマイザ部２１２は、ＦＰＧＡ処理オフロードプラグイン部２１４から受け取ったクエリプランを、クエリ実行エンジン部２１３に渡す（図３（３））。なお、クエリプランを同時にサーバ３００に送信して、サーバ３００でクエリを実行させるようにしてもよい。
【００４３】
クエリ実行エンジン部２１３は、受け取ったクエリプランに従ってクエリの実行を行う。ここで、クエリ実行エンジン部２１３は、クエリプラン中のＦＰＧＡ２３０で実行するように設定されたクエリ処理命令を、ＦＰＧＡ処理オフロードプラグイン部２１４に渡す（図３（４．１）。ＦＰＧＡ処理オフロードプラグイン部２１４は、クエリプラン中のＦＰＧＡ２３０で実行するように設定されたクエリ処理命令をＦＰＧＡ制御部２２０に渡す（図３（４．２））。
【００４４】
ＦＰＧＡ制御部２２０は、受け取ったクエリプランを、ＦＰＧＡ２３０が実行可能な所定の形式の複数のコマンド（ＦＰＧＡコマンド）に変換し、各ＦＰＧＡコマンドをＦＰＧＡ２３０に送信する（図３（４．３））。ＦＰＧＡ制御部２２０は、ＦＰＧＡコマンドに基づくＦＰＧＡ２３０での処理対象のデータファイルを、分散ファイルシステム２４０を介して読み出し、サーバ２００の後述する主記憶装置２０３のデータバッファに格納する（図３（４．４））。
【００４５】
ＦＰＧＡ２３０は、ＦＰＧＡコマンドを受信し、ＦＰＧＡコマンドに従って、データバッファ上のデータを読み込み、ＦＰＧＡコマンドに記述されたデータ処理を実行する。ＦＰＧＡ２３０は、データ処理の実行結果をＦＰＧＡ制御部２２０に渡す（図３（４．５））。
【００４６】
ＦＰＧＡ制御部２２０は、クエリプランに基づいて生成された複数のＦＰＧＡコマンドに対応する全ての処理の実行結果をＦＰＧＡ２３０から取得した場合には、これら実行結果を集約し、クエリ処理命令に対する実行結果として、ＦＰＧＡ処理オフロードプラグイン部２１４に渡す。ＦＰＧＡ処理オフロードプラグイン部２１４は、実行結果をクエリ実行エンジン部２１３に渡す（図３（４．７））。具体的には、ＦＰＧＡ処理オフロードプラグイン部２１４は、実行結果をクエリ実行エンジン部２１３おける処理結果のフォーマット形式で主記憶装置２０３に格納する。
【００４７】
なお、クエリ実行エンジン部２１３は、クエリプランに、ＦＰＧＡ２３０によらずに自身で実行するクエリ処理命令があれば、分散ファイルシステム２４０からデータを取得して処理を実行する（図３（５．１），（５．２））。
【００４８】
その後、クエリ実行エンジン部２１３は、ＦＰＧＡ２３０での処理結果と、自身で実行した処理結果と、サーバ３００からの処理結果とをまとめて、ＳＱＬに対する処理結果としてクライアントノード１０１のアプリケーション実行部１０２１に送信する（図３（６））。
【００４９】
次に、サーバ２００のハードウェア構成について説明する。
【００５０】
図４は、一実施形態に係るサーバのハードウェア構成図である。
【００５１】
サーバ２００は、ネットワークインタフェース（Ｉ／Ｆ）２０１と、プロセッサの一例としてのＣＰＵ（Central Processing Unit）２０２と、主記憶装置２０３と、スイッチ２０４と、１以上のストレージ装置２０５と、ＦＰＧＡ２３０とを有する。ネットワークＩ／Ｆ２０１と、ＣＰＵ２０２と、主記憶装置２０３と、スイッチ２０４と、ＦＰＧＡ２３０とは、内部バス２０６を介して接続されている。なお、サーバ３００も、サーバ２００と同じハードウェア構成であってもよい。
【００５２】
ネットワークＩ／Ｆ２０１は、例えば、有線ＬＡＮカードや無線ＬＡＮカードなどのインターフェースであり、ネットワークを介して他の装置（例えば、クライアントノード１０１や、他のサーバ３００等）と通信する。
【００５３】
ＣＰＵ２０２は、主記憶装置２０３及び／又はストレージ装置２０５に格納されているプログラムに従って各種処理を実行する。
【００５４】
主記憶装置２０３は、例えば、ＲＡＭ（ＲＡＮＤＯＭ  ＡＣＣＥＳＳ  ＭＥＭＯＲＹ）であり、ＣＰＵ２０２で実行されるプログラム（データベース管理プログラムや、ＦＰＧＡ制御ミドルウェア等）や、必要な情報を記憶する。
【００５５】
スイッチ２０４は、内部バス２０７側の各部と、複数のストレージ装置２０５とを接続する。
【００５６】
ストレージ装置２０５は、例えば、ハードディスクドライブやフラッシュメモリデバイスなどであり、ＣＰＵ２０２で実行されるプログラムや、ＣＰＵ２０２に利用されるデータを記憶する。また、ストレージ装置２０５は、分散ファイルシステム２４０で管理しているファイルを構成するデータを格納するブロックデータを格納する。
【００５７】
次に、サーバ２００の機能構成を詳細に説明する。
【００５８】
図５は、一実施形態に係るサーバの機能構成図である。
【００５９】
サーバ２００は、ＤＢ管理部２１０と、ＦＰＧＡ制御部２２０と、ＦＰＧＡ２３０と、分散ファイルシステム２４０と、ＦＰＧＡドライバ２５０と、入力バッファ２５１と、ストレージ装置２０５とを有する。
【００６０】
ＦＰＧＡドライバ２５０は、ＦＰＧＡドライバプログラムをＣＰＵ２０２が実行することにより構成される。ＦＰＧＡドライバ２５０は、ＦＰＧＡ２３０をＦＰＧＡ制御部２２０から制御可能とする。入力バッファ２５１は、ＦＰＧＡ２３０に対して、コマンドの処理対象となるデータを転送するための領域である。入力バッファ２５１は、ＦＰＧＡ２３０のＤＲＡＭ２３９に格納できる容量となっている。入力バッファ２５１は、例えば、主記憶装置２０３の一部の領域で構成されていてもよい。
【００６１】
ストレージ装置２０５は、本実施形態のサーバ２００において、処理対象となる分散ファイルシステム２４０におけるＨＤＦＳファイル（上位ファイル）を格納する。本実施形態では、ＨＤＦＳファイルは、テーブルを構成するテーブルデータであるとして説明する。ＨＤＦＳファイルは、１以上のファイル（ローカルファイル：下位ファイル）２４１で構成される。ファイル２４１は、例えば、Ａｐａｃｈｅ  Ｐａｒｑｕｅｔ等のカラムデータフォーマット等のファイルである。本実施形態では、ファイル２４１が、Ａｐａｃｈｅ  Ｐａｒｑｕｅｔ形式のファイル（Ｐａｒｑｕｅｔファイル）である場合を例に説明する。ファイル２４１は、可変長のファイルであり、例えば、サイズが数十Ｍ〜１ＧＢ（バイト）である。
【００６２】
ファイル２４１は１以上のロウグループデータ２４２と、メタ情報２４３とを含む。ロウグループデータ２４２は、ＨＤＦＳファイルに対応するテーブルを構成する１以上の行（ロウ）を含むグループ（ロウグループ）に対応するデータであり、ロウグループにおける１以上のカラムに関するデータ（カラムデータ）２４２１を格納する。カラムデータ２４２１としては、各カラムの値に対応するデータと、各カラムの値を圧縮するための辞書とを含んでいてもよい。ここで、辞書としては、例えば、カラムの値が都道府県名である場合には、各都道府県名を示す数字のデータに変換するための辞書である。
【００６３】
メタ情報２４３は、ファイル２４１の最後部に配置されており、例えば、メタ情報２４３のデータ長、ロウグループ２４２の位置を特定する情報や、ロウグループにおける各カラムデータ２４２１の位置、カラムの型情報等を示す情報が含まれている。メタ情報２４３は、例えば、サイズが数十〜百ＫＢである。
【００６４】
ＦＰＧＡ制御部２２０は、ＦＰＧＡ制御ミドルウェアをＣＰＵ２０２が実行することにより構成される。ＦＰＧＡ制御部２２０は、ファイルパス解決部２２１と、メタ情報解析部２２２と、必要カラムデータ読込部２２３と、ＦＰＧＡコマンド発行部２２４と、結果まとめ部２２５とを有する。
【００６５】
ＦＰＧＡ２３０は、レジスタ２３１と、入力バッファ転送部２３２と、データデコーダ２３３と、フィルタ２３４と、プロジェクション部２３５と、集約部２３６と、ＤＭＡＣ（Direct Memory Access Controller）２３７と、出力部２３８と、メモリの一例としてのＤＲＡＭ２３９とを有する。ＦＰＧＡ２３０の各構成部は、例えば、物理的な回路により構成されている。
【００６６】
次に、サーバ２００によるデータ処理を詳細に説明する。
【００６７】
例えば、クライアントノード１０１からサーバ２００に対してＳＱＬが発行されると、サーバ２００のＤＢ管理部２１０は、ＳＱＬを受信し、図３に示した処理により、ＦＰＧＡ２３０により実行させるクエリプラン（第１コマンド）をＦＰＧＡ制御部２２０に出力する。ここで、このクエリプランには、処理対象のＨＤＦＳファイルのファイル名（対象特定情報）、処理内容（処理命令）等が含まれている。
【００６８】
ＦＰＧＡ制御部２２０では、ＤＢ管理部２１０から出力されたクエリプランを受信すると、ファイルパス解決部２２１がクエリプランに含まれているＨＤＦＳファイルのファイル名から、ＨＤＦＳファイルに対応する、サーバ２００で管理している１以上のファイル２４１のファイル名を解決する処理を実行する。具体的には、ファイルパス解決部２２１は、クエリプラン中のＨＤＦＳファイル名を、分散ファイルシステム２４０に投げて、分散ファイルシステム２４０から対応するファイル２４１のファイル名を取得する。なお、分散ファイルシステム２４０では、ＨＤＦＳファイルのファイル名と、対応するローカルにおけるファイル２４１のファイル名との対応関係を示す情報（例えば、テーブル等）を管理しており、この情報に基づいて、受け取ったＨＤＦＳファイル名に対応するローカルのファイル名２４１を返送する。
【００６９】
次いで、メタ情報解析部２２２は、ファイルパス解決部２２１が取得したファイル名に基づいて、ストレージ装置２０５からファイル２４１を取得して主記憶装置２０３にロードし、このファイル２４１からメタ情報２４３を取得し、メタ情報２４３から、ロウグループの位置及びカラム位置等を特定する。なお、ファイルパス解決部２２１が複数のファイル名を取得した場合には、メタ情報解析部２２２は、それぞれのファイル名のファイルを対象に同様な処理を実行する。この際、一のファイルに対する処理が終わった直後に他のファイルの処理を実行しないで、例えば、一のファイルに対するＦＰＧＡ２３０側の処理が終わりそうな場合に、次のファイルに対する処理を実行するようにしてもよい。
【００７０】
次いで、必要カラムデータ読込部２２３が、クエリプランの処理内容を取得し、処理内容に基づいて処理対象とするカラムを特定し、各ロウグループを単位として、処理対象のカラムのカラムデータを特定し、特定したカラムデータ（部分データの一例）を、主記憶装置２０３のＦＰＧＡ２３０への転送用のバッファである入力バッファ２５１に読み込む。なお、必要カラムデータ読込部２２３が次のロウグループのカラムデータを入力バッファ２５１に読み込むタイミングとしては、前の読み込んだロウグループのカラムデータがＦＰＧＡ２３０に取り込まれた後であって、次のＦＰＧＡ２３０による入力バッファ２５１からのデータの取り込みに間に合うタイミングであればよい。このようにすると、ＦＰＧＡ２３０は、必要なデータの入力バッファ２５１からの取り込みを行う際に、必要カラムデータ読込部２２３による処理を待つことがなく、連続的にＦＰＧＡコマンドに対する処理を実行することができるようになるので、処理効率が高くなる。
【００７１】
次いで、ＦＰＧＡコマンド発行部２２４は、処理内容と、入力バッファ２５１に格納したカラムデータのカラムの種類及び位置とを含むカラム情報と、を含むＦＰＧＡコマンド（第２コマンド）をＦＰＧＡ２３０に対して発行する。このＦＰＧＡコマンドは、入力バッファ２５１に格納されているカラムデータ、すなわち、１つのロウグループのデータを処理対象とするコマンドである。したがって、ＦＰＧＡコマンド発行部２２４は、ロウグループ毎に対応したＦＰＧＡコマンドを順次発行することとなる。ＦＰＧＡコマンドを発行するタイミングとしては、例えば、前に発行したＦＰＧＡコマンドに対する処理結果を含む応答があった場合としてもよい。なお、主記憶装置２０５における入力バッファ２５１の位置が決められていない場合には、ＦＰＧＡコマンドに入力バッファ２５１の先頭アドレスと、データサイズとを含めてもよい。
【００７２】
ＦＰＧＡコマンド発行部２２４で発行されたＦＰＧＡコマンドは、ＦＰＧＡドライバ２５０を介してＦＰＧＡ２３０に渡される。
【００７３】
ＦＰＧＡ２３０では、入力バッファ転送部２３２が、ＦＰＧＡコマンドのカラム情報をレジスタ２３１に格納し、ＦＰＧＡコマンドの対象とするカラムデータを入力バッファ２５１からＤＲＡＭ２３９に転送させる指示をＤＭＡＣ２３７に行う。
【００７４】
次いで、ＤＭＡＣ２３７は、指示に従って、入力バッファ２５１のカラムデータを、ＤＲＡＭ２３９に読み出す。
【００７５】
次いで、データデコーダ２３３は、レジスタ２３１のカラム情報に基づいて、ＤＲＡＭ２３９に格納されたカラムデータを特定し、カラムデータ中に辞書があれば、その辞書に基づいて各カラムデータに含まれるデータを圧縮前の値に伸張する。
【００７６】
フィルタ２３４は、ＦＰＧＡコマンドの処理内容にフィルタリングの命令が含まれている場合には、データデコーダ２３３により伸張されたデータについて、命令に従ったフィルタリングをする。なお、フィルタ２３４は、ＦＰＧＡコマンドの処理内容にフィルタリングの命令が含まれていない場合には、何もしない。
【００７７】
また、プロジェクション部２３５は、ＦＰＧＡコマンドの処理内容にプロジェクションの命令が含まれている場合には、データデコーダ２３３により伸張されたデータについて、命令に従った必要なカラムのみを取り出す。
【００７８】
また、集約部２３６は、ＦＰＧＡコマンドの処理内容に基づいて、フィルタ２３４や、プロジェクション部２３５による処理により得られた結果を集約する処理を実行し、集約した処理結果を出力部２３８に渡す。
【００７９】
出力部２３８は、集約部２３６から渡された処理結果を、ＦＰＧＡ制御部２２０の結果まとめ部２２５に渡す。具体的には、例えば、出力部２３８は、主記憶装置２０５の出力バッファに処理結果を格納する。なお、出力装置２０５の出力バッファの位置が予め決められていない場合には、処理結果を格納した場所を指定する情報をＦＰＧＡ制御部２２０に通知するようにしてもよい。
【００８０】
ＦＰＧＡ制御部２２０では、結果まとめ部２２５が、１つのクエリプランから生成された複数のＦＰＧＡコマンドによるＦＰＧＡ２３０の処理結果をまとめ、１つのクエリプランから生成された全てのＦＰＧＡコマンドによるＦＰＧＡ２３０の処理結果をまとめ終わった場合には、この処理結果をＤＢ管理部２１０にクエリプランに対する処理結果として渡す。なお、ＤＢ管理部２１０は、図３に示したように、ＳＱＬに対する全てのクエリプランに対する処理結果が得られた場合に、クライアントノード１０１にＳＱＬの処理結果として送信することとなる。
【００８１】
以上説明したように、ＦＰＧＡ２３０では、入力バッファ２５１に格納された処理対象のデータをＤＲＡＭ２３９に転送させて、処理を実行すればよいので、大きなサイズのファイルに対応するための回路を内部に備える必要がなく、回路構成を単純化することができる。
【００８２】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【００８３】
例えば、上記実施形態では、カラムデータ中に、値を圧縮するための辞書を格納するようにしていたが、値を圧縮しない場合には、カラムデータ中に辞書を備えなくてもよい。
【００８４】
また、上記実施形態では、サーバ２００にＦＰＧＡ２３０を１つ備えた例を示していたが、本発明はこれに限られず、サーバ２００に複数のＦＰＧＡ２３０を備えるようにしてもよい。この場合には、クエリプランに基づく複数のＦＰＧＡコマンドを、各ＦＰＧＡ２３０に振分けてもよい。
【００８５】
また、上記実施形態では、ＦＰＧＡ制御部２２０は、各ファイルの各ロウグループを単位（部分データ）として、ＦＰＧＡコマンドの処理対象としていたが、本発明はこれに限られず、例えば、ローカルのファイル２４１のサイズが、ＦＰＧＡ２３０で受け付け可能なサイズ（例えば、ＦＰＧＡ２３０のバッファサイズ）以内であれば、１つのＦＰＧＡコマンドの処理対象としてもよく、また、１つのロウグループ単位ではなく、複数のロウグループを単位（部分データ）としてＦＰＧＡコマンドの処理対象としてもよい。
【００８６】
また、上記実施形態では、ＦＰＧＡ２３０がデータデコーダ２３３を１つ備えた例を示していたが、本発明はこれに限られず、例えば、データデコーダ２３３を複数備えて、ＤＲＡＭ２３９に格納されている複数のカラムデータを並行して伸張させるようにしてもよい。
【００８７】
また、上記実施形態では、ロウグループのデータとメタ情報とを同一のファイルとして管理している例を示しているが、本発明はこれに限られず、ロウグループのデータと、そのメタ情報とを別々に管理してもよく、要は、ロウグループのデータのメタ情報を特定できれば、メタ情報をどのように管理してもよい。
【００８８】
また、上記実施形態では、ハードウェア回路として、ＦＰＧＡを例にしていたが、本発明はこれに限られず、ＦＰＧＡに代えて、専用ＡＳＩＣや、ＧＰＧＰＵとしてもよい。
【００８９】
また、上記実施形態におけるプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア（例えば可搬型の記憶メディア）であってもよい。
【符号の説明】
【００９０】
１…分散データベースシステム、１０１…クライアントノード、２００…サーバ、２０２…ＣＰＵ、２０３…主記憶装置、２０５…ストレージ装置、２１０…ＤＢ管理部、２２０…ＦＰＧＡ制御部、２３０…ＦＰＧＡ、２３９…ＤＲＡＭ
【図１】
2020135318.tif 000003
【図２】
2020135318.tif 000004
【図３】
2020135318.tif 000005
【図４】
2020135318.tif 000006
【図５】
2020135318.tif 000007