【文献】
松信嘉範,MySQLの「InfiniDB」で考える DWH用途と相性が良い「列指向データベース」とは,DB Magazine,株式会社翔泳社,2010年 8月 1日,第20巻,第4号,第106〜114頁
(58)【調査した分野】(Int.Cl.,DB名)
前記カラムナデータベーステーブルの前記列を表す前記高さのバランスを調整したヒストグラムに対する前記複数のバケットに対して前記複数のバケット範囲サイズを判断するために、前記高さのバランスを調整したヒストグラム生成器が、
前記列の前記データを取得することと、
前記複数のバケットを生成することと、
前記列の前記データが前記バケット間で均等に分布されるように、前記高さのバランスを調整したヒストグラムに対する各バケットに対して、前記複数のバケット範囲サイズのうちのバケット範囲サイズを設定することとを行うように構成されている、請求項1に記載のシステム。
前記確率的データ構造が、複数のビットを含むビットマップであり、前記ビットマップの各ビットが、前記高さのバランスを調整したヒストグラムに対する前記複数のバケットの各バケットを表し、かつ前記データブロック内に格納されている前記バケット範囲サイズ内に含まれる全てのデータ値に対して、前記バケットに対応する前記ビットマップの前記ビットが設定される、請求項1に記載のシステム。
前記少なくとも1つのノードが、分散データウェアハウスクラスタのリーダーノードであり、かつ、前記少なくともいくつかのノードのうちの前記少なくとも1つが、前記分散データウェアハウスクラスタの計算ノードである、請求項1に記載のシステム。
前記1つ以上のデータブロックの各々の前記確率的データ構造を、前記1つ以上のデータブロックに関する情報を格納するブロックメタデータ構造内のそれぞれのエントリ内に格納することをさらに含む、請求項7に記載の方法。
前記列に対するデータを格納している前記1つ以上のデータブロックの各々に対する前記確率的データ構造を前記検査して、前記選択データに対する前記クエリーに対応するために読み取る必要のない、前記1つ以上のデータブロックのうちの前記特定のものを判断することが、
前記選択データを含む、前記値の範囲内の前記1つ以上のバケットを表す1つ以上のビットを判断することと、
前記1つ以上のデータブロックに対する前記ブロックメタデータ構造内に格納されている各ビットマップ内の前記1つ以上のビットを検査して、前記1つ以上のビットのうちの1つも、前記選択データに対する前記クエリーに対応するために読み取る必要のない前記特定のものとして設定されていない、データブロックを識別することとを含む、請求項8に記載の方法。
前記列内のデータの前記複数のバケット間での前記分布に対する前記リバランス事象を前記検出することが、1つ以上の新しいデータブロック内に格納されている前記列に対する追加のデータ量がリバランス閾値を上回っていると判断することを含む、請求項11に記載の方法。
各確率的データ構造を前記更新することに続いて、前記クエリーに対応するために前記1つ以上のデータブロックの1つから読み取ったデータが、前記1つのデータブロックに対する前記確率的データ構造によって示される通りのデータ値の前記範囲内のデータ値を含んでいないという指示を受信することと、
前記データ値がデータ値の前記範囲内に含まれているという前記指示を除去するために前記1つのデータブロックに対する前記確率的データ構造を更新することとをさらに含む、請求項11に記載の方法。
【発明を実施するための形態】
【0004】
本明細書では、実施形態は、いくつかの実施形態および例証する図に対する例として説明されているが、当業者は、実施形態が説明する実施形態または図に制限されないことを理解するであろう。図およびそれに対する詳細な記述は、開示する特定の形式に実施形態を制限することを意図せず、それとは逆に、意図は、添付の請求項によって定義されるように、精神および範囲に含まれる、全ての修正、均等物および代替手段を包含することであることを理解されたい。本明細書で使用する見出しは編成目的のためだけであり、記述または請求項の範囲を制限するために使用されることを意図しない。本出願全体を通して、用語「〜し得る(may)」は、強制的な意味(すなわち、〜しなければならないことを意味する)ではなく、許容的な意味(すなわち、〜する可能性があることを意味する)で使用される。同様に、用語「含む(include)」、「含む(including)」、および「含む(includes)」は、制限することではなく、包含することを意味する。
【0005】
以下の詳細な記述では、請求された主題の完全な理解を提供するために、多数の具体的詳細が説明される。しかし、請求された主題は、これらの具体的詳細なしでも実施され得ることが当業者によって理解されよう。他の例では、当業者によって知られている方法、装置、またはシステムは、請求された主題を曖昧にしないために、詳細には説明されていない。
【0006】
第1、第2などの用語は、本明細書では様々な要素を記述するために使用され得るが、これらの要素は、これらの用語によって制限されるべきでないことも理解されたい。これらの用語は、1つの要素を別の要素と区別するためにのみ使用される。例えば、第1の接触は、第2の接触と称せられ得、同様に、第2の接触は、本発明の範囲から逸脱することなく、第1の接触と称せられ得る。第1および第2の接触は両方とも接触であるが、それらは同じ接触ではない。
【0007】
本明細書において本発明の記述に使用される用語は、特定の実施形態を記述することのみを目的とし、本発明を制限することを意図していない。本発明の記述および添付の請求項では、単数形の「1つの(a)」、「1つの(an)」および「その(the)」は、コンテキストで別段の明確な指示がない限り、複数形も含むことを意図する。本明細書では、用語「および/または」は、関連するリストされた項目の1つ以上の任意および全ての可能な組合せを参照および包含することも理解されたい。用語「含む(includes)」、「含む(including)」、「含む(comprises)」、および/または「含む(comprising)」は、本明細書で使用される場合、明記された特徴、整数、ステップ、動作、要素、および/または構成要素の存在を指定するが、1つ以上の他の特徴、整数、ステップ、動作、要素、構成要素、および/またはそれらのグループの存在または追加を除外しないこともさらに理解されたい。
【0008】
本明細書では、用語「もし〜ならば(if)」は、コンテキストに応じて、「〜の場合(when)」または「〜すると(upon)」または「判断に応答して」もしくは「検出に応答して」を意味すると解釈され得る。同様に、句「〜ことが判断される場合」または「[明記された条件もしくは事象]が検出された場合」は、コンテキストに応じて、「〜と判断すると」もしくは「判断に応答して」または「[明記された条件もしくは事象]を検出すると」もしくは「[明記された条件もしくは事象]の検出に応答して」を意味すると解釈され得る。
【0009】
カラムナデータベースの列に対するヒストグラムを使用する効率的なクエリー処理の様々な実施形態が本明細書で説明される。分散データウェアハウスシステムなどの、データベース管理サービス、または他のデータベース管理システムは、効率的なデータ管理をクライアントに提供するために、列指向データベーステーブル(以下、「カラムナデータベーステーブル」と呼ぶ)を実装し得る。通常、カラムナデータベーステーブル内のデータは、日付によってなど、データベーステーブルの1つの列に従ってソートされる。データがソートされている列に対するデータをソートしているブロックかどうかを判断する際に、各データブロックに対する異なる範囲が格納または推定されて、クエリーが、要求されたデータがデータブロック内に恐らく格納されていると分かっているデータブロックの読取りのみを指示するのを可能にする。しかし、かかる技術は、一度に1つの列だけがソートされ得るので、カラムナデータベーステーブルがソートされている列内のデータに対するクエリーに応答する場合にのみ適用され得る。
【0010】
ヒストグラムは、異なる値の範囲内のデータセットの分布を表し、それは、しばしば、バケットと呼ばれる。例えば、天気温度のヒストグラムは、最高気温が90度台、80度台、70度台などであった日数を示す棒グラフを示し得る。ヒストグラムを表す棒グラフにおける棒の高さは、いくつかの値の範囲がデータセット内でより頻出する値を有し得るので、大きく変わり得る。しかし、高さのバランスを調整したヒストグラムは、異なるサイズの値の範囲(すなわち、バケット)を提供し、この特徴により、プロットされたヒストグラムの棒の高さは、均等であるか、またはバランスを取られ得る。カラムナデータベーステーブルの列は、様々な頻度のデータ値を含み得る。これらのデータ値に基づき生成されたヒストグラムは、データブロック内に格納されている異なる範囲の値を識別するために使用され得、従って、どのブロックが読み取る必要がないかを判断し得る。少なくともいくつかの実施形態では、これらのデータ値に基づき生成された高さのバランスを調整したヒストグラムは、クエリーを処理するために十分な選択性(例えば、特定のバケット内のデータ値の区別または確率)を提供し得、この特徴により、クエリーが受信されると、列の高さのバランスを調整したヒストグラムが、列に対するデータを格納しているどのデータブロックが読み取る必要がないかを判断するために使用され得る。例えば、次いで、受信したクエリーに対応するためのデータを取得するために、少ない読取り動作(または他の様々なアクセス動作)が実行され得る。このように、クエリーを処理するためにカラムナデータベースの列に対するヒストグラムまたは高さのバランスを調整したヒストグラムを使用することにより、いくつかの実施形態は、大量のデータのより効率的な管理およびそれらに対するアクセスを提供し得る。
【0011】
クライアント(または顧客、組織、実体など)が、後に格納または管理を必要とし得る大量のデータを収集することは稀ではない。いくつかのクライアントは、このデータに対して独自のデータ管理システムを実装することを望み得るが、データ管理サービスを得ることは、自身のデータを管理することを望まないクライアントにとって、より効率的で費用効果が高い選択肢であると分かり得ることがますます明らかになる。例えば、小企業は、将来のデータ分析のために売上レコードおよび関連データを維持することを望み得る。データを維持するためのデータ管理システム、ならびにそのシステムのセットアップおよび保守に必要な専門知識に直接投資をする代わりに、小企業は、代替方法として、自身のデータを格納および管理するためにデータ管理サービスと契約を結ぶことはより効率的であることが分かり得る。
【0012】
図2〜
図4Bに関して以下で説明する分散データウェアハウスサービスなどの、データ管理サービスは、クライアントに、その様々なニーズに応じて、様々な異なるデータ管理サービスを提供し得る。ある場合には、クライアントは、売上レコードマーケティング、管理報告、ビジネスプロセス管理、予算予測、財務報告、ウェブサイト解析、または他の多くのタイプもしくは種類のデータなどの、大量のデータを格納および維持することを望み得る。データに対するクライアントの利用は、そのデータを格納するために使用されるデータ管理システムの構成にも影響し得る。例えば、データの大きな集合を各行内の少数の列から集めるような、あるタイプのデータ分析および他の操作に対して、カラムナデータベーステーブルは、もっと効率的な性能を提供し得る。言い換えれば、(従来型のデータベース方式におけるように)列の行全体を各データブロック内に格納するのではなく、データベーステーブルからの列情報がディスク上のデータブロックに格納され得る。
【0013】
いくつかの実施形態では、テーブルデータをかかるカラムナ方式で格納することは、様々なクエリーに対する全体的なディスクI/O要件を削減し得、かつ解析クエリー性能を向上し得る。例えば、データベーステーブル情報をカラムナ方式で格納すると、クエリー処理の一部としてデータベース操作を実行するためにデータをメモリ内に読み出す場合(例えば、テーブル内の全ての行に対する全ての列フィールド値を読み出す場合)に実行されるディスクI/O要求数を削減し得、かつクエリーを処理する際にディスクからロードする必要のあるデータの量を削減し得る。逆に、一定数のディスク要求に対して、各データブロックがテーブル行全体を格納した場合よりもはるかに多くの行に対する列フィールド値が読み出され得る。いくつかの実施形態では、ディスク要件は、カラムナ記憶データタイプと適合する圧縮方法を使用して、さらに削減され得る。例えば、各ブロックが均一のデータ(すなわち、全てが同じデータタイプの列フィールド値)を含むので、ディスク記憶および読出し要件が、特定の列データタイプに最も適した圧縮方法を適用することによりさらに削減され得る。いくつかの実施形態では、単一列のフィールド値のみを含むデータブロックをディスク上に格納するためのスペースにおける節約が、データを読み出し、次いでそのデータをシステムメモリ内に格納する場合(例えば、読み出したデータを分析するか、または他の方法で処理する場合)にスペースにおける節約になり得る。例えば、一度に1つまたは少数の列にアクセスし、かつ/またはそれらを操作する必要があるだけのデータベース操作に対して、クエリーを実行するために実際に必要な特定の列内のデータを格納しているデータブロックだけが読み出されてメモリ内に格納され得るので、従来型の行ベース記憶よりも少ないメモリ空間しか必要とされない可能性がある。カラムナデータベーステーブルを実装する効率を向上させるため、カラムナデータベースの列に対するヒストグラムが生成されて、クエリーに応答する際に読み取る必要のないデータブロックを判断するために使用される確率的データ構造を作成し得る。
【0014】
図1は、いくつかの実施形態に従った、カラムナデータベースの列に対する高さのバランスを調整したヒストグラムを使用した効率的なクエリー処理のデータフローブロック図を示す。高さのバランスを調整したヒストグラム110は、カラムナデータベーステーブルの列132内の複数のデータブロックに格納されたデータ値に基づき作成され得る。ヒストグラム110のバケット範囲サイズは、データ値がヒストグラムのバケット120の間で均等に分布されるように、判断され得る。高さのバランスを調整したヒストグラム110内のバケット110のどの特定のバケットに対してデータブロック内に格納されたデータ値があるかを示す、確率的データ構造が作成され得る。より一般的には、確率的データ構造は、所与の値が、データブロック内に格納されたデータ値のセットなどの、データセットのメンバーであるかをテストするために使用され得る。確率的データ構造は、特定の値がデータ値のセットのメンバーではないことを確信をもって示し得る。選択データに列132を対象としたクエリー140に対応するため、スーパーブロックデータ構造100内のそれぞれのエントリが、どのブロックが読み取る必要がないかを判断するために検査され得る。
【0015】
記憶装置130は、カラムナデータベーステーブルのためのデータを格納するように構成された記憶ディスク装置または他のタイプの記憶装置などの、1つ以上の記憶装置であり得る。
図1では、記憶装置130は、列132を含め、複数の列に対するデータを格納するように構成される。データは、例えば、日付、引用、量、またはウェブ測定基準のリスト、および、より一般的には、カラムナデータベーステーブルの列に対するデータブロック内に格納可能な任意の他のタイプまたは形式のデータ値であり得る。様々な実施形態では、列内に格納されたデータ値はソートされていない。データブロックは、データ記憶の単位(例えば、データページ)、論理的抽象化、またはこれらのデータ値をデータベースまたは他の記憶システムに格納する記憶装置の物理ブロックであり得る。カラムナデータベーステーブルは、列のデータ値を一緒に格納するように構成されたデータのための列指向記憶システムであり得る。少なくともいくつかの実施形態では、記憶装置130は、分散型データベースシステム内の複数の異なるノードにわたって分散され得る。
【0016】
ヒストグラム110は、列132内に格納されたデータブロックのデータ値に基づき生成され得る。バケット120のバケット範囲サイズを判断するために、データブロックからの列のデータが取得され得る。次いで、複数のバケットが生成され得、それらは、データブロック内に格納され得る値の数よりも大幅に多い可能性がある。バケット範囲サイズは、列のデータがバケット間で均等に分布されるように、バケットに対して設定され得る。
図1は、様々なバケット120の範囲サイズを示す。例えば、小売業者は、一定の期間、商品をその小売業者から購入する顧客に関して、年齢などの、人口動態情報をカラムナデータベーステーブルの列内に格納し得る。顧客の年齢がある年齢範囲(例えば、45〜60歳)に高度に集中して、残りの顧客年齢がもっと散らばっていた場合、均等なバケットサイズ範囲(例えば、10歳)をもつヒストグラムは、多数を有する40〜50および50〜60の、2つのバケット、ならびにはるかに少数の顧客を有する他のバケットをもち得る。代わりに、バケット範囲サイズが、いくつかのバケット範囲が年齢0〜25を含むが、他は、もっと少ない45〜47であり得るように、バケット範囲サイズにおいて変化し得、これにより、各バケットで表される顧客数が全てのバケットにわたって均等に分布されるようになる。
【0017】
確率的データ構造は、バケット範囲サイズ120に基づき、各データブロックに対して生成され得る。これらの確率的データ構造は、バケット120のどのバケットに対して、データ値が、バケットによって表される値の範囲内であり、データブロック内に格納されているかを示す。いくつかの実施形態では、
図1に示すように、確率的データ構造は、ビットマップとして格納され得る。ビットマップの各ビットは、ヒストグラムのバケットに対応し得る。設定されたビットは、バケットの範囲内のデータ値がデータブロック内に格納されていることを示す。従って、例えば、クエリーが処理されていて、ビットマップがあるデータ値について検査される場合に、クエリー内で求められたデータ値を含むバケットを表すビットマップのビットが設定されていると、そのデータ値がデータブロック内に格納されている可能性がある。そうでない場合、データブロックは、読み取る必要がない可能性がある。高さのバランスを調整したヒストグラム110として示されているが、少なくともいくつかの実施形態では、確率的データ構造を生成するために、高さのバランスを調整していないヒストグラムが使用され得る。
【0018】
確率的データ構造は、スーパーブロックデータ構造100などの、ブロックメタデータのデータ構造内に格納され得、スーパーブロックデータ構造100は、列内のデータブロックに関する情報を格納する。各データブロックは、スーパーブロックデータ構造100内にそれぞれのエントリを有し得る。いくつかの実施形態では、列に対する新しいデータが受信されると、どのバケットが、そのバケット範囲内のデータブロックに格納されたデータ値を有するかを示すために、新しい確率的データ構造が生成され得る。少なくともいくつかの実施形態では、列に追加された新規データのある閾値、またはヒストグラムの作成からの一定期間の経過などの、リバランス事象が検出され得る。いくつかの実施形態では、列に対して格納される追加データにおけるある程度の偏りもリバランス事象をトリガーし得る。バケット範囲サイズが修正され得、そして、スーパーブロックデータ構造内に格納されているものなどの、確率的データ構造が更新され得る。修正された確率的データ構造が、列を対象とした将来のクエリーのサービスにおいて使用されるとき、誤判定(すなわち、確率的データ構造は、データ値がバケットサイズの範囲内に格納されていることを示すが、実際にはデータブロックは、そのバケットサイズの範囲内に値を格納していない場合)が、データブロック内に格納されたデータ値をより正確に反映するために、確率的データ構造を更新することにより訂正され得る。いくつかの実施形態では、新しいスーパーブロックデータ構造が、クエリーに対応するために使用されるように作成され得、確率的データ構造の更新時にクエリー処理が中断されないように、現在のスーパーブロックデータ構造を置き換える。
【0019】
カラムナデータベースの列に対するヒストグラムを使用した効率的なクエリー処理の実施形態が、様々な異なるデータベース管理システムにおいて実装され得る。分散データウェアハウスサービスまたはクライアントに提供される他のデータベースサービスなどの、データ管理サービスが、データ管理サービスで格納されたクライアントデータに対して、カラムナデータベースの列に対するヒストグラムを使用するクエリー処理を実装し得る。同様に、クライアントに所有されるか、操作されるか、または制御されるデータベースシステムも、列のクエリー処理のためにヒストグラムを実装し得る。より一般的には、カラムナデータベーステーブルにデータを格納する任意のシステムは、カラムナデータベースの列に対するヒストグラムを使用する効率的なクエリー処理の様々な実施形態を実装し得、従って、前の例は、想定される様々な他のシステムに関して制限される必要がない。
【0020】
分散データウェアハウスサービスにおけるクエリー処理のためのヒストグラムの実装
前述のように、様々なクライアント(または、顧客、組織、実体、もしくユーザー)は、データ管理サービスを使用してデータを格納および管理することを望み得る。
図2は、いくつかの実施形態に従って、データ管理サービスをクライアントに提供し得る、分散データウェアハウスシステム例を示す。具体的には、データウェアハウスクラスタは、他の多くのデータ管理または記憶サービスとともに、データに対する格納要求(例えば、データの記憶装置への書込み)またはクエリー(例えば、選択データに対するサーバークエリー言語要求(SQL)など)に応答し得る。
【0021】
複数のユーザーまたはクライアントがデータウェアハウスサービスを得るためにデータウェアハウスクラスタにアクセスし得る。クライアントは、いくつかの実施形態によれば、ユーザー、クライアントアプリケーション、および/またはデータウェアハウスサービス加入者を含み得る。この例では、クライアント250a〜250nの各々は、分散データウェアハウスサービス280内のデータウェアハウスクラスタ225および235にそれぞれアクセスすることが可能である。分散データウェアハウスクラスタ225および235は、それらのクラスタにアクセスできるクライアント250a〜250nの代わりにデータが格納され得る2つ以上のノードを含み得る。
【0022】
クライアント250a〜250nなどのクライアントは、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、携帯情報端末、モバイル機器、サーバー、または要求をデータウェアハウスクラスタ225および235に送信し、かつ/もしくは分散データウェアハウスクラスタ225および235から応答を受信するように構成された、
図11に関して以下で説明するコンピュータシステム1000などの、任意の他のコンピューティングシステムもしくは他の装置を介して、データウェアハウスクラスタ225または235と通信し得る。要求は、例えば、データウェアハウスクラスタによって提供される特定の機能またはサービスと関連したパラメータおよび/またはデータを含むメッセージとしてフォーマットされ得る。かかるメッセージは、拡張マークアップ言語(XML)などの特定のマークアップ言語に従ってフォーマットされ得、かつ/またはシンプルオブジェクトアクセスプロトコル(SOAP)などのプロトコルを使用してカプセル化され得る。アプリケーションプログラマインタフェース(API)が、クライアントが分散データウェアハウスサービスマネージャ202と通信している場合など、クライアントに対して標準化されたメッセージフォーマットを提供するために実装され得る。
【0023】
クライアント250a〜250nは、ワイドエリアネットワーク(WAN)260(例えば、インターネット)経由など、様々な異なる通信方法を使用して、分散データウェアハウスサービス280によってホストされる、分散データウェアハウスクラスタ225および235と通信し得る。プライベートネットワーク、イントラネット、および他の形式の通信ネットワークも、クライアントとデータウェアハウスクラスタとの間の通信を容易にし得る。クライアントは、要求を含むメッセージを組み立てて、そのメッセージをネットワークエンドポイント(例えば、データウェアハウスクラスタに対応するユニフォームリソースロケーター(URL))に伝達し得る。例えば、クライアント250aは、ハイパーテキスト転送プロトコル(HTTP)要求をデータウェアハウスクラスタ225にWAN 260を経由して送信するように構成されている、ウェブクライアントなどの、ローカルソフトウェアアプリケーションを実行しているデスクトップコンピュータを介して通信し得る。クライアントに送信される応答または他のデータも同様の方法でフォーマットされ得る。
【0024】
少なくともいくつかの実施形態では、280で示すような、分散データウェアハウスサービスは、クラスタ225および235などの、分散データウェアハウスクラスタをホストし得る。分散データウェアハウスサービス280は、ネットワークエンドポイントをクラスタのストレージクライアント250a〜250nに提供し得、それは、クライアント250a〜250nが要求および他のメッセージを直接、特定のクラスタに送信するのを可能にする。前述のように、ネットワークエンドポイントは、例えば、特定のクラスタを指す、URLなどの、特定のネットワークアドレスであり得る。例えば、クライアント250aは、様々な要求メッセージを送信するためのネットワークエンドポイント「http://mycluster.com」が与えられ得る。複数のストレージクライアント(または特定のストレージクライアントのユーザー)は、特定のクラスタに対するネットワークエンドポイントを与えられ得る。権限のないユーザーがクラスタにアクセスするのを防ぐために、様々なセキュリティ機能が実装され得る。逆に言えば、クライアントは、複数のクラスタに対するネットワークエンドポイントを与えられ得る。
【0025】
データウェアハウスクラスタ225および235などの、分散データウェアハウスクラスタは、1つ以上のノードで構成され得る。これらのクラスタは、異なる数のノードを含み得る。ノードは、サーバー、デスクトップコンピュータ、ラップトップ、またはもっと一般的には、
図11のコンピュータシステム1000に関して以下で説明するものなどの、任意の他のコンピューティング装置であり得る。いくつかの実施形態では、データウェアハウスクラスタ内のノード数は、クラスタスケーリング要求によってなど、修正され得る。データウェアハウスクラスタのノードは、データを格納するための1つ以上のデータスライスを実装し得る。これらのデータスライスは、
図3および
図4Bに関して以下で説明するディスク記憶装置などの、記憶装置の一部であり得る。クラスタは、要求および他の連絡をWAN 260を経由して、クライアント250a〜250nなどの、ストレージクライアントから受信するように構成され得る。クラスタは、要求を複数のクライアントからクラスタのネットワークエンドポイント介して受信するように構成され得る。
【0026】
いくつかの実施形態では、分散データウェアハウスサービス280は、ユーザーがクラウドコンピューティング環境内でデータウェアハウスをセットアップ、操作、およびスケーリングするのを可能にするウェブサービスの一部として実装され得る。ウェブサービスによってホストされるデータウェアハウスクラスタは、ユーザーが、クラスタスケーリング要求を、ウェブサービスによって実装されたクラスタ制御インタフェースに送信することによってなど、クラスタをスケーリングすることを可能にする、企業規模のデータベース照会および管理システムを提供し得る。クラスタのスケーリングは、ウェブサービスのユーザーが、それらのデータウェアハウス機能、例えば、構造化データを介した迅速な問合せ機能、様々なデータローディングおよびETL(抽出、変換、およびロード)ツールとの統合、そのクラスで最高のビジネスインテリジェンス(BI)報告、データマイニング、および解析ツールとのクライアント接続、ならびに複数テーブル結合、サブクエリ−、および集計を含むものなどの複雑な解析クエリーの非常に迅速な実行の最適化など、をさらに効率的に実行するのを可能にし得る。
【0027】
様々な実施形態では、分散データウェアハウスサービス280は、クライアント(例えば、分散データウェアハウスシステムによって提供されるデータウェアハウスサービスの加入者)に、ストレージクライアントからの要求に応答して、作成、構成、管理、スケーリング、および終了され得る、データ記憶および管理リソースを提供し得る。例えば、いくつかの実施形態では、分散データウェアハウスサービス280は、システムのクライアントに、仮想計算ノードから成るデータウェアハウスクラスタを提供し得る。これらの仮想計算ノードは、ハードウェア仮想マシン、またはハードウェア構成をシミュレートするように実装された他の形式のソフトウェアなどの、仮想マシンによって実装されたノードであり得る。仮想ノードは、物理ハードウェア上で実装されたノードと同じタスク、機能、および/またはサービスを実行するように構成され得る。
【0028】
分散データウェアハウスサービス280は、カスタマイズされたか、もしくは既製のコンピューティングシステム、サーバー、または、
図11に関して以下で説明する、様々なタイプの装置などの、コンピューティングシステムもしくは装置の任意の他の組合せなど、多数のコンピューティング装置によって実装され得る。これらのコンピューティング装置の異なるサブセットが、分散データウェアハウスサービスマネージャ202によって制御され得る。分散データウェアハウスサービスマネージャ202は、例えば、クラスタ制御インタフェースを、クライアント250a〜250nなどのクライアント、もしくは任意の他のクライアントまたは、分散データウェアハウスサービスマネージャ202によって管理される分散データウェアハウスクラスタとやりとりすることを望むユーザーに提供し得、分散データウェアハウスクラスタは、この図示例では、データウェアハウスクラスタ225および235であろう。例えば、分散データウェアハウスサービスマネージャ202は、ストレージクライアントに対して1つ以上のグラフィカルユーザーインタフェース(GUI)を生成し得、それは、次いで、制御インタフェースによって提供される様々な制御機能を、分散データウェアハウスサービス280内でホストされるデータウェアハウスクラスタに対して選択するために利用され得る。
【0029】
図3は、一実施形態に従った、分散データウェアハウスサービス内の分散データウェアハウスクラスタを示すブロック図である。この例に示すように、分散データウェアハウスクラスタ300は、リーダーノード320ならびに計算ノード330、340、および350を含み得、それらは相互接続360を経由して互いに通信し得る。リーダーノード320は、分散データウェアハウスクラスタ300上でクエリーを実行するための1つ以上のクエリープラン325を生成および/または維持し得る。本明細書で説明するように、分散データウェアハウスクラスタ内の各ノードは、クライアント(例えば、ユーザー、クライアントアプリケーション、および/または分散データウェアハウスサービス加入者)の代わりに、データブロックが格納され得る複数のディスクを含み得る。この例では、計算ノード330はディスク331〜338を含み、計算ノード340はディスク341〜348を含み、計算ノード350はディスク351〜358を含む。いくつかの実施形態では、分散データウェアハウスクラスタの構成要素(またはその構成要素である分散データウェアハウスシステム)は、様々な適用可能な負荷分散技術のいずれかを使用して、負荷分散をサポートし得る。例えば、いくつかの実施形態では、リーダーノード320は、負荷分散構成要素(図示せず)を含み得る。
【0030】
少なくともいくつかの実施形態では、分散データウェアハウスクラスタ300は、前述したものなどの、ウェブベースのデータウェアハウスサービスの一部として実装され得、リーダーノード320ならびに、計算ノード330、340、および350などの、複数の計算ノードを含む。リーダーノード320は、
図2に関して前述したストレージクライアント250a〜250nなどの、ストレージクライアントとの通信を管理し得る。例えば、リーダーノードは、様々なストレージクライアントプログラム(例えば、アプリケーション)および/または加入者(ユーザー)から要求を受信し、次いでそれらを解析して、関連したデータベース操作(複数可)を実行するための実行プラン(例えば、クエリープラン(複数可)325)を開発するサーバーであり得る。より詳細には、リーダーノードは、複雑なクエリーおよび結合に対する結果を得るために必要な一連のステップを開発し得る。リーダーノード320は、データウェアハウスクラスタ300内に格納されたデータに対してデータベース操作を実行するように指示された、計算ノード330〜350の間の通信も管理し得る。例えば、コンパイル済みコードが、クエリーを実行するために必要なステップを実行するために、リーダーノード320によって、計算ノード330〜350のうちの様々な1つに配信され得、それらのクエリーの中間結果がリーダーノード320に返送され得る。リーダーノード320は、データおよびクエリー応答または結果を計算ノード330、340、および350から受信し得る。データベーススキーマおよび/または、クラスタ内に格納されたデータテーブルなどの、計算ノード間に格納されたデータに対する他のメタデータ情報が、リーダーノード320によって管理および格納され得る。
【0031】
分散データウェアハウスクラスタ300は、計算ノード330、340、および350などの、計算ノードも含み得る。これらの1つ以上の計算ノードは、例えば、
図11のコンピュータシステム1000に関して以下で説明するものなどの、サーバーまたは他のコンピューティング装置上に実装され得、各々は、例えば、サーバーのマルチコアプロセッサの各コアに対して定義された、個々のクエリー処理「スライス」を含み得る。計算ノードは、リーダーノード320から計算ノード330、340、および350に送信された命令に基づき、クエリーなどの、データベース操作の処理を実行し得る。命令は、例えば、それが送信される、特定のデータ計算ノードによって実行可能な実行プランセグメントおよびステップからのコンパイル済みコードであり得る。データ計算ノードは、クエリーからの中間結果を最終集計のためにリーダーノード320に返送し得る。各データ計算ノードは、計算ノード330、340、または350のうちの1つ以上に送信されるクエリー(または他のデータベース操作)に対する作業負荷の一部を処理するために、
図4Bに示すような、あるメモリおよびディスクスペースにアクセスするように構成され得る。従って、計算ノード330は、例えば、ディスク431、432、ディスク438までアクセスし得る。
【0032】
図3に示すディスク331〜358などのディスクは、データ計算ノードがアクセス可能なデータの格納に適した任意のタイプの記憶装置および/または記憶システムの1つ以上として実装され得:独立ディスクの冗長アレイ(RAID)装置、単純ディスク束(JBOD)などのディスクドライブまたはディスクドライブのアレイ、(RAIDに従って構成されていないディスクを指すために使用される)、光学式記憶装置、テープドライブ、RAMディスク、ストレージエリアネットワーク(SAN)、ネットワークアクセスストレージ(NAS)、またはそれらの組合せを含むが、それらに制限されない。様々な実施形態では、ディスクは、様々な列指向データベース方式を通してカラムナデータベーステーブルを格納するようにフォーマットされ得る。
【0033】
いくつかの実施形態では、分散データウェアハウスクラスタ内の計算ノードの各々は、所与のクエリーを実行するために、例えば、コマンドの受信、データの返送、およびコンパイル済みコードの(例えば、各コアまたはノード上のスライスに対する)個々のクエリープロセスへのルーティングのための、リーダーノードとの通信を管理する、ノードサーバーの(または他のコンピューティング装置の)オペレーティングシステム上で実行しているプロセスのセットを実装し得る。いくつかの実施形態では、計算ノードの各々は、ノード上に格納されたブロックに対するメタデータを含む。少なくともいくつかの実施形態では、このブロックメタデータは、スーパーブロックデータ構造に統合され得、スーパーブロックデータ構造は、そのエントリがそのノード上に格納されたデータブロックの各々(すなわち、データブロックにつき1つのエントリ)に関する情報(例えば、メタデータ)を格納する、データ構造(例えば、データのアレイ)である。いくつかの実施形態では、スーパーブロックデータ構造の各エントリは、それぞれのブロックに対する一意のIDを含み、その一意のIDは、データブロックに関連した様々な操作を実行するために使用され得る。例えば、データブロック内に格納されたデータに適用された列固有の圧縮技術の表示、データブロック内に格納されたデータに適用されたデフォルトの圧縮技術の表示、またはデータブロックに格納されていないデータ値を示す確率的データ構造が全て、データブロックに対するそれぞれのエントリ内に格納され得る。いくつかの実施形態では、一意のIDは、データブロックが分散データウェアハウスシステム内で最初に書き込まれるときに、リーダーノードによって、またはコンピューティングノードによって生成され(かつ、スーパーブロック内の対応するエントリが作成され)得る。
【0034】
図4Aは、いくつかの実施形態に従った、リーダーノード例を示す。前述のように、リーダーノード400は、カラムナデータベーステーブルを管理し、追加のデータを格納するための様々なメッセージおよびクエリーを受信する、分散データウェアハウスシステム内の様々なクライアントとやりとりし得る。関連したデータベース操作を実行するためのクエリープラン410の開発に加えて、リーダーノードは、いくつかの実施形態では、ヒストグラム生成器420も含み得る。ヒストグラム生成器420を実装するために、様々な異なるハードウェアおよびソフトウェア装置が、単独で、または組み合わせて、使用され得る。ヒストグラム生成器420は、カラムナデータベーステーブルの列内の複数のバケット間でのデータの分布を表す、高さのバランスを調整したヒストグラムに対するバケット範囲サイズを判断するように構成され得る。ヒストグラム生成器420は、高さのバランスを調整したヒストグラムなどの、クエリー処理のために使用される異なるヒストグラムを生成し得る。いくつかの実施形態では、カラムナデータベーステーブルの列に対するデータが、
図4Bに示す計算ノード450などの、多数の異なる計算ノード上に物理的に格納され得る。ヒストグラム生成器420は、それ故、列に対する異なる計算ノードからのデータを入力として取得し、列内のデータのヒストグラムに対するバケットを生成して、データがバケット間で均等に分布されるように、バケットの各々に対してバケット範囲サイズを設定し得る。ヒストグラム生成器420は、列内のデータに対するヒストグラムのバケットに基づき、列に対するデータを格納している1つ以上のデータブロックの各データブロックに対する確率的データ構造も生成し得る。確率的データ構造は、前述のように、所与の値が、データブロック内に格納されたデータ値などの、値のセット内にある可能性が高いかを示す。従って、列内のデータに対する、高さのバランスを調整したヒストグラムなどの、ヒストグラムに基づく場合、確率的データ構造は、ヒストグラムの複数のバケットのどのバケットに対して、データブロック内に格納されたバケット範囲サイズ内のデータ値があるかを示し得る。
【0035】
ヒストグラム生成器420は、列内のデータブロックに対する新しい確率的データ構造の生成を含め、所与の列に対するヒストグラムがいつ再生成されるべきかも判断し得る。いくつかの実施形態では、列に対する高さのバランスを調整したヒストグラムが最後に生成されてからある時間が経過した時、またはある量の新規データが列内に格納された時など、高さのバランスを調整したヒストグラムに対してリバランス事象が検出され得る。ヒストグラム生成器420は、少なくともいくつかの実施形態では、列の高さのバランスを調整したヒストグラムに対するバケットサイズ範囲を修正するように構成され得、修正されたバケット範囲サイズに従って確率的データ構造を更新し得る。あるいは、いくつかの実施形態では、ヒストグラム生成器420は、所与の列内に格納されたデータ値に対する新しい高さのバランスを調整したヒストグラムに対して新しいバケット範囲サイズを判断するように構成され得る。
【0036】
図4Bは、いくつかの実施形態に従った、計算ノード例を示す。リーダーノード320などの、リーダーノードに送信されて、リーダーノードから計算ノードに送信された、様々なクエリーおよびメッセージなどの、アクセス要求452が、計算ノード450で受信され得る。クエリー実行モジュール460が、アクセス要求を処理して、読取り、書込み、および他のアクセス操作をディスク450〜458に向け得る。様々な異なるハードウェアおよびソフトウェア装置が、クエリー実行モジュール460を実装するために単独で、または組み合わせて使用され得る。クエリーを処理する際に、クエリー実行モジュール460は、列に対するデータを格納している各データブロックに対する確率的データ構造を検査して、クエリーに対応するために読み取る必要のないデータブロックを判断し、次いで、読み取る必要のないそれらのデータブロックを除いて、列に対するデータを格納しているデータブロックを読み取り得る。
【0037】
いくつかの実施形態では、計算ノード450は、計算ノードにローカルに格納されるか、またはリモートに格納されるが、計算ノードがアクセス可能な、前述したスーパーブロックデータ構造などの、スーパーブロックデータ構造470も含み得、それは、データブロックに対する確率的データ構造を含むブロックメタデータを格納する計算ノード450上に格納されたデータブロックに対するそれぞれのエントリ472を含み得る。しかし、いくつかの実施形態では、データブロックに対するメタデータは、データブロック自身内、または他の個々のデータ構造内など、複数の異なる位置に格納され得ることに留意されたい。それ故、スーパーブロックデータ構造470は、データブロックに対するメタデータ情報を保存するために適用され得る、様々な他の構造、位置、方法、または技術に関して制限することを意図しない。
【0038】
前述のように、
図2〜
図4は、カラムナデータベーステーブルの列に対するヒストグラムを使用してクエリーを処理する実施形態例を示し、カラムナデータベーステーブルを格納および管理するために使用され得る他のアーキテクチャ、システム、構成要素、または配置に関して制限することを意図しない。例えば、
図3に関して前述した、分散データウェアハウスクラスタ300は、リーダーノードを含まない可能性があるか、またはデータの格納および管理のために異なる機能を実行する1つ以上の他の異なるノードを含み得る。
【0039】
高さのバランスを調整したヒストグラムを使用したクエリー処理のワークフロー
上で説明してきたように、データベース管理システムは、もっと効率的なデータ管理機能を提供するためにカラムナデータベーステーブルを利用するように構成され得る。これらの機能をさらに効率的に実行するために、列内のデータのヒストグラムに基づき、カラムナデータベーステーブル内の列に対するデータを格納しているデータブロックに対して、確率的データ構造が生成され得る。少なくともいくつかの実施形態では、このヒストグラムは、高さのバランスを調整したヒストグラムである。
図5は、いくつかの実施形態に従い、カラムナデータベーステーブル内の列に対するデータの分布を表すヒストグラムに対してバケット範囲サイズを判断するための方法を示す高レベル流れ図である。様々な異なるシステムおよび装置が、以下で説明する様々な方法および技法を実装し得る。
図4に関して前述したヒストグラム生成器420などの、ヒストグラム生成器が、様々な方法を実装するために、クエリー実行モジュール460などの、クエリー実行モジュールとともに協力し得る。あるいは、例えば、共に動作する、
図3に示す複数の計算ノードなどの、異なるシステムおよび装置の組合せも、以下の方法および技法を実行し得る。それ故、前述の例およびまたは、図示した方法を実行するとして参照された任意の他のシステムもしくは装置は、システムおよび装置の他の異なる個体または構成に関して制限することを意図しない。
【0040】
様々な実施形態では、500に示すように、カラムナデータベーステーブルの列に対するヒストグラムのバケットに対するバケット範囲サイズが判断され得る。前述のように、ヒストグラムは、しばしば「バケット」と呼ばれる、値の範囲にわたるデータの分布を表す。通常、これらのバケットは均等なサイズにされ得る。例えば、ヒストグラムが、アプリケーションデモの使用に費やした時間に基づき、ソフトウェアアプリケーションのダウンロード数に対して生成された場合、バケットは、2時間までの10分間隔の範囲サイズを有し得る。しかし、データ値の、高さのバランスを調整したヒストグラムなどの、ヒストグラムは、各バケット内のダウンロード数を均等に分布するために、いくつかのバケットは5分間隔にすべきであり、いくつかは30分間隔にすべきであると判断し得る。
図6は、いくつかの実施形態に従い、カラムナデータベーステーブル内の列に対するデータの均等な分布を表すヒストグラムに対するバケット範囲サイズを判断するための1つのかかる方法を示す。
【0041】
602に示すように、ヒストグラムが表す列のデータが取得され得る。前述のように、いくつかの実施形態では、単一のノード、記憶装置が、特定の列に対するデータブロックの全てを1つの位置に物理的に格納し得る。しかし、少なくともいくつかの他の実施形態では、データブロックが、カラムナデータベーステーブルの特定の列に対するデータを格納しているデータブロックとして論理的にグループ化され得るが、データブロック自体は、
図3に関して前述した分散データウェアハウスクラスタ内の複数の計算ノードなどの、いくつかの異なる装置上の複数の位置にわたって物理的に分散され得る。従って、いくつかの場合には、データは、さらなる計算が実行される前に、複数の装置またはシステムから取得され得る。
【0042】
604に示すように、データブロック内に格納されたデータ値の範囲を表す、いくつかのバケットが次いで生成され得る。特定数のバケットが、データブロック内に格納され得るデータ値の数に基づいて判断され得る。いくつかの実施形態では、生成されるバケット数が、格納され得るデータ値の数よりもはるかに多い可能性がある。例えば、ヒストグラムに対するバケット数は、データブロック内に格納され得るデータ値の数の特定の係数(または倍数)に基づき判断され得る。従って、データブロックが100個のデータ値を格納し得る場合、列を表すヒストグラムに対して生成されるバケットの数は、10倍の1,000バケットまで増加され得る。確率的データ構造がバケット数に基づいて生成される選択性(精度)は、バケット数と、データブロック内に格納され得るデータ値の数との間のより大きいか、またはより多い有意差に基づき得る。しかし、他の可能な実施形態は、列内に格納されたデータのタイプ(例えば、名前、データ、数、製品番号など)または通常データを対象とするクエリーのタイプ(例えば、範囲クエリー)などの、代替基準に従って、生成されるバケット数を判断し得るので、これは、必ずしも制限するものではない。
【0043】
606に示すように、バケットの範囲サイズが、次いで、高さのバランスを調整したヒストグラムに対するバケット間で列のデータのバランスを取るように調整され得る。本明細書では、用語「均等に」または「バランス」は、「厳密に同じ値」に限定されず、またそれを意味すると意図しないことに留意されたい。ヒストグラムに対するバケット間での近接バランス(near balance)、近似バランス(approximate balance)、または推定されたバランスさえ、同様の選択性に対して提供され得、そのため、それらの用語は1つの特定の意味に限定されない。
【0044】
ヒストグラムのバケットに対するバケット範囲サイズを判断すると、510に示すように、カラムナデータベーステーブルの列に対するデータを格納している各データブロックに対して、確率的データ構造が生成され得る。前述のように、確率的データ構造は、所与の値が、データブロック内に格納されたデータなどの、データのセットのメンバーであるかどうかを示し得る。確率的データ構造は、列全体に対する高さのバランスを調整したヒストグラム内のどのバケットに対して、データブロック内に格納されたデータ値があるかを示し得る。少なくともいくつかの実施形態では、確率的データ構造は、ビットマップであり得る。
図7は、いくつかの実施形態に従い、カラムナデータベーステーブルの列内のデータのヒストグラム内の各バケットを表すビットマップを生成するための方法の流れ図を示す。
【0045】
612に示すように、カラムナデータベーステーブル内の列に対するデータを格納しているデータブロックに対するビットマップが生成され得る。ビットマップ内のビット数は、ヒストグラム内のバケット数に対応し得る。各ビットは、列内のデータの分布を表しているヒストグラム内のバケットを表し得る。例えば、
図1に示すように、ヒストグラムと共に示されている8つのバケットは、スーパーブロック100内に格納されたビットマップ内の8ビットに対応する。一旦、作成されると、データブロック内に格納された各データ値は、高さのバランスを調整したヒストグラムに対するバケットの1つ内に配置され得る。614に示すように、バケットに対する値の範囲内のデータ値を含むバケットに対するそれぞれのビットが設定される(例えば、「1」の値に設定される)。データ値の全てがヒストグラムのバケット内に配置されて、バケット内にデータ値を含むバケットに対して対応するビットが設定されると、ビットマップがブロックメタデータ内に格納され得る。616に示すように、いくつかの実施形態では、ビットマップは、
図4Bに関して前述したスーパーブロック470などの、スーパーブロックのそれぞれのエントリ内に格納され得る。
【0046】
様々な実施形態では、520に示すように、選択データに対するカラムナデータベーステーブルの列を対象としたクエリー、またはクエリーの指示が受信され得る。
図2〜
図4Bに関して前述したように、クエリーまたは他のアクセス要求メッセージが、SQLなどの、様々な異なる標準クエリープロトコルもしくは言語、または、APIで説明したような、カスタマイズされたフォーマットに従ってフォーマットされ得る。少なくともいくつかの実施形態では、クエリーは、
図4Bに関して前述した計算ノード450などの、計算ノードに、
図4Aに関して前述したリーダーノード400などの、リーダーノードから、向けられた1つ以上のクエリーであり得る。クエリーの受信に応答して、530に示すように、列内のデータを格納している各データブロックに対する確率的データ構造が検査され得る。確率的データ構造の検査は、選択データに対するクエリーに対応するために読み取る必要がない特定のデータブロックを判断し得る。
【0047】
図8は、いくつかの実施形態に従い、カラムナデータベーステーブルの列内のデータに対するクエリーに応答して、どのデータブロックが読み取る必要がないかを判断する方法の流れ図を示す。700に示すように、選択されたデータに対するカラムナデータベーステーブルの列を対象としたクエリーの指示が受信され得る。クエリーは、データ値の範囲(例えば、ある日付の間のデータ、ある発注金額と関連したデータなど)などの、特定データに対する要求を含み得る。選択データのデータ値が、次いで、クエリーが対象とする列に対するヒストグラムのバケット内に配置され得る。一旦識別されると、710に示すように、ビットマップなどの、確率的データ構造が、スーパーブロックなどの、ブロックメタデータから取得されて、特定のデータがデータブロック内に格納されていないかを判断するために検査され得る。720に示すように、選択データ内のデータ値のバケット位置に対するビットマップの対応するビットが設定されていない場合、ビットマップは、そのデータブロックが読み取られる必要がないことを示す。例えば、
図1を振り返って見ると、スーパーブロック100内に格納された第1のビットマップは、ヒストグラム120に対するバケットに対応する、8ビット値「10010110」を有する。第1のバケットがデータ値1〜10を表し、第2のバケットが値11〜30を表す場合、選択されたデータ値の20に対して、第2のバケットに対応するビットが検査されるであろう。この場合、ビットが0に設定されて、列132内の対応するデータブロック内に格納された11〜30の範囲内にデータ値がないことを示す。このように、ビットマップは、選択データ値が20の場合に、第1のデータブロックが読み取る必要のないことを示すであろう。しかし、選択データ値の5がある場合、第1のバケットに対して対応するビットが1に設定されて、1〜10の値がデータブロック内に格納されている可能性があることを示す。このように、ビットマップは、720に示すように、データブロックがそのデータ値を格納している可能性があることを示し得る。結果として、730に示すように、データブロックが読み取られ得る。
【0048】
図8に示すように、このプロセスは、740に示すように、スーパーブロック内のデータブロックに対するそれぞれのエントリなどの、ブロックメタデータの全てが、列に対するデータを格納しているデータブロックの全てに対して検査されるまで繰り返され得る。例えば、両方の「No」分岐は、列内の次のデータブロックに対するビットマップがスーパーブロックから取得され得ることを示す、要素712を指す。750に示すように、データブロックから読み取られたデータは、次いで、選択データに対するクエリーに対応するために提供され得る。データブロックが読み取られるのは、選択データがそのデータブロック内にあるに違いないことを示すからではなく、データがそのデータブロック内に格納されている可能性があることを示すことに留意されたい。データがデータブロックから読み取られると、さらなるフィルタリング、処理、または他のクエリー操作が実行され得る。データの少なくともいくつかは、リーダーノード、ストレージクライアント、または他のシステムもしくは装置に返され得る。
【0049】
データ値の追加または修正などの、データ操作が列内のデータに関して実行されるので、列内のデータブロックに対する確率的データ構造は最新の状態でない可能性がある。例えば、いくつかの実施形態では、列に対する追加のデータが受信されて、新しいデータブロック内に格納され得る。新しいデータが格納されると、以前に作成された高さのバランスを調整したヒストグラム内のバケットに対応するビットマップ内のビットを新しいデータ値に対して設定することによるなど、確率的データ構造が、新しいデータブロックに対して生成され得る。時間とともに、これはヒストグラムを偏らせて、ヒストグラムを、高さのバランスがあまり調整されていないものにし得るか、または列データがバケット間であまり均等に分布していないものにし得る。高さのバランスを調整したヒストグラムを実装するいくつかの実施形態に対して、この追加のデータは、高さのバランスを調整したヒストグラムを使用する効率を低減し得る。改善措置として、少なくともいくつかの実施形態では、カラムナデータベーステーブルの列内に格納されている現在のデータに対する新しい高さのバランスを調整したヒストグラムが計算され得、バケット範囲サイズが判断されて、新しい確率的データ構造が列に対するデータを格納している各データブロックに対して生成される。しかし、この操作は、計算資源の観点から高くつくことが分かり得る。それ故、少なくともいくつかの実施形態では、バケット範囲自体は、列内の新しいデータまたは修正されたデータを含めるために、列のデータの分布を再計算することなく、修正され得る。
【0050】
図9は、いくつかの実施形態に従い、リバランス事象の検出に応答して、データブロックに対する確率的データ構造を修正する方法の流れ図を示す。802に示すように、リバランス事象が検出され得る。例えば、
図4Aに関して前述したヒストグラム生成器420などの、ヒストグラム生成器が、列に対する高さのバランスを調整したヒストグラムの最後の計算または修正から、リバランス時間閾値(例えば、24時間)を上回る、一定の時間が経過したことを検出し得る。他の実施形態は、リバランス閾値を上回る、追加のデータブロック内に格納された追加データの量が、列に対して格納されている可能性があることを判断し得る。例えば、リバランス閾値は、列に対する20の新規データブロックであり得、列に対して20を上回るデータブロックの書き込み後、リバランス事象が検出され得る。
【0051】
少なくともいくつかの実施形態では、リバランス事象は、列に対する追加のデータの分布に基づき判断され得る。この追加のデータは、列内のデータの現在の分布と比較した、高さのバランスを調整したヒストグラムのバケット間での追加のデータの分布などの、追加のデータの分布における変化を判断するために分析され得る。次いで、変化が、一定の割合、または追加データの分布が、ヒストグラムに対する分布がもはや高さのバランスを調整されていないような、現在のヒストグラムとは異なる分布に向かって偏らされ得ることを示す他の値などの、分布閾値を上回るかどうかが判断され得る。
【0052】
追加データに対する分布の分析は、様々な異なる方法で実行され得る。追加データのデータ値の分析は、追加データが追加のデータブロック内に格納されるとき、または追加データが追加のデータブロック内に格納された後のいずれかで、追加データの分布を分析するために実行され得る。例えば、データに対するデータ値の分布は、格納プロセス中に、各データブロックに対するデータ値を格納前に検査することにより追跡されるか、または監視され得る。あるいは、一定数の追加のデータブロックが格納された後、データ値が取得されて分析され得る。
【0053】
追加データのデータ値の分析に加えて、少なくともいくつかの実施形態では、追加データに対して生成された、ビットマップなどの、確率的データ構造が、代わりに検査され得る。例えば、前述したように、ヒストグラムのどのバケットが追加のデータブロック内の追加データのデータ値を含むかを示す、ビットマップが生成され得る。これらのビットマップは、追加データの分布を判断するために分析され得る。例えば、バケット範囲内のデータ値を示す、設定されたビットの数が、カウントされるか、または追跡され得る。この追跡は、各追加のビットマップが、追加データを格納している追加のデータブロックに対して生成されるときに、維持され得る(または代替として、ビットマップが生成されて、追加データがデータブロック内に格納された後に取得され得る)。同じバケット設定または範囲設定に近いバケットを有するものなどの、追加データに対して設定されたバケット数に基づき、追加データの分布が判断され得る。列内のデータの元の分布と比較した変化が、次いで判断され得る。例えば、追加のデータブロックに対する特定のバケット範囲を表す設定されたビット数が、ある閾値を上回る場合、(例えば、格納された30の追加のデータブロックに対する20の閾値などの、格納された追加のデータブロック数に対するカウント値)、追加データに対するデータの分布が、列に対するデータの以前の分布と比較した場合に、特定のバケット範囲に向かって偏っていることが判断され得る。リバランス事象がトリガーされ得る。かかる分析も、ヒストグラムの他のバケットの1つ以上に対して実行され得る。個々のバケットに対する結果が、例えば、追加データに対する分布を判断するために結合され得、それは、次いで、追加データの前のデータの分布と比較され得る。この変化が何らかの分布閾値を上回る場合、リバランス事象がトリガーされ得る。
【0054】
列のデータを表す高さのバランスを調整したヒストグラムに対するリバランス事象の検出に応答して、804に示すように、高さのバランスを調整したヒストグラムに対するバケット範囲サイズが修正され得る。バケット範囲サイズの修正は、追加データの分布を推定するために追加のデータブロックに対する確率的データ構造を検査することによるなど、多数の異なるバケット範囲技術に従って実行され得る。例えば、列に追加された新しいデータがより高い範囲値に偏る場合、分布は、より高い範囲値を表すバケットのサイズが減少すると判断され得る。あるいは、バケット範囲サイズが、ビットマップ確率的データ構造内の設定ビットに隣接したビットを設定することによるなど、重なり合うように修正され得る。列に対するデータの分布を表す高さのバランスを調整したヒストグラムに対するバケット範囲サイズが修正されると、806に示すように、データブロックに対する確率的データ構造が更新されて、高さのバランスを調整したヒストグラムに対する修正されたバケット範囲サイズを表し得る。以下でさらに説明する、
図10は、確率的データ構造を更新するための技術例を説明する。かかる更新は、例えば、ビットマップとして表されているような確率的データ構造内の異なるビットを設定するか、または修正されたバケット範囲サイズに従ってデータのバケット間での分布を表す異なる確率的データ構造に変更するほど、単純であり得る。例えば、高さのバランスを調整したヒストグラムは、ビットマップではなく、代わりに数式として表され得る。あるいは、更新は、列のデータに対するクエリーに対応するために使用される現在のブロックメタデータ構造を置換するために、更新された確率的データ構造で満たされた、スーパーブロックなどの、新しいブロックメタデータ構造を生成することを含み得る。現在のスーパーブロックデータ構造は、新しいスーパーブロックデータ構造が完成するまで利用される。
【0055】
図10は、いくつかの実施形態に従い、データブロックに対する確率的データ構造を更新する方法の流れ図を示す。900に示すように、カラムナデータベーステーブルの列に対する追加のデータが受信され得る。910に示すように、データが1つ以上のデータブロックに格納され得る。920に示すように、作成されたデータブロック数などの、格納されたデータ量が、
図9に関して前述したリバランス事象をトリガーするために使用される様々な閾値の1つなどの、リバランス閾値を上回り得る。そうでない場合は、912に示すように、バケット間でのデータの分布を表す高さのバランスを調整したヒストグラムのバケット内に配置されたデータ値に対してビットを設定する1つ以上のデータブロックに対するビットマップを生成する。リバランス閾値を上回る場合、930に示すように、列内のデータのバケット間での分布を表す高さのバランスを調整したヒストグラムに対する各バケットに対するバケット範囲サイズを修正する。次いで、940に示すように、現在、修正されたバケット範囲サイト内のデータ値を格納するように示されている、列内のデータブロックに対するバケットを表すビットマップの未設定のビットが識別され、950に示すように、設定される。
【0056】
様々な実施形態では、修正されたバケット範囲サイズに起因して更新された確率的データ構造が、データ構造に対応するデータブロックの後続の読み取り後に、さらに更新され得る。例えば、確率的データ構造が、ある値の範囲内のデータ値がデータブロック内に格納されていることを示していて、データブロックの読取り後に、かかる値がその範囲内にないと判断される場合、確率的データ構造が、その値がその範囲内に格納されていないことを示すように更新され得る。再度、
図1を参照して、例えば、バケット8が、以前よりもさらに大きい修正されたバケット範囲サイズに変更されていて、第1のデータブロックに対するスーパーブロック100ビットマップが、ビット8が現在、(バケット8によって表される修正された値の範囲内に格納されている値を示す)0ではなく、1に設定されていることを示すように更新され、次いで、データブロックが読み取られて、ビット8内の1によって示されるように、データ値が修正された範囲内に実際には格納されていない場合、ビットマップがさらに更新されて、ビットを0に戻し得る。
【0057】
少なくともいくつかの実施形態では、データブロックに対する確率的データ構造の選択性レベルが判断され得る。例えば、データビットマップのビットのほとんどが1に設定されている場合、ほとんどの検査がデータブロックを読み取るべきことを示すので、ビットマップは高度に選択的ではない。選択性レベルが選択性閾値を下回る場合、いくつかの実施形態では、ブルームフィルタ、指数フィルタ(quotient filter)、またはスキップリストが、高さのバランスを調整したヒストグラムの代わりに実装されて、クエリー処理を容易にするために、ブロックメタデータ内に格納され得る。
【0058】
システム例
本明細書で説明するようなカラムナデータベースの列に対するヒストグラムを使用する効率的なクエリー処理の実施形態が、1つ以上のコンピュータシステム上で実行され得、それらは様々な他の装置とやりとりし得る。1つのかかるコンピュータシステムを
図11に示す。異なる実施形態では、コンピュータシステム1000は、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ、ノートブック、もしくはネットブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、カメラ、セットトップボックス、モバイル機器、消費者向け装置、ビデオゲーム機、ハンドヘルドビデオゲーム機、アプリケーションサーバー、記憶装置、周辺機器(スイッチ、モデム、ルーターなど)、または任意のタイプのコンピューティング装置もしくは電子装置一般を含むが、それらに限定されず、様々なタイプの装置のいずれかであり得る。
【0059】
図示した実施形態では、コンピュータシステム1000は、入力/出力(I/O)インタフェース1030を経由してシステムメモリ1020に結合された1つ以上のプロセッサ1010を含む。コンピュータシステム1000は、I/Oインタフェース1030に結合されたネットワークインタフェース1040、ならびにカーソル制御装置1060、キーボード1070、およびディスプレイ(複数可)1080などの、1つ以上の入力/出力装置1050をさらに含む。ディスプレイ(複数可)1080は、標準的なコンピュータモニター(複数可)および/または他のディスプレイシステム、技法もしくは装置を含み得る。少なくともいくつかの実施態様では、入力/出力装置1050は、それを用いてユーザーがスタイラスタイプ装置での入力および/もしくは1つ以上の数字を入力できるパッドまたはタブレットなどの、タッチまたはマルチタッチ対応装置も含み得る。いくつかの実施形態では、実施形態はコンピュータシステム1000の単一のインスタンスを使用して実装され得、他方、他の実施形態では、複数のかかるシステム、またはコンピュータシステム1000を構成する複数のノードが、実施形態の異なる部分もしくはインスタンスをホストするように構成され得ると考えられる。例えば、一実施形態では、いくつかの要素が、他の要素を実装しているノードとは異なる、コンピュータシステム1000の1つ以上のノードを介して実装され得る。
【0060】
様々な実施形態では、コンピュータシステム1000は、1つのプロセッサ1010を含むユニプロセッサシステム、またはいくつか(例えば、2、4、8、または別の適切な数)のプロセッサ1010を含むマルチプロセッサシステムであり得る。プロセッサ1010は、命令を実行可能な任意の適切なプロセッサであり得る。例えば、様々な実施形態では、プロセッサ1010は、x86、PowerPC、SPARC、またはMIPS ISA、もしくは任意の他の適切なISAなどの、様々な命令セットアーキテクチャ(ISA)のいずれかを実装する、汎用または組込みプロセッサであり得る。マルチプロセッサシステムでは、プロセッサ1010の各々は一般に、必ずしもではないが、同じISAを実装し得る。
【0061】
いくつかの実施形態では、少なくとも1つのプロセッサ1010が、グラフィック処理装置であり得る。グラフィック処理装置すなわちGPUは、パーソナルコンピュータ、ワークステーション、ゲーム機、または他のコンピューティング装置もしくは電子装置に対する専用のグラフィックスレンダリング装置と考えられ得る。最新のGPUは、コンピュータグラフィックスの操作および表示の効率が非常に良い可能性があり、その高度な並列構造は、ある範囲の複雑なグラフィカルアルゴリズムに対して、典型的なCPUよりも、それらを効率的にし得る。例えば、グラフィックスプロセッサは、いくつかのグラフィックス基本処理を、ホスト中央処理装置(CPU)で画面に直接描くよりもはるかに高速にそれらを実行させる方法で、実装し得る。様々な実施形態では、グラフィックスレンダリングは、かかるGPUの、1つ上での実行、または2つ以上での並列実行に対して構成されたプログラム命令によって、少なくとも一部、実装され得る。GPUは、プログラマがGPUの機能を呼び出すのを許可する1つ以上のアプリケーションプログラマインタフェース(API)を実装し得る。適切なGPUは、NVIDIA Corporation、ATI Technologies(AMD)、およびその他などのベンダーから市販されている可能性がある。
【0062】
システムメモリ1020は、プロセッサ1010によってアクセス可能なプログラム命令および/またはデータを格納するように構成され得る。様々な実施形態では、システムメモリ1020は、スタティックランダムアクセスメモリ(SRAM)、シンクロナスダイナミックRAM(SDRAM)、不揮発性/フラッシュタイプメモリ、または任意の他のタイプのメモリなどの、任意の適切なメモリ技術を使用して実装され得る。図示した実施形態では、本明細書で説明したような分散システム内のコンピューティングクラスタをスケーリングするための前述したものなどの、所望の機能を実装するプログラム命令およびデータが、それぞれ、プログラム命令1025およびデータ記憶1035として、システムメモリ1020内に格納されて示されている。他の実施形態では、プログラム命令および/またはデータは、異なるタイプのコンピュータアクセス可能媒体上、またはシステムメモリ1020もしくはコンピュータシステム1000から離れた類似の媒体上で、受信、送信、または格納され得る。一般的に言えば、コンピュータアクセス可能媒体は、磁気または光媒体などの記憶媒体またはメモリ媒体を含み得、例えば、I/Oインタフェース1030を介してコンピュータシステム1000に結合されたディスクまたはCD/DVD−ROMである。コンピュータアクセス可能媒体を用いて格納されたプログラム命令およびデータは、伝送媒体または、電気信号、電磁信号、もしくはデジタル信号などの信号によって伝送され得、それらは、ネットワークインタフェース1040を用いて実装され得るように、ネットワークおよび/または無線リンクなどの通信媒体を経由して伝達され得る。
【0063】
一実施形態では、I/Oインタフェース1030は、プロセッサ1010、システムメモリ1020、およびネットワークインタフェース1040または、入力/出力装置1050などの、他の周辺インタフェースを含む、装置内の任意の周辺機器の間のI/Oトラフィックを調整するように構成され得る。いくつかの実施形態では、I/Oインタフェース1030は、1つの構成要素(例えば、システムメモリ1020)からのデータ信号を別の構成要素(例えば、プロセッサ1010)による使用に適したフォーマットに変換するための、任意の必要なプロトコル、タイミングまたは他のデータ媒体変換を実行し得る。いくつかの実施形態では、I/Oインタフェース1030は、例えば、Peripheral Component Interconnect(PCI)バス規格の変形またはユニバーサルシリアルバス(USB)規格などの、様々なタイプの周辺機器用バスを通じて取り付けられた装置に対するサポートを含み得る。いくつかの実施形態では、I/Oインタフェース1030の機能は、例えば、ノースブリッジおよびサウスブリッジなどの、2つ以上の別個の構成要素に分割され得る。さらに、いくつかの実施形態では、システムメモリ1020へのインタフェースなどの、I/Oインタフェース1030の機能の一部または全部が、プロセッサ1010に直接組み込まれ得る。
【0064】
ネットワークインタフェース1040は、データが、コンピュータシステム1000と、他のコンピュータシステムなどの、ネットワークに取り付けられた他の装置との間で、またはコンピュータシステム1000のノード間で、交換できるように構成され得る。様々な実施形態では、ネットワークインタフェース1040は、例えば、任意の適したタイプのイーサネット(登録商標)ネットワークなどの、有線もしくは無線の一般データネットワークを経由した;アナログ音声ネットワークもしくはデジタルファイバー通信ネットワークなどの通信/電話網を経由した;ファイバーチャネルSANなどのストレージエリアネットワークを経由した、または任意の他の適切なタイプのネットワークおよび/もしくはプロトコルを経由した、通信をサポートし得る。
【0065】
入力/出力装置1050は、いくつかの実施形態では、1つ以上のディスプレイ端末、キーボード、キーパッド、タッチパッド、スキャン装置、音声もしくは光学的認識装置、または1つ以上のコンピュータシステム1000によるデータの入力もしくは取得に適した任意の他の装置を含み得る。複数の入力/出力装置1050がコンピュータシステム1000内に存在し得るか、またはコンピュータシステム1000の様々なノード上に分散され得る。いくつかの実施形態では、類似の入力/出力装置が、コンピュータシステム1000から分離され得、ネットワークインタフェース1040を介してなど、有線もしくは無線接続を通して、コンピュータシステム1000の1つ以上のノードとやりとりし得る。
【0066】
図11に示すように、メモリ1020は、本明細書で説明するようなスケジューリングされた配信指示に対して時間ベースの品目推奨を提供するように構成された、プログラム命令1025、およびプログラム命令1025によってアクセス可能な様々なデータを含む、データ記憶1035を含み得る。一実施形態では、プログラム命令1025は、本明細書で説明し、図に示すような、実施形態のソフトウェア要素を含み得る。データ記憶1035は、実施形態で使用され得るデータを含み得る。他の実施形態では、その他または異なるソフトウェア要素およびデータが含まれ得る。
【0067】
当業者は、コンピュータシステム1000は例示にすぎず、本明細書で説明するステレオ描画技法の範囲に制限することを意図しないことを理解するであろう。具体的には、コンピュータシステムおよび装置は、コンピュータ、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ、ノートブック、もしくはネットブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、カメラ、セットトップボックス、モバイル機器、ネットワーク装置、インターネット家電、PDA、無線電話、ポケットベル、消費者向け装置、ビデオゲーム機、ハンドヘルドビデオゲーム機、アプリケーションサーバー、記憶装置、周辺機器(スイッチ、モデム、ルーターなど)、または任意のタイプのコンピューティング装置もしくは電子装置一般を含む、指示された機能を実行できる、ハードウェアまたはソフトウェアの任意の組合せを含み得る。コンピュータシステム1000は、図示していない他の装置にも接続され得るか、または代わりに、スタンドアロンシステムとして動作し得る。加えて、図示する構成要素によって提供される機能は、いくつかの実施形態では、もっと少ない構成要素に結合され得るか、または追加の構成要素内に分散され得る。同様に、いくつかの実施形態では、図示する構成要素のいくつかの機能が提供されない可能性があり、かつ/または他の追加の機能が利用可能であり得る。
【0068】
様々な項目が、使用されている間に、メモリ内または記憶装置上に格納されているとして示されているが、当業者は、これらの項目またはそれらの一部は、メモリ管理およびデータの整合性を目的として、メモリと他の記憶装置との間で転送され得ることも理解するであろう。あるいは、他の実施形態では、ソフトウェア構成要素の一部または全部が、他の装置上のメモリ内で実行して、図示するコンピュータシステムとコンピュータ間通信を経由して通信し得る。システム構成要素またはデータ構造の一部または全部が、コンピュータアクセス可能媒体または適切なドライブによって読み取られる可搬型品目上にも(例えば、命令または構造化データとして)格納され得、その様々な例が上で説明されている。いくつかの実施形態では、コンピュータシステム1000から離れたコンピュータアクセス可能媒体上に格納された命令は、ネットワークおよび/もしくは無線リンクなどの通信媒体を経由して伝達される、伝送媒体または、電気信号、電磁信号、もしくはデジタル信号などの信号によってコンピュータシステム1000に伝送され得る。様々な実施形態は、前述の説明に従って実装された、受信、送信、もしくは格納命令、および/またはデータをコンピュータアクセス可能媒体上にさらに含み得る。その結果、本発明は、他のコンピュータシステム構成で実施され得る。
【0069】
本明細書で説明する分散システム実施形態のいずれも、またはそれらの構成要素のいずれも、1つ以上のウェブサービスとして実装され得ることに留意されたい。例えば、データウェアハウスシステム内のリーダーノードは、データ記憶サービスおよび/またはデータベースサービスをウェブサービスとしてクライアントに提示し得る。いくつかの実施形態では、ウェブサービスは、ネットワークを介して相互運用可能なマシン同士のインタラクションをサポートするように設計されたソフトウェアおよび/またはハードウェアシステムによって実装され得る。ウェブサービスは、ウェブサービス記述言語(WSDL)などの、マシン処理可能なフォーマットで記述されたインタフェースを有し得る。他のシステムは、ウェブサービスのインタフェースの記述によって規定される方法で、ウェブサービスとやりとりし得る。例えば、ウェブサービスは、他のシステムが呼び出し得る様々な動作を定義し得、他のシステムが、様々な動作を要求する際に従うと予期され得る、特定のアプリケーションプログラミングインタフェース(API)を定義し得る。
【0070】
様々な実施形態では、ウェブサービスは、ウェブサービス要求と関連したパラメータおよび/またはデータを含むメッセージの使用を通じて、要求され得るか、または呼び出され得る。かかるメッセージは、拡張マークアップ言語(XML)などの特定のマークアップ言語に従ってフォーマットされ得、かつ/またはシンプルオブジェクトアクセスプロトコル(SOAP)などのプロトコルを使用してカプセル化され得る。ウェブサービス要求を実行するため、ウェブサービスクライアントは、要求を含むメッセージを組み立てて、そのメッセージを、ウェブサービスに対応するアドレス可能なエンドポイント(例えば、ユニフォームリソースロケーター(URL))に、ハイパーテキスト転送プロトコル(HTTP)などのインターネットベースのアプリケーション層転送プロトコルを使用して、伝達し得る。
【0071】
いくつかの実施形態では、ウェブサービスは、メッセージベースの技法ではなく、表現状態転送(「RESTful」)技法を使用して、実装され得る。例えば、RESTful技法に従って実装されたウェブサービスは、SOAPメッセージ内にカプセル化されるのではなく、PUT、GET、またはDELETEなどのHTTPメソッド内に含まれるパラメータを通じて呼び出され得る。
【0072】
前述の実施形態は、以下の付記項を考慮してより良く理解され得る:
1.分散データウェアハウスシステムであって、
複数のノードを含み、
複数のノードの少なくともいくつかのノードの各々が:
カラムナデータベーステーブルのための記憶装置であって、前記記憶装置が複数のデータブロックを含む、記憶装置と、
クエリー実行モジュールと
を含み、
複数のノードの少なくとも1つのノードが、
カラムナデータベーステーブルの列内の複数のバケット間でのデータの分布を表す高さのバランスを調整したヒストグラムに対して複数のバケット範囲サイズを判断することであって、複数のバケットの各バケットが、列内のデータの1つ以上のデータ値が値の範囲内に存在することを表す、複数のバケット範囲サイズを判断することと、
列に対するデータを格納している1つ以上のデータブロックの各データブロックに対する確率的データ構造を生成することであって、確率的データ構造が、複数のバケットのどのバケットに対して、データブロック内に格納されているバケット範囲サイズ内のデータ値があるかを示す、確率的データ構造を生成することと
を行うように構成された、高さのバランスを調整したヒストグラム生成器を含み、
クエリー実行モジュールが:
選択データに対するカラムナデータベーステーブルの列を対象としたクエリーの指示を受信することと、
クエリーの指示の受信に応答して:
列に対するデータを格納している1つ以上のデータブロックの各々に対する確率的データ構造を検査して、選択データに対するクエリーに対応するために読み取る必要のない、1つ以上のデータブロックのうちの特定のものを判断することと、
読み取る必要のない1つ以上のデータブロックのうちの特定のものを除いて、列に対するデータを格納している1つ以上のデータブロックを読み取ることと
を行うように構成されている、
分散データウェアハウスシステム。
2.カラムナデータベーステーブルの列を表す高さのバランスを調整したヒストグラムに対する複数のバケットに対して複数のバケット範囲サイズを判断するために、高さのバランスを調整したヒストグラム生成器が:
列のデータを取得することと、
複数のバケットを生成することと、
列のデータがバケット間で均等に分布されるように、高さのバランスを調整したヒストグラムに対する各バケットに対して、複数のバケット範囲サイズのうちのバケット範囲サイズを設定することと
を行うように構成されている、付記項1に記載のシステム。
3.確率的データ構造が、複数のビットを含むビットマップであり、ビットマップの各ビットが、高さのバランスを調整したヒストグラムに対する複数のバケットの各バケットを表し、かつデータブロック内に格納されているバケット範囲サイズ内に含まれる全てのデータ値に対して、バケットに対応するビットマップのビットが設定される、付記項1に記載のシステム。
4.高さのバランスを調整したヒストグラム生成器が、1つ以上のデータブロックの各々の確率的データ構造を、1つ以上のデータブロックに関する情報を格納するブロックメタデータ構造内のそれぞれのエントリ内に格納するようにさらに構成されている、付記項1に記載のシステム。
5.少なくとも1つのノードが、分散データウェアハウスクラスタのリーダーノードであり、かつ、少なくともいくつかのノードのうちの少なくとも1つが、分散データウェアハウスクラスタの計算ノードである、付記項1に記載のシステム。
6.1つ以上のコンピューティング装置によって、
カラムナデータベーステーブルの列のヒストグラムに対する複数のバケットの各々に対してバケット範囲サイズを判断することであって、ヒストグラムが列内のデータの複数のバケット間での分布を表し、複数のバケットの各バケットが、列内のデータの1つ以上のデータ値が判断されたバケット範囲サイズに従って値の範囲内に存在することを表す、バケット範囲サイズを判断することと、
カラムナデータベーステーブルの列に対するデータを格納している1つ以上のデータブロックの各々に対して確率的データ構造を生成することであって、確率的データ構造が、複数のバケットのどの特定のバケットに対して、データブロック内に格納されたデータ値があるかを示す、確率的データ構造を生成することと、
選択データに対する列を対象としたクエリーの指示を受信することと、
クエリーの指示の受信に応答して、列に対するデータを格納している1つ以上のデータブロックの各々に対する確率的データ構造を検査して、選択データに対するクエリーに対応するために読み取る必要のない、1つ以上のデータブロックのうちの特定のものを判断することと
を実行することを含む、方法。
7.カラムナデータベーステーブルの列のヒストグラムに対する複数のバケットの各々に対してバケット範囲サイズを前記判断することが:
列のデータを取得することと、
複数のバケットを生成することと、
列のデータがバケット間で均等に分布されるように、各バケットに対して複数のバケット範囲サイズのうちのバケット範囲サイズを設定することと
を含む、付記項6に記載の方法。
8.カラムナデータベーステーブルの列に対するデータを格納している1つ以上のデータブロックの各々に対して確率的データ構造を前記生成することが:
複数のビットを含むデータブロックに対するビットマップを生成することであって、各ビットがヒストグラムに対する複数のバケットの異なるバケットを表す、ビットマップを生成することと、
ビットマップ内のそれぞれのビットを、データブロック内に格納されたデータ値がある、特定のバケットの各々に対して設定することと
を含む、付記項6に記載の方法。
9.1つ以上のデータブロックの各々の確率的データ構造を、1つ以上のデータブロックに関する情報を格納するブロックメタデータ構造内のそれぞれのエントリ内に格納することをさらに含む、付記項8に記載の方法。
10.列に対するデータを格納している1つ以上のデータブロックの各々に対する確率的データ構造を前記検査して、選択データに対するクエリーに対応するために読み取る必要のない1つ以上のデータブロックのうちの特定のものを判断することが:
選択データを含む値の範囲内の1つ以上のバケットを表す1つ以上のビットを判断することと、
1つ以上のデータブロックに対するブロックメタデータ構造内に格納されている各ビットマップ内の1つ以上のビットを検査して、1つ以上のビットのうちの1つも、選択データに対するクエリーに対応するために読み取る必要のない特定のものとして設定されていない、データブロックを識別することと
を含む、付記項9に記載の方法。
11.カラムナデータベーステーブルの列のヒストグラムが、高さのバランスを調整したヒストグラムである、付記項6に記載の方法。
12.列内のデータの複数のバケット間での分布に対するリバランス事象を検出することと、
リバランス事象の検出に応答して、
列の高さのバランスを調整したヒストグラムに対する複数のバケットの各々に対するバケット範囲サイズを修正することと、
複数のバケットの修正されたバケット範囲サイズに従って1つ以上のデータブロックの各々に対する各確率的データ構造を更新することと
をさらに含む、付記項11に記載の方法。
13.列内のデータの複数のバケット間での分布に対するリバランス事象を前記検出することが、1つ以上の新しいデータブロック内に格納されている列に対する追加のデータ量がリバランス閾値を上回っていると判断することを含む、付記項12に記載の方法。
14.列内のデータの複数のバケット間での分布に対するリバランス事象を前記検出することが、列内のデータの分布と比較したデータの追加量の分布間の変化が分布閾値を上回っていると判断するために、列に対するデータの追加量の分布を分析することを含む、付記項12に記載の方法。
15.各確率的データ構造を前記更新することに続いて、クエリーに対応するために1つ以上のデータブロックの1つから読み取ったデータが、1つのデータブロックに対する確率的データ構造によって示される通りのデータ値の範囲内のデータ値を含んでいないという指示を受信することと、
データ値がデータ値の範囲内に含まれているという指示を除去するために1つのデータブロックに対する確率的データ構造を更新することと
をさらに含む、付記項12に記載の方法。
16.列に対する1つ以上のデータブロック内に格納されているデータがソートされていない、付記項6に記載の方法。
17.コンピューティング装置の1つ以上が、分散データウェアハウスシステムを実装する膨大なコンピューティング装置の一部であり、1つ以上のコンピューティング装置が、データベースウェアハウスクラスタの1つ以上の計算ノードであり、膨大なコンピューティング装置の異なるコンピューティング装置が、データベースウェアハウスクラスタのリーダーノードであり、かつ方法が、リーダーノードによって、カラムナデータベーステーブルの列を対象とした1つ以上のクエリーを1つ以上の計算ノードに送信することを実行することをさらに含む、付記項6に記載の方法。
18.プログラム命令を格納している、持続性コンピュータ可読記憶媒体であって、プログラム命令が、1つ以上のコンピューティング装置によって実行される場合に:
カラムナデータベーステーブルの列のヒストグラムに対する複数のバケットの各々に対して、バケット範囲サイズを判断することであって、ヒストグラムが列内のデータの複数のバケット間での分布を表し、複数のバケットの各バケットが、列内のデータの1つ以上のデータ値が判断されたバケット範囲サイズに従って値の範囲内に存在することを表す、バケット範囲サイズを判断することと、
カラムナデータベーステーブルの列に対するデータを格納している1つ以上のデータブロックの各々に対してビットマップを生成することであって、ビットマップ内の各ビットが複数のバケットの異なる1つを表し、かつ、ビットマップ内の設定されたビットが、データブロック内に格納されたデータ値がある、ヒストグラム内の複数のバケットのうちの特定のバケットを示す、ビットマップを生成することと、
選択データに対する列を対象としたクエリーの指示を受信することと、
クエリーの指示の受信に応答して:
列に対するデータを格納している1つ以上のデータブロックの各々に対するビットマップを検査して、選択データに対するクエリーに対応するために読み取る必要のない、1つ以上のデータブロックのうちの特定のものを判断することと、
読み取る必要のない、1つ以上のデータブロックのうちの特定のものを除いて、列に対するデータを格納している1つ以上のデータブロックを読み取ることと
を実装する、持続性コンピュータ可読記憶媒体。
19.カラムナデータベーステーブルの列に対するヒストグラムが、高さのバランスを調整したヒストグラムである、付記項18に記載の持続性コンピュータ可読記憶媒体。
20.プログラム命令が、1つ以上のコンピューティング装置によってさらに実行される場合に:
列内のデータの複数のバケット間での分布に対するリバランス事象を検出することと、
リバランス事象の検出に応答して:
列の高さのバランスを調整したヒストグラムに対する複数のバケットの各々に対するバケット範囲サイズを修正することと、
複数のバケットの修正されたバケット範囲サイズに従って1つ以上のデータブロックの各々に対する各ビットマップを更新することと
を実装する、付記項19に記載の持続性コンピュータ可読記憶媒体。
21.列内のデータの複数のバケット間での分布に対するリバランス事象を前記検出する際に、プログラム命令が、1つ以上のコンピューティング装置によって実行される場合に、複数のバケットの各々に対するバケット範囲サイズが判断されてからの時間が、リバランス時間閾値を上回っていると判断することを実装する、付記項20に記載の持続性コンピュータ可読記憶媒体。
22.複数のバケットの修正されたバケット範囲サイズに従って1つ以上のデータブロックの各々に対する各ビットマップを前記更新する際に、プログラム命令が、1つ以上のコンピューティング装置によって実行される場合に:
修正されたバケット範囲サイズ内のデータブロック内に格納されたデータ値があることを示す、複数のバケットのうちのバケットを表すビットマップの1つ以上の未設定のビットを識別することと、
ビットマップの1つ以上の未設定のビットを設定することと
をさらに実装する、付記項20に記載の持続性コンピュータ可読記憶媒体。
23.各ビットマップが、1つ以上のデータブロックに関する情報を格納している現在のブロックメタデータ構造内のそれぞれのエントリ内に格納されていて、かつ、複数のバケットの修正されたバケット範囲サイズに従って1つ以上のデータブロックの各々に対する各ビットマップを前記更新する際に、プログラム命令が、1つ以上のコンピューティング装置によって実行される場合に:
現在のブロックメタデータ構造のそれぞれのエントリで満たされた新しいブロックメタデータ構造を生成することと、
複数のバケットの修正されたバケット範囲サイズに従って、1つ以上のデータブロックの各々に対する新しいブロックメタデータ構造内のそれぞれのエントリ内の各ビットマップを修正することと
を実装し、
新しいブロックメタデータ構造を前記生成すること、および新しいブロックメタデータ構造内のそれぞれのエントリ内の各ビットマップを修正することが完了するまで、クエリの指示に応答したビットマップの前記検査の実行が、現在のブロックメタデータ構造内に格納されているビットマップを利用する、
付記項20に記載の持続性コンピュータ可読記憶媒体。
【0073】
結論
様々な実施形態は、コンピュータアクセス可能媒体上での、前述の説明に従って実装された命令および/またはデータの受信、送信または格納をさらに含み得る。一般的に言えば、コンピュータアクセス可能媒体は、磁気または光媒体、例えば、ディスクもしくはDVD/CD−ROM、不揮発性媒体(RAM(例えば、SDRAM、DDR、RDRAM、SRAMなど)、ROMなど)などの記憶媒体またはメモリ媒体、ならびにネットワークおよび/または無線リンクなどの通信媒体を経由して伝達される、伝送媒体または、電気信号、電磁信号、もしくはデジタル信号などの信号を含み得る。
【0074】
図に示し、本明細書で説明する様々な方法は、方法の実施形態例を表す。方法は、ソフトウェア、ハードウェア、またはそれらの組合せで実装され得る。方法の順序は変更され得、様々な要素は、追加、並べ替え、結合、省略、修正、などが行われ得る。
【0075】
様々な修正および変更は、本開示の利益を有する当業者に明らかであるように、行われ得る。本発明は、かかる修正および変更の全てを包含し、それに応じて、前述の説明は、制限的な意味ではなく例示的と見なされることを意図する。