JP2015528603A - 集約/グループ化動作:ハッシュテーブル法のハードウェア実装 - Google Patents

集約/グループ化動作:ハッシュテーブル法のハードウェア実装 Download PDF

Info

Publication number
JP2015528603A
JP2015528603A JP2015528526A JP2015528526A JP2015528603A JP 2015528603 A JP2015528603 A JP 2015528603A JP 2015528526 A JP2015528526 A JP 2015528526A JP 2015528526 A JP2015528526 A JP 2015528526A JP 2015528603 A JP2015528603 A JP 2015528603A
Authority
JP
Japan
Prior art keywords
group
value
data
aggregate
row
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.)
Granted
Application number
JP2015528526A
Other languages
English (en)
Other versions
JP2015528603A5 (ja
JP6356675B2 (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 JP2015528603A publication Critical patent/JP2015528603A/ja
Publication of JP2015528603A5 publication Critical patent/JP2015528603A5/ja
Application granted granted Critical
Publication of JP6356675B2 publication Critical patent/JP6356675B2/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/242Query formulation
    • G06F16/2433Query languages
    • G06F16/244Grouping and aggregation

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

グループ化および集約動作を実行するための技術が説明される。ある実施形態において、第1の列によってグループ化されたデータを集約することを求める要求を受ける。この要求を受けたことに応じて、第1の列におけるある行についてのグループ値をアドレスにマップする。このアドレスによって特定される第1の場所に、第1のグループについてのポインタを格納する。このポインタは、第1のグループの一組の集約データの第2の場所を特定する。上記一組の集約データに含まれる集約値を、第2の列における上記行の値に基づいて更新する。

Description

発明の分野
本開示は、概してデータベース動作を実行するための技術に関し、より具体的にはグループ化および集約動作を実行するための技術に関する。
背景
このセクションで説明される手法は、遂行可能な手法であるが、必ずしも過去に考案または遂行された手法ではない。したがって、特に明示されない限り、このセクションで説明される手法のうちのいずれも、このセクションに含まれているというだけで先行技術とみなされるべきではない。
データベースは、一組のハードディスク等の1つ以上の記憶装置に格納されたデータとメタデータとを含む。データベース内のデータは、実装に応じてさまざまなデータモデルに従い論理的に構成し得る。たとえば、リレーショナルデータベースシステムは通常、データを一組のテーブルに格納し、各テーブルは1組の行と列で構成されている。ほとんどの場合、各行は特異なオブジェクトを表わし、各列は特異な属性を表わす。しかしながら、他のデータモデルを用いてデータを構成してもよい。
データベース内のデータにアクセスしこのデータを操作するために、データベース管理システム(DBMS)は一般的に、さまざまな、クエリと呼ばれることが多いデータベースコマンドを受けて処理するように構成される。多くの実装において、DBMSは、構造化照会言語(SQL)等のデータ操作言語(DML)に準拠したクエリをサポートする。DBMSは、クエリを受けると、このクエリによって指定された1つ以上のデータベース動作を実行し、クエリ結果を出力し得る。データベース動作の例は、以下で説明される集約(aggregation)およびグループ化(grouping)動作を含む。
集約およびグループ化動作
集約およびグループ化動作は、特定の列のデータに関する簡易統計を提供するデータベース動作である。SQLにおいて、グループ化動作は、GROUP BY構文を用いて、1つ以上の列により、集約関数の結果をグループ化する。以下のテーブル1は、データベースクエリにおいて使用し得る集約関数の例を示す。
Figure 2015528603
集約およびグループ化クエリの例は以下のテーブル2に示される。
Figure 2015528603
上記クエリは各々、DBMSによって実行されるときに、売上テーブルの「売上高」列内の値のデータを集約する。たとえば、以下のテーブル3は売上テーブルの一例を示す。
Figure 2015528603
クエリ1は、企業のドルでの売上総額を要求する。クエリ1が実行されるとき、DBMSは集約を実行するがグループ化は行なわない。DBMSは、売上テーブルにおけるすべての売上高を無条件で合計して最終結果を返す。テーブル3の売上テーブルの例の場合にクエリ1を実行したときの予想される出力を以下のテーブル4に示す。
Figure 2015528603
クエリ2は、販売した販売員毎にグループ化されたドルでの売上総額を要求する。クエリ2が実行されるとき、DBMSはグループ化および集約双方を実行する。具体的には、DBMSは、売上テーブルにおける各販売員についての集約結果を1つ生成する。この結果は、特定の販売員による総売上である。テーブル3の売上テーブルの例の場合にクエリ2を実行したときの予想される出力を以下のテーブル5に示す。
Figure 2015528603
クエリ3は、売上に対応付けられた販売員および顧客毎にグループ化されたドルでの売上総額を要求する。クエリ3が実行されるとき、DBMSは、複数列に基づくグループ化および集約を実行する。この場合、販売員−顧客ペア各々について1つの集約結果があるであろう。この集約結果は、特定の販売員−顧客ペアについての総売上である。テーブル3の売上テーブルの例の場合にクエリ3を実行したときの予想される出力を以下のテーブル6に示す。
Figure 2015528603
本開示は、限定ではなく例示を目的として添付の図面に示され、これらの図面において同様の参照番号は同様の要素を示している。
ある実施形態に従いグループ化および集約動作を実行するためのシステムアーキテクチャの一例を示すブロック図である。 ある実施形態に従いグループ化および集約動作を実行するためのシステムアーキテクチャの一例を示すブロック図である。 ある実施形態に従うグループ列アクセスブロックのアーキテクチャの一例を示すブロック図である。 ある実施形態に従うハッシュテーブルアクセスブロックのアーキテクチャの一例を示すブロック図である。 ある実施形態に従う集約状態アクセスブロックのアーキテクチャの一例を示すブロック図である。 ある実施形態に従う値列アクセスブロックのアーキテクチャの一例を示すブロック図である。 ある実施形態に従いグループ化および集約動作を実行するためのプロセスの一例を示すフローチャートである。 ある実施形態に従うメモリ内の売上テーブルのレイアウトを示すブロック図である。 ある実施形態に従うアキュムレータデータ構造のブロック図である。 ある実施形態に従うグループ化および集約動作中のアキュムレータデータ構造の状態のブロック図である。 ある実施形態に従うグループ化および集約動作中のアキュムレータデータ構造の状態のブロック図である。 ある実施形態に従うグループ化および集約動作中のアキュムレータデータ構造の状態のブロック図である。 ある実施形態に従うグループ化および集約動作の実行後のメモリの状態を示すブロック図である。 ある実施形態に従うハッシュテーブル構造の一例を示すブロック図である。 実施形態が実装され得るコンピュータシステムのブロック図である。
詳細な説明
以下の記載では、本発明が十分に理解されるよう、数多くの具体的な詳細事項が説明のために述べられている。しかしながら、これらの具体的な詳細事項がなくとも本発明を実施し得ることは明らかであろう。他の場合では、本発明を不必要に曖昧にするのを避けるために、周知の構造および装置はブロック図の形式で示される。
全体の概要
グループ化および集約データベース動作を実行するための技術が説明される。ある実施形態において、専用ハードウェアが、グループ化および集約データベース動作を効率的かつ効果的に実行するように構成される。この専用ハードウェアは、グループ化動作を実行するとき、任意の数のグループをサポートし得る。
さらに、グループ化および集約を、テーブルデータのグローバルソートなしで実行し得る。グローバルソートを避けることによって、大きなリストをソートする間に生じるランダムなメモリアクセスの問題は緩和される。たとえば、リストをソートする間に、メモリの1つのブロック内に位置するグループに、あるアイテムが入る一方で、メモリの別のブロック内に位置するグループに、次のアイテムが属することがある。通常、この場合のソートされたテーブルを書込むためには、新たなメモリページを閉じて開くことを繰返す必要がある。本明細書に記載の技術に従い、グループ化および集約をメモリの小さなチャンクに対して実行してもよく、そうすることで高速で消費電力の少ないキャッシュにおいてランダムなアクセスを生じさせることができる。
ある実施形態において、システムは、第1の列によってグループ化して集約する動作を要求するクエリを受ける。グループ化動作は第1の列に対して実行されるので、第1の列内の個々の値を本明細書では「グループ値」と呼ぶ。
クエリを受けたことに応じて、システムは第1の列のグループ値を1つ以上のアドレスにマップする。たとえば、システムは、ハッシュ関数を各グループ値に適用することにより、特定のグループ値をマップするアドレスを決定してもよい。同一のグループ値は同一のアドレスにマップされ、異なるグループ値は衝突が生じていない限り異なるアドレスにマップされている。
ある実施形態において、グループ値がマップされた各アドレスは、テーブルまたは連想メモリ(content-addressable memory)(CAM)内のエントリを特定する。エントリは、記憶場所を特定するポインタを格納していてもよい。記憶場所とは、この記憶場所にハッシュされたグループ値に対応付けられているグループの、一組の集約データの記憶場所である。たとえば、第1の列が、記憶場所Yにハッシュされた値Xを有する場合、記憶場所Yは、第1の列内でXを有する行の集約データに対するポインタを格納しているエントリを特定する。
ある行のグループ値がエントリにマップされたときに、システムは、このグループの一組の集約データに含まれる集約値を更新してもよい。システムは、第1の列の各行について、グループ値をマップするステップおよび集約値を更新するステップを実行してもよい。
ある実施形態において、システムは、衝突検出を実行することにより、2つ以上の異なるグループが同一の集約値を更新しないことを保証してもよい。たとえば、一組の集約データは、集約値に加えてグループ値を含み得る。第2のグループ値が第1のグループ値と同一のアドレスにマップされている場合、第2のグループ値を、一組の集約データの中に格納されているグループ値と突合せて検査する。これらが一致していれば、衝突は発生しておらず、集約値を更新すればよい。しかしながら、これらグループ値が一致していなければ、衝突が検出される。
衝突に対処するために、一組の集約データは、次のグループの集約データの記憶場所を示すポインタを含んでいてもよい。このポインタは最初はNULL値に設定してもよい。衝突の発生時に、ポインタを更新してポインタが次のグループの一組の集約データを示すようにしてもよい。ポインタの設定後に次の衝突が生じた場合は、次のグループの一組の集約データを取出し、衝突を検出しそれに対処するプロセスを次のグループに対して繰返せばよい。
グループ化および集約動作を処理するためのアーキテクチャの例
図1Aおよび図1Bは、ある実施形態に従いグループ化および集約動作を実行するためのシステムアーキテクチャの一例を示すブロック図である。概して、システム100は、ランダムアクセスメモリ(RAM)102と、RAMコントローラ104と、キャッシュ110と、要求キュー120と、グループ列アクセスユニット130と、値列アクセスユニット140と、ハッシュテーブルアクセスユニット150と、集約状態アクセスユニット160とを含む。
RAM102は、格納しているデータへのランダムなアクセスが可能な任意の形態のデータ記憶装置を用いて実装し得る。RAM102の例は、ダイナミックRAM(DRAM)およびスタティックRAM(SRAM)を含むがこれに限定されない。ある実施形態に従うと、RAM102は、グループ化/集約データベースクエリによる問合せの対象であるデータベースの少なくとも一部を格納する。RAM102内に格納されるデータの構成は、実装毎に異なり得る。ある実施形態において、RAM102はデータベースをハイブリッド列状フォーマットで格納する。このフォーマットに従って、RAM102はNブロックのデータを格納し、Nは任意の正の整数である。各ブロック内には、1つ以上の列に対し決まった数の行が列優先方式で格納される。たとえば、データベーステーブルの1つ以上の列に対し、第1のブロックは最初の50行を格納し、第2のブロックは次の50行を格納し、第3のブロックは次の30行を格納していてもよい。各ブロック内において、各列の列値は連続的に格納される。
RAMコントローラ104は、RAM102へのおよびRAM102からのデータの流れを管理するメモリコントローラである。したがって、RAMコントローラ104は、キャッシュ110または要求キュー120からRAM102へのデータ書込およびRAM102からのデータ読出要求を処理し得る。RAMコントローラ104は任意の適切なメモリコントローラを用いて実装すればよく、このメモリコントローラは、ダブルデータレートDDRメモリコントローラ、デュアルチャネルメモリコントローラ、または完全バッファ型メモリコントローラを含むが、これに限定されない。
キャッシュ110は、グループ化/集約クエリの処理中にアクセスブロックによって使用されるデータを格納する。キャッシュメモリの場合、RAMと同様、格納されているデータにランダムにアクセスすることができるが、通常キャッシュメモリはRAMよりもサイズが小さくデータアクセスのレイテンシが小さい。したがって、データをキャッシュすることにより、グループ化/集約クエリに対してデータを処理しているときのRAM102に対する入出力動作の回数が少なくなるので、データのボトルネックを減じるとともにシステム100の性能を改善することができる。
要求キュー120は、アクセスブロックへのおよびアクセスブロックからの要求をバッファする。このアクセスブロックは、グループ列アクセスユニット130、値列アクセスユニット140、ハッシュテーブルアクセスユニット150、および集約状態アクセスユニット160を含む。たとえば、グループ化/集約クエリを受けたとき、アクセスブロックは、RAM102またはキャッシュ110に特定の行または行の値を要求し得る。要求キュー120は、アクセスブロックからの複数のこれらの要求をバッファし得る。そうすることで、メモリフェッチがパイプライン化され、要求された読出しの結果、RAMアクセスのレイテンシが長い場合に、高帯域幅を維持することができる。
システム100内の、グループ列アクセスユニット130、値列アクセスユニット140、ハッシュテーブルアクセスユニット150、および集約状態アクセスユニット160を含む、アクセスブロックは、以下でさらに詳細に説明される技術に従う、フェッチ、グループアキュムレータの更新、およびメモリへの結果のライトバックを実行する役割を果たす。
メモリ構成
システム100のメモリシステムを個々のセクションに分割することによって、クエリ処理中のデータアクセスを最適化してもよい。図1Bは、システム100の記憶階層の一例を示すブロック図である。示されているように、メモリシステムは2つのセクション、すなわちバッファ112とマルチレベルキャッシュ114に分割されている。
バッファ112は、オンチップバッファとして実装されてもよく、非管理方式で動作してもよい。たとえば、バッファ112は、開始メモリアドレスを受けそれに応じてRAM102からデータを逐次的に読出してもよい。ある実施形態において、グループ列アクセスユニット130および値列アクセスユニット140は、バッファ112を通してRAM102にアクセスする。以下で説明される技術に従うと、これらブロックは、データを逐次的に読出し、このデータに対する変更は実行しない。よって、アクセスパターンがわかっており逐次的であるので、データをバッファ112に効率的にプリロードすることができる。
マルチレベルキャッシュ114は、レベル1(L1)、レベル2(L2)、およびレベル3(L3)キャッシュを含む階層のような、中央処理装置(CPU)のキャッシュ階層と同様の方式で動作し得る、管理されているキャッシュである。したがって、マルチレベルキャッシュ114は、より大きくより低速でより高レベルのキャッシュによってバックアップされる、レベル1(L1)キャッシュのようなより小さくより高速でより低レベルのキャッシュを含み得る。
ある実施形態において、ハッシュテーブルアクセスユニット150および集約状態アクセスユニット160は、マルチレベルキャッシュ114を通してRAM102にアクセスする。RAM102内またはディスク上にあるデータにアクセスするとき、これらユニットは、先ずマルチレベルキャッシュ114のより低レベルのキャッシュをサーチし、続いてマルチレベルキャッシュ114のより高いレベルのキャッシュをサーチしてもよい。たとえば、これらユニットは、先ずL1キャッシュにおける関連データを探し、続いてL2キャッシュを探し、次にL3キャッシュを探してもよい。どのキャッシュレベルにおいてもデータが見つからない場合は、そのデータをRAM102に要求すればよい。以下でより詳細に説明されるように、ハッシュテーブルアクセスユニット150および集約状態アクセスユニット160は、ランダムにデータを読出して変更し、これらデータアクセスにはある程度の空間的および時間的局所性があってもよい。このため、マルチレベルキャッシュはこれらユニットのサポートに十分適している。
要求キュー120は、アクセスユニットから受けたメモリアクセス要求をバッファする。ある実施形態において、要求キュー120は、要求を、受けた順序と同じ順序で処理してもよい。たとえば、要求キュー120は、メモリに対するアクセス要求をディスパッチし、次の要求の処理の前にトランザクションが完了するまで待つようにしてもよい。これに代わるものとしては、ハッシュテーブルアクセスユニット150および集約状態アクセスユニット160をサポートする要求キューを、順不同のディスパッチをサポートするように構成してもよい。たとえば、たとえRAM102に対する要求が最初に送られていたとしても、RAM102に対するレイテンシが長いアクセスよりも前に、マルチレベルキャッシュ114に対するレイテンシが低いアクセスに応えてもよい。このように、メモリアクセスが遅い場合は利用できるハードウェアリソースをより適切に利用すればよい。
グループ列アクセスユニット
図2は、グループ列アクセスユニット130のアーキテクチャの一例を示すブロック図である。概して、グループ列アクセスユニット130は、アドレス生成器204と、タグ割当部206と、ローカルメモリ208とを含む。グループ列アクセスユニット130は、グループ化されている列の値をフェッチする役割を果たす。説明のためにクエリ2が実行されているものとする。クエリ2では、グループ化されている列は「販売員」である。したがって、この例において、グループ列アクセスユニット130は、「販売員」列から値をフェッチする役割を果たす。
アドレス生成器204は、グループ化されている列のメモリアドレスを生成し、このアドレスをメモリ要求キュー202に送る。ある実施形態において、アドレス生成器204は、グループ化された列の開始アドレスから始める。したがって、この例では、アドレス生成器204は「販売員」列の開始アドレスを要求キュー202に送ることになる。
図2では、アドレス生成器204によって発行された要求は、「メモリへ」送られるものとして示されている。図1を参照しながら説明したように、実際、要求をメモリに送ることは、マルチレベルキャッシュ114の1つ以上のレベルにおいてデータを探し、該当するデータがマルチレベルキャッシュ114になければRAM102からデータを取出すことを含み得る。しかしながら、説明のために、上記要求は単に「メモリシステムへ」送られ要求されたデータを「このメモリシステム」からグループ列アクセスユニット130が受けるものとする。
したがって、アドレス生成器204が生成したアドレスに応じて、メモリシステムは、グループ化された列(たとえば「販売員」)の行毎に、グループ名を順次返す。要求キュー202は、これらグループ名をローカルメモリ208に格納する。加えて、タグ割当部206は、入力されたグループ名各々に固有のタグを割当て、このタグは、ローカルメモリ208内において対応する名称の隣に格納される。たとえば、この例では、アドレス生成器204は「販売員」列の開始のアドレスを提供し得る。これに応じて、「Pedro」を受け、タグ1というタグとともにローカルメモリ208に格納する。次に、アドレス生成器204は「販売員」列の次の値のアドレスを提供する。これに応じて、「Pedro」を受け、タグ2というタグとともにローカルメモリ208に格納する。このプロセスは「販売員」列の残りの行に対して繰返されるであろう。
ある実施形態において、タグ割当部206によって割当てられるタグは、行識別子として機能する。行識別子は、対応する行を追跡し、後に集約プロセスにおいて得られる値等の他のデータとこの行を対応付けるために使用し得る。タグ割当部206は、入力された行を一意的に識別するために任意の適切なやり方でタグを生成し得る。たとえば、タグ割当部は、入力されたそれぞれのグループ名に連続番号を割当てるカウンタとして実装してもよい。よって、「行ID」列にアクセスすることをRAM102に求めるメモリ要求を発行しなくても、タグは、「行ID」属性についてのプロキシとして機能する固有の識別子を各行に与えることができる。タグはまた、データエントリの順不同の処理を可能にし、複数のアクセスブロックにわたる特定のトランザクションの識別に使用し得る。
ある実施形態に従うと、グループ列アクセスユニット130は、入力されたグループ名を、ハッシュのために直接ハッシュテーブルアクセスユニット150に送る。加えて、タグおよび対応付けられたグループ名を含む小さなローカルメモリ208の内容は、集約状態アクセスユニット160に送られ、このユニットではグループ名が衝突の検査に使用される。
ハッシュテーブルアクセスユニット
図3は、ある実施形態に従うハッシュテーブルアクセスユニット150のアーキテクチャの一例を示すブロック図である。概して、ハッシュテーブルアクセスユニット150は、ハッシュ生成器304とローカルメモリ306とを含む。ハッシュテーブルアクセスユニット150は、グループ名にハッシュ関数を適用し対応するポインタをフェッチする役割を果たす。
ハッシュ生成器304は、グループ列アクセスユニット130から行毎にグループ名を受け、入力されたグループ名各々にハッシュ関数を適用する。ハッシュ関数は、グループ名をハッシュテーブルエントリのアドレスにマップする任意の適切な関数を用いて実装すればよい。ハッシュ関数の適用後、ハッシュ生成器304は、ハッシュ関数によって生成されたハッシュ値に対応するアドレスのハッシュテーブルエントリからポインタをフェッチするために、メモリ要求を要求キュー302に送る。要求キュー302は、ローカルキャッシュ(たとえばマルチレベルキャッシュ114)またはRAM102からポインタをフェッチし、このポインタをローカルメモリ306に返す。
ハッシュ生成器304に与えられるグループ値を本明細書では「入力グループ値」と呼ぶ。ある実施形態において、この入力グループ値にかつて遭遇していない場合、ハッシュテーブルエントリはNULLポインタを格納する。たとえば、「Alex」が初めてハッシュ生成器304に与えられたとき、ハッシュテーブルエントリがNULLポインタとともに返される。
一方、入力グループ値にかつて遭遇している場合またはハッシュ衝突が生じている場合、ハッシュ値に基づいて得られたハッシュテーブルエントリは、「アキュムレータ」データ構造に対するポインタを格納する。衝突が生じていない場合、アキュムレータデータ構造は、入力グループ値のためのものである。衝突の場合、アキュムレータデータ構造は、入力グループ値と同一のハッシュ値にハッシュするグループ名を有する別のグループのためのものであってもよい。
アキュムレータデータ構造は、グループのさまざまなデータを格納し、以下でさらに詳しく説明される。メモリシステムがポインタを返すと、このポインタは、処理されている特定の行に対応するタグとともにローカルメモリ306に格納される。対応するタグは、グループ列アクセスユニット130から受けることができる。タグおよび対応するポインタを含む、ローカルメモリ306の出力は、集約状態アクセスユニット160に送られ、このユニットは、ポインタによって示されるアドレスのペイロードデータをフェッチする。
集約状態アクセスユニット
図4は、ある実施形態に従う集約状態アクセスユニット160のアーキテクチャの一例を示すブロック図である。概して、集約状態アクセスユニット160は、マルチプレクサ(MUX)404と、衝突検査ブロック406と、メモリアロケータ408と、ローカルメモリ410とを含む。集約状態アクセスユニット160は、ハッシュテーブルポインタによって示されるアドレスのペイロードデータをフェッチしこのペイロードデータに対して衝突検査を実施する役割を果たす。
MUX404は、ハッシュテーブルアクセスユニット150からハッシュテーブルポインタを受ける。ハッシュテーブルアクセスユニット150からの入力ポインタは先ず、NULLポインタか否かを判断するために検査される。NULLポインタは、対応するグループにそれまで遭遇していないことを示すとともに、このグループについてのアキュムレータを格納するためにメモリ(memory)を割当てるべきであることを示す。ポインタがNULLの場合、メモリアロケータ408は、このグループに対してメモリを割当て、対応するグループアキュムレータにおけるフィールドを初期状態に初期化し、データをローカルメモリ410に書込む。新たに遭遇したグループの、ローカルメモリ410における初期集約値は、空のままであってもよく、またはゼロに設定してもよい。
ポインタがNULLでない場合、MUX404は、このポインタによって特定されるメモリアドレスを、ペイロードデータをフェッチするために要求キュー402に送る。要求キュー402は、このペイロードデータを、ローカルキャッシュ(たとえばマルチレベルキャッシュ114)を通してフェッチし、衝突検査406に返す。ローカルキャッシュがこのペイロードを送ると、衝突検査406は、ペイロードデータ内の返されたグループ名を、グループ列アクセスユニット130によって送られたグループ名と比較する。これらグループ名が一致していれば衝突はなく、このグループの集約値を含むペイロードデータが、衝突検査トランザクションが生じた対応する行を特定するタグとともに、ローカルメモリ410に書込まれる。
これらグループ名が一致していなければ衝突が検出され、次のペイロードに対するポインタが、ペイロードデータから抽出され、MUX404のNULL検査に返される。MUXでは、以前と同じプロセスが新たなポインタを用いて行なわれる。このプロセスは、次のペイロードに対するポインタがNULLになるまで、または、返されたグループ値がグループ列アクセスユニット130から送られたグループ名と一致するまで、繰返される。
ローカルメモリキャッシュ410の出力は値列アクセスユニット140に送られ、アクセスユニット140はこのアキュムレータデータ構造を更新する。
値列アクセスユニット
図5は、ある実施形態に従う値列アクセスユニット140のアーキテクチャの一例を示すブロック図である。概して、値列アクセスユニット140は、アドレス生成器504と、タグ割当部506と、集約動作ユニット508と、ローカルメモリ510とを含む。値列アクセスユニット140は、集約されている列(たとえばクエリ2の場合は「売上高」列)の値をフェッチする役割を果たす。
グループ列アクセスユニット130と同様、アドレス生成器504は、列の開始アドレスから始め、所望のアドレスを要求キュー502に送る。メモリシステムは、これらの値を行毎に返す。タグ割当部506は、行識別子に対応する各行にタグを割当て、結果はローカルメモリ510に書込まれる。ある実施形態では、タグ割当部506によって所与の行に割当てられたタグは、この行から読出されたグループ名に割当てられたタグと一致するので、以下で説明されるように値列アクセスユニット140がグループデータを集約するときに、これら2つのデータを相互に対応付ければよい。
ローカルメモリ510からの値、現在のアキュムレータデータ状態、および集約状態アクセスユニット160からの対応するタグは、集約動作ユニット508に送られる。集約動作ユニット508は、このタグを用いて、ローカルメモリ510から、一致するタグを有する値を取出す。集約動作ユニット508は次に、クエリにおいて指定された集約関数およびローカルメモリ510から与えられた値に基づいて、このグループの集約値を更新する。集約動作ユニット508は、限定されないがテーブル1に示される関数のうちいずれかを実行し得る。たとえばクエリ2の場合、Pedroグループのアキュムレータデータ構造は、第1行の処理後、値400を有するであろう。第2行を処理するとき、ローカルメモリ510は値200を集約動作ユニット508に与え、ユニット508はこの値と400を合計して値600を生成する。次に、Pedroグループのアキュムレータデータ構造は、この値を用いて更新される。動作の完了後、更新されたアキュムレータは、集約状態アクセスユニット160におけるローカルメモリ410にまたはローカルキャッシュに書戻される。
アキュムレータデータ構造
ある実施形態において、システム100は、処理する各グループに対してアキュムレータデータ構造を生成し維持する。各グループに対するアキュムレータデータ構造は、そのグループの一組の集約データを格納する。アキュムレータデータ構造に格納される一組のデータは、実装および実行されている集約動作の種類に応じて異なり得る。
図8は、ある実施形態に従うアキュムレータデータ構造のブロック図である。アキュムレータデータ構造800は、値フィールド802と、集約結果フィールド804と、ポインタフィールド806とを含む。代替の実施形態において、アキュムレータデータ構造800は、より多くのフィールドを含んでいてもよい、または、示されているフィールドのうちの1つ以上を省いてもよい。
値フィールド802は、グループ名または任意のその他の英数字の値等の、任意の適切なグループ識別子を格納し得る。この値は、メモリアロケータ408が、入力された行のグループ値を用いてこのフィールドをその初期状態に初期化するときに、格納すればよい。
集約結果フィールド804は、グループの集約値を格納する。メモリアロケータ408は、このフィールドを、ゼロ値の空状態に初期化することができる。次に、このフィールドを、上記技術に従い集約動作ユニット508によって更新することができる。ある実施形態において、このフィールドに複数の集約をまとめて格納することができる。たとえば、以下のクエリがあるとする。
SELECT 合計(売上高)、カウント(*)
FROM 売上
GROUP BY 販売員
上記クエリに対し、1つのデータ構造に、合計(売上高)集約結果とカウント(*)集約結果双方を格納することができる。
ポインタフィールド806は、NULLポインタ、または、現在のグループのグループ値と衝突するグループ値を有する別のグループのアキュムレータデータ構造に対するポインタを格納する。メモリアロケータ408は、このフィールドをNULL値に初期化し得る。データ構造800に対応付けられたグループと、新たに遭遇したグループの間に、ハッシュ衝突が発生した場合、新たに遭遇したグループに対してアキュムレータデータ構造が作成され、ポインタフィールドは、この新たなアキュムレータデータ構造に対するポインタを用いて更新される。たとえば、このポインタは、新たに遭遇したグループの値フィールドのメモリアドレスに対応していてもよい。
順不同処理
タグを用いることにより、グループ化および集約中に、行の順不同処理を行なうことができる。このことは、ハッシュテーブルアクセスユニット150および集約状態アクセスユニット160をサポートする要求キューが順不同ディスパッチをサポートするように構成されているときに、有用であろう。
たとえば、「販売員」列の第4行を処理するとき、集約状態アクセスユニット160は、Michaelグループのペイロードデータをフェッチすることを求める要求を与えることができる。集約状態アクセスユニット160は、タグ4等の対応するタグを有する要求キューに、この要求を与えることができる。この要求キューは先ず、このデータをマルチレベルキャッシュ114からフェッチすることを試みればよく、マルチレベルキャッシュ114になければ、RAM102からフェッチすることを試みればよい。説明のために、Michaelのペイロードデータをフェッチした結果、レイテンシが長いRAMアクセスになったと想定する。
返されるべきMichaelグループのペイロードデータを待っている間に、集約状態アクセスユニット160は、「販売員」列の第5行を処理してもよい。よって、集約状態アクセスユニット160は、要求キューに対し、対応するタグとしてタグ5を有するAlexグループのペイロードデータをフェッチすることを求める要求を与える。次に、要求キューは、このグループのペイロードデータをマルチレベルキャッシュ114からフェッチしてもよく、Michaelのペイロードデータが返される前に、集約状態アクセスユニット160にペイロードデータおよび関連するタグを返してもよい。このペイロードデータおよび対応するタグ(タグ5)は次に値アクセス列ユニット140に送られる。
このデータを集約状態アクセスユニット160から受けたことに応じ、値列アクセスユニット140は、集約状態アクセスユニット160から受けたタグ5を、ローカルメモリ510に格納されたタグ5と一致させることによって、集約動作で使用すべき値データを特定する。対応付けられた値データは、集約動作ユニット508に送られて、Alexグループのペイロードデータの中の集約値を更新する。このようにして、第4行の処理の前に第5行の処理を完了してもよい。
処理および実装例
図6は、ある実施形態に従うグループ化および集約動作を実行するためのプロセスの一例を示す。このプロセスは、限定されないが、システム100を含む任意の適切なシステム上で実装し得る。
グループ化/集約クエリを受けると、ステップ602で、このクエリによって特定されるテーブルから行が読出される。ステップ604で、グループ名および値データが、この行の関連する列から取出される。ステップ606で、グループ名がハッシュされることにより、ハッシュテーブル内の、または、他の形態の連想メモリ内の場所が特定される。ステップ608で、上記ハッシュによって示される場所からポインタが読出される。ステップ610で、このポインタがNULLか否かが判断される。そうであれば、このグループにそれまで遭遇していないことになり、ステップ612で、新たなグループに対しメモリが割当てられ、この割当てられたメモリの場所を特定するポインタを用いてハッシュテーブルが更新される。そのハッシュによって同一のメモリアドレスが生成された後続の行すべてに対し、上記ハッシュポインタが返されることになる。したがって、ステップ610でポインタがNULLでないと判断された場合、このプロセスはステップ614に進む。
ステップ614で、入力された行のグループ名が、現在のポインタによって特定される場所に格納されているペイロードデータのグループ名と比較される。ステップ616で、衝突があるか否かが判断される。入力された行のグループ名がポインタによって特定されるペイロードデータに格納されたグループ名と一致する場合、衝突はなく、このプロセスはステップ626に進む。これらグループ名が一致していなければ、このプロセスはステップ618に進む。ステップ618で、同一のハッシュ値を有する次のグループに対するポインタがペイロードデータから取出される。ステップ620で、このポインタがNULLか否かが判断される。NULLであれば、現在のグループ名に対応付けられているグループにかつて遭遇していないことになり、このプロセスはステップ624に進む。ステップ624で、新たなグループに対しメモリが割当てられ、ステップ614で取出されたペイロードデータが、新たに割当てられたメモリの場所を特定するポインタを含むように更新される。ステップ620でポインタがNULLでないと判断された場合、ポインタによって特定される場所に格納されているペイロードデータが取出され、このプロセスはステップ614に戻り、この後続のペイロードデータに対して衝突検査が繰返される。
新たなグループに遭遇すれば、または、衝突が検出されなければ、ステップ626で、集約動作およびステップ604で取出した値データに従い、対応するグループのペイロードデータにおける集約値が更新される。
図7、図9、および図10は、図6に示されるプロセスの実装例を示す。特に、これら図面は、テーブル2に示されるクエリ2の処理中のシステム100のさまざまな状態を示す。
図7は、ある実装例に従うメモリ内の売上テーブル702のレイアウトを示すブロック図である。図7を参照して、「販売_ID」列704、「販売員」列706、「顧客」列708、および「売上高」列710が、特定の列の行すべてが連続的にメモリに格納されるように、列優先方式で格納される。クエリ2の場合、ステップ602および604は、グループ列アクセスユニット130が、「販売員」列706の最初のエントリを読出してグループ名「Pedro」を取出すこと、および、値列アクセスユニット140が、「売上高」列710の最初の要素を読出して値データ「400」を取出すことを含み得る。
次に、グループ名「Pedro」がハッシュされることにより、このグループのアキュムレータデータ構造に対するポインタが格納されることになるメモリアドレスが生成される。場合によっては、2つ以上の固有の入力値が同一の値にハッシュされる可能性があるので、グループ名「Pedro」および対応するポインタは、衝突の検査のためにハッシュテーブルアクセスユニット150に送られる。「Pedro」は処理される最初のグループなので、集約状態アクセスユニット160は、このポインタはNULLであると判断し、Pedroグループに対しメモリを割当てる。ある実施形態において、集約状態アクセスユニット160は、図8に示されるようなアキュムレータデータ構造を生成し、フィールド各々を開始状態に初期化する。
図9Aは、ある実施形態に従う初期化後のPedroのアキュムレータデータ構造の状態のブロック図である。値フィールドはグループ名に対応するPedroに初期化され、集約結果フィールドの値は「0」に初期化されている。このアドレスにはまだ衝突がないので、次の値に対するポインタはNULLに設定される。
Pedroのアキュムレータデータ構造が初期化されると、集約結果フィールドの値が集約状態アクセスユニット160によって読出されて格納される。集約状態アクセスユニット160は、値「400」を集約動作ユニット508に与え、集約動作ユニット508は、行から抽出された値データを、集約状態アクセスユニット160によって与えられた集約結果値に加算する。これの更新後、集約結果値はメモリに書戻される。図9Bは、第1行の処理後の、Pedroのアキュムレータデータ構造の状態のブロック図である。図9Bを参照して、集約結果フィールドは、第1行の処理後の集約動作結果に対応する値「400」を格納している。
アキュムレータデータ構造の更新後、このプロセスは、テーブルの残りの行各々に対して繰返される。第2行も、グループ名は、第1行と同一アドレスにハッシュする「Pedro」である。したがって、集約状態アクセスユニット160は、Pedroグループはすでにこの場所にあると判断する。次に、衝突検査ブロック406は、第2の要素のグループ名「Pedro」を、これも「Pedro」である、図9Bに示されるアキュムレータデータ構造に格納されているグループ名と比較する。これらグループ名は同一であるので、集約状態アクセスユニット160は衝突がないと判断する。次に、Pedroのアキュムレータデータ構造の集約結果フィールドの値が、値列アクセスユニット140に読込まれ、値列アクセスユニット140は、このフィールドを新たな値(400+200=600)で更新し、更新されたフィールドをメモリに書戻す。
説明のために、この例では、「Pedro」のハッシュと「Michael」のハッシュが衝突を生じさせると想定する。このため、ハッシュテーブルアクセスユニット150によって適用されるハッシュ関数によって、これらグループ名各々に同一のメモリアドレスが生成される。このような場合、衝突検査406は、この場所(「Pedro」)に格納された値は入力された行の値(「Michael」)と等しくないことを発見する。衝突検査406は次に、この場所に格納されている次の値を示すポインタを追跡することにより、次の要素に対して衝突検査を実施しようとする。この場合、次の値を示すポインタはNULLであり、これは、このハッシュ場所に他の値はなくこれがこの場所における最初の衝突であることを意味する。そこで、メモリアロケータは、新たなデータ構造をこのMichaelグループに対して作成し、Pedroグループにおける次の値を更新してMichaelを指すようにする。
図9Cは、メモリアロケータがMichaelの値を初期化した後のアキュムレータデータ構造の状態を示す。示されているように、Pedroのアキュムレータデータ構造に格納されているポインタは、Michaelを指している。グループ名Alexは衝突を生じさせないので独立して格納される。
Michaelのアキュムレータデータ構造の生成後、その集約値フィールドが上記プロセスに従って更新される。このプロセスは、テーブルの残りの行に対して繰返されて、グループ各々についての最終集約結果が得られる。
図10は、集約プロセスの終了時のメモリの状態を示すブロック図である。ハッシュテーブル1002は4エントリのハッシュテーブルである。しかしながら、エントリの数は、実装毎に異なり得る。ハッシュテーブル1002は、2つのポインタ、すなわち、Pedroアキュムレータ1004に対するポインタと、Alexアキュムレータ1006に対するもう1つのポインタとを格納している。Pedroアキュムレータ1004は、Pedroについての集約結果と、Michaelアキュムレータ1008に対するポインタとを格納している。Alexアキュムレータ1006はAlexについての集約結果を格納しており、Michaelアキュムレータ1008はMichaelについての集約結果を格納している。これらアキュムレータいずれのポインタも、NULLであり、これらグループには衝突が生じていないことを示す。アキュムレータ各々についてのグループ名および対応する集約結果は、クエリ2の結果として返すことができる。
ハッシュテーブルのサイズの選択
ハッシュテーブルのサイズは、実装毎に異なり得る。ハッシュテーブルが小さいほど衝突の可能性が高く、そうなるとシステムの性能が低下し得る。逆に、大きなハッシュテーブルはシステム内の記憶容量を浪費する可能性が高い。
たとえば、図11は、ある実施形態に従うハッシュテーブル構造の一例を示すブロック図である。ハッシュ関数1102は、入力されたNビット値に適用されて、メモリ1104に格納されているハッシュテーブル1106に対して3ビットアドレスを生成する。したがって、ハッシュテーブル1106内には、利用できるものとして8つの異なるハッシュテーブルエントリがある。示されているように、ハッシュテーブルは、3つの異なる値に対して3つのポインタを格納している。この場合、より小さい、2ビットアドレス可能ハッシュテーブルは、3つのポインタに対して十分な記憶領域を提供するであろう。しかしながら、より小さなハッシュテーブルの場合、特に受ける値が多くなると衝突の可能性が高くなる。4ビットアドレス可能ハッシュテーブルのようにより大きなテーブルは、特に新たな値を受けない場合は記憶リソースを浪費することになる。
ある実施形態において、特定のクエリに対するハッシュテーブルのサイズは、グループ化動作の濃度(cardinality)の推定に基づいて判断され設定される。グループ化動作に関わる可能性があるグループの数が多いほど、より大きなメモリがハッシュテーブルに割当てられる。たとえば、Nビットアドレス可能ハッシュテーブルの値Nは、グループ化動作の濃度に比例していてもよい。したがって、ハッシュテーブルのサイズを選択することにより、記憶領域の消費と衝突の可能性とのバランスを十分にとることができる。
ハッシュテーブルの衝突への対処
ハッシュテーブルの衝突に対応するための技術は、実装毎に異なり得る。上記衝突対処技術に代わるものとして、システム100は、ハッシュテーブル内の同一場所にマップされるであろうグループ名をすべて事前に計算してもよい。この事前計算は、データベースがシステム100にロードされたときに実行すればよい。次に、衝突しているグループを、これら衝突専用の第2のテーブルに置けばよい。その後、元のハッシュテーブルにおけるエントリを、そのアドレスにおける衝突の発生を示しかつ集約データが第2のテーブルにあることを示す特別キーと置換えればよい。
衝突の検出時に第2のテーブルをサーチする方法として複数の方法がある。第2のテーブル内のエントリの数が少なければ、線形サーチが効果的であろう。衝突対処アルゴリズムを、第2のテーブル内の各エントリを通して反復し、所望のグループ名を第2のテーブルのグループ名と比較すればよい。一致することがわかると、この要素に対する集約値フィールドが返され更新される。
別の実施形態において、異なるハッシュ関数を用いる第2のハッシュテーブルを用いてサーチを実装してもよい。この第2のハッシュテーブルに対するペイロードデータは、衝突がまだ生じるかもしれないので、全アキュムレータデータ構造を使用してもよい。
さらに別の実施形態において、衝突テーブルを二進木構造で構成することができる。二進木の各ノードは、グループ名および集約値を格納し得る。正しいノードが発見されたときに、集約値を返して更新する。この木がバランスの取れたものである場合、テーブルをO(log(N))回サーチすればよい。
事前計算手法の1つの利点は、フィールド802およびフィールド806が衝突の処理には不要であるので、アキュムレータデータ構造800のサイズが減じられることである。したがって、この手法は、衝突がわずかであるときには実時間の手法よりも記憶空間を節約できる。しかしながら、グループの事前計算には、特に新たなグループを生成するデータベース更新が頻繁である場合、上記他の手法よりも多くの処理オーバヘッドを伴い得る。この場合、新たなグループがロードされると、多くの事前計算を行なう必要があるかもしれない。
ハードウェアの概要
1つの実施形態によれば、本明細書に記載の技術は、1つ以上の専用計算装置によって実装される。専用計算装置は、ハードウェアによって技術を実装し得る、または、技術を実装するように永続的にプログラミングされた1つ以上の特定用途向け集積回路(ASIC)もしくはフィールドプログラマブルゲートアレイ(FPGA)などのデジタル電子装置を含み得る、または、ファームウェア、メモリ、他の記憶装置、もしくは組合せにおけるプログラムコマンドに従って技術を実装するようにプログラムされた1つ以上の汎用ハードウェアプロセッサを含み得る。このような専用計算装置は、技術を達成するために、カスタムプログラミングにカスタムハードワイヤードロジック、ASIC、またはFPGAを組合わせてもよい。専用計算装置は、デスクトップコンピュータシステム、ポータブルコンピュータシステム、携帯用デバイス、ネットワーキングデバイス、または、技術を実装するためにハードワイヤードロジックおよび/もしくはプログラムロジックを組込んだ任意の他の装置であってもよい。
たとえば、図12は、本発明の実施形態が実装され得るコンピュータシステム1200を示すブロック図である。コンピュータシステム1200は、バス1202または情報を通信するための他の通信機構と、情報を処理するためにバス1202に結合されたハードウェアプロセッサ1204とを含む。ハードウェアプロセッサ1204は、たとえば、汎用マイクロプロセッサであってもよい。
コンピュータシステム1200は、情報およびプロセッサ1204によって実行されるコマンドを格納するためにバス1202に結合された、ランダムアクセスメモリ(RAM)または他の動的記憶装置などのメインメモリ1206も含む。たとえば、RAM102はメインメモリ1206の中において実装されてもよい。メインメモリ1206は、プロセッサ1204によって実行されるコマンドの実行中に一時変数または他の中間情報を格納するためにも使用され得る。このようなコマンドは、プロセッサ1204にアクセス可能な非一時的な記録媒体に格納されると、コマンドにおいて指定された動作を行なうようにカスタマイズされた専用マシンにコンピュータシステム1200を変える。
コンピュータシステム1200は、プロセッサ1204のための静的情報およびコマンドを格納するためにバス1202に結合された読出し専用メモリ(ROM)1208または他の静的記憶装置をさらに含む。磁気ディスクまたは光ディスクなどの記憶装置1210が設けられ、情報およびコマンドを格納するためにバス1202に結合される。
コンピュータシステム1200は、コンピュータのユーザに対して情報を表示するための陰極線管(CRT)などのディスプレイ1212にバス1202を介して結合され得る。英数字および他のキーを含む入力装置1214は、プロセッサ1204に対して情報およびコマンド選択を伝えるためにバス1202に結合される。別のタイプのユーザ入力装置は、方向情報およびコマンド選択をプロセッサ1204に伝えるための、およびディスプレイ1212上でのカーソル移動を制御するための、マウス、トラックボール、またはカーソル方向キーなどのカーソル制御1216である。この入力装置は、通常、第1の軸(たとえばx)および第2の軸(たとえばy)という2つの軸において2つの自由度を有し、これによって面における位置をこの装置が指定できる。
コンピュータシステム1200は、フィルタリング、射影、グループ化、および/または集約動作を実行するためのクエリ処理ロジック1232も含み得る。クエリ処理ロジック1232は、図6に示されるプロセスを実行するように構成されてもよく、システム100のアクセスユニットなどの任意の適切なハードウェアを用いて実装されてもよい。クエリ処理ロジック1232は、クエリ処理動作中に使用され生成されるデータをキャッシュするメモリ1234に結合される。たとえば、キャッシュ110はメモリ1234の中で実装されてもよい。
コンピュータシステム1200は、本明細書に記載される技術を、コンピュータシステムと組合わされてコンピュータシステム1200を専用マシンとするかまたは専用マシンとなるようにプログラミングする、カスタマイズされたハードワイヤードロジック、1つ以上のASICもしくはFPGA、ファームウェアおよび/またはプログラムロジックを用いて実装してもよい。ある実施形態によると、ここでの技術は、メインメモリ1206に含まれる1つ以上のコマンドの1つ以上のシーケンスをプロセッサ1204が実行することに応答して、コンピュータシステム1200によって行なわれる。このようなコマンドは、記憶装置1210などの他の記録媒体からメインメモリ1206に読込まれ得る。メインメモリ1206に含まれるコマンドのシーケンスを実行することにより、本明細書に記載の処理ステップがプロセッサ1204によって実行される。代替の実施形態において、ハードワイヤード回路を、ソフトウェアコマンドの代わりにまたはソフトウェアコマンドと組合わせて使用してもよい。
本明細書において使用される用語「記録媒体」は、特定の方法でマシンを動作させるデータおよび/またはコマンドを格納する任意の非一時的な媒体をいう。このような記録媒体は、不揮発性の媒体および/または揮発性の媒体を含み得る。不揮発性の媒体は、たとえば、記憶装置1210などの光ディスクまたは磁気ディスクを含む。揮発性の媒体は、メインメモリ1206などの動的メモリを含む。記録媒体の一般的な形式は、たとえば、フロッピー(登録商標)ディスク、フレキシブルディスク、ハードディスク、ソリッドステートドライブ、磁気テープもしくは任意の他の磁気データ記録媒体、CD−ROM、任意の他の光データ記録媒体、穴のパターンを伴う任意の物理媒体、RAM、PROM、およびEPROM、FLASH−EPROM、NVRAM、任意の他のメモリチップもしくはカートリッジを含む。
記録媒体は、伝送媒体とは異なるが、伝送媒体と併せて使用され得る。伝送媒体は、記録媒体間の情報の転送に関わる。たとえば、伝送媒体は、バス1202を包含するワイヤを含む、同軸ケーブル、銅線、および光ファイバを含む。伝送媒体は、電波および赤外線データ通信時に生成されるような音波または光波の形式を取り得る。
さまざまな形式の媒体は、実行のためにプロセッサ1204に1つ以上のコマンドの1つ以上のシーケンスを搬送することに関わり得る。たとえば、コマンドは、リモートコンピュータの磁気ディスクまたはソリッドステートドライブ上に最初は担持され得る。リモートコンピュータは、そのダイナミックメモリにコマンドをロードし、モデムを用いて電話回線を介してコマンドを送ることができる。コンピュータシステム1200内のモデムは、電話回線上のデータを受け、赤外線送信器を使用してデータを赤外線信号に変換することができる。赤外線検知器は、赤外線信号で運ばれたデータを受けることができ、適切な回路によってこのデータをバス1202上に置くことができる。バス1202はデータをメインメモリ1206に送り、このメインメモリからプロセッサ1204はコマンドを取出して実行する。メインメモリ1206が受けたコマンドは、プロセッサ1204による実行の前または後に記憶装置1210上に任意に格納され得る。
コンピュータシステム1200は、バス1202に結合された通信インターフェイス1218も含む。通信インターフェイス1218は、ローカルネットワーク1222に接続されたネットワークリンク1220に結合する双方向データ通信を提供する。たとえば、通信インターフェイス1218は、統合サービスデジタル網(ISDN)カード、ケーブルモデム、衛星モデム、またはモデムであり対応するタイプの電話回線へのデータ通信接続を提供してもよい。別の例として、通信インターフェイス1218は、ローカルエリアネットワーク(LAN)カードであり対応のLANへのデータ通信接続を提供してもよい。無線リンクも実装され得る。このような実装例において、通信インターフェイス1218は、さまざまなタイプの情報を表わすデジタルデータストリームを搬送する電気信号、電磁信号、または光信号を送信および受信する。
ネットワークリンク1220は通常、1つ以上のネットワークを介して他のデータ装置へのデータ通信を提供する。たとえば、ネットワークリンク1220は、ローカルネットワーク1222を介し、ホストコンピュータ1224へ、または、インターネットサービスプロバイダ(ISP)1226によって運営されるデータ機器へ、接続を提供し得る。そうすると、ISP1226は、現在一般的に「インターネット」1228と呼ばれている全世界パケットデータ通信網を介してデータ通信サービスを提供する。ローカルネットワーク1222およびインターネット1228はいずれも、デジタルデータストリームを搬送する電気信号、電磁信号、または光信号を使用する。コンピュータシステム1200へおよびコンピュータシステム1200からデジタルデータを搬送する、さまざまなネットワークを介する信号、および、ネットワークリンク1220上の、通信インターフェイス1218を介する信号は、伝送媒体の形態の例である。
コンピュータシステム1200は、ネットワーク、ネットワークリンク1220、および通信インターフェイス1218を介して、メッセージの送信、およびプログラムコードを含むデータの受信を行ない得る。インターネットの例において、サーバ1230は、インターネット1228、ISP1226、ローカルネットワーク1222、および通信インターフェイス1218を介してアプリケーションプログラムのための要求されたコードを送信し得る。
受信されたコードは、受信され次第プロセッサ1204によって実行され得る、および/または記憶装置1210に格納され得る、または、後で実行するために他の不揮発性記憶装置に格納され得る。
拡張および代替案
上記明細書では、実装毎に異なり得る多数の具体的な詳細を参照しながら本発明の実施形態を説明している。このため、明細書および図面は、限定的ではなく例示的な意味で考慮されねばならない。発明の範囲の唯一かつ排他的な指標および出願人が意図する発明の範囲は、本願に由来する一組の請求項の、このような請求項の元になる特定の形式の、後の任意の修正が含まれる、文言上のかつ均等物の範囲である。

Claims (22)

  1. 方法であって、
    第1の列によってグループ化されたデータを集約することを求める要求を受けることと、
    前記要求を受けたことに応じて、複数の行のうちの各行に対し、
    前記行におけるグループ値をアドレスにマップするステップと、
    前記アドレスを用いて、前記グループ値に対応付けられているグループの一組の集約データの場所を求めるステップと、
    前記行の第2の列における値に基づいて、前記一組の集約データに含まれる集約値を更新するステップとを実行することとを含み、
    前記方法は1つ以上の計算装置によって実行される、方法。
  2. 前記複数の行のうちの特定の行について、前記特定の行に対応付けられているグループ値についての集約データはまだ生成されていないと判断することと、
    前記特定の行に対応付けられているグループ値についての集約データはまだ生成されていないという判断に応じて、前記特定の行に対応付けられているグループ値についての集約データを格納するためのメモリを割当てることとをさらに含む、請求項1に記載の方法。
  3. 前記複数の行のうちの少なくとも2行において、異なるグループ値が同一アドレスにマップしており、前記方法は、
    前記同一アドレスにマップする、前記複数の行のうちの特定の行における特定のグループ値について、
    前記同一アドレスを用いて、格納されているグループ値を含む特定の一組の集約データの場所を求めることと、
    前記格納されているグループ値を前記特定のグループ値と比較することと、
    前記格納されているグループ値と前記特定のグループ値が一致しているという判断に応じて、前記一組の集約データに含まれる集約値を、前記第2の列の前記特定の行における第2の値に基づいて更新することとをさらに含む、請求項1に記載の方法。
  4. 前記格納されているグループ値と第1のグループ値が一致していないという判断に応じて、
    新たなグループの集約データを格納するためのメモリを割当てることと、
    前記割当てられたメモリのアドレスを特定するポインタを生成することと、
    前記特定の一組の集約データに第2のポインタを格納することとをさらに含む、請求項3に記載の方法。
  5. 前記グループ値をアドレスにマップするステップは、ハッシュ関数を前記グループ値に適用することを含む、請求項1に記載の方法。
  6. 前記グループの一組の集約データは、グループ値と、集約値と、衝突するグループの第2の一組の集約データに対するポインタとを含む、請求項1に記載の方法。
  7. 前記アドレスはハッシュテーブルに格納され、前記ハッシュテーブルのサイズは、データを集約することを求める前記要求に対応付けられているグループの数の推定に基づいて選択される、請求項1に記載の方法。
  8. 前記要求を受ける前に同一アドレスにマップしている前記第1の列におけるすべてのグループ名を事前計算することにより、衝突が検出される、請求項1に記載の方法。
  9. 1つ以上のプロセッサにより実行されるときに、
    第1の列によってグループ化されたデータを集約することを求める要求を受けることと、
    前記要求を受けたことに応じて、複数の行のうちの各行に対し、
    前記行におけるグループ値をアドレスにマップするステップと、
    前記アドレスを用いて、前記グループ値に対応付けられているグループの一組の集約データの場所を求めるステップと、
    前記行の第2の列における値に基づいて、前記一組の集約データに含まれる集約値を更新するステップとを実行することとを、1つ以上の計算装置に実行させる命令が格納された、1つ以上の非一時的なコンピュータ読取可能な媒体。
  10. 前記複数の行のうちの特定の行について、前記特定の行に対応付けられているグループ値についての集約データはまだ生成されていないと判断することと、
    前記特定の行に対応付けられているグループ値についての集約データはまだ生成されていないという判断に応じて、前記特定の行に対応付けられているグループ値についての集約データを格納するためのメモリを割当てることとを、前記1つ以上の計算装置に実行させる命令がさらに格納された、請求項9に記載の非一時的なコンピュータ読取可能な媒体。
  11. 前記複数の行のうちの少なくとも2行において、異なるグループ値が同一アドレスにマップしており、
    前記同一アドレスにマップする、前記複数の行のうちの特定の行における特定のグループ値について、
    前記同一アドレスを用いて、格納されているグループ値を含む特定の一組の集約データの場所を求めることと、
    前記格納されているグループ値を前記特定のグループ値と比較することと、
    前記格納されているグループ値と前記特定のグループ値が一致しているという判断に応じて、前記一組の集約データに含まれる集約値を、前記第2の列の前記特定の行における第2の値に基づいて更新することとを、前記1つ以上の計算装置に実行させる命令がさらに格納された、請求項9に記載の非一時的なコンピュータ読取可能な媒体。
  12. 第1の列の第2の行について、
    新たなグループの集約データを格納するためのメモリを割当てることと、
    前記割当てられたメモリのアドレスを特定するポインタを生成することと、
    前記特定の一組の集約データに第2のポインタを格納することとを、前記1つ以上の計算装置に実行させる命令がさらに格納された、請求項11に記載の非一時的なコンピュータ読取可能な媒体。
  13. 前記グループ値をアドレスにマップするための命令は、ハッシュ関数を前記グループ値に適用するための命令を含む、請求項9に記載の非一時的なコンピュータ読取可能な媒体。
  14. 前記グループの一組の集約データは、グループ値と、集約値と、衝突するグループの第2の一組の集約データに対するポインタとを含む、請求項9に記載の非一時的なコンピュータ読取可能な媒体。
  15. 前記アドレスはハッシュテーブルに格納され、前記ハッシュテーブルのサイズは、データを集約することを求める前記要求に対応付けられているグループの数の推定に基づいて選択される、請求項9に記載の非一時的なコンピュータ読取可能な媒体。
  16. 前記要求を受ける前に同一アドレスにマップしている第1の列におけるすべてのグループ名を事前計算することにより、衝突が検出される、請求項9に記載の非一時的なコンピュータ読取可能な媒体。
  17. グループ化および集約動作を実行するためのシステムであって、
    第1の列の行から第1のグループのグループ値を取出すように構成されたグループ列アクセスユニットと、
    前記グループ値をアドレスにマップするように構成されたハッシュテーブルアクセスユニットと、
    前記第1のグループについての前記アドレスに格納されているポインタによって特定される集約データを取出すように構成された集約状態アクセスユニットと、
    第2の列の前記行における値に基づいて、一組の集約データに含まれる集約値を更新するように構成された値列アクセスユニットとを備える、システム。
  18. 前記集約状態アクセスユニットはさらに、
    前記第1のグループについてのポインタはまだ生成されていないと判断するように、かつ
    前記第1のグループについてのポインタはまだ生成されていないという判断に応じて、前記第1のグループの集約データを格納するためのメモリを割当てるように、かつ
    前記第1のグループについてのポインタを生成するように構成され、
    前記第1のグループについてのポインタは、前記割当てられたメモリのアドレスを特定する、請求項17に記載のシステム。
  19. 前記ハッシュテーブルアクセスユニットはさらに、第2の行に格納されている第2のグループ値を第2のアドレスにマップするように構成され、
    前記集約状態アクセスユニットはさらに、第2のグループについての前記第2のアドレスに格納されている第2のポインタによって特定される集約データを取出すように構成され、
    前記値列アクセスユニットはさらに、前記第2の列の第2の行における値に基づいて、前記第2のポインタによって特定される集約データにおける集約値を更新するように構成される、請求項17に記載のシステム。
  20. 前記ハッシュテーブルアクセスユニットはさらに、前記第1の列の第2の行における第2のグループ値をアドレスにマップするように構成され、
    前記集約状態アクセスユニットはさらに、前記グループ値と前記第2のグループ値を比較し、前記グループ値と前記第2のグループ値が一致するという判断に応じて、前記第2の列の第2の行における第2の値に基づいて前記集約データにおける集約値を更新するように構成される、請求項17に記載のシステム。
  21. 前記集約状態アクセスユニットはさらに、前記グループ値と前記第2のグループ値が一致しないという判断に応じて、
    第2のグループの集約データを格納するためのメモリを割当てるように、かつ
    前記割当てられたメモリのアドレスを特定する第2のポインタを生成するように、かつ
    前記第1のグループの集約データに前記第2のポインタを格納するように構成される、請求項20に記載のシステム。
  22. 前記ハッシュテーブルアクセスユニットは、ハッシュ関数を前記グループ値に適用して前記グループ値を前記アドレスにマップするように構成される、請求項17に記載のシステム。
JP2015528526A 2012-08-20 2013-08-14 集約/グループ化動作:ハッシュテーブル法のハードウェア実装 Active JP6356675B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/590,057 US9563658B2 (en) 2012-08-20 2012-08-20 Hardware implementation of the aggregation/group by operation: hash-table method
US13/590,057 2012-08-20
PCT/US2013/055020 WO2014031416A2 (en) 2012-08-20 2013-08-14 Hardware implementation of the aggregation/group by operation: hash-table method

Publications (3)

Publication Number Publication Date
JP2015528603A true JP2015528603A (ja) 2015-09-28
JP2015528603A5 JP2015528603A5 (ja) 2016-10-06
JP6356675B2 JP6356675B2 (ja) 2018-07-11

Family

ID=49083762

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015528526A Active JP6356675B2 (ja) 2012-08-20 2013-08-14 集約/グループ化動作:ハッシュテーブル法のハードウェア実装

Country Status (5)

Country Link
US (1) US9563658B2 (ja)
EP (1) EP2885728B1 (ja)
JP (1) JP6356675B2 (ja)
CN (1) CN104685498B (ja)
WO (1) WO2014031416A2 (ja)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10127281B2 (en) * 2010-12-23 2018-11-13 Sap Se Dynamic hash table size estimation during database aggregation processing
US9697174B2 (en) 2011-12-08 2017-07-04 Oracle International Corporation Efficient hardware instructions for processing bit vectors for single instruction multiple data processors
US9792117B2 (en) 2011-12-08 2017-10-17 Oracle International Corporation Loading values from a value vector into subregisters of a single instruction multiple data register
US10534606B2 (en) 2011-12-08 2020-01-14 Oracle International Corporation Run-length encoding decompression
US9600522B2 (en) 2012-08-20 2017-03-21 Oracle International Corporation Hardware implementation of the aggregation/group by operation: filter method
US9727606B2 (en) 2012-08-20 2017-08-08 Oracle International Corporation Hardware implementation of the filter/project operations
US9779137B2 (en) * 2013-07-09 2017-10-03 Logicblox Inc. Salient sampling for query size estimation
US11113054B2 (en) 2013-09-10 2021-09-07 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression
US9606921B2 (en) 2013-09-21 2017-03-28 Oracle International Corporation Granular creation and refresh of columnar data
KR101642072B1 (ko) * 2014-05-08 2016-07-22 주식회사 알티베이스 하이브리드스토리지장치 및 방법
US11250001B2 (en) 2014-08-01 2022-02-15 International Business Machines Corporation Accurate partition sizing for memory efficient reduction operations
US10007615B1 (en) * 2015-05-01 2018-06-26 Marvell International Ltd. Methods and apparatus for performing fast caching
US10073885B2 (en) 2015-05-29 2018-09-11 Oracle International Corporation Optimizer statistics and cost model for in-memory tables
US9971808B2 (en) 2015-06-24 2018-05-15 International Business Machines Corporation Fast query processing in columnar databases with GPUs
US10067954B2 (en) 2015-07-22 2018-09-04 Oracle International Corporation Use of dynamic dictionary encoding with an associated hash table to support many-to-many joins and aggregations
CN106570022B (zh) * 2015-10-10 2020-06-23 菜鸟智能物流控股有限公司 一种跨数据源查询方法、装置及系统
US11023468B2 (en) * 2015-11-20 2021-06-01 Sap Se First/last aggregation operator on multiple keyfigures with a single table scan
US10055358B2 (en) 2016-03-18 2018-08-21 Oracle International Corporation Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors
US10061832B2 (en) 2016-11-28 2018-08-28 Oracle International Corporation Database tuple-encoding-aware data partitioning in a direct memory access engine
US10061714B2 (en) 2016-03-18 2018-08-28 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors
US10402425B2 (en) 2016-03-18 2019-09-03 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multi-core processors
US10552413B2 (en) 2016-05-09 2020-02-04 Sap Se Database workload capture and replay
US10885009B1 (en) * 2016-06-14 2021-01-05 Amazon Technologies, Inc. Generating aggregate views for data indices
US10599488B2 (en) 2016-06-29 2020-03-24 Oracle International Corporation Multi-purpose events for notification and sequence control in multi-core processor systems
US10380058B2 (en) 2016-09-06 2019-08-13 Oracle International Corporation Processor core to coprocessor interface with FIFO semantics
US10783102B2 (en) * 2016-10-11 2020-09-22 Oracle International Corporation Dynamically configurable high performance database-aware hash engine
US11061876B2 (en) * 2016-11-15 2021-07-13 Sap Se Fast aggregation on compressed data
US10176114B2 (en) 2016-11-28 2019-01-08 Oracle International Corporation Row identification number generation in database direct memory access engine
US10459859B2 (en) 2016-11-28 2019-10-29 Oracle International Corporation Multicast copy ring for database direct memory access filtering engine
US10725947B2 (en) 2016-11-29 2020-07-28 Oracle International Corporation Bit vector gather row count calculation and handling in direct memory access engine
US10324634B2 (en) * 2017-04-07 2019-06-18 Micron Technology, Inc. Methods of bit-flagged sketch-based memory management and memory devices utilizing the same
US10558704B2 (en) * 2017-07-20 2020-02-11 Sap Se Smart rollover
US10698892B2 (en) 2018-04-10 2020-06-30 Sap Se Order-independent multi-record hash generation and data filtering
CN110442574B (zh) * 2019-07-01 2022-05-03 上海赜睿信息科技有限公司 一种数据处理方法、电子设备和计算机可读存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63143627A (ja) * 1986-12-05 1988-06-15 Nippon Telegr & Teleph Corp <Ntt> 連想集約演算装置
JPH02146688A (ja) * 1988-11-28 1990-06-05 Sharp 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
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
JP2000187668A (ja) * 1998-12-22 2000-07-04 Hitachi Ltd グループ化方法と重複排除方法
JP2000510986A (ja) * 1997-03-07 2000-08-22 マイクロソフト コーポレイション サーチエンジンにおけるドキュメントのスコープ・テスト

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5706495A (en) 1996-05-07 1998-01-06 International Business Machines Corporation Encoded-vector indices for decision support and warehousing
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
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
US7908259B2 (en) 2006-08-25 2011-03-15 Teradata Us, Inc. Hardware accelerated reconfigurable processor for accelerating 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
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
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
US8374986B2 (en) 2008-05-15 2013-02-12 Exegy Incorporated Method and system for accelerated stream processing
US8832112B2 (en) * 2008-06-17 2014-09-09 International Business Machines Corporation Encoded matrix index
SE0801708L (sv) * 2008-07-18 2009-11-24 Qliktech Internat Ab Förfarande och apparat för extrahering av information från en databas
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
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
US8959070B2 (en) * 2009-09-15 2015-02-17 Factual Inc. Processes and systems for collaborative manipulation of data
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
US9727606B2 (en) 2012-08-20 2017-08-08 Oracle International Corporation Hardware implementation of the filter/project operations
US9600522B2 (en) 2012-08-20 2017-03-21 Oracle International Corporation Hardware implementation of the aggregation/group by operation: filter method

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63143627A (ja) * 1986-12-05 1988-06-15 Nippon Telegr & Teleph Corp <Ntt> 連想集約演算装置
JPH02146688A (ja) * 1988-11-28 1990-06-05 Sharp 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
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
JP2000510986A (ja) * 1997-03-07 2000-08-22 マイクロソフト コーポレイション サーチエンジンにおけるドキュメントのスコープ・テスト
JP2000187668A (ja) * 1998-12-22 2000-07-04 Hitachi Ltd グループ化方法と重複排除方法

Also Published As

Publication number Publication date
US9563658B2 (en) 2017-02-07
US20140052726A1 (en) 2014-02-20
WO2014031416A2 (en) 2014-02-27
CN104685498B (zh) 2018-06-08
JP6356675B2 (ja) 2018-07-11
EP2885728B1 (en) 2019-07-31
EP2885728A2 (en) 2015-06-24
CN104685498A (zh) 2015-06-03
WO2014031416A3 (en) 2014-07-24

Similar Documents

Publication Publication Date Title
JP6356675B2 (ja) 集約/グループ化動作:ハッシュテーブル法のハードウェア実装
US10198363B2 (en) Reducing data I/O using in-memory data structures
US10114908B2 (en) Hybrid table implementation by using buffer pool as permanent in-memory storage for memory-resident data
US8819335B1 (en) System and method for executing map-reduce tasks in a storage device
CN107273522B (zh) 面向多应用的数据存储系统和数据调用方法
US10275489B1 (en) Binary encoding-based optimizations at datastore accelerators
US9501419B2 (en) Apparatus, systems, and methods for providing a memory efficient cache
CN107077453B (zh) 用于使用集群缓存进行数据库查询的并行优化的系统和方法
KR102440128B1 (ko) 통합된 객체 인터페이스를 위한 메모리 관리 장치, 시스템 및 그 방법
CN107665095B (zh) 存储器空间管理的设备、方法及可读存储介质
US10528590B2 (en) Optimizing a query with extrema function using in-memory data summaries on the storage server
US11709835B2 (en) Re-ordered processing of read requests
US11966356B2 (en) Efficient usage of one-sided RDMA for linear probing
CN107239485A (zh) 数据库操作方法、装置及系统
US11294872B2 (en) Efficient database management system and method for use therewith
KR101806394B1 (ko) 모바일 dbms환경에서 트랜잭션에 특화된 색인 캐시의 구조를 갖는 데이터 처리 방법
US11210280B2 (en) Systems and methods for fast bloom filter operations
US10339052B2 (en) Massive access request for out-of-core textures by a parallel processor with limited memory
US11747998B1 (en) Indexing technique for large scale distributed key-value systems
US10942860B2 (en) Computing system and method using bit counter
CN117540056A (zh) 数据查询的方法、装置、计算机设备和存储介质
JPS6299843A (ja) キヤツシユ記憶装置の制御方法

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160810

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160810

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: 20170801

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20171031

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171205

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180116

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180406

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: 20180522

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180614

R150 Certificate of patent or registration of utility model

Ref document number: 6356675

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