JP6305406B2 - フィルタリング/射影動作のハードウェア実装 - Google Patents

フィルタリング/射影動作のハードウェア実装 Download PDF

Info

Publication number
JP6305406B2
JP6305406B2 JP2015528521A JP2015528521A JP6305406B2 JP 6305406 B2 JP6305406 B2 JP 6305406B2 JP 2015528521 A JP2015528521 A JP 2015528521A JP 2015528521 A JP2015528521 A JP 2015528521A JP 6305406 B2 JP6305406 B2 JP 6305406B2
Authority
JP
Japan
Prior art keywords
declaration
row
result
value
bit vector
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
JP2015528521A
Other languages
English (en)
Other versions
JP2015532748A5 (ja
JP2015532748A (ja
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 JP2015532748A publication Critical patent/JP2015532748A/ja
Publication of JP2015532748A5 publication Critical patent/JP2015532748A5/ja
Application granted granted Critical
Publication of JP6305406B2 publication Critical patent/JP6305406B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/953Querying, e.g. by the use of web search engines
    • G06F16/9535Search customisation based on user profiles and personalisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

発明の分野
本開示は、概してデータベース動作を実行するための技術に関し、より具体的にはフィルタリングおよび射影動作を実行するための技術に関する。
背景
このセクションで説明される手法は、遂行可能な手法であるが、必ずしも過去に考案または遂行された手法ではない。したがって、特に明示されない限り、このセクションで説明される手法のうちのいずれも、このセクションに含まれているというだけで先行技術とみなされるべきではない。
データベースは、一組のハードディスク等の1つ以上の記憶装置に格納されたデータとメタデータとを含む。データベース内のデータは、実装に応じてさまざまなデータモデルに従い論理的に構成し得る。たとえば、リレーショナルデータベースシステムは通常、データを一組のテーブルに格納し、各テーブルは1組の行と列で構成されている。ほとんどの場合、各行は特異なオブジェクトを表わし、各列は特異な属性を表わす。しかしながら、他のデータモデルを用いてデータを構成してもよい。
データベース内のデータにアクセスしこのデータを操作するために、データベース管理システム(DBMS)は一般的に、さまざまな、クエリと呼ばれることが多いデータベースコマンドを受けて処理するように構成される。多くの実装において、DBMSは、構造化照会言語(SQL)等のデータ操作言語(DML)に準拠したクエリをサポートする。DBMSは、クエリを受けると、このクエリによって指定された1つ以上のデータベース動作を実行し、クエリ結果を出力し得る。データベース動作の例は、以下で詳細に説明される、フィルタリング(filter)、射影(project)、集約(aggregation)、およびグループ化(grouping)動作を含む。
フィルタリングおよび射影動作
フィルタリングおよび射影動作は、特定の行の特定の列から値を出力するデータベース動作であり、この場合の行は、宣言(predicate)と呼ばれる何らかの基準に基づいてフィルタリングされる。SQLにおいて、射影およびフィルタリング動作はSELECTおよびWHERE構文を使用する。具体的には、SELECT文はどのようなデータを射影するか(すなわちどの列から出力値を取出すか)を示し、WHERE句は出力をフィルタリングするための宣言を含む(すなわちどの行から出力値を取出すかを示す)。WHERE句の演算子の例は、以下のテーブル1に示される演算子を含むが、これらに限定されない。
Figure 0006305406
フィルタリングおよび射影クエリの一例は、以下のテーブル2に示される。
Figure 0006305406
このクエリは、売上テーブル内のデータを、販売員はPedroまたはAlexいずれかでなければならずかつ売上高が200より多くなければならないという基準の下でフィルタリングする。これらの基準を満たす売上テーブルの中の各記録について、クエリは、この記録の中で示される、対応付けられた販売員、顧客、および売上高を返す。
たとえば、以下のテーブル3は売上テーブルの一例を示す。
Figure 0006305406
テーブル3の売上テーブルの例の場合にクエリ1を実行したときの予想される出力を以下のテーブル4に示す。
Figure 0006305406
集約およびグループ化動作
集約およびグループ化動作は、特定の列のデータに関する簡易統計を提供するデータベース動作である。SQLにおいて、グループ化動作は、GROUP BY構文を用いて、1つ以上の列により、集約関数の結果をグループ化する。以下のテーブル5は、GROUP BY文とともに使用し得る集約関数の例を示す。
Figure 0006305406
集約およびグループ化クエリの例は以下のテーブル6に示される。
Figure 0006305406
クエリ2は、企業のドルでの売上総額を要求する。クエリ2が実行されるとき、DBMSは集約を実行するがグループ化は行なわない。DBMSは、売上テーブルにおけるすべての売上高を無条件で合計して最終結果を返す。テーブル3の売上テーブルの例の場合にクエリ2を実行したときの予想される出力を以下のテーブル7に示す。
Figure 0006305406
クエリ3は、販売した販売員毎にグループ化されたドルでの売上総額を要求する。クエリ3が実行されるとき、DBMSはグループ化および集約双方を実行する。具体的には、DBMSは、売上テーブルにおける各販売員についての集約結果を1つ生成する。この結果は、特定の販売員による総売上である。テーブル3の売上テーブルの例の場合にクエリ3を実行したときの予想される出力を以下のテーブル8に示す。
Figure 0006305406
クエリ4は、売上に対応付けられた販売員および顧客毎にグループ化されたドルでの売上総額を要求する。クエリ4が実行されるとき、DBMSは、複数列に基づくグループ化および集約を実行する。この場合、販売員−顧客ペア各々について1つの集約結果があるであろう。この集約結果は、特定の販売員−顧客ペアについての総売上である。テーブル3の売上テーブルの例の場合にクエリ4を実行したときの予想される出力を以下のテーブル9に示す。
Figure 0006305406
本開示は、限定ではなく例示を目的として添付の図面に示され、これらの図面において同様の参照番号は同様の要素を示している。
ある実施形態に従いフィルタリングおよび射影動作を実行するためのシステムアーキテクチャの一例を示すブロック図である。 ある実施形態に従いフィルタリングおよび射影動作を実行するためのプロセスの一例を示すフローチャートである。 ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの1つである。 ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの1つである。 ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの1つである。 ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの1つである。 ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの1つである。 ある実施形態に従いフィルタリングおよび射影動作を実行するためのアドレス生成器を有するシステムアーキテクチャの一例を示すブロック図である。 ある実施形態に従いグループ化および集約動作を実行するためのシステムアーキテクチャの一例を示すブロック図である。 ある実施形態に従いグループ化および集約動作を実行するためのプロセスの一例を示すフローチャートである。 ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの1つである。 ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの1つである。 ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの1つである。 ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの1つである。 ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの1つである。 実施形態が実装され得るコンピュータシステムのブロック図である。
詳細な説明
以下の記載では、本発明が十分に理解されるよう、数多くの具体的な詳細事項が説明のために述べられている。しかしながら、これらの具体的な詳細事項がなくとも本発明を実施し得ることは明らかであろう。他の場合では、本発明を不必要に曖昧にするのを避けるために、周知の構造および装置はブロック図の形式で示される。
全体の概要
本明細書では、フィルタリング、射影、グループ化、および集約動作を実行するための技術が説明される。ある実施形態において、専用ハードウェアをこれらデータベース動作を実行するように構成し得る。この専用ハードウェアは、速度に制約があるコンピュータシステムの部分に流れるデータの量を少なくすることにより、クエリ処理を加速することができ、このことはデータのボトルネックの緩和に役立ち得る。特に、この専用ハードウェアは、フィルタリングおよび射影動作中にRAMに格納する必要があるデータの量を減じることによって、クエリの評価に必要なRAM入力/出力(I/O)動作を減じることができる。加えて、この専用ハードウェアは、データベース動作の実行のために最も一般的な汎用プロセッサに存在する命令のオーバヘッドを減じる。
さらに、この専用ハードウェアは、データをフィルタユニットに複数回通過させることができるようにしており、これは、複雑なクエリ宣言の評価における柔軟性を考慮している。またさらに、この専用ハードウェアは、フィルタユニットがデータの一定の入力ストリームと同じペースを保たなくてもよいように、宣言の非線形評価および処理を考慮してもよい。
本明細書に記載の他の技術に従い、グループ化および集約を、テーブルデータのグローバルソートなしで実行し得る。グローバルソートを避けることによって、大きなリストをソートする間に生じるランダムなメモリアクセスの問題は緩和される。たとえば、リストをソートする間に、メモリの1つのブロック内に位置するグループに、あるアイテムが入る一方で、メモリの別のブロック内に位置するグループに、次のアイテムが属することがある。通常、この場合のソートされたテーブルを書込むためには、新たなメモリページを閉じて開く必要がある。
加えて、グループ化および集約をメモリの小さなチャンクに対して実行できるようにし、そうすることで高速で消費電力の少ないキャッシュにおいてランダムなアクセスを生じさせることができる技術が説明される。
本明細書に記載の実施形態によると、ビットベクトル等のデータ構造が生成されてどの行が1つ以上の宣言を満たしているかを示す。実施形態の一例において、ビットベクトルは、クエリ内の各宣言に対して生成されて、データベース内のどの行が対応する宣言を満たしているかを示す。ビットベクトルが各宣言に対して生成された後、ビット単位の演算子を用いてビットベクトルを組合わせることにより、最終ビットベクトルを生成する。最終ビットベクトルは、どの行が一組の宣言のうちのすべての宣言を満たしているかを示し、この最終ビットベクトルを射影動作で使用することによって行を選択しクエリの結果として出力してもよい。
他の実施形態では、ビットベクトル等のデータ構造が生成されて、グループ化および集約動作中に、どの行が同一グループの一部を構成するかを示す。たとえば、一組のビットベクトルが生成されてもよく、グループ内の各ビットベクトルは特定のグループに対応する。ビットベクトル各々の中のビットの位置は、特定の行に対応する。ビットベクトル内の各ビットのビット値は、そのビットに対応する行がビットベクトルによって表わされるグループの一部の場合は第1のビット値に設定され、対応する行がこのグループの一部でなければ第2のビット値に設定される。このように、ビットベクトルを用いることにより、同一グループに属する行を容易に特定することができ、これらの行の列からの値を集約する動作の実行中にこのビットベクトルを用いることができる。
フィルタリングおよび射影動作を処理するためのアーキテクチャの例
図1は、ある実施形態に従いフィルタリングおよび射影データベース動作を実行するように構成し得るシステムアーキテクチャの一例を示す。システム100は一般的に、RAM102と、メモリコントローラ106と、システム制御108と、入力キャッシュ110と、フィルタユニット112と、ビットベクトルキャッシュ114と、結合ユニット116と、射影ユニット118と、出力キャッシュ120とを含む。
RAM102は、ブロック104A〜104Nで示されるNブロックのデータを格納する。Nは任意の正の整数であればよい。RAM102は、格納されているデータに対しランダムなアクセスが可能な任意の適切なコンピュータデータ記憶装置を用いて実装し得る。RAM102の例は、ダイナミックRAM(DRAM)およびスタティックRAM(SRAM)を含み得るがこれに限定されない。
メモリコントローラ106は、RAM102へのおよびRAM102からのデータの流れを管理するメモリコントローラである。たとえば、メモリコントローラ106は、RAM102のデータの読出要求およびRAM102へのデータ書込要求を処理し得る。メモリコントローラ106は任意の適切なメモリコントローラを用いて実装し得る。このメモリコントローラは、ダブルデータレートDDRメモリコントローラ、デュアルチャネルメモリコントローラ、または完全バッファ型メモリコントローラを含むが、これに限定されない。
入力キャッシュ110、ビットベクトルキャッシュ114、および出力キャッシュ120は、以下でさらに説明される技術に従うクエリ処理中にデータを格納するメモリキャッシュである。データをキャッシュすることにより、RAM102が処理するI/O動作の回数を最小にすることで、データのボトルネックを減じることができる。
システム制御108、フィルタユニット112、結合ユニット116、および射影ユニット118(「データベースユニット」と呼ぶ)は、以下でさらに詳細に説明される技術に従い機能して、フィルタリングおよび射影動作を実行する。これら構成要素および本明細書に記載の他のデータベースユニットは各々、ハードウェアとして実装しても、ハードウェアとソフトウェアの組合せとして実装してもよい。たとえば、これらユニットのうちの1つ以上を、フィールドプログラマブルゲートアレイ(FPGA)等のプログラマブルロジックデバイス(PLD)、またはその他の種類のゲートアレイもしくは再構成可能な回路を用いて実装してもよい。別の例として、これらユニットのうちの1つ以上を、アドバンストRISCマシン(ARM)等の汎用プロセッサまたはその他の縮小命令セットコンピュータ(RISC)プロセッサを用いて実装してもよい。
宣言に基づくデータのフィルタリング
図2は、ある実施形態に従いフィルタリングおよび射影動作を実行するためのプロセスの一例を示す。図2に示されるプロセスは、図1に示されるシステム100または図4に示されるシステム400等の任意の適切なシステム上で実装し得る。
図2を参照して、ステップ202で、システム制御108は、1つ以上の宣言からなる一組の宣言を含むクエリを受ける。たとえば、このクエリは、1つ以上の宣言を指定するWHERE句を伴うSELECT文を含み得る。しかしながら、特定の実装に応じて任意の他の適切な構文を使用してもよい。ある実施形態において、各宣言は、データベースから抽出されて出力されたか、そうでなければクエリに対する結果として返されたデータをフィルタリングするのに使用される基準を指定する。この基準は1つ以上の演算子を用いて指定することができ、この演算子は上記テーブル1に示される演算子を含むがこれらに限定されない。
実施形態の一例において、システム制御108は、受けたクエリを構文解析することにより、どの宣言がクエリに含まれているか、および、この宣言を如何にしてフィルタユニット112にプログラミングすべきか判断する。ステップ204〜210は、一組の宣言の中の宣言毎に繰返されるループを定める。したがって、ステップ204の繰返しの一回目において、フィルタユニット112は一組の宣言の中の第1の宣言を用いてプログラミングされる。システム制御108は、宣言を任意の適切な順序でフィルタユニット112にプログラミングすることができる。順序を選択するための技術については以下でさらに詳細に説明される。ある実施形態において、フィルタユニットのプログラミングは、FPGAまたはその他の再構成可能な回路を、宣言によって指示されたフィルタリング基準を適用するように構成することを含み得る。たとえば、フィルタユニット112を、ハードウェア記述言語(HDL)を用いてプログラミングすることにより、テーブル1に示される宣言演算子のうちのいずれかを実装し1つ以上の値を宣言の値と比較することができる。
通常、宣言は特定の列からの値の条件を課す。宣言によって条件が課される列のことを本明細書では宣言の対象列と呼ぶ。したがって、宣言(売上高>200)の場合、売上高の列が対象列である。
ステップ206で、値が列からフィルタユニット112に送られる。実施形態の一例において、システム制御108は、RAM102からの1つ以上の列の値を入力キャッシュ110にロードせよという要求を、メモリコントローラ106に送る。システム制御108は、評価されている宣言に基づいて、どの列を入力キャッシュ110にロードすべきか判断することができる。たとえば、システム制御108は、フィルタユニット112の現在のプログラミングに使用されている宣言の対象列からのみ値がロードされるようにしてもよい。たとえば、宣言が売上高>200の場合、システム制御108は、以下の実装例に示されるように、売上高の列の少なくとも一部の値がRAM102からキャッシュ110にロードされるようにしてもよい。
次に、対象列からの値は、入力キャッシュ110からフィルタユニット112にストリーミングされる。列データを受けると、フィルタユニット112は、ステップ204でプログラミングされた宣言を適用することによって、この宣言を満たす行を特定する結果を生成する。どの行がこの宣言を満たしているか判断するために、フィルタユニット112は、1つ以上の宣言演算子を適用し、受けた列の特定の行の値を、クエリ宣言において指定された宣言の値と比較すればよい。
ステップ208で、フィルタの結果は、宣言の条件を満たす対象列の値を有するのはどの行かを示すデータ構造として格納される。ある実施形態において、このデータ構造は、以下でさらに詳細に説明されるビットベクトルである。代替の実施形態において、このデータ構造は、ビットベクトルから生成された符号化データである。任意の他の適切なデータ構造を、宣言の条件を満たす対象列の値を有するのはどの行かを示すために、生成し、格納し、使用することができる。
ステップ210で、システム制御108は、フィルタユニット112による評価がまだなされていない宣言が一組の宣言の中に残っているか否か判断する。未評価の宣言が残っていれば、このプロセスはステップ204に戻り、システム制御108は残っている宣言のうちの1つを用いてフィルタユニット112をプログラミングする。上記一組の宣言のうちのすべての宣言が既に評価されていれば、このプロセスはステップ212に進む。これについては以下でさらに詳細に説明される。
フィルタユニットにおけるビットベクトルの生成
ある実施形態において、フィルタユニットは、各宣言結果に対してビットベクトルを生成する。ビットベクトルの各ビットは、1つの行に対応し、このビットベクトルに対応付けられているクエリ宣言をこの行が満たしているか否かを示す。たとえば、ビットベクトル内のビットの位置が、テーブル内のこの行の位置に対応していてもよい。したがって、ビットベクトル内の3番目のビットが、テーブル内の3番目の行に対応していてもよい。
各ビットの値はブール値を表わす。この場合、第1のビット値は、対応する行が宣言の条件を満たすことを示し、第2のビット値は、対応する行が宣言の条件を満たさないことを示す。たとえば、あるビットベクトル内の第3ビットは、このビットベクトルに対応付けられた宣言をテーブルの第3行が満たす場合は「1」であり、このビットベクトルに対応付けられた宣言をテーブルの第3行が満たさない場合は「0」である。
結果の結合
各宣言についての結果がステップ202〜210に従い生成された後、ステップ212で、クエリによって指示されたやり方で各宣言の結果を結合することにより、最終結果が生成される。最終結果は、クエリの中のすべての宣言を満たす一組の行を特定する、最終ビットベクトル等のデータ構造である。
ある実施形態において、最終結果は最終ビットベクトルであり、この最終ビットベクトルの各ビットは、クエリが対象とするテーブルの特定の行に対応する。特定の宣言に対するビットベクトルにおける各ビットの値が、対応する行がこのビットベクトルに対応付けられた宣言を満たすか否かを示すのと全く同じように、最終ビットベクトルにおける各ビットの値は、対応する行がすべての宣言を満たすか否かを示す。したがって、第1のビット値(たとえば「1」)を用いて、対応する行がクエリ内のすべての宣言を満たすことを示し、第2のビット値(たとえば「0」)を用いて、対応する行がすべての宣言を満たさないことを示す。
実施形態の一例において、システム制御108は、ビットベクトルの結合方法に関する命令を用いて結合ユニット116をプログラミングする。たとえば、結合ユニット116は、クエリにおいて指定された論理演算子に基づきビット単位の1つ以上の動作を実行することにより結果のビットベクトルを結合するようにプログラミングされてもよい。たとえばクエリ1の場合、システム制御108は、以下の実装例に示すように、ビット単位のOR演算を実行しその次にビット単位のAND演算を実行して最終ビットベクトルを生成するように、結合ユニット116をプログラミングするであろう。
フィルタリングされたデータの射影
ステップ214で、射影ユニット118は、この最終結果を用いて、射影された列から行を選択し出力する。最終ビットベクトルを用いる場合、射影ユニット118は、最終ビットベクトルをビット毎に処理することにより、クエリの宣言すべてを満たす行(すなわち、最終ビットベクトルの中の対応するビットが第1のビット値に設定されている行)を特定する。ステップ216で、射影ユニット118は、入力キャッシュ110から、射影された列の列データを取出し、最終結果によって特定された行を出力キャッシュ120に出力する。この場合において行を出力するということは、宣言を満たす行を出力キャッシュ120に格納することを意味する。行は、出力されると、いつでもクエリの結果としてたとえばユーザまたはアプリケーションプログラムに返すことができる。
ステップ218で、システム制御108または射影ユニット118は、クエリによって示されているすべての列が射影されたか否か判断する。たとえば、クエリ1の場合、射影された列は、「販売員」列、「顧客」列、および「売上高」列を含む。射影された列が残っている場合、このプロセスはステップ214に戻り、残っている組の列に最終結果が適用される。以下でさらに説明されるように、最終結果の適用は、最終ビットベクトルをマスクとして使用すること、または、最終ビットベクトルをメモリアドレスに変換することを含み得る。このプロセスは、クエリによって示されたすべての列が射影されるまで繰返される。
最終結果に基づく行の射影のプロセスは、特定の実装に応じて異なり得る。ある実施形態において、フィルタリングプロセスによって入力キャッシュ110に既に格納されていなければ、射影された列からの値の行が入力キャッシュ110にロードされる。射影ユニット118は、最終結果に基づいて、これら値の行のうちのいずれを出力キャッシュ120に格納すべきか判断する。ある実施形態において、射影ユニット110は、最終結果ビットベクトルを、ステップ216においてどの行が射影ユニット118から出力キャッシュ120に出力されるかを制御するマスクとして使用する。たとえば、射影された列の各行は、入力キャッシュ110から射影ユニット118にストリーミングされてもよい。次に、射影ユニット118は、ビットベクトルをマスクとして適用して、すべてのクエリ宣言を満たす行のみを出力キャッシュ120にストリーミングしてもよい。これに代わるものとしては、以下でさらに詳細に説明されるように、アドレス生成ユニットを用いて、出力すべき行のみを射影ユニット118に与えてもよい。
ハイブリッド列状ブロック処理
ある実施形態において、このシステムは、データベースの少なくとも一部をRAM102にハイブリッド列状方式で格納する。ハイブリッド列状方式の格納の場合、データベースをブロックに分割し、各ブロックは、1つ以上の列に対して決まった数の行を有する。たとえば、第1のブロックは、1つ以上の列に対して最初の50行を格納し、第2のブロックは次の50行を格納し、第3のブロックは次の30行を格納していてもよい。各ブロック内において、データは列優先方式で格納される。言い換えると、ある列の中の要素は、ブロック内において連続的に格納される。ハイブリッド列状方式でデータを格納することにより、システムは、扱いやすいブロックサイズで列を容易に処理することができる。
ある実施形態において、上記フィルタリングおよび射影動作は、ブロック毎に実行し得る。たとえば、ある列が複数のブロックに跨っている場合、フィルタリングおよび射影動作を、第1のブロック内にある、この列の第1の部分に適用することにより、第1の結果セットを生成すればよい。列全体が処理されるまで、このプロセスを後続のブロック各々に対して繰返せばよい。ある段階で生成された結果セットは、次の段階を待たずに返される。たとえば、あるブロックに対して生成された結果セットを、次のブロックの処理の前または処理中に返してもよい。
フィルタリング/射影動作のシステム実装の例
図3A〜図3Eは、ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図である。特に、これらの図は、上記テーブル2に示されるクエリ1を処理するシステム100を示す。
図3Aは、フィルタリング動作の開始時点におけるシステム100のブロック図である。図3Aを参照して、「販売員(SALESMAN)」列、「顧客(CUSTOMER)」列、および「売上高(AMOUNT)」列は、ハイブリット列状方式でRAM102に存在しており、ブロック302とブロック310に分割されている。具体的には、S1 304、C1 306、およびA1 308でそれぞれ示されている、「販売員」列と「顧客」列と「売上高」列の第1の部分は、ブロック302にある。S2 312、C2 314、およびA2 316でそれぞれ示されている、「販売員」列と「顧客」列と「売上高」列の第2の部分は、ブロック310にある。
システム制御108は、クエリ1を受けると、宣言を如何にして評価するか判断し、適切な列を入力キャッシュ110にロードさせる。図3Bに示されるように、売上高>200という宣言を最初に評価する。このように、システム制御108はフィルタユニット112を宣言330を用いてプログラミングする。「売上高」列の第1の部分A1 308は、入力キャッシュ110にロードされ、フィルタユニット112に送られる。次に、フィルタユニット112は、宣言330を用いてA1 308の列データを値毎に(各値は特定の行に対応する)評価することにより、ビットベクトルAp1 340を生成する。ビットベクトルAp1 340は、売上高>200という宣言を満たすA1 308の行を示す。第1のビットベクトルAp1 340は、以下のテーブル10にAp1として示されている。ビットベクトルキャッシュ114はこのビットベクトルを次の処理のために格納する。
Figure 0006305406
売上高>200という宣言の評価後、次の2つの宣言として販売員=Pedroおよび販売員=Alexが同様のやり方で逐次処理される。たとえば、「販売員」列S1 304を入力キャッシュ110にロードすればよい。システム制御108はフィルタユニット112をプログラミングして「=」演算を第1のインスタンスでは「Pedro」値に適用し第2のインスタンスでは「Alex」値に適用する。フィルタユニット112は、各インスタンスにおいて「販売員」列を行毎に評価することにより、第2および第3のビットベクトルを生成する。図3Cは、すべての宣言が処理された後のシステムのブロック図である。ビットベクトルSp2 342は、販売員=Pedroという宣言の評価に応じて生成されたビットベクトルを表わし、ビットベクトルSp3 344は、販売員=Alexという宣言の評価に応じて生成されたビットベクトルを表わす。これらビットベクトルは以下のテーブル11に示される。
Figure 0006305406
ある実施形態において、フィルタユニット112によって生成されるビットベクトルの長さは、1ブロック内の行と同数のビットに相当する。たとえば、上記テーブル10および11に示されるビットベクトルの長さは、ブロック1 302に格納される各列の値の数に相当する。したがって、ビットベクトルAp1 340は、A1 308における行と同数のビットを有し、ビットベクトルSp2 342およびSp3 344は、S1 304における行と同数のビットを有する。これらテーブルにおいて、宣言を満たす行にはビット値「1」が割当てられ、宣言を満たさない行にはビット値「0」が割当てられる。しかしながら、実装に応じてこれらビット値を逆にしてもよい。
各宣言に対する結果ビットベクトルの生成後、最終ビットベクトルを上記結合プロセスによって生成すればよい。クエリ1の場合、結合プロセスは、WHERE句における論理演算子による指示通りに実現すればよい。したがって、システム制御108は先ず、結合ユニット116を、ビットベクトルSp2 342およびSp3 344に対してビット単位のORを実行するようにプログラミングする。次に、このOR演算の結果を用いて、ビットベクトルAp1 340に対しビット単位のANDを実行する。図3Dが示すブロック図は、宣言の結果ビットベクトルが結合されて、フィルタリングされた行の最終組を取出すのに使用される最終ビットベクトルが生成された後のシステムである。
図3Dを参照して、ビットベクトルキャッシュ114は、ビットベクトルSp2 342およびSp3 344に対してビット単位でOR演算を実行した結果得られたビットベクトルである、ビットベクトルSp2|Sp3 344を格納する。次に、結合ユニット116は、ビットベクトルSp2|Sp3 344およびビットベクトルAp1 340を用いてビット単位でAND演算を実行することにより、最終ビットベクトルAp1(Sp2|Sp3)348を生成する。これらビットベクトルは以下のテーブル12に示される。テーブル12の最後の列に示される最終ビットベクトルは、クエリ1のすべての宣言を満たす、ブロック1 302内の行を示す。
Figure 0006305406
最終ビットベクトルは射影ユニット118に送られ、射影ユニット118は、このビットベクトルを用いて適切な列から行を射影する。クエリ1におけるSELECT文は、売上テーブルの「販売員」列、「顧客」列、および「売上高」列からデータを射影しなければならないことを示す。したがって、S1 304を入力キャッシュ110から射影ユニット118にストリーミングすればよい。射影ユニット118は、最終ビットベクトルをビット毎に処理し、出力キャッシュ120に、最終ビットベクトル内の「1」に対応するS1 304の行を送ればよい。射影ユニット118は、同じ最終ビットベクトルを用いて「顧客」列および「売上高」列に対しこのプロセスを繰返す。
図3Eは、フィルタリングおよび射影動作の終了時点におけるシステムのブロック図である。Sr1 350はブロック302から射影された「販売員」列データを表わし、Cr1 352はブロック302から射影された「顧客」列データを表わし、Ar1 354はブロック302から射影された「売上高」列データを表わす。このデータは、システムがブロック310の処理を開始するときに、結果として送ってもよい。
次に、ブロック310等の他のブロックに格納されたデータに対し、上述のフィルタリングおよび射影動作を繰返せばよい。説明のために、この売上表には以下のテーブル13に示される行も含まれるものとする。
Figure 0006305406
ブロック310は、列優先フォーマットで行8〜12のデータを格納する。たとえば、S2 312は、値としてPedro、Alex、Alex、Michael、Pedroを連続する順序で格納し得る。同様に、C2 314は「顧客」列の行8〜12を格納し、A2 316は「売上高」列の行を格納する。
以下のテーブル14は、ブロック310に格納されたデータに対するフィルタリング動作の実行後に生成されたビットベクトルを示す。
Figure 0006305406
テーブル14の最後の列に示される最終ビットベクトルは、すべてのクエリ宣言を満たすブロック310内の行を特定する。射影ユニット118は、この最終ビットベクトルをビット毎に構文解析し、最終ビットベクトルにおける「1」に対応するS2 312の行を出力キャッシュ120に送る。射影ユニット118は、同じ最終ビットベクトルを用いてこのプロセスをC2 314およびA2 316に対して繰返す。
アドレス生成に基づく選択的な行フィルタリング
いくつかの実施形態において、宣言評価中にフィルタユニット112に与えられる行を、以前の宣言評価で得られた結果に基づいて制限してもよい。たとえば、以前に評価された宣言を満たさない行は、次の宣言を評価するときには考慮する必要がない場合がある。フィルタユニット112に処理のために選択的に行を与えることにより、フィルタユニット112は各宣言について列全体を評価しなくてもよくなる。
図4は、ある実施形態に従いフィルタリングおよび射影動作を実行するためのアドレス生成器を有するシステムアーキテクチャの一例を示すブロック図である。システム400は、アドレス生成器402を含む、システム100の変形である。システム400は、アドレス生成器402を用いて、フィルタリングされている列の行を選択的にフィルタユニット112に与えることができる。
ある実施形態において、アドレス生成器402は、以前のフィルタのビットベクトル結果を用いて、行のサブセットを次のフィルタのためにフィルタユニットに送る。フィルタユニット112に送る行をビットベクトルを用いて制限するやり方は、クエリで指定される論理演算子によって決まる。たとえば、クエリ1の場合、第1の宣言はこれに続く宣言とAND演算される。このように、ある行が第1の宣言を満たさない場合、その行は次の2つの宣言に関して考慮される必要はない。
上記実装例において、アドレス生成器402は、ビットベクトルAp1 340を用いて、ビットベクトルSp2 342 およびSp3 344の生成時に、第1の宣言を満たす行のみをフィルタ112に与えることができる。具体的には、売上高>200という宣言に対応付けられたビットベクトルは1001111なので、第2行と第3行を他の宣言について評価する必要はない。後に続く評価のうちスキップできる評価の数が多いほど、クエリ評価の効率は高くなる。たとえば、売上高>200の結果ビットベクトルが0000000であれば、残りの宣言の評価全体をスキップすることができる。
次の2つの宣言はともにOR演算されるので、第2の宣言を満たす行は、第3の宣言の評価時に考慮する必要はない。すなわち、第2の宣言に対応付けられたビットベクトル1100001は、第1行、第2行、および第7行を、第3の宣言の評価時にスキップできることを示している。
実際、第3の宣言の評価中、アドレス生成器402は、第1および第2の宣言の結果ベクトルを用いて、第3の宣言については第4行、第5行、および第6行のみを評価すればよいと判断することができる。具体的には、第2行と第3行はスキップできる。なぜなら、これらは第1の宣言を満たさないからである。また、第1、第2、および第7行は、第2の宣言を満たさないので、スキップすることができる。
評価の順序
宣言を評価する順序は実装に応じて異なり得る。ある実施形態において、宣言は逐次順序で評価してもよい。たとえば、宣言を、クエリにおける指定に従い、左から右または右から左に逐次評価してもよい。
別の実施形態において、宣言評価の順序は、宣言が多数の行をふるい落とす可能性(すなわち宣言の「選択度」)に基づくものであってもよい。選択度が高い宣言を最初に評価した場合、フィルタリングプロセスのより早い段階でより多くの数の行がふるい落とされる。システム400ではその結果、それに続く宣言評価においてアドレス生成器402がフィルタユニット112に与える行のサブセットが小さくなる。このように、選択度が高い宣言を選択度が低い宣言よりも前に処理することによって、処理のオーバヘッドを減じることができる。
ある実施形態において、システム制御108は、宣言の選択度を、クエリで指定された演算子に基づいて予測する。たとえば、他の宣言とAND演算される宣言は、他の宣言とOR演算される宣言よりも選択度が高い可能性が大きい。別の例として、等価宣言演算子(「=」)は、非等価宣言演算子(「<>」または「!=」)よりも選択度が高い可能性が大きい。この予測に基づき、システム制御108は、フィルタユニット112を、最も選択度が高い宣言から最も選択度が低い宣言まで逐次順序でプログラミングする。
他の実施形態において、クエリで指定された1つ以上の宣言は並列処理される。たとえば、フィルタユニット112は、クエリで指定された2つ以上の宣言を用いてプログラミングされてもよい。フィルタユニット112は、これら宣言双方を同時に評価することができる。宣言評価プロセスを並列化するための技術については以下でさらに説明される。
アドレス生成器を用いるシステムにおけるフィルタリングされたデータの射影
別の実施形態において、アドレス生成器402は、すべてのクエリ宣言を満たす行毎に、最終ビットベクトルを一組のメモリアドレスに変換してもよい。アドレス生成器402は次に、このメモリアドレスを用いて、該当する行のみを入力キャッシュ110に要求し、これら行を出力のために射影ユニット118に与える。こうすれば、射影ユニット118を通して列全体をストリーミングする必要がないので、処理のオーバヘッドを減じることができる。
たとえば、ステップ214で、最終ビットベクトルをビットベクトルキャッシュ114からアドレス生成器402に与えればよい。そうすると、アドレス生成器402は、一組の宣言を満たすことを示す対応するビット値を有する各行について、メモリアドレスを求める。アドレス生成器402は、これらメモリアドレスを用いてメモリフェッチ要求を入力キャッシュ110に送る。これらの行が入力キャッシュ110に既にロードされている場合は、これらの行を入力キャッシュ110から直接射影ユニット118にストリーミングすればよい。射影ユニット118はこれらの行を出力キャッシュ120に出力する。これに代わるものとしては、上記行をアドレス生成器402に送ってもよい。
1列当たり複数の宣言
上記例において、フィルタユニット112は、列データがフィルタユニットを通して送られる度に1つの宣言を適用している。代替の実施形態において、フィルタユニット112は、各列に対して複数の宣言を処理するように構成されてもよい。たとえば、サンプルクエリ1は、宣言として、販売員=Pedro or 販売員=Alexを含む。これら宣言はいずれも同じ列に関連する。したがって、「販売員」列がフィルタユニット112を一回通過するときに上記宣言双方が評価されるように、システム制御108はフィルタユニットをこれらの宣言を用いてプログラミングしてもよい。
1ユニット当たり複数の列
上記例において、フィルタユニット112は、1つの列入力に対して動作している。代替の実施形態において、フィルタユニット112は、複数の列入力を含むものであってもよい。宣言を評価するときに複数の列入力が役立つ場合がある。たとえば、販売員=顧客というWHERE句は、「販売員」列と「顧客」列双方が同一宣言内にあることを意味する。フィルタユニット112に2つの列入力がある場合、この宣言を一回で評価することができる。2つの列が1つの宣言に含まれていない場合でも、複数の列入力があることで、複数の列に対する宣言を同時に処理することができる。
射影ユニット118も、実装に応じて複数の列入力を含み得る。たとえば、射影ユニット118に複数の列入力がある場合、最終ビットベクトルを複数の列に同時に適用することにより、それぞれの結果を並列に射影することができる。
グループ化および集約動作を処理するためのアーキテクチャの例
ある実施形態において、グループ化および集約動作を実行するように専用ハードウェアを構成してもよい。図5は、ある実施形態に従いグループ化および集約データベース動作を実行するように構成し得るシステムアーキテクチャの一例を示す。システム500は、システム100またはシステム400の要素すべてを含み得る。射影ユニット118に加えてまたはその代わりに、システム500は集約ユニット502も含み得る。
システム500は、任意の適切なやり方で、システム100または400と組合わせるかそうでなければ一体化してもよい。重複するブロックは各々、同一のハードウェアユニットとしてまたは別々の独立したユニットとして実装すればよい。たとえば、フィルタユニット112は、システム100またはシステム400において宣言のフィルタリングを実行する同じハードウェアユニットであってもよい。この同じユニットを用いて、以下で説明される技術に従い、列データに基づいてグループを作ることもできる。これに代えて、別々のフィルタユニットおよび/または他のデータベースユニットを用いて、グループ化動作およびフィルタリング動作を処理してもよい。他の実施形態において、システム500を、システム100または400に示されるフィルタリングおよび射影ロジックから独立しておよび/またはこのロジックとは別にシステム500を実装してもよい。
宣言フィルタを用いたデータのグループ化および集約
図6は、ある実施形態に従いグループ化および集約動作を実行するためのプロセスの一例を示す。図6に示されるプロセスは、図5に示されるシステム500のような任意の適切なシステム上で実装することができる。
図6を参照して、ステップ602で、1つ以上の列によってグループ化されたデータを集約することを求める要求を含むクエリを受ける。たとえば、このクエリは、テーブル5に列挙されたものを含むがこれらに限定されない、任意の適切な集約関数を含み得る。この集約関数を、集約結果データをグループ化するために1つ以上の列を指定するGROUP BY文とともに使用してもよい。しかしながら、任意の適切な構文を使用して集約関数およびグループ化する列を指定してもよい。
ステップ604で、グループ化される第1の列の1行をフィルタユニット112に送る。たとえば、サンプルクエリ3の場合、「販売員」列の第1行をフィルタユニット112に送ればよい。サンプルクエリ4の場合、以下でさらに説明される技術に従い、「販売員」および「顧客」列を結合してフィルタユニット112に送ればよい。これに代わるものとしては、以下でより詳しく説明されるように、フィルタユニット112に複数の列入力がある場合、「販売員」および「顧客」列双方の第1行を同時にフィルタユニット112に送ってもよい。
ステップ606で、フィルタユニット112は、この列の第1行に対応付けられている要素を特定する。ある実施形態において、この要素は、この列の第1行に格納されたデータのアイテムである。たとえば、テーブル3に示される販売テーブルの例を参照すると、「販売員」列の第1の要素は「Pedro」であり、「顧客」列の第1の要素は「Gainsley Corp.」である。
ステップ608で、フィルタユニット112は、ステップ606で特定された第1の要素との等価を宣言として用いて、第1の要素が属するグループに属さない行をふるい落とす。たとえば、「販売員」列の第1の要素が「Pedro」であるとすると、フィルタユニット112は、宣言として「販売員=Pedro」を用いて、「販売員=Pedro」グループに属さない行をすべてふるい落とす。システム制御108は、ステップ602でこのクエリを受けたことに応じて、フィルタユニット112をこのロジックを用いてプログラミングすればよい。
ステップ610で、この列の残りの行(すなわち第1行以外の行)をフィルタユニット112に送る。ある実施形態では、これら残りの行を、入力キャッシュ110からフィルタユニット112に、最初の送信で連続する順序でストリーミングする。これに続く送信では、アドレス生成器が、それまでにグループ化されていない行のみをフィルタユニット112に与えればよい。
ステップ612で、フィルタユニット112は、このフィルタを満たさない行をふるい落とすことにより、第1行が属する行グループ(たとえば販売員=Pedroであるすべての行からなるグループ)を生成する。このステップは、この等価宣言を満たす各行を特定するビットベクトルまたはその他のデータ構造を生成することを含み得る。上記宣言フィルタリングと同様、ビットベクトルの各ビットは列内の特定の行に対応し得るものであり、第1のビット値は、その行が等価宣言を満たしておりそれ故にグループの一部であることを示し、第2のビット値は、その行が等価宣言を満たしておらずそれ故にグループの一部ではないことを示す。
ステップ614で、第1行および第1行と一致する行をグループ化して集約ユニット502に送る。実施形態の一例において、フィルタユニット112は、ステップ612で生成されたビットベクトルをアドレス生成器402に送り、アドレス生成器はこのビットベクトルを用いて現在のグループの一部である行のみをメモリに要求する。アドレス生成器402はこれらの行を受けると集約のために集約ユニット502に送る。
ステップ616で、集約ユニット502は、グループ化された行の値を、クエリによる指示通りに集約する。たとえば、クエリ3および4の場合、集約ユニット502は、「売上高」列に格納されている、グループ化された行の値を合計するであろう。
ステップ618で、システム500は、まだグループ化されていない行が残っているか否か判断する。そのような行があれば、このプロセスはステップ604に戻り、このステップで、まだグループ化されていない行のみに対してグループ化および集約動作が繰返される。したがって、フィルタユニット112は、グループ化されていない第1の行の要素を等価宣言として用いて新たなグループを形成するように再プログラミングされる。
この例では、テーブル3の行1および2が既に販売員=Pedroグループにグループ化されているであろう。そのため、第3行は、まだグループ化されていない最初の行であろう。この第3行は、クエリのグループ化される列である「販売員」列において値「Alex」を有する。したがって、第2のグループは、販売員=Alexというフィルタに基づいて決定される。第2のグループは行3、5、および6を含むであろう。
ステップ604を3回目に繰返している間、行4は、最初の、残っているまだグループ化されていない行である。したがって、第3のグループは、販売員=Michaelというフィルタに基づいて決定される。第3のグループは、行4のみを含むであろう。第3のグループが形成された後は、グループ化されていない行が残っていないので、図6に示されるプロセスは終了するであろう。
各繰返しの間に、システム500は、新たな宣言に基づいてグループを生成し集約する。すべての行がグループ化されると、このプロセスは終了する。複数のRAMブロックに跨って関連する列が格納されている場合、このプロセスを、以下でより詳しく説明されるように、複数のRAMブロック各々に対して繰返すことにより、最終結果を生成すればよい。
以前に生成されたビットベクトルに基づく次のグループ化の決定
ある実施形態において、行のグループ化を特定するためにステップ612で生成されたビットベクトル(本明細書では「グループ−メンバシップビットベクトル」と呼ぶ)を用いて、次のグループ化のためにフィルタユニット112に行を選択的に与えてもよい。具体的には、グループ−メンバシップビットベクトルの各ビットは特定の行に対応する。グループ−メンバシップビットベクトルの中のビットが「1」のような第1のビット値に設定されている場合、これは、この特定の行についてグループが既に特定されていることを示す。既に生成されているグループ−メンバシップビットベクトルのうち、特定の行についてのビットを第1のビット値に設定しているビットベクトルがない場合、この特定の行はまだグループに対応付けられていない。したがって、この特定の行を、次の処理のためにフィルタユニット112に与えることによって、この特定の行が属するグループを求めることができる。
結合ユニット116は、ステップ612で生成されたグループ−メンバシップビットベクトルのうちの1つ以上に対してビット単位の動作を実行することにより、まだグループ化されていない行を特定するビットマスクを生成してもよい。ある実施形態において、最初のビットベクトルの生成後、このビットベクトルに対してビット単位のNOT演算を実行してもよい。結果として得られたビットマスクにおいて、第1のビット値は、それまでにグループ化されていない行を特定する。このように、アドレス生成器402は、同じやり方で動作することにより、ビットマスクを、これらの行に対するメモリアドレスに変換することができる。次に、アドレス生成器402は、これらの行の取出しを要求してもよく、まだグループに割当てられていない行のみが、次のグループ化および集約動作のためにフィルタユニット112に与えられる。
第2のグループ−メンバシップビットベクトルの生成後、NOT演算単独では、それまでにまだグループ化されていない行の特定には機能しない。なぜなら、集合の中にはこの時点で複数のビットベクトルがあるからである。したがって、それまでにグループ化されていない行を特定するビットマスクを生成するために、結合ユニット116は、現在のグループについてのグループ−メンバシップビットベクトルと以前に生成されたビットマスクとの間でビット単位の排他的OR(XOR)演算を実行すればよい。このプロセスは以下の実装例に示されている。
ブロック毎のグループ化および集約
ある実施形態において、上述のグループ化および集約動作をブロック毎に実行してもよい。たとえば、テーブルデータが、複数のRAMブロックにハイブリッド列状方式で格納される場合がある。図6のプロセスを第1のブロックに対して実装することにより、第1のブロック内のグループおよび集約値を特定する第1の結果セットを生成すればよい。このプロセスを、残りのRAMブロック各々に対して同じやり方で繰返せばよい。このようにして、グループおよび集約結果を特定する結果セットが、残りの各ブロックに対して生成される。
特定の実装によっては、複数のブロックに対する処理の完了前に、出力キャッシュ120がデータでいっぱいになることがある。たとえば、関連データが多数のブロックに跨っている場合、すべてのブロックについての結果セットを格納するのに十分な記憶領域が出力キャッシュ120にないことがある。また、グループの数が多い場合または列データ要素が大きい場合、出力キャッシュ120の記憶領域がより急速に消費されることがある。
出力キャッシュ120における記憶空間を空けるためにまたは最終結果を生成するために、異なるブロックに対する複数の結果セットを、図6に記載のプロセスに従ってグループ化し集約することができる。たとえば、出力キャッシュがいっぱいになる、または、利用できる記憶空間の量がしきい値未満になると、出力キャッシュ120内のデータを入力キャッシュ110に送ればよい。その後、入力キャッシュデータに対し、グループ化および集約動作を、先に述べたのと同じやり方で実行する。したがって、異なる結果セットの結果記録がグループ化および集約される。そうすると、結果セットの統合によって、より多くの記憶領域を空けることができる。出力キャッシュ120内の空間をこのプロセスによって空けられない場合または出力キャッシュ120が性能が深刻な劣化に陥るほどの高占有率状態になった場合は、出力キャッシュの中身を大規模な集約のために汎用プロセッサ等の別のユニットに送ってもよい。
グループ化/集約動作のシステム実装例
図7A〜図7Eは、ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図である。特に、これら図面は、上記テーブル6に示されるサンプルクエリ3を処理するシステム500を示す。
図7Aはクエリ3に対する第1のグループの処理後のシステムの図を示す。示されているように、「販売員」列と「売上高」列は複数のブロックに分割されている。「販売員」列の第1の部分であるS1 704と「売上高」列の第1の部分であるA1 706はブロック702に格納され、「販売員」列の第2の部分であるS2 712と「売上高」列の第2の部分であるA2 714はブロック710に格納される。ある実施形態において、データはこれらのブロックにハイブリッド列状方式で格納される。
クエリ3を受けると、システム制御108は、「販売員」列の第1の部分S1 704を入力キャッシュ110にロードさせる。「販売員」列を入力キャッシュ110からフィルタユニット112にストリーミングすることにより、「販売員」列に基づいて行をグループ化することができる。第1のグループを計算するために、システム制御108は、販売員の第1の要素との等価をフィルタリング宣言として使用するようにフィルタユニット112をプログラミングする。これは図7Aの宣言720によって示される。この例において、「販売員」列の第1の要素は「Pedro」なので、第1のグループは販売員=Pedroの行のグループである。
フィルタユニット112は、宣言の評価で使用する列の第1の要素を求めるために追加のロジックを用いて、フィルタリングおよび射影動作のために先に述べたのと同じやり方で機能してもよい。宣言720を用いてプログラミングされると、「販売員」列の残りの行が、評価のために入力キャッシュ110からフィルタユニット112にストリーミングされる。テーブル3に示されるサンプル売上テーブルが与えられフィルタが販売員=Pedroの場合、フィルタユニット112は、以下のテーブル15に示されるグループ−メンバシップビットベクトルを生成するであろう。
Figure 0006305406
グループ−メンバシップビットベクトル1は、宣言720の宣言結果に対応する。このグループ−メンバシップビットベクトルの中の、値が「1」である各ビットは、「販売員」列の中で値が「Pedro」である行を特定する。このように、第1のグループに属するすべての行が同一のビット値によって特定される。逆に、ビット値が「0」である各ビットは、値が「Pedro」でない行を特定し、したがって第1のグループに属さない。
フィルタユニット112がテーブル15に示されるグループ−メンバシップビットベクトルを生成した後、このグループ−メンバシップビットベクトルは集約ユニット502に送ればよい。集約ユニット502は、このビットベクトルによって示される、宣言720を満たす「売上高」列の行に対して動作する。ある実施形態において、アドレス生成器402は、このグループ−メンバシップビットベクトルを、対応するビット値が「1」に等しいA1 706内の行のメモリアドレスに変換する。これらのメモリアドレスを用いて、このグループに属する行のA1 706における値を、RAM102から入力キャッシュ110に取出す。次に、これらの値を集約のために集約ユニット502に与える。
集約ユニット502は、グループ−メンバシップビットベクトルに加えて、実行しようとしている集約動作の種類の指示も受ける。たとえば、システム制御108は、クエリにおいて指定された集約関数を実行するように集約ユニット502をプログラミングすればよい。集約関数の例はテーブル5に示される集約関数を含むがこれらに限定されない。クエリ3の場合、集約ユニット502は、グループ−メンバシップビットベクトル1によって示される「売上高」列の行に格納されているデータを合計する。集約ユニット502は、結果セットの2つの出力として、グループの名称とこのグループに対する集約動作の結果とを生成すればよい。クエリ3を処理したときの第1のグループの出力は、以下のテーブル16に示される。集約ユニット502はこの出力(集約結果750)を出力キャッシュ120に格納する。
Figure 0006305406
集約動作の中には、3つ以上の出力を必要とするものがある。たとえば、AVG関数は、このグループの次のグループの平均値を計算するために、グループ、移動平均、および全要素をセーブしてもよい。
図7Bは、第2のグループの処理後のシステムの図である。集約ユニット502が第1のグループ−メンバシップビットベクトルに対して動作して第1のグループについての集約結果を生成するのと同時に、フィルタユニット112が第2のグループについての次のグループ−メンバシップビットベクトルの生成を開始してもよい。今回、フィルタユニット112は、フィルタユニットを一度目に通されたときに「0」になった行だけを与える。実施形態の一例において、結合ユニット116は、ビットベクトル1に対してビット単位でNOT演算740を実行することにより、ビットベクトルマスクとして〜ビットベクトル1 730を生成しこのビットベクトルマスクをビットベクトルキャッシュ114に格納する。ビットベクトルマスクとしての〜ビットベクトル1 730は、まだグループ化されていないすべての行を特定する。
ビットベクトルマスクは、生成されるとアドレス生成器402に送ればよい。アドレス生成器402は、〜ビットベクトル1 730を、まだグループ化されていない行のメモリアドレスに変換し、これらの行のみがフィルタユニット112に与えられるようにする。次に、フィルタユニット112は、アドレス生成器402から与えられたまだグループ化されていない行から第1の要素を取出してこの第1の要素に対する等価を新たな宣言722として用いればよい。この例において、値「Alex」に対する等価を新たな宣言722として用いる。フィルタユニット112は、宣言722を用いて、まだグループ化されていない残りの行を評価して、第2のグループについてのグループ−メンバシップビットベクトルとしてビットベクトル2 732を生成し、このグループ−メンバシップビットベクトルをビットベクトルキャッシュ114に格納する。ビット値が「1」であるビットベクトル2 732内の各ビットは、第2のグループに属する行に対応する。集約ユニット502は、ビットベクトル2を用いて集約結果752を生成し、これは、第2のグループの行の「売上高」列を合計したものである。結果752は出力キャッシュ120に格納される。
図7Cは、第3のグループの処理後のシステムの図である。第3のグループの処理は、フィルタユニット112に送るべき行を示すために異なるビットベクトルマスクを使用することを除いて、第2のグループの処理と同様のやり方で進められる。フィルタユニット112に与えるべき行を求めるために、結合ユニット116は、ビットベクトル2と前のビットベクトルマスク〜ビットベクトル1に対し、排他的OR(XOR742)演算をビット単位で実行することにより、新たなビットベクトルマスクBV736を生成すればよい。ビット値が「1」であるBVマスク736の各ビットは、まだグループ化されていない行に対応する。アドレス生成器402は、BVマスク736を用いて、フィルタユニット112に、まだグループ化されていない行を与える。フィルタユニット112は、新たな宣言724として「Michael」という値に対する等価を用いて、ビットベクトル3 734を生成する。集約ユニット502は、ビットベクトル3 734を用いて集約結果754を生成し、これは、第3のグループの行の「売上高」列を合計したものである。結果754は出力キャッシュ120に格納される。以下のテーブル17は、これらステップで生成されたグループ−メンバシップビットベクトルを示す。ブロックに追加のグループがある場合、これらグループの処理は第3のグループの処理に類似するであろう。
Figure 0006305406
第1のブロック内のデータの集約の終了時において出力キャッシュ120に格納されているテーブルは、以下のテーブル18に示されるテーブルによって表わすことができる。
Figure 0006305406
図7Dは、RAM内の2ブロックの処理後のシステムの図である。特に、ブロック702に適用したのと同じプロセスをブロック710に適用することにより、第2のブロックに格納されたデータをグループ化し集約することができる。ブロック710は、「販売員」列の第2の部分であるS2 712と、「売上高」列の第2の部分であるA2 714を格納している。簡潔にするために、ブロック710におけるPedro、Alex、およびMichaelの売上の合計がそれぞれ1000、2000、および3000であるとする。したがって、グループ化および集約動作によって生成される結果セット756は、第1のブロックの処理時に生成された結果セットとともに出力キャッシュ120に格納される。よって、出力キャッシュ120は結合された結果セット758を格納している。以下のテーブル19は、2ブロックの処理後の出力を表わす。
Figure 0006305406
図7Eは、出力キャッシュ内の結果の処理後のシステムの図である。出力キャッシュ120内の利用できる記憶領域がしきい値未満であるかまたはブロック各々に対する最終集約結果を計算する準備ができている場合、結果セット758を、さらに処理し統合するために入力キャッシュ110に送ってもよい。次に、この入力キャッシュデータに対してグループ化および集約動作が先に述べたのと同じやり方で実行される。この集約処理後、結果キャッシュとなったデータは以下のテーブル20に示される。このデータは結果760として出力キャッシュ120に格納される。
Figure 0006305406
このように各ブロックに対して生成された別々の結果セットがグループ化および集約されて、両ブロックに対し1つの結果セットが生成される。
他のRAMブロックが残っている場合、すべてのブロックが集約されるまでこのプロセスが続けられる。結果キャッシュが、完全に満杯になった場合または性能が深刻な劣化に陥るほどの高占有率状態に達した場合は、この結果キャッシュの中身を大規模な集約のために汎用プロセッサ等の別のユニットに送ってもよい。
キャッシュサイジング
入力キャッシュ110、ビットベクトルキャッシュ114、および出力キャッシュ120のサイズは、特定の実装に応じて異なり得る。小型のキャッシュのいくつかの利点には、より高速の動作およびより小さい面積占有が含まれる。しかしながら、より大きなキャッシュサイジングは、フィルタリングおよび射影動作中のRAMアクセスの回数を減じることができる。したがって、さまざまなキャッシュの最適キャッシュサイズは、実装に応じて異なり得る。
ある実施形態において、入力キャッシュ110、ビットベクトルキャッシュ114、および/または出力キャッシュ120のサイズを、ブロック104A〜104N等のRAMの1つ以上のブロックのサイズに近似するように選択する。ブロックサイズに近似するキャッシュサイズによって、このシステムは、RAMアクセスを制限しつつフィルタリングおよび射影動作を1ブロック毎にまたは複数ブロックに基づいて効率的に実行することができる。
別の実施形態では、グループ化される列および集約データを格納する列に対して十分な記憶領域を入力キャッシュが有するようにキャッシュのサイズを定める。グループ濃度が1ブロック内に1つよりも多い場合は、これら列双方を複数回処理して、これら列双方を格納するのに十分大きなキャッシュにすることにより、これらをRAMから繰返し読出す時間とパワーを節約することができる。
別の実施形態では、出力キャッシュのサイズを、データセット全体の予測される濃度およびブロック内の濃度に応じて定めてもよい。1ブロック内のグループ数の濃度が高いほど、出力キャッシュが満杯になるのが速くなり、上記グループ化および集約動作中に結果データが集約される頻度が高くなる。同様に、グループデータの全体的な濃度が高ければ、出力キャッシュは、追加の集約が何度実行されるかにかかわらず、すべてのグループの結果を保持することができない可能性がある。出力キャッシュが、その内容に対して集約が実行された後でさえ満杯であれば、より高レベルの処理ノードを用いて集約を完了すればよいが、そうすれば性能が劣化する可能性がある。したがって、少なくとも最終結果セットを保持するのに十分な大きさの出力キャッシュは性能を改善し得る。
キャッシュのサイズは、RAM102に対するメモリインターフェイスの、および、フィルタユニット112、結合ユニット116、および射影ユニット118等のデータベースユニットの相対速度に基づいて、選択することもできる。データベースユニットと比較してメモリが高速であれば、より小さなキャッシュが好ましいであろう。なぜなら、頻度の高いロードに関連するコストが小さくなり得るからである。逆に、データベースユニットの処理速度と比較してメモリが低速であれば、より大きなキャッシュサイズはより効率的であろう。
別の実施形態では、入力キャッシュ110、ビットベクトルキャッシュ114、および/または出力キャッシュ120のサイズを、データベースの作業負荷の性質に基づいて選択する。場合によっては、多数の宣言を同じ列に適用するときのように、1ブロック内の列データがデータベースユニットによって複数回処理されることがある。このような事例が特定の実装では一般的であるのであれば、より大きなキャッシュサイズにすると、より長期間キャッシュにデータを置くことができるので、性能が改善し得る。
複数列によるグループ化
上記グループ化および集約の例では、テーブル6のクエリ3の処理について説明しているが、同じシステムによって、1つの列ではなく複数列に基づいてデータをグループ化するクエリ4を処理することができる。ある実施形態において、GROUP BYに関わる列すべてを結合してもよい。たとえば、クエリ4の場合、「販売員」列と「顧客」列を連結等によって結合してもよい。次に、結合された列をステップ602でフィルタユニット112に送ればよい。その後、これら2つの列は、出力キャッシュへの書込前等のある時点において分離されるであろう。システム500は、これらの列をフィルタユニット112に送られる前に結合するための追加のデータベースユニットと、出力キャッシュ120の前でこれらの列を分離するための追加のデータベースユニットとを含み得る。
別の実施形態において、上記のような、複数の列に対して動作することができるフィルタユニットを用いて、複数列によるグループ化を処理する。たとえば、複数の列が入力されるフィルタユニットは、一回で、販売員=「販売員」列の第1の要素AND顧客=「顧客」列の第1の要素のような宣言を実現し評価することができるであろう。クエリ3の場合、2列入力を扱うことができるフィルタユニットで足りるであろう。GROUP BYが3列以上に基づいてデータをグループ化する場合、フィルタユニットをより多くの列を受入れるように構成するか、または、システムが列の組合せに対し反復動作を行なうようにしてもよい。
一回当たり複数のグループ
ある実施形態において、複数のグループが一回で求められるよう複数のストリームを処理するようにフィルタユニット112を構成してもよい。たとえば、フィルタユニット112が「顧客」列を処理するときに、1つのストリームが販売員=販売員の第1の要素という宣言を適用する一方で、別のストリームが販売員!=販売員の第1の要素という第1のケースを待ちこの販売員の値を等価の宣言として用いるようにしてもよい。この手法は、前のセクションで説明した複数列によるグループ化を実行するための技術と同様であるが、同じ列がすべてのストリームに送られ宣言は以前の宣言の結果に基づいている。
このプロセスに従い、フィルタユニット112は、処理する各グループに対してグループ−メンバシップビットベクトルを生成する。フィルタユニットが、一回につきN個のグループを作ることができる場合(Nは正の整数値を表わす)、ビットベクトルキャッシュ114を、N+2個のグループ−メンバシップビットベクトル、すなわち、フィルタユニット112の出力であるN個のビットベクトルと、N個のビットベクトルをともにOR演算する1つのビットベクトルと、上記実装例で説明したOR演算されたビットベクトルに対して機能するビットベクトルマスクとを、格納するように構成してもよい。
代替の実施形態において、ビットベクトルキャッシュ114を、実装に応じてN個またはN+1個のビットベクトルを格納するように構成してもよい。たとえば、N個のビットベクトルのうちのいくつかを、OR結合またはビットベクトルマスクによって上書きしてもよい。
データを集約するとき、集約ユニット502はN個のビットベクトルに対して逐次的に動作し得る。これに代わるものとして、集約ユニット502が複数のストリームを処理するようにも構成されている場合、集約ユニット502はこれらビットベクトルに対して同時に動作してもよい。
他の並列処理
上記技術は、示されているステップの逐次処理を示している。しかしながら、これらステップのうちのいくつかを、実装に応じて並列に実行してもよい。たとえば、結合ユニット116は、フィルタユニット112が宣言評価を完了するのを待つのではなく、フィルタユニット112のビットが利用できるようになるとビットベクトルを処理してもよい。別の例として、射影ユニット118が出力キャッシュ120のための列を処理する間に、フィルタユニット112が、フィルタリングする次の列の処理を開始してもよい。キャッシュのロードおよびアクセス等の他のステップを、他のフィルタリングおよび射影ステップと並列に実行することもできる。さらに別の例では、集約ユニット502が出力キャッシュ120のための列を処理する間に、フィルタユニット112が次のグループの処理を開始してもよい。キャッシュのロードおよびアクセス等の他の動作を並列に実行してもよい。
ハードウェアの概要
1つの実施形態によれば、本明細書に記載の技術は、1つ以上の専用計算装置によって実装される。専用計算装置は、ハードウェアによって技術を実装し得る、または、技術を実装するように永続的にプログラミングされた1つ以上の特定用途向け集積回路(ASIC)もしくはフィールドプログラマブルゲートアレイ(FPGA)などのデジタル電子装置を含み得る、または、ファームウェア、メモリ、他の記憶装置、もしくは組合せにおけるプログラムコマンドに従って技術を実装するようにプログラムされた1つ以上の汎用ハードウェアプロセッサを含み得る。このような専用計算装置は、技術を達成するために、カスタムプログラミングに、カスタムハードワイヤードロジック、ASIC、またはFPGAを組合わせてもよい。専用計算装置は、デスクトップコンピュータシステム、ポータブルコンピュータシステム、携帯用デバイス、ネットワーキングデバイス、または、技術を実装するためにハードワイヤードロジックおよび/もしくはプログラムロジックを組込んだ任意の他の装置であってもよい。
たとえば、図8は、本発明の実施形態が実装され得るコンピュータシステム800を示すブロック図である。コンピュータシステム800は、バス802または情報を通信するための他の通信機構と、情報を処理するためにバス802に結合されたハードウェアプロセッサ804とを含む。ハードウェアプロセッサ804は、たとえば、汎用マイクロプロセッサであってもよい。
コンピュータシステム800は、情報およびプロセッサ804によって実行されるコマンドを格納するためにバス802に結合された、ランダムアクセスメモリ(RAM)または他の動的記憶装置などのメインメモリ806も含む。たとえば、RAM102はメインメモリ806の中において実装されてもよい。メインメモリ806は、プロセッサ804によって実行されるコマンドの実行中に一時変数または他の中間情報を格納するためにも使用され得る。このようなコマンドは、プロセッサ804にアクセス可能な非一時的な記録媒体に格納されると、コマンドにおいて指定された動作を行なうようにカスタマイズされた専用マシンにコンピュータシステム800を変える。
コンピュータシステム800は、プロセッサ804のための静的情報およびコマンドを格納するためにバス802に結合された読出し専用メモリ(ROM)808または他の静的記憶装置をさらに含む。磁気ディスクまたは光ディスクなどの記憶装置810が設けられ、情報およびコマンドを格納するためにバス802に結合される。
コンピュータシステム800は、コンピュータのユーザに対して情報を表示するための陰極線管(CRT)などのディスプレイ812にバス802を介して結合され得る。英数字および他のキーを含む入力装置814は、プロセッサ804に対して情報およびコマンド選択を伝えるためにバス802に結合される。別のタイプのユーザ入力装置は、方向情報およびコマンド選択をプロセッサ804に伝えるための、およびディスプレイ812上でのカーソル移動を制御するための、マウス、トラックボール、またはカーソル方向キーなどのカーソル制御816である。この入力装置は、通常、第1の軸(たとえばx)および第2の軸(たとえばy)という2つの軸において2つの自由度を有し、これによって面における位置をこの装置が指定できる。
コンピュータシステム800は、フィルタリング、射影、グループ化、および/または集約動作を実行するためのクエリ処理ロジック832も含み得る。クエリ処理ロジック832は、システム100、システム400、またはシステム500に示される1つ以上の要素を用いて実装し得る。
コンピュータシステム800は、本明細書に記載される技術を、コンピュータシステムと組合わされてコンピュータシステム800を専用マシンとするかまたは専用マシンとなるようにプログラミングする、カスタマイズされたハードワイヤードロジック、1つ以上のASICもしくはFPGA、ファームウェアおよび/またはプログラムロジックを用いて実装してもよい。ある実施形態によると、ここでの技術は、メインメモリ806に含まれる1つ以上のコマンドの1つ以上のシーケンスをプロセッサ804が実行することに応答して、コンピュータシステム800によって行なわれる。このようなコマンドは、記憶装置810などの他の記録媒体からメインメモリ806に読込まれ得る。メインメモリ806に含まれるコマンドのシーケンスを実行することにより、本明細書に記載の処理ステップがプロセッサ804によって実行される。代替の実施形態において、ハードワイヤード回路を、ソフトウェアコマンドの代わりにまたはソフトウェアコマンドと組合わせて使用してもよい。
本明細書において使用される用語「記録媒体」は、特定の方法でマシンを動作させるデータおよび/またはコマンドを格納する任意の非一時的な媒体をいう。このような記録媒体は、不揮発性の媒体および/または揮発性の媒体を含み得る。不揮発性の媒体は、たとえば、記憶装置810などの光ディスクまたは磁気ディスクを含む。揮発性の媒体は、メインメモリ806などの動的メモリを含む。記録媒体の一般的な形式は、たとえば、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープもしくは任意の他の磁気データ記録媒体、CD−ROM、任意の他の光データ記録媒体、穴のパターンを伴う任意の物理媒体、RAM、PROM、およびEPROM、FLASH−EPROM、NVRAM、任意の他のメモリチップもしくはカートリッジを含む。
記録媒体は、伝送媒体とは異なるが、伝送媒体と併せて使用され得る。伝送媒体は、記録媒体間の情報の転送に関わる。たとえば、伝送媒体は、バス802を包含するワイヤを含む、同軸ケーブル、銅線、および光ファイバを含む。伝送媒体は、電波および赤外線データ通信時に生成されるような音波または光波の形式を取り得る。
さまざまな形式の媒体は、実行のためにプロセッサ804に1つ以上のコマンドの1つ以上のシーケンスを搬送することに関わり得る。たとえば、コマンドは、リモートコンピュータの磁気ディスクまたはソリッドステートドライブ上に最初は担持され得る。リモートコンピュータは、そのダイナミックメモリにコマンドをロードし、モデムを用いて電話回線を介してコマンドを送ることができる。コンピュータシステム800内のモデムは、電話回線上のデータを受け、赤外線送信器を使用してデータを赤外線信号に変換することができる。赤外線検知器は、赤外線信号で運ばれたデータを受けることができ、適切な回路によってこのデータをバス802上に置くことができる。バス802はデータをメインメモリ806に送り、このメインメモリからプロセッサ804はコマンドを取出して実行する。メインメモリ806が受けたコマンドは、プロセッサ804による実行の前または後に記憶装置810上に任意に格納され得る。
コンピュータシステム800は、バス802に結合された通信インターフェイス818も含む。通信インターフェイス818は、ローカルネットワーク822に接続されたネットワークリンク820に結合する双方向データ通信を提供する。たとえば、通信インターフェイス818は、統合サービスデジタル網(ISDN)カード、ケーブルモデム、衛星モデム、またはモデムであり対応するタイプの電話回線へのデータ通信接続を提供してもよい。別の例として、通信インターフェイス818は、ローカルエリアネットワーク(LAN)カードであり対応のLANへのデータ通信接続を提供してもよい。無線リンクも実装され得る。このような実装例において、通信インターフェイス818は、さまざまなタイプの情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送信および受信する。
ネットワークリンク820は通常、1つ以上のネットワークを介して他のデータ装置へのデータ通信を提供する。たとえば、ネットワークリンク820は、ローカルネットワーク822を介し、ホストコンピュータ824へ、または、インターネットサービスプロバイダ(ISP)826によって運営されるデータ機器へ、接続を提供し得る。そうすると、ISP826は、現在一般的に「インターネット」828と呼ばれている全世界パケットデータ通信網を介してデータ通信サービスを提供する。ローカルネットワーク822およびインターネット828はいずれも、デジタルデータストリームを搬送する電気信号、電磁信号、または光信号を使用する。コンピュータシステム800へおよびコンピュータシステム800からデジタルデータを搬送する、さまざまなネットワークを介する信号、および、ネットワークリンク820上の、通信インターフェイス818を介する信号は、伝送媒体の形態の例である。
コンピュータシステム800は、ネットワーク、ネットワークリンク820、および通信インターフェイス818を介して、メッセージの送信、およびプログラムコードを含むデータの受信を行ない得る。インターネットの例において、サーバ830は、インターネット828、ISP826、ローカルネットワーク822、および通信インターフェイス818を介してアプリケーションプログラムのための要求されたコードを送信し得る。
受信されたコードは、受信され次第プロセッサ804によって実行され得る、および/または記憶装置810に格納され得る、または、後で実行するために他の不揮発性記憶装置に格納され得る。
拡張および代替案
上記明細書では、実装毎に異なり得る多数の具体的な詳細を参照しながら本発明の実施形態を説明している。このため、明細書および図面は、限定的ではなく例示的な意味で考慮されねばならない。発明の範囲の唯一かつ排他的な指標および出願人が意図する発明の範囲は、本願に由来する一組の請求項の、このような請求項の元になる特定の形式の、後の任意の修正が含まれる、文言上のかつ均等物の範囲である。

Claims (12)

  1. 方法であって、
    テーブルを対象とするクエリの結果をフィルタリングするための基準を指定する宣言に基づいて回路をプログラミングしてフィルタリングユニットの再構成可能なハードウェアにすることを含み、
    前記宣言は前記テーブルの特定の列に対する条件を指定し、
    前記特定の列から入力キャッシュに値をロードするとともに前記フィルタリングユニットに前記宣言を前記値に適用させることによって、宣言結果を生成することを含み、
    前記宣言結果は、前記特定の列の中の、前記宣言によって指定された前記条件を満たす値を有する、前記テーブルの行を特定し、
    前記宣言結果に少なくとも一部基づき、前記クエリの結果として返す行を選択することと、
    前記選択された行を前記クエリに対する結果として返すこととを含み、
    前記方法は1つ以上の計算装置によって実行される、方法。
  2. 前記宣言結果はビットベクトルであり、前記ビットベクトルの各ビットは、特定の行に対応し、第1の宣言によって指定された条件を前記特定の行が満たすか否か特定する、請求項1に記載の方法。
  3. 前記宣言は、前記クエリに対応付けられた一組の宣言のうちの第1の宣言であり、
    前記宣言結果は第1の宣言結果であり、
    前記方法はさらに、
    前記クエリの結果をフィルタリングするための第2の基準を指定する、前記一組の宣言のうちの第2の宣言に基づいて第2の回路をプログラミングして前記フィルタリングユニットの再構成可能なハードウェアにすることを含み、
    前記第2の宣言は前記テーブルの第2の列に対する第2の条件を指定し、
    前記第2の列から前記入力キャッシュに値をロードするとともに前記フィルタリングユニットに前記第2の宣言を前記値に適用させることによって、第2の宣言結果を生成することを含み、
    前記第2の宣言結果は、前記第2の列の中の、前記第2の宣言によって指定された前記第2の条件を満たす値を有する、前記テーブルの行を特定し、
    前記宣言結果に少なくとも一部基づき、結果として返す行を選択することは、
    前記第1の宣言結果を前記第2の宣言結果と結合することにより結合結果を生成することと、
    前記結合結果を用いて前記第1の宣言および前記第2の宣言双方を満たす行を特定することと、
    前記結合結果によって特定された行を、前記第1の宣言および前記第2の宣言双方を満たすものとして選択することとを含む、請求項1または2に記載の方法。
  4. 一組の宣言のうちの各宣言について、
    前記クエリのフィルタリング結果に対する特定の基準を指定する、前記一組の宣言のうちの各宣言に基づいて特定の回路をプログラミングして前記フィルタリングユニットの再構成可能なハードウェアにすることと、
    列の少なくとも一部から前記フィルタリングユニットに値をロードするとともに前記フィルタリングユニットに前記各宣言を前記値に適用させることによって、宣言結果を生成することとをさらに含み、
    前記結果として返す行を選択することは、
    各宣言結果を結合することにより、前記一組の宣言によって指定されたすべての基準を満たす行を特定する最終結果を生成することと、
    前記最終結果によって特定された行を、前記一組の宣言によって指定された基準を満たすものとして選択することとを含む、請求項1〜3のいずれか1項に記載の方法。
  5. 前記各宣言について生成された前記宣言結果を用いて、次の宣言の評価のために前記フィルタリングユニットに与える行の値を決定し、
    前記一組の宣言は逐次順序で評価され、
    前記逐次順序は、宣言が多数の行をふるい落とす可能性に基づいており、
    多数の行をふるい落とす可能性がより高い宣言は、多数の行をふるい落とす可能性がより低い宣言よりも前に評価される、請求項4に記載の方法。
  6. 前記結果として行を選択することは、前記最終結果を一組のメモリアドレスに変換することをさらに含み、
    前記一組のメモリアドレスのうちの各メモリアドレスは、前記一組の宣言によって指定された前記基準を満たす行の記憶場所を特定する、請求項4に記載の方法。
  7. 前記フィルタリングユニットに前記宣言を前記値に適用させることは、
    前記特定の列の対応する行に対し、前記対応する行の値が前記条件を満たす場合に、第1のビット値を生成することと、
    前記対応する行に対し、前記対応する行の値が前記条件を満たさない場合に、前記第1のビット値と異なる第2のビット値を生成することとを含む、請求項1〜6のいずれか1項に記載の方法。
  8. 前記特定の列から入力キャッシュに値をロードするとともに前記フィルタリングユニットに前記宣言を前記値に適用させることによって、宣言結果を生成することは、
    メモリの第1のブロックに格納された前記特定の列から第1組の値をロードすることと、
    前記フィルタリングユニットに、前記宣言を前記第1組の値に適用させることによって第1のビットベクトルを生成することとを含み、前記第1のビットベクトルは、前記宣言によって指定された前記条件を満たす、メモリの前記第1のブロック内に格納された値を有する、前記テーブルの行を特定し、
    メモリの第2のブロックに格納された前記特定の列から第2組の値をロードすることと、
    前記フィルタリングユニットに、前記宣言を前記第2組の値に適用させることによって第2のビットベクトルを生成することとを含み、前記第2のビットベクトルは、前記宣言によって指定された前記条件を満たす、メモリの前記第2のブロック内に格納された値を有する、前記テーブルの行を特定する、請求項1〜7のいずれか1項に記載の方法。
  9. 前記フィルタリングユニットに前記宣言を前記値に適用させることは、前記フィルタリングユニットに、前記特定の列からの複数の値に対して前記宣言を同時に適用させることを含む、請求項1〜8のいずれか1項に記載の方法。
  10. 1つ以上のプロセッサにより実行されると請求項1〜9のうちいずれか一項に記載の方法を実行させる命令を含むコンピュータ読取可能なプログラム
  11. フィルタリングおよび射影動作を実行するためのシステムであって、
    制御ユニットを備え、前記制御ユニットは、
    テーブルを対象とするクエリの結果をフィルタリングするための基準を指定する一組の宣言を受けるように、かつ、
    前記テーブルの特定の列に対する条件を指定する、前記一組の宣言のうちの特定の宣言を適用するように回路をプログラミングしてフィルタユニットの再構成可能なハードウェアにするように構成され、
    フィルタユニットを備え、前記フィルタユニットは、
    前記特定の列から値を受け前記特定の宣言を前記値に適用するように、かつ
    前記特定の宣言によって指定された前記条件を満たす、前記特定の列の中の値を有する、前記テーブルの行を特定するビットベクトルを生成するように構成され、
    射影ユニットを備え、前記射影ユニットは、
    前記ビットベクトルに少なくとも一部基づき、前記クエリの結果として返す行を選択するように、かつ
    前記選択された行を前記クエリに対する結果として返すように構成される、システム。
  12. 前記宣言は、前記クエリに対応付けられた一組の宣言のうちの第1の宣言であり、
    前記制御ユニットはさらに、前記テーブルの第2の列に対する第2の条件を指定する、前記一組の宣言のうちの第2の宣言を用いて第2の回路をプログラミングして前記フィルタユニットの再構成可能なハードウェアにするように構成され、
    前記フィルタユニットはさらに、
    前記第2の列から値を受け前記第2の宣言を前記値に適用するように、かつ
    前記第2の列の中で前記第2の宣言によって指定された前記第2の条件を満たす値を有する、前記テーブルの行を特定する第2のビットベクトルを生成するように構成され、
    前記システムはさらに結合ユニットを備え、前記結合ユニットは、ビット単位の演算子を適用することによって第1のビットベクトルを前記第2のビットベクトルと結合することによって第3のビットベクトルを生成するように構成され、
    前記射影ユニットは、
    前記第3のビットベクトルを用いて前記第1の宣言および前記第2の宣言双方を満たす行を特定するように、かつ
    前記第1の宣言および前記第2の宣言双方を満たすものとして、前記第3のビットベクトルによって特定された行を選択するように構成される、請求項11に記載のシステム。
JP2015528521A 2012-08-20 2013-08-13 フィルタリング/射影動作のハードウェア実装 Active JP6305406B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/590,032 US9727606B2 (en) 2012-08-20 2012-08-20 Hardware implementation of the filter/project operations
US13/590,032 2012-08-20
PCT/US2013/054808 WO2014031393A1 (en) 2012-08-20 2013-08-13 Hardware implementation of the filter/project operations

Publications (3)

Publication Number Publication Date
JP2015532748A JP2015532748A (ja) 2015-11-12
JP2015532748A5 JP2015532748A5 (ja) 2016-09-29
JP6305406B2 true JP6305406B2 (ja) 2018-04-04

Family

ID=49034238

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015528521A Active JP6305406B2 (ja) 2012-08-20 2013-08-13 フィルタリング/射影動作のハードウェア実装

Country Status (5)

Country Link
US (1) US9727606B2 (ja)
EP (1) EP2885727B1 (ja)
JP (1) JP6305406B2 (ja)
CN (1) CN104685499B (ja)
WO (1) WO2014031393A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9600522B2 (en) 2012-08-20 2017-03-21 Oracle International Corporation Hardware implementation of the aggregation/group by operation: filter method
US9563658B2 (en) 2012-08-20 2017-02-07 Oracle International Corporation Hardware implementation of the aggregation/group by operation: hash-table method
US9176999B2 (en) * 2012-09-13 2015-11-03 International Business Machines Corporation Multiplication-based method for stitching results of predicate evaluation in column stores
US9275168B2 (en) * 2013-07-19 2016-03-01 International Business Machines Corporation Hardware projection of fixed and variable length columns of database tables
US9235564B2 (en) * 2013-07-19 2016-01-12 International Business Machines Corporation Offloading projection of fixed and variable length database columns
US9582540B2 (en) 2014-08-21 2017-02-28 International Business Machines Corporation Feedback mechanism providing row-level filtering earlier in a plan
US20160063050A1 (en) * 2014-08-28 2016-03-03 Joerg Schoen Database Migration Consistency Checker
JP6871504B2 (ja) 2016-12-27 2021-05-12 富士通株式会社 情報処理装置、データロードプログラム及びデータロード方法
US20190378028A1 (en) * 2018-06-08 2019-12-12 Microsoft Technology Licensing, Llc Accelerating machine learning inference with probabilistic predicates
US11841845B2 (en) 2021-08-31 2023-12-12 Lemon Inc. Data consistency mechanism for hybrid data processing
US11789936B2 (en) * 2021-08-31 2023-10-17 Lemon Inc. Storage engine for hybrid data processing
TW202336577A (zh) * 2022-01-05 2023-09-16 以色列商紐羅布萊德有限公司 處理系統
US11853239B2 (en) * 2022-04-11 2023-12-26 Western Digital Technologies, Inc. Hardware accelerator circuits for near storage compute systems

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2519245B2 (ja) * 1987-05-15 1996-07-31 株式会社日立製作所 情報検索装置
JPH04199275A (ja) * 1990-11-26 1992-07-20 Oki Electric Ind Co Ltd データベース検索装置
JPH04320572A (ja) * 1991-04-19 1992-11-11 Toshiba Corp データ処理装置
US5511190A (en) 1995-01-20 1996-04-23 Tandem Computers, Inc. Hash-based database grouping system and method
US5655080A (en) 1995-08-14 1997-08-05 International Business Machines Corporation Distributed hash group-by cooperative processing
US5706495A (en) 1996-05-07 1998-01-06 International Business Machines Corporation Encoded-vector indices for decision support and warehousing
US5884229A (en) 1996-06-10 1999-03-16 Exxon Production Research Company Method for measuring lateral continuity at a specified subsurface location from seismic data
US5884299A (en) 1997-02-06 1999-03-16 Ncr Corporation Optimization of SQL queries involving aggregate expressions using a plurality of local and global aggregation operations
JP2000132584A (ja) * 1998-10-27 2000-05-12 Hitachi Ltd Hdl入力方法及び装置
JP2000187668A (ja) 1998-12-22 2000-07-04 Hitachi Ltd グループ化方法と重複排除方法
US6934712B2 (en) 2000-03-21 2005-08-23 International Business Machines Corporation Tagging XML query results over relational DBMSs
US6598041B1 (en) 2000-09-07 2003-07-22 International Business Machines Corporation Method, system, and program for processing modifications to data in tables in a database system
US6581055B1 (en) * 2000-09-11 2003-06-17 Oracle International Corporation Query optimization with switch predicates
CA2327167C (en) * 2000-11-30 2007-10-16 Ibm Canada Limited-Ibm Canada Limitee Method and system for composing a query for a database and traversing the database
US6571233B2 (en) * 2000-12-06 2003-05-27 International Business Machines Corporation Optimization of SQL queries using filtering predicates
US6996569B1 (en) 2001-06-20 2006-02-07 Microstrategy Incorporated Systems and methods for custom grouping of data
US6823329B2 (en) 2002-04-02 2004-11-23 Sybase, Inc. Database system providing methodology for acceleration of queries involving functional expressions against columns having enumerated storage
US6732354B2 (en) * 2002-04-23 2004-05-04 Quicksilver Technology, Inc. Method, system and software for programming reconfigurable hardware
US6957225B1 (en) * 2002-05-07 2005-10-18 Oracle International Corporation Automatic discovery and use of column correlations in tables
US7111025B2 (en) * 2003-04-30 2006-09-19 International Business Machines Corporation Information retrieval system and method using index ANDing for improving performance
US7433886B2 (en) 2003-10-24 2008-10-07 Microsoft Corporation SQL language extensions for modifying collection-valued and scalar valued columns in a single statement
US7469241B2 (en) 2004-11-30 2008-12-23 Oracle International Corporation Efficient data aggregation operations using hash tables
US8244718B2 (en) * 2006-08-25 2012-08-14 Teradata Us, Inc. Methods and systems for hardware acceleration of database operations and queries
US7974976B2 (en) * 2006-11-09 2011-07-05 Yahoo! Inc. Deriving user intent from a user query
US7870398B2 (en) * 2007-01-25 2011-01-11 International Business Machines Corporation Integrity assurance of query result from database service provider
US7925647B2 (en) * 2007-07-27 2011-04-12 Oracle International Corporation Techniques for optimizing SQL statements using user-defined indexes with auxiliary properties
US9524317B2 (en) 2007-08-24 2016-12-20 International Business Machines Corporation Optimization of aggregate queries in database management systems using an early out join when processing min and max functions
US8078595B2 (en) 2007-10-09 2011-12-13 Oracle International Corporation Secure normal forms
US8150850B2 (en) * 2008-01-07 2012-04-03 Akiban Technologies, Inc. Multiple dimensioned database architecture
US20090216757A1 (en) * 2008-02-27 2009-08-27 Robi Sen System and Method for Performing Frictionless Collaboration for Criteria Search
US8374986B2 (en) 2008-05-15 2013-02-12 Exegy Incorporated Method and system for accelerated stream processing
US8275761B2 (en) 2008-05-15 2012-09-25 International Business Machines Corporation Determining a density of a key value referenced in a database query over a range of rows
US8285748B2 (en) * 2008-05-28 2012-10-09 Oracle International Corporation Proactive information security management
US8832112B2 (en) 2008-06-17 2014-09-09 International Business Machines Corporation Encoded matrix index
US20100030728A1 (en) 2008-07-29 2010-02-04 Oracle International Corporation Computing selectivities for group of columns and expressions
US9430526B2 (en) 2008-09-29 2016-08-30 Teradata Us, Inc. Method and system for temporal aggregation
US8478775B2 (en) * 2008-10-05 2013-07-02 Microsoft Corporation Efficient large-scale filtering and/or sorting for querying of column based data encoded structures
US8312038B2 (en) 2008-12-18 2012-11-13 Oracle International Corporation Criteria builder for query builder
US8285709B2 (en) * 2009-05-12 2012-10-09 Teradata Us, Inc. High-concurrency query operator and method
US8745031B2 (en) * 2009-05-28 2014-06-03 Oracle International Corporation Cache-based predicate handling for queries on XML data using uncorrelated path-based row sources
EP2290562A1 (en) 2009-08-24 2011-03-02 Amadeus S.A.S. Segmented main-memory stored relational database table system with improved collaborative scan algorithm
US8832142B2 (en) * 2010-08-30 2014-09-09 Oracle International Corporation Query and exadata support for hybrid columnar compressed data
US10311105B2 (en) 2010-12-28 2019-06-04 Microsoft Technology Licensing, Llc Filtering queried data on data stores
US8676834B2 (en) 2011-02-16 2014-03-18 International Business Machines Corporation Set-level comparisons in dynamically formed groups
US9563658B2 (en) 2012-08-20 2017-02-07 Oracle International Corporation Hardware implementation of the aggregation/group by operation: hash-table method
US9600522B2 (en) 2012-08-20 2017-03-21 Oracle International Corporation Hardware implementation of the aggregation/group by operation: filter method

Also Published As

Publication number Publication date
CN104685499B (zh) 2018-12-14
US9727606B2 (en) 2017-08-08
CN104685499A (zh) 2015-06-03
EP2885727B1 (en) 2019-10-23
WO2014031393A1 (en) 2014-02-27
EP2885727A1 (en) 2015-06-24
US20140052743A1 (en) 2014-02-20
JP2015532748A (ja) 2015-11-12

Similar Documents

Publication Publication Date Title
JP6400010B2 (ja) 集約/グループ化動作:フィルタリング方法のハードウェア実装
JP6305406B2 (ja) フィルタリング/射影動作のハードウェア実装
US10007699B2 (en) Optimized exclusion filters for multistage filter processing in queries
CN109815283B (zh) 一种异构数据源可视化查询方法
JP6117378B2 (ja) 分散型データベースクエリ・エンジン用のシステムおよび方法
Ziener et al. FPGA-based dynamically reconfigurable SQL query processing
US9633104B2 (en) Methods and systems to operate on group-by sets with high cardinality
US8364751B2 (en) Automated client/server operation partitioning
JP7382233B2 (ja) データベースアクセラレータに対する並列計算オフロード
CN103309958A (zh) Gpu和cpu混合架构下的olap星型连接查询优化方法
JP2012113706A (ja) データベース・クエリ最適化のためのコンピュータで実装される方法、コンピュータ・プログラム、およびデータ処理システム
KR101955376B1 (ko) 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치
US20230222108A1 (en) Data analysis acceleration architecture
Werner et al. Accelerated join evaluation in Semantic Web databases by using FPGAs
KR101680945B1 (ko) 조인 연산을 위한 매핑 방법 및 리듀싱 방법,및 그 방법들을 이용한 장치들
US20230128180A1 (en) Programmable access engine architecture for graph neural network and graph application
JP2016130929A (ja) 集約装置、集約システム、集約方法、および、プログラム
TW202336577A (zh) 處理系統
CN114442940A (zh) 一种数据处理方法、装置、介质和电子设备
CN116710908A (zh) 语义感知计算存储协调方法
KR20010083263A (ko) 객체-관계 데이터베이스 관리 시스템에서의 역 포인터를이용한 그루핑 연산 방법 및 그 방법에서 생성된 그룹테이블을 이용한 집계 함수 획득 방법

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160809

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160809

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170719

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170725

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20171025

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20171225

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180206

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180306

R150 Certificate of patent or registration of utility model

Ref document number: 6305406

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250