JP7277675B2 - Select*クエリのゼロコピー最適化 - Google Patents

Select*クエリのゼロコピー最適化 Download PDF

Info

Publication number
JP7277675B2
JP7277675B2 JP2022568972A JP2022568972A JP7277675B2 JP 7277675 B2 JP7277675 B2 JP 7277675B2 JP 2022568972 A JP2022568972 A JP 2022568972A JP 2022568972 A JP2022568972 A JP 2022568972A JP 7277675 B2 JP7277675 B2 JP 7277675B2
Authority
JP
Japan
Prior art keywords
query
data
data block
determining
sub
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
JP2022568972A
Other languages
English (en)
Other versions
JP2023518118A (ja
Inventor
エダラ,パバン
ティガニ,ジョーダン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of JP2023518118A publication Critical patent/JP2023518118A/ja
Application granted granted Critical
Publication of JP7277675B2 publication Critical patent/JP7277675B2/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
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24535Query rewriting; Transformation of sub-queries or views
    • 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
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24537Query rewriting; Transformation of operators
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • 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/2445Data retrieval commands; View definitions

Landscapes

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

Description

技術分野
本開示は、データベース操作のゼロコピー最適化についての技術に関する。
背景
分散ストレージ(すなわち、クラウドストレージ)は益々普及しており、ストレージコストは下がっており、クラウドデータベースのサイズは劇的に大きくなっている。たとえば、テーブルは、サイズが大きくない場合、テラバイトであることが多い。これらのテーブルに対する操作(たとえば、テーブルの複製)は、多くの場合、システムリソースと時間との両方において、かなりのコストがかかる。SQL(Structured Query Language)は、リレーショナルデータベース管理システムの標準言語である。ユーザは、多くの場合、クラウドデータベースとやり取りするためのSQLクエリを入念に作成する。
概要
本開示の態様は、方法を提供する。この方法は、データ処理ハードウェアでおいて、データ処理ハードウェアと通信しているメモリハードウェア上に格納された複数のデータブロックを含む第1のテーブルに対して行う操作を指定するクエリを受信することを含み、第1のテーブルにある各データブロックは、データブロックを参照するテーブルの数を示す参照数を含む。また、この方法は、データ処理ハードウェアが、クエリが指定した操作が第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定することを含む。方法は、クエリが指定した操作が第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定したことに応答して、第2のテーブルにコピーされた第1のテーブルにある複数のデータブロックのデータブロックごとに、データ処理ハードウェアが、第1のテーブルにあるデータブロックに対応付けられた参照数をインクリメントすることと、データ処理ハードウェアが、第2のテーブルにコピーされた対応するデータブロックの参照を、第2のテーブルのメタデータに追加することとをさらに含む。
本開示の実施態様は、下記のオプションの特徴のうち1つ以上を含み得る。いくつかの実施態様では、第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることは、複数のデータブロックを複製しないで、第1のテーブルにある各データブロックを第2のテーブルにコピーすることを含む。いくつかの例では、クエリは、SELECT*SQL(Structured Query Language)ステートメントを含む。
いくつかの構成では、クエリが指定した操作が第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定することは、クエリの代数化の間に、クエリのサブ操作を決定することと、決定したクエリのサブ操作が少なくとも1つのデータブロックをメモリハードウェアに書き込むためのサブ操作と、少なくとも1つのデータブロックをメモリハードウェアから読み出すためのサブ操作とを含む、と決定することとを含む。オプションで、少なくとも1つのデータブロックをメモリハードウェアに書き込むためのサブ操作は、マテリアライズサブ操作を含む。いくつかの例では、少なくとも1つのデータブロックをメモリハードウェアから読み出すためのサブ操作は、スキャンサブ操作を含む。オプションで、決定したクエリのサブ操作が少なくとも1つのデータブロックを読み出すためのスキャンサブ操作を含む、と決定することは、決定したクエリのサブ操作が少なくとも1つのデータブロックを読み出すためのスキャンサブ操作を1つだけ含む、と決定することを含む。
いくつかの例では、クエリが第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定することは、クエリに対応付けられる列のリストの順序を決定することと、第1のテーブルの列の順序を決定することと、クエリに対応付けられる列のリストの順序が第1のテーブルの列の順序と同じである、と決定することとを含む。いくつかの実施態様では、方法は、クエリが第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定しながら、データ処理ハードウェアが、第1のテーブルに対するクエリが指定した操作の実行を開始することをさらに含む。オプションで、方法は、クエリが第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定したことに応答して、データ処理ハードウェアが、第1のテーブルに対するクエリの実行を停止することをさらに含む。いくつかの実施態様では、方法は、動作は、複数のデータブロックの各データブロックの参照を第2のテーブルのメタデータに追加した後に、データ処理ハードウェアにおいて、第1のテーブルを削除する要求を受信することと、データ処理ハードウェアが、第1のテーブルの各データブロックの参照数をデクリメントすることとをさらに含む。
本開示の別の態様は、データ処理ハードウェアと、データ処理ハードウェアと通信しているメモリハードウェアとを備えるシステムを提供する。メモリハードウェアは、命令を格納し、命令は、データ処理ハードウェア上で実行されると、データ処理ハードウェアに動作を実行させる。動作は、データ処理ハードウェアと通信しているメモリハードウェア上に格納された複数のデータブロックを含む第1のテーブルに対して行う操作を指定するクエリを受信することを含み、第1のテーブルにある各データブロックは、データブロックを参照するテーブルの数を示す参照数を含む。動作は、クエリが指定した操作が第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定することを含む。クエリが指定した操作が第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定したことに応答して、第2のテーブルにコピーされた第1のテーブルにある複数のデータブロックのデータブロックごとに、動作は、第1のテーブルにあるデータブロックに対応付けられた参照数をインクリメントすることと、第2のテーブルにコピーされた対応するデータブロックの参照を、第2のテーブルのメタデータに追加することとを含む。
本開示のこの態様は、下記のオプションの特徴のうち1つ以上を含み得る。いくつかの実施態様では、第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることは、複数のデータブロックを複製しないで、第1のテーブルにある各データブロックを第2のテーブルにコピーすることを含む。いくつかの例では、クエリは、SELECT*SQL(Structured Query Language)ステートメントを含む。
いくつかの構成では、クエリが指定した操作が第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定することは、クエリの代数化の間に、クエリのサブ操作を決定することと、決定したクエリのサブ操作が少なくとも1つのデータブロックをメモリハードウェアに書き込むためのサブ操作と、少なくとも1つのデータブロックをメモリハードウェアから読み出すためのサブ操作とを含む、と決定することとを含む。オプションで、少なくとも1つのデータブロックをメモリハードウェアに書き込むためのサブ操作は、マテリアライズサブ操作を含む。いくつかの例では、少なくとも1つのデータブロックをメモリハードウェアから読み出すためのサブ操作は、スキャンサブ操作を含む。いくつかの実施態様では、決定したクエリのサブ操作が少なくとも1つのデータブロックを読み出すためのスキャンサブ操作を含む、と決定することは、決定したクエリのサブ操作が少なくとも1つのデータブロックを読み出すためのスキャンサブ操作を1つだけ含む、と決定することを含む。
いくつかの例では、クエリが第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定することは、クエリに対応付けられる列のリストの順序を決定することと、第1のテーブルの列の順序を決定することと、クエリに対応付けられる列のリストの順序が第1のテーブルの列の順序と同じである、と決定することとを含む。いくつかの例では、動作は、クエリが第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定しながら、第1のテーブルに対するクエリが指定した操作の実行を開始することをさらに含む。オプションで、動作は、クエリが第1のテーブルにある複数のデータブロックを第2のテーブルにコピーすることを含む、と決定したことに応答して、第1のテーブルに対するクエリの実行を停止することをさらに含む。いくつかの実施態様では、動作は、複数のデータブロックの各データブロックの参照を第2のテーブルのメタデータに追加した後に、第1のテーブルを削除する要求を受信することと、第1のテーブルの各データブロックの参照数をデクリメントすることとをさらに含む。
1つ以上の本開示の実施態様の詳細を、添付の図面および以下の説明に記載する。その他の態様、特徴、および利点は、本明細書および図面ならびに添付の特許請求の範囲から明らかになるであろう。
テーブルのクエリを最適化するための例示的なシステムの概略図である。 ゼロコピー最適化を用いてデータブロックを第1のテーブルから第2のテーブルにコピーする概略図である。 ゼロコピー最適化を用いてデータブロックを第1のテーブルから第2のテーブルにコピーする概略図である。 ゼロコピー最適化を用いてデータブロックを第1のテーブルから第2のテーブルにコピーする概略図である。 クエリ操作の概略図である。 テーブルの列のリストを比較するためのクエリオプティマイザの例示的な構成要素の概略図である。 テーブルのクエリを最適化する方法の動作の例示的な構成のフローチャートである。 本明細書において説明するシステムおよび方法を実現するために用いられ得る例示的なコンピューティングデバイスの概略図である。
様々な図面にある同じ参照記号は、同じ要素を示す。
詳細な説明
巨大サイズのテーブルやデータベースを格納するために、分散ストレージ(すなわち、クラウドストレージ)が多く使われるようになった。テーブルのサイズが数テラバイト、さらには数ペタバイトであって、何百万という数のエントリ(すなわち、データブロック)を含むことは、珍しいことではない。これらのテーブルを問い合わせること(すなわち、読み出し、書き込み)は、極めて多くのリソースを必要とする場合が多い。非常に多くのリソースを必要とする操作の例として、テーブルの一部またはすべてを複製またはコピーすることがある。いくつかのフォールトトレラントデータベースでは、データベースは、大量のクエリ出力に対応するためにデータのコピーを行う。たとえば、ユーザは、第1のテーブル全体を選択して第2のテーブルに読み出すおよび/または複製するためのSQL(Structured Query Language)クエリのSELECT*を利用し得る。このクエリは、通常、テーブルの行を含んだ各データブロックを読み出す(ディスク帯域幅およびネットワーク帯域幅を消費する)ことと、これらの行をオンディスクフォーマットからインメモリフォーマットにデコードすることとを必要とする。続いて、これらの行は、オンディスクフォーマットの新しいブロックとしてエンコードされ、計算資源をさらに消費する。さらには、これらの新しいデータブロックは元のデータブロックから完全に独立しているので、新たに生成されたデータブロックが、データを格納するために必要なディスク容量を増やしてしまう。いくつかのシナリオでは、最良のレイアウトを決定するために、データのフルシャッフルが行われる。
本明細書における実施態様は、メモリハードウェア上に格納されたデータブロックのテーブルに関するクエリを受信するクエリオプティマイザを対象とする。クエリオプティマイザは、クエリがテーブルにある複数のデータブロックを新しいテーブルにコピーすることを含む、と決定する。コピーされた各データブロックについて、クエリオプティマイザは、データブロックに対応付けられた参照数をインクリメントして、新しいテーブルにコピーされた各データブロックの参照を、当該新しいテーブルのメタデータに追加する。よって、重複するストレージコストをO(1)操作を用いることでなくすことによって、クエリオプティマイザは、このようなクエリのレイテンシを大幅に改善することができる。クエリオプティマイザは、元のテーブルのメタデータを指すポインタを格納するので、コストのかかるディスク書き込みと、追加のストレージコストとのすべてをなくすことができる。
ここで、図1を参照すると、いくつかの実施態様では、例示的なシステム100は、ネットワーク112を経由して遠隔システム140と通信している各ユーザ12に対応付けられたユーザデバイス10を備える。ユーザデバイス10は、デスクトップワークステーション、ラップトップワークステーション、またはモバイル機器(すなわち、スマートフォン)など、任意のコンピューティングデバイスに相当し得る。ユーザデバイス10は、コンピューティングリソース18(たとえば、データ処理ハードウェア)および/またはストレージリソース16(たとえば、メモリハードウェア)を含む。
遠隔システム140は、コンピューティングリソース144(たとえば、データ処理ハードウェア)および/またはストレージリソース146(たとえば、メモリハードウェア)を含む、スケーラブルな/柔軟なコンピューティングリソース142を有する1つのコンピュータ、複数のコンピュータ、または分散システム(たとえば、クラウド環境)であり得る。ストレージリソース146の上にデータストア150(すなわち、遠隔記憶装置)が重ねられており、クライアントまたはコンピューティングリソース144のうち1つ以上によるストレージリソース146のスケーラブルな使用を可能にしている。データストア150は、データ構造体158(たとえば、テーブル158)内に格納された複数のデータブロック152、152a~152nを格納するように構成される。
各データブロック152は、データブロック152(すなわち、テーブル158にあるデータブロック152を含む)を参照する異なるテーブル158の数を示す参照数154、154a~154nを含む。たとえば、参照数154が「1」であるデータブロック152は、データブロック152を参照する(すなわち、指す)テーブルを1つ有する。同様に、参照数154が「2」であるデータブロック152は、データブロック152を参照するテーブルを2つ有する。ここでは、2つの別個のテーブル158は、各々、同じデータブロック152を含む。よって、データブロック152がデータストア150の物理メモリの1つの場所を占め得るが、複数のテーブルが同じデータブロック152を含み得る。これにより、データブロック152がデータストア150に重複した場所を必要とすることなく、データブロック152が複数のテーブル158に同時に存在できるようになる。
遠隔システム140は、ネットワーク112を経由してユーザデバイス10からクエリ20を受信するように構成されたクエリプロセッサ110を実行する。クエリ20は、クエリプロセッサ110がデータストア150のテーブル158上で動作するための操作を指定する。図示した例では、クエリ20は、複数のデータブロック152を第1のテーブル158から第2のテーブル158にコピーすることを含むコピー操作を指定する。たとえば、クエリ20は、「SELECT*」ステートメントと送信元テーブルおよび宛先テーブル158のそれぞれを指定するSQLコマンドを含む。
従来の技術は、時間と計算資源との両方において非常にコストがかかる方法でSELECT*クエリを実行する。たとえば、これらの技術は、テーブル158の列を含んだ各データブロック152を読み出す。そこから、当該技術は、通常、各行をオンディスクフォーマット(不揮発性メモリ上に格納するために最適化する)からインメモリフォーマットにデコードする(揮発性メモリに格納するために最適化される)ことを含む。その後、データブロックは、複製されてから、エンコードされてオンディスクフォーマットに戻されて、不揮発性メモリに再び格納される。さらには、データの所望のレイアウトによっては、当該技術は、全行のフルシャッフルをさらに含み得る。
クエリプロセッサ110は、クエリエグゼキュータ120と、クエリオプティマイザ400との両方を備える。クエリエグゼキュータ120は、クエリ20を受信して、クエリ20が指定する操作を、従来技術を用いて実行する。たとえば、クエリエグゼキュータ120は、クエリ20(たとえば、SQLコマンド)をパースして代数化(algebrize)し、1つ以上のテーブル158に対してクエリ20を実行する。クエリ20に基づいて、クエリエグゼキュータ120は、データストア150上に格納された1つ以上のテーブル158からの1つ以上のデータブロック152に対する読み出し操作および/または書き込み操作を実行し得る。
クエリエグゼキュータ120と平行して、クエリオプティマイザ400もクエリ20を受信する。いくつかの例では、クエリオプティマイザ400は、第1のテーブル158aの複数のデータブロック152を第2のテーブル158bにコピーする操作をクエリ20が指定すると決定する(図2A~図2C)。たとえば、クエリ20は、SQLステートメント「INSERT INTO table2 SELECT*table1」を含む。ここでは、「table1」は、第1のテーブル158aを表し、「table2」は、第2のテーブル158bを表す。
データブロック152を第1のテーブル158aから第2のテーブル158bにコピーする操作をクエリ20が含むとクエリオプティマイザ400が決定した場合、クエリプロセッサ110は、第2のテーブル158bにコピーされた複数のデータブロック152のデータブロック152ごとに、データブロック152の参照数154をインクリメントする。詳細は後述するが、参照数154をインクリメントすることは、追加テーブル158(この例では、第2のテーブル158b)もそれぞれのデータブロック152を含んでいることを示す。これに加えて、クエリプロセッサ110は、第2のテーブル158bにコピーされた複数のデータブロック152の各データブロック152の参照160、160a~160nを、第2のテーブル158bのメタデータ159、159bに追加する。よって、各テーブル158は、テーブル158に対応付けられたメタデータ159内に、テーブル158内に格納された各データブロック152の場所を示す参照160を含む。各データブロック152は、データブロック152が対応付けられているテーブル158の数を示す参照数154を含む。
いくつかの実施態様では、複数のデータブロック152を第1のテーブルから第2のテーブルにコピーするコピー操作をクエリ20が指定するとクエリオプティマイザ400が決定すると同時に、クエリエグゼキュータ120は、上述した従来技術を用いて、クエリ20が指定したコピー操作の実行を開始する。すなわち、クエリ待ち時間(すなわち、クエリ20が実行するためにどのくらいの時間がかかるのか)に影響を与えてしまうことを回避するために、クエリプロセッサ110は、クエリ20が指定したコピー操作の実行(すなわち、クエリエグゼキュータ120を用いて)を、標準技術を用いて開始し、それと平行して、(たとえば、クエリオプティマイザ400を用いて)クエリ20が最適化の候補である(たとえば、クエリ20がSELECT*ステートメントを含む)かどうかを判断する。オプションで、複数のデータブロック152を第1のテーブル158aから第2のテーブル158bにコピーすることをクエリ20が含むのでクエリ20が最適化の候補である、とクエリオプティマイザ400が決定した後、クエリプロセッサ110は、クエリエグゼキュータ120によるクエリ20の実行を停止する。たとえば、クエリオプティマイザ400は、クエリエグゼキュータ120に停止メッセージ132を送信して、クエリ20の実行を停止させる。クエリオプティマイザ400は、続いてまたは同時に、クエリ20に代わって実行する最適化されたクエリまたは操作134を、クエリエグゼキュータ120に送信し得る。最適化された操作134は、対応付けられたそれぞれのデータブロック152の参照数154をインクリメントすることを単に含む、クエリエグゼキュータ120がここで実行する「シャローコピー」を指定し得る。すなわち、クエリ20がSELECT*操作を含むと決定したことに応答して、クエリオプティマイザ130は、データブロック152のそれぞれの参照数154をインクリメントすることと、新しいテーブル158のメタデータ159に参照160を追加することを含むよう、当該操作を最適化する。クエリオプティマイザ130は、クエリエグゼキュータ120による現在のクエリ20の実行を停止して、元の操作の代わりに、最適化された操作134を用い得る。クエリエグゼキュータ120は、最適化された操作134の実行で処理を実行し得る。
よって、クエリプロセッサ110は、「シャローコピー」を効果的に実行して、データサイズの点で演算をO(行数)からO(1)に変換する。クエリの最適化はメタデータの操作であるので、最適化によってディスク上にデータブロックが複製されることはなく、行をデコードまたはエンコードする際にCPUを消費してしまうこともない。大規模なテーブルについては、これにより、クエリ最適化を、データをディープコピーする単純な技術よりも桁違いに高速化できる。
ここで、図2A~図2Cを参照すると、図示した例では、第1のテーブル158aは、データブロック152a~152nを含んでおり、各データブロックは、データストア150(図2A)上の1つの物理的場所に格納されている。テーブル158aの各データブロック152は、関連する参照数154、154a~154nを含む。ここでは、テーブル158aだけが各データブロック152を含んだ唯一のテーブル158なので、各データブロック152の対応付けられた参照数154は、「1」である。各データブロック152への参照160は、第1のテーブル158aがデータブロック152に含まれた各参照を追跡できるよう、第1のテーブル158aに対応付けられたメタデータ159(図示せず)内に格納される。
図2Bでは、クエリ20は、テーブル158aの各データブロック152を第2のテーブル158bにコピーするよう要求する。ここでも、各データブロック152は、データストア150上の1つの物理的場所に格納される。しかしながら、この場合、クエリプロセッサ110は、各データブロック152の対応付けられた参照数154を、「2」にインクリメントする。これは、各データブロック152が、今では2つのテーブル158(すなわち、第1のテーブル158aおよび第2のテーブル158b)内に含まれていることを表す。第1のテーブル158aと同様に、各データブロック152への参照160は、第2のテーブル158bがデータブロック152に含まれた各参照を追跡できるよう、第2のテーブル158bに対応付けられたメタデータ159に格納される。
現在の実施例では、データが不必要に複製されないように、第1のテーブル158aおよび第2のテーブル158bの両方がデータストア150上に格納された同じデータブロック152を参照または指している。後続のクエリ20が第1のテーブル158aおよび第2のテーブル158bのデータブロック152のうち1つ以上を変更すると、クエリプロセッサ110は、単に、データブロック152に対応付けられたデータを変更し得、テーブル158aおよび158bの両方は、同期を維持する。しかしながら、後続のクエリ20が、第1のテーブル158aまたは第2のテーブル158bのうち、たった1つのテーブルのデータブロック152のうち1つ以上を変更する場合、クエリプロセッサ110は、各テーブルが独立したデータブロック152を有するよう、データブロック152をデータストア150上の別の場所に複製し、それに従って参照160および参照数154を更新し、その後、然るべきデータブロック152を変更し得る。
ここで、図2Cを参照すると、いくつかの例では、クエリプロセッサ110は、第1のテーブル158aを削除する要求を含むクエリ20を受信する。これに応じて、クエリオプティマイザ400は、第1のテーブル158aの各データブロック152の参照数154をデクリメントする。これにより、当該例における各データブロック152の参照数は、「1」に戻される。しかしながら、ここでは、各データブロック152は、第2のテーブル152bにのみ含まれている。ここで、クエリプロセッサ110は、第1のテーブル158aを削除し得る。図示した例では第1のテーブル158aが削除されたが、第2のテーブル158bも同様に削除できる。第1のテーブル158aが既に削除された後に後続のクエリ20が第2のテーブル158bを削除すると、クエリオプティマイザ400は、ここでも、第2のテーブル158bにある各データブロック152の参照数154をデクリメントする。このシナリオでは、参照数154は、現在「0」に等しいので、各データブロック152はもはやテーブル158に対応付けられてはおらず、ガベージコレクションの対象としてマークされ得る(すなわち、データストア150から完全に削除される)。
ここで、図3を参照すると、いくつかの実施態様では、クエリプロセッサ110は、クエリ20を受信してクエリ(たとえば、SQLステートメント)をデータストアの物理レベルで利用できる下位式(low level expression)320に変えるまたは変換するクエリパーサおよびバインダ310を含む。下位式320は、1つ以上の(一般に、複数の)サブ操作330、330a~330nを含む。これらのサブ操作は、順次実行されると、最初のクエリ20が指定した操作を行う。いくつかの例では、クエリ20は、第1のテーブル158の各データブロック152を第2のテーブル158にコピーするためのSELECT*SQLステートメントを含む。複数のデータブロック152を1つのテーブル158から別のテーブル158にコピーする要求をクエリ20が含む(よって、最適化にふさわしい)と決定するために、クエリオプティマイザ400は、代数化(algebrization)(バインディングとも称される)の間に、クエリ20のサブ操作330を決定する。これらのサブ操作330に基づいて、クエリオプティマイザ400は、少なくとも1つのデータブロック152をデータストア150に書き込むためのサブ操作330と、少なくとも1つのデータブロック152をデータストア150から読み出すためのサブ操作330とをクエリ20が含むと決定し得る。いくつかの例では、少なくとも1つのデータブロック152をデータストア150に書き込むためのサブ操作330は、マテリアライズサブ操作330である。データストア150から少なくとも1つのデータブロック152を読み出すためのサブ操作330は、スキャンサブ操作330であり得る。
オプションで、クエリオプティマイザ400は、マテリアライズサブ操作330がスキャンサブ操作330の直ぐ上にある場合、クエリ20がSELECT*ステートメントを含むと決定する。すなわち、下位式320のサブ操作330の実行順序では、マテリアライズサブ操作330の直前にスキャンサブ操作330が存在していることは、クエリ20がSELECT*ステートメントを含むことをクエリオプティマイザ400に示す。いくつかの実施態様では、クエリオプティマイザ400は、スキャンサブ操作330が1つしかないように徹底するので、入力テーブル158も1つだけになる。すなわち、少なくとも1つのデータブロック152を読み出すためのスキャン操作をクエリ20のサブ操作330が含むとクエリオプティマイザ400が決定すると、いくつかの例では、クエリオプティマイザ400は、少なくとも1つのデータブロック152を読み出すためのスキャンサブ操作330をクエリ20のサブ操作330が1つだけ含むと決定する。
ここで、図4を参照すると、1つのテーブル158から別のテーブル158にデータブロック152をコピーすることを含むSELECT*ステートメントまたはその他のクエリ20の要素の存在をさらに検出するために、いくつかの実施態様では、クエリオプティマイザ400は、クエリ20に対応付けられる列420、420a~420nのリストの順序を決定する。すなわち、クエリ20は、パースとバインディング(図3)の後に、操作するようクエリプロセッサ110にクエリ20が指示している列420のリストを含む。たとえば、列420のリストは、データブロック152がコピーされる第2のテーブル158(すなわち、宛先テーブル158)に対応付けられる列420を含み得る。クエリ20がSELECT*ステートメントを含む場合、通常、クエリ20は、テーブル158のすべての列を順番に含むことになる。また、クエリオプティマイザ400は、第1のテーブル158(すなわち、元の/ソーステーブル158)の列430の順序を決定する。クエリオプティマイザ400は、列比較部(comparer)410において、クエリ20に対応付けられる列420のリストの順序が第1のテーブル158aの列430の順序と同じであると判断する。列420、430のリストが一致した場合、クエリ20は、第1のテーブル158a全体を第2のテーブル158bにコピーする意図を含み得る。よって、クエリ20(パースすることが困難であり得る)において明示的にSELECT*ステートメントを検索する代わりに、クエリプロセッサ110は、クエリ20が作成した列420のリストを解析し、このリストを第1のテーブル158aにある列430のリストと比較する。
いくつかの実施態様では、クエリプロセッサ110は、フィルタを含むクエリ20を最適化する。たとえば、テーブル158は、タイムスタンプの列「ts」を含む。クエリ20は、SQLステートメント「INSERT INTO new_table SELECT* from T WHERE DATE(ts)=‘2020-01-01’」を含み得る。この例では、クエリプロセッサ110は、クエリ20に対応するデータブロック152のみをフェッチして処理(たとえば、対応付けられた参照数154をインクリメント)し得る。すなわち、クエリプロセッサ110は、テーブル158の全体のほかにテーブル158の一部のみをコピーするクエリ20を最適化し得る。
図5は、テーブルのクエリを最適化する方法500の動作の例示的な構成のフローチャートである。方法500は、動作502において、データ処理ハードウェア144と通信しているメモリハードウェア150上に格納された複数のデータブロック152を含む第1のテーブル158aに対して実行する操作を指定するクエリ20を、データ処理ハードウェア144において受信するステップを含む。第1のテーブル158aにある各データブロック152は、データブロック152を参照するテーブル158(第1のテーブル158aを含む)の数を示す参照数154を含む。動作504では、方法500は、第1のテーブル158aにある複数のデータブロック152を第2のテーブル158bにコピーする操作をクエリ20が指定する、とデータ処理ハードウェア144が決定するステップを含む。
複数のデータブロック152を第2のテーブル158bにコピーする操作をクエリ20が指定すると決定したことに応答して、第2のテーブル158bにコピーされた第1のテーブル158aにある複数のデータブロック152のデータブロック152ごとに、方法500は、動作506において、データ処理ハードウェア144が、第1のテーブル158aにあるデータブロック152に対応付けられた参照数154をインクリメントするステップと、動作508において、データ処理ハードウェア144が、第2のテーブル158bにコピーされた対応するデータブロック152の参照160を第2のテーブル158bのメタデータ159に追加するステップとを含む。
図6は、本明細書に記載のシステムおよび方法を実現するために用いられ得る例示的なコンピューティングデバイス600の概略図である。コンピューティングデバイス600は、ラップトップ、デスクトップ、ワークステーション、携帯情報端末、サーバ、ブレードサーバ、メインフレーム、およびその他の妥当なコンピュータなど、様々な形態のデジタルコンピュータを表すよう意図される。本明細書に示す構成要素、それらの接続および関係、ならびにそれらの機能は、例示に過ぎず、本明細書において説明および/またはクレームされた発明の実施態様を限定するものではない。
コンピューティングデバイス600は、プロセッサ610と、メモリ620と、記憶装置630と、メモリ620および高速拡張ポート650に接続された高速インタフェース/コントローラ640と、低速バス670および記憶装置630に接続された低速インタフェース/コントローラ660とを備える。構成要素610、620、630、640、650、および660の各々は、様々なバスを用いて互いに接続されており、共通のマザーボード上に実装され得、またはその他の方法で適宜実装され得る。プロセッサ610は、コンピューティングデバイス600内で実行するための命令を処理することができ、当該命令は、高速インタフェース640に連結されたディスプレイ680など、外付けの入出力装置上のGUI(グラフィカルユーザインターフェース)のためのグラフィック情報を表示するためのメモリ620に格納された命令または記憶装置630上に格納された命令を含む。その他の実施態様では、複数のプロセッサおよび/または複数のバスが複数のメモリおよび複数種類のメモリとともに適宜用いられ得る。また、(たとえば、サーババンク、ブレードサーバ群、または多重プロセッサシステムなどとしての)必要な動作の一部を各々が提供する複数のコンピューティングデバイス600が接続されてもよい。
メモリ620は、非一時的にコンピューティングデバイス600内に情報を格納する。メモリ620は、コンピュータ読み取り可能な媒体、揮発性記憶装置(複数可)、または非揮発性記憶装置(複数可)であってもよい。非一時的なメモリ620は、プログラム(たとえば、一連の命令)またはデータ(たとえば、プログラム状態情報)をコンピューティングデバイス600が使用するために一時的または恒久的に格納するために用いられる物理デバイスであってもよい。不揮発性メモリとして、フラッシュメモリおよびROM(Read-Only Memory)/PROM(プログラマブルROM)/EPROM(消去可能なプログラマブルROM)/EEPROM(電気的に消去可能なプログラマブルROM)(たとえば、通常、ブートプログラムなどのファームウェアのために使用される)などが挙げられるが、これらに限定されない。揮発性メモリとして、RAM(Random Access Memory)、DRAM(ダイナミックRAM)、SRAM(スタティックRAM)、PCM(相変化メモリ)、およびディスクまたはテープなどが挙げられるが、これらに限定されない。
記憶装置630は、コンピューティングデバイス600用の大容量ストレージを提供できる。いくつかの実施態様では、記憶装置630は、コンピュータ読み取り可能な媒体である。様々な異なる実施態様では、記憶装置630は、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置、またはテープ装置であってもよく、フラッシュメモリもしくはその他の同様の固体メモリ装置であってもよく、ストレージエリアネットワークもしくはその他の構成に含まれる装置を含む装置のアレイであってもよい。その他の実施態様では、コンピュータプログラムプロダクトが情報担体で有形に具現化される。また、このコンピュータプログラムプロダクトは、命令を含んでおり、当該命令は、実行されると、上述した方法など、1つ以上の方法を実行する。情報担体は、メモリ620、記憶装置630、またはプロセッサ610上のメモリなど、コンピュータ読み取り可能または機械読み取り可能な媒体である。
高速コントローラ640は、コンピューティングデバイス600のための多くの帯域幅を必要とする動作を管理し、低速コントローラ660は、より低い帯域幅を多く必要とする動作を管理する。このような役割の割振りは、例示に過ぎない。いくつかの実施態様では、高速コントローラ640は、(たとえば、グラフィックスプロセッサまたはアクセラレータを通じて)メモリ620、ディスプレイ680に連結され、様々な拡張カード(図示せず)を受け付け得る高速拡張ポート650に連結される。いくつかの実施態様では、低速コントローラ660は、記憶装置630および低速拡張ポート690に連結される。様々な通信ポート(たとえば、USB、Bluetooth(登録商標)、Ethernet(登録商標)、ワイヤレスEthernet(登録商標))を含み得る低速拡張ポートは、キーボード、ポインティングデバイス、スキャナなどの1つ以上の入出力装置、または、スイッチもしくはルータなどのネットワーク装置に、たとえば、ネットワークアダプタを通じて連結されてもよい。
コンピューティングデバイス600は、図に示すような複数の異なる形態で実現されてもよい。たとえば、1つの標準サーバ600aとして実現されてもよく、複数回実現されてこのようなサーバ600aの群とされてもよく、ラップトップコンピュータ600bとして実現されてもよく、ラックサーバシステム600cの一部として実現されてもよい。
本明細書において説明したシステムおよび技術の様々な実施態様は、デジタル電子回路および/もしくは光学回路、集積回路、専用に設計されたASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、ならびに/またはそれらの組合せで実現することができる。これらの様々な実施態様は、少なくとも1つのプログラム可能なプロセッサを備えるプログラム可能なシステム上で実行可能および/または解釈可能な1つ以上のコンピュータプログラムでの実装を含み得る。当該少なくとも1つのプログラム可能なプロセッサは、特定用途プロセッサであってもよく、汎用プロセッサであってもよく、ストレージシステム、少なくとも1つの入力装置、および少なくとも1つの出力装置に連結されてそれらとデータおよび命令を送受信してもよい。
ソフトウェアアプリケーション(すなわち、ソフトウェアリソース)とは、コンピューティングデバイスにタスクを実行させるコンピュータソフトウェアを指し得る。いくつかの例では、ソフトウェアアプリケーションを、「アプリケーション」、「アプリ」、または「プログラム」と称する場合がある。アプリケーションとして、システム診断アプリケーション、システム管理アプリケーション、システムメンテナンスアプリケーション、文書処理アプリケーション、表計算アプリケーション、メッセージングアプリケーション、メディアストリーミングアプリケーション、ソーシャルネットワーキングアプリケーション、およびゲームアプリケーションなどが挙げられるが、これらに限定されない。
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、またはコードとしても知られる)は、プログラム可能なプロセッサ用の機械命令を含み、上位の手続き形言語および/もしくはオブジェクト指向プログラミング言語で実現でき、ならびに/またはアセンブリ言語/機械言語で実現できる。「機械読み取り可能な媒体」および「コンピュータ読み取り可能な媒体」という用語は、本明細書において使用するとき、プログラム可能なプロセッサに機械命令および/またはデータを提供するために用いられる任意のコンピュータプログラムプロダクト、非一時的なコンピュータ読み取り可能な媒体、装置、および/またはデバイス(たとえば、磁気ディスク、光学ディスク、メモリ、PLD(プログラマブルロジックデバイス))を指し、機械読み取り可能な信号として機械命令を受け付ける機械読み取り可能な媒体を含む。「機械読み取り可能な信号」という用語は、プログラム可能なプロセッサに機械命令および/またはデータを提供するために用いられる任意の信号を指す。
入力データに対して操作を行って出力を生成することによって機能を実行するための1つまたは複数のコンピュータプログラムを1つまたは複数のプログラマブルプロセッサ(データ処理ハードウェアとも称される)が実行することによって、本明細書において説明した処理および論理フローが実行され得る。また、当該処理および論理フローは、専用の論理回路、たとえば、FPGA(Field Programmable Gate Array)またはASIC(特定用途向け集積回路)によって実行され得る。コンピュータプログラムの実行に適したプロセッサは、一例として、汎用マイクロプロセッサと専用マイクロプロセッサの両方、およびあらゆる種類のデジタルコンピュータが備える任意の1つ以上のプロセッサを含む。一般に、プロセッサは、ROM(Read Only Memory)もしくはRAM(Random Access Memory)、またはその両方から命令およびデータを受け取る。コンピュータを構成する必須の構成要素は、命令を実行するためのプロセッサと、命令およびデータを格納するための1つ以上のメモリ素子である。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置、たとえば、磁気ディスク、光磁気ディスク、または光ディスクを備える、または、このような1つ以上の大容量記憶装置に操作可能に接続されて、データの受信、送信、もしくはその両方を行う。しかしながら、コンピュータは、このような機器を有する必要はない。コンピュータプログラム命令およびデータを格納するのに適した読み取り可能な媒体は、一例として、EPROM、EEPROM、およびフラッシュメモリ素子などの半導体メモリ素子;内蔵ハードディスクまたはリムーバブルディスクなどの磁気ディスク;光磁気ディスク;およびCD-ROMおよびDVD-ROMディスクを含む、すべての形態の不揮発性メモリ、媒体ならびにメモリ素子を含む。プロセッサおよびメモリは、専用の論理回路によって補ったり、専用の論理回路に内蔵したりすることができる。
ユーザとのやり取りを可能にするために、本開示の1つ以上の態様は、ユーザに情報を表示するための表示装置、たとえば、CRT(ブラウン管)、LCD(液晶ディスプレイ)モニタ、またはタッチスクリーンと、オプションで、ユーザがコンピュータに入力を行えるようにするキーボードおよびポインティングデバイス、たとえば、マウスまたはトラックボールとを備えたコンピュータ上に実装され得る。その他の種類のデバイスを使ってユーザとやり取りすることもでき、たとえば、ユーザに提供されるフィードバックは、たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバックなど、あらゆる形式の感覚フィードバックであり得、ユーザからの入力は、音響入力、音声入力、触覚入力など、あらゆる形式で受け付けられ得る。これに加えて、コンピュータは、ユーザが使用するデバイスと文書を送受信すること、たとえば、ウェブブラウザから受信した要求に応答してユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、ユーザとやり取りすることができる。
いくつかの実施態様を説明したが、本開示の趣旨および範囲を逸脱することなく、様々な変更がなされてもよいことが理解されるだろう。したがって、その他の実施態様も、添付の特許請求の範囲に含まれる。

