WO2016194401A1 - 計算機、データベース処理方法、及び集積回路 - Google Patents

計算機、データベース処理方法、及び集積回路 Download PDF

Info

Publication number
WO2016194401A1
WO2016194401A1 PCT/JP2016/053273 JP2016053273W WO2016194401A1 WO 2016194401 A1 WO2016194401 A1 WO 2016194401A1 JP 2016053273 W JP2016053273 W JP 2016053273W WO 2016194401 A1 WO2016194401 A1 WO 2016194401A1
Authority
WO
WIPO (PCT)
Prior art keywords
dictionary
data
conversion
conversion table
column
Prior art date
Application number
PCT/JP2016/053273
Other languages
English (en)
French (fr)
Inventor
芳孝 ▲辻▼本
本村 哲朗
義文 藤川
Original Assignee
株式会社日立製作所
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 株式会社日立製作所 filed Critical 株式会社日立製作所
Publication of WO2016194401A1 publication Critical patent/WO2016194401A1/ja

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures

Abstract

 行指向データベースから列指向データベースへの変換処理をFPGAとCPUを併用して高速に行う。 計算機は(1)行指向形式で格納され、前記列指向データベースに追加すべきデータである追加データを列指向形式に変換した一時辞書符号化データと、一時辞書符号化データに対応した一時辞書データを生成する第1論理と、(2)一時辞書符号化データと、前記一時辞書データとを列指向データベースに追加する第2論理と、を含む集積回路を備える。計算機は、第1論理又は計算機のCPUが生成する一時辞書データのエントリ数に基づいて、前記第2論理を駆動すべきか否か判断する。

Description

計算機、データベース処理方法、及び集積回路
 この発明は、概して、データベースの処理に関する。
 データベース処理には、大きく2種類の処理がある。1つは、オンライントランザクション処理(OnLine Transaction Processing:OLTP)であり、もう1つは、オンライン分析処理(OnLine Analytical Processing:OLAP)である。OLTPはデータベースを行単位で更新する操作が多く、行指向データベースにより効率よく処理できる。OLAPはデータベースを読み出し、傾向を分析する操作が多く、列指向データベースにより効率よく処理できる。
 近年では、OLTPによって更新されたデータベースを用いて、刻々と変わる傾向をOLAPにて即時分析することが要求されるようになってきた。このように1つのデータベースに対してOLTPとOLAPの2つの処理が行えるデータベースが求められており、行指向データベースと列指向データベースの両方の特性を持ち合わせたデータベースシステムが登場している。この様なデータベースでは、内部で行指向データベースから列指向データベースへ変換することが行われている。
 特許文献1には、OLTPにより変更があった行を含んだ行指向データベースである増分データを、列指向データベースの増分データへ変換するだけでなく、値の辞書符号化も行われ、それからメインデータにマージすることが開示されている。行指向データベースから列指向データベースへの変換は、外部の行指向データベースからデータをインポートし、列指向データベースを構築する場合にも行われる。
 非特許文献2では、変換対象列のデータタイプと辞書エントリ数に応じて、変換処理に最適なデバイス、CPU、FPGA、もしくは、GPUを割り当てる方式が比較、検討されている。
特開2014-16983号公報 特許第3905221号 特許第4391464号 特許第4978006号
J.W.J Williams."Heapsort,"CACM,Vol.7,No.6,June1964. Eoghan O’Neill, et al.:"Cross Resource Optimisation of Database Functionality Across Heterogeneous Processors",IPSA,2014,p150-157
 辞書符号化を伴う行指向データベースから列指向データベースへの変換処理は、FPGAでもCPUでも実行可能である。しかし変換処理対象のデータによっては、FPGAで処理すると高速な場合も、CPUで処理すると高速な場合もある。例えばCPUの場合、データベースに含まれる辞書エントリ数、列の並び順などのデータの性質によって、キャッシュのヒット率が大きく変わり、CPUのデータベース変換処理時間が大幅に変動する。加えて、上記変換処理は複数の変換やマージといったデータ操作処理内容(以後、単に処理内容と省略する)に分割できる。しかし、従来技術にはこれらを踏まえたFPGA及びCPUの併用による高速化にについて開示されていない。
 計算機は(1)行指向形式で格納され、前記列指向データベースに追加すべきデータである追加データを列指向形式に変換した一時辞書符号化データと、一時辞書符号化データに対応した一時辞書データを生成する第1論理と、(2)一時辞書符号化データと、前記一時辞書データとを列指向データベースに追加する第2論理と、を含む集積回路を備える。計算機は、第1論理又は計算機のCPUが生成する一時辞書データのエントリ数に基づいて、前記第2論理を駆動すべきか否か判断する。
 本発明により、行指向データベースから列指向データベースへの変換処理を高速に実行することができる。
