(57)【特許請求の範囲】
【請求項１】
方法であって、
テーブルを対象とするクエリの結果をフィルタリングするための基準を指定する宣言に基づいて回路をプログラミングしてフィルタリングユニットの再構成可能なハードウェアにすることを含み、
前記宣言は前記テーブルの特定の列に対する条件を指定し、
前記特定の列から入力キャッシュに値をロードするとともに前記フィルタリングユニットに前記宣言を前記値に適用させることによって、宣言結果を生成することを含み、
前記宣言結果は、前記特定の列の中の、前記宣言によって指定された前記条件を満たす値を有する、前記テーブルの行を特定し、
前記宣言結果に少なくとも一部基づき、前記クエリの結果として返す行を選択することと、
前記選択された行を前記クエリに対する結果として返すこととを含み、
前記方法は１つ以上の計算装置によって実行される、方法。
【請求項２】
前記宣言結果はビットベクトルであり、前記ビットベクトルの各ビットは、特定の行に対応し、第１の宣言によって指定された条件を前記特定の行が満たすか否か特定する、請求項１に記載の方法。
【請求項３】
前記宣言は、前記クエリに対応付けられた一組の宣言のうちの第１の宣言であり、
前記宣言結果は第１の宣言結果であり、
前記方法はさらに、
前記クエリの結果をフィルタリングするための第２の基準を指定する、前記一組の宣言のうちの第２の宣言に基づいて第２の回路をプログラミングして前記フィルタリングユニットの再構成可能なハードウェアにすることを含み、
前記第２の宣言は前記テーブルの第２の列に対する第２の条件を指定し、
前記第２の列から前記入力キャッシュに値をロードするとともに前記フィルタリングユニットに前記第２の宣言を前記値に適用させることによって、第２の宣言結果を生成することを含み、
前記第２の宣言結果は、前記第２の列の中の、前記第２の宣言によって指定された前記第２の条件を満たす値を有する、前記テーブルの行を特定し、
前記宣言結果に少なくとも一部基づき、結果として返す行を選択することは、
前記第１の宣言結果を前記第２の宣言結果と結合することにより結合結果を生成することと、
前記結合結果を用いて前記第１の宣言および前記第２の宣言双方を満たす行を特定することと、
前記結合結果によって特定された行を、前記第１の宣言および前記第２の宣言双方を満たすものとして選択することとを含む、請求項１または２に記載の方法。
【請求項４】
一組の宣言のうちの各宣言について、
前記クエリのフィルタリング結果に対する特定の基準を指定する、前記一組の宣言のうちの各宣言に基づいて特定の回路をプログラミングして前記フィルタリングユニットの再構成可能なハードウェアにすることと、
列の少なくとも一部から前記フィルタリングユニットに値をロードするとともに前記フィルタリングユニットに前記各宣言を前記値に適用させることによって、宣言結果を生成することとをさらに含み、
前記結果として返す行を選択することは、
各宣言結果を結合することにより、前記一組の宣言によって指定されたすべての基準を満たす行を特定する最終結果を生成することと、
前記最終結果によって特定された行を、前記一組の宣言によって指定された基準を満たすものとして選択することとを含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
前記各宣言について生成された前記宣言結果を用いて、次の宣言の評価のために前記フィルタリングユニットに与える行の値を決定し、
前記一組の宣言は逐次順序で評価され、
前記逐次順序は、宣言が多数の行をふるい落とす可能性に基づいており、
多数の行をふるい落とす可能性がより高い宣言は、多数の行をふるい落とす可能性がより低い宣言よりも前に評価される、請求項４に記載の方法。
【請求項６】
前記結果として行を選択することは、前記最終結果を一組のメモリアドレスに変換することをさらに含み、
前記一組のメモリアドレスのうちの各メモリアドレスは、前記一組の宣言によって指定された前記基準を満たす行の記憶場所を特定する、請求項４に記載の方法。
【請求項７】
前記フィルタリングユニットに前記宣言を前記値に適用させることは、
前記特定の列の対応する行に対し、前記対応する行の値が前記条件を満たす場合に、第１のビット値を生成することと、
前記対応する行に対し、前記対応する行の値が前記条件を満たさない場合に、前記第１のビット値と異なる第２のビット値を生成することとを含む、請求項１〜６のいずれか１項に記載の方法。
【請求項８】
前記特定の列から入力キャッシュに値をロードするとともに前記フィルタリングユニットに前記宣言を前記値に適用させることによって、宣言結果を生成することは、
メモリの第１のブロックに格納された前記特定の列から第１組の値をロードすることと、
前記フィルタリングユニットに、前記宣言を前記第１組の値に適用させることによって第１のビットベクトルを生成することとを含み、前記第１のビットベクトルは、前記宣言によって指定された前記条件を満たす、メモリの前記第１のブロック内に格納された値を有する、前記テーブルの行を特定し、
メモリの第２のブロックに格納された前記特定の列から第２組の値をロードすることと、
前記フィルタリングユニットに、前記宣言を前記第２組の値に適用させることによって第２のビットベクトルを生成することとを含み、前記第２のビットベクトルは、前記宣言によって指定された前記条件を満たす、メモリの前記第２のブロック内に格納された値を有する、前記テーブルの行を特定する、請求項１〜７のいずれか１項に記載の方法。
【請求項９】
前記フィルタリングユニットに前記宣言を前記値に適用させることは、前記フィルタリングユニットに、前記特定の列からの複数の値に対して前記宣言を同時に適用させることを含む、請求項１〜８のいずれか１項に記載の方法。
【請求項１０】
１つ以上のプロセッサにより実行されると請求項１〜９のうちいずれか一項に記載の方法を実行させる命令を含むコンピュータ読取可能なプログラム。
【請求項１１】
フィルタリングおよび射影動作を実行するためのシステムであって、
制御ユニットを備え、前記制御ユニットは、
テーブルを対象とするクエリの結果をフィルタリングするための基準を指定する一組の宣言を受けるように、かつ、
前記テーブルの特定の列に対する条件を指定する、前記一組の宣言のうちの特定の宣言を適用するように回路をプログラミングしてフィルタユニットの再構成可能なハードウェアにするように構成され、
フィルタユニットを備え、前記フィルタユニットは、
前記特定の列から値を受け前記特定の宣言を前記値に適用するように、かつ
前記特定の宣言によって指定された前記条件を満たす、前記特定の列の中の値を有する、前記テーブルの行を特定するビットベクトルを生成するように構成され、
射影ユニットを備え、前記射影ユニットは、
前記ビットベクトルに少なくとも一部基づき、前記クエリの結果として返す行を選択するように、かつ
前記選択された行を前記クエリに対する結果として返すように構成される、システム。
【請求項１２】
前記宣言は、前記クエリに対応付けられた一組の宣言のうちの第１の宣言であり、
前記制御ユニットはさらに、前記テーブルの第２の列に対する第２の条件を指定する、前記一組の宣言のうちの第２の宣言を用いて第２の回路をプログラミングして前記フィルタユニットの再構成可能なハードウェアにするように構成され、
前記フィルタユニットはさらに、
前記第２の列から値を受け前記第２の宣言を前記値に適用するように、かつ
前記第２の列の中で前記第２の宣言によって指定された前記第２の条件を満たす値を有する、前記テーブルの行を特定する第２のビットベクトルを生成するように構成され、
前記システムはさらに結合ユニットを備え、前記結合ユニットは、ビット単位の演算子を適用することによって第１のビットベクトルを前記第２のビットベクトルと結合することによって第３のビットベクトルを生成するように構成され、
前記射影ユニットは、
前記第３のビットベクトルを用いて前記第１の宣言および前記第２の宣言双方を満たす行を特定するように、かつ
前記第１の宣言および前記第２の宣言双方を満たすものとして、前記第３のビットベクトルによって特定された行を選択するように構成される、請求項１１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本開示は、概してデータベース動作を実行するための技術に関し、より具体的にはフィルタリングおよび射影動作を実行するための技術に関する。
【背景技術】
【０００２】
背景
このセクションで説明される手法は、遂行可能な手法であるが、必ずしも過去に考案または遂行された手法ではない。したがって、特に明示されない限り、このセクションで説明される手法のうちのいずれも、このセクションに含まれているというだけで先行技術とみなされるべきではない。
【発明の概要】
【課題を解決するための手段】
【０００３】
データベースは、一組のハードディスク等の１つ以上の記憶装置に格納されたデータとメタデータとを含む。データベース内のデータは、実装に応じてさまざまなデータモデルに従い論理的に構成し得る。たとえば、リレーショナルデータベースシステムは通常、データを一組のテーブルに格納し、各テーブルは１組の行と列で構成されている。ほとんどの場合、各行は特異なオブジェクトを表わし、各列は特異な属性を表わす。しかしながら、他のデータモデルを用いてデータを構成してもよい。
【０００４】
データベース内のデータにアクセスしこのデータを操作するために、データベース管理システム（ＤＢＭＳ）は一般的に、さまざまな、クエリと呼ばれることが多いデータベースコマンドを受けて処理するように構成される。多くの実装において、ＤＢＭＳは、構造化照会言語（ＳＱＬ）等のデータ操作言語（ＤＭＬ）に準拠したクエリをサポートする。ＤＢＭＳは、クエリを受けると、このクエリによって指定された１つ以上のデータベース動作を実行し、クエリ結果を出力し得る。データベース動作の例は、以下で詳細に説明される、フィルタリング（filter）、射影（project）、集約（aggregation）、およびグループ化（grouping）動作を含む。
【０００５】
フィルタリングおよび射影動作
フィルタリングおよび射影動作は、特定の行の特定の列から値を出力するデータベース動作であり、この場合の行は、宣言（predicate）と呼ばれる何らかの基準に基づいてフィルタリングされる。ＳＱＬにおいて、射影およびフィルタリング動作はＳＥＬＥＣＴおよびＷＨＥＲＥ構文を使用する。具体的には、ＳＥＬＥＣＴ文はどのようなデータを射影するか（すなわちどの列から出力値を取出すか）を示し、ＷＨＥＲＥ句は出力をフィルタリングするための宣言を含む（すなわちどの行から出力値を取出すかを示す）。ＷＨＥＲＥ句の演算子の例は、以下のテーブル１に示される演算子を含むが、これらに限定されない。
【０００６】
【表１】
0006305406.tif 000002
【０００７】
フィルタリングおよび射影クエリの一例は、以下のテーブル２に示される。
【０００８】
【表２】
0006305406.tif 000003
【０００９】
このクエリは、売上テーブル内のデータを、販売員はPedroまたはAlexいずれかでなければならずかつ売上高が２００より多くなければならないという基準の下でフィルタリングする。これらの基準を満たす売上テーブルの中の各記録について、クエリは、この記録の中で示される、対応付けられた販売員、顧客、および売上高を返す。
【００１０】
たとえば、以下のテーブル３は売上テーブルの一例を示す。
【００１１】
【表３】
0006305406.tif 000004
【００１２】
テーブル３の売上テーブルの例の場合にクエリ１を実行したときの予想される出力を以下のテーブル４に示す。
【００１３】
【表４】
0006305406.tif 000005
【００１４】
集約およびグループ化動作
集約およびグループ化動作は、特定の列のデータに関する簡易統計を提供するデータベース動作である。ＳＱＬにおいて、グループ化動作は、ＧＲＯＵＰ  ＢＹ構文を用いて、１つ以上の列により、集約関数の結果をグループ化する。以下のテーブル５は、ＧＲＯＵＰ  ＢＹ文とともに使用し得る集約関数の例を示す。
【００１５】
【表５】
0006305406.tif 000006
【００１６】
集約およびグループ化クエリの例は以下のテーブル６に示される。
【００１７】
【表６】
0006305406.tif 000007
【００１８】
クエリ２は、企業のドルでの売上総額を要求する。クエリ２が実行されるとき、ＤＢＭＳは集約を実行するがグループ化は行なわない。ＤＢＭＳは、売上テーブルにおけるすべての売上高を無条件で合計して最終結果を返す。テーブル３の売上テーブルの例の場合にクエリ２を実行したときの予想される出力を以下のテーブル７に示す。
【００１９】
【表７】
0006305406.tif 000008
【００２０】
クエリ３は、販売した販売員毎にグループ化されたドルでの売上総額を要求する。クエリ３が実行されるとき、ＤＢＭＳはグループ化および集約双方を実行する。具体的には、ＤＢＭＳは、売上テーブルにおける各販売員についての集約結果を１つ生成する。この結果は、特定の販売員による総売上である。テーブル３の売上テーブルの例の場合にクエリ３を実行したときの予想される出力を以下のテーブル８に示す。
【００２１】
【表８】
0006305406.tif 000009
【００２２】
クエリ４は、売上に対応付けられた販売員および顧客毎にグループ化されたドルでの売上総額を要求する。クエリ４が実行されるとき、ＤＢＭＳは、複数列に基づくグループ化および集約を実行する。この場合、販売員−顧客ペア各々について１つの集約結果があるであろう。この集約結果は、特定の販売員−顧客ペアについての総売上である。テーブル３の売上テーブルの例の場合にクエリ４を実行したときの予想される出力を以下のテーブル９に示す。
【００２３】
【表９】
0006305406.tif 000010
【００２４】
本開示は、限定ではなく例示を目的として添付の図面に示され、これらの図面において同様の参照番号は同様の要素を示している。
【図面の簡単な説明】
【００２５】
【図１】ある実施形態に従いフィルタリングおよび射影動作を実行するためのシステムアーキテクチャの一例を示すブロック図である。
【図２】ある実施形態に従いフィルタリングおよび射影動作を実行するためのプロセスの一例を示すフローチャートである。
【図３Ａ】ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの１つである。
【図３Ｂ】ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの１つである。
【図３Ｃ】ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの１つである。
【図３Ｄ】ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの１つである。
【図３Ｅ】ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの１つである。
【図４】ある実施形態に従いフィルタリングおよび射影動作を実行するためのアドレス生成器を有するシステムアーキテクチャの一例を示すブロック図である。
【図５】ある実施形態に従いグループ化および集約動作を実行するためのシステムアーキテクチャの一例を示すブロック図である。
【図６】ある実施形態に従いグループ化および集約動作を実行するためのプロセスの一例を示すフローチャートである。
【図７Ａ】ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの１つである。
【図７Ｂ】ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの１つである。
【図７Ｃ】ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの１つである。
【図７Ｄ】ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの１つである。
【図７Ｅ】ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図のうちの１つである。
【図８】実施形態が実装され得るコンピュータシステムのブロック図である。
【発明を実施するための形態】
【００２６】
詳細な説明
以下の記載では、本発明が十分に理解されるよう、数多くの具体的な詳細事項が説明のために述べられている。しかしながら、これらの具体的な詳細事項がなくとも本発明を実施し得ることは明らかであろう。他の場合では、本発明を不必要に曖昧にするのを避けるために、周知の構造および装置はブロック図の形式で示される。
【００２７】
全体の概要
本明細書では、フィルタリング、射影、グループ化、および集約動作を実行するための技術が説明される。ある実施形態において、専用ハードウェアをこれらデータベース動作を実行するように構成し得る。この専用ハードウェアは、速度に制約があるコンピュータシステムの部分に流れるデータの量を少なくすることにより、クエリ処理を加速することができ、このことはデータのボトルネックの緩和に役立ち得る。特に、この専用ハードウェアは、フィルタリングおよび射影動作中にＲＡＭに格納する必要があるデータの量を減じることによって、クエリの評価に必要なＲＡＭ入力／出力（Ｉ／Ｏ）動作を減じることができる。加えて、この専用ハードウェアは、データベース動作の実行のために最も一般的な汎用プロセッサに存在する命令のオーバヘッドを減じる。
【００２８】
さらに、この専用ハードウェアは、データをフィルタユニットに複数回通過させることができるようにしており、これは、複雑なクエリ宣言の評価における柔軟性を考慮している。またさらに、この専用ハードウェアは、フィルタユニットがデータの一定の入力ストリームと同じペースを保たなくてもよいように、宣言の非線形評価および処理を考慮してもよい。
【００２９】
本明細書に記載の他の技術に従い、グループ化および集約を、テーブルデータのグローバルソートなしで実行し得る。グローバルソートを避けることによって、大きなリストをソートする間に生じるランダムなメモリアクセスの問題は緩和される。たとえば、リストをソートする間に、メモリの１つのブロック内に位置するグループに、あるアイテムが入る一方で、メモリの別のブロック内に位置するグループに、次のアイテムが属することがある。通常、この場合のソートされたテーブルを書込むためには、新たなメモリページを閉じて開く必要がある。
【００３０】
加えて、グループ化および集約をメモリの小さなチャンクに対して実行できるようにし、そうすることで高速で消費電力の少ないキャッシュにおいてランダムなアクセスを生じさせることができる技術が説明される。
【００３１】
本明細書に記載の実施形態によると、ビットベクトル等のデータ構造が生成されてどの行が１つ以上の宣言を満たしているかを示す。実施形態の一例において、ビットベクトルは、クエリ内の各宣言に対して生成されて、データベース内のどの行が対応する宣言を満たしているかを示す。ビットベクトルが各宣言に対して生成された後、ビット単位の演算子を用いてビットベクトルを組合わせることにより、最終ビットベクトルを生成する。最終ビットベクトルは、どの行が一組の宣言のうちのすべての宣言を満たしているかを示し、この最終ビットベクトルを射影動作で使用することによって行を選択しクエリの結果として出力してもよい。
【００３２】
他の実施形態では、ビットベクトル等のデータ構造が生成されて、グループ化および集約動作中に、どの行が同一グループの一部を構成するかを示す。たとえば、一組のビットベクトルが生成されてもよく、グループ内の各ビットベクトルは特定のグループに対応する。ビットベクトル各々の中のビットの位置は、特定の行に対応する。ビットベクトル内の各ビットのビット値は、そのビットに対応する行がビットベクトルによって表わされるグループの一部の場合は第１のビット値に設定され、対応する行がこのグループの一部でなければ第２のビット値に設定される。このように、ビットベクトルを用いることにより、同一グループに属する行を容易に特定することができ、これらの行の列からの値を集約する動作の実行中にこのビットベクトルを用いることができる。
【００３３】
フィルタリングおよび射影動作を処理するためのアーキテクチャの例
図１は、ある実施形態に従いフィルタリングおよび射影データベース動作を実行するように構成し得るシステムアーキテクチャの一例を示す。システム１００は一般的に、ＲＡＭ１０２と、メモリコントローラ１０６と、システム制御１０８と、入力キャッシュ１１０と、フィルタユニット１１２と、ビットベクトルキャッシュ１１４と、結合ユニット１１６と、射影ユニット１１８と、出力キャッシュ１２０とを含む。
【００３４】
ＲＡＭ１０２は、ブロック１０４Ａ〜１０４Ｎで示されるＮブロックのデータを格納する。Ｎは任意の正の整数であればよい。ＲＡＭ１０２は、格納されているデータに対しランダムなアクセスが可能な任意の適切なコンピュータデータ記憶装置を用いて実装し得る。ＲＡＭ１０２の例は、ダイナミックＲＡＭ（ＤＲＡＭ）およびスタティックＲＡＭ（ＳＲＡＭ）を含み得るがこれに限定されない。
【００３５】
メモリコントローラ１０６は、ＲＡＭ１０２へのおよびＲＡＭ１０２からのデータの流れを管理するメモリコントローラである。たとえば、メモリコントローラ１０６は、ＲＡＭ１０２のデータの読出要求およびＲＡＭ１０２へのデータ書込要求を処理し得る。メモリコントローラ１０６は任意の適切なメモリコントローラを用いて実装し得る。このメモリコントローラは、ダブルデータレートＤＤＲメモリコントローラ、デュアルチャネルメモリコントローラ、または完全バッファ型メモリコントローラを含むが、これに限定されない。
【００３６】
入力キャッシュ１１０、ビットベクトルキャッシュ１１４、および出力キャッシュ１２０は、以下でさらに説明される技術に従うクエリ処理中にデータを格納するメモリキャッシュである。データをキャッシュすることにより、ＲＡＭ１０２が処理するＩ／Ｏ動作の回数を最小にすることで、データのボトルネックを減じることができる。
【００３７】
システム制御１０８、フィルタユニット１１２、結合ユニット１１６、および射影ユニット１１８（「データベースユニット」と呼ぶ）は、以下でさらに詳細に説明される技術に従い機能して、フィルタリングおよび射影動作を実行する。これら構成要素および本明細書に記載の他のデータベースユニットは各々、ハードウェアとして実装しても、ハードウェアとソフトウェアの組合せとして実装してもよい。たとえば、これらユニットのうちの１つ以上を、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）等のプログラマブルロジックデバイス（ＰＬＤ）、またはその他の種類のゲートアレイもしくは再構成可能な回路を用いて実装してもよい。別の例として、これらユニットのうちの１つ以上を、アドバンストＲＩＳＣマシン（ＡＲＭ）等の汎用プロセッサまたはその他の縮小命令セットコンピュータ（ＲＩＳＣ）プロセッサを用いて実装してもよい。
【００３８】
宣言に基づくデータのフィルタリング
図２は、ある実施形態に従いフィルタリングおよび射影動作を実行するためのプロセスの一例を示す。図２に示されるプロセスは、図１に示されるシステム１００または図４に示されるシステム４００等の任意の適切なシステム上で実装し得る。
【００３９】
図２を参照して、ステップ２０２で、システム制御１０８は、１つ以上の宣言からなる一組の宣言を含むクエリを受ける。たとえば、このクエリは、１つ以上の宣言を指定するＷＨＥＲＥ句を伴うＳＥＬＥＣＴ文を含み得る。しかしながら、特定の実装に応じて任意の他の適切な構文を使用してもよい。ある実施形態において、各宣言は、データベースから抽出されて出力されたか、そうでなければクエリに対する結果として返されたデータをフィルタリングするのに使用される基準を指定する。この基準は１つ以上の演算子を用いて指定することができ、この演算子は上記テーブル１に示される演算子を含むがこれらに限定されない。
【００４０】
実施形態の一例において、システム制御１０８は、受けたクエリを構文解析することにより、どの宣言がクエリに含まれているか、および、この宣言を如何にしてフィルタユニット１１２にプログラミングすべきか判断する。ステップ２０４〜２１０は、一組の宣言の中の宣言毎に繰返されるループを定める。したがって、ステップ２０４の繰返しの一回目において、フィルタユニット１１２は一組の宣言の中の第１の宣言を用いてプログラミングされる。システム制御１０８は、宣言を任意の適切な順序でフィルタユニット１１２にプログラミングすることができる。順序を選択するための技術については以下でさらに詳細に説明される。ある実施形態において、フィルタユニットのプログラミングは、ＦＰＧＡまたはその他の再構成可能な回路を、宣言によって指示されたフィルタリング基準を適用するように構成することを含み得る。たとえば、フィルタユニット１１２を、ハードウェア記述言語（ＨＤＬ）を用いてプログラミングすることにより、テーブル１に示される宣言演算子のうちのいずれかを実装し１つ以上の値を宣言の値と比較することができる。
【００４１】
通常、宣言は特定の列からの値の条件を課す。宣言によって条件が課される列のことを本明細書では宣言の対象列と呼ぶ。したがって、宣言（売上高＞２００）の場合、売上高の列が対象列である。
【００４２】
ステップ２０６で、値が列からフィルタユニット１１２に送られる。実施形態の一例において、システム制御１０８は、ＲＡＭ１０２からの１つ以上の列の値を入力キャッシュ１１０にロードせよという要求を、メモリコントローラ１０６に送る。システム制御１０８は、評価されている宣言に基づいて、どの列を入力キャッシュ１１０にロードすべきか判断することができる。たとえば、システム制御１０８は、フィルタユニット１１２の現在のプログラミングに使用されている宣言の対象列からのみ値がロードされるようにしてもよい。たとえば、宣言が売上高＞２００の場合、システム制御１０８は、以下の実装例に示されるように、売上高の列の少なくとも一部の値がＲＡＭ１０２からキャッシュ１１０にロードされるようにしてもよい。
【００４３】
次に、対象列からの値は、入力キャッシュ１１０からフィルタユニット１１２にストリーミングされる。列データを受けると、フィルタユニット１１２は、ステップ２０４でプログラミングされた宣言を適用することによって、この宣言を満たす行を特定する結果を生成する。どの行がこの宣言を満たしているか判断するために、フィルタユニット１１２は、１つ以上の宣言演算子を適用し、受けた列の特定の行の値を、クエリ宣言において指定された宣言の値と比較すればよい。
【００４４】
ステップ２０８で、フィルタの結果は、宣言の条件を満たす対象列の値を有するのはどの行かを示すデータ構造として格納される。ある実施形態において、このデータ構造は、以下でさらに詳細に説明されるビットベクトルである。代替の実施形態において、このデータ構造は、ビットベクトルから生成された符号化データである。任意の他の適切なデータ構造を、宣言の条件を満たす対象列の値を有するのはどの行かを示すために、生成し、格納し、使用することができる。
【００４５】
ステップ２１０で、システム制御１０８は、フィルタユニット１１２による評価がまだなされていない宣言が一組の宣言の中に残っているか否か判断する。未評価の宣言が残っていれば、このプロセスはステップ２０４に戻り、システム制御１０８は残っている宣言のうちの１つを用いてフィルタユニット１１２をプログラミングする。上記一組の宣言のうちのすべての宣言が既に評価されていれば、このプロセスはステップ２１２に進む。これについては以下でさらに詳細に説明される。
【００４６】
フィルタユニットにおけるビットベクトルの生成
ある実施形態において、フィルタユニットは、各宣言結果に対してビットベクトルを生成する。ビットベクトルの各ビットは、１つの行に対応し、このビットベクトルに対応付けられているクエリ宣言をこの行が満たしているか否かを示す。たとえば、ビットベクトル内のビットの位置が、テーブル内のこの行の位置に対応していてもよい。したがって、ビットベクトル内の３番目のビットが、テーブル内の３番目の行に対応していてもよい。
【００４７】
各ビットの値はブール値を表わす。この場合、第１のビット値は、対応する行が宣言の条件を満たすことを示し、第２のビット値は、対応する行が宣言の条件を満たさないことを示す。たとえば、あるビットベクトル内の第３ビットは、このビットベクトルに対応付けられた宣言をテーブルの第３行が満たす場合は「１」であり、このビットベクトルに対応付けられた宣言をテーブルの第３行が満たさない場合は「０」である。
【００４８】
結果の結合
各宣言についての結果がステップ２０２〜２１０に従い生成された後、ステップ２１２で、クエリによって指示されたやり方で各宣言の結果を結合することにより、最終結果が生成される。最終結果は、クエリの中のすべての宣言を満たす一組の行を特定する、最終ビットベクトル等のデータ構造である。
【００４９】
ある実施形態において、最終結果は最終ビットベクトルであり、この最終ビットベクトルの各ビットは、クエリが対象とするテーブルの特定の行に対応する。特定の宣言に対するビットベクトルにおける各ビットの値が、対応する行がこのビットベクトルに対応付けられた宣言を満たすか否かを示すのと全く同じように、最終ビットベクトルにおける各ビットの値は、対応する行がすべての宣言を満たすか否かを示す。したがって、第１のビット値（たとえば「１」）を用いて、対応する行がクエリ内のすべての宣言を満たすことを示し、第２のビット値（たとえば「０」）を用いて、対応する行がすべての宣言を満たさないことを示す。
【００５０】
実施形態の一例において、システム制御１０８は、ビットベクトルの結合方法に関する命令を用いて結合ユニット１１６をプログラミングする。たとえば、結合ユニット１１６は、クエリにおいて指定された論理演算子に基づきビット単位の１つ以上の動作を実行することにより結果のビットベクトルを結合するようにプログラミングされてもよい。たとえばクエリ１の場合、システム制御１０８は、以下の実装例に示すように、ビット単位のＯＲ演算を実行しその次にビット単位のＡＮＤ演算を実行して最終ビットベクトルを生成するように、結合ユニット１１６をプログラミングするであろう。
【００５１】
フィルタリングされたデータの射影
ステップ２１４で、射影ユニット１１８は、この最終結果を用いて、射影された列から行を選択し出力する。最終ビットベクトルを用いる場合、射影ユニット１１８は、最終ビットベクトルをビット毎に処理することにより、クエリの宣言すべてを満たす行（すなわち、最終ビットベクトルの中の対応するビットが第１のビット値に設定されている行）を特定する。ステップ２１６で、射影ユニット１１８は、入力キャッシュ１１０から、射影された列の列データを取出し、最終結果によって特定された行を出力キャッシュ１２０に出力する。この場合において行を出力するということは、宣言を満たす行を出力キャッシュ１２０に格納することを意味する。行は、出力されると、いつでもクエリの結果としてたとえばユーザまたはアプリケーションプログラムに返すことができる。
【００５２】
ステップ２１８で、システム制御１０８または射影ユニット１１８は、クエリによって示されているすべての列が射影されたか否か判断する。たとえば、クエリ１の場合、射影された列は、「販売員」列、「顧客」列、および「売上高」列を含む。射影された列が残っている場合、このプロセスはステップ２１４に戻り、残っている組の列に最終結果が適用される。以下でさらに説明されるように、最終結果の適用は、最終ビットベクトルをマスクとして使用すること、または、最終ビットベクトルをメモリアドレスに変換することを含み得る。このプロセスは、クエリによって示されたすべての列が射影されるまで繰返される。
【００５３】
最終結果に基づく行の射影のプロセスは、特定の実装に応じて異なり得る。ある実施形態において、フィルタリングプロセスによって入力キャッシュ１１０に既に格納されていなければ、射影された列からの値の行が入力キャッシュ１１０にロードされる。射影ユニット１１８は、最終結果に基づいて、これら値の行のうちのいずれを出力キャッシュ１２０に格納すべきか判断する。ある実施形態において、射影ユニット１１０は、最終結果ビットベクトルを、ステップ２１６においてどの行が射影ユニット１１８から出力キャッシュ１２０に出力されるかを制御するマスクとして使用する。たとえば、射影された列の各行は、入力キャッシュ１１０から射影ユニット１１８にストリーミングされてもよい。次に、射影ユニット１１８は、ビットベクトルをマスクとして適用して、すべてのクエリ宣言を満たす行のみを出力キャッシュ１２０にストリーミングしてもよい。これに代わるものとしては、以下でさらに詳細に説明されるように、アドレス生成ユニットを用いて、出力すべき行のみを射影ユニット１１８に与えてもよい。
【００５４】
ハイブリッド列状ブロック処理
ある実施形態において、このシステムは、データベースの少なくとも一部をＲＡＭ１０２にハイブリッド列状方式で格納する。ハイブリッド列状方式の格納の場合、データベースをブロックに分割し、各ブロックは、１つ以上の列に対して決まった数の行を有する。たとえば、第１のブロックは、１つ以上の列に対して最初の５０行を格納し、第２のブロックは次の５０行を格納し、第３のブロックは次の３０行を格納していてもよい。各ブロック内において、データは列優先方式で格納される。言い換えると、ある列の中の要素は、ブロック内において連続的に格納される。ハイブリッド列状方式でデータを格納することにより、システムは、扱いやすいブロックサイズで列を容易に処理することができる。
【００５５】
ある実施形態において、上記フィルタリングおよび射影動作は、ブロック毎に実行し得る。たとえば、ある列が複数のブロックに跨っている場合、フィルタリングおよび射影動作を、第１のブロック内にある、この列の第１の部分に適用することにより、第１の結果セットを生成すればよい。列全体が処理されるまで、このプロセスを後続のブロック各々に対して繰返せばよい。ある段階で生成された結果セットは、次の段階を待たずに返される。たとえば、あるブロックに対して生成された結果セットを、次のブロックの処理の前または処理中に返してもよい。
【００５６】
フィルタリング／射影動作のシステム実装の例
図３Ａ〜図３Ｅは、ある実施形態に従いフィルタリングおよび射影動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図である。特に、これらの図は、上記テーブル２に示されるクエリ１を処理するシステム１００を示す。
【００５７】
図３Ａは、フィルタリング動作の開始時点におけるシステム１００のブロック図である。図３Ａを参照して、「販売員（SALESMAN）」列、「顧客（CUSTOMER）」列、および「売上高（AMOUNT）」列は、ハイブリット列状方式でＲＡＭ１０２に存在しており、ブロック３０２とブロック３１０に分割されている。具体的には、Ｓ１  ３０４、Ｃ１  ３０６、およびＡ１  ３０８でそれぞれ示されている、「販売員」列と「顧客」列と「売上高」列の第１の部分は、ブロック３０２にある。Ｓ２  ３１２、Ｃ２  ３１４、およびＡ２  ３１６でそれぞれ示されている、「販売員」列と「顧客」列と「売上高」列の第２の部分は、ブロック３１０にある。
【００５８】
システム制御１０８は、クエリ１を受けると、宣言を如何にして評価するか判断し、適切な列を入力キャッシュ１１０にロードさせる。図３Ｂに示されるように、売上高＞２００という宣言を最初に評価する。このように、システム制御１０８はフィルタユニット１１２を宣言３３０を用いてプログラミングする。「売上高」列の第１の部分Ａ１  ３０８は、入力キャッシュ１１０にロードされ、フィルタユニット１１２に送られる。次に、フィルタユニット１１２は、宣言３３０を用いてＡ１  ３０８の列データを値毎に（各値は特定の行に対応する）評価することにより、ビットベクトルＡｐ１  ３４０を生成する。ビットベクトルＡｐ１  ３４０は、売上高＞２００という宣言を満たすＡ１  ３０８の行を示す。第１のビットベクトルＡｐ１  ３４０は、以下のテーブル１０にＡｐ１として示されている。ビットベクトルキャッシュ１１４はこのビットベクトルを次の処理のために格納する。
【００５９】
【表１０】
0006305406.tif 000011
【００６０】
売上高＞２００という宣言の評価後、次の２つの宣言として販売員＝Pedroおよび販売員＝Alexが同様のやり方で逐次処理される。たとえば、「販売員」列Ｓ１  ３０４を入力キャッシュ１１０にロードすればよい。システム制御１０８はフィルタユニット１１２をプログラミングして「＝」演算を第１のインスタンスでは「Pedro」値に適用し第２のインスタンスでは「Alex」値に適用する。フィルタユニット１１２は、各インスタンスにおいて「販売員」列を行毎に評価することにより、第２および第３のビットベクトルを生成する。図３Ｃは、すべての宣言が処理された後のシステムのブロック図である。ビットベクトルＳｐ２  ３４２は、販売員＝Pedroという宣言の評価に応じて生成されたビットベクトルを表わし、ビットベクトルＳｐ３  ３４４は、販売員＝Alexという宣言の評価に応じて生成されたビットベクトルを表わす。これらビットベクトルは以下のテーブル１１に示される。
【００６１】
【表１１】
0006305406.tif 000012
【００６２】
ある実施形態において、フィルタユニット１１２によって生成されるビットベクトルの長さは、１ブロック内の行と同数のビットに相当する。たとえば、上記テーブル１０および１１に示されるビットベクトルの長さは、ブロック１  ３０２に格納される各列の値の数に相当する。したがって、ビットベクトルＡｐ１  ３４０は、Ａ１  ３０８における行と同数のビットを有し、ビットベクトルＳｐ２  ３４２およびＳｐ３  ３４４は、Ｓ１  ３０４における行と同数のビットを有する。これらテーブルにおいて、宣言を満たす行にはビット値「１」が割当てられ、宣言を満たさない行にはビット値「０」が割当てられる。しかしながら、実装に応じてこれらビット値を逆にしてもよい。
【００６３】
各宣言に対する結果ビットベクトルの生成後、最終ビットベクトルを上記結合プロセスによって生成すればよい。クエリ１の場合、結合プロセスは、ＷＨＥＲＥ句における論理演算子による指示通りに実現すればよい。したがって、システム制御１０８は先ず、結合ユニット１１６を、ビットベクトルＳｐ２  ３４２およびＳｐ３  ３４４に対してビット単位のＯＲを実行するようにプログラミングする。次に、このＯＲ演算の結果を用いて、ビットベクトルＡｐ１  ３４０に対しビット単位のＡＮＤを実行する。図３Ｄが示すブロック図は、宣言の結果ビットベクトルが結合されて、フィルタリングされた行の最終組を取出すのに使用される最終ビットベクトルが生成された後のシステムである。
【００６４】
図３Ｄを参照して、ビットベクトルキャッシュ１１４は、ビットベクトルＳｐ２  ３４２およびＳｐ３  ３４４に対してビット単位でＯＲ演算を実行した結果得られたビットベクトルである、ビットベクトルＳｐ２｜Ｓｐ３  ３４４を格納する。次に、結合ユニット１１６は、ビットベクトルＳｐ２｜Ｓｐ３  ３４４およびビットベクトルＡｐ１  ３４０を用いてビット単位でＡＮＤ演算を実行することにより、最終ビットベクトルＡｐ１（Ｓｐ２｜Ｓｐ３）３４８を生成する。これらビットベクトルは以下のテーブル１２に示される。テーブル１２の最後の列に示される最終ビットベクトルは、クエリ１のすべての宣言を満たす、ブロック１  ３０２内の行を示す。
【００６５】
【表１２】
0006305406.tif 000013
【００６６】
最終ビットベクトルは射影ユニット１１８に送られ、射影ユニット１１８は、このビットベクトルを用いて適切な列から行を射影する。クエリ１におけるＳＥＬＥＣＴ文は、売上テーブルの「販売員」列、「顧客」列、および「売上高」列からデータを射影しなければならないことを示す。したがって、Ｓ１  ３０４を入力キャッシュ１１０から射影ユニット１１８にストリーミングすればよい。射影ユニット１１８は、最終ビットベクトルをビット毎に処理し、出力キャッシュ１２０に、最終ビットベクトル内の「１」に対応するＳ１  ３０４の行を送ればよい。射影ユニット１１８は、同じ最終ビットベクトルを用いて「顧客」列および「売上高」列に対しこのプロセスを繰返す。
【００６７】
図３Ｅは、フィルタリングおよび射影動作の終了時点におけるシステムのブロック図である。Ｓｒ１  ３５０はブロック３０２から射影された「販売員」列データを表わし、Ｃｒ１  ３５２はブロック３０２から射影された「顧客」列データを表わし、Ａｒ１  ３５４はブロック３０２から射影された「売上高」列データを表わす。このデータは、システムがブロック３１０の処理を開始するときに、結果として送ってもよい。
【００６８】
次に、ブロック３１０等の他のブロックに格納されたデータに対し、上述のフィルタリングおよび射影動作を繰返せばよい。説明のために、この売上表には以下のテーブル１３に示される行も含まれるものとする。
【００６９】
【表１３】
0006305406.tif 000014
【００７０】
ブロック３１０は、列優先フォーマットで行８〜１２のデータを格納する。たとえば、Ｓ２  ３１２は、値としてPedro、Alex、Alex、Michael、Pedroを連続する順序で格納し得る。同様に、Ｃ２  ３１４は「顧客」列の行８〜１２を格納し、Ａ２  ３１６は「売上高」列の行を格納する。
【００７１】
以下のテーブル１４は、ブロック３１０に格納されたデータに対するフィルタリング動作の実行後に生成されたビットベクトルを示す。
【００７２】
【表１４】
0006305406.tif 000015
【００７３】
テーブル１４の最後の列に示される最終ビットベクトルは、すべてのクエリ宣言を満たすブロック３１０内の行を特定する。射影ユニット１１８は、この最終ビットベクトルをビット毎に構文解析し、最終ビットベクトルにおける「１」に対応するＳ２  ３１２の行を出力キャッシュ１２０に送る。射影ユニット１１８は、同じ最終ビットベクトルを用いてこのプロセスをＣ２  ３１４およびＡ２  ３１６に対して繰返す。
【００７４】
アドレス生成に基づく選択的な行フィルタリング
いくつかの実施形態において、宣言評価中にフィルタユニット１１２に与えられる行を、以前の宣言評価で得られた結果に基づいて制限してもよい。たとえば、以前に評価された宣言を満たさない行は、次の宣言を評価するときには考慮する必要がない場合がある。フィルタユニット１１２に処理のために選択的に行を与えることにより、フィルタユニット１１２は各宣言について列全体を評価しなくてもよくなる。
【００７５】
図４は、ある実施形態に従いフィルタリングおよび射影動作を実行するためのアドレス生成器を有するシステムアーキテクチャの一例を示すブロック図である。システム４００は、アドレス生成器４０２を含む、システム１００の変形である。システム４００は、アドレス生成器４０２を用いて、フィルタリングされている列の行を選択的にフィルタユニット１１２に与えることができる。
【００７６】
ある実施形態において、アドレス生成器４０２は、以前のフィルタのビットベクトル結果を用いて、行のサブセットを次のフィルタのためにフィルタユニットに送る。フィルタユニット１１２に送る行をビットベクトルを用いて制限するやり方は、クエリで指定される論理演算子によって決まる。たとえば、クエリ１の場合、第１の宣言はこれに続く宣言とＡＮＤ演算される。このように、ある行が第１の宣言を満たさない場合、その行は次の２つの宣言に関して考慮される必要はない。
【００７７】
上記実装例において、アドレス生成器４０２は、ビットベクトルＡｐ１  ３４０を用いて、ビットベクトルＳｐ２  ３４２  およびＳｐ３  ３４４の生成時に、第１の宣言を満たす行のみをフィルタ１１２に与えることができる。具体的には、売上高＞２００という宣言に対応付けられたビットベクトルは１００１１１１なので、第２行と第３行を他の宣言について評価する必要はない。後に続く評価のうちスキップできる評価の数が多いほど、クエリ評価の効率は高くなる。たとえば、売上高＞２００の結果ビットベクトルが０００００００であれば、残りの宣言の評価全体をスキップすることができる。
【００７８】
次の２つの宣言はともにＯＲ演算されるので、第２の宣言を満たす行は、第３の宣言の評価時に考慮する必要はない。すなわち、第２の宣言に対応付けられたビットベクトル１１００００１は、第１行、第２行、および第７行を、第３の宣言の評価時にスキップできることを示している。
【００７９】
実際、第３の宣言の評価中、アドレス生成器４０２は、第１および第２の宣言の結果ベクトルを用いて、第３の宣言については第４行、第５行、および第６行のみを評価すればよいと判断することができる。具体的には、第２行と第３行はスキップできる。なぜなら、これらは第１の宣言を満たさないからである。また、第１、第２、および第７行は、第２の宣言を満たさないので、スキップすることができる。
【００８０】
評価の順序
宣言を評価する順序は実装に応じて異なり得る。ある実施形態において、宣言は逐次順序で評価してもよい。たとえば、宣言を、クエリにおける指定に従い、左から右または右から左に逐次評価してもよい。
【００８１】
別の実施形態において、宣言評価の順序は、宣言が多数の行をふるい落とす可能性（すなわち宣言の「選択度」）に基づくものであってもよい。選択度が高い宣言を最初に評価した場合、フィルタリングプロセスのより早い段階でより多くの数の行がふるい落とされる。システム４００ではその結果、それに続く宣言評価においてアドレス生成器４０２がフィルタユニット１１２に与える行のサブセットが小さくなる。このように、選択度が高い宣言を選択度が低い宣言よりも前に処理することによって、処理のオーバヘッドを減じることができる。
【００８２】
ある実施形態において、システム制御１０８は、宣言の選択度を、クエリで指定された演算子に基づいて予測する。たとえば、他の宣言とＡＮＤ演算される宣言は、他の宣言とＯＲ演算される宣言よりも選択度が高い可能性が大きい。別の例として、等価宣言演算子（「＝」）は、非等価宣言演算子（「＜＞」または「！＝」）よりも選択度が高い可能性が大きい。この予測に基づき、システム制御１０８は、フィルタユニット１１２を、最も選択度が高い宣言から最も選択度が低い宣言まで逐次順序でプログラミングする。
【００８３】
他の実施形態において、クエリで指定された１つ以上の宣言は並列処理される。たとえば、フィルタユニット１１２は、クエリで指定された２つ以上の宣言を用いてプログラミングされてもよい。フィルタユニット１１２は、これら宣言双方を同時に評価することができる。宣言評価プロセスを並列化するための技術については以下でさらに説明される。
【００８４】
アドレス生成器を用いるシステムにおけるフィルタリングされたデータの射影
別の実施形態において、アドレス生成器４０２は、すべてのクエリ宣言を満たす行毎に、最終ビットベクトルを一組のメモリアドレスに変換してもよい。アドレス生成器４０２は次に、このメモリアドレスを用いて、該当する行のみを入力キャッシュ１１０に要求し、これら行を出力のために射影ユニット１１８に与える。こうすれば、射影ユニット１１８を通して列全体をストリーミングする必要がないので、処理のオーバヘッドを減じることができる。
【００８５】
たとえば、ステップ２１４で、最終ビットベクトルをビットベクトルキャッシュ１１４からアドレス生成器４０２に与えればよい。そうすると、アドレス生成器４０２は、一組の宣言を満たすことを示す対応するビット値を有する各行について、メモリアドレスを求める。アドレス生成器４０２は、これらメモリアドレスを用いてメモリフェッチ要求を入力キャッシュ１１０に送る。これらの行が入力キャッシュ１１０に既にロードされている場合は、これらの行を入力キャッシュ１１０から直接射影ユニット１１８にストリーミングすればよい。射影ユニット１１８はこれらの行を出力キャッシュ１２０に出力する。これに代わるものとしては、上記行をアドレス生成器４０２に送ってもよい。
【００８６】
１列当たり複数の宣言
上記例において、フィルタユニット１１２は、列データがフィルタユニットを通して送られる度に１つの宣言を適用している。代替の実施形態において、フィルタユニット１１２は、各列に対して複数の宣言を処理するように構成されてもよい。たとえば、サンプルクエリ１は、宣言として、販売員＝Pedro or 販売員＝Alexを含む。これら宣言はいずれも同じ列に関連する。したがって、「販売員」列がフィルタユニット１１２を一回通過するときに上記宣言双方が評価されるように、システム制御１０８はフィルタユニットをこれらの宣言を用いてプログラミングしてもよい。
【００８７】
１ユニット当たり複数の列
上記例において、フィルタユニット１１２は、１つの列入力に対して動作している。代替の実施形態において、フィルタユニット１１２は、複数の列入力を含むものであってもよい。宣言を評価するときに複数の列入力が役立つ場合がある。たとえば、販売員＝顧客というＷＨＥＲＥ句は、「販売員」列と「顧客」列双方が同一宣言内にあることを意味する。フィルタユニット１１２に２つの列入力がある場合、この宣言を一回で評価することができる。２つの列が１つの宣言に含まれていない場合でも、複数の列入力があることで、複数の列に対する宣言を同時に処理することができる。
【００８８】
射影ユニット１１８も、実装に応じて複数の列入力を含み得る。たとえば、射影ユニット１１８に複数の列入力がある場合、最終ビットベクトルを複数の列に同時に適用することにより、それぞれの結果を並列に射影することができる。
【００８９】
グループ化および集約動作を処理するためのアーキテクチャの例
ある実施形態において、グループ化および集約動作を実行するように専用ハードウェアを構成してもよい。図５は、ある実施形態に従いグループ化および集約データベース動作を実行するように構成し得るシステムアーキテクチャの一例を示す。システム５００は、システム１００またはシステム４００の要素すべてを含み得る。射影ユニット１１８に加えてまたはその代わりに、システム５００は集約ユニット５０２も含み得る。
【００９０】
システム５００は、任意の適切なやり方で、システム１００または４００と組合わせるかそうでなければ一体化してもよい。重複するブロックは各々、同一のハードウェアユニットとしてまたは別々の独立したユニットとして実装すればよい。たとえば、フィルタユニット１１２は、システム１００またはシステム４００において宣言のフィルタリングを実行する同じハードウェアユニットであってもよい。この同じユニットを用いて、以下で説明される技術に従い、列データに基づいてグループを作ることもできる。これに代えて、別々のフィルタユニットおよび／または他のデータベースユニットを用いて、グループ化動作およびフィルタリング動作を処理してもよい。他の実施形態において、システム５００を、システム１００または４００に示されるフィルタリングおよび射影ロジックから独立しておよび／またはこのロジックとは別にシステム５００を実装してもよい。
【００９１】
宣言フィルタを用いたデータのグループ化および集約
図６は、ある実施形態に従いグループ化および集約動作を実行するためのプロセスの一例を示す。図６に示されるプロセスは、図５に示されるシステム５００のような任意の適切なシステム上で実装することができる。
【００９２】
図６を参照して、ステップ６０２で、１つ以上の列によってグループ化されたデータを集約することを求める要求を含むクエリを受ける。たとえば、このクエリは、テーブル５に列挙されたものを含むがこれらに限定されない、任意の適切な集約関数を含み得る。この集約関数を、集約結果データをグループ化するために１つ以上の列を指定するＧＲＯＵＰ  ＢＹ文とともに使用してもよい。しかしながら、任意の適切な構文を使用して集約関数およびグループ化する列を指定してもよい。
【００９３】
ステップ６０４で、グループ化される第１の列の１行をフィルタユニット１１２に送る。たとえば、サンプルクエリ３の場合、「販売員」列の第１行をフィルタユニット１１２に送ればよい。サンプルクエリ４の場合、以下でさらに説明される技術に従い、「販売員」および「顧客」列を結合してフィルタユニット１１２に送ればよい。これに代わるものとしては、以下でより詳しく説明されるように、フィルタユニット１１２に複数の列入力がある場合、「販売員」および「顧客」列双方の第１行を同時にフィルタユニット１１２に送ってもよい。
【００９４】
ステップ６０６で、フィルタユニット１１２は、この列の第１行に対応付けられている要素を特定する。ある実施形態において、この要素は、この列の第１行に格納されたデータのアイテムである。たとえば、テーブル３に示される販売テーブルの例を参照すると、「販売員」列の第１の要素は「Pedro」であり、「顧客」列の第１の要素は「Gainsley Corp.」である。
【００９５】
ステップ６０８で、フィルタユニット１１２は、ステップ６０６で特定された第１の要素との等価を宣言として用いて、第１の要素が属するグループに属さない行をふるい落とす。たとえば、「販売員」列の第１の要素が「Pedro」であるとすると、フィルタユニット１１２は、宣言として「販売員＝Pedro」を用いて、「販売員＝Pedro」グループに属さない行をすべてふるい落とす。システム制御１０８は、ステップ６０２でこのクエリを受けたことに応じて、フィルタユニット１１２をこのロジックを用いてプログラミングすればよい。
【００９６】
ステップ６１０で、この列の残りの行（すなわち第１行以外の行）をフィルタユニット１１２に送る。ある実施形態では、これら残りの行を、入力キャッシュ１１０からフィルタユニット１１２に、最初の送信で連続する順序でストリーミングする。これに続く送信では、アドレス生成器が、それまでにグループ化されていない行のみをフィルタユニット１１２に与えればよい。
【００９７】
ステップ６１２で、フィルタユニット１１２は、このフィルタを満たさない行をふるい落とすことにより、第１行が属する行グループ（たとえば販売員＝Pedroであるすべての行からなるグループ）を生成する。このステップは、この等価宣言を満たす各行を特定するビットベクトルまたはその他のデータ構造を生成することを含み得る。上記宣言フィルタリングと同様、ビットベクトルの各ビットは列内の特定の行に対応し得るものであり、第１のビット値は、その行が等価宣言を満たしておりそれ故にグループの一部であることを示し、第２のビット値は、その行が等価宣言を満たしておらずそれ故にグループの一部ではないことを示す。
【００９８】
ステップ６１４で、第１行および第１行と一致する行をグループ化して集約ユニット５０２に送る。実施形態の一例において、フィルタユニット１１２は、ステップ６１２で生成されたビットベクトルをアドレス生成器４０２に送り、アドレス生成器はこのビットベクトルを用いて現在のグループの一部である行のみをメモリに要求する。アドレス生成器４０２はこれらの行を受けると集約のために集約ユニット５０２に送る。
【００９９】
ステップ６１６で、集約ユニット５０２は、グループ化された行の値を、クエリによる指示通りに集約する。たとえば、クエリ３および４の場合、集約ユニット５０２は、「売上高」列に格納されている、グループ化された行の値を合計するであろう。
【０１００】
ステップ６１８で、システム５００は、まだグループ化されていない行が残っているか否か判断する。そのような行があれば、このプロセスはステップ６０４に戻り、このステップで、まだグループ化されていない行のみに対してグループ化および集約動作が繰返される。したがって、フィルタユニット１１２は、グループ化されていない第１の行の要素を等価宣言として用いて新たなグループを形成するように再プログラミングされる。
【０１０１】
この例では、テーブル３の行１および２が既に販売員＝Pedroグループにグループ化されているであろう。そのため、第３行は、まだグループ化されていない最初の行であろう。この第３行は、クエリのグループ化される列である「販売員」列において値「Alex」を有する。したがって、第２のグループは、販売員＝Alexというフィルタに基づいて決定される。第２のグループは行３、５、および６を含むであろう。
【０１０２】
ステップ６０４を３回目に繰返している間、行４は、最初の、残っているまだグループ化されていない行である。したがって、第３のグループは、販売員＝Michaelというフィルタに基づいて決定される。第３のグループは、行４のみを含むであろう。第３のグループが形成された後は、グループ化されていない行が残っていないので、図６に示されるプロセスは終了するであろう。
【０１０３】
各繰返しの間に、システム５００は、新たな宣言に基づいてグループを生成し集約する。すべての行がグループ化されると、このプロセスは終了する。複数のＲＡＭブロックに跨って関連する列が格納されている場合、このプロセスを、以下でより詳しく説明されるように、複数のＲＡＭブロック各々に対して繰返すことにより、最終結果を生成すればよい。
【０１０４】
以前に生成されたビットベクトルに基づく次のグループ化の決定
ある実施形態において、行のグループ化を特定するためにステップ６１２で生成されたビットベクトル（本明細書では「グループ−メンバシップビットベクトル」と呼ぶ）を用いて、次のグループ化のためにフィルタユニット１１２に行を選択的に与えてもよい。具体的には、グループ−メンバシップビットベクトルの各ビットは特定の行に対応する。グループ−メンバシップビットベクトルの中のビットが「１」のような第１のビット値に設定されている場合、これは、この特定の行についてグループが既に特定されていることを示す。既に生成されているグループ−メンバシップビットベクトルのうち、特定の行についてのビットを第１のビット値に設定しているビットベクトルがない場合、この特定の行はまだグループに対応付けられていない。したがって、この特定の行を、次の処理のためにフィルタユニット１１２に与えることによって、この特定の行が属するグループを求めることができる。
【０１０５】
結合ユニット１１６は、ステップ６１２で生成されたグループ−メンバシップビットベクトルのうちの１つ以上に対してビット単位の動作を実行することにより、まだグループ化されていない行を特定するビットマスクを生成してもよい。ある実施形態において、最初のビットベクトルの生成後、このビットベクトルに対してビット単位のＮＯＴ演算を実行してもよい。結果として得られたビットマスクにおいて、第１のビット値は、それまでにグループ化されていない行を特定する。このように、アドレス生成器４０２は、同じやり方で動作することにより、ビットマスクを、これらの行に対するメモリアドレスに変換することができる。次に、アドレス生成器４０２は、これらの行の取出しを要求してもよく、まだグループに割当てられていない行のみが、次のグループ化および集約動作のためにフィルタユニット１１２に与えられる。
【０１０６】
第２のグループ−メンバシップビットベクトルの生成後、ＮＯＴ演算単独では、それまでにまだグループ化されていない行の特定には機能しない。なぜなら、集合の中にはこの時点で複数のビットベクトルがあるからである。したがって、それまでにグループ化されていない行を特定するビットマスクを生成するために、結合ユニット１１６は、現在のグループについてのグループ−メンバシップビットベクトルと以前に生成されたビットマスクとの間でビット単位の排他的ＯＲ（ＸＯＲ）演算を実行すればよい。このプロセスは以下の実装例に示されている。
【０１０７】
ブロック毎のグループ化および集約
ある実施形態において、上述のグループ化および集約動作をブロック毎に実行してもよい。たとえば、テーブルデータが、複数のＲＡＭブロックにハイブリッド列状方式で格納される場合がある。図６のプロセスを第１のブロックに対して実装することにより、第１のブロック内のグループおよび集約値を特定する第１の結果セットを生成すればよい。このプロセスを、残りのＲＡＭブロック各々に対して同じやり方で繰返せばよい。このようにして、グループおよび集約結果を特定する結果セットが、残りの各ブロックに対して生成される。
【０１０８】
特定の実装によっては、複数のブロックに対する処理の完了前に、出力キャッシュ１２０がデータでいっぱいになることがある。たとえば、関連データが多数のブロックに跨っている場合、すべてのブロックについての結果セットを格納するのに十分な記憶領域が出力キャッシュ１２０にないことがある。また、グループの数が多い場合または列データ要素が大きい場合、出力キャッシュ１２０の記憶領域がより急速に消費されることがある。
【０１０９】
出力キャッシュ１２０における記憶空間を空けるためにまたは最終結果を生成するために、異なるブロックに対する複数の結果セットを、図６に記載のプロセスに従ってグループ化し集約することができる。たとえば、出力キャッシュがいっぱいになる、または、利用できる記憶空間の量がしきい値未満になると、出力キャッシュ１２０内のデータを入力キャッシュ１１０に送ればよい。その後、入力キャッシュデータに対し、グループ化および集約動作を、先に述べたのと同じやり方で実行する。したがって、異なる結果セットの結果記録がグループ化および集約される。そうすると、結果セットの統合によって、より多くの記憶領域を空けることができる。出力キャッシュ１２０内の空間をこのプロセスによって空けられない場合または出力キャッシュ１２０が性能が深刻な劣化に陥るほどの高占有率状態になった場合は、出力キャッシュの中身を大規模な集約のために汎用プロセッサ等の別のユニットに送ってもよい。
【０１１０】
グループ化／集約動作のシステム実装例
図７Ａ〜図７Ｅは、ある実施形態に従いグループ化および集約動作を実行するプロセスにおけるシステムの異なる状態を示す一連のブロック図である。特に、これら図面は、上記テーブル６に示されるサンプルクエリ３を処理するシステム５００を示す。
【０１１１】
図７Ａはクエリ３に対する第１のグループの処理後のシステムの図を示す。示されているように、「販売員」列と「売上高」列は複数のブロックに分割されている。「販売員」列の第１の部分であるＳ１  ７０４と「売上高」列の第１の部分であるＡ１  ７０６はブロック７０２に格納され、「販売員」列の第２の部分であるＳ２  ７１２と「売上高」列の第２の部分であるＡ２  ７１４はブロック７１０に格納される。ある実施形態において、データはこれらのブロックにハイブリッド列状方式で格納される。
【０１１２】
クエリ３を受けると、システム制御１０８は、「販売員」列の第１の部分Ｓ１  ７０４を入力キャッシュ１１０にロードさせる。「販売員」列を入力キャッシュ１１０からフィルタユニット１１２にストリーミングすることにより、「販売員」列に基づいて行をグループ化することができる。第１のグループを計算するために、システム制御１０８は、販売員の第１の要素との等価をフィルタリング宣言として使用するようにフィルタユニット１１２をプログラミングする。これは図７Ａの宣言７２０によって示される。この例において、「販売員」列の第１の要素は「Pedro」なので、第１のグループは販売員＝Pedroの行のグループである。
【０１１３】
フィルタユニット１１２は、宣言の評価で使用する列の第１の要素を求めるために追加のロジックを用いて、フィルタリングおよび射影動作のために先に述べたのと同じやり方で機能してもよい。宣言７２０を用いてプログラミングされると、「販売員」列の残りの行が、評価のために入力キャッシュ１１０からフィルタユニット１１２にストリーミングされる。テーブル３に示されるサンプル売上テーブルが与えられフィルタが販売員＝Pedroの場合、フィルタユニット１１２は、以下のテーブル１５に示されるグループ−メンバシップビットベクトルを生成するであろう。
【０１１４】
【表１５】
0006305406.tif 000016
【０１１５】
グループ−メンバシップビットベクトル１は、宣言７２０の宣言結果に対応する。このグループ−メンバシップビットベクトルの中の、値が「１」である各ビットは、「販売員」列の中で値が「Pedro」である行を特定する。このように、第１のグループに属するすべての行が同一のビット値によって特定される。逆に、ビット値が「０」である各ビットは、値が「Pedro」でない行を特定し、したがって第１のグループに属さない。
【０１１６】
フィルタユニット１１２がテーブル１５に示されるグループ−メンバシップビットベクトルを生成した後、このグループ−メンバシップビットベクトルは集約ユニット５０２に送ればよい。集約ユニット５０２は、このビットベクトルによって示される、宣言７２０を満たす「売上高」列の行に対して動作する。ある実施形態において、アドレス生成器４０２は、このグループ−メンバシップビットベクトルを、対応するビット値が「１」に等しいＡ１  ７０６内の行のメモリアドレスに変換する。これらのメモリアドレスを用いて、このグループに属する行のＡ１  ７０６における値を、ＲＡＭ１０２から入力キャッシュ１１０に取出す。次に、これらの値を集約のために集約ユニット５０２に与える。
【０１１７】
集約ユニット５０２は、グループ−メンバシップビットベクトルに加えて、実行しようとしている集約動作の種類の指示も受ける。たとえば、システム制御１０８は、クエリにおいて指定された集約関数を実行するように集約ユニット５０２をプログラミングすればよい。集約関数の例はテーブル５に示される集約関数を含むがこれらに限定されない。クエリ３の場合、集約ユニット５０２は、グループ−メンバシップビットベクトル１によって示される「売上高」列の行に格納されているデータを合計する。集約ユニット５０２は、結果セットの２つの出力として、グループの名称とこのグループに対する集約動作の結果とを生成すればよい。クエリ３を処理したときの第１のグループの出力は、以下のテーブル１６に示される。集約ユニット５０２はこの出力（集約結果７５０）を出力キャッシュ１２０に格納する。
【０１１８】
【表１６】
0006305406.tif 000017
【０１１９】
集約動作の中には、３つ以上の出力を必要とするものがある。たとえば、ＡＶＧ関数は、このグループの次のグループの平均値を計算するために、グループ、移動平均、および全要素をセーブしてもよい。
【０１２０】
図７Ｂは、第２のグループの処理後のシステムの図である。集約ユニット５０２が第１のグループ−メンバシップビットベクトルに対して動作して第１のグループについての集約結果を生成するのと同時に、フィルタユニット１１２が第２のグループについての次のグループ−メンバシップビットベクトルの生成を開始してもよい。今回、フィルタユニット１１２は、フィルタユニットを一度目に通されたときに「０」になった行だけを与える。実施形態の一例において、結合ユニット１１６は、ビットベクトル１に対してビット単位でＮＯＴ演算７４０を実行することにより、ビットベクトルマスクとして〜ビットベクトル１  ７３０を生成しこのビットベクトルマスクをビットベクトルキャッシュ１１４に格納する。ビットベクトルマスクとしての〜ビットベクトル１  ７３０は、まだグループ化されていないすべての行を特定する。
【０１２１】
ビットベクトルマスクは、生成されるとアドレス生成器４０２に送ればよい。アドレス生成器４０２は、〜ビットベクトル１  ７３０を、まだグループ化されていない行のメモリアドレスに変換し、これらの行のみがフィルタユニット１１２に与えられるようにする。次に、フィルタユニット１１２は、アドレス生成器４０２から与えられたまだグループ化されていない行から第１の要素を取出してこの第１の要素に対する等価を新たな宣言７２２として用いればよい。この例において、値「Alex」に対する等価を新たな宣言７２２として用いる。フィルタユニット１１２は、宣言７２２を用いて、まだグループ化されていない残りの行を評価して、第２のグループについてのグループ−メンバシップビットベクトルとしてビットベクトル２  ７３２を生成し、このグループ−メンバシップビットベクトルをビットベクトルキャッシュ１１４に格納する。ビット値が「１」であるビットベクトル２  ７３２内の各ビットは、第２のグループに属する行に対応する。集約ユニット５０２は、ビットベクトル２を用いて集約結果７５２を生成し、これは、第２のグループの行の「売上高」列を合計したものである。結果７５２は出力キャッシュ１２０に格納される。
【０１２２】
図７Ｃは、第３のグループの処理後のシステムの図である。第３のグループの処理は、フィルタユニット１１２に送るべき行を示すために異なるビットベクトルマスクを使用することを除いて、第２のグループの処理と同様のやり方で進められる。フィルタユニット１１２に与えるべき行を求めるために、結合ユニット１１６は、ビットベクトル２と前のビットベクトルマスク〜ビットベクトル１に対し、排他的ＯＲ（ＸＯＲ７４２）演算をビット単位で実行することにより、新たなビットベクトルマスクＢＶ７３６を生成すればよい。ビット値が「１」であるＢＶマスク７３６の各ビットは、まだグループ化されていない行に対応する。アドレス生成器４０２は、ＢＶマスク７３６を用いて、フィルタユニット１１２に、まだグループ化されていない行を与える。フィルタユニット１１２は、新たな宣言７２４として「Michael」という値に対する等価を用いて、ビットベクトル３  ７３４を生成する。集約ユニット５０２は、ビットベクトル３  ７３４を用いて集約結果７５４を生成し、これは、第３のグループの行の「売上高」列を合計したものである。結果７５４は出力キャッシュ１２０に格納される。以下のテーブル１７は、これらステップで生成されたグループ−メンバシップビットベクトルを示す。ブロックに追加のグループがある場合、これらグループの処理は第３のグループの処理に類似するであろう。
【０１２３】
【表１７】
0006305406.tif 000018
【０１２４】
第１のブロック内のデータの集約の終了時において出力キャッシュ１２０に格納されているテーブルは、以下のテーブル１８に示されるテーブルによって表わすことができる。
【０１２５】
【表１８】
0006305406.tif 000019
【０１２６】
図７Ｄは、ＲＡＭ内の２ブロックの処理後のシステムの図である。特に、ブロック７０２に適用したのと同じプロセスをブロック７１０に適用することにより、第２のブロックに格納されたデータをグループ化し集約することができる。ブロック７１０は、「販売員」列の第２の部分であるＳ２  ７１２と、「売上高」列の第２の部分であるＡ２  ７１４を格納している。簡潔にするために、ブロック７１０におけるPedro、Alex、およびMichaelの売上の合計がそれぞれ１０００、２０００、および３０００であるとする。したがって、グループ化および集約動作によって生成される結果セット７５６は、第１のブロックの処理時に生成された結果セットとともに出力キャッシュ１２０に格納される。よって、出力キャッシュ１２０は結合された結果セット７５８を格納している。以下のテーブル１９は、２ブロックの処理後の出力を表わす。
【０１２７】
【表１９】
0006305406.tif 000020
【０１２８】
図７Ｅは、出力キャッシュ内の結果の処理後のシステムの図である。出力キャッシュ１２０内の利用できる記憶領域がしきい値未満であるかまたはブロック各々に対する最終集約結果を計算する準備ができている場合、結果セット７５８を、さらに処理し統合するために入力キャッシュ１１０に送ってもよい。次に、この入力キャッシュデータに対してグループ化および集約動作が先に述べたのと同じやり方で実行される。この集約処理後、結果キャッシュとなったデータは以下のテーブル２０に示される。このデータは結果７６０として出力キャッシュ１２０に格納される。
【０１２９】
【表２０】
0006305406.tif 000021
【０１３０】
このように各ブロックに対して生成された別々の結果セットがグループ化および集約されて、両ブロックに対し１つの結果セットが生成される。
【０１３１】
他のＲＡＭブロックが残っている場合、すべてのブロックが集約されるまでこのプロセスが続けられる。結果キャッシュが、完全に満杯になった場合または性能が深刻な劣化に陥るほどの高占有率状態に達した場合は、この結果キャッシュの中身を大規模な集約のために汎用プロセッサ等の別のユニットに送ってもよい。
【０１３２】
キャッシュサイジング
入力キャッシュ１１０、ビットベクトルキャッシュ１１４、および出力キャッシュ１２０のサイズは、特定の実装に応じて異なり得る。小型のキャッシュのいくつかの利点には、より高速の動作およびより小さい面積占有が含まれる。しかしながら、より大きなキャッシュサイジングは、フィルタリングおよび射影動作中のＲＡＭアクセスの回数を減じることができる。したがって、さまざまなキャッシュの最適キャッシュサイズは、実装に応じて異なり得る。
【０１３３】
ある実施形態において、入力キャッシュ１１０、ビットベクトルキャッシュ１１４、および／または出力キャッシュ１２０のサイズを、ブロック１０４Ａ〜１０４Ｎ等のＲＡＭの１つ以上のブロックのサイズに近似するように選択する。ブロックサイズに近似するキャッシュサイズによって、このシステムは、ＲＡＭアクセスを制限しつつフィルタリングおよび射影動作を１ブロック毎にまたは複数ブロックに基づいて効率的に実行することができる。
【０１３４】
別の実施形態では、グループ化される列および集約データを格納する列に対して十分な記憶領域を入力キャッシュが有するようにキャッシュのサイズを定める。グループ濃度が１ブロック内に１つよりも多い場合は、これら列双方を複数回処理して、これら列双方を格納するのに十分大きなキャッシュにすることにより、これらをＲＡＭから繰返し読出す時間とパワーを節約することができる。
【０１３５】
別の実施形態では、出力キャッシュのサイズを、データセット全体の予測される濃度およびブロック内の濃度に応じて定めてもよい。１ブロック内のグループ数の濃度が高いほど、出力キャッシュが満杯になるのが速くなり、上記グループ化および集約動作中に結果データが集約される頻度が高くなる。同様に、グループデータの全体的な濃度が高ければ、出力キャッシュは、追加の集約が何度実行されるかにかかわらず、すべてのグループの結果を保持することができない可能性がある。出力キャッシュが、その内容に対して集約が実行された後でさえ満杯であれば、より高レベルの処理ノードを用いて集約を完了すればよいが、そうすれば性能が劣化する可能性がある。したがって、少なくとも最終結果セットを保持するのに十分な大きさの出力キャッシュは性能を改善し得る。
【０１３６】
キャッシュのサイズは、ＲＡＭ１０２に対するメモリインターフェイスの、および、フィルタユニット１１２、結合ユニット１１６、および射影ユニット１１８等のデータベースユニットの相対速度に基づいて、選択することもできる。データベースユニットと比較してメモリが高速であれば、より小さなキャッシュが好ましいであろう。なぜなら、頻度の高いロードに関連するコストが小さくなり得るからである。逆に、データベースユニットの処理速度と比較してメモリが低速であれば、より大きなキャッシュサイズはより効率的であろう。
【０１３７】
別の実施形態では、入力キャッシュ１１０、ビットベクトルキャッシュ１１４、および／または出力キャッシュ１２０のサイズを、データベースの作業負荷の性質に基づいて選択する。場合によっては、多数の宣言を同じ列に適用するときのように、１ブロック内の列データがデータベースユニットによって複数回処理されることがある。このような事例が特定の実装では一般的であるのであれば、より大きなキャッシュサイズにすると、より長期間キャッシュにデータを置くことができるので、性能が改善し得る。
【０１３８】
複数列によるグループ化
上記グループ化および集約の例では、テーブル６のクエリ３の処理について説明しているが、同じシステムによって、１つの列ではなく複数列に基づいてデータをグループ化するクエリ４を処理することができる。ある実施形態において、ＧＲＯＵＰ  ＢＹに関わる列すべてを結合してもよい。たとえば、クエリ４の場合、「販売員」列と「顧客」列を連結等によって結合してもよい。次に、結合された列をステップ６０２でフィルタユニット１１２に送ればよい。その後、これら２つの列は、出力キャッシュへの書込前等のある時点において分離されるであろう。システム５００は、これらの列をフィルタユニット１１２に送られる前に結合するための追加のデータベースユニットと、出力キャッシュ１２０の前でこれらの列を分離するための追加のデータベースユニットとを含み得る。
【０１３９】
別の実施形態において、上記のような、複数の列に対して動作することができるフィルタユニットを用いて、複数列によるグループ化を処理する。たとえば、複数の列が入力されるフィルタユニットは、一回で、販売員＝「販売員」列の第１の要素ＡＮＤ顧客＝「顧客」列の第１の要素のような宣言を実現し評価することができるであろう。クエリ３の場合、２列入力を扱うことができるフィルタユニットで足りるであろう。ＧＲＯＵＰ  ＢＹが３列以上に基づいてデータをグループ化する場合、フィルタユニットをより多くの列を受入れるように構成するか、または、システムが列の組合せに対し反復動作を行なうようにしてもよい。
【０１４０】
一回当たり複数のグループ
ある実施形態において、複数のグループが一回で求められるよう複数のストリームを処理するようにフィルタユニット１１２を構成してもよい。たとえば、フィルタユニット１１２が「顧客」列を処理するときに、１つのストリームが販売員＝販売員の第１の要素という宣言を適用する一方で、別のストリームが販売員！＝販売員の第１の要素という第１のケースを待ちこの販売員の値を等価の宣言として用いるようにしてもよい。この手法は、前のセクションで説明した複数列によるグループ化を実行するための技術と同様であるが、同じ列がすべてのストリームに送られ宣言は以前の宣言の結果に基づいている。
【０１４１】
このプロセスに従い、フィルタユニット１１２は、処理する各グループに対してグループ−メンバシップビットベクトルを生成する。フィルタユニットが、一回につきＮ個のグループを作ることができる場合（Ｎは正の整数値を表わす）、ビットベクトルキャッシュ１１４を、Ｎ＋２個のグループ−メンバシップビットベクトル、すなわち、フィルタユニット１１２の出力であるＮ個のビットベクトルと、Ｎ個のビットベクトルをともにＯＲ演算する１つのビットベクトルと、上記実装例で説明したＯＲ演算されたビットベクトルに対して機能するビットベクトルマスクとを、格納するように構成してもよい。
【０１４２】
代替の実施形態において、ビットベクトルキャッシュ１１４を、実装に応じてＮ個またはＮ＋１個のビットベクトルを格納するように構成してもよい。たとえば、Ｎ個のビットベクトルのうちのいくつかを、ＯＲ結合またはビットベクトルマスクによって上書きしてもよい。
【０１４３】
データを集約するとき、集約ユニット５０２はＮ個のビットベクトルに対して逐次的に動作し得る。これに代わるものとして、集約ユニット５０２が複数のストリームを処理するようにも構成されている場合、集約ユニット５０２はこれらビットベクトルに対して同時に動作してもよい。
【０１４４】
他の並列処理
上記技術は、示されているステップの逐次処理を示している。しかしながら、これらステップのうちのいくつかを、実装に応じて並列に実行してもよい。たとえば、結合ユニット１１６は、フィルタユニット１１２が宣言評価を完了するのを待つのではなく、フィルタユニット１１２のビットが利用できるようになるとビットベクトルを処理してもよい。別の例として、射影ユニット１１８が出力キャッシュ１２０のための列を処理する間に、フィルタユニット１１２が、フィルタリングする次の列の処理を開始してもよい。キャッシュのロードおよびアクセス等の他のステップを、他のフィルタリングおよび射影ステップと並列に実行することもできる。さらに別の例では、集約ユニット５０２が出力キャッシュ１２０のための列を処理する間に、フィルタユニット１１２が次のグループの処理を開始してもよい。キャッシュのロードおよびアクセス等の他の動作を並列に実行してもよい。
【０１４５】
ハードウェアの概要
１つの実施形態によれば、本明細書に記載の技術は、１つ以上の専用計算装置によって実装される。専用計算装置は、ハードウェアによって技術を実装し得る、または、技術を実装するように永続的にプログラミングされた１つ以上の特定用途向け集積回路（ＡＳＩＣ）もしくはフィールドプログラマブルゲートアレイ（ＦＰＧＡ）などのデジタル電子装置を含み得る、または、ファームウェア、メモリ、他の記憶装置、もしくは組合せにおけるプログラムコマンドに従って技術を実装するようにプログラムされた１つ以上の汎用ハードウェアプロセッサを含み得る。このような専用計算装置は、技術を達成するために、カスタムプログラミングに、カスタムハードワイヤードロジック、ＡＳＩＣ、またはＦＰＧＡを組合わせてもよい。専用計算装置は、デスクトップコンピュータシステム、ポータブルコンピュータシステム、携帯用デバイス、ネットワーキングデバイス、または、技術を実装するためにハードワイヤードロジックおよび／もしくはプログラムロジックを組込んだ任意の他の装置であってもよい。
【０１４６】
たとえば、図８は、本発明の実施形態が実装され得るコンピュータシステム８００を示すブロック図である。コンピュータシステム８００は、バス８０２または情報を通信するための他の通信機構と、情報を処理するためにバス８０２に結合されたハードウェアプロセッサ８０４とを含む。ハードウェアプロセッサ８０４は、たとえば、汎用マイクロプロセッサであってもよい。
【０１４７】
コンピュータシステム８００は、情報およびプロセッサ８０４によって実行されるコマンドを格納するためにバス８０２に結合された、ランダムアクセスメモリ（ＲＡＭ）または他の動的記憶装置などのメインメモリ８０６も含む。たとえば、ＲＡＭ１０２はメインメモリ８０６の中において実装されてもよい。メインメモリ８０６は、プロセッサ８０４によって実行されるコマンドの実行中に一時変数または他の中間情報を格納するためにも使用され得る。このようなコマンドは、プロセッサ８０４にアクセス可能な非一時的な記録媒体に格納されると、コマンドにおいて指定された動作を行なうようにカスタマイズされた専用マシンにコンピュータシステム８００を変える。
【０１４８】
コンピュータシステム８００は、プロセッサ８０４のための静的情報およびコマンドを格納するためにバス８０２に結合された読出し専用メモリ（ＲＯＭ）８０８または他の静的記憶装置をさらに含む。磁気ディスクまたは光ディスクなどの記憶装置８１０が設けられ、情報およびコマンドを格納するためにバス８０２に結合される。
【０１４９】
コンピュータシステム８００は、コンピュータのユーザに対して情報を表示するための陰極線管（ＣＲＴ）などのディスプレイ８１２にバス８０２を介して結合され得る。英数字および他のキーを含む入力装置８１４は、プロセッサ８０４に対して情報およびコマンド選択を伝えるためにバス８０２に結合される。別のタイプのユーザ入力装置は、方向情報およびコマンド選択をプロセッサ８０４に伝えるための、およびディスプレイ８１２上でのカーソル移動を制御するための、マウス、トラックボール、またはカーソル方向キーなどのカーソル制御８１６である。この入力装置は、通常、第１の軸（たとえばｘ）および第２の軸（たとえばｙ）という２つの軸において２つの自由度を有し、これによって面における位置をこの装置が指定できる。
【０１５０】
コンピュータシステム８００は、フィルタリング、射影、グループ化、および／または集約動作を実行するためのクエリ処理ロジック８３２も含み得る。クエリ処理ロジック８３２は、システム１００、システム４００、またはシステム５００に示される１つ以上の要素を用いて実装し得る。
【０１５１】
コンピュータシステム８００は、本明細書に記載される技術を、コンピュータシステムと組合わされてコンピュータシステム８００を専用マシンとするかまたは専用マシンとなるようにプログラミングする、カスタマイズされたハードワイヤードロジック、１つ以上のＡＳＩＣもしくはＦＰＧＡ、ファームウェアおよび／またはプログラムロジックを用いて実装してもよい。ある実施形態によると、ここでの技術は、メインメモリ８０６に含まれる１つ以上のコマンドの１つ以上のシーケンスをプロセッサ８０４が実行することに応答して、コンピュータシステム８００によって行なわれる。このようなコマンドは、記憶装置８１０などの他の記録媒体からメインメモリ８０６に読込まれ得る。メインメモリ８０６に含まれるコマンドのシーケンスを実行することにより、本明細書に記載の処理ステップがプロセッサ８０４によって実行される。代替の実施形態において、ハードワイヤード回路を、ソフトウェアコマンドの代わりにまたはソフトウェアコマンドと組合わせて使用してもよい。
【０１５２】
本明細書において使用される用語「記録媒体」は、特定の方法でマシンを動作させるデータおよび／またはコマンドを格納する任意の非一時的な媒体をいう。このような記録媒体は、不揮発性の媒体および／または揮発性の媒体を含み得る。不揮発性の媒体は、たとえば、記憶装置８１０などの光ディスクまたは磁気ディスクを含む。揮発性の媒体は、メインメモリ８０６などの動的メモリを含む。記録媒体の一般的な形式は、たとえば、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープもしくは任意の他の磁気データ記録媒体、ＣＤ−ＲＯＭ、任意の他の光データ記録媒体、穴のパターンを伴う任意の物理媒体、ＲＡＭ、ＰＲＯＭ、およびＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、ＮＶＲＡＭ、任意の他のメモリチップもしくはカートリッジを含む。
【０１５３】
記録媒体は、伝送媒体とは異なるが、伝送媒体と併せて使用され得る。伝送媒体は、記録媒体間の情報の転送に関わる。たとえば、伝送媒体は、バス８０２を包含するワイヤを含む、同軸ケーブル、銅線、および光ファイバを含む。伝送媒体は、電波および赤外線データ通信時に生成されるような音波または光波の形式を取り得る。
【０１５４】
さまざまな形式の媒体は、実行のためにプロセッサ８０４に１つ以上のコマンドの１つ以上のシーケンスを搬送することに関わり得る。たとえば、コマンドは、リモートコンピュータの磁気ディスクまたはソリッドステートドライブ上に最初は担持され得る。リモートコンピュータは、そのダイナミックメモリにコマンドをロードし、モデムを用いて電話回線を介してコマンドを送ることができる。コンピュータシステム８００内のモデムは、電話回線上のデータを受け、赤外線送信器を使用してデータを赤外線信号に変換することができる。赤外線検知器は、赤外線信号で運ばれたデータを受けることができ、適切な回路によってこのデータをバス８０２上に置くことができる。バス８０２はデータをメインメモリ８０６に送り、このメインメモリからプロセッサ８０４はコマンドを取出して実行する。メインメモリ８０６が受けたコマンドは、プロセッサ８０４による実行の前または後に記憶装置８１０上に任意に格納され得る。
【０１５５】
コンピュータシステム８００は、バス８０２に結合された通信インターフェイス８１８も含む。通信インターフェイス８１８は、ローカルネットワーク８２２に接続されたネットワークリンク８２０に結合する双方向データ通信を提供する。たとえば、通信インターフェイス８１８は、統合サービスデジタル網（ＩＳＤＮ）カード、ケーブルモデム、衛星モデム、またはモデムであり対応するタイプの電話回線へのデータ通信接続を提供してもよい。別の例として、通信インターフェイス８１８は、ローカルエリアネットワーク（ＬＡＮ）カードであり対応のＬＡＮへのデータ通信接続を提供してもよい。無線リンクも実装され得る。このような実装例において、通信インターフェイス８１８は、さまざまなタイプの情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送信および受信する。
【０１５６】
ネットワークリンク８２０は通常、１つ以上のネットワークを介して他のデータ装置へのデータ通信を提供する。たとえば、ネットワークリンク８２０は、ローカルネットワーク８２２を介し、ホストコンピュータ８２４へ、または、インターネットサービスプロバイダ（ＩＳＰ）８２６によって運営されるデータ機器へ、接続を提供し得る。そうすると、ＩＳＰ８２６は、現在一般的に「インターネット」８２８と呼ばれている全世界パケットデータ通信網を介してデータ通信サービスを提供する。ローカルネットワーク８２２およびインターネット８２８はいずれも、デジタルデータストリームを搬送する電気信号、電磁信号、または光信号を使用する。コンピュータシステム８００へおよびコンピュータシステム８００からデジタルデータを搬送する、さまざまなネットワークを介する信号、および、ネットワークリンク８２０上の、通信インターフェイス８１８を介する信号は、伝送媒体の形態の例である。
【０１５７】
コンピュータシステム８００は、ネットワーク、ネットワークリンク８２０、および通信インターフェイス８１８を介して、メッセージの送信、およびプログラムコードを含むデータの受信を行ない得る。インターネットの例において、サーバ８３０は、インターネット８２８、ＩＳＰ８２６、ローカルネットワーク８２２、および通信インターフェイス８１８を介してアプリケーションプログラムのための要求されたコードを送信し得る。
【０１５８】
受信されたコードは、受信され次第プロセッサ８０４によって実行され得る、および／または記憶装置８１０に格納され得る、または、後で実行するために他の不揮発性記憶装置に格納され得る。
【０１５９】
拡張および代替案
上記明細書では、実装毎に異なり得る多数の具体的な詳細を参照しながら本発明の実施形態を説明している。このため、明細書および図面は、限定的ではなく例示的な意味で考慮されねばならない。発明の範囲の唯一かつ排他的な指標および出願人が意図する発明の範囲は、本願に由来する一組の請求項の、このような請求項の元になる特定の形式の、後の任意の修正が含まれる、文言上のかつ均等物の範囲である。
【図１】
0006305406.tif 000022
【図２】
0006305406.tif 000023
【図３Ａ】
0006305406.tif 000024
【図３Ｂ】
0006305406.tif 000025
【図３Ｃ】
0006305406.tif 000026
【図３Ｄ】
0006305406.tif 000027
【図３Ｅ】
0006305406.tif 000028
【図４】
0006305406.tif 000029
【図５】
0006305406.tif 000030
【図６】
0006305406.tif 000031
【図７Ａ】
0006305406.tif 000032
【図７Ｂ】
0006305406.tif 000033
【図７Ｃ】
0006305406.tif 000034
【図７Ｄ】
0006305406.tif 000035
【図７Ｅ】
0006305406.tif 000036
【図８】
0006305406.tif 000037