Claims (23)

  1. コンピュータにより実現される方法(500)であって、データ処理ハードウェア(144)上で実行されると、前記データ処理ハードウェア(144)に動作を実行させ、前記動作は、
    前記データ処理ハードウェア(144)と通信しているメモリハードウェア(146)上に格納された複数のデータブロック(152)を含む第1のテーブル(158a)に対して行う操作を指定するクエリ(20)を受信することを含み、前記第1のテーブル(158a)にある各データブロック(152)は、前記データブロック(152)を参照するテーブル(158)の数を示す参照数(154)を含み、前記動作は、さらに、
    前記クエリ(20)が指定した前記操作が前記第1のテーブル(158a)にある前記複数のデータブロック(152)を第2のテーブル(158b)にコピーすることを含む、と決定することと、
    前記クエリ(20)が指定した前記操作が前記第1のテーブル(158a)にある前記複数のデータブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、と決定したことに応答して、前記第2のテーブル(158b)にコピーされる前記第1のテーブル(158a)にある前記複数のデータブロック(152)の各々のデータブロック(152)ごとに、
    前記第1のテーブル(158a)にある前記各々のデータブロック(152)に対応付けられた前記参照数(154)をインクリメントすることと、
    各々のデータブロック(152)の参照(160)を、前記第2のテーブル(158b)のメタデータ(159)に追加することとを含む、方法(500)。
  2. 前記第1のテーブル(158a)にある前記複数のデータブロック(152)を前記第2のテーブル(158b)にコピーすることは、前記複数のデータブロック(152)を複製しないで、前記第1のテーブル(158a)にある各データブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、請求項1に記載の方法(500)。
  3. 前記クエリ(20)は、SELECT*SQL(Structured Query Language)ステートメントを含む、請求項1または2に記載の方法(500)。
  4. 前記クエリ(20)が指定した前記操作が前記第1のテーブル(158a)にある前記複数のデータブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、と決定することは、前記クエリ(20)の代数化の間に、
    前記クエリ(20)のサブ操作を決定することと、
    決定した前記クエリ(20)の前記サブ操作が少なくとも1つのデータブロック(152)を前記メモリハードウェア(146)に書き込むためのサブ操作と、少なくとも1つのデータブロック(152)を前記メモリハードウェア(146)から読み出すためのサブ操作とを含む、と決定することとを含む、請求項1~3のいずれか1項に記載の方法(500)。
  5. 少なくとも1つのデータブロック(152)を前記メモリハードウェア(146)に書き込むための前記サブ操作は、マテリアライズサブ操作を含む、請求項4に記載の方法(500)。
  6. 少なくとも1つのデータブロック(152)を前記メモリハードウェア(146)から読み出すための前記サブ操作は、スキャンサブ操作を含む、請求項4または5に記載の方法(500)。
  7. 決定した前記クエリ(20)の前記サブ操作が前記少なくとも1つのデータブロック(152)を読み出すための前記スキャンサブ操作を含む、と決定することは、決定した前記クエリ(20)の前記サブ操作が前記少なくとも1つのデータブロック(152)を読み出すためのスキャンサブ操作を1つだけ含む、と決定することを含む、請求項6に記載の方法(500)。
  8. 前記クエリ(20)が前記第1のテーブル(158a)にある前記複数の前記データブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、と決定することは、
    前記クエリ(20)に対応付けられる列(420)のリストの順序を決定することと、
    前記第1のテーブル(158a)の列(430)の順序を決定することと、
    前記クエリ(20)に対応付けられる列(420)の前記リストの前記順序が前記第1のテーブル(158a)の列(430)の前記順序と同じである、と決定することとを含む、請求項1~7のいずれか1項に記載の方法(500)。
  9. 前記動作は、前記クエリ(20)が前記第1のテーブル(158a)にある前記複数のデータブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、と決定しながら、前記第1のテーブル(158a)に対する前記クエリ(20)が指定した前記操作の実行を開始することをさらに含む、請求項1~8のいずれか1項に記載の方法(500)。
  10. 前記動作は、前記クエリ(20)が前記第1のテーブル(158a)にある前記複数のデータブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、と決定したことに応答して、前記第1のテーブル(158a)に対する前記クエリ(20)の実行を停止することをさらに含む、請求項9に記載の方法(500)。
  11. 前記動作は、前記複数の前記データブロック(152)の各データブロック(152)の前記参照(160)を前記第2のテーブル(158b)の前記メタデータ(159)に追加した後に、
    前記第1のテーブル(158a)を削除する要求を受信することと、
    前記第1のテーブル(158a)の各データブロック(152)の前記参照数(154)をデクリメントすることとをさらに含む、請求項1~10のいずれか1項に記載の方法(500)。
  12. システム(100)であって、
    データ処理ハードウェア(144)と、
    前記データ処理ハードウェア(144)と通信しているメモリハードウェア(146)とを備え、前記メモリハードウェア(146)は、命令を格納し、前記命令は、前記データ処理ハードウェア(144)上で実行されると、前記データ処理ハードウェア(144)に動作を実行させ、前記動作は、
    前記データ処理ハードウェア(144)と通信しているメモリハードウェア(146)上に格納された複数のデータブロック(152)を含む第1のテーブル(158a)に対して行う操作を指定するクエリ(20)を受信することを含み、前記第1のテーブル(158a)にある各データブロック(152)は、前記データブロック(152)を参照するテーブル(158)の数を示す参照数(154)を含み、前記動作は、さらに、
    前記クエリ(20)が指定した前記操作が前記第1のテーブル(158a)にある前記複数のデータブロック(152)を第2のテーブル(158b)にコピーすることを含む、と決定することと、
    前記クエリ(20)が指定した前記操作が前記第1のテーブル(158a)にある前記複数のデータブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、と決定したことに応答して、前記第2のテーブル(158b)にコピーされる前記第1のテーブル(158a)にある前記複数のデータブロック(152)の各々のデータブロック(152)ごとに、
    前記第1のテーブル(158a)にある前記各々のデータブロック(152)に対応付けられた前記参照数(154)をインクリメントすることと、
    各々のデータブロック(152)の参照(160)を、前記第2のテーブル(158b)のメタデータ(159)に追加することとを含む、システム(100)。
  13. 前記第1のテーブル(158a)にある前記複数のデータブロック(152)を前記第2のテーブル(158b)にコピーすることは、前記複数のデータブロック(152)を複製しないで、前記第1のテーブル(158a)にある各データブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、請求項12に記載のシステム(100)。
  14. 前記クエリ(20)は、SELECT*SQL(Structured Query Language)ステートメントを含む、請求項12または13に記載のシステム(100)。
  15. 前記クエリ(20)が指定した前記操作が前記第1のテーブル(158a)にある前記複数のデータブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、と決定することは、前記クエリ(20)の代数化の間に、
    前記クエリ(20)のサブ操作を決定することと、
    決定した前記クエリ(20)の前記サブ操作が少なくとも1つのデータブロック(152)を前記メモリハードウェア(146)に書き込むためのサブ操作と、少なくとも1つのデータブロック(152)を前記メモリハードウェア(146)から読み出すためのサブ操作とを含む、と決定することとを含む、請求項12~14のいずれか1項に記載のシステム(100)。
  16. 少なくとも1つのデータブロック(152)を前記メモリハードウェア(146)に書き込むための前記サブ操作は、マテリアライズサブ操作を含む、請求項15に記載のシステム(100)。
  17. 少なくとも1つのデータブロック(152)を前記メモリハードウェア(146)から読み出すための前記サブ操作は、スキャンサブ操作を含む、請求項15または16に記載のシステム(100)。
  18. 決定した前記クエリ(20)の前記サブ操作が前記少なくとも1つのデータブロック(152)を読み出すための前記スキャンサブ操作を含む、と決定することは、決定した前記クエリ(20)の前記サブ操作が前記少なくとも1つのデータブロック(152)を読み出すためのスキャンサブ操作を1つだけ含む、と決定することを含む、請求項17に記載のシステム(100)。
  19. 前記クエリ(20)が前記第1のテーブル(158a)にある前記複数の前記データブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、と決定することは、
    前記クエリ(20)に対応付けられる列(420)のリストの順序を決定することと、
    前記第1のテーブル(158a)の列(430)の順序を決定することと、
    前記クエリ(20)に対応付けられる列(420)の前記リストの前記順序が前記第1のテーブル(158a)の列(430)の前記順序と同じである、と決定することとを含む、請求項12~18のいずれか1項に記載のシステム(100)。
  20. 前記動作は、前記クエリ(20)が前記第1のテーブル(158a)にある前記複数のデータブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、と決定しながら、前記第1のテーブル(158a)に対する前記クエリ(20)が指定した前記操作の実行を開始することをさらに含む、請求項12~19のいずれか1項に記載のシステム(100)。
  21. 前記動作は、前記クエリ(20)が前記第1のテーブル(158a)にある前記複数のデータブロック(152)を前記第2のテーブル(158b)にコピーすることを含む、と決定したことに応答して、前記第1のテーブル(158a)に対する前記クエリ(20)の実行を停止することをさらに含む、請求項20に記載のシステム(100)。
  22. 前記動作は、前記複数の前記データブロック(152)の各データブロック(152)の前記参照(160)を前記第2のテーブル(158b)の前記メタデータ(159)に追加した後に、
    前記第1のテーブル(158a)を削除する要求を受信することと、
    前記第1のテーブル(158a)の各データブロック(152)の前記参照数(154)をデクリメントすることとをさらに含む、請求項12~21のいずれか1項に記載のシステム(100)。
  23. 請求項1~11のいずれか1項に記載の方法をコンピュータに実行させるための、プログラム。