第1のデータベース変換処理が行われる状況を示す図。 第2のデータベース変換処理が行われる状況を示す図。 実施例1のシステム例を示す図。 変換前の行指向データベース構造の1例を示す図。 変換後の列指向データベース構造の1例を示す図。 1つの列に対する増分データの変換とメインデータへのマージ処理のフローチャート。 増分データを列指向に変換する処理のフローチャート。 辞書符号化装置と辞書ソート装置を示す図。 辞書符号化コマンドのパラメータを示す図。 辞書符号化の処理のフローチャート。 辞書RAM装置内部とその周辺装置を示す図。 辞書RAM内の検索のフローチャート。 長い文字列の場合の辞書RAM装置を示す図。 辞書ソート装置内のヒープ構造と出力データの辞書とソートindexを示す図。 未ソート辞書とソート済辞書とソートindexの関係を示す図。 具体的な辞書のマージ処理を示す図。 id変換テーブルの生成過程を示す図。 id変換テーブルの差分形式を示す図。 辞書マージソート装置を示す図。 辞書マージコマンドのパラメータを示す図。 辞書マージ処理のフローチャート。 id変換テーブル操作装置を示す図。 id変換テーブル操作コマンドのパラメータを示す図。 id変換テーブル操作のフローチャート。 id変換処理の過程を示す図。 id変換装置を示す図。 id変換コマンドのパラメータを示す図。 id変換処理のフローチャート。 実施例3のシステム例を示す図。 デバイス選択部の入出力パラメータを示す図。 SWライブラリ、FPGAコマンド、FPGA論理ブロックの対応を示す図。 FPGAとCPUの辞書マージ処理時間比較を示す図。 列数1の場合のデバイス選択部の変換処理フローチャート。 処理内容に応じたデバイス選択結果を示す図。 複数列の場合のデバイス選択部の変換処理フローチャート。 処理内容に応じた複数列のデバイス選択結果を示す図。
 幾つかの実施例を、図面を参照して説明する。なお、以下に説明する実施例は請求の範囲にかかる発明を限定するものではなく、また実施例で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
 また、以下の説明では、ハードウェアを主語として処理を説明する場合があるが、プログラムをハードウェアの自体、またはハードウェアが有するプロセッサ(例えば、MP(Micro Processor))によって実行することで、定められた処理を、適宜に記憶資源(例えばメモリ)及び/又は通信インターフェースデバイス(例えばポート)を用いながら行うため、処理の主語がプログラムとされても良い。
 また、以下の説明ではFPGAを構成する装置は、論理ブロックと呼ぶこともできる。FPGAの構成は、実施例中で説明する構成に限定されない。例えば、FPGA内の1つの装置が行う処理を複数の装置で行うようFPGAを構成してもよい。また、複数の装置が行う処理を1つの装置で行うようにFPGAを構成してもよい。
 さらに、実施例で説明する処理の順番は、実施例で説明された順番やフローチャートに記載された順番に限定されない。FPGAはその特徴から、複数の処理を各装置で同時並行して処理することができる。
 これから本実施例で説明する行指向データベースから列指向データベースへの変換がおこなわれる状況には、大きく2つある。1つは図1に示す場合であり、外部の行指向データベース101からデータをインポートし、列指向データベース203を構築する場合である。2つ目は図2に示す場合であり、OLTPにより変更があった行を含んだ行指向データベースである増分データ201を、列指向データベースの増分データ202へ変換し、それからメインデータ203にマージする。これらの変換処理は重い処理であり、高速な処理が重要になる。
 図3は、実施例1のデータベース処理装置300の全体を示す図である。データベース処理装置300は、データベースの処理をする装置であって、サーバやパーソナルコンピュータ、サーバとストレージ装置又はサーバとネットワークとを一体型の筺体とした統合プラットフォームのような計算機、あるいはシステムである。データベース処理装置300内では、主記憶装置(以下、主記憶)301とCPU(Central Processing Unit)302と二次記憶装置(以下、二次記憶)303と、外部装置とのインタフェースであるNIC(Network Interface Card)304と論理回路であるFPGA310が、データの通信を行うシステムバス305によって接続されている。本実施例で説明する処理は、FPGA310内に実装される。主記憶301は、RAM(Random Access Memory)やDRAM(Dyanmic Random Access Memory)のような揮発性メモリや、フラッシュメモリのような不揮発性メモリ等から構成され、データベースやソフトウェアのデータを一次的に記憶する。また、主記憶301に処理に必要なデータを格納しデータベースの処理も行われる。CPU302は、主記憶301に格納されたプログラムやデータベース処理を実行する。二次記憶303は、データの最終記憶媒体で、HDD(Hard Disk Drive)やSSD(Solid State Drive)等から構成される。処理対象となる行指向データベースは、NIC304を通して外部から入力され、主記憶301上に格納される。または、一旦二次記憶303に格納され、処理開始前に主記憶301上に格納される。あるいはCPU302によりデータが作成され、主記憶301上に格納される。
 変換処理は、CPU302上で動くソフトウェアと、FPGA310内の装置を用いて、主記憶301上に格納された行指向データベースを読み出し、変換後、列指向データベースは主記憶301上に格納される。変換処理に必要な中間データの一部も必要に応じて、主記憶301上に格納される。
 図3のFPGA310は、インタフェース装置311によってシステムバス305と接続される。FPGA310内には、列データ化と辞書符号化を行う論理ブロックである列データ化と辞書符号化装置312と、辞書データの各エントリのソート処理を行う論理ブロックである辞書ソート装置313と、複数の辞書をマージし新たな辞書を作成する処理を行う論理ブロックである辞書マージ装置314と、マージ前の辞書とマージ後との対応関係を管理するid変換テーブルを作成する論理ブロックであるid変換テーブル操作装置315と、ソート前の辞書とソートしてマージした後の辞書との対応関係を管理するid変換テーブルを作成する論理ブロックであるid変換装置316があり、それぞれインタフェース装置311と接続されている。
 主記憶301上に置かれた処理対象の行指向データベースのデータ形式の一例を図4に示す。行指向データベース410の格納場所は、先頭アドレス401で示され、行の大きさ403に1行のバイト数が格納されている。また、先頭アドレス401の値に行の大きさ403の値を加えると、2行目の先頭アドレスが得られる。行数402の値は、行指向データベース410の総行数を示す。列数404は、行指向データベース410の列の数を示し、各列ごとに、列のオフセット405と列のデータ型406の値を持つ。列のオフセット405は、各行の先頭からその行の各列の先頭までの距離を示す。列のデータ型406は、各列のバイト数や、数値、文字列などの型情報を示す。
 列指向データベースのデータ形式の一例を図5に示す。列指向データベースは主記憶301に格納されている。列指向データベース501は、複数の列データ502によって構成される。列データ502は、符号化データ511と辞書データ512とオプションの度数表513とそれらデータの位置や大きさを示す複数の値で構成される。ここで辞書データ512とは、列データ502で示される列に存在するデータの集合であり、各データには符号が付けられ、管理されている。また、符号化データ511とは、列の各行のデータを、辞書データ中の対応する符号で管理するデータである。列データ502で示される列のn行目のデータは、符号化データ511のn行目の符号と、その符号と対応するデータとを辞書データ512から検索することで得られる。符号化データ511の格納場所は符号化データアドレス521で格納場所の先頭アドレスが示され、符号化データ511の個々のデータの大きさは符号化ビット長522で示される。辞書データ512の格納場所は辞書先頭アドレス527で示され、辞書データ512の個々のエントリの大きさはデータ型523で示される。辞書データ512は辞書の個数524で示される個数の辞書から構成されており、それぞれの辞書に含まれるエントリ数は辞書のエントリ数526で示される。各辞書に対する符号化データの個数は、辞書に対するデータ行数525で示される。辞書の各エントリに対して参照回数を記録した度数表513のエントリが1対1で対応する。度数表513の格納場所は度数表のアドレス528により示される。
 FPGA310内の装置は、図4で示すような行指向データベースの各列を処理し、図5に示すような列指向データベースに変換し、増分データの場合はその後メインデータへマージする。
 行指向データベースから列指向データベースへの変換処理は各列ごとに独立に処理が行われる。増分データを変換しメインデータへマージする処理の流れを、図6のフローチャートを用いて説明する。1つの列の処理は、S600からスタートし、FPGA310は、S601において増分データを辞書符号化する。S602では、FPGA310は、S601で作成された辞書と、もともと存在するメインデータの辞書を合わせてソート処理を行い(辞書マージ処理)、S601で作成された辞書とメインデータの辞書とをマージした新たな辞書を作成する。新たな辞書に対応して、符号化データの値を書き換える必要があるため、メインデータと増分データそれぞれの符号化データを書き換えるためのid変換テーブルも作成する。S603では、FPGA310は、辞書マージ処理により、新たな辞書と元のメイン辞書の間で、変更があったかどうかを検査する。id変換テーブルを調べることでこの検査は容易に検査可能である。もし、変更されていないならば、S605の処理に移る。変更されていた場合は、FPGA310は、S604でメインデータの符号化データをid変換テーブルに従って書き換え後のメイン辞書に対応するよう書き換える。その後、S605において、FPGA310は、増分データの符号化データをid変換テーブルに従って書き換え、メインデータに追加する。そして、S606で終わる。この処理をすべての列に対して行うことで、行指向データベースは列指向データベースに書き換えられる。S601乃至S602におけるマージ処理とid変換テーブルの作成処理については、図16、図17、図18を用いて詳細は後述する。また、S604とS605の詳細は、図26乃至28でも後述する。なお、外部の行指向データベースからデータをインポートし、列指向データベースを新たに構築する場合は、S601の処理のみが行われ、S601で作成されたデータがメインデータとして使用される。
 S601のより詳しい処理を、図7に示すフローチャートを用いて説明する。S700からスタートし、列データ化と辞書符号化装置312と辞書ソート装置313とは、S701ではある一定の大きさ以下の辞書を1個または複数生成しながらデータを符号化する。S701の詳細は図10のフローチャートを用いて後述する。S702では、辞書ソート装置313が、S701で生成された1又は複数の辞書をそれぞれソートする。また、同時に、辞書ソート装置313が、ソート前とソート後の符号の対応表であるソートindexを各辞書に対して生成する。S701とS702は、図8乃至図15を用いて詳細は後述する。ここで、FPGA310内の辞書RAMには使用量の限界があるため、辞書RAMの使用量が辞書容量制限値を超えると、1つの辞書の作成は終了し、新たな辞書が作成される。そのため、増分データの辞書が複数存在することがある。詳細は図8乃至11を用いて後述する。S703では、制御装置801が、S701で生成された辞書の数をチェックし、1つの辞書のみ生成されたならばS706へ処理が移り、2つ以上の辞書が生成されたならばS704へ処理が移る。S704では、辞書マージ装置314が複数の辞書をマージソートによりマージとソートをし、1つの辞書にまとめる。S704の詳細は、図19乃至図21を用いて後述する。次にS705において、id変換テーブル操作装置315が、1つの辞書にマージする前と後の符号の対応表であるid変換テーブルを生成する。S705の詳細は、図22乃至図24を用いて詳細に説明する。S704とS705は、図16乃至図18でも詳細を後述する。最後にS706に移り、処理は終わる。
 S701とS702の処理は、FPGA310の列データ化と辞書符号化装置312と辞書ソート装置313とを用いて、行われる。図8に、列データ化と辞書符号化装置312と辞書ソート装置313のブロック図を示す。列データ化と辞書符号化装置312は、制御装置801と、元データ入力FIFO802と、符号決定装置803と、辞書RAM804と、辞書使用量計測装置805と、データ符号出力装置806と、行数出力装置807とを有する。辞書ソート装置313は、辞書データと登録idとをヒープ構造で格納するヒープ構造データ811と、辞書・ソートindex出力装置812とを有する。ここで辞書RAM804は、一次的な辞書記憶部であり、RAMに限らずDRAMやフラッシュメモリ等、データを記憶できる媒体であればよい。
 図9に、辞書符号化を指示する操作コマンドである辞書符号化コマンド900を示す。辞書符号化コマンド900には、コマンドの種類が辞書符号化コマンドであることを示す辞書符号化コマンド901、辞書使用量の制限を指定するパラメータである1つの辞書の最大エントリ数911と1つの辞書の最大容量912とが含まれる。さらに辞書符号化コマンド900には、行型データベースのアドレス921、行型データベースの行数921、行型データベースの1行の大きさ923、対象列のオフセット924、対象列のデータ型925、といった図4で説明した入力データである行型データベースを指定するパラメータが含まれる。また、辞書符号化コマンド900は、辞書の数、辞書ごとのエントリ数、辞書、各エントリのオフセット、ソートindex、度数表のそれぞれ出力先を指定するパラメータである、辞書の数出力アドレス931と、辞書ごとのエントリ数出力アドレス932と、辞書の出力先アドレス933と、各エントリのオフセット出力アドレス934と、ソートindexの出力アドレス935と、度数表の出力アドレス936とを含む。さらに、符号化データの出力先を指定する符号化データ出力アドレス941、符号をビットパックするときのビット長を指定する符号化ビット長942、辞書ごとのデータ行数の出力先を指定する辞書ごとのデータ行数出力アドレス943を、出力を指定するパラメータとして辞書符号化コマンド900は有する。
 列データ化と辞書符号化装置312と辞書ソート装置313とを動作させるために、まず、CPU302より操作コマンドである図9に示す辞書符号化コマンド900を、システムバス305とインタフェース装置311を通して、制御装置801に指示する。制御装置801は辞書符号化コマンド900内の901の値を確認し、辞書符号化を開始する。
 図10に、列データ化と辞書符号化装置312の動作のフローチャートを示す。
 S701の処理を、図8乃至図10を用いて説明する。S1001では、制御装置801が、辞書RAM804内のデータを初期値にリセットする。
 制御装置801は、コマンド900内の入力データに関するパラメータ921、922、923、924、925に従って、各行の指定の列データを主記憶301から読み出し、元データ入力FIFO802にデータを入れる(S1002)。符号決定装置803は、元データ入力FIFO802から順に1つのデータを取り出し(S1003)、そのデータが辞書RAM804に登録されているか検索する(S1004)。
 登録されていれば(S1005:YES)、符号決定装置803は、そのデータの登録idを符号としデータ符号出力装置806に出力する。
 登録されていなければ(S1005:NO)、まず制御装置801は、辞書使用量計測装置805からのRAM使用量信号(すなわち、後述する辞書1112の登録エントリ数)をチェックし、登録エントリ数(すなわち使用量)がコマンド900のパラメータ911で指定された1つの辞書の最大エントリ数を超えないかチェックする(S1006)。制御装置801は、もし使用量がコマンド900内のパラメータ911を超えないようなら(S1006:Yes)、辞書に新たにデータを登録するよう符号決定装置803と辞書RAM804に指示し、符号決定装置803と辞書RAM804とは新たに辞書RAM804にデータを登録する(S1009)。もし使用量が辞書容量制限値を超えるようなら(S1006:Over Flow)、制御装置801は、辞書ソート装置313に辞書登録終わりの信号を出力し、辞書ソート装置313は辞書のソート処理を行う(S1007)。すなわち、ここで辞書を分割する。制御装置801は、辞書RAM804を初期値にリセットするよう指示し、それまでに処理した行数を行数出力装置807に出力する(S1008)。辞書RAM804はリセットされ、新たな辞書が作成される。その後、制御装置801は、辞書に新たにデータを登録するよう符号決定装置803と辞書RAM804に指示し、符号決定装置803と辞書RAM804とは新たに辞書RAM804にデータを登録する(S1009)。辞書登録が済めば、符号決定装置803は、そのデータの登録idを符号としデータ符号出力装置806に出力する(S1013)。なお、辞書RAM804にデータ登録する際に、辞書RAM804は、辞書ソート装置313に、登録idと登録データとを送る。
 データ符号出力装置806は、コマンド900内のパラメータ942に従って符号をビットパックし、パラメータ941の示すアドレスを先頭に順に符号を主記憶301に出力する(S1013)。同様に行数出力装置807は、コマンド900内のパラメータ943の示すアドレスを先頭に行数を主記憶301に出力する(S1013)。行数は、あらかじめ列データを行数で分割する場合と異なり、辞書を分割後にしかわららないため出力される。
 そして、制御装置801は、辞書ソート装置313に辞書登録終わりの信号と全行の処理が終わったことを知らせる信号を出力し、S702に進む。
 ここで、辞書RAM804の使用量が辞書容量制限値を超えないかの判断を、辞書1112の登録エントリ数とパラメータ911の値とを比較して行っているが、辞書1112のデータ容量とパラメータ912の値とを比較して行ってもよい。また、辞書1112の容量でなく、辞書RAM804全体の使用量と対応する閾値とを比較して判断してもよい。
 以上の処理により、次のエントリを登録すると閾値である辞書容量制限値を超えてしまうまで、すなわち、辞書RAM804の使用量が閾値を超える直前まで、辞書にエントリを登録することができ、辞書1112の容量が辞書RAM804の容量を超えることにより処理が進められなくなることを防ぎつつ、辞書RAM804を最大限に効率よく使用することができる。すなわち、列データをあらかじめ決められた行数で分割する場合と比較して、辞書RAM804に一度に格納できる辞書1112のサイズが大きくなり、辞書の分割数が少なくなる。よって、辞書の数が少なくなることにより、ソート処理や、マージ処理、id変換テーブル操作処理、id変換処理のための主記憶301からの辞書の読み込みや、主記憶301への辞書の書き出しといった、時間がかかるFPGA310外部の主記憶301とのデータの送受信数処理の回数が少なくなり、辞書の符号化処理を高速に行うことができる。
 フローチャートのS1004に相当する部分は、符号決定装置803と辞書RAM804により行われ、より詳しいブロック図を図11に示す。また、図10のS1004乃至S1013の詳細なフローチャートを図12に示す。
 符号決定装置803は、データからハッシュ値を計算するハッシュ関数装置1101と、入力データと辞書のデータを比較する比較装置1102から成る。辞書RAM804は、ハッシュ表1111と、辞書データと頻度を格納した辞書1112と、ハッシュコンフリクト時に処理する為のリンク値を格納したリンク表1113から成る。ハッシュ表1111は、各ハッシュ値に対応する辞書データの登録idが格納される。辞書1112には、登録idで示される各エントリに、辞書データとその辞書データの出現回数である頻度値とが格納される。リンク表1113には、ハッシュコンフリクトを起きた場合の辞書データの登録idを格納する。辞書使用量計測装置805は、辞書1112の登録エントリ数をカウントする辞書エントリ数レジスタ1121を持つ。ハッシュ表1111とリンク表1113の各エントリの初期値はNILである。辞書1112の頻度値の初期値は0である。辞書エントリ数レジスタ1121の初期値は0である。
 符号決定装置803が元データ受け取ると、まずデータをハッシュ関数装置1101に送り、ハッシュ関数装置1101は、ハッシュ表1111のエントリ数に対応したハッシュ値を計算する(S1201)。ハッシュ値はハッシュ表1111へ送られ、辞書RAM804は、値に基づいてハッシュ表1111のエントリを読む(S1202)。値がNILならば(S1005:No、S1203:Yes)、辞書に登録されていないので(S1213)、辞書RAM804は、辞書エントリ数レジスタ1121の値をハッシュ表1111のハッシュ値が示すエントリに書き込み(S1214、S1215)、辞書エントリ数レジスタ1121の値が示す登録idで示される辞書1112のエントリに元データを登録する(S1009、S1215)。符号決定装置803は、辞書エントリ番号すなわち登録idを符号とし、辞書RAM804は、辞書1112の頻度値を1とする(S1011、S1218)。そして、辞書使用量計測装置805は、辞書エントリ数レジスタ1121の値を+1インクリメントする(S1010、S1217)。
 ハッシュ表1111のエントリ値がNILで無いならば(S1203:No)、辞書に登録されている可能性があるので、辞書RAM804は、そのエントリ値に基づいて辞書1112のエントリのデータを読み出し(S1205)、比較装置1102へ送る。比較装置1102は、元データと辞書のデータを比較する(S1206)。もし、一致する場合は(S1005:Yes、S1206:等しい)、元データが辞書1112内に存在するため(S1216)、符号決定装置803は、辞書データのエントリ番号を符号とし、辞書RAM804は、辞書1112の頻度値を+1インクリメントする(S1012、S1218)。もし一致しない場合は、ハッシュコンフリクトとなるので、元データが辞書データより小さいならば(S1206:辞書順で前)リンク表1113のLの欄を参照し(S1207)、元データが辞書データより大きいならば(S1206:辞書順で後)リンク表1113のRの欄を参照する(S1208)。もし参照値がNILならば(S1005:No、S1204:Yes)、辞書に登録されていないので(S1210)、辞書RAM804は、辞書エントリ数レジスタ1121の値を参照したリンク表1113の欄に書き込み(S1211、S1212)、辞書エントリ数レジスタ1121の値が示す登録idで示される辞書1112のエントリに元データを登録する(S1009、S1216)。符号決定装置803は辞書エントリ番号を符号とし、辞書1112の頻度値を+1インクリメントする(S1011、S1218)。そして、辞書使用量計測装置805は、辞書エントリ数レジスタ1121の値を+1インクリメントする(S1010、S1217)。もし参照値がNILでないならば(S1204:No)、辞書RAM804は、参照値に基づいて辞書1112のエントリのデータを読み出し(S1205)、比較装置1102へ送る。以下同様に、元データと辞書のデータを比較し(S1206)、処理を進め、符号を決定する。
 ただし、前述したように、辞書に新たにデータを登録する際には、制御装置801が、辞書エントリ数レジスタ1121の値をコマンド900内のパラメータ911と比較し、超えそうな場合は辞書をリセットして作業を進める。
 コマンド900内のパラメータ925として、辞書1112のデータ欄に入りきらない長い文字列などが指定された場合は、図13に示すように、辞書RAM804に文字列メモリ1301を設け、辞書1112のデータエントリには文字列メモリ1301内の位置と長さを記録する。符号決定装置803から辞書RAM804に辞書データ参照依頼がくると、辞書RAM804は、辞書1112のデータエントリが示す文字列メモリ1301内のデータを符号決定装置803に返す。
 続いて、S1007及びS702の各辞書のソート、ソートindexの作成処理について説明する。図8の辞書ソート装置313は、辞書の登録データをソートする装置である。ヒープ構造データ811と辞書・ソートindex出力装置812とを有する。実施例では、非特許文献1に示されているヒープソートアルゴリズムを元にした方法によってソートする。ハードウェアへの実装方法には、特許文献2や特許文献3があり、並列動作により高速にソートが行われる。列データ化と辞書符号化装置312から辞書登録データと登録idを受け取ると、辞書ソート装置313は、ヒープ構造データ811に辞書登録データと登録idをセットで図14に示すような構造で登録を行う。ヒープ構造は、ルートノード(#1)にソート順で最も登録データが前になる登録idと登録データのセットが置かれ、各ノードの葉ノードにはソート順で後になるものが置かれる。列データ化と辞書符号化装置312から辞書登録終わりの信号を受け取ると、辞書ソート装置313は、ヒープ構造データ811から、登録idと辞書登録データとを登録データのソート順に取り出し、辞書・ソートindex出力装置812に出力する。辞書・ソートindex出力装置812は、コマンド900内のパラメータ932、933、934、935、936に従って、辞書やソートindexを主記憶301に出力する。制御装置801から全行の処理が終わったことを知らせる信号を、辞書ソート装置313が受け取ると、コマンド900内のパラメータ931に従って、辞書の数を主記憶301に出力する。辞書の数は、あらかじめ列データを行数で分割する場合と異なり、最終的な辞書の分割数が辞書作成後にしかわららないため出力される。
 ソートindexは、図15に示すように、未ソートの辞書登録idと、ソート後の登録idの関係を示すものである。
 以上の動作により、図7の701と702のステップが完了する。複数の辞書が生成された場合のS704とS705のステップと、図6のS602の、S604、S605の各ステップの具体的な内容を、図16と図17を用いて説明する。
 図16の左端の辞書1(未ソート)と辞書2(未ソート)は、列データ化と辞書符号化装置312内で生成される2つの辞書である。これらは、辞書ソート装置313によって、それぞれソートされ、辞書1(ソート済)と辞書2(ソート済)が生成され、主記憶301上に格納される。同時に、ソートindex1とソートindex2が辞書ソート装置313によって生成され、主記憶301上に格納される。S704では、辞書マージ装置314が、辞書1(ソート済)と辞書2(ソート済)をマージし、マージ後の辞書データをソートし、同一のデータに関しては重複を排除し、マージ辞書Aを生成する。この時、辞書マージ装置314とid変換テーブル操作装置315とid変換装置316とは、辞書1(ソート済)とマージ辞書Aの対応表であるid変換テーブル1と、辞書2(ソート済)とマージ辞書Aの対応表であるid変換テーブル2を生成する。id変換テーブル1とid変換テーブル2の生成がS705のステップに当たる。3個以上の辞書をマージする場合は、同様の処理を繰り返す。次に、S602のステップで、マージ辞書Aとメイン辞書(ソート済)を同様にマージし、マージ後の辞書データをソートし、マージ辞書Bを生成する。マージ辞書Bが、増分データがマージされた後の新たなメインデータの辞書となる。マージ辞書Aの生成と同様に、辞書マージ装置314とid変換テーブル操作装置315とid変換装置316とは、マージ辞書Aとマージ辞書Bとの対応表であるid変換テーブルaとメイン辞書とマージ辞書Bとの対応表であるid変換テーブルMを生成する。
 次に、S604、S605において、各データをマージした辞書のidに合わせる必要があるため、その準備として、id変換装置316は、辞書1(未ソート)のidからマージ辞書Bのidへのid変換テーブルを生成する。図17に示すように、id変換テーブル1とid変換テーブルaを用いて、id変換テーブル1’は生成される。この生成方法は、id変換テーブル1の各エントリをインデックスとしてid変換テーブルaを参照し、そのエントリデータで置き換える作業を行うことで生成される。id変換テーブル1’は、辞書1(ソート済)とのidからマージ辞書Bのidへの変換テーブルとなる。次に、id変換テーブル1’とソートindex1を用いて最終的な辞書1のid変換テーブルを生成する。この生成方法は、id変換テーブル1’とソートindex1の各エントリのデータを対にし、ソートindex1のエントリデータをインデックスとし、id変換テーブル1’のエントリデータを辞書1のid変換テーブルに書き込むことで、生成される。
 通常、メイン辞書のエントリ数は、メイン辞書とマージ辞書Bのエントリ数の差より大きい。そのため、メイン辞書からマージ辞書Bへのid変換テーブルであるid変換テーブルMは、図18に示すように、変化点と変化量のみを記録する方が、小さな表になる。そこで、図18の左端の形式を全エントリ形式、中央の形式を差分形式と呼ぶこととする。例えば、左側の全エントリ形式id変換テーブルMは、#0と#1ではメイン辞書Aとマージ辞書Bとの値に変化はなく、それぞれ0と1である。全エントリ形式id変換テーブルMは、#2になると3になり、メイン辞書Aとマージ辞書Bで変化がある。そのため、差分形式id変換テーブルMでは、変化点として2が、メイン辞書Aとマージ辞書Bとの変化量は2から3に変化しているため差分の+1が記録される。続いて全エントリ形式id変換テーブルMの#3では、変化量が#2と同じ+1のため差分形式id変換テーブルMには記録されない。続いて、全エントリ形式id変換テーブルMの#4では6であるため、変化量が+1から+2に変化している。そのため、差分形式id変換テーブルMには、変化点4と変化量+2とが記録される。
 図16と図17と図18で説明した処理は、図3の辞書マージ装置314とid変換テーブル操作装置315とid変換装置316を用いて行われる。
 辞書マージ装置314のブロック図を、図19に示す。辞書マージ装置314は、図16における辞書1と辞書2とをマージしてマージ辞書Aを生成する処理や、マージ辞書Aとメイン辞書とをマージしてマージ辞書Bを生成する処理のような、複数の辞書を1つの辞書にマージする処理を行う。辞書マージ装置314は、CPU302より操作コマンドである図20に示す辞書マージコマンド2000を、システムバス305とインタフェース装置311を通して、制御装置1901が受け取り、動作する。
 辞書マージコマンド2000には、コマンドの種類が辞書マージコマンドであることを示す辞書マージコマンド2001が含まれる。さらに辞書マージコマンド2000には、入力辞書を指定するパラメータとして、長さを含む対象列のデータ型2011、辞書1と辞書2それぞれのエントリ数を示す辞書1エントリ数2012と辞書2のエントリ数2013、辞書1と辞書2それぞれのアドレスを示す辞書1のアドレス2014と辞書2のアドレス2015、辞書1と辞書2それぞれの度数表のアドレスを示す辞書1の度数表のアドレス2016と辞書2の度数表のアドレス2017、が含まれる。また、辞書符号化コマンド900は、出力辞書であるマージ辞書を指定するパラメータとして、マージ辞書のエントリ数出力アドレス2021、マージ辞書の出力アドレス2022、各エントリのオフセット出力アドレス2023、マージ辞書の度数表の出力アドレス2024とを含む。さらに、辞書符号化コマンド900は、id変換テーブルの出力を指定するパラメータとして、辞書1と辞書2とマージ辞書それぞれの符号化ビット長を指定した辞書1の符号化ビット長2031、辞書2の符号化ビット長2032、マージ辞書の符号化ビット長2033、辞書1と辞書2それぞれ全エントリ形式か差分形式かどちらの形式のid変換テーブルかを示す辞書1のid変換テーブルの形式指定2034、辞書2のid変換テーブルの形式指定2035、辞書1のid変換テーブルの出力先アドレス2036、辞書2のid変換テーブルの出力先アドレス2037、辞書1のid変換テーブルのエントリ数出力先アドレス2038、辞書2のid変換テーブルのエントリ数出力先アドレス2039を含む。なお、度数表に関する2016、2017、2024のパラメータは設定をしなくてもよい。0やNILをパラメータとして設定することで、度数表に関するパラメータを設定しないことができる。
 図16の辞書1と辞書2のマージを行う場合は、CPU302は、パラメータ2012、2014、2016、2031には、辞書1に関するパラメータを設定し、パラメータ2013、2015、2017、2032には、辞書2に関するパラメータを設定し、パラメータ2034、2035には全エントリ形式を指定する。
 図16のマージ辞書Aとメイン辞書のマージを行う場合は、CPU302は、パラメータ2012、2014、2016、2031には、マージ辞書Aに関するパラメータを設定し、パラメータ2013、2015、2017、2032には、メイン辞書に関するパラメータを設定し、パラメータ2034には全エントリ形式、パラメータ2035には差分形式を指定する。もし、マージ辞書Aとメイン辞書をマージしたマージ辞書Bとメイン辞書に差がない場合は、パラメータ2039に指定のアドレスに0が書かれ、メイン辞書に変化がないことを示す。
 図21は、辞書マージ処理のフローチャートである。図19乃至図21を用いて、辞書マージ処理を説明する。制御装置1901が辞書マージコマンド2000を受け取ると、辞書1エントリカウンタ1910、辞書2エントリカウンタ1911、マージ辞書エントリカウンタ1912の各カウンタ値C1、C2、Cmは0にリセットされ(S2101)、パラメータ2011、2012、2013、2014、2015、2016、2017に従って、辞書1と辞書2とオプションでそれぞれの度数表が主記憶301から読み出され、それぞれ辞書1入力FIFO1902、辞書2入力FIFO1903、辞書1度数表入力FIFO1906、辞書2度数表入力FIFO1907に読み込まれる。データ順序比較装置1904は、辞書1入力FIFO1902と辞書2入力FIFO1903から1エントリずつ取り出し(S2102)、順序比較する(S2103)。比較結果は、制御装置1901に伝えられ、その他の装置の制御に使用される。また、データ順序比較装置1904は、比較結果により、辞書1入力FIFO1902からのデータが前(小さい)ならば(S2103:E1<E2)辞書1入力FIFO1902からのデータを、マージ辞書出力FIFO1905に出力し(S2105、S2116)、辞書2入力FIFO1903からのデータが前(小さい)ならば(S2103:E1>E2)辞書2入力FIFO1903からのデータを、マージ辞書出力FIFO1905に出力し(S2113、S2116)、出力した方のデータの代わりに次のデータをそれぞれ辞書1入力FIFO1902、辞書2入力FIFO1903から1エントリ取り出す(S2106、S2114)。データ順序比較装置1904は、同じならば(S2103:E1=E2)一方のデータをマージ辞書出力FIFO1905に出力し(S2109、S2116)、他方を捨て、代わりに次のデータをそれぞれ辞書1入力FIFO1902と辞書2入力FIFO1903から1エントリずつ取り出す(S2110)。
 制御装置1901は、辞書1入力FIFO1902からのデータが前ならば(S2103:E1<E2)辞書1id変換テーブル出力FIFO1913に1エントリ生成するよう指示し、辞書2入力FIFO1903からのデータが前ならば(S2103:E1>E2)、辞書2id変換テーブル出力FIFO1914に1エントリ生成するよう指示し(S2112)、同じならば(S2103:E1=E2)、辞書1id変換テーブル出力FIFO1913と辞書2id変換テーブル出力FIFO1914の両方に1エントリ生成するよう指示する(S2108)。制御装置1901から1エントリを生成する指示を受けた辞書1id変換テーブル出力FIFO1913と辞書2id変換テーブル出力FIFO1914とは、それぞれ辞書1エントリカウンタ1910と辞書2エントリカウンタ1911の値をインデックスにマージ辞書エントリカウンタ1912の値をエントリデータとしてid変換テーブルを生成する(S2104、S2108、S2112)。
 その後、制御装置1901は、辞書1入力FIFO1902からのデータが前ならば(S2103:E1<E2)辞書1エントリカウンタ1910のカウンタを+1し(S2107)、辞書2入力FIFO1903からのデータが前ならば(S2103:E1>E2)辞書2エントリカウンタ1911のカウンタを+1し(S2115)、同じならば(S2103:E1=E2)辞書1エントリカウンタ1910と辞書2エントリカウンタ1911のカウンタをそれぞれ+1する(S2111)。そして、どの場合も、マージ辞書エントリカウンタ1912のカウンタを+1する(S2117)。
 また度数加算器1908は、辞書1入力FIFO1902からのデータが前ならば(S2103:E1<E2)辞書1度数表入力FIFO1906からの1エントリをマージ度数表出力FIFO1909へ出力し(S2105、S2116)、辞書2入力FIFO1903からのデータが前ならば(S2103:E1>E2)辞書1度数表入力FIFO1907からの1エントリをマージ度数表出力FIFO1909へ出力し(S2113、S2116)、同じ場合(S2103:E1=E2)は辞書1度数表入力FIFO1906からの1エントリと辞書2度数表入力FIFO1907からの1エントリを加算した結果をマージ度数表出力FIFO1909へ出力する(S2109、S2116)。
 マージ辞書出力FIFO1905は、辞書マージコマンド2000のパラメータ2022、2023に従ってデータを主記憶301に出力する(S2104、S2108、S2112)。マージ度数表出力FIFO1909は、パラメータ2024に従って出力する。辞書1id変換テーブル出力FIFO1913はパラメータ2031、2033、2034、2036に従って出力し、辞書2id変換テーブル出力FIFO1914はパラメータ2032、2033、2035、2037に従って出力する。パラメータ2034、2035が差分形式の場合、辞書1id変換テーブル出力FIFO1913、辞書2id変換テーブル出力FIFO1914は、差分データ形式に変換して出力する。
 データ順序比較装置1904による比較とそれぞれの出力を繰り返し、全エントリを処理し終わったら(S2118:Yes)、最後に、マージ辞書出力FIFO1905、辞書1id変換テーブル1913、辞書2id変換テーブル1914は、それぞれパラメータ2021、2038、2039に従って、各エントリ数を出力する。
 以上の処理により、2つの辞書がソートマージされたマージ辞書、マージ辞書度数表、マージ前の各辞書とマージ後の辞書との対応件計を管理するid変換テーブルとが主記憶301に格納される。このマージ処理を繰り返すことで、図16に示すような増分データがマージされたメイン辞書であるマージ辞書Bが作成される。
 id変換テーブル操作装置315のブロック図を、図22に示す。図23にid変換テーブル操作コマンド2300を示す。また、id変換テーブル操作処理のフローチャートを図24に示す。図22乃至図24は、図7のS705の詳細処理である。
 id変換テーブル操作装置315は、ソート済みかつマージ前の辞書(図16における辞書1(ソート済み)及び辞書2(ソート済み))とマージ後の辞書(図16におけるマージ辞書B)との対応関係を管理するid変換テーブル(図17におけるid変換テーブル1’)を作成する。
 id変換テーブル操作コマンド2300には、コマンドの種類がid変換テーブル操作コマンドであることを示すid変換テーブル操作2301が含まれる。さらにid変換テーブル操作コマンド2300は、変換テーブルの入力を指定するパラメータとして、辞書1の符号化ビット長2311、辞書2の符号化ビット長2312、マージ辞書Aの符号化ビット長2313、マージ辞書Bの符号化ビット長2314、辞書1のエントリ数2315、辞書2のエントリ数2316、マージ辞書Aのエントリ数2317、辞書1からマージ辞書Aへのid変換テーブル1のアドレス2321、辞書2からマージ辞書Aへのid変換テーブル2のアドレス2322、マージ辞書Aからマージ辞書Bへのid変換テーブルmのアドレス2323を含む。また、id変換テーブル操作コマンド2300は、変換テーブルの出力を指定するパラメータとして、辞書1からマージ辞書Bへのid変換テーブル1’のアドレス2331、辞書2からマージ辞書Bへのid変換テーブル2’のアドレス2331を含む。
 id変換テーブル操作装置315は、CPU302より操作コマンドであるid変換テーブル操作コマンド2300を、システムバス305とインタフェース装置311を通して、制御装置2201が受け取り、id変換テーブル操作を動作する(S2400)。図16の辞書1からマージ辞書Bへのid変換テーブルと、辞書2からマージ辞書Bへのid変換テーブルを生成する場合は、CPU302は、コマンド2300のパラメータ2311、2313、2315、2321に辞書1からマージ辞書Aへのid変換テーブルであるid変換表1に関するパラメータを設定し、パラメータ2312、2313、2316、2322に辞書2からマージ辞書Aへのid変換テーブルであるid変換テーブル2に関するパラメータを設定し、パラメータ2313、2314、2317、2323にマージ辞書Aからマージ辞書Bへのid変換テーブルであるid変換テーブルaに関するパラメータを設定し、パラメータ2331、2332に、生成されるid変換テーブルの出力先を設定する。
 制御装置2201がコマンド2300を受け取ると、制御装置2201は、マージid変換テーブルmエントリカウンタ2205の値Cを0にリセットし(S2401)、パラメータに従って3つの変換表をそれぞれid変換テーブル1入力FIFO2202、id変換テーブル2入力FIFO2203、マージid変換テーブルm入力FIFO2204に読み込む。データ付き合わせ装置2206とデータ付き合わせ装置2207は、それぞれid変換テーブル1入力FIFO2202と、id変換テーブル2入力FIFO2203から1エントリずつデータを読み込み(S2402)、また、両者ともマージid変換テーブルm入力FIFO2204から1エントリデータを読み込む(S2403)。
 データ付き合わせ装置2206は、id変換テーブル1入力FIFO2202からのデータ値とマージid変換テーブルmエントリカウンタ2205の値とを比較する(S2404)。もし、一致するなら(S2404:Yes)、データ付き合わせ装置2206は、マージid変換テーブルm入力FIFO2204からのデータを、マージid変換テーブル1’出力FIFO2208に出力し(S2405)、id変換テーブル1入力FIFO2202から1エントリ読み込む(S2406)。一致しないならば(S2404:No)、データ付き合わせ装置2206は、マージid変換テーブルm入力FIFO2204からのデータを捨て、出力しない。
 データ付き合わせ装置2207は、id変換テーブル2入力FIFO2203からのデータ値とマージid変換テーブルmエントリカウンタ2205の値とを比較する(S2407)。もし、一致するなら(S2407:Yes)、データ付き合わせ装置2207は、マージid変換テーブルm入力FIFO2204からのデータを、マージid変換テーブル2’出力FIFO2209に出力し(S2408)、id変換テーブル2入力FIFO2203から1エントリ読み込む(S2409)。一致しないならば(S2407:No)、データ付き合わせ装置2207は、マージid変換テーブルm入力FIFO2204からのデータを捨て、出力しない。
 ここで、図24のフローチャートでは、S2404乃至S2406を行ったあと、S2407乃至S2409を行っているが、S2404乃至S2406とS2407乃至S2409とは、同時並行して処理を行ってもよい。
 そして、制御装置2201は、マージid変換テーブルmエントリカウンタ2205の値を+1インクリメントする(S2410)。データ付き合わせ装置2206とデータ付き合わせ装置2207とは、マージid変換テーブルm入力FIFO2204から1エントリデータを読み込み(S2403)、id変換テーブル1入力FIFO2202とid変換テーブル2入力FIFO2203からのデータ値と2205の値と比較し(S2404、S2407)、同様の操作を、id変換テーブル1入力FIFO2202とid変換テーブル2入力FIFO2203が空になるまで繰り返す(S2411)。マージid変換テーブル1’出力FIFO2208とマージid変換テーブル2’出力FIFO2209は、パラメータ2321と2322に従って、主記憶301に出力する。
 より多くの辞書をマージする場合は、辞書マージ装置314とid変換テーブル操作装置315を、コマンド2000とコマンド2300を用いて、繰り返し動作させることで、マージされた辞書とid変換テーブルを生成させることが可能となる。
 最後に図6のステップ604と605の具体的な動作を、図25、図26、図27、図28を用いて説明する。図25は、id変換処理の過程を示す概念図である。図26はid変換装置316のブロック図であり、604と605の処理は、id変換装置316により行われる。図27はid変換コマンド2700を示す。また、id変換処理のフローチャートを図28に示す。
 図25の左端にあるデータが、元のメインデータと増分データである。この2つのデータをそれぞれid変換し、右端のようにマージされたデータを生成する。このマージされたデータが、図5の符号化データ511となる。メインデータは、id変換テーブルMを用いて、id変換する。差分データは、辞書符号化時に生成された辞書ごとに、id変換テーブル1’とソートindex1、id変換テーブル2’とソートindex2を用いて、それぞれid変換する。なお、点線で囲まれたデータが変換テーブルRAM2605に書き込まれるデータである。
 すなわち、id変換装置316は、差分形式のid変換テーブルから符号化データを作成する。また、id変換装置316は、ソート前の辞書(図16における辞書1(未ソート)と辞書2(未ソート))とマージ後のメイン辞書(図16におけるマージ辞書B)との対応関係を管理するid変換テーブル(図17における辞書1のid変換テーブル)を作成する。そして、id変換装置316は、id変換して作成した元のメインデータの符号化データに、id変換して作成した差分データのid変換テーブルの値を符号化データとして追記していくことで、新たなマージされたメインデータの符号化データ511を作成する。
 id変換コマンド2700には、コマンドの種別がid変換コマンドであることを示すid変換コマンド2701が含まれる。id変換コマンド2700は、id変換を行う変換テーブルの入力を指定するパラメータである、旧符号の符号化ビット長2711、新符号の符号化ビット長2712、全エントリ形式か差分形式かを指定するid変換テーブルの形式指定2713、id変換テーブルのエントリ数2714、id変換テーブルのアドレス2715、ソートindexの出力アドレス2716を含む。ここで、ソートindexの出力アドレス2716は、id変換を行う対象が差分データの場合に設定されるオプションである。id変換コマンド2700は、変換前の符号化データのデータ入力を指定するパラメータである、入力データの行数を示す入力データ数2721、入力符号化データアドレス2722、入力符号化ビット長2723、を含む。さらに、id変換コマンド2700は、id変換後の符号化データの出力を指定するパラメータである、符号化データ出力アドレス2731、出力符号化ビット長2732とを含む。
 id変換装置316は、CPU302より操作コマンドであるid変換コマンド2700を、システムバス305とインタフェース装置311を通して、制御装置2601が受け取り、動作する。図25のメインデータのid変換処理の場合、CPU302は、コマンド2700のパラメータ2711、2712、2713、2714、2715にid変換テーブルMに関するパラメータを設定し、2721、2722、2723に変換前のメインデータの符号化データに関するパラメータを設定し、2731、2732に変換後のマージデータに関するパラメータを設定する。図25の辞書1に対応する差分データのid変換処理の場合、CPU302は、コマンド2700のパラメータ2711、2712、2713、2714、2715、2716にid変換表1’とソートindex1に関するパラメータを設定し、2721、2722、2723に辞書1に対応する差分データのid変換テーブル(未ソート)に関するパラメータを設定し、2731、2732に変換後のマージデータに関するパラメータを設定する。図25の辞書2に対応する差分データのid変換処理の場合、CPU302は、コマンド2700のパラメータ2711、2712、2713、2714、2715、2716にid変換表2’とソートindex2に関するパラメータを設定し、2721、2722、2723に辞書2に対応する差分データのid変換テーブル(未ソート)に関するパラメータを設定し、2731、2732に変換後のマージデータに関するパラメータを設定する。
 制御装置2601がコマンド2700を受け取ると、パラメータ2711、2712、2713、2714、2715に従って、id変換テーブルを主記憶301から読み出され、id変換テーブル入力FIFO2602に読み込まれる(S2802、S2808)。同時に、パラメータ2716に従って、ソートindexがソートindex入力FIFO2603に読み込まれる。次に、変換テーブル書き込みデータ生成装置2604は、id変換テーブル入力FIFO2602とソートindex入力FIFO2603からのデータを用いて、変換テーブルRAM2605に書き込むデータを生成する。もし、パラメータ2713が全エントリ形式で、パラメータ2716が指定されている場合は(S2801:全エントリ形式)、図17の辞書1のid変換テーブルと辞書2のid変換テーブルや図25の差分データ用の変換テーブルのように、元の辞書の全エントリに対する変換テーブルを、変換テーブルRAM2605上に生成する(S2803)。もし、パラメータ2713に差分形式が指定されている場合は(S2801:差分形式)、図25のメインデータ用の2分木のように、変換テーブルRAM2605上に2分木構造を生成する(S2809、S2810)。これにより、2分探索が高速に行うことができる。
 変換テーブルRAM2605上のデータの構築が終わると、パラメータ2721、2722、2723に従って、データ符号が主記憶301から読み出され、データ符号入力FIFO2606に読み込まれる。テーブル参照装置2607は、データ符号入力FIFO2606からデータを取り出しては(S2804、S2811)、取り出したデータ符号を変換テーブルRAM2605上で検索し(S2805、S2812)、対応するid変換テーブルの値を読みだす。パラメータ2713に全エントリ形式が指定されている場合は(S2801:全エントリ形式)、テーブル参照装置2607は、対応する変換テーブルの値をそのままデータ符号出力FIFO2608に出力する(S2806)。パラメータ2713に差分形式が指定されている場合は(S2801:差分形式)、テーブル参照装置2607は、元のデータ符号の値に対応するid変換テーブルの値を加えた値を、データ符号出力FIFO2608に出力する(S2813、S2814)。データ符号出力FIFO2608は、パラメータ2731、2732に従って、主記憶301上に変換済みのデータ符号をid変換後の符号化データの符号として主記憶301に書き出す(S2806、S2814)。そして、テーブル参照装置2607は、データ符号入力FIFO2606に入力された全データの処理が完了したか判定し(S2807、S2815)、全データの処理が完了していない場合(S2807:No、S2815:No)S2804に戻り、全データの処理が完了している場合(S2807:Yes、S2815:Yes)、id変換処理を終了する(S2816)。
 上記の説明通り、各列ごとに、FPGA310にコマンド900、2000、2300、2700を適用し、各処理を逐次に行うことで、行指向データベースから列指向データベースに変換することができる。また、FPGA310内の装置はそれぞれ同時動作可能であるので、パイプライン的に並列動作をさせることが可能であり、それにより高速に処理が可能である。
 また、本実施例はFPGA310を用いて行指向データベースから列指向データベースに変換を行う例を説明したが、FPGA310に替えて、ASICのような他の集積回路で行指向データベースから列指向データベースに変換を行ってもよい。
 実施例1に示した処理内容は、ソフトウェアによるCPU処理でも実現できる。その場合、辞書符号化に使用する辞書の大きさを抑えることにより、限りあるCPUのデータキャッシュを高効率で活用でき、システム全体の処理効率が上がる。
 行指向データベースから列指向データベースへの変換処理は、列ごとに、数ステップに分割でき、それぞれ、FPGA処理、CPUによるソフトウェア処理のどちらの処理方法も可能である。そのため、FPGA処理とCPUによるソフトウェア処理を組みあわせて全体の処理を行うことも可能である。
 また、各辞書エントリ数や行数、データ型により、FPGA処理の方がCPU処理より高速なもの、CPU処理の方がFPGA処理より高速なものがある。そのため、各辞書エントリ数や行数、データ型により、処理を適時、FPGA処理またはCPU処理に振り分けることで、より高速に処理が行える。本実施例では、実施例1及び2にて開示のように変換処理が複数の処理内容に分割できることに着目し、処理内容についてFPGAで処理すべきか、CPUで処理すべきか判断する高速化について開示する。
 図29は、実施例3のFPGA処理とCPU処理の振り分けに関わる、データベース処理装置300の構成を示す図である。データベース処理装置300には、ランタイム実行部2900とデータベース2901とFPGA310とSW(ソフトウェア)ライブラリ2905が含まれる。ランタイム実行部2900は、CPU302が主記憶301のプログラムを実行する際に処理を行う機能ブロックである。
 ランタイム実行部2900には、デバイス選択部2902とFPGA API2903とSW API2904が含まれる。デバイス選択部2902は、データベースの変換処理の内容に応じて、処理に最適なデバイス、FPGA310、もしくは、SWライブラリ2905を選択し、FPGA API2903、SW API2904を通してFPGA310を起動、もしくは、SWライブラリ2905を呼び出す。
 図30は、データベース2901とデバイス選択部2902、および、デバイス選択部2902とFPGA310、もしくは、SWライブラリ2905で受け渡しするパラメータを示す図である。
 データベース2901からデバイス選択部2902に渡すパラメータを3000に示している。デバイス選択部2902がFPGA310とSWライブラリ2905を選択するのに用いるパラメータは、変換処理対象列が主キー/非主キー3004と、辞書のエントリ数出力アドレス3005と、マージ辞書のエントリ数出力アドレス3006である。主キー/非主キー3004は、ユーザが指定するデータベースの列情報の1つであり、変換対象列が主キーであるか否かを示している。辞書のエントリ数出力アドレス3005とマージ辞書のエントリ数出力アドレス3006は、FPGA310が計測したエントリ数を格納する主記憶301内のアドレスを示している。デバイス選択部2902は、辞書のエントリ数出力アドレス3005とマージ辞書のエントリ数出力アドレス3006に格納されている値を読み取り、デバイス選択の判定に用いる。
 デバイス選択部2902からデータベース2901に渡すパラメータを3001に示している。デバイス選択部2902は、FPGA310、もしくは、SWライブラリ2905から変換処理完了通知を受け取り、全ての変換処理が完了するとデータベース2901に対して変換完了通知を行う。
 デバイス選択部2902からFPGA310、もしくは、SWライブラリ2905に渡すパラメータを3002に示している。4つの変換コマンド、辞書符号かコマンド900、辞書マージコマンド2000、id変換テーブル操作コマンド2300、id変換コマンド2700に対応付けしたコマンドID3007(901、2001、2301、2701)を含んでおり、デバイス選択部2902は、FPGA310、もしくは、CPU302が行う処理内容に応じてコマンドID3007をFPGA310、もしくは、SWライブラリ2905に渡し、FPGA310、もしくは、SWライブラリ2905がそのコマンドID3007に対応した処理を実行する。
 FPGA310、もしくは、SWライブラリ2905からデバイス選択部2902に渡すパラメータを3003に示している。FPGA310、もしくは、SWライブラリ2905の処理が完了したことを示す処理完了通知と、処理内容に応じたコマンドID(3007と同じ値)を含んでいる。
 図31は、SWライブラリ2905、FPGAコマンド3100と、FPGAコマンド3100に対応したFPGA論理ブロック名3101を示す図である。FPGAコマンド3100がFPGA310に投入されると、FPGA310は、そのFPGAコマンド3100に対応したFPGA論理ブロック3101を起動して処理を実行する。SWライブラリ2905は、辞書符号化3102、辞書マージ3103、id変換テーブル操作3104、id変換3105の4種類あり、それぞれに対応した、FPGAコマンド3100とFPGA論理ブロック3101が存在する。
 図32は、辞書マージ3103をFPGA310とSWライブラリ2905で実行した場合の処理時間を比較した図である。デバイス選択部2902がFPGA310に対してFPGAコマンド3100を投入してから、FPGA310がFPGAコマンド3100を処理完了するまでのコマンド処理時間が3200と3204であり、FPGA310が辞書マージ処理実行に要する時間が3201と3205である。一方、CPU302がSWライブラリ2905を呼び出す時間が3202と3206であり、SWライブラリ2905の辞書マージ処理実行に要する時間が3203と3207である。
 図32の上方においては、データベース2901に含まれるエントリ数が少なく、FPGA310で辞書マージ処理を行うと、コマンドの処理時間3200の割合が大きくなり、CPU302で辞書マージ処理を行った方が早く完了する。
 図32の下方においては、データベース2901に含まれるエントリ数が多く、FPGA301で辞書マージ処理を行った場合に要するコマンド処理時間3200の割合が減り、FPGA310で辞書マージ処理を行った方が、CPU302で行うよりも早く完了する。
 このように、辞書マージ処理は、辞書のエントリ数によって、FPGA310で行うと早い場合もあれば、SWライブラリ2905で行うと早い場合もあり、デバイス選択部2902は辞書のエントリ数に応じて最適なデバイス、FPGA310、もしくは、CPU302を選択する。
 図33は、ある1つの列に対する変換処理において、デバイス選択部2902がFPGA310とSWライブラリ2905を選択する処理フローを示す図である。デバイス選択部2902は、データベース2901から変換処理要求を受け付けると、変換処理をスタートする(S3300)。
 デバイス選択部2902は、変換処理をスタートすると、辞書符号化処理をCPU302もしくはFPGA310のいずれかに割り当てる(S3301)。辞書符号化処理S3301において、辞書エントリ数がFPGA310もしくはSWライブラリ2905によって計測され、主記憶301のアドレス3005に格納される。辞書エントリ数と閾値を比較し(S3302)、辞書エントリ数が閾値よりも大きい場合には、辞書マージ、id変換テーブル操作をFPGA310で実行する(S3303)。辞書エントリ数が閾値よりも小さい場合には、辞書マージ、id変換テーブル操作をSWライブラリ2905で実行する(S3305)。FPGA辞書マージ(S3303)、もしくは、SW辞書マージ(S3305)において、マージ辞書のエントリ数がFPGA310もしくはSWライブラリ2905によって計測され、主記憶301のアドレス3006に格納される。
 デバイス選択部は、FPGA310もしくはSWライブラリ2905からid変換テーブル操作完了通知を受け取ると、マージ後の辞書エントリ数とマージ前の辞書エントリ数を比較し(S3307)、辞書エントリ数に変更があれば、主キーの判定に移行する(S3308)。辞書エントリ数に変更がなければ、FPGA増分id変換(S3311)に移行する。主キーの判定(S3308)においては、変換対象列が主キー/非主キー(3004)パラメータの値から、主キーであればメインid変換の処理をFPGA310で実行する(S3309)。変換対象列が非主キーであれば、メインid変換の処理をSWライブラリ2905で実行する(S3310)。変換対象列が主キーである場合に、CPUで実行すると高速に処理が出来るのは、変換対象列が予めソートされており、キャッシュヒット率が高いためである。FPGA増分id変換処理(S3311)が完了すると、ある1つの列に対する変換処理が終了する(S3312)。
 なお、S3301はS601と同様であり、S3303はS602と同様であり、S3309はS604と同様であり、S3311はS605と同様である。
 図34は、デバイス選択部2902が変換処理内容3400に応じて、デバイス3401を割り当てた結果を示す図である。実施例3においては、辞書符号化3402はFPGA310に、辞書マージ及びid変換テーブル操作3403はCPU302に、メインid変換3405はFPGA310に、増分id変換3406はFPGA310に割り当てている。このように、処理内容に応じて、デバイス選択部2902が最適なデバイス、FPGA310、もしくは、CPU302を選択することによって、システムの処理性能を向上させることが可能となる。
 実施例3においては、ある1つの列に対する変換処理のデバイス選択方法を示したが、複数の列に対する変換処理のデバイス選択方法を本実施例で説明する。図5に示したように、FPGA310において、複数の列が同時に並列変換処理される。さらに、同時に変換処理を行うべきテーブルは1つとは限らない。しかしながら、FPGA310に搭載可能な論理数はデバイス毎に定まっている。そこで、FPGA310に並列に実装した論理が全て使われている場合には、CPU302で変換処理を実行した方が早く完了する。本実施例はそのような場合に有効な技術について開示する。
 図35は、変換対象列が複数ある場合の1つの列に対する変換処理において、デバイス選択部2902がFPGA310とSWライブラリ2905を選択する処理フローを示す図である。変換処理スタート(S3500)後の処理フローは、実施例3の図33と基本動作は同じである。図34との差異は、FPGAリソース空きあり判定(S3501、S3505、S3512、S3515)の追加である。なお、これらステップはより正確にはFPGA310に並列に搭載した変換論理が全て利用されているか、CPUリソースに空きがあるかに基づいて判断される。FPGAの変換論理が全て利用されていない場合はYesであり、FPGAの変換論理が全て利用されていて、かつCPUリソースに空きがある場合はNoである。なお、FPGAの変換論理が全て利用されていて、かつCPUリソースに空きがない場合はYesとすることでFPGAに優先して変換処理を行わせることが考えられるが、そうでなくてもよい。
 各分岐において処理すべきステップは図35に示した通りである。なお、ステップ番号が図33と変わらないステップは図33で説明した通りである。なお、S3503はS3301の処理をソフトウェアで実現したものに相当し、S3517はS3311の処理をソフトウェアで実現したものに相当する。
 図36は、各処理内容において、FPGA310とCPU302の割り当て途中経過を示す図である。変換対象列は3600、3601、3602の3列あり、FPGA310は2並列の変換回路を搭載しているとする。列の処理順序は定まっておらず、第1列3600と第3列3602にFPGA310が既に割り当たっている場合には、FPGA310リソースに空きがない。そこで、第2列3601の符号化3603は、CPU302を割り当てる(3604)と変換待ち時間が発生せずに早く処理を完了することが可能となる。このように、複数の列を同時に変換処理している場合には、他の列の変換処理に用いているデバイスの状況も考慮してデバイスを割り当てることで、システムの処理性能を向上させることが可能となる。
 101…外部の行指向データベース
 201…増分データの行指向データベース
 202…増分データの列指向データベース
 203…メインデータの列指向データベース
 301…主記憶装置
 302…CPU
 303…二次記憶装置
 304…NIC
 305…システムバス
 310…FPGA
 311…インタフェース装置
 312…列データ化と辞書符号化装置
 313…辞書ソート装置
 314…辞書マージ装置
 315…id変換テーブル操作装置
 316…id変換装置
 801…制御装置
 802…元データ入力FIFO
 803…符号決定装置
 804…辞書RAM
 805…辞書使用量計測装置
 806…データ符号出力装置
 807…行数出力装置
 811…ヒープ構造データ
 812…辞書・ソートindex出力装置
 900…辞書符号化コマンド
 2000…辞書マージコマンド
 2300…id変換テーブル操作コマンド
 2700…id変換コマンド

Claims (1)

  1. 列指向形式で格納された列指向データベースと、行指向形式で格納され、前記列指向データベースに追加すべきデータである追加データと、前記列指向データベースにアクセスするプログラムと、を記憶する主記憶装置と、
    前記プログラムを実行するCPUと、
    前記追加データを前記列指向データベースに追加するための複数の論理を含む集積回路と、を有する計算機であって、
    前記列指向データベースは、辞書符号化データと、辞書データとを含み、
    前記複数の論理は、少なくとも:
     前記追加データを列指向形式に変換した一時辞書符号化データと、一時辞書符号化データに対応した一時辞書データを生成する第1論理と、
     前記一時辞書符号化データと、前記一時辞書データとを前記列指向データベースに追加する第2論理と、
    を含み、
    前記CPUは、前記第1論理又は前記プログラムが生成する一時辞書データのエントリ数に基づいて、前記第2論理を駆動すべきか否か判断する、
    計算機システム。
PCT/JP2016/053273 2015-06-05 2016-02-03 計算機、データベース処理方法、及び集積回路 WO2016194401A1 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2015-114424 2015-06-05
JP2015114424 2015-06-05

Publications (1)

Publication Number Publication Date
WO2016194401A1 true WO2016194401A1 (ja) 2016-12-08

Family

ID=57440684

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/JP2016/053273 WO2016194401A1 (ja) 2015-06-05 2016-02-03 計算機、データベース処理方法、及び集積回路

Country Status (1)

Country Link
WO (1) WO2016194401A1 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019028572A (ja) * 2017-07-26 2019-02-21 富士通株式会社 情報処理装置、情報処理システム、情報処理方法及び情報処理プログラム
JP2019125264A (ja) * 2018-01-18 2019-07-25 富士通株式会社 Wosのデータ構造、データ変換プログラム、データ変換方法及びデータ変換装置
JP2022023618A (ja) * 2020-07-27 2022-02-08 浩平 海外 コプロセッサ処理の高速化の方法とプログラム
WO2022257575A1 (zh) * 2021-06-11 2022-12-15 华为技术有限公司 一种数据处理方法、装置以及设备
US11791838B2 (en) 2021-01-15 2023-10-17 Samsung Electronics Co., Ltd. Near-storage acceleration of dictionary decoding

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014016983A (ja) * 2012-04-30 2014-01-30 Sap Ag 部分的マージ
WO2015149885A1 (en) * 2014-04-01 2015-10-08 Huawei Technologies Co.,Ltd Method for querying and updating entries in a data base

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014016983A (ja) * 2012-04-30 2014-01-30 Sap Ag 部分的マージ
WO2015149885A1 (en) * 2014-04-01 2015-10-08 Huawei Technologies Co.,Ltd Method for querying and updating entries in a data base

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019028572A (ja) * 2017-07-26 2019-02-21 富士通株式会社 情報処理装置、情報処理システム、情報処理方法及び情報処理プログラム
JP2019125264A (ja) * 2018-01-18 2019-07-25 富士通株式会社 Wosのデータ構造、データ変換プログラム、データ変換方法及びデータ変換装置
JP7024432B2 (ja) 2018-01-18 2022-02-24 富士通株式会社 データベース管理システム、データ変換プログラム、データ変換方法及びデータ変換装置
JP2022023618A (ja) * 2020-07-27 2022-02-08 浩平 海外 コプロセッサ処理の高速化の方法とプログラム
JP7061294B2 (ja) 2020-07-27 2022-04-28 浩平 海外 コプロセッサ処理の高速化の方法とプログラム
US11791838B2 (en) 2021-01-15 2023-10-17 Samsung Electronics Co., Ltd. Near-storage acceleration of dictionary decoding
WO2022257575A1 (zh) * 2021-06-11 2022-12-15 华为技术有限公司 一种数据处理方法、装置以及设备

Similar Documents

Publication Publication Date Title
WO2016194401A1 (ja) 計算機、データベース処理方法、及び集積回路
US10579683B2 (en) Memory system including key-value store
TWI682274B (zh) 鍵值儲存樹
Lemire et al. Consistently faster and smaller compressed bitmaps with roaring
TW201837720A (zh) 用於多串流儲存裝置之串流選擇
KR20170054299A (ko) 메모리 관리 시의 중복 제거를 위해서 기준 세트로 기준 블록을 취합하는 기법
TW201841123A (zh) 用於維護操作之合併樹修改
EA006562B1 (ru) Способ кодирования ключей в базе данных и база данных
US10671586B2 (en) Optimal sort key compression and index rebuilding
US20210390089A1 (en) Code dictionary generation based on non-blocking operations
JP2019109693A (ja) データ管理装置、データ管理方法、およびプログラム
US20230359633A1 (en) Processing variable-length fields via formatted record data
JP2008242605A (ja) 構造化文書を管理する装置、方法およびプログラム
KR20210058118A (ko) CaseDB: 엣지컴퓨팅을 위한 저비용 Put-Intensive 키-벨류 저장장치
CN111028897B (zh) 一种基于Hadoop的基因组索引构建的分布式并行计算方法
JP7408626B2 (ja) テナント識別子の置換
CN106570153A (zh) 一种海量url的数据提取方法及系统
EP3963853B1 (en) Optimizing storage and retrieval of compressed data
CN106570152B (zh) 一种手机号码的海量提取方法及系统
Hasemann et al. The wiselib tuplestore: a modular RDF database for the internet of things
CN115438114B (zh) 存储格式转换方法、系统、装置、电子设备及存储介质
WO2016170594A1 (ja) 計算機、データベース処理方法、及び集積回路
US8312008B2 (en) Docbase management system and implementing method thereof
Carter et al. Nanosecond indexing of graph data with hash maps and VLists
US20080133562A1 (en) Coding compressible variable length database fields

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 16802840

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 16802840

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: JP