(58)【調査した分野】(Int.Cl.,DB名)
請求項1に記載の方法であって、前記テーブルのクラスタリングの前記度合いが前記クラスタリング閾値を下回っていることを判別することが、前記テーブル上のデータ操作言語(DML)文の量、頻度、若しくは種類、又は前記テーブルに追加された新規データの量を判別することを備える。
請求項1に記載の方法であって、前記テーブルのクラスタリングの前記度合いが前記クラスタリング閾値を下回っていることを判別することが、サンプルクエリ(example query)の実行時間がクエリ実行時間閾値を超えることを判別することを備える。
請求項1に記載の方法であって、前記テーブルのクラスタリングの前記度合いが前記クラスタリング閾値を下回っていることを判別することは、コンパイル中のプルーニングの有効性、及び実行中のフィルタ選択性に基づく。
請求項6に記載の方法であって、前記2つ以上のパーティションを前記マージ候補として選択することは、前記1つ以上の属性に対して同一の値を有するロウの値を含むパーティションを選択しないことを備える。
請求項1に記載の方法であって、再クラスタリングは、再クラスタリングリソースバジェット、パーティションの数、データサイズ、及び利用可能なコンピューティングリソースの1つ以上に基づいて再クラスタリングすることを備える。
請求項1に記載の方法であって、再クラスタリングは、2つ以上のパーティションをマージして増加したクラスタリングを有する1つ以上のパーティションを生成することを備える。
請求項1に記載の方法であって、前記テーブルに対する前記変更の前及び後の両方で、前記テーブルは理想的にはクラスタリングされておらず、理想的なクラスタリングは、
前記パーティションが前記1つ以上の属性に対応する値の範囲内で1つ以上の他のパーティションと重複しないことを含むこと、及び、
前記1つ以上の属性の属性についての前記パーティションの全てのロウが同じ値を含むこと、
の1つ以上が前記テーブルの前記パーティションの各々に当てはまることを備える。
請求項14に記載のシステムであって、前記命令は、前記1つ以上のプロセッサに、サンプルクエリ(example query)の実行時間がクエリ実行時間閾値を超えることを判別することによって、前記テーブルのクラスタリングの前記度合いが前記クラスタリング閾値を下回っていることを判別することを引き起こさせる。
請求項14に記載のシステムであって、前記コンピュータ読取り可能記憶媒体は、2つ以上のパーティションをマージ候補として選択することによって前記パーティションの再クラスタリングを前記1つ以上のプロセッサに引き起こさせる命令を更に記憶する。
請求項17に記載のシステムであって、前記命令は、前記1つ以上のプロセッサに、前記1つ以上の属性に対して同一の値を有するロウの値を含むパーティションを選択せずに、前記2つ以上のパーティションを前記マージ候補として選択することを引き起こさせる。
請求項14に記載のシステムであって、前記命令は、前記1つ以上のプロセッサに、インクリメンタルに前記テーブルのクラスタリングの前記度合いを増加することによって再クラスタリングさせることを引き起こさせる。
請求項14に記載のシステムであって、前記命令は、前記1つ以上のプロセッサに、再クラスタリングリソースバジェット、パーティションの数、データサイズ、及び利用可能なコンピューティングリソースの1つ以上に基づいて1つ以上のパーティションを再クラスタリングすることを引き起こさせる。
請求項14に記載のシステムであって、前記命令は、前記1つ以上のプロセッサに、2つ以上のパーティションをマージして増加したクラスタリングを有する1つ以上のパーティションを生成することによって再クラスタリングすることを引き起こさせる。
請求項14に記載のシステムであって、前記テーブルに対する前記変更の前及び後の両方で、前記テーブルは理想的にはクラスタリングされておらず、理想的なクラスタリングは、
前記パーティションが前記1つ以上の属性に対応する値の範囲内で1つ以上の他のパーティションと重複しないことを含むこと、及び、
前記1つ以上の属性の属性についての前記パーティションの全てのロウが同じ値を含むこと、
の1つ以上が前記テーブルの前記パーティションの各々に当てはまることを備える。
請求項25に記載のシステムであって、前記テーブルのクラスタリングの前記度合いが前記クラスタリング閾値を下回っていることを判別するための前記手段は、サンプルクエリ(example query)の実行時間がクエリ実行時間閾値を超えることを判別することによって前記テーブルのクラスタリングの前記度合いが前記クラスタリング閾値を下回っていることを判別する。
請求項25に記載のシステムであって、前記テーブルに対する前記変更の前及び後の両方で、前記テーブルは理想的にはクラスタリングされておらず、理想的なクラスタリングは、
前記パーティションが前記1つ以上の属性に対応する値の範囲内で1つ以上の他のパーティションと重複しないことを含むこと、又は、
前記1つ以上の属性の属性についての前記パーティションの全てのロウが同じ値を含むこと、
の1つ以上が前記テーブルの前記パーティションの各々に当てはまることを備える。
【発明を実施するための形態】
【0005】
データベースは、コンピューティングアプリケーションにおけるデータ記憶及びアクセスに広く使用されている。データベースは、クエリを用いて読み出し、変更し、又は削除することができるデータを含み又は参照する、1つ以上のテーブルを含むことができる。大規模なデータベース及び/又はテーブルに対してクエリを行うには、大量のデータをスキャンする必要がある。スキャンされるデータの量を減らすことは、データ組織化及び処理の主な課題の1つである。
【0006】
我々は、テーブルを、レコード(ロウ)の集合として定義する。各レコードは、テーブル属性(カラム)の値の集合を含む。通常、テーブルは、例えばファイル又はブロックの複数の小さい(可変サイズ又は固定サイズの)記憶単位に、物理的に記憶される。これらのファイル又はブロックは、テーブルの異なるパーティションの一部である可能性がある。我々は、パーティショニングを、異なるデータを持つレコードを、異なるデータパーティションに、物理的に分離することと定義する。例えば、テーブルは、日付属性(又はカ
ラム)に基づいてデータを分割して1日毎のパーティションを作成したり、又は、国の属性(又はカラム)に基づいて国毎のパーティションを作成したりできる。
【0007】
データウェアハウスシステムは、これらの大きなテーブルを管理可能なデータのチャンクに分割するために、パーティショニングを日常的に使用する。クエリで指定された述語に基づいてパーティションを削ること(パーティションプルーニング)ができることは、IOボリュームの劇的な減少をもたらし、それらのシステムの満足な性能を保守するために重要である。
【0008】
従来、静的パーティショニングはデータウェアハウス領域で使用されてきた。パーティションサポートの例としては、Oracle(米国登録商標)パーティショニング(例えば、https://www.oracle.com/database/partitioning/index.htmlの「Oracle P
artitioning」を参照)、Hive(米国登録商標)パーティショニング(例えば、https://www.brentozar.com/archive/2013/03/introduction-to-hive-partitioningの「An Introduction to Hive’s Partitionin
g」を参照)、SQL Server(米国登録商標)テーブルパーティショニング(例えば、https://technet.microsoft.com/en-us/library/cc966457.aspxの「Strate
gies for Partitioning Relational Data Warehouse in Microsoft SQL Server」を参照)、及びTeradata(米国登録商標)パーティショニング(例えば、http://www.dwhpro.com/teradata-partitioned-primary-indexの「The Teradata Partitioned Primary Index(PPI)」を参照)を含む。
【0009】
多くの場合、大きなテーブルは、データベース管理者によって手動で指定されるようにして、パーティショニングされる。例えば、管理者は、パーティションの数及び/又はパーティショニングキーを指定することができる。ただし、これらの詳細を手動で指定するには、管理者は正しいパーティショニングキーを選択するためのクエリ工数(query workload)の十分な理解を有している必要がある。また、パーティショニングキーの数は、物理記憶の断片化に直接変換されるため、通常は制限される。更に、パーティションを保守することは、通常、計算能力と時間の点で非常に高価である。
【0010】
パーティショニングに関連する概念は、クラスタリング又は順序付けである。(順序付けキー属性又はカラムのセットを用いた)順序付けは、これらのキー属性の値に従ってデータを順序付ける。クラスタリングは、互いに近接している値を持つ互いに物理的にグループとなっているレコード(又はロウ)として定義できる。例えば、同じキーを共有するロウは、互いに隣接して配置されるようにすることができる。キーのセットに基づいた順序付けは、それらのキーに基づくクラスタリングを実現するための一般的な方法である。同じキーを共有している値は相互に隣接していてもかまわないが、同じキー又は近いキーを共有しているグループは隣接している必要はない。今後、「クラスタリング」又は「部分的な順序付け」の用語又は概念も適用できる「順序付け」という用語を使用する場合がある。これらの概念は、別々の物理実体を導入しないため、パーティショニングとは異なり、テーブル全体又は例えばパーティション内などのデータを順序付けることが可能である。
【0011】
データが順序付けられるとき、パーティショニングと同様の利点を提供するために使用できる方法と構成がある。例えば、ゾーンマップ(「最小最大インデックス」又は「スモールマテリアライズトアグリゲート」としても知られている)は、属性クラスタリング又は並替えとともに、多くのパーティショニングのベネフィットを達成するためのもう1つの手段である。例として、(http://www.ibm.com/support/knowledgecenter/SSULQD_7.2.0/com.ibm.nz.adm.doc/c_sysadm_zone_maps.html)の「Zone Maps」及び(http
s://docs.oracle.com/database/121/DWHSG/zone_maps.htm#DWHSG9357)の「Zone Maps and Attribute Clustering」を参照されたい。しかしながら、これらのシステム又は方法は、基になるデータのクラスタリングを保守又は最適化しようとしないか、基になるテーブルの全体的で完全な再クラスタリングを必要とする。
【0012】
パーティショニングのための別のアプローチは、ゾーンマップと組み合わされ、例えばNetezzaによって実装されるインデックスである。この方法では、値の厳密な順序付けが、順序付けカラムのフィルタにおいて大幅に良好な性能を提供するゾーンマップをもたらす。
【0013】
上記に照らして、出願人は、テーブルの部分的順序付けのインクリメンタル保守のためのシステム、方法、及び装置を開発した。テーブルは、特定の順序保持関数に基づいてクラスタリングされたものとして定義される。この関数は、この関数の評価において近接しているロウが物理的な順序付けにおいても互いに近接している場合に、各ロウのデータを入力として取得する。テーブルのクラスタリングの度合い(クラスタリング比率)は、このような順序付け基準を満たすテーブルの物理レイアウト内のロウの比率によって判別される。完全なクラスタリングは、テーブル内の2つのロウが物理レイアウトにおいて隣接していて、順序付け関数に従って両方のロウにより近い距離を得る3番目のロウが見つからない場合に達成される。パーティショニングされたテーブルの場合、クラスタリングは、順序付け関数によってより近いロウが同じパーティション内に存在する確率を向上させる。
【0014】
本明細書に開示される実施形態は、データベース内のデータ又はテーブルに適用されるようにすることができる。データをクラスタリングしておくことで、複数のデータベース操作が改善されるようにすることができる。実施形態は、異なるパーティションにあるデータの大規模なチャンクをスキップする能力、改善されたフィルタリング及び結合、並びに、改善されたデータ操作言語(DML)動作効率を含むことができる。改善されたフィルタリングの実施例としては、クエリが受信されたときに、異なるパーティション内の大量のデータがクエリ述語に基づいて除外されるようにすることができる。改善された結合操作の実施例としては、プローブテーブルが、ビルドテーブルの統計に基づいてより良くプルーニングされるようにすることができる。また、削除などのDML動作は、検索条件を完全に満たす多数のパーティションを個々のロウを読まずに削除できるため、より効率的に実行されるようにすることができる。
【0015】
実施形態はまた、データがクラスタリングされるようにしておくことによって、繰り返される値のより長いひと続きを導入する能力を含むことができる。例えば、関数は数千の同一の値に対して1回だけ計算されるようにすることができるため、射影演算がより効率的になるようにすることができる。更に、数千の同一の値に対してハッシュテーブルにおいてルックアップを1回だけ実行することにより、結合及び集計を改善できる。実施形態はまた、重複しないデータのサブセットを識別する能力を含み、一緒に結合することができるデータのより小さいサブセットを判別したり、データの部分的な集計を行ったりすることを可能にする。並び替えられたデータを持つ実施形態は、部分的に順序付けられた集約又はマージ結合を可能にすることができる。
【0016】
テーブルに対する完全なクラスタリングを保守するための既存のテクノロジーが、利用できる。例えば、上述において参照されているTeradataは、インデックスを使用してデータを完全に並び替える。挿入時にインデックスがインクリメンタルに更新され、全体的な順序付けが実施される。Redshiftは、パーティション(ゾーンマップ)を保守し、テーブルに対する完全なクラスタリングを復元するための全体的な再順序付け
動作を提供する。前述したように、どちらもデータ構造が正確に並び替えられ又はパーティショニングされるように保守しようとするため、コストが高くなる。
【0017】
一実施形態では、本明細書に開示されるシステム、方法、及び装置の実施形態は、常に完璧なクラスタリングを保守するのではなく、ある度合いの不完全な(部分的な)クラスタリングを可能にするようにすることができる。更に、再クラスタリングが実行された場合、クラスタリング/パーティショニングの改善のみが望ましく、結果として完全なクラスタリングは必要ない。クラスタリングのインクリメンタルな改善、又は不完全であるが部分的なクラスタリングの許容は、以後、インクリメンタルクラスタリングと呼ばれる。インクリメンタルクラスタリングは、クラスタリングキーの基になるテーブルを完全にクラスタリングしようとするのではなく、時間の経過と共にクラスタリングの比率を最適化する。例えば、本明細書に開示される実施形態は、「十分に良好な」順序付け又はパーティショニングの概念を提示する。本明細書に開示された少なくとも一実施形態は、データの挿入/更新のコストとクエリの速度との間の円滑なトレードオフを可能にし、また、データの可用性を制限することなく、いくつかの高コストの操作を延期したり、それらをバックグラウンドで実行したりすることを可能にする。例えば、システム又は方法は、メトリック(距離)を使用してテーブルがどれくらい良くクラスタリングされているかを判別することができ、その後、インクリメンタル再クラスタリング動作を実行して、必ずしも完全なクラスタリングを実現することなくクラスタリングを改善させることができる。
【0018】
少なくとも一実施形態では、管理者は、パーティションの数及び/又はテーブルのパーティショニング(クラスタリング)のためのキーを指定する必要がなく、従って、ドメイン又は永続的な全体の状態に関する事前の知識は必要ない。例えば、システム又は方法は、基になるデータの単純な統計を使用して、データドメイン、範囲、及び/又は幅/距離に関する情報に基づいて、パーティションを自動的に生成及び判別するようにすることができる。パーティション上の1つの所定の制約は、パーティションサイズを含み得ることである。一実施形態では、本明細書で開示されるアルゴリズムは、再クラスタリングを取得する場合に、最も価値を提供するデータのサブセット(例えば、クエリ性能)を選択する。一実施形態では、システム又は方法は、クラスタリング効率を改善するために、基礎となるデータ統計に導入される追加情報を判別することができる。更に、クラスタリングのインクリメンタル保守は、DML工数の一部としてオンラインで、及び/又はバックグラウンドプロセスの一部としてオフラインで行われるようにすることができる。更に、順序付けが重要などのようなデータ編成も、この手法の恩恵を受ける可能性があるようにできる。例えば、これは、LSMTが使用されている多くの領域に対して代替となることができる。
【0019】
本開示の実施形態と一致するシステム及び方法の詳細な説明が、以下に提供される。いくつかの実施形態が記載されているが、この開示は、いずれの実施形態にも限定されるものではなく、むしろ多数の選択肢、修正、及び等価物を包含する。加えて、本明細書に開示される実施形態の完全な理解を提供するために、以下の説明において多数の特定の詳細が述べられるが、いくつかの実施形態はこれらの詳細の一部又は全部を伴わずに実施され得る。更に、明瞭さを目的として、関連技術において公知のある特定の技術材料は、開示を不必要に不明瞭にすることを避けるために詳細には記載されていない。
【0020】
本明細書において、パーティションという用語は、テーブル又はデータベースのデータのような、データの論理分割を意味するために与えられる。本明細書で使用されるクラスタリングという用語は、以下で更に論じられる、パーティション又はマイクロパーティションのクラスタリング特性又は組織化を記述するために与えられる。更に、本開示は、パーティションが1つのファイル又は1つ以上のファイルを含む実施形態について説明する。ただし、各パーティションは、データベース若しくはテーブルのカラム、ロウ、及び/
又はセルに対応する1つのファイル、2つのファイル、又はデータを含めることができる。各「ファイル」は、2つ以上の別々のファイルに置き換えることもできる。一実施形態において、パーティションは、たとえ同じパーティション内であっても、異なるファイルにアクセスすることなく、独立してアクセス又はロードされ得る、複数のファイルを含むことができる。
【0021】
図1に転ずると、一実施形態による、データベースサービスを提供するための処理プラットフォーム100を示すブロック図が示されている。一実施形態において、処理プラットフォーム100は、本明細書において議論されるようなインクリメンタルクラスタリング保守を使用して、データベーステーブルを記憶及び保守することができる。処理プラットフォーム100は、複数のユーザ104、106、及び108によってアクセス可能なデータベースサービスマネージャ102を含む。データベースサービスマネージャ102はまた、ここではリソースマネージャ又はグローバルサービスとして参照することもできる。いくつかの実施例では、データベースサービスマネージャ102は、処理プラットフォーム100のデータ又はサービスへのアクセスを望む任意の数のユーザをサポートすることができる。ユーザ104〜108は、例えば、データ記憶及び検索のクエリと要求を提供するエンドユーザ、本明細書に記載のシステム及び方法を管理するシステム管理者、データベースと相互に作用するソフトウェアアプリケーション、及びデータベースサービスマネージャ102と相互に作用する他のコンポーネント/装置を含む。
【0022】
データベースサービスマネージャ102は、処理プラットフォーム100内のシステム及びコンポーネントの動作をサポートする様々なサービス及び機能を提供することができる。データベースサービスマネージャ102は、データ処理プラットフォーム100を通して記憶されたデータに関連する記憶されたメタデータへのアクセスを有する。データベースサービスマネージャ102は、ユーザクエリを最適化するために、メタデータを使用することができる。いくつかの実施形態において、メタデータは、遠隔データ記憶システムに記憶されたデータの要約、並びに、ローカルキャッシュ(例えば、実行プラットフォーム112の1つ以上のクラスタ内のキャッシュ)から利用可能なデータを含む。更に、メタデータは、遠隔データ記憶システム及びローカルキャッシュにおいてデータがどのように編成されているかに関する情報を含むことができる。メタデータは、システム及びサービスが、記憶装置から実際のデータをロードしたりアクセスしたりすることなく、データの一部を処理する必要があるかどうかを判別することを可能にする。
【0023】
データ処理プラットフォーム100の一部として、データ操作言語(DML)を使用してデータに変更が加えられたときに、メタデータが収集されるようにすることができる。そのような変更は任意のDML文によって行われるようにすることができる。データ操作の実施例としては、テーブルへのデータの選択、更新、変更、マージ、及び挿入を含むが、これらに限定されない。単一のテーブルのテーブルデータは、様々なパーティションにパーティショニングされるか、又はクラスタ化できる。処理プラットフォーム100の一部として、ファイル又はパーティションが作成されるようにすることができ、そして、メタデータが、ファイルごと、パーティションごと、及び/又はカラムごとの単位で収集することができる。このメタデータの収集は、データの取込み中に実行されるようにすることができ、又はメタデータの収集は、データが取り込まれるかロードされた後に、別のプロセスとして実行される場合がある。一実施例において、メタデータは、夫々のファイル、パーティション、又はカラムに対して、多数の異なる値、多数のヌル値、及び最小値と最大値を含むようにすることができる。一実施例において、メタデータは更に、文字列の長さの情報、及び文字列内の文字の範囲を含めるようにすることができる。
【0024】
データベースサービスマネージャ102は更に、様々なデータ記憶及びデータ取得操作を実行するコンピューティングリソースを提供する実行プラットフォーム112と通信し
ている。実行プラットフォーム112は、1つ以上の計算クラスタを含むことができる。実行プラットフォーム112は、記憶プラットフォーム114の一部である1つ以上のデータ記憶装置116、118、及び120と通信している。3つのデータ記憶装置116、118、及び120が
図1に示されているが、実行プラットフォーム112は、任意の数のデータ記憶装置と通信することが可能である。いくつかの実施形態では、データ記憶装置116、118、及び120は、1つ以上の地理的位置に位置するクラウドベースの記憶装置である。例えば、データ記憶装置116、118、及び120は、パブリッククラウドインフラストラクチャ若しくはプライベートクラウドインフラストラクチャ、又は任意の他の分散記憶システムの様式の一部であるようにすることができる。データ記憶装置116、118、及び120は、ハードディスクドライブ(HDD)、ソリッドステートドライブ(SSD)、記憶クラスタ、又は任意の他のデータ記憶技術を含むようにすることができる。加えて、記憶プラットフォーム114は、(Hadoop分散ファイルシステム(HDFS)のような)分散ファイルシステム、及びオブジェクトストレージシステム等を含むことができる。
【0025】
いくつかの実施形態では、データベースサービスマネージャ102と、ユーザ104〜108、メタデータファイルに関する情報(即ち、メタデータファイルメタデータ)のための可変記憶110、及び実行プラットフォーム112との間の通信リンクは、1つ以上のデータ通信ネットワークを介して実装され、ユーザ要求が最適化されるような様々なタスクが割り当てられるようにすることができる。同様に、実行プラットフォーム112と、記憶プラットフォーム114内のデータ記憶装置116〜120との間の通信リンクは、1つ以上のデータ通信ネットワークを介して実装される。これらのデータ通信ネットワークは、任意の通信プロトコル及び任意の種類の通信媒体を利用することができる。いくつかの実施形態では、データ通信ネットワークは、互いに結合された2つ以上のデータ通信ネットワーク(又はサブネットワーク)の組合せである。別の実施形態では、これらの通信リンクは、任意の種類の通信媒体及び任意の通信プロトコルを使用して実装される。
【0026】
データベースサービスマネージャ102、可変記憶110、実行プラットフォーム112、及び記憶プラットフォーム114は、個々のコンポーネントとして
図1に示されている。しかし、データベースサービスマネージャ102、可変記憶110、実行プラットフォーム112、及び記憶プラットフォーム114の夫々は、(例えば、複数の地理的な場所で複数のシステム/プラットフォームに分散される)分散システムとして実装されてもよいし、又は1つ以上のシステムに結合されてもよい。更に、データベースサービスマネージャ102、可変記憶110、実行プラットフォーム112、及び記憶プラットフォーム114の夫々は、ユーザ104〜108から受け取った要求への変更及びデータ処理プラットフォーム100のニーズの変化に応じて、(互いに独立して)スケールアップ又はダウンされるようにすることができる。従って、記載された実施形態において、データ処理プラットフォーム100は、動的であり、現在のデータ処理ニーズを満たすために定期的な変更をサポートする。
【0027】
図2は、一実施形態によるデータベースサービスマネージャ102のコンポーネントを表すブロック図を示す。データベースサービスマネージャ102は、データ記憶装置206に結合されたアクセスマネージャ202及びキーマネージャ204を含む。アクセスマネージャ202は、本明細書に記載されているシステムの認証及び承認タスクを処理する。キーマネージャ204は、認証及び承認タスク中に使用されるキーの記憶域と認証を管理する。要求処理サービス208は、受信されたデータ記憶要求及びデータ取得要求を管理する。管理コンソールサービス210は、管理者及びその他のシステムマネージャによる様々なシステム及びプロセスへのアクセスをサポートする。
【0028】
データベースサービスマネージャ102はまた、SQLコンパイラ212、SQLオプ
ティマイザ214、及びSQL実行部216も含む。SQLコンパイラ212は、SQLクエリを解析し、クエリの実行コードを生成する。SQLオプティマイザ214は、処理される必要があるデータに基づいて、クエリを実行する最適な方法を決定する。SQL実行部216は、データベースサービスマネージャ102によって受信されたクエリに対するクエリコードを実行する。例えば、SQLオプティマイザは、クエリの述語を満たさないことがメタデータに基づいてわかるため、クエリにおいて処理される必要のないテーブルのロウ又はパーティションをプルーニングするようにすることができる。クエリスケジューラ及びコーディネータ218は、受信したクエリを、コンパイル、最適化、及び実行プラットフォーム212へのディスパッチのための適切なサービス又はシステムに送信する。仮想ウェアハウスマネージャ220は、複数の仮想ウェアハウスの動作を管理する。
【0029】
更に、データベースサービスマネージャ102は、遠隔データ記憶装置及びローカルキャッシュに記憶されているデータに関連する情報を管理する構成及びメタデータマネージャ222を含む。監視及び作業負荷アナライザ224は、データベースサービスマネージャ102によって実行されるプロセスを監視し、実行プラットフォーム112内の仮想ウェアハウス及び実行ノードにわたるタスク(例えば、作業負荷)の分散を管理する。構成及びメタデータマネージャ222並びに監視及び作業負荷アナライザ224は、データ記憶装置226に結合される。
【0030】
データベースサービスマネージャ102はまた、データ記憶要求及びデータアクセス要求の処理に関連する様々なタスク及びその他のアクティビティを管理する、トランザクション管理及びアクセス制御モジュール228も含む。例えば、トランザクション管理及びアクセス制御モジュール228は、複数のユーザ又はシステムによる、データへの一貫しかつ同期されたアクセスを提供する。複数のユーザ/システムが同じデータに同時にアクセスする可能性があるため、データへの変更は、各ユーザ/システムがデータの現在のバージョンで作業することを保証するために、同期されるようにすることができる。トランザクション管理及びアクセス制御モジュール228は、データベースサービスマネージャ102内の単一の中央に集中した位置において、種々のデータ処理アクティビティの制御を提供する。
【0031】
データベースサービスマネージャ102は、テーブルのクラスタリングとパーティションの順序付けを管理するクラスタリング保守モジュール230を含む。クラスタリング保守モジュール230は、データベース内の各テーブルを1つ以上のパーティション又はマイクロパーティションにパーティショニングすることができる。クラスタリング保守モジュール230は、テーブルデータに対して理想的なクラスタリングを要求せず又は達成することはできないが、「十分に良い」又はほぼ正確なクラスタリングを保守できる。例えば、特定の属性上の理想的なクラスタリングは、各パーティションが重複しない値の範囲を有するか又はその特定の属性に対して単一の値のみを有する結果を招く。クラスタリング保守モジュール230は完全なクラスタリングを要求しないようにすることができるため、データのロード時又はDMLコマンドの操作時に、著しい処理及び記憶リソースが浪費されないようにすることができる。
【0032】
少なくとも一実施形態では、クラスタリング保守モジュール230は、任意のDML操作の一部として、クラスタ化テーブルのクラスタリングをインクリメンタルに保守する。厳密なクラスタリングを保守するには非常にコストがかかるため、実施形態は、完全なテーブルクラスタリングは要求しない。例えば、クラスタリング保守モジュール230は、最もクラスタリングされていないテーブルのパーティションを自動的に選択し、それらのパーティションのみを再編成することができる。ユーザがテーブルにクラスタリングキーを指定した場合、全ての新規又は変更されたレコードは、クラスタリングキーに従って、クラスタ化テーブル内で自動的にそしてインクリメンタルに保守される。クラスタリング
保守はインクリメンタルに実行されるので、これらのインクリメンタル保守手順は、たとえその状態に達していない場合でも、理想的なクラスタ化された状態に向けて移行しながら、クラスタリングを改善又は保守し続けるようにすることができる。
【0033】
自動クラスタリング保守で、テーブルのクラスタリングの十分な又は望ましいレベルを保守できなかった場合、クラスタリング保守モジュール230は、明示的なRECLUSTER句又はコマンドに応答して、テーブルを再クラスタリングすることができる。例えば、RECLUSTER句は、ALTER TABLEコマンドに対して与えることができる。ALTER TABLE...RECLUSTERコマンドは、テーブルの手動インクリメンタル再クラスタリングを適用する。このコマンドは、関連レコードが同じパーティションに再配置されるように、任意のクラスタリングキーに基づいてテーブルのレコードを編成することができる。このDML操作は、移動されるべき全てのレコードを削除し、クラスタリングキー上でグループ化されたそれらを再挿入することができる。この操作は、操作の間、テーブルをロックすることができる。
【0034】
少なくとも一実施形態では、プルーニングはスキャンされるテーブルの良好なクラスタリングに依存するが、クラスタリングが完全でない場合でも良好なパフォーマンスを達成することができる。少なくとも一実施形態は、長時間をかけたテーブルの少しずつのローディングから生じる自然クラスタリングに依存している。任意の暗黙のクラスタリング又はこのクラスタリングの相関関係は、無関係なファイルをプルーニングするためにコンパイラによって使用される。
【0035】
クラスタリングはまた、明示的なクラスタ属性又はユーザによって指定されたキーに基づいて実行されるようにすることもできる。例えば、ユーザは1つ以上のカラム属性をクラスタリングキーとして指定できる。これらのクラスタリング属性は、既存及び新規の両方のパーティションのクラスタリングを自動的に保守するために、システムによって使用される。実施形態は、クラスタを有するcreate table文を、例えば、CREATE TABLE emp (empno number,mgr number,hire_date date,salary number) CLUSTER by (mgr,hire_date); 又は、CREATE TABLE <table_
name> ( \[<column_name> <column_type>]+ ) CLUSTER BY (expression+ ) という句によって拡張することができる。内部的には、ロードへの入力クエリは、クラスタリングキー上で新規ロウを並び替えすることになるだろう。
【0036】
ロード上でいくつかのクラスタリングを保守するために、入力してくるロウをクラスタリングキー上でクラスタリングするために、insert及びcopy文の実装もまた変更されるようにすることもできる。並替え操作が、INSERT操作の直前に、導入又は挿入されるようにすることができる。一実施形態では、新規ロウの入力してくるバッチのみが保持されるため、DML操作の変更はロウの完全で全体的なクラスタリングは保証しない。それらの属性上のテーブルの完全なクラスタリングは、クラスタリングキー上での
ORDER BY を使用してテーブルを再作成することによって実現できる。このことは、新規パーティションが潜在的に極めて大きなテーブルに追加されるので、作成するのにコストがかかりすぎ、及び/又は保守するのに不経済すぎる可能性がある。別の方法として、テーブルのサブセットの再クラスタリングを手動でトリガするために、新規 ALTER TABLE の変形が、 ALTER TABLE <table_name> RECLUSTER <clustering_options> というオープンエンドの構文を使用して導入される。ここで、 clustering_options
は、メソッド、maximum_size、又は他のパラメータであるようにすることができる。1つの例文は、 ALTER TABLE <table_name> RE
CLUSTER using method=last_files,maximum_size=10GB である。このコマンドは、現在のヒューリスティック(発見的)なメソッド「last_files」を使用して、最大10GBのテーブル table_name を再クラスタリングする。その他のヒューリスティックな手法は、後述する「インクリメンタルクラスタリングヒューリスティック」セクションで説明する。
【0037】
少なくともいくつかの実施形態は、マイクロパーティションを使用してテーブルの順序付け又はクラスタリングを管理するようにすることができる。既に説明したように、従来のデータウェアハウスは、大きなテーブルの静的なパーティショニングに依存して、許容できるパフォーマンスを実現し、より良好な規模の拡縮を可能にしている。これらのシステムでは、パーティションは、特殊なデータ定義言語(DDL)と構文を使用して個別に操作される管理単位である。しかしながら、静的なパーティショニングは、保守オーバーヘッドやデータスキューなどの多くの既知の制限を有しており、これによって不均衡なサイズのパーティションを生じる可能性がある。本明細書に開示される実施形態は、マイクロパーティショニングと呼ばれる強力でユニークなパーティショニングの形態を実装することができ、これは既知の制限なしに静的パーティショニングの全ての利点を提供するとともに、追加の重要な利益を提供する。
【0038】
一実施形態では、テーブル内の全てのデータは、記憶の連続単位であるマイクロパーティションに自動的に分割される。実施例として、各マイクロパーティションには50MBと500MBの非圧縮データを含めることができる(データが圧縮されて記憶されるため、記憶部内の実際のサイズは小さくなる可能性があることに注意)。テーブル内のロウのグループは、カラムによって特徴付けられて編成された個々のマイクロパーティションにマップする。このサイズと構造は、非常に大きなテーブルの非常に細分化されたプルーニングを可能にし、数百万、又は更には数百万のマイクロパーティションからなるようにすることができる。メタデータは、マイクロパーティションに記憶されている全てのロウ(マイクロパーティション内の各カラムの値の範囲)について自動的に収集され、それらは、マイクロパーティション内の各カラムの値の範囲、個別値の数、及び/又は最適化と効率的なクエリ処理の両方に使用される追加のプロパティを含む。一実施形態では、マイクロパーティショニングは、全てのテーブルに対して自動的に実行されてもよい。例えば、テーブルは、データが挿入/ロードされるときに発生する順序を使用して、透過的にパーティショニングされるようにすることができる。
【0039】
マイクロパーティショニングは、多くの利点を提供することができる。従来の静的パーティショニングとは対照的に、マイクロパーティションは自動的に得られるようにすることができる。つまり、必ずしも事前に明示的に定義したり、ユーザが管理したりする必要はない。その名前が示すように、マイクロパーティションは、サイズが小さく(例えば、圧縮前で50〜500MB)、高速なクエリのための、非常に効率的なDML及びきめの細かいプルーニングが可能である。マイクロパーティションは、含まれている値の範囲内で重複することを可能にされることができ、それらの均一に小さいサイズと組み合わせられることで、スキューの防止に役立つ。一実施形態では、カラムは、個々のカラムの効率的なスキャンを可能にするために、マイクロパーティション(即ち、カラムによって特徴付けられた記憶部)内に独立して記憶され、クエリが参照するカラムのみがスキャンされる。一実施形態では、カラムはまた、マイクロパーティション内で個別に圧縮される。データベースサービスマネージャ102は、各マイクロパーティション内のカラムに対して、最も効率的な圧縮アルゴリズムを自動的に判別する。
【0040】
一実施形態では、全てのDML操作(例えば、DELETE、UPDATE、MERGE)は、基になるマイクロパーティションメタデータの利点を利用して、テーブルの保守を容易にし簡素化するように設計されている。例えば、テーブルから全ての行を削除する
などの一部の操作は、メタデータのみの操作である。構成及びメタデータマネージャ222によって保守されるマイクロパーティションメタデータは、半構造化データを包含するカラムを含む、クエリ実行時におけるマイクロパーティション内のカラムの正確なプルーニングを可能にする。つまり、範囲内の値の10%にアクセスする値の範囲に対してフィルタ述語を指定するクエリは、理想的にはマイクロパーティションの約10%のみをスキャンすべきである。例えば、大きなテーブルが、日付及び時間のカラムを含む1年分の履歴データを含んでいると仮定する。データの均一な分布を仮定すると、特定の時間を対象とするクエリは、理想的には、テーブルを構成するマイクロパーティションの1/8760番目をスキャンし、時間のカラムのデータが含まれているマイクロパーティションの部分のみをスキャンする。システムは、クエリが1つのカラムのみによってフィルタする場合に、パーティション全体がスキャンされないようにするために、パーティションのカラムによって特徴付けられたスキャニングを使用するようにすることができる。言い換えれば、スキャンされたマイクロパーティションとカラムによって特徴付けられたデータの比率が、選択された実際のデータの比率に近いほど、テーブル上で実行されるプルーニングがより効率的である。時系列データに対しては、このレベルのプルーニングが、1時間又は更にはそれ以下と同じ細粒のレンジ(「スライス」など)に対して、1秒未満の応答時間を可能にすることが現実になる可能性がある。
【0041】
多くの場合、データウェアハウス内のテーブルに記憶されているデータは、自然なディメンション(日付や地理的領域など)に沿って、並べ替えられ/順序付けられることがある。一実施形態において、クラスタリング保守モジュール230は、明示的なクラスタリングキーが指定されない場合には、デフォルトで自然クラスタリングを行うことができる。並び替えられていない、又は部分的にのみ並び替えられているテーブルデータは、特に非常に大きなテーブルでは、クエリの性能に影響する可能性があるため、クラスタリングはクエリ性能の重要な要因となる可能性がある。
【0042】
一実施形態では、クラスタリング保守モジュール230は、データを、それがテーブルに挿入/ロードされたときに、自動的に並び替える。同じキー値を持つデータは、同じマイクロパーティション内で、可能な限りバジェット内で同じ場所に配置される。次に、構成及びメタデータマネージャ222は、各テーブルに対して透過的に保守している情報を活用して、クエリ中にマイクロパーティションをスキャンすることを回避し、これらのカラムを参照するクエリの性能を大幅に加速する。
【0043】
図3は、テーブル300の論理構造300を示す概略図である。テーブルの名前は、クエリ又はDML文に表示される「t1」である。
図4は、一実施形態による、テーブル300の物理構造400を図示する。テーブル300には、(例えば、受信/追加時に)自然にソートされた4つのカラムがある。テーブル300には24ロウが含まれている。テーブル300のテーブルデータは4つのマイクロパーティションにわたって保管され、物理構造400に示され、ロウは各マイクロパーティション間で均等に分割される。
図3に示す論理構造と
図4に示す物理構造の両方で、ロウ2は太破線302で示され、ロウ23は太実線304で示されており、それらがどのように関連しているかを示している。
【0044】
各マイクロパーティション内では、データが日付カラムによって並べ替えられ記憶されるので、テーブル上でクエリに対して次のアクション:そのクエリに不要なマイクロパーティションを整理すること、残りのマイクロパーティション内のカラムによってプルーニングすることを実行することができる。パーティションはカラムによってソートされているが、パーティションは必ずしも互いに相対的にソートされているわけではなく、パーティション間にいくつかの重複がある。例えば、マイクロパーティション1、2、及び3には全て11/2の日付が含まれている。この図は、非常に大きなテーブルを含む、あらゆるサイズのテーブルのマイクロパーティションに利用される可能性のある、自然データク
ラスタリングの小規模な概念的表現としてのみ意図されていることに注意されたい。
【0045】
構成及びメタデータマネージャ222は、テーブル内のマイクロパーティションのクラスタリングメタデータを保守する。メタデータは、テーブルのマイクロパーティションの総数、(テーブルカラムの指定されたサブセット内の)相互に重複する値を含むマイクロパーティションの数、及び/又は重複するマイクロパーティションの深さのうちの、1つ以上を含むようにすることができる。一実施形態では、これらの詳細は、以下のシステム関数:SYSTEM$CLUSTERING_DEPTH、SYSTEM$CLUSTE
RING_INFORMATION、SYSTEM$CLUSTERING_RATIOを使用してアクセスされるようにすることができる。
【0046】
クラスタリング比率は、パーティションの相互の重複、カラム内の各値について重複するパーティションの平均数、又はその他のパラメータに基づいて計算できる。一実施形態では、テーブルのクラスタリング比率は、テーブルのクラスタリング状態がテーブル中のデータの変更によって改善又は悪化したかどうかを示す0と100の間の数値である。この比率が高いほど、テーブルが最適にクラスタリングされ、100の値はテーブルが完全にクラスタリングされていることを示す。クラスタリングの比率は、大きなテーブルのクラスタリングの「正常性」を監視する、テーブル上でDMLが実行されるときに特に時間を超過している、及び/又は、大きなテーブルが明示的に定義されたクラスタリングキーの恩恵を受けるかどうかを判別する等、様々な目的で使用できる。
【0047】
一実施形態では、クラスタリング比率の計算は、重複している全てのファイルのエントロピーを計算し、そしてそれを使用してクラスタリング比率を計算することによって実行されるようにすることができる。各ポイントクエリでは、各追加ファイルは、1/深さ×log(深さ) のエントロピーを導入する。全ての重複しているファイルによって導入された全てのエントロピーを合計することで、各ファイルに対するlog(深さ)が得られる。従って、その深度が1である定数ファイルに対しては、それはlog(1)=0の追加のエントロピーを導入する。均一な範囲分布を仮定すると、エントロピーの合計は(1/numFiles)×sum(log(深さ))になる。これは、テーブルの非クラスタリングデータの比率として使用されるようにすることができる。重複しないファイルは、その計算において別のクラスとして扱われるようにすることができる。それらのクラスタリングプロパティは更には改善することができず、それらは追加のエントロピーは導入しない。テーブルの現在の状態は、重複している全てのファイルが1つのクラスタ内にあることを前提としている最悪の状態と比較されるようにすることができ、それゆえ、合計の深さがdのn個の重複したファイルがある場合、最悪の場合のエントロピーはn×log(d/n)になる。これは、総深さの平方根の積であるため、同じ合計深さに合計するエントロピーのどの他の配置よりも常に大きいことが保証される。要約すると、定数ファイルの数がcで、重複するファイルの番号が1、・・・、nで、そしてそれらの深さがそれぞれd1、d2、・・・dnであると仮定すると、クラスタリング比率は式1に示されるように計算される。
【0049】
式1は、クラスタリング比率のために[0,1]の範囲を提供することが保証されてい
る。この値は、所望のスケールを得るために数字を掛けることができる(例えば、100を乗算して0〜100のスケールを得る)。
【0050】
いくつかの実施形態では、100のクラスタリング比率は理論的には可能であるが、最適なクエリ性能を達成するために必要ではないことに注意されたい。単一のマイクロパーティション又はマイクロパーティション無し(つまり空のテーブル)で構成されるテーブルは、常に100のクラスタリング比率を有する。一実施形態では、クラスタリング比率の最小値は0であり、任意の負の比率は0に丸められる。負の比率は、重複するマイクロパーティションの数が、テーブルのマイクロパーティションの総数に対して高い場合に、発生し得る。
【0051】
テーブルのクラスタリング比率は、テーブルが十分にクラスタリングされているかどうかの絶対的又は正確な尺度ではない場合がある。それは、特定のテーブル内のデータ記憶を最適化するためのガイドラインとして意図された相対値である場合がある。テーブルのデータ特性に依存してそれぞれのテーブルとデータクラスタリングのシナリオは異なるため、クラスタリング比率はテーブル間の比較としては役に立たない場合がある。つまり、テーブルが他のテーブルよりも高い比率を有する場合、必ずしも1番目のテーブルが2番目のテーブルよりも良好にクラスタリングされていることを示しているとは限らない。究極的には、クエリ性能がしばしば、テーブルがどの度合い適切にクラスタ化されているかを示す最適な指標になる。テーブル上でクエリが必要に応じて又は期待通りに実行されている場合は、テーブルが十分にクラスタリングされている可能性が高く、それに続く再クラスタリングが大幅に比率を変更したり性能を改善させたりしない可能性がある。クエリ性能が時間の経過と共に低下し、テーブルのクラスタリング比率が低下する場合、テーブルはもはや最適にクラスタリングされていない可能性が高く、再クラスタリングのメリットを享受できる。
【0052】
図5は、パーティション間の重複の度合いがクラスタリング比率にどのように影響するかの簡略化された見え方を示す模式図である。5つのマイクロパーティションで構成されるテーブルの重複は、重複するマイクロパーティションの数、重複の深さ、及びクラスタリングの比率に対する統計とともに、様々な段階で示される。テーブルは、AからZまでの範囲の値を含むカラム上でクラスタリングされている。最初の状態では、全てのマイクロパーティションの値の範囲が重なり、クラスタリングの比率が低くなる(30.1)。重複するマイクロパーティションの数が減り、重複の深さが第2の状態と第3の状態で減少すると、クラスタリングの比率が向上する(71.4及び81.9)。全てのマイクロパーティション間の値の範囲に重複がない場合、マイクロパーティションは一定の状態に(つまり再クラスタリングでは改善できなく)なると見なされ、テーブルは100のクラ
スタリング比率を有する。この4番目の状態では、テーブルは完全にクラスタ化されていると見なされる。
【0053】
一実施形態では、クラスタリング保守モジュール230によって実行されるインクリメンタルクラスタリングは、第1ステップから第2ステップへなどのようなクラスタリングのインクリメンタルな改善をもたらすプロセスを実行することができる。従って、クラスタリングにおいてインクリメンタルな改善が達成される場合もあれば、(他のDMLなどのような)その他の変更が常にテーブルに対して実行されている場合でも、望ましいレベルのクラスタリングが保持されるようにすることができる。
【0054】
多くの場合、自然クラスタリングはテーブル内で良好にクラスタリングされたデータを生成する。しかしながら、時間の経過と共に、特にDMLが発生した場合、一部のテーブルのロウのデータは、必要なディメンションで自然にクラスタリングされない。基になる
マイクロパーティションの自然なクラスタリングを改善するために、ユーザはロウを重要なカラム上で並べ替えてテーブルに再挿入したいと思うかもしれない。しかしながら、(ロウの数ではなくテーブル内のデータのサイズによって定義される)非常に大きなテーブルに対しては、この手動操作はコストが高く、扱いにくい可能性がある。ここで少なくとも一実施形態は、ユーザがテーブル上の1つ以上のカラム/式に対してクラスタリングキーを指定することを可能にする。
【0055】
クラスタリングキーはフィルタリングをより効率的にするかもしれないが、全てのテーブルが必ずしもクラスタリングキーの恩恵を受けるわけではない。クラスタリングキーからの性能の改善を確認するには、テーブルが1つ以上のマイクロパーティションに存在するのに十分な大きさでなければならず、クラスタリングキーが、これらのマイクロパーティションのサブセットを選択するために、十分なフィルタリングを提供しなければならない。いくつかの実施形態では、マルチテラバイト(TB)サイズ範囲のテーブルは、特にテーブルが顕著な量のDMLコマンドを経験する場合、クラスタリングキーからの最も大きな利点がわかるであろう。
【0056】
一実施形態では、クラスタリングキーは、同じマイクロパーティション内でデータを同じ場所に置くために明示的に指定されるテーブル上のカラム又は式のサブセットである。クラスタリングキーは、(CREATE TABLEコマンドを使用して)テーブルを作成する時、又は(ALTER TABLEコマンドを使用して)以後に、定義されるようにすることができる。クラスタリングキーは、いつでも変更又は削除されるようにすることができる。非常に大きなテーブルに対してクラスタリングキーを定義することが役立つかどうかを判別するためのいくつかの一般的な指標は、テーブル上のクエリが予想より遅く実行されており又は時間の経過とともに著しく性能が低下していること、及び/又は、テーブルのクラスタリング比率が非常に低くクラスタリングの深さが非常に高くなっていること、を含む。少なくとも一実施形態では、ユーザが既存のテーブルに対してクラスタリングキーを定義した場合(又はテーブルに対して既存のクラスタリングキーを変更した場合)、テーブル内のロウは、ALTER TABLEコマンドを使用してテーブルが再クラスタリングされるまで、再編成されない。同じマイクロパーティション内で類似のロウを同じ場所に置くことがフィルタ述語に一致しない大量のデータをスキップすることによりクエリにおけるスキャン効率を改善すること、同じマイクロパーティション内で類似のロウを同じ場所に置くことが一般的にクラスタリングキーが無いテーブルにおける場合よりも良好なカラム圧縮を可能にすること、このことは特に他のカラムがクラスタリングキーと強く関連性があるときに確実であること、及び/又は、ひとたび定義されればクラスタリングキーは少ししか又は全く保守を必要としないこと、を含むいくつかの利点を提供することができる。
【0057】
適切なクラスタリングキーを選択することは、クエリ性能に劇的な影響を及ぼす可能性がある。作業負荷の分析は、通常、理想的なクラスタリングキー候補をいくつか生成するであろう。例えば、クエリが通常、日付カラムなどの1つのカラム上でフィルタ処理される場合、そのカラムはテーブルのクラスタリングキーとして適切な候補になる可能性がある。同様に、クエリは通常、application_idやuser_idカラムなどの2つのディメンションによってテーブル上で実行されるため、それらのカラム上でのクラスタリングは、テーブルのクエリ性能を改善するのに役立つことができる。少なくともいくつかの実施形態では、クラスタリングキーにおける明瞭値(すなわち基数)の数は、クラスタリングキーを選択することの重要な側面である。テーブル上でのプルーニングを効果的にすることのできる十分に多数の明瞭値を有し、システムが同じマイクロパーティション内でロウを効率的にグループ化することを可能にするように十分に少数の明瞭値を有するクラスタリングキーを選択することが重要であるようにすることができる。非常に低い基数カラム(性別の値を含むカラムなど)は、最小限のプルーニングのみを生成する
。対照的に、非常に高い基数カラム(例えば、タイムスタンプ又はUUID値を含むカラム)は、クラスタリングの維持にコストがかかる可能性がある。原則として、最低の基数から最高の基数までのキーをオーダーすることが推奨される。カラムの基数が非常に大きい場合、多くの場合、クラスタリングキーとして直接使用するのは適切ではない。例えば、ファクトテーブルは、(テーブル内のマイクロパーティションの数よりも多く)多くの不連続な値を含むタイムスタンプカラムc_timestampを有するかもしれない。そのカラムは引き続きクラスタリングキーとして使用できるが、そのカラムに定義された式となるクラスタリングキーを用いると、明瞭値の数が減少する。例えば、c_timestampカラム上では、タイムスタンプではなく日付に値をキャストすることによって(例えば、to_date(c_timestamp))、クラスタリングキーを定義できる。これにより合計日数に対する明瞭値が減少するが、これはプルーニングのためにはるかに優れている。
【0058】
一実施形態では、クラスタリング保守モジュール230は、RECLUSTER句を有するALTER TABLEコマンドを使用して、いつでもクラスタリングキーを有するテーブルを手動で再クラスタリングすることをサポートする。このコマンドは、関連レコードが同じマイクロパーティションに再配置されるように、クラスタリングキーに基づいてテーブルに対するレコードを編成する。このDML操作は、移動されるべき全てのレコードを削除し、クラスタリングキー上でグループ化されるそれらを再挿入する。任意のDML操作の場合と同様に、この操作は、その操作の間、テーブルをロックすることがある。また、再クラスタリングのための記憶コストもある。データが再クラスタリングされるたびに、ロウはクラスタリングキーに基づいて物理的にグループ化され、その結果、システムはそのデータ用の新規マイクロパーティションを生成する。テーブルにたとえ少数のロウを追加することであっても、それらの値を含む全てのマイクロパーティションが再作成される可能性がある。
【0059】
図6は、テーブル300(
図3)の物理構造400(
図4)に関連する再クラスタリングされたパーティションの物理構造600を示す模式図である。再クラスタリングされた物理構造600は、次のようなクエリの実施例 SELECT name,country FROM t WHERE id=2 AND date=‘11/2’ に関するクエリ性能を向上させるために、テーブルの再クラスタリングがマイクロパーティションのスキャンを減らすのにどのように役立つかを説明している。前述したように、
図4でパーティショニングされたテーブル300は、マイクロパーティション1〜4にわたって日付によって自然クラスタリングされている。
図4のクラスタ化状態では、上記のクエリの実施例は、マイクロパーティション1、2、及び3をスキャンする必要がある。日付とidのカラムは、次のような文「ALTER TABLE t1 CLUSTER BY (date,id);」を使用してクラスタリングキーとして定義することができる。次に、テーブル300は、「ALTER TABLE t1 RECLUSTER;」という文を用いて再クラスタリングされる。再クラスタリングにおいて、システムは、
図6に示されるように、新規マイクロパーティション5〜8を作成する。クラスタリングの後、上記クエリはマイクロパーティション5と6のみをスキャンする必要がある。ロウ2は太破線302で示される新規相対位置で示され、ロウ23は太実線304で同じ相対位置に表示される。
【0060】
加えて、再クラスタリングの後、マイクロパーティション5は、一定の状態に達し(即ち、それは再クラスタリングによって改善されず)、そのため、将来の保守のために再クラスタリングの候補として考慮されることから除外される。良好にクラスタリングされた大きなテーブルでは、ほとんどのマイクロパーティションがこのカテゴリに入る。一実施形態では、元のマイクロパーティション(
図4の1〜4)は削除済みとしてマークされるようにすることができるが、システムからはパージされないようにすることができる。例
えば、回復又はバージョン管理のために保持されるようにすることができる。この実施例は、非常に小さい規模での再クラスタリングの影響を示している。大きなテーブルの(即ち、数百万のマイクロパーティションから成る)場合、再クラスタリングはスキャンに大きな影響を与え、その結果、クエリ性能を向上させることができる。
【0061】
一実施形態では、明示的な再クラスタリング又は(例えば、テーブルのクラスタリングの度合いの低下によって引き起こされる)自動再クラスタリングは、再クラスタリングプロセスが使用することができるリソースについてのバジェット又は制限が与えられるようにすることができる。例えば、ユーザは、次のようなコマンドを使用して、RECLUSTER句を有するALTER TABLEコマンドを入力して、クラスタリングキーが定義されているテーブルを手動で再クラスタリングすることができる: ALTER TABLE <name> RECLUSTER [ MAX_SIZE=<budget_
in_bytes>] [ WHERE <condition> ]。上記MAX_SIZE=budget_in_bytesは、再クラスタリングするテーブル内のデータ量(バイト単位)の上限を指定する。再クラスタリングするマイクロパーティションがなくなった場合、又はバジェットを超えずに再クラスタリングすることができる場合には、制限に達する前に再クラスタリングが停止するようにすることができる。MAX_SIZEが指定されていない場合は、再クラスタリングのために使用される仮想ウェアハウス内で使用可能なリソースに基づいて、システムが自動的にサイズを選択するようにすることができる。例えば、コマンド「ALTER TABLE t1 RECLUSTER;」は、このコマンドが実行されているシステムで使用可能なリソースに基づいて、テーブルの再クラスタリングに使用する最適なバジェットを自動的に選択する。ウェアハウスが大きくなればなるほど、再クラスタリングコマンドにより多くのバジェットが与えられ、再クラスタリングはより効果的になる。上記WHERE条件は、テーブル内のデータを再クラスタリングするための条件又は範囲を指定する。一実施形態では、再クラスタリングは、クラスタリングキーが定義されているテーブルに対してのみ実行可能である。再クラスタリングキーは、明示的に定義され又は自動的に選択されるカラム又はキーを含むことができる(例えば、システムは、データがどのように読み込まれるか、又は最も一般的なクエリの種類に基づいて、日付、場所、及び/又は、idカラムを自動的に選択することができる)。
【0062】
図7は、一実施形態による、クラスタリング保守モジュール230のコンポーネントを示す概略ブロック図である。クラスタリング保守モジュール230は、少なくとも性能を維持するためにテーブルの近似的なクラスタリングを保守するための方法及びアルゴリズムを実装するためのコード、回路等を含むことができる。クラスタリング保守モジュール230は、記憶コンポーネント702と、新規データコンポーネント704と、クラスタリング状態コンポーネント706と、パーティション選択コンポーネント708と、再クラスタリングコンポーネント710とを含む。コンポーネント702〜710は、実施例としてのみ与えられ、全ての実施形態に全てが含まれなくてもよい。例えば、各コンポーネント702〜710は、別個の装置又はシステムの一部として含まれ又は実装されてもよい。
【0063】
記憶コンポーネント702は、複数のパーティション内のテーブルデータのクラスタリングの記憶及び/又は管理を行うように構成されている。例えば、テーブルのテーブルデータの1つの部分が最初のパーティションに含まれ、テーブルのデータの別の部分が2番目のパーティションに含まれるようにすることができる。パーティション又はクラスタは、同じ又は異なる記憶装置上に配置されるようにすることができる。異なる記憶装置上のデータは同時にアクセスされるようにすることができため、データの異なる部分に関連するクエリは他方が終了するのを待たずに同時にサービスを受けるようにすることができる。
【0064】
一実施形態において、データベース又はテーブルデータは、基礎となるデータのための自然分割、及び/又は管理者、制御プログラムなどのようなユーザからの指示又はルールに基づいて、パーティショニング又はクラスタリングされるようにすることができる。例えば、モノのインターネット(IoT)データは、時間単位、日単位、週単位、又はその他の間隔などの定期的な間隔で到来することがある。データ収集の定期的な間隔が、特定の日又は間隔のデータが同じパーティション内に含まれるように、データの自然な分割が提供されるようにすることができる。その他の種類の自然分割は、データの種類、データの場所(例えば、州、郵便番号、市区町村、国など)、データに対応する顧客、又はデータに関するその他のメタデータ又は情報を含む。また、記憶コンポーネント702は、データベースサーバマネージャ402に、1つ以上の属性に対応する最小及び最大のロウ値を含むメタデータを各パーティションに記憶させることもできる。
【0065】
一実施形態では、自然分割は、システム制限又は管理者仕様に基づいて自動的に選択されるようにすることができる。例えば、システム又は管理者が最大パーティションサイズを指し示している場合、クラスタリング保守モジュール230は、そのデータをパーティショニングする方法を自動的に決定する。更なる説明として、ユーザは、データベース又はテーブル内のデータが特定のメトリック又はメタデータ(日付、場所、顧客など)に基づいてクラスタリングされるように指定し、次に、システムがユーザ又はシステムの要件を満たすような方法(例えば、最大パーティションサイズ)でデータを分割する。例えば、データが、どのパーティション又はクラスタも最大パーティションサイズよりも大きくならないように、パーティション又はクラスタに分割されるようにすることができる。
【0066】
新規データコンポーネント704は、データベース又はテーブル内の記憶用に新規データを受信するように構成されている。新規データは、データベース又はテーブルによって記憶されるデータ又は情報の種類に対応するデータを含むことができる。例えば、データベース又はテーブルは、センサ又はスマートデバイスからのIoTデータの記憶に使用されるようにすることができる。新規データは、これらのセンサ又はスマートデバイスからのデータを含むことができる。
【0067】
一実施形態では、新規データコンポーネント704は、入力してくる新規データのための中間パーティションを作成する。中間パーティションは、記憶コンポーネント702によって記憶されるデータのパーティションと同じ規則を使用して生成されるようにすることができる。例えば、データベース又はテーブルが、日付と最大パーティションサイズに基づいてパーティショニング又はクラスタリングされている場合、新規データコンポーネント704は、新規データから1つ以上の中間パーティションを作成することができる。その後、中間パーティションは、新規パーティションを作成したり既存のパーティションと組み合わせられたりするようにするために、マージ又は再クラスタリングされようにすることができる。
【0068】
一実施形態では、テーブルへの変更は、新規パーティションにまとめてグループ化されるようにすることができる。例えば、テーブルの1つ以上のDML操作に基づいて追加されたデータを含む、1つ以上の新規パーティションが作成されるようにすることができる。これらの変更は、新規パーティションでは、別の新規パーティション又はテーブル内に既に存在する先行するパーティションのいずれかと重複する可能性がある。これらの重複により、テーブルのクラスタリングの度合いが低下する可能性がある。テーブルのクラスタリングの度合いは、少なくとも部分的には、例えば、クラスタリング比率に基づいてもよい。テーブルに対する変更は、DMLコマンド、又はテーブルデータの少しずつ又は一括のローディングの1つ以上に基づくようにすることができる。
【0069】
クラスタリング状態コンポーネント706は、特定のテーブルのパーティションテーブルデータがどの度合いクラスタ化されているかを判別するように構成されている。例えば、本明細書に開示されるシステム、方法、及び実施形態は、テーブル又はデータベースが「十分にクラスタリングされている」という考えを提示する。具体的には、パーティショニング/クラスタリングの利点の多くは、完全にクラスタリングされていない場合でも、テーブルのパーティションを十分にクラスタリングすることによって得られる。しかしながら、時間の経過と共にクラスタリングの品質は低下し、これらの利点は失われる可能性がある。
【0070】
一実施形態において、クラスタリング状態コンポーネント706は、クラスタリング比率又は他のメトリックに基づいてデータベース又はテーブルがどの度合い適切にパーティショニングされているかを判別することができる。データベースの現在の状態がクラスタリング又はパーティションの品質を満たしているかどうかを判別するためのアルゴリズムの実施例は、幅深度のアルゴリズム、幅プラス重複しているファイル(パーティション)の数アルゴリズム、又はクラスタリング又はパーティショニング品質のための任意の他のアルゴリズム又はメトリックを含む。以下の「インクリメンタルクラスタリングヒューリスティック」セクションにおけるインクリメンタルクラスタリングヒューリスティックのためのアルゴリズムを参照されたい。一実施形態では、クラスタリング比率又は他のメトリックは、ユーザ又はプログラムによる表示及び変更のために公開されてもよい。従って、ユーザ又はプログラムは、テーブル又はデータベースがどのように良好にクラスタリング又はパーティショニングされるべきかを指定することができる。
【0071】
一実施形態では、クラスタリング状態コンポーネント706は、テーブルデータのクラスタリングの度合いがクラスタリング閾値を下回ったことを判別する。クラスタリング閾値は、計算又は測定可能なテーブルの属性の値を含むことができる。例えば、クラスタリングの閾値は、テーブルのクラスタリング比率に基づくようにすることができる。クラスタリング状態コンポーネント706は、いくつのパーティションがテーブルの他のパーティションに重複しているか、テーブルの他のパーティションとの1つ以上のパーティションの重複の度合い、1つ以上の属性値に対していくつのパーティションが重複しているかを判別すること、又はテーブルパーティションの平均深さを判別することであって、その深さは1つ以上の属性に対する特定の属性値について重複するパーティションの数を含むこと、のうちの1つ以上に基づいてクラスタリングの度合い(例えば、クラスタリング閾値)を判別することができる。クラスタリング状態コンポーネント706はまた、サンプル(example)クエリ(例えば、一般的に実行されるクエリや、管理者がクラスタリング
のテストとして指定したクエリ)及びそのクエリがどのくらいの時間を取るかに対する閾値時間に基づいて、クラスタリングの度合いを判別するようにすることもできる。クラスタリング状態コンポーネント706は、サンプル(example)クエリの実行時間がクエリ
実行長閾値を超えることを判別するようにすることができる。一実施形態では、クラスタリング状態コンポーネント706は、リソースが利用可能な場合に、バックグラウンドプロセスの一部として、テーブルデータのクラスタリングの度合いがクラスタリング閾値を下回っているかどうかを、周期的又は断続的に判別するようにすることができる。
【0072】
パーティション選択コンポーネント708は、2つ以上のパーティションをマージ候補として選択して2つ以上の新規パーティションにマージするように構成される。パーティション選択コンポーネント708は、テーブルのクラスタリングが閾値を下回ったことを判別するクラスタリング状態コンポーネント706に応答するか、ユーザからの明示的なユーザコマンドに応答するか、及び/又はDMLコマンドの一部として、マージ候補を選択するようにすることができる。マージは、テーブルに対するパーティションのクラスタリングの度合いを改善又は維持するためのインクリメンタル再クラスタリングプロセスの一部として実行されるようにすることができる。
【0073】
パーティション選択コンポーネント708は、様々な特徴に基づいてマージ候補を選択することができる。実施例として、パーティション選択コンポーネント708は、1つ以上の属性に対して重複する値を含むパーティションのみを選択することができる。別の実施例として、パーティション選択コンポーネント708は、2つ以上のパーティションが重複する度合いが最大になる(例えばそれらが任意の使用可能なパーティションの最大の重複を有する)パーティションを選択する。パーティション選択コンポーネント708は、対象となる値の範囲又は幅に基づいて、パーティションの優先順位付け又は省略を行うことができる。例えば、大きなキー値の範囲をカバーするパーティションは、小さい範囲をカバーするパーティションより優先される。パーティション選択コンポーネント708は、現在の再クラスタリング又はクラスタリング保守手順のためのバジェットに基づいて、マージ候補を選択することもできる。例えば、バジェットは、マージ可能なパーティションの数、使用できるメモリの量、又は使用できる処理リソースの量を示すことができる。パーティション選択コンポーネント708は、このバジェットに基づいて、パーティションを選択することができる。更に、パーティション選択コンポーネント708は、バジェットが大きく、従って、クラスタリングに大きな改善を提供する場合は、マージ/再クラスタリングのためのより多くのパーティションを選択することができる。
【0074】
既に理想的にクラスタリングされているパーティションは、マージ/再クラスタリングがその理想的にクラスタリングされたパーティションのクラスタリングを改善しないので、考慮から省略できる。例えば、パーティション選択コンポーネント708は、テーブル内のどの他のパーティションとも重複せず、及び/又は、テーブル内のどの他のパーティションとも重複閾値を超えて重複しない、パーティションを無視するようにすることができる。同様に、パーティション選択コンポーネント708は、クラスタリングキーのための全ての値が同一の値を持つパーティションを無視することができる。
【0075】
一実施形態では、パーティション選択コンポーネント708は、同様のパーティション幅に基づいてパーティションをグループ化する。パーティション幅は、値の範囲であってよく、又はパーティション内のロウ内の1つ又はキー属性のための値の範囲に少なくとも比例してよい。例えば、パーティション内のロウの最小及び最大の値の差が大きいほど、パーティション幅が大きくなる。同様に、指定されたカラム内の全てのロウに対して同一の値を持つパーティションは、パーティション幅が最小(例えば、パーティション幅=0)になる。一実施形態では、パーティション選択コンポーネント708は、パーティション幅のN底のログ(log
N(パーティション幅))に基づいてパーティションをグループ化する。例えば、N=2の場合、パーティションは次のグループをグループ化することができる:0>パーティション幅>=2;2>パーティション幅>=4;4>パーティション幅>=8;8>パーティション幅>=16;0>パーティション幅>=32;等々。対数基底Nは、所望に応じて任意の値とすることができる。グループ化の後、パーティション選択コンポーネント708は、同じグループに属しているか、又は最大幅の同じグループに属するパーティションの選択を優先する。
【0076】
再クラスタリングコンポーネント710は、テーブルのパーティションを再クラスタリングするための再クラスタリング手順を実行するように構成されている。例えば、再クラスタリングコンポーネント710は、パーティション選択コンポーネント708によって選択された2つ以上のパーティションに対して再クラスタリング手順を実行することができる。再クラスタリングコンポーネント710は、テーブルのクラスタリングが閾値を下回ったことを判別するクラスタリング状態コンポーネント706に応答するか、ユーザからの明示的なユーザコマンドに応答するか、及び/又はDMLコマンドの一部として、再クラスタリングを実行するようにすることができる。再クラスタリングは、テーブルに対するパーティションのクラスタリングの度合いを改善又は維持するためのインクリメンタ
ル再クラスタリングプロセスの一部として実行されるようにすることができる。
【0077】
再クラスタリングコンポーネント710は、バジェット又は再クラスタリングのタイプに基づいて異なるタイプの再クラスタリングを実行することができる。例えば、無制限のバジェット又は完全な再クラスタリングが要求された場合、再クラスタリングコンポーネント710は、別の仮想ウェアハウスを利用して、理想的な方法でテーブルの新規パーティションを作成できる。一方、低バジェットが使用可能な場合、又は再クラスタリングがDMLコマンド又はインクリメンタル再クラスタリング手順の一部として実行される場合、再クラスタリングコンポーネント710は、一度に2つ以上のパーティションをマージ又は再クラスタリングパーティションにすることができる。インクリメンタルクラスタリングの手順は、クラスタリングの増加(重複の削減など)を目的として設計されるようにすることができため、インクリメンタルクラスタリングの手順は、時間の経過や多くの反復により、理想的なクラスタリングに収束するであろう。
【0078】
実施例として、インクリメンタル再クラスタリングは、マージする2つ以上のパーティションを選択して、1つ以上の新規パーティションを作成することができる。結果として得られる新規パーティションは、より良好にクラスタリングされるようにすることができ、それによりテーブル全体のクラスタリングを改善することができる。選択された2つ以上のパーティションがマージされた後に、2つ以上の追加パーティションがマージされるようにして、クラスタリングを更に改善することができる。インクリメンタルクラスタリングが使用されるようにするようにすることができ、理想的なクラスタリングは必要ないため、再クラスタリング手順の前又は後、あるいはテーブルの存在中のいつでさえも、テーブルは理想的にはクラスタリングされないようにすることができる。例えば、異なるパーティション間に依然として重複がある可能性があり、又はパーティションが指定されたクラスタリングキーに対して1つより多い値を含む可能性があるため、テーブルが理想的にクラスタリングされないことがある。しかしながら、そのクラスタリングは、プルーニングが依然として最適又はほぼ最適なクエリ応答を可能にする「十分に良好な」状態に維持されるようにすることができる。従って、理想的なクラスタリングが実現されていないために生じる可能性がある非効率性は、理想的にクラスタリングされたパーティションを生成し又は維持することのオーバーヘッドを回避することで得られる効率性と、あるケースにおいて顕著に相殺されるようにすることができる。
【0079】
図8は、テーブルについてのインクリメンタルクラスタリング保守のための例示的方法800を説明した概略フローチャート図である。この方法800は、データベース管理システム、データベースサービスマネージャ102、及び/又はクラスタリング保守モジュール230によって実行されるようにすることができる。
【0080】
方法800が開始され、データベース管理システム102は、テーブルのためのテーブルデータを複数のパーティションに記憶(802)する。各パーティションは上記テーブルのためのテーブルデータの一部を含み、上記パーティションは上記テーブル内の1つ以上の属性に基づいて少なくとも部分的にクラスタリングされる。データベースサービスマネージャ102は、テーブルへの変更に基づいて1つ以上の新規パーティションを作成(804)する。テーブルに対する変更は、テーブルに対するロウの追加又はロウの削除につながるDMLコマンドを含むようにすることができる。1つ以上の新規パーティションの少なくとも1つが互いに又は先のパーティションと重複してテーブルのクラスタリングの度合いの低下を招く。一実施形態では、データベースサービスマネージャ102は、1つ以上の新規パーティション上で、互いに対して、マージ/再クラスタリングを実行することができる。
【0081】
データベースサービスマネージャ102は、テーブルデータのクラスタリングの度合い
がクラスタリング閾値を下回っているかどうかを判別(806)する。データベースサービスマネージャ102が上記クラスタリングの度合いがクラスタリングの閾値を下回っていると判別(806でYES)した場合、データベースサービスマネージャ102は、テーブルの1つ以上のパーティションの再クラスタリング(808)をトリガして、テーブルのクラスタリングの度合いを改善する。再クラスタリング808は、上述したように、マージ/再クラスタリングのためにパーティションが選択されるインクリメンタル再クラスタリングであるようにすることができる。例えば、再クラスタリング808は、テーブルに理想的にクラスタリングされたパーティションをもたらす完全な再クラスタリングが含まれないようにすることができる。データベースサービスマネージャ102が、クラスタリングの度合いがクラスタリングの閾値を下回っていないと判別(806でYES)した場合、データベースサービスマネージャ102は、テーブルへの変更に基づいて1つ以上の新規パーティションを生成(804)し続けることができる。従って、再クラスタリング又はインクリメンタル再クラスタリング手順の犠牲は、テーブル上のクエリを改善するために必要/有用でない限り、回避することができる。
【0082】
図9は、コンピューティング装置900の実施例を描いたブロック図である。いくつかの実施形態において、コンピューティング装置900は、本明細書で論じられる1つ以上のシステム及びコンポーネントを実装するために使用される。例えば、コンピューティング装置900は、1つ以上のデータベースサービスマネージャ102、クラスタリング保守モジュール230のようなデータベースサービスマネージャのコンポーネント又はモジュール、及び/又はクラスタリング保守モジュール230のコンポーネント702〜712を実装するために使用されるようにすることができる。更に、コンピューティング装置900は、本明細書に記載される任意のシステム及びコンポーネントと相互に作用することができる。従って、コンピューティング装置900は、本明細書で論じられるような種々の手順及びタスクを実行するために使用されるようにすることができる。コンピューティング装置900は、サーバ、クライアント、又は任意の他のコンピューティング実体として機能することができる。コンピューティング装置900は、デスクトップコンピュータ、ノート型コンピュータ、サーバコンピュータ、ハンドヘルドコンピュータ、タブレット等のような多種多様なコンピューティング装置のいずれでもよい。
【0083】
コンピューティング装置900は、1つ以上のプロセッサ902、1つ以上のメモリ装置904、1つ以上のインタフェース906、1つ以上の大容量記憶装置908、及び1つ以上の入出力(I/O)装置910を含み、全てがバス912に結合される。プロセッサ902は、メモリ装置904及び/又は大容量記憶装置908に記憶された命令を実行する1つ以上のプロセッサ又はコントローラを含む。プロセッサ902は、キャッシュメモリなどの様々な種類のコンピュータ読取り可能媒体を含むことができる。
【0084】
メモリ装置904は、種々のコンピュータ読取り可能媒体、例えば揮発性メモリ(例えば、ランダムアクセスメモリ(RAM))及び/又は不揮発性メモリ(例えば、読取り専用メモリ(ROM))を含む。メモリ装置904はまた、フラッシュメモリなどの書換え可能ROMを含むことができる。
【0085】
大容量記憶装置908は、磁気テープ、磁気ディスク、光ディスク、ソリッドステートメモリ(例えば、フラッシュメモリ)などの様々なコンピュータ読取り可能媒体を含む。様々なドライブはまた、様々なコンピュータ読取り可能媒体からの読出し及び/又は書込みを可能にするために、大容量記憶装置908に含まれるようにすることができる。大容量記憶装置908は、リムーバブルメディア及び/又は非リムーバブルメディアを含む。
【0086】
I/O装置910は、コンピューティング装置900からデータ及び/又は他の情報を入力又は取得することを可能にする様々な装置を含む。例えばI/O装置910は、カー
ソル制御装置、キーボード、キーパッド、マイクロフォン、モニタ又は他の表示装置、スピーカ、プリンタ、ネットワークインタフェースカード、モデム、レンズ、CCD又は他の画像キャプチャー装置等を含む。
【0087】
インタフェース906は、コンピューティング装置900が他のシステム、装置、又はコンピューティング環境と対話できるようにする様々なインタフェースを含む。インタフェース906の実施例は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、ワイヤレスネットワーク、及びインターネットへのインタフェースなど、任意の数の異なるネットワークインタフェースを含む。
【0088】
バス912は、プロセッサ902、メモリ装置904、インタフェース906、大容量記憶装置908、及びI/O装置910が互いに、並びにバス912に結合された他の装置又はコンポーネントと、通信することを可能にする。バス912は、システムバス、PCIバス、IEEE1394バス、USBバスなどのような、いくつかのタイプのバス構造の1つ以上を表す。
【0089】
例証の目的のために、プログラム及び他の実行可能プログラムコンポーネントは、個別のブロックとして本明細書に示されているが、そのようなプログラム及びコンポーネントは、コンピューティング装置900の異なる記憶コンポーネントにおいて様々な時間に存在し得ることが理解されるが、それらはプロセッサ902によって実行される。或いは、本明細書に記載されるシステム及び手順は、ハードウェア、又はハードウェア、ソフトウェア、及び/又はファームウェアの組合せで実装されるようにすることができる。例えば、1つ以上のアプリケーション固有集積回路(ASIC)を、本明細書に記載される1つ以上のシステム及び手順を実行するようにプログラムすることができる。本明細書において使用される場合、用語「モジュール」又は「コンポーネント」は、本明細書に開示された動作の全部又は一部を実行する目的のために、ハードウェアによる、又はハードウェア、ソフトウェア、及び/又はファームウェアの組合せによるようなプロセスを達成するための実装装置を伝えることが意図されている。「モジュール」又は「コンポーネント」という用語は、モジュール、コンポーネント、又はそれらの機能又はハードウェアが異なる実施形態で実装され得るされ方からは独立して伝えることが意図されている。
【0090】
<インクリメンタルクラスタリングのアルゴリズムの例>
このアルゴリズムは、追加のデータ構造を使用せずにLSMTのような振る舞いをすることを目的としており、完全に増分動作も可能にする。一実施形態では、このアルゴリズムは、永続的なデータ構造を維持し、複数列のクラスタリングをサポートし、最終的にはテーブルの完全にソート/クラスタリングされたパーティションに収束する。完全にソー
ト/クラスタリングすると、ファイルがパーティションセット内の特定の順序になってい
るわけではありませんが、データを連結してソートされたシーケンスを形成したり、プルーニングが最適であるようにパーティションを配置することができる。このアルゴリズムは、独立したサブタスクにも簡単に分解できる。このアルゴリズムでは、データセットを完全に並べ替える必要はなく、プルーニングは必要以上のパーティションを検出できることを意味する。次の説明では、各列又はパーティションを独自のファイルに格納し、データがクラスタリングされている列に対して多くの操作が実行されるため、「ファイル」及び「パーティション」という用語を区別なく使用する。
【0091】
<1.幅を見つける>
アルゴリズムは、ファイル又はパーティションの幅の検索を含む。アルゴリズムの後続の部分では、ファイル又はパーティションの幅が使用される。多次元のキーを使用すると、それを定義するのは扱いにくい場合がある。また、不均一なドメインの場合、アルゴリズムは、必ずしもドメインの一部ではなく、実際の値の分布に関連する幅を必要とする場
合がある。幅を検索するために、少なくとも2つのオプションがある。
【0092】
1番目のオプションは、値の範囲を擬似等高さヒストグラムに変換する。この最初のオプションは、非減少値を有するパーティションの最も長いシーケンスを検索する。これにより、データ分布の適切な近似値が得られる。そのシーケンスの検索は、パーティションを並び替え、以下の操作を実行することにより、行われるようにすることができる。
files =sort(files, by-EPs-MAX-value)
last_file =files[0]
sequence =[last_file]
for (int i = 1;i < sorted_files.size(); i++) {
if(files[i].min < last_file.max) // ファイルが最後の先行ファイルと重複
continue
last_file =files[i]
sequence.append(last_file)
}
【0093】
結果として得られるシーケンスでバイナリ検索を行うことにより、アルゴリズムはそのシーケンスに関してファイル又はパーティションのサイズを見つけることができる。これは、シーケンス内でいくつのパーティションが特定のファイル/パーティションと重複しているかを判別するために使用されるようにすることができる。一実施形態では、ファイル又はパーティションは、指標としてパーティション内のレコード数とともに記憶されてもよい。これは、いくつかの「より小さな」パーティションに役立ち、もう少し正確にすることができる。この手順では、各パーティションに値1...Nを与える。ここで、Nはシーケンスの長さである。完全に並び替えられたケース(明瞭値を想定)では、各パーティションの幅は1(狭いパーティション)になる。その後、新しいランダムな並び替えられていないパーティションが追加され、それらが全体的に使用されている範囲の大部分にまたがると仮定すると、そのサイズはN(幅の広いパーティション)になる。1000パーティションの完全に並び替えられたシーケンスがある場合、10個の未並替えパーティションが挿入され、パーティション/ファイルには幅1の1000パーティションと1000に近い幅の10パーティションが含まれる。ここでのパーティションの「幅」は、LSMTのレベルのサイズとやや逆であることに留意されたい。言い換えれば、非常に小さなLSMTグループはここでは非常に「広い」であろう。より正確ではないが、幅のより単純な定義は、全ての最小と最大を取り、それらをポイントとして扱い、それらを並べ替えることであろう。次に、幅=パーティションがカバーするこれらのポイントの数とする。
【0094】
幅を決定するためのもう1つのより正確なオプションは、全てのパーティションに対して範囲ツリーを構築することを含む。次に、範囲ツリーを使用して、2番目のオプションは、特定のパーティションが重複するパーティションの部分がいくつあるか計算する。
【0095】
<2.幅によってパーティションを分類する>
ひとたびパーティションの幅を有したら、それらはNの累乗個のバケットに分類(又はグループ化)されるようにすることができる。例えば、Nを2にすることができる。ここでの直感は、常に同じような幅のパーティションをマージしたいということである。その理由は、同じレベルのものをマージすると、より高いレベルが増加することである。また、後続のステップで有用な作業を行う可能性を高めるために、ファイル又はパーティションをより少ない数のバケット(例えば、4又は16の累乗)にグループ化することもできるということに注意されたい。バケットの数は、いつでもマージされないであろうパーティション(ファイル)の重複の回数にほぼ一致する。そのことは、より少ないバケットが
役に立つことを意味する。同時に、より少ないバケットはまた、幅の異なるパーティションもマージされる可能性があることも意味する。これは、ほぼ同じ幅のパーティションをマージする利点と、少ないバケットに対して少ない作業量との間のバランスである。
【0096】
<3.マージ候補を見付ける>
アルゴリズムは、マージするファイル又はパーティションの検索を含む。マージの間、並び替えられたパーティションは新しく並び替えられたパーティションにマージされる。マージ候補を見つけるには、各バケット又はグループが最も幅の広いものから始まり、重複している最大N個のパーティションを検索することが含まれる。Nは何でもかまわないし、マージ/インクリメンタルクラスタリングに割り当てられたリソースのバジェットによって異なる場合がある。重複するパーティションの検索は、並び替えられたシーケンスにペアを配置し、重複する最大N個のパーティションを検索することによって実行できる(例えば、[“start”,file.min−val][“end”,file.max−val])。これらのパーティションは、マージされると、次のアルゴリズムの反復で「より狭い」パーティションを形成する。1つのセットが特定されると、バジェットに達するまで追加セットが識別される。バケットに(重複している)パーティションがない場合、アルゴリズムはより「狭い」バケットに移動して、何らかの作業機会を構築するようにすることができることに注意されたい。最初のデフォルトパスが十分な作業を見つけられない場合、これは第2パスのアプローチであるようにすることができる。
【0097】
<シナリオ実施例>
1次元のクラスタリングキーを有する簡単なシナリオを使用してみる。記法:[0-7]
は、0から7までの値を持つ単一のパーティションを表わす。開始点-完全に並び替えら
れたシーケンス、及びいくつかの「新規」パーティション。我々のドメインは16進数字であると仮定する。
[0-1][2-3] [4-5] [6-7] [8-9] [A-B] [C-D] [E-F] // 並び替えられたパーティションシーケンス-ノート、パーティションの順序は関係ない
[0-E] [2-F] [1-C] [2-D]// 「幅」が導出される前の新しいパーティション
【0098】
最も長い並び替えられたシーケンスは8個のパーティションであることに注意されたい。新しいパーティションの幅は以下の通りである。
[0-----------------------------------------E ] - width = 8
[2------------------------------------ F] - width = 7
[1--------------------------------C] - width = 7
[2-------------------------------D] - width = 6
【0099】
これらのパーティションが同じバケットに分類され、N(マージする数)が2であると仮定する。アルゴリズムは、マージされるべきパーティション[0-E]と[1-C]を選択し、そして[2-D]と[2-F]を選択する。これにより、4つの新しいパーティションが作成される。データはアルゴリズムの一部として並び替えられるため、結果として得られる各パーティション内の範囲は小さくなる。
[0-E] + [1-C] => [0-7] , [8-C]
[2-D] + [2-F] => [2-8] , [9-F]
【0100】
最初のパスの後の状況は次のとおりである。
[0-1] [2-3] [4-5] [6-7] [8-9] [A-B] [C-D] [E-F] // 並び替えられたファイル - width = ca.1
[0-7] [8-C] [2-8] [9-F] // 新しいマージされたファイル, width = ca. 4(より小さい値範囲)
【0101】
ここで、新しいマージされたファイル(パーティション)の「幅」は、以前よりも「狭く」なっていることに注意されたい。新しい「マージされた」ファイルを追加すると「広い」範囲が含まれる可能性がある。
[1-E] [1-F] [0-D] [2-F] // 追加的に新しい追加されたファイル, width =ca.8
【0102】
このアルゴリズムは[1-E]+[1-F],[0-D]+[2-F]を幅=8のバケット(例えば、log2
)からマージするために選択し、新しいパーティション[1-8]+[9-F]と[0-7][8-F]を生成
する。ただし、次のように、重複するパーティションも幅=4(十分なバジェットがある場合)とマージされる。
[0-7]+[2-8]=> [0-4]+[5-8] and [8-C]+[9-F]=>[8-B]+[C-F]
【0103】
このパスの後、パーティション/ファイルの状況は次のようになる。
[0-1] [2-3] [4-5] [6-7] [8-9] [A-B] [C-D] [E-F] // 並び替えられたファイル- width = ca.1
[0-4] [5-8] [8-B] [C-F] // 幅4からマージされたファイル、いまそれらは幅2を有
する
[1-8] [9-F] [0-8] [8-F] // 幅8からマージされたファイル、いまそれらは幅4を有
する
【0104】
アルゴリズムを数回繰り返していくと、パーティションは最終的には重複する「狭い」パーティションに到達し、マージされて完全に並び替えられたシーケンスになる。
【0105】
<実施例>
以下の実施例は、更なる実施形態に関する。
【0106】
実施例1では、テーブルのためのテーブルデータを複数のパーティションに記憶することであって、各パーティションがテーブルのための上記テーブルデータの一部を含み、上記パーティションは上記テーブル内の1つ以上の属性(例えばカラム)に基づいて少なくとも部分的にクラスタリングされることを含む方法である。その方法は、上記テーブルへの変更に基づいて1つ以上の新規パーティションを作成することであって、上記1つ以上の新規パーティションの少なくとも1つが互いに又は先のパーティションと重複して上記テーブルのクラスタリングの度合いの低下を招くこととを含む。その方法は、上記テーブルのクラスタリングの度合いがクラスタリング閾値を下回っていることを判別することを含む。その方法はまた、クラスタリングの上記度合いが上記クラスタリング閾値を下回ったことを判別することに応答して、上記テーブルの1つ以上のパーティションを再クラスタリングして上記テーブルのクラスタリングの上記度合いを改善することも含む。
【0107】
実施例2では、実施例1のテーブルに対する変更が、DMLコマンド、又はテーブルデータの少しずつ若しくは一括のローディングの1つ以上に基づく1つ以上の変更を含む。
【0108】
実施例3では、実施例1〜2のいずれかの方法が、いくつのパーティションが上記テーブルの他のパーティションに重複しているか、上記テーブルの他のパーティションとの1つ以上のパーティションの重複の度合い、1つ以上の属性値に対していくつのパーティションが重複しているかを判別すること、又は、テーブルパーティションの平均深さを判別することであって、上記深さは上記1つ以上の属性に対する特定の属性値について重複するパーティションの数を含むこと、の1つ以上に基づいて上記クラスタリングの度合いを判別することを更に含む。
【0109】
実施例4では、実施例1〜3のいずれかにおいて、上記テーブルデータが十分にクラスタリングされていないことを判別することが、サンプルクエリの実行時間がクエリ実行長
閾値を超えることを判別することを含む。
【0110】
実施例5では、実施例1〜4のいずれかにおいて、テーブルデータのクラスタリングの度合いがクラスタリング閾値を下回っているかどうかを判別すること、又は再クラスタリングすることが、バックグラウンドプロセスの一部として判別すること又は再クラスタリングすることを含む。
【0111】
実施例6では、実施例1の方法が更に、2つ以上のパーティションをマージ候補として選択することを含む。
【0112】
実施例7では、実施例6のように上記2つ以上のパーティションを上記マージ候補として選択することは、上記1つ以上の属性に対して重複する値を含む2つ以上のパーティション、上記2つ以上のパーティションが重複する度合い、上記2つ以上のパーティションによってカバーされる1つ以上の属性に対応する値の幅、又は、上記1つ以上の属性に基づいてパーティションが理想的にクラスタリングされているか否か、の1つ以上に基づいて選択することを含む。
【0113】
実施例8では、実施例6〜7のいずれかにおいて、上記2つ以上のパーティションを上記マージ候補として選択することは、上記テーブル内のどの他のパーティションとも重複せず、又は、上記テーブル内のどの他のパーティションとも重複閾値を超えて重複しない、パーティションを無視することを含む。
【0114】
実施例9では、実施例6〜8のいずれかにおいて、上記2つ以上のパーティションを上記マージ候補として選択することは、上記1つ以上の属性に対して同一の値を有するロウの値を含むパーティションを無視することを含む。
【0115】
実施例10では、実施例6の方法が更に、パーティション幅に基づいてパーティションをグループ化することを含み、ここで、パーティション幅は、パーティション内のロウ内の1つ以上の属性の値の範囲に比例する。
【0116】
実施例11では、実施例10のパーティション幅に基づいてパーティションをグループ化することが、パーティション幅のN底の対数に基づいてグループ化することを含む。
【0117】
実施例12では、実施例10〜11のいずれかにおいて、2つ以上のパーティションを選択することが、同じグループからパーティションを選択することを含む。
【0118】
実施例13において、実施例1〜12のいずれかにおける再クラスタリングは、インクリメンタルにクラスタリングを改善することを備え、再クラスタリングの繰返しに基づいて上記テーブルデータの上記1つ以上のパーティションを再クラスタリングすることが理想的なパーティショニングに向けて収束することを含む。
【0119】
実施例14において、実施例1〜13のいずれかにおける再クラスタリングは、リソースバジェット(例えば、再クラスタリングのリソースのバジェット)に基づく再クラスタリングを含む。
【0120】
実施例15では、実施例1〜14のいずれかにおける再クラスタリングが、2つ以上のパーティションをマージして改善されたクラスタリングを有する1つ以上のパーティションを生成することを含む。
【0121】
実施例16では、実施例1〜15のいずれかの方法を含み、上記テーブルに対する上記
変更の前又は後に上記テーブルは理想的にはクラスタリングされていない。上記エーブルは、上記1つ以上の属性に対応する値の範囲内で重複するパーティションのペアが1つも存在しないこと、及び/又は上記1つ以上の属性に対応する属性についてのパーティションの全てのロウが同じ値を含むときに、理想的にクラスタリングされる。
【0122】
実施例17では、実施例1〜16のいずれかの方法が、DMLコマンドの一部としてインクリメンタル再クラスタリングを実行することを含む。
【0123】
実施例18では、実施例17におけるDMLコマンドの一部としてのインクリメンタル再クラスタリングは、マージバジェットに基づいて制限される。マージバジェットは、マージ可能なパーティションの数、及び/又は割り当てられたメモリ又はインクリメンタル再クラスタリングの一部として使用される処理リソースの量の1つ以上が制限されるようにすることができる。
【0124】
実施例19は、実施例1〜18のいずれかのような方法を実行する手段を含む装置又はシステムである。
【0125】
実施例20は、機械読取り可能命令を含む機械読取り可能記憶装置であり、その命令が実行される時には、実施例19の何れかの方法を実装し又は装置を実現する。
【0126】
様々な技法、又はそれらの特定の態様若しくはその一部は、フロッピーディスク、CD−ROM、ハードドライブ、非一時的なコンピュータ読取り可能記憶媒体、又はその他の前述の機械読取り可能記憶媒体に具現化されるプログラムコード(即ち、命令)の形式を取るようにすることができる。上記プログラムコードが、コンピュータのような機械によって読み込まれそして実行されるときに、その機械が様々な技術を実践するための装置となる。プログラマブルコンピュータ上でプログラムコードが実行される場合、そのコンピューティング装置は、プロセッサ、プロセッサによって読み取り可能な記憶媒体(揮発性及び不揮発性メモリ及び/又は記憶エレメントを含む)、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを含むようにすることができる。揮発性及び不揮発性メモリ及び/又は記憶エレメントは、RAM、EPROM、フラッシュドライブ、オプティカルドライブ、磁気ハードドライブ、又は電子データを記憶するための別の媒体とすることができる。本明細書に記載される様々な技法を実装又は利用することができる1つ以上のプログラムは、アプリケーションプログラミングインターフェース(API)、再利用可能なコントロール等を使用することができる。このようなプログラムは、コンピュータシステムと通信するための高レベルの手続き型、機能的、オブジェクト指向のプログラミング言語で実装されるようにすることができる。しかし、プログラムは、必要に応じてアセンブリ言語又は機械語で実装されてもよい。いずれの場合も、言語はコンパイル済み又はインタープリタ型の言語であり、ハードウェアの実装と組み合わせることができる。
【0127】
明細書に記載された機能単位の多くは、より具体的にその実装の独立性を強調するために使用される用語である1つ以上のコンポーネント又はモジュールとして実装されるようにすることができることが理解されるべきである。例えば、コンポーネント又はモジュールは、カスタム超大規模インテグレーション(VLSI)回路若しくはゲートアレイ、論理チップ、トランジスタ、又は他のディスクリート部品などの既製半導体を含むハードウェア回路として実装することができる。コンポーネントは、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、プログラマブルロジックデバイスなどのプログラマブルハードウェアデバイスに実装することもできる。
【0128】
コンポーネントは、様々な種類のプロセッサによって実行するためのソフトウェアで実
装されるようにすることもできる。例えば、実行可能コードの識別されたコンポーネントは、コンピュータ命令の1つ以上の物理的又は論理的なブロックを構成し、例えば、オブジェクト、プロシージャ、又は関数として編成することができる。それにもかかわらず、識別されたコンポーネントの実行可能ファイルは物理的に一緒に配置される必要はないが、論理的に一緒に結合してコンポーネントを構成し、そのコンポーネントのための指定された目的を達成する別の場所に記憶される異なる命令を含む場合がある
【0129】
実際、実行可能コードのコンポーネントは、単一の命令又は多くの命令であってもよく、複数の異なるコードセグメント、異なるプログラム間、及び複数のメモリデバイスに分散されている場合もある。同様に、オペレーショナルデータは、本明細書においてコンポーネント内で識別及び図示されてもよく、任意の適切な形式で具体化され、任意の適切なタイプのデータ構造内に組織化され得る。オペレーショナルデータは、単一のデータセットとして収集されるか、異なる記憶装置を含む異なる場所に分散され、少なくとも部分的にはシステム又はネットワーク上の電子信号として存在してよい。コンポーネントは、所望の機能を実行するように動作可能なエージェントを含み、パッシブ又はアクティブであってもよい。
【0130】
本明細書中の「一実施例」の参照は、本開示の少なくとも1つの実施形態に含まれる特定の特徴、構造、又は特性について説明することを意味する。従って、本明細書全体を通じて種々の箇所に「一実施例における」という語句の外観は、必ずしも全て同じ実施形態を指すわけではない。
【0131】
本明細書において使用されるように、複数の項目、構造要素、組成要素、及び/又は材料は、便宜のために共通のリストに提示されてもよい。ただし、これらのリストは、リストの各メンバが個別でユニークなメンバとして個別に識別されるかのように解釈されるべきである。従って、そのようなリストの個々のメンバは、その逆を示すことなく、共通のグループでのプレゼンテーションに基づいてのみ、同じリストの他のメンバの事実上の等価として解釈されるべきではない。加えて、本開示の様々な実施形態及び実施例は、本明細書において種々の構成要素についての代替物と共に参照され得る。そのような実施形態、実施例、及び代替物は、互いの事実上の等価として解釈されるべきではないが、本開示の独立した及び自律的な表現として考慮されるべきであることが理解される。
【0132】
上記は明瞭さの目的でいくつかの詳細に記載されているが、特定の変更及び改変がその原則を逸脱することなくなされ得ることは明らかである。本明細書に記載されるプロセス及び装置の両方を実施する多くの代替的な方法があることに留意すべきである。従って、本実施形態は、限定的ではなく例示的なものと考えることができる。
【0133】
当業者は、開示の根底にある原則から逸脱することなく、上記の実施形態の詳細に多くの変更がなされ得ることを理解するであろう。