JP2022568972A 2020-05-12 2021-05-08 Select*クエリのゼロコピー最適化 Active JP7277675B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202063023409P 2020-05-12 2020-05-12
US63/023,409 2020-05-12
PCT/US2021/031448 WO2021231234A1 (en) 2020-05-12 2021-05-08 Zero copy optimization for select * queries

Publications (2)

Publication Number Publication Date
JP2023518118A JP2023518118A (ja) 2023-04-27
JP7277675B2 true JP7277675B2 (ja) 2023-05-19

Family

ID=76181296

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022568972A Active JP7277675B2 (ja) 2020-05-12 2021-05-08 Select*クエリのゼロコピー最適化

Country Status (6)

Country Link
US (2) US11609909B2 (ja)
EP (1) EP4150478A1 (ja)
JP (1) JP7277675B2 (ja)
KR (1) KR20230003277A (ja)
CN (1) CN115552391B (ja)
WO (1) WO2021231234A1 (ja)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008530716A (ja) 2005-02-18 2008-08-07 オラクル・インターナショナル・コーポレイション データベースシステムにおいて報告トランザクションを処理する方法およびメカニズム

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11120067A (ja) * 1997-10-17 1999-04-30 Hitachi Ltd データの部分情報を先行して管理するデータベース処理方法
CN100390790C (zh) * 2002-05-10 2008-05-28 甲骨文国际公司 存储和访问数据,以及提高数据库查询语言语句性能的方法和机制
US7493311B1 (en) * 2002-08-01 2009-02-17 Microsoft Corporation Information server and pluggable data sources
US7243088B2 (en) * 2003-08-06 2007-07-10 Oracle International Corporation Database management system with efficient version control
US8032514B2 (en) * 2005-01-14 2011-10-04 International Business Machines Corporation SQL distinct optimization in a computer database system
EP2115593B1 (en) * 2007-01-26 2018-10-24 Intel Corporation Hierarchical immutable content-addressable memory processor
CN101908045A (zh) * 2009-06-02 2010-12-08 北京润乾信息系统技术有限公司 一种数据处理方法
CN101789024A (zh) * 2010-03-05 2010-07-28 北京润乾信息系统技术有限公司 一种数据处理方法
US8655867B2 (en) * 2010-05-13 2014-02-18 Salesforce.Com, Inc. Method and system for optimizing queries in a multi-tenant database environment
CN106611044B (zh) * 2016-12-02 2020-05-08 星环信息科技(上海)有限公司 一种sql优化方法及设备
JP7074454B2 (ja) * 2017-10-30 2022-05-24 キオクシア株式会社 計算機システムおよび制御方法
CN109086333B (zh) * 2018-07-04 2022-03-25 联想(北京)有限公司 用于数据块的处理方法和系统
CN110007869B (zh) * 2019-04-12 2020-06-30 苏州浪潮智能科技有限公司 一种内存数据拷贝方法、装置、设备及计算机存储介质

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008530716A (ja) 2005-02-18 2008-08-07 オラクル・インターナショナル・コーポレイション データベースシステムにおいて報告トランザクションを処理する方法およびメカニズム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
清水 美樹,Python向けフレームワーク Flask+SQLite3でWeb-DBアプリ開発!,日経ソフトウエア,日本,日経BP社,2019年01月24日,第22巻第2号通巻262号,pp. 94-113

Also Published As

Publication number Publication date
CN115552391A (zh) 2022-12-30
EP4150478A1 (en) 2023-03-22
JP2023518118A (ja) 2023-04-27
US20230229657A1 (en) 2023-07-20
US11609909B2 (en) 2023-03-21
KR20230003277A (ko) 2023-01-05
WO2021231234A1 (en) 2021-11-18
CN115552391B (zh) 2023-08-25
US20210357404A1 (en) 2021-11-18

Similar Documents

Publication Publication Date Title
US11288267B2 (en) Pluggable storage system for distributed file systems
US20190303406A1 (en) Systems and Methods for Optimizing Performance of Graph Operations
US7962583B2 (en) Dynamically adding partitions to be distributed directory setup with no downtime
JP2017507426A (ja) 半構造データスキーマのトランスペアレントディスカバリ
US20170212930A1 (en) Hybrid architecture for processing graph-based queries
US20180218039A1 (en) Query planning and execution with reusable memory stack
US11811851B2 (en) Method and system for enforcing governance across multiple content repositories using a content broker
US20240232722A1 (en) Handling system-characteristics drift in machine learning applications
JP2019537097A (ja) Iノードのアクセスパターンの追跡及びiノードの先取り
KR20230096107A (ko) 빅 메타데이터 관리를 위한 열 기반 기법들
Ahad et al. Comparing and analyzing the characteristics of hadoop, cassandra and quantcast file systems for handling big data
JP7277675B2 (ja) Select*クエリのゼロコピー最適化
US10769214B2 (en) Encoding and decoding files for a document store
US11789971B1 (en) Adding replicas to a multi-leader replica group for a data set
US11550793B1 (en) Systems and methods for spilling data for hash joins
WO2024156113A1 (en) Runtime error attribution for database queries specified using a declarative database query language
US20240256549A1 (en) Evaluating Expressions Over Dictionary Data
US11113296B1 (en) Metadata management for a transactional storage system
US20240256550A1 (en) Dictionary Filtering and Evaluation in Columnar Databases
US20240265011A1 (en) Multi-Cluster Query Result Caching
US20240126816A1 (en) Self-discovery and construction of type-sensitive columnar formats on type-agnostic storage servers to accelerate offloaded queries

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230117

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230117

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20230117

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230508

R150 Certificate of patent or registration of utility model

Ref document number: 7277675

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150