(57)【特許請求の範囲】
【請求項１】
分散データウェアハウスシステムであって、
複数のノードを含み、
前記複数のノードの少なくともいくつかのノードの各々が、
カラムナデータベーステーブルのための記憶装置であって、前記記憶装置が複数のデータブロックを含む、記憶装置と、
クエリー実行モジュールと
を含み、
前記複数のノードの少なくとも１つのノードが、
前記カラムナデータベーステーブルの列内の複数のバケット間でのデータの分布を表す高さのバランスを調整したヒストグラムに対して複数のバケット範囲サイズを判断することであって、前記複数のバケットの各バケットが、前記列内の前記データの１つ以上のデータ値が値の範囲内に存在することを表す、複数のバケット範囲サイズを判断することと、
前記列に対するデータを格納している１つ以上のデータブロックの各データブロックに対する確率的データ構造を生成することであって、前記確率的データ構造が、前記複数のバケットに対して判断された前記複数のバケット範囲サイズのうちの個々のバケット範囲サイズ内に前記データブロックに格納されたデータ値があるかどうかを示す、確率的データ構造を生成することと
を行うように構成された、高さのバランスを調整したヒストグラム生成器を含み、
前記クエリー実行モジュールが、
選択データに対する前記カラムナデータベーステーブルの前記列を対象としたクエリーの指示を受信することと、
前記クエリーの前記指示の受信に応答して、
前記列に対するデータを格納している前記１つ以上のデータブロックの各々に対する前記確率的データ構造を検査して、前記選択データに対する前記クエリーに対応するために読み取る必要のない前記１つ以上のデータブロックのうちの特定のものを判断することと、
読み取る必要のない、前記１つ以上のデータブロックのうちの前記特定のものを除いて、前記列に対するデータを格納している前記１つ以上のデータブロックを読み取ることとを行うように構成されている、
分散データウェアハウスシステム。
【請求項２】
前記カラムナデータベーステーブルの前記列を表す前記高さのバランスを調整したヒストグラムに対する前記複数のバケットに対して前記複数のバケット範囲サイズを判断するために、前記高さのバランスを調整したヒストグラム生成器が、
前記列の前記データを取得することと、
前記複数のバケットを生成することと、
前記列の前記データが前記バケット間で均等に分布されるように、前記高さのバランスを調整したヒストグラムに対する各バケットに対して、前記複数のバケット範囲サイズのうちのバケット範囲サイズを設定することとを行うように構成されている、請求項１に記載のシステム。
【請求項３】
前記確率的データ構造が、複数のビットを含むビットマップであり、前記ビットマップの各ビットが、前記高さのバランスを調整したヒストグラムに対する前記複数のバケットの各バケットを表し、かつ前記データブロック内に格納されている前記バケット範囲サイズ内に含まれる全てのデータ値に対して、前記バケットに対応する前記ビットマップの前記ビットが設定される、請求項１に記載のシステム。
【請求項４】
前記少なくとも１つのノードが、分散データウェアハウスクラスタのリーダーノードであり、かつ、前記少なくともいくつかのノードのうちの前記少なくとも１つが、前記分散データウェアハウスクラスタの計算ノードである、請求項１に記載のシステム。
【請求項５】
１つ以上のコンピューティング装置によって、
カラムナデータベーステーブルの列のヒストグラムに対する複数のバケットの各々に対して、バケット範囲サイズを判断することであって、前記ヒストグラムが前記列内のデータの前記複数のバケット間での分布を表し、前記複数のバケットの各バケットが、前記列内の前記データの１つ以上のデータ値が前記判断されたバケット範囲サイズに従って値の範囲内に存在することを表す、バケット範囲サイズを判断することと、
前記カラムナデータベーステーブルの前記列に対するデータを格納している１つ以上のデータブロックの各々に対して確率的データ構造を生成することであって、前記確率的データ構造が、前記複数のバケットに対して判断された前記複数のバケット範囲サイズのうちの個々のバケット範囲サイズ内に前記データブロックに格納されたデータ値があるかどうかを示す、確率的データ構造を生成することと、
選択データに対する前記列を対象としたクエリーの指示を受信することと、
前記クエリーの前記指示の受信に応答して、前記列に対するデータを格納している前記１つ以上のデータブロックの各々に対する前記確率的データ構造を検査して、前記選択データに対する前記クエリーに対応するために読み取る必要のない、前記１つ以上のデータブロックのうちの特定のものを判断することとを実行することを含む、方法。
【請求項６】
前記カラムナデータベーステーブルの前記列の前記ヒストグラムに対する複数のバケットの各々に対してバケット範囲サイズを前記判断することが：
前記列の前記データを取得することと、
前記複数のバケットを生成することと、
前記列の前記データが前記バケット間で均等に分布されるように、各バケットに対して前記複数のバケット範囲サイズのうちのバケット範囲サイズを設定することとを含む、請求項５に記載の方法。
【請求項７】
前記カラムナデータベーステーブルの前記列に対するデータを格納している前記１つ以上のデータブロックの各々に対して前記確率的データ構造を前記生成することが、
複数のビットを含む前記データブロックに対するビットマップを生成することであって、各ビットが前記ヒストグラムに対する前記複数のバケットの異なるバケットを表す、ビットマップを生成することと、
前記ビットマップ内の前記それぞれのビットを、前記データブロック内に格納された前記データ値がある、前記特定のバケットの各々に対して設定することとを含む、請求項５に記載の方法。
【請求項８】
前記１つ以上のデータブロックの各々の前記確率的データ構造を、前記１つ以上のデータブロックに関する情報を格納するブロックメタデータ構造内のそれぞれのエントリ内に格納することをさらに含む、請求項７に記載の方法。
【請求項９】
前記列に対するデータを格納している前記１つ以上のデータブロックの各々に対する前記確率的データ構造を前記検査して、前記選択データに対する前記クエリーに対応するために読み取る必要のない、前記１つ以上のデータブロックのうちの前記特定のものを判断することが、
前記選択データを含む、前記値の範囲内の前記１つ以上のバケットを表す１つ以上のビットを判断することと、
前記１つ以上のデータブロックに対する前記ブロックメタデータ構造内に格納されている各ビットマップ内の前記１つ以上のビットを検査して、前記１つ以上のビットのうちの１つも、前記選択データに対する前記クエリーに対応するために読み取る必要のない前記特定のものとして設定されていない、データブロックを識別することとを含む、請求項８に記載の方法。
【請求項１０】
前記カラムナデータベーステーブルの前記列の前記ヒストグラムが、高さのバランスを調整したヒストグラムである、請求項５に記載の方法。
【請求項１１】
前記列内のデータの前記複数のバケット間での前記分布に対するリバランス事象を検出することと、
前記リバランス事象の検出に応答して、    前記列の前記高さのバランスを調整したヒストグラムに対する前記複数のバケットの各々に対する前記バケット範囲サイズを修正することと、
前記複数のバケットの前記修正されたバケット範囲サイズに従って、前記１つ以上のデータブロックの各々に対する各確率的データ構造を更新することをさらに含む、請求項１０に記載の方法。
【請求項１２】
前記列内のデータの前記複数のバケット間での前記分布に対する前記リバランス事象を前記検出することが、１つ以上の新しいデータブロック内に格納されている前記列に対する追加のデータ量がリバランス閾値を上回っていると判断することを含む、請求項１１に記載の方法。
【請求項１３】
各確率的データ構造を前記更新することに続いて、前記クエリーに対応するために前記１つ以上のデータブロックの１つから読み取ったデータが、前記１つのデータブロックに対する前記確率的データ構造によって示される通りのデータ値の前記範囲内のデータ値を含んでいないという指示を受信することと、
前記データ値がデータ値の前記範囲内に含まれているという前記指示を除去するために前記１つのデータブロックに対する前記確率的データ構造を更新することとをさらに含む、請求項１１に記載の方法。
【請求項１４】
前記コンピューティング装置の１つ以上が、分散データウェアハウスシステムを実装するコンピューティング装置の一部であり、前記１つ以上のコンピューティング装置が、データベースウェアハウスクラスタの１つ以上の計算ノードであり、前記コンピューティング装置の異なるコンピューティング装置が、前記データベースウェアハウスクラスタのリーダーノードであり、かつ前記方法が、前記リーダーノードによって、前記カラムナデータベーステーブルの前記列を対象とした１つ以上のクエリーを前記１つ以上の計算ノードに送信することを実行することをさらに含む、請求項５に記載の方法。
【請求項１５】
プログラム命令を格納している、持続性コンピュータ可読記憶媒体であって、前記プログラム命令が、１つ以上のコンピューティング装置によって実行される場合に、
カラムナデータベーステーブルの列のヒストグラムに対する複数のバケットの各々に対して、バケット範囲サイズを判断することであって、前記ヒストグラムが前記列内のデータの前記複数のバケット間での分布を表し、前記複数のバケットの各バケットが、前記列内の前記データの１つ以上のデータ値が前記判断されたバケット範囲サイズに従って値の範囲内に存在することを表す、バケット範囲サイズを判断することと、
前記カラムナデータベーステーブルの前記列に対するデータを格納している１つ以上のデータブロックの各々に対してビットマップを生成することであって、前記ビットマップ内の各ビットが前記複数のバケットの異なる１つを表し、かつ、前記ビットマップ内の設定されたビットが、前記データブロック内に格納されたデータ値がある、前記ヒストグラム内の前記複数のバケットのうちの特定のバケットを示す、ビットマップを生成することと、
選択データに対する前記列を対象としたクエリーの指示を受信することと、
前記クエリーの前記指示の受信に応答して、
前記列に対するデータを格納している前記１つ以上のデータブロックの各々に対する前記ビットマップを検査して、前記選択データに対する前記クエリーに対応するために読み取る必要のない、前記１つ以上のデータブロックのうちの特定のものを判断することと、
読み取る必要のない、前記１つ以上のデータブロックのうちの前記特定のものを除いて、前記列に対するデータを格納している前記１つ以上のデータブロックを読み取ることとを実装する、持続性コンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
情報を作成、追跡、および保持するための構成に関する技術力が成長し続けるにつれて
、増加する情報を管理および格納するための様々な異なる技術が開発されている。例えば
、データベースシステムは、格納された情報を管理するためのハードウェアおよびソフト
ウェアの多数の異なる特殊化構成またはカスタマイズ化構成をクライアントに提供する。
しかし、増加するデータ編成は、しばしば、データベースシステムのように、データ記憶
および管理技術のサイズおよび複雑さの両方における対応する増加を格納および管理する
必要があり、それは、その結果として、情報を維持する費用を増大させる。新しい技術は
、データを維持するために要求される複雑さとストレージの両方をますます削減しようと
努めながら、同時にデータ記憶およびデータ管理の効率性を改善する。
【０００２】
１つのかかる技術は、列指向データベーステーブル（しばしば「カラムナ」と呼ばれる
）を使用してデータがデータベーステーブル内に格納されるときにデータの位置付けまた
は配置を修正して、それを管理するために要求されるアクセス動作数を削減することを伴
う。通常、様々な入力（例えば、データの書込み）および出力（例えば、データの読取り
）などの、アクセス動作は、データを格納および管理する際に最も費用がかかり最も効率
が悪いことが分かる。カラムナデータベースは、あるタイプのデータに対して、例えば、
データベースシステムが、データベーステーブルの行よりもデータベーステーブルの列に
おいて主に生じる情報に対するクエリーに応答する場合に、アクセス動作数を大幅に削減
し得る。しかし、カラムナデータベーステーブルなどの技術が出現しても、収集された情
報の持続的な増大は、データの格納および管理に対するさらなる最適化を必要とする。
【図面の簡単な説明】
【０００３】
【図１】いくつかの実施形態に従った、カラムナデータベースの列に対する高さのバランスを調整したヒストグラムを使用した効率的なクエリー処理のデータフローブロック図を示す。
【図２】いくつかの実施形態に従った、分散データベースウェアハウスサービス例を示すブロック図である。
【図３】いくつかの実施形態に従った、分散データウェアハウスクラスタ例を示すブロック図である。
【図４Ａ】いくつかの実施形態に従った、リーダーノード例を示すブロック図である。
【図４Ｂ】いくつかの実施形態に従った、計算ノード例を示すブロック図である。
【図５】いくつかの実施形態に従い、カラムナデータベーステーブルの列に対するヒストグラムを使用してクエリーを処理する方法を示す高レベル流れ図である。
【図６】いくつかの実施形態に従い、カラムナデータベーステーブル内の列に対するデータの均等な分布を表す、ヒストグラムに対するバケット範囲サイズを判断する方法を示す高レベル流れ図である。
【図７】いくつかの実施形態に従い、カラムナデータベーステーブルの列内のデータのヒストグラム内の各バケットを表すビットマップを生成する方法を示す高レベル流れ図である。
【図８】いくつかの実施形態に従い、カラムナデータベーステーブルの列内のデータに対するクエリーに応答して、どのデータブロックが読み取る必要がないかを判断する方法の流れ図を示す。
【図９】いくつかの実施形態に従い、リバランス事象の検出に応答して、データブロックに対する確率的データ構造を修正する方法の流れ図を示す。
【図１０】いくつかの実施形態に従い、データブロックに対する確率的データ構造を更新する方法の流れ図を示す。
【図１１】いくつかの実施形態に従った、システム例を示す。
【発明を実施するための形態】
【０００４】
本明細書では、実施形態は、いくつかの実施形態および例証する図に対する例として説
明されているが、当業者は、実施形態が説明する実施形態または図に制限されないことを
理解するであろう。図およびそれに対する詳細な記述は、開示する特定の形式に実施形態
を制限することを意図せず、それとは逆に、意図は、添付の請求項によって定義されるよ
うに、精神および範囲に含まれる、全ての修正、均等物および代替手段を包含することで
あることを理解されたい。本明細書で使用する見出しは編成目的のためだけであり、記述
または請求項の範囲を制限するために使用されることを意図しない。本出願全体を通して
、用語「〜し得る（ｍａｙ）」は、強制的な意味（すなわち、〜しなければならないこと
を意味する）ではなく、許容的な意味（すなわち、〜する可能性があることを意味する）
で使用される。同様に、用語「含む（ｉｎｃｌｕｄｅ）」、「含む（ｉｎｃｌｕｄｉｎｇ
）」、および「含む（ｉｎｃｌｕｄｅｓ）」は、制限することではなく、包含することを
意味する。
【０００５】
以下の詳細な記述では、請求された主題の完全な理解を提供するために、多数の具体的
詳細が説明される。しかし、請求された主題は、これらの具体的詳細なしでも実施され得
ることが当業者によって理解されよう。他の例では、当業者によって知られている方法、
装置、またはシステムは、請求された主題を曖昧にしないために、詳細には説明されてい
ない。
【０００６】
第１、第２などの用語は、本明細書では様々な要素を記述するために使用され得るが、
これらの要素は、これらの用語によって制限されるべきでないことも理解されたい。これ
らの用語は、１つの要素を別の要素と区別するためにのみ使用される。例えば、第１の接
触は、第２の接触と称せられ得、同様に、第２の接触は、本発明の範囲から逸脱すること
なく、第１の接触と称せられ得る。第１および第２の接触は両方とも接触であるが、それ
らは同じ接触ではない。
【０００７】
本明細書において本発明の記述に使用される用語は、特定の実施形態を記述することの
みを目的とし、本発明を制限することを意図していない。本発明の記述および添付の請求
項では、単数形の「１つの（ａ）」、「１つの（ａｎ）」および「その（ｔｈｅ）」は、
コンテキストで別段の明確な指示がない限り、複数形も含むことを意図する。本明細書で
は、用語「および／または」は、関連するリストされた項目の１つ以上の任意および全て
の可能な組合せを参照および包含することも理解されたい。用語「含む（ｉｎｃｌｕｄｅ
ｓ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、「含む（ｃｏｍｐｒｉｓｅｓ）」、および／
または「含む（ｃｏｍｐｒｉｓｉｎｇ）」は、本明細書で使用される場合、明記された特
徴、整数、ステップ、動作、要素、および／または構成要素の存在を指定するが、１つ以
上の他の特徴、整数、ステップ、動作、要素、構成要素、および／またはそれらのグルー
プの存在または追加を除外しないこともさらに理解されたい。
【０００８】
本明細書では、用語「もし〜ならば（ｉｆ）」は、コンテキストに応じて、「〜の場合
（ｗｈｅｎ）」または「〜すると（ｕｐｏｎ）」または「判断に応答して」もしくは「検
出に応答して」を意味すると解釈され得る。同様に、句「〜ことが判断される場合」また
は「［明記された条件もしくは事象］が検出された場合」は、コンテキストに応じて、「
〜と判断すると」もしくは「判断に応答して」または「［明記された条件もしくは事象］
を検出すると」もしくは「［明記された条件もしくは事象］の検出に応答して」を意味す
ると解釈され得る。
【０００９】
カラムナデータベースの列に対するヒストグラムを使用する効率的なクエリー処理の様
々な実施形態が本明細書で説明される。分散データウェアハウスシステムなどの、データ
ベース管理サービス、または他のデータベース管理システムは、効率的なデータ管理をク
ライアントに提供するために、列指向データベーステーブル（以下、「カラムナデータベ
ーステーブル」と呼ぶ）を実装し得る。通常、カラムナデータベーステーブル内のデータ
は、日付によってなど、データベーステーブルの１つの列に従ってソートされる。データ
がソートされている列に対するデータをソートしているブロックかどうかを判断する際に
、各データブロックに対する異なる範囲が格納または推定されて、クエリーが、要求され
たデータがデータブロック内に恐らく格納されていると分かっているデータブロックの読
取りのみを指示するのを可能にする。しかし、かかる技術は、一度に１つの列だけがソー
トされ得るので、カラムナデータベーステーブルがソートされている列内のデータに対す
るクエリーに応答する場合にのみ適用され得る。
【００１０】
ヒストグラムは、異なる値の範囲内のデータセットの分布を表し、それは、しばしば、
バケットと呼ばれる。例えば、天気温度のヒストグラムは、最高気温が９０度台、８０度
台、７０度台などであった日数を示す棒グラフを示し得る。ヒストグラムを表す棒グラフ
における棒の高さは、いくつかの値の範囲がデータセット内でより頻出する値を有し得る
ので、大きく変わり得る。しかし、高さのバランスを調整したヒストグラムは、異なるサ
イズの値の範囲（すなわち、バケット）を提供し、この特徴により、プロットされたヒス
トグラムの棒の高さは、均等であるか、またはバランスを取られ得る。カラムナデータベ
ーステーブルの列は、様々な頻度のデータ値を含み得る。これらのデータ値に基づき生成
されたヒストグラムは、データブロック内に格納されている異なる範囲の値を識別するた
めに使用され得、従って、どのブロックが読み取る必要がないかを判断し得る。少なくと
もいくつかの実施形態では、これらのデータ値に基づき生成された高さのバランスを調整
したヒストグラムは、クエリーを処理するために十分な選択性（例えば、特定のバケット
内のデータ値の区別または確率）を提供し得、この特徴により、クエリーが受信されると
、列の高さのバランスを調整したヒストグラムが、列に対するデータを格納しているどの
データブロックが読み取る必要がないかを判断するために使用され得る。例えば、次いで
、受信したクエリーに対応するためのデータを取得するために、少ない読取り動作（また
は他の様々なアクセス動作）が実行され得る。このように、クエリーを処理するためにカ
ラムナデータベースの列に対するヒストグラムまたは高さのバランスを調整したヒストグ
ラムを使用することにより、いくつかの実施形態は、大量のデータのより効率的な管理お
よびそれらに対するアクセスを提供し得る。
【００１１】
クライアント（または顧客、組織、実体など）が、後に格納または管理を必要とし得る
大量のデータを収集することは稀ではない。いくつかのクライアントは、このデータに対
して独自のデータ管理システムを実装することを望み得るが、データ管理サービスを得る
ことは、自身のデータを管理することを望まないクライアントにとって、より効率的で費
用効果が高い選択肢であると分かり得ることがますます明らかになる。例えば、小企業は
、将来のデータ分析のために売上レコードおよび関連データを維持することを望み得る。
データを維持するためのデータ管理システム、ならびにそのシステムのセットアップおよ
び保守に必要な専門知識に直接投資をする代わりに、小企業は、代替方法として、自身の
データを格納および管理するためにデータ管理サービスと契約を結ぶことはより効率的で
あることが分かり得る。
【００１２】
図２〜図４Ｂに関して以下で説明する分散データウェアハウスサービスなどの、データ
管理サービスは、クライアントに、その様々なニーズに応じて、様々な異なるデータ管理
サービスを提供し得る。ある場合には、クライアントは、売上レコードマーケティング、
管理報告、ビジネスプロセス管理、予算予測、財務報告、ウェブサイト解析、または他の
多くのタイプもしくは種類のデータなどの、大量のデータを格納および維持することを望
み得る。データに対するクライアントの利用は、そのデータを格納するために使用される
データ管理システムの構成にも影響し得る。例えば、データの大きな集合を各行内の少数
の列から集めるような、あるタイプのデータ分析および他の操作に対して、カラムナデー
タベーステーブルは、もっと効率的な性能を提供し得る。言い換えれば、（従来型のデー
タベース方式におけるように）列の行全体を各データブロック内に格納するのではなく、
データベーステーブルからの列情報がディスク上のデータブロックに格納され得る。
【００１３】
いくつかの実施形態では、テーブルデータをかかるカラムナ方式で格納することは、様
々なクエリーに対する全体的なディスクＩ／Ｏ要件を削減し得、かつ解析クエリー性能を
向上し得る。例えば、データベーステーブル情報をカラムナ方式で格納すると、クエリー
処理の一部としてデータベース操作を実行するためにデータをメモリ内に読み出す場合（
例えば、テーブル内の全ての行に対する全ての列フィールド値を読み出す場合）に実行さ
れるディスクＩ／Ｏ要求数を削減し得、かつクエリーを処理する際にディスクからロード
する必要のあるデータの量を削減し得る。逆に、一定数のディスク要求に対して、各デー
タブロックがテーブル行全体を格納した場合よりもはるかに多くの行に対する列フィール
ド値が読み出され得る。いくつかの実施形態では、ディスク要件は、カラムナ記憶データ
タイプと適合する圧縮方法を使用して、さらに削減され得る。例えば、各ブロックが均一
のデータ（すなわち、全てが同じデータタイプの列フィールド値）を含むので、ディスク
記憶および読出し要件が、特定の列データタイプに最も適した圧縮方法を適用することに
よりさらに削減され得る。いくつかの実施形態では、単一列のフィールド値のみを含むデ
ータブロックをディスク上に格納するためのスペースにおける節約が、データを読み出し
、次いでそのデータをシステムメモリ内に格納する場合（例えば、読み出したデータを分
析するか、または他の方法で処理する場合）にスペースにおける節約になり得る。例えば
、一度に１つまたは少数の列にアクセスし、かつ／またはそれらを操作する必要があるだ
けのデータベース操作に対して、クエリーを実行するために実際に必要な特定の列内のデ
ータを格納しているデータブロックだけが読み出されてメモリ内に格納され得るので、従
来型の行ベース記憶よりも少ないメモリ空間しか必要とされない可能性がある。カラムナ
データベーステーブルを実装する効率を向上させるため、カラムナデータベースの列に対
するヒストグラムが生成されて、クエリーに応答する際に読み取る必要のないデータブロ
ックを判断するために使用される確率的データ構造を作成し得る。
【００１４】
図１は、いくつかの実施形態に従った、カラムナデータベースの列に対する高さのバラ
ンスを調整したヒストグラムを使用した効率的なクエリー処理のデータフローブロック図
を示す。高さのバランスを調整したヒストグラム１１０は、カラムナデータベーステーブ
ルの列１３２内の複数のデータブロックに格納されたデータ値に基づき作成され得る。ヒ
ストグラム１１０のバケット範囲サイズは、データ値がヒストグラムのバケット１２０の
間で均等に分布されるように、判断され得る。高さのバランスを調整したヒストグラム１
１０内のバケット１１０のどの特定のバケットに対してデータブロック内に格納されたデ
ータ値があるかを示す、確率的データ構造が作成され得る。より一般的には、確率的デー
タ構造は、所与の値が、データブロック内に格納されたデータ値のセットなどの、データ
セットのメンバーであるかをテストするために使用され得る。確率的データ構造は、特定
の値がデータ値のセットのメンバーではないことを確信をもって示し得る。選択データに
列１３２を対象としたクエリー１４０に対応するため、スーパーブロックデータ構造１０
０内のそれぞれのエントリが、どのブロックが読み取る必要がないかを判断するために検
査され得る。
【００１５】
記憶装置１３０は、カラムナデータベーステーブルのためのデータを格納するように構
成された記憶ディスク装置または他のタイプの記憶装置などの、１つ以上の記憶装置であ
り得る。図１では、記憶装置１３０は、列１３２を含め、複数の列に対するデータを格納
するように構成される。データは、例えば、日付、引用、量、またはウェブ測定基準のリ
スト、および、より一般的には、カラムナデータベーステーブルの列に対するデータブロ
ック内に格納可能な任意の他のタイプまたは形式のデータ値であり得る。様々な実施形態
では、列内に格納されたデータ値はソートされていない。データブロックは、データ記憶
の単位（例えば、データページ）、論理的抽象化、またはこれらのデータ値をデータベー
スまたは他の記憶システムに格納する記憶装置の物理ブロックであり得る。カラムナデー
タベーステーブルは、列のデータ値を一緒に格納するように構成されたデータのための列
指向記憶システムであり得る。少なくともいくつかの実施形態では、記憶装置１３０は、
分散型データベースシステム内の複数の異なるノードにわたって分散され得る。
【００１６】
ヒストグラム１１０は、列１３２内に格納されたデータブロックのデータ値に基づき生
成され得る。バケット１２０のバケット範囲サイズを判断するために、データブロックか
らの列のデータが取得され得る。次いで、複数のバケットが生成され得、それらは、デー
タブロック内に格納され得る値の数よりも大幅に多い可能性がある。バケット範囲サイズ
は、列のデータがバケット間で均等に分布されるように、バケットに対して設定され得る
。図１は、様々なバケット１２０の範囲サイズを示す。例えば、小売業者は、一定の期間
、商品をその小売業者から購入する顧客に関して、年齢などの、人口動態情報をカラムナ
データベーステーブルの列内に格納し得る。顧客の年齢がある年齢範囲（例えば、４５〜
６０歳）に高度に集中して、残りの顧客年齢がもっと散らばっていた場合、均等なバケッ
トサイズ範囲（例えば、１０歳）をもつヒストグラムは、多数を有する４０〜５０および
５０〜６０の、２つのバケット、ならびにはるかに少数の顧客を有する他のバケットをも
ち得る。代わりに、バケット範囲サイズが、いくつかのバケット範囲が年齢０〜２５を含
むが、他は、もっと少ない４５〜４７であり得るように、バケット範囲サイズにおいて変
化し得、これにより、各バケットで表される顧客数が全てのバケットにわたって均等に分
布されるようになる。
【００１７】
確率的データ構造は、バケット範囲サイズ１２０に基づき、各データブロックに対して
生成され得る。これらの確率的データ構造は、バケット１２０のどのバケットに対して、
データ値が、バケットによって表される値の範囲内であり、データブロック内に格納され
ているかを示す。いくつかの実施形態では、図１に示すように、確率的データ構造は、ビ
ットマップとして格納され得る。ビットマップの各ビットは、ヒストグラムのバケットに
対応し得る。設定されたビットは、バケットの範囲内のデータ値がデータブロック内に格
納されていることを示す。従って、例えば、クエリーが処理されていて、ビットマップが
あるデータ値について検査される場合に、クエリー内で求められたデータ値を含むバケッ
トを表すビットマップのビットが設定されていると、そのデータ値がデータブロック内に
格納されている可能性がある。そうでない場合、データブロックは、読み取る必要がない
可能性がある。高さのバランスを調整したヒストグラム１１０として示されているが、少
なくともいくつかの実施形態では、確率的データ構造を生成するために、高さのバランス
を調整していないヒストグラムが使用され得る。
【００１８】
確率的データ構造は、スーパーブロックデータ構造１００などの、ブロックメタデータ
のデータ構造内に格納され得、スーパーブロックデータ構造１００は、列内のデータブロ
ックに関する情報を格納する。各データブロックは、スーパーブロックデータ構造１００
内にそれぞれのエントリを有し得る。いくつかの実施形態では、列に対する新しいデータ
が受信されると、どのバケットが、そのバケット範囲内のデータブロックに格納されたデ
ータ値を有するかを示すために、新しい確率的データ構造が生成され得る。少なくともい
くつかの実施形態では、列に追加された新規データのある閾値、またはヒストグラムの作
成からの一定期間の経過などの、リバランス事象が検出され得る。いくつかの実施形態で
は、列に対して格納される追加データにおけるある程度の偏りもリバランス事象をトリガ
ーし得る。バケット範囲サイズが修正され得、そして、スーパーブロックデータ構造内に
格納されているものなどの、確率的データ構造が更新され得る。修正された確率的データ
構造が、列を対象とした将来のクエリーのサービスにおいて使用されるとき、誤判定（す
なわち、確率的データ構造は、データ値がバケットサイズの範囲内に格納されていること
を示すが、実際にはデータブロックは、そのバケットサイズの範囲内に値を格納していな
い場合）が、データブロック内に格納されたデータ値をより正確に反映するために、確率
的データ構造を更新することにより訂正され得る。いくつかの実施形態では、新しいスー
パーブロックデータ構造が、クエリーに対応するために使用されるように作成され得、確
率的データ構造の更新時にクエリー処理が中断されないように、現在のスーパーブロック
データ構造を置き換える。
【００１９】
カラムナデータベースの列に対するヒストグラムを使用した効率的なクエリー処理の実
施形態が、様々な異なるデータベース管理システムにおいて実装され得る。分散データウ
ェアハウスサービスまたはクライアントに提供される他のデータベースサービスなどの、
データ管理サービスが、データ管理サービスで格納されたクライアントデータに対して、
カラムナデータベースの列に対するヒストグラムを使用するクエリー処理を実装し得る。
同様に、クライアントに所有されるか、操作されるか、または制御されるデータベースシ
ステムも、列のクエリー処理のためにヒストグラムを実装し得る。より一般的には、カラ
ムナデータベーステーブルにデータを格納する任意のシステムは、カラムナデータベース
の列に対するヒストグラムを使用する効率的なクエリー処理の様々な実施形態を実装し得
、従って、前の例は、想定される様々な他のシステムに関して制限される必要がない。
【００２０】
分散データウェアハウスサービスにおけるクエリー処理のためのヒストグラムの実装
前述のように、様々なクライアント（または、顧客、組織、実体、もしくユーザー）は
、データ管理サービスを使用してデータを格納および管理することを望み得る。図２は、
いくつかの実施形態に従って、データ管理サービスをクライアントに提供し得る、分散デ
ータウェアハウスシステム例を示す。具体的には、データウェアハウスクラスタは、他の
多くのデータ管理または記憶サービスとともに、データに対する格納要求（例えば、デー
タの記憶装置への書込み）またはクエリー（例えば、選択データに対するサーバークエリ
ー言語要求（ＳＱＬ）など）に応答し得る。
【００２１】
複数のユーザーまたはクライアントがデータウェアハウスサービスを得るためにデータ
ウェアハウスクラスタにアクセスし得る。クライアントは、いくつかの実施形態によれば
、ユーザー、クライアントアプリケーション、および／またはデータウェアハウスサービ
ス加入者を含み得る。この例では、クライアント２５０ａ〜２５０ｎの各々は、分散デー
タウェアハウスサービス２８０内のデータウェアハウスクラスタ２２５および２３５にそ
れぞれアクセスすることが可能である。分散データウェアハウスクラスタ２２５および２
３５は、それらのクラスタにアクセスできるクライアント２５０ａ〜２５０ｎの代わりに
データが格納され得る２つ以上のノードを含み得る。
【００２２】
クライアント２５０ａ〜２５０ｎなどのクライアントは、デスクトップコンピュータ、
ラップトップコンピュータ、タブレットコンピュータ、携帯情報端末、モバイル機器、サ
ーバー、または要求をデータウェアハウスクラスタ２２５および２３５に送信し、かつ／
もしくは分散データウェアハウスクラスタ２２５および２３５から応答を受信するように
構成された、図１１に関して以下で説明するコンピュータシステム１０００などの、任意
の他のコンピューティングシステムもしくは他の装置を介して、データウェアハウスクラ
スタ２２５または２３５と通信し得る。要求は、例えば、データウェアハウスクラスタに
よって提供される特定の機能またはサービスと関連したパラメータおよび／またはデータ
を含むメッセージとしてフォーマットされ得る。かかるメッセージは、拡張マークアップ
言語（ＸＭＬ）などの特定のマークアップ言語に従ってフォーマットされ得、かつ／また
はシンプルオブジェクトアクセスプロトコル（ＳＯＡＰ）などのプロトコルを使用してカ
プセル化され得る。アプリケーションプログラマインタフェース（ＡＰＩ）が、クライア
ントが分散データウェアハウスサービスマネージャ２０２と通信している場合など、クラ
イアントに対して標準化されたメッセージフォーマットを提供するために実装され得る。
【００２３】
クライアント２５０ａ〜２５０ｎは、ワイドエリアネットワーク（ＷＡＮ）２６０（例
えば、インターネット）経由など、様々な異なる通信方法を使用して、分散データウェア
ハウスサービス２８０によってホストされる、分散データウェアハウスクラスタ２２５お
よび２３５と通信し得る。プライベートネットワーク、イントラネット、および他の形式
の通信ネットワークも、クライアントとデータウェアハウスクラスタとの間の通信を容易
にし得る。クライアントは、要求を含むメッセージを組み立てて、そのメッセージをネッ
トワークエンドポイント（例えば、データウェアハウスクラスタに対応するユニフォーム
リソースロケーター（ＵＲＬ））に伝達し得る。例えば、クライアント２５０ａは、ハイ
パーテキスト転送プロトコル（ＨＴＴＰ）要求をデータウェアハウスクラスタ２２５にＷ
ＡＮ  ２６０を経由して送信するように構成されている、ウェブクライアントなどの、ロ
ーカルソフトウェアアプリケーションを実行しているデスクトップコンピュータを介して
通信し得る。クライアントに送信される応答または他のデータも同様の方法でフォーマッ
トされ得る。
【００２４】
少なくともいくつかの実施形態では、２８０で示すような、分散データウェアハウスサ
ービスは、クラスタ２２５および２３５などの、分散データウェアハウスクラスタをホス
トし得る。分散データウェアハウスサービス２８０は、ネットワークエンドポイントをク
ラスタのストレージクライアント２５０ａ〜２５０ｎに提供し得、それは、クライアント
２５０ａ〜２５０ｎが要求および他のメッセージを直接、特定のクラスタに送信するのを
可能にする。前述のように、ネットワークエンドポイントは、例えば、特定のクラスタを
指す、ＵＲＬなどの、特定のネットワークアドレスであり得る。例えば、クライアント２
５０ａは、様々な要求メッセージを送信するためのネットワークエンドポイント「ｈｔｔ
ｐ：／／ｍｙｃｌｕｓｔｅｒ．ｃｏｍ」が与えられ得る。複数のストレージクライアント
（または特定のストレージクライアントのユーザー）は、特定のクラスタに対するネット
ワークエンドポイントを与えられ得る。権限のないユーザーがクラスタにアクセスするの
を防ぐために、様々なセキュリティ機能が実装され得る。逆に言えば、クライアントは、
複数のクラスタに対するネットワークエンドポイントを与えられ得る。
【００２５】
データウェアハウスクラスタ２２５および２３５などの、分散データウェアハウスクラ
スタは、１つ以上のノードで構成され得る。これらのクラスタは、異なる数のノードを含
み得る。ノードは、サーバー、デスクトップコンピュータ、ラップトップ、またはもっと
一般的には、図１１のコンピュータシステム１０００に関して以下で説明するものなどの
、任意の他のコンピューティング装置であり得る。いくつかの実施形態では、データウェ
アハウスクラスタ内のノード数は、クラスタスケーリング要求によってなど、修正され得
る。データウェアハウスクラスタのノードは、データを格納するための１つ以上のデータ
スライスを実装し得る。これらのデータスライスは、図３および図４Ｂに関して以下で説
明するディスク記憶装置などの、記憶装置の一部であり得る。クラスタは、要求および他
の連絡をＷＡＮ  ２６０を経由して、クライアント２５０ａ〜２５０ｎなどの、ストレー
ジクライアントから受信するように構成され得る。クラスタは、要求を複数のクライアン
トからクラスタのネットワークエンドポイント介して受信するように構成され得る。
【００２６】
いくつかの実施形態では、分散データウェアハウスサービス２８０は、ユーザーがクラ
ウドコンピューティング環境内でデータウェアハウスをセットアップ、操作、およびスケ
ーリングするのを可能にするウェブサービスの一部として実装され得る。ウェブサービス
によってホストされるデータウェアハウスクラスタは、ユーザーが、クラスタスケーリン
グ要求を、ウェブサービスによって実装されたクラスタ制御インタフェースに送信するこ
とによってなど、クラスタをスケーリングすることを可能にする、企業規模のデータベー
ス照会および管理システムを提供し得る。クラスタのスケーリングは、ウェブサービスの
ユーザーが、それらのデータウェアハウス機能、例えば、構造化データを介した迅速な問
合せ機能、様々なデータローディングおよびＥＴＬ（抽出、変換、およびロード）ツール
との統合、そのクラスで最高のビジネスインテリジェンス（ＢＩ）報告、データマイニン
グ、および解析ツールとのクライアント接続、ならびに複数テーブル結合、サブクエリ−
、および集計を含むものなどの複雑な解析クエリーの非常に迅速な実行の最適化など、を
さらに効率的に実行するのを可能にし得る。
【００２７】
様々な実施形態では、分散データウェアハウスサービス２８０は、クライアント（例え
ば、分散データウェアハウスシステムによって提供されるデータウェアハウスサービスの
加入者）に、ストレージクライアントからの要求に応答して、作成、構成、管理、スケー
リング、および終了され得る、データ記憶および管理リソースを提供し得る。例えば、い
くつかの実施形態では、分散データウェアハウスサービス２８０は、システムのクライア
ントに、仮想計算ノードから成るデータウェアハウスクラスタを提供し得る。これらの仮
想計算ノードは、ハードウェア仮想マシン、またはハードウェア構成をシミュレートする
ように実装された他の形式のソフトウェアなどの、仮想マシンによって実装されたノード
であり得る。仮想ノードは、物理ハードウェア上で実装されたノードと同じタスク、機能
、および／またはサービスを実行するように構成され得る。
【００２８】
分散データウェアハウスサービス２８０は、カスタマイズされたか、もしくは既製のコ
ンピューティングシステム、サーバー、または、図１１に関して以下で説明する、様々な
タイプの装置などの、コンピューティングシステムもしくは装置の任意の他の組合せなど
、多数のコンピューティング装置によって実装され得る。これらのコンピューティング装
置の異なるサブセットが、分散データウェアハウスサービスマネージャ２０２によって制
御され得る。分散データウェアハウスサービスマネージャ２０２は、例えば、クラスタ制
御インタフェースを、クライアント２５０ａ〜２５０ｎなどのクライアント、もしくは任
意の他のクライアントまたは、分散データウェアハウスサービスマネージャ２０２によっ
て管理される分散データウェアハウスクラスタとやりとりすることを望むユーザーに提供
し得、分散データウェアハウスクラスタは、この図示例では、データウェアハウスクラス
タ２２５および２３５であろう。例えば、分散データウェアハウスサービスマネージャ２
０２は、ストレージクライアントに対して１つ以上のグラフィカルユーザーインタフェー
ス（ＧＵＩ）を生成し得、それは、次いで、制御インタフェースによって提供される様々
な制御機能を、分散データウェアハウスサービス２８０内でホストされるデータウェアハ
ウスクラスタに対して選択するために利用され得る。
【００２９】
図３は、一実施形態に従った、分散データウェアハウスサービス内の分散データウェア
ハウスクラスタを示すブロック図である。この例に示すように、分散データウェアハウス
クラスタ３００は、リーダーノード３２０ならびに計算ノード３３０、３４０、および３
５０を含み得、それらは相互接続３６０を経由して互いに通信し得る。リーダーノード３
２０は、分散データウェアハウスクラスタ３００上でクエリーを実行するための１つ以上
のクエリープラン３２５を生成および／または維持し得る。本明細書で説明するように、
分散データウェアハウスクラスタ内の各ノードは、クライアント（例えば、ユーザー、ク
ライアントアプリケーション、および／または分散データウェアハウスサービス加入者）
の代わりに、データブロックが格納され得る複数のディスクを含み得る。この例では、計
算ノード３３０はディスク３３１〜３３８を含み、計算ノード３４０はディスク３４１〜
３４８を含み、計算ノード３５０はディスク３５１〜３５８を含む。いくつかの実施形態
では、分散データウェアハウスクラスタの構成要素（またはその構成要素である分散デー
タウェアハウスシステム）は、様々な適用可能な負荷分散技術のいずれかを使用して、負
荷分散をサポートし得る。例えば、いくつかの実施形態では、リーダーノード３２０は、
負荷分散構成要素（図示せず）を含み得る。
【００３０】
少なくともいくつかの実施形態では、分散データウェアハウスクラスタ３００は、前述
したものなどの、ウェブベースのデータウェアハウスサービスの一部として実装され得、
リーダーノード３２０ならびに、計算ノード３３０、３４０、および３５０などの、複数
の計算ノードを含む。リーダーノード３２０は、図２に関して前述したストレージクライ
アント２５０ａ〜２５０ｎなどの、ストレージクライアントとの通信を管理し得る。例え
ば、リーダーノードは、様々なストレージクライアントプログラム（例えば、アプリケー
ション）および／または加入者（ユーザー）から要求を受信し、次いでそれらを解析して
、関連したデータベース操作（複数可）を実行するための実行プラン（例えば、クエリー
プラン（複数可）３２５）を開発するサーバーであり得る。より詳細には、リーダーノー
ドは、複雑なクエリーおよび結合に対する結果を得るために必要な一連のステップを開発
し得る。リーダーノード３２０は、データウェアハウスクラスタ３００内に格納されたデ
ータに対してデータベース操作を実行するように指示された、計算ノード３３０〜３５０
の間の通信も管理し得る。例えば、コンパイル済みコードが、クエリーを実行するために
必要なステップを実行するために、リーダーノード３２０によって、計算ノード３３０〜
３５０のうちの様々な１つに配信され得、それらのクエリーの中間結果がリーダーノード
３２０に返送され得る。リーダーノード３２０は、データおよびクエリー応答または結果
を計算ノード３３０、３４０、および３５０から受信し得る。データベーススキーマおよ
び／または、クラスタ内に格納されたデータテーブルなどの、計算ノード間に格納された
データに対する他のメタデータ情報が、リーダーノード３２０によって管理および格納さ
れ得る。
【００３１】
分散データウェアハウスクラスタ３００は、計算ノード３３０、３４０、および３５０
などの、計算ノードも含み得る。これらの１つ以上の計算ノードは、例えば、図１１のコ
ンピュータシステム１０００に関して以下で説明するものなどの、サーバーまたは他のコ
ンピューティング装置上に実装され得、各々は、例えば、サーバーのマルチコアプロセッ
サの各コアに対して定義された、個々のクエリー処理「スライス」を含み得る。計算ノー
ドは、リーダーノード３２０から計算ノード３３０、３４０、および３５０に送信された
命令に基づき、クエリーなどの、データベース操作の処理を実行し得る。命令は、例えば
、それが送信される、特定のデータ計算ノードによって実行可能な実行プランセグメント
およびステップからのコンパイル済みコードであり得る。データ計算ノードは、クエリー
からの中間結果を最終集計のためにリーダーノード３２０に返送し得る。各データ計算ノ
ードは、計算ノード３３０、３４０、または３５０のうちの１つ以上に送信されるクエリ
ー（または他のデータベース操作）に対する作業負荷の一部を処理するために、図４Ｂに
示すような、あるメモリおよびディスクスペースにアクセスするように構成され得る。従
って、計算ノード３３０は、例えば、ディスク４３１、４３２、ディスク４３８までアク
セスし得る。
【００３２】
図３に示すディスク３３１〜３５８などのディスクは、データ計算ノードがアクセス可
能なデータの格納に適した任意のタイプの記憶装置および／または記憶システムの１つ以
上として実装され得：独立ディスクの冗長アレイ（ＲＡＩＤ）装置、単純ディスク束（Ｊ
ＢＯＤ）などのディスクドライブまたはディスクドライブのアレイ、（ＲＡＩＤに従って
構成されていないディスクを指すために使用される）、光学式記憶装置、テープドライブ
、ＲＡＭディスク、ストレージエリアネットワーク（ＳＡＮ）、ネットワークアクセスス
トレージ（ＮＡＳ）、またはそれらの組合せを含むが、それらに制限されない。様々な実
施形態では、ディスクは、様々な列指向データベース方式を通してカラムナデータベース
テーブルを格納するようにフォーマットされ得る。
【００３３】
いくつかの実施形態では、分散データウェアハウスクラスタ内の計算ノードの各々は、
所与のクエリーを実行するために、例えば、コマンドの受信、データの返送、およびコン
パイル済みコードの（例えば、各コアまたはノード上のスライスに対する）個々のクエリ
ープロセスへのルーティングのための、リーダーノードとの通信を管理する、ノードサー
バーの（または他のコンピューティング装置の）オペレーティングシステム上で実行して
いるプロセスのセットを実装し得る。いくつかの実施形態では、計算ノードの各々は、ノ
ード上に格納されたブロックに対するメタデータを含む。少なくともいくつかの実施形態
では、このブロックメタデータは、スーパーブロックデータ構造に統合され得、スーパー
ブロックデータ構造は、そのエントリがそのノード上に格納されたデータブロックの各々
（すなわち、データブロックにつき１つのエントリ）に関する情報（例えば、メタデータ
）を格納する、データ構造（例えば、データのアレイ）である。いくつかの実施形態では
、スーパーブロックデータ構造の各エントリは、それぞれのブロックに対する一意のＩＤ
を含み、その一意のＩＤは、データブロックに関連した様々な操作を実行するために使用
され得る。例えば、データブロック内に格納されたデータに適用された列固有の圧縮技術
の表示、データブロック内に格納されたデータに適用されたデフォルトの圧縮技術の表示
、またはデータブロックに格納されていないデータ値を示す確率的データ構造が全て、デ
ータブロックに対するそれぞれのエントリ内に格納され得る。いくつかの実施形態では、
一意のＩＤは、データブロックが分散データウェアハウスシステム内で最初に書き込まれ
るときに、リーダーノードによって、またはコンピューティングノードによって生成され
（かつ、スーパーブロック内の対応するエントリが作成され）得る。
【００３４】
図４Ａは、いくつかの実施形態に従った、リーダーノード例を示す。前述のように、リ
ーダーノード４００は、カラムナデータベーステーブルを管理し、追加のデータを格納す
るための様々なメッセージおよびクエリーを受信する、分散データウェアハウスシステム
内の様々なクライアントとやりとりし得る。関連したデータベース操作を実行するための
クエリープラン４１０の開発に加えて、リーダーノードは、いくつかの実施形態では、ヒ
ストグラム生成器４２０も含み得る。ヒストグラム生成器４２０を実装するために、様々
な異なるハードウェアおよびソフトウェア装置が、単独で、または組み合わせて、使用さ
れ得る。ヒストグラム生成器４２０は、カラムナデータベーステーブルの列内の複数のバ
ケット間でのデータの分布を表す、高さのバランスを調整したヒストグラムに対するバケ
ット範囲サイズを判断するように構成され得る。ヒストグラム生成器４２０は、高さのバ
ランスを調整したヒストグラムなどの、クエリー処理のために使用される異なるヒストグ
ラムを生成し得る。いくつかの実施形態では、カラムナデータベーステーブルの列に対す
るデータが、図４Ｂに示す計算ノード４５０などの、多数の異なる計算ノード上に物理的
に格納され得る。ヒストグラム生成器４２０は、それ故、列に対する異なる計算ノードか
らのデータを入力として取得し、列内のデータのヒストグラムに対するバケットを生成し
て、データがバケット間で均等に分布されるように、バケットの各々に対してバケット範
囲サイズを設定し得る。ヒストグラム生成器４２０は、列内のデータに対するヒストグラ
ムのバケットに基づき、列に対するデータを格納している１つ以上のデータブロックの各
データブロックに対する確率的データ構造も生成し得る。確率的データ構造は、前述のよ
うに、所与の値が、データブロック内に格納されたデータ値などの、値のセット内にある
可能性が高いかを示す。従って、列内のデータに対する、高さのバランスを調整したヒス
トグラムなどの、ヒストグラムに基づく場合、確率的データ構造は、ヒストグラムの複数
のバケットのどのバケットに対して、データブロック内に格納されたバケット範囲サイズ
内のデータ値があるかを示し得る。
【００３５】
ヒストグラム生成器４２０は、列内のデータブロックに対する新しい確率的データ構造
の生成を含め、所与の列に対するヒストグラムがいつ再生成されるべきかも判断し得る。
いくつかの実施形態では、列に対する高さのバランスを調整したヒストグラムが最後に生
成されてからある時間が経過した時、またはある量の新規データが列内に格納された時な
ど、高さのバランスを調整したヒストグラムに対してリバランス事象が検出され得る。ヒ
ストグラム生成器４２０は、少なくともいくつかの実施形態では、列の高さのバランスを
調整したヒストグラムに対するバケットサイズ範囲を修正するように構成され得、修正さ
れたバケット範囲サイズに従って確率的データ構造を更新し得る。あるいは、いくつかの
実施形態では、ヒストグラム生成器４２０は、所与の列内に格納されたデータ値に対する
新しい高さのバランスを調整したヒストグラムに対して新しいバケット範囲サイズを判断
するように構成され得る。
【００３６】
図４Ｂは、いくつかの実施形態に従った、計算ノード例を示す。リーダーノード３２０
などの、リーダーノードに送信されて、リーダーノードから計算ノードに送信された、様
々なクエリーおよびメッセージなどの、アクセス要求４５２が、計算ノード４５０で受信
され得る。クエリー実行モジュール４６０が、アクセス要求を処理して、読取り、書込み
、および他のアクセス操作をディスク４５０〜４５８に向け得る。様々な異なるハードウ
ェアおよびソフトウェア装置が、クエリー実行モジュール４６０を実装するために単独で
、または組み合わせて使用され得る。クエリーを処理する際に、クエリー実行モジュール
４６０は、列に対するデータを格納している各データブロックに対する確率的データ構造
を検査して、クエリーに対応するために読み取る必要のないデータブロックを判断し、次
いで、読み取る必要のないそれらのデータブロックを除いて、列に対するデータを格納し
ているデータブロックを読み取り得る。
【００３７】
いくつかの実施形態では、計算ノード４５０は、計算ノードにローカルに格納されるか
、またはリモートに格納されるが、計算ノードがアクセス可能な、前述したスーパーブロ
ックデータ構造などの、スーパーブロックデータ構造４７０も含み得、それは、データブ
ロックに対する確率的データ構造を含むブロックメタデータを格納する計算ノード４５０
上に格納されたデータブロックに対するそれぞれのエントリ４７２を含み得る。しかし、
いくつかの実施形態では、データブロックに対するメタデータは、データブロック自身内
、または他の個々のデータ構造内など、複数の異なる位置に格納され得ることに留意され
たい。それ故、スーパーブロックデータ構造４７０は、データブロックに対するメタデー
タ情報を保存するために適用され得る、様々な他の構造、位置、方法、または技術に関し
て制限することを意図しない。
【００３８】
前述のように、図２〜図４は、カラムナデータベーステーブルの列に対するヒストグラ
ムを使用してクエリーを処理する実施形態例を示し、カラムナデータベーステーブルを格
納および管理するために使用され得る他のアーキテクチャ、システム、構成要素、または
配置に関して制限することを意図しない。例えば、図３に関して前述した、分散データウ
ェアハウスクラスタ３００は、リーダーノードを含まない可能性があるか、またはデータ
の格納および管理のために異なる機能を実行する１つ以上の他の異なるノードを含み得る
。
【００３９】
高さのバランスを調整したヒストグラムを使用したクエリー処理のワークフロー
上で説明してきたように、データベース管理システムは、もっと効率的なデータ管理機
能を提供するためにカラムナデータベーステーブルを利用するように構成され得る。これ
らの機能をさらに効率的に実行するために、列内のデータのヒストグラムに基づき、カラ
ムナデータベーステーブル内の列に対するデータを格納しているデータブロックに対して
、確率的データ構造が生成され得る。少なくともいくつかの実施形態では、このヒストグ
ラムは、高さのバランスを調整したヒストグラムである。図５は、いくつかの実施形態に
従い、カラムナデータベーステーブル内の列に対するデータの分布を表すヒストグラムに
対してバケット範囲サイズを判断するための方法を示す高レベル流れ図である。様々な異
なるシステムおよび装置が、以下で説明する様々な方法および技法を実装し得る。図４に
関して前述したヒストグラム生成器４２０などの、ヒストグラム生成器が、様々な方法を
実装するために、クエリー実行モジュール４６０などの、クエリー実行モジュールととも
に協力し得る。あるいは、例えば、共に動作する、図３に示す複数の計算ノードなどの、
異なるシステムおよび装置の組合せも、以下の方法および技法を実行し得る。それ故、前
述の例およびまたは、図示した方法を実行するとして参照された任意の他のシステムもし
くは装置は、システムおよび装置の他の異なる個体または構成に関して制限することを意
図しない。
【００４０】
様々な実施形態では、５００に示すように、カラムナデータベーステーブルの列に対す
るヒストグラムのバケットに対するバケット範囲サイズが判断され得る。前述のように、
ヒストグラムは、しばしば「バケット」と呼ばれる、値の範囲にわたるデータの分布を表
す。通常、これらのバケットは均等なサイズにされ得る。例えば、ヒストグラムが、アプ
リケーションデモの使用に費やした時間に基づき、ソフトウェアアプリケーションのダウ
ンロード数に対して生成された場合、バケットは、２時間までの１０分間隔の範囲サイズ
を有し得る。しかし、データ値の、高さのバランスを調整したヒストグラムなどの、ヒス
トグラムは、各バケット内のダウンロード数を均等に分布するために、いくつかのバケッ
トは５分間隔にすべきであり、いくつかは３０分間隔にすべきであると判断し得る。図６
は、いくつかの実施形態に従い、カラムナデータベーステーブル内の列に対するデータの
均等な分布を表すヒストグラムに対するバケット範囲サイズを判断するための１つのかか
る方法を示す。
【００４１】
６０２に示すように、ヒストグラムが表す列のデータが取得され得る。前述のように、
いくつかの実施形態では、単一のノード、記憶装置が、特定の列に対するデータブロック
の全てを１つの位置に物理的に格納し得る。しかし、少なくともいくつかの他の実施形態
では、データブロックが、カラムナデータベーステーブルの特定の列に対するデータを格
納しているデータブロックとして論理的にグループ化され得るが、データブロック自体は
、図３に関して前述した分散データウェアハウスクラスタ内の複数の計算ノードなどの、
いくつかの異なる装置上の複数の位置にわたって物理的に分散され得る。従って、いくつ
かの場合には、データは、さらなる計算が実行される前に、複数の装置またはシステムか
ら取得され得る。
【００４２】
６０４に示すように、データブロック内に格納されたデータ値の範囲を表す、いくつか
のバケットが次いで生成され得る。特定数のバケットが、データブロック内に格納され得
るデータ値の数に基づいて判断され得る。いくつかの実施形態では、生成されるバケット
数が、格納され得るデータ値の数よりもはるかに多い可能性がある。例えば、ヒストグラ
ムに対するバケット数は、データブロック内に格納され得るデータ値の数の特定の係数（
または倍数）に基づき判断され得る。従って、データブロックが１００個のデータ値を格
納し得る場合、列を表すヒストグラムに対して生成されるバケットの数は、１０倍の１，
０００バケットまで増加され得る。確率的データ構造がバケット数に基づいて生成される
選択性（精度）は、バケット数と、データブロック内に格納され得るデータ値の数との間
のより大きいか、またはより多い有意差に基づき得る。しかし、他の可能な実施形態は、
列内に格納されたデータのタイプ（例えば、名前、データ、数、製品番号など）または通
常データを対象とするクエリーのタイプ（例えば、範囲クエリー）などの、代替基準に従
って、生成されるバケット数を判断し得るので、これは、必ずしも制限するものではない
。
【００４３】
６０６に示すように、バケットの範囲サイズが、次いで、高さのバランスを調整したヒ
ストグラムに対するバケット間で列のデータのバランスを取るように調整され得る。本明
細書では、用語「均等に」または「バランス」は、「厳密に同じ値」に限定されず、また
それを意味すると意図しないことに留意されたい。ヒストグラムに対するバケット間での
近接バランス（ｎｅａｒ  ｂａｌａｎｃｅ）、近似バランス（ａｐｐｒｏｘｉｍａｔｅ  
ｂａｌａｎｃｅ）、または推定されたバランスさえ、同様の選択性に対して提供され得、
そのため、それらの用語は１つの特定の意味に限定されない。
【００４４】
ヒストグラムのバケットに対するバケット範囲サイズを判断すると、５１０に示すよう
に、カラムナデータベーステーブルの列に対するデータを格納している各データブロック
に対して、確率的データ構造が生成され得る。前述のように、確率的データ構造は、所与
の値が、データブロック内に格納されたデータなどの、データのセットのメンバーである
かどうかを示し得る。確率的データ構造は、列全体に対する高さのバランスを調整したヒ
ストグラム内のどのバケットに対して、データブロック内に格納されたデータ値があるか
を示し得る。少なくともいくつかの実施形態では、確率的データ構造は、ビットマップで
あり得る。図７は、いくつかの実施形態に従い、カラムナデータベーステーブルの列内の
データのヒストグラム内の各バケットを表すビットマップを生成するための方法の流れ図
を示す。
【００４５】
６１２に示すように、カラムナデータベーステーブル内の列に対するデータを格納して
いるデータブロックに対するビットマップが生成され得る。ビットマップ内のビット数は
、ヒストグラム内のバケット数に対応し得る。各ビットは、列内のデータの分布を表して
いるヒストグラム内のバケットを表し得る。例えば、図１に示すように、ヒストグラムと
共に示されている８つのバケットは、スーパーブロック１００内に格納されたビットマッ
プ内の８ビットに対応する。一旦、作成されると、データブロック内に格納された各デー
タ値は、高さのバランスを調整したヒストグラムに対するバケットの１つ内に配置され得
る。６１４に示すように、バケットに対する値の範囲内のデータ値を含むバケットに対す
るそれぞれのビットが設定される（例えば、「１」の値に設定される）。データ値の全て
がヒストグラムのバケット内に配置されて、バケット内にデータ値を含むバケットに対し
て対応するビットが設定されると、ビットマップがブロックメタデータ内に格納され得る
。６１６に示すように、いくつかの実施形態では、ビットマップは、図４Ｂに関して前述
したスーパーブロック４７０などの、スーパーブロックのそれぞれのエントリ内に格納さ
れ得る。
【００４６】
様々な実施形態では、５２０に示すように、選択データに対するカラムナデータベース
テーブルの列を対象としたクエリー、またはクエリーの指示が受信され得る。図２〜図４
Ｂに関して前述したように、クエリーまたは他のアクセス要求メッセージが、ＳＱＬなど
の、様々な異なる標準クエリープロトコルもしくは言語、または、ＡＰＩで説明したよう
な、カスタマイズされたフォーマットに従ってフォーマットされ得る。少なくともいくつ
かの実施形態では、クエリーは、図４Ｂに関して前述した計算ノード４５０などの、計算
ノードに、図４Ａに関して前述したリーダーノード４００などの、リーダーノードから、
向けられた１つ以上のクエリーであり得る。クエリーの受信に応答して、５３０に示すよ
うに、列内のデータを格納している各データブロックに対する確率的データ構造が検査さ
れ得る。確率的データ構造の検査は、選択データに対するクエリーに対応するために読み
取る必要がない特定のデータブロックを判断し得る。
【００４７】
図８は、いくつかの実施形態に従い、カラムナデータベーステーブルの列内のデータに
対するクエリーに応答して、どのデータブロックが読み取る必要がないかを判断する方法
の流れ図を示す。７００に示すように、選択されたデータに対するカラムナデータベース
テーブルの列を対象としたクエリーの指示が受信され得る。クエリーは、データ値の範囲
（例えば、ある日付の間のデータ、ある発注金額と関連したデータなど）などの、特定デ
ータに対する要求を含み得る。選択データのデータ値が、次いで、クエリーが対象とする
列に対するヒストグラムのバケット内に配置され得る。一旦識別されると、７１０に示す
ように、ビットマップなどの、確率的データ構造が、スーパーブロックなどの、ブロック
メタデータから取得されて、特定のデータがデータブロック内に格納されていないかを判
断するために検査され得る。７２０に示すように、選択データ内のデータ値のバケット位
置に対するビットマップの対応するビットが設定されていない場合、ビットマップは、そ
のデータブロックが読み取られる必要がないことを示す。例えば、図１を振り返って見る
と、スーパーブロック１００内に格納された第１のビットマップは、ヒストグラム１２０
に対するバケットに対応する、８ビット値「１００１０１１０」を有する。第１のバケッ
トがデータ値１〜１０を表し、第２のバケットが値１１〜３０を表す場合、選択されたデ
ータ値の２０に対して、第２のバケットに対応するビットが検査されるであろう。この場
合、ビットが０に設定されて、列１３２内の対応するデータブロック内に格納された１１
〜３０の範囲内にデータ値がないことを示す。このように、ビットマップは、選択データ
値が２０の場合に、第１のデータブロックが読み取る必要のないことを示すであろう。し
かし、選択データ値の５がある場合、第１のバケットに対して対応するビットが１に設定
されて、１〜１０の値がデータブロック内に格納されている可能性があることを示す。こ
のように、ビットマップは、７２０に示すように、データブロックがそのデータ値を格納
している可能性があることを示し得る。結果として、７３０に示すように、データブロッ
クが読み取られ得る。
【００４８】
図８に示すように、このプロセスは、７４０に示すように、スーパーブロック内のデー
タブロックに対するそれぞれのエントリなどの、ブロックメタデータの全てが、列に対す
るデータを格納しているデータブロックの全てに対して検査されるまで繰り返され得る。
例えば、両方の「Ｎｏ」分岐は、列内の次のデータブロックに対するビットマップがスー
パーブロックから取得され得ることを示す、要素７１２を指す。７５０に示すように、デ
ータブロックから読み取られたデータは、次いで、選択データに対するクエリーに対応す
るために提供され得る。データブロックが読み取られるのは、選択データがそのデータブ
ロック内にあるに違いないことを示すからではなく、データがそのデータブロック内に格
納されている可能性があることを示すことに留意されたい。データがデータブロックから
読み取られると、さらなるフィルタリング、処理、または他のクエリー操作が実行され得
る。データの少なくともいくつかは、リーダーノード、ストレージクライアント、または
他のシステムもしくは装置に返され得る。
【００４９】
データ値の追加または修正などの、データ操作が列内のデータに関して実行されるので
、列内のデータブロックに対する確率的データ構造は最新の状態でない可能性がある。例
えば、いくつかの実施形態では、列に対する追加のデータが受信されて、新しいデータブ
ロック内に格納され得る。新しいデータが格納されると、以前に作成された高さのバラン
スを調整したヒストグラム内のバケットに対応するビットマップ内のビットを新しいデー
タ値に対して設定することによるなど、確率的データ構造が、新しいデータブロックに対
して生成され得る。時間とともに、これはヒストグラムを偏らせて、ヒストグラムを、高
さのバランスがあまり調整されていないものにし得るか、または列データがバケット間で
あまり均等に分布していないものにし得る。高さのバランスを調整したヒストグラムを実
装するいくつかの実施形態に対して、この追加のデータは、高さのバランスを調整したヒ
ストグラムを使用する効率を低減し得る。改善措置として、少なくともいくつかの実施形
態では、カラムナデータベーステーブルの列内に格納されている現在のデータに対する新
しい高さのバランスを調整したヒストグラムが計算され得、バケット範囲サイズが判断さ
れて、新しい確率的データ構造が列に対するデータを格納している各データブロックに対
して生成される。しかし、この操作は、計算資源の観点から高くつくことが分かり得る。
それ故、少なくともいくつかの実施形態では、バケット範囲自体は、列内の新しいデータ
または修正されたデータを含めるために、列のデータの分布を再計算することなく、修正
され得る。
【００５０】
図９は、いくつかの実施形態に従い、リバランス事象の検出に応答して、データブロッ
クに対する確率的データ構造を修正する方法の流れ図を示す。８０２に示すように、リバ
ランス事象が検出され得る。例えば、図４Ａに関して前述したヒストグラム生成器４２０
などの、ヒストグラム生成器が、列に対する高さのバランスを調整したヒストグラムの最
後の計算または修正から、リバランス時間閾値（例えば、２４時間）を上回る、一定の時
間が経過したことを検出し得る。他の実施形態は、リバランス閾値を上回る、追加のデー
タブロック内に格納された追加データの量が、列に対して格納されている可能性があるこ
とを判断し得る。例えば、リバランス閾値は、列に対する２０の新規データブロックであ
り得、列に対して２０を上回るデータブロックの書き込み後、リバランス事象が検出され
得る。
【００５１】
少なくともいくつかの実施形態では、リバランス事象は、列に対する追加のデータの分
布に基づき判断され得る。この追加のデータは、列内のデータの現在の分布と比較した、
高さのバランスを調整したヒストグラムのバケット間での追加のデータの分布などの、追
加のデータの分布における変化を判断するために分析され得る。次いで、変化が、一定の
割合、または追加データの分布が、ヒストグラムに対する分布がもはや高さのバランスを
調整されていないような、現在のヒストグラムとは異なる分布に向かって偏らされ得るこ
とを示す他の値などの、分布閾値を上回るかどうかが判断され得る。
【００５２】
追加データに対する分布の分析は、様々な異なる方法で実行され得る。追加データのデ
ータ値の分析は、追加データが追加のデータブロック内に格納されるとき、または追加デ
ータが追加のデータブロック内に格納された後のいずれかで、追加データの分布を分析す
るために実行され得る。例えば、データに対するデータ値の分布は、格納プロセス中に、
各データブロックに対するデータ値を格納前に検査することにより追跡されるか、または
監視され得る。あるいは、一定数の追加のデータブロックが格納された後、データ値が取
得されて分析され得る。
【００５３】
追加データのデータ値の分析に加えて、少なくともいくつかの実施形態では、追加デー
タに対して生成された、ビットマップなどの、確率的データ構造が、代わりに検査され得
る。例えば、前述したように、ヒストグラムのどのバケットが追加のデータブロック内の
追加データのデータ値を含むかを示す、ビットマップが生成され得る。これらのビットマ
ップは、追加データの分布を判断するために分析され得る。例えば、バケット範囲内のデ
ータ値を示す、設定されたビットの数が、カウントされるか、または追跡され得る。この
追跡は、各追加のビットマップが、追加データを格納している追加のデータブロックに対
して生成されるときに、維持され得る（または代替として、ビットマップが生成されて、
追加データがデータブロック内に格納された後に取得され得る）。同じバケット設定また
は範囲設定に近いバケットを有するものなどの、追加データに対して設定されたバケット
数に基づき、追加データの分布が判断され得る。列内のデータの元の分布と比較した変化
が、次いで判断され得る。例えば、追加のデータブロックに対する特定のバケット範囲を
表す設定されたビット数が、ある閾値を上回る場合、（例えば、格納された３０の追加の
データブロックに対する２０の閾値などの、格納された追加のデータブロック数に対する
カウント値）、追加データに対するデータの分布が、列に対するデータの以前の分布と比
較した場合に、特定のバケット範囲に向かって偏っていることが判断され得る。リバラン
ス事象がトリガーされ得る。かかる分析も、ヒストグラムの他のバケットの１つ以上に対
して実行され得る。個々のバケットに対する結果が、例えば、追加データに対する分布を
判断するために結合され得、それは、次いで、追加データの前のデータの分布と比較され
得る。この変化が何らかの分布閾値を上回る場合、リバランス事象がトリガーされ得る。
【００５４】
列のデータを表す高さのバランスを調整したヒストグラムに対するリバランス事象の検
出に応答して、８０４に示すように、高さのバランスを調整したヒストグラムに対するバ
ケット範囲サイズが修正され得る。バケット範囲サイズの修正は、追加データの分布を推
定するために追加のデータブロックに対する確率的データ構造を検査することによるなど
、多数の異なるバケット範囲技術に従って実行され得る。例えば、列に追加された新しい
データがより高い範囲値に偏る場合、分布は、より高い範囲値を表すバケットのサイズが
減少すると判断され得る。あるいは、バケット範囲サイズが、ビットマップ確率的データ
構造内の設定ビットに隣接したビットを設定することによるなど、重なり合うように修正
され得る。列に対するデータの分布を表す高さのバランスを調整したヒストグラムに対す
るバケット範囲サイズが修正されると、８０６に示すように、データブロックに対する確
率的データ構造が更新されて、高さのバランスを調整したヒストグラムに対する修正され
たバケット範囲サイズを表し得る。以下でさらに説明する、図１０は、確率的データ構造
を更新するための技術例を説明する。かかる更新は、例えば、ビットマップとして表され
ているような確率的データ構造内の異なるビットを設定するか、または修正されたバケッ
ト範囲サイズに従ってデータのバケット間での分布を表す異なる確率的データ構造に変更
するほど、単純であり得る。例えば、高さのバランスを調整したヒストグラムは、ビット
マップではなく、代わりに数式として表され得る。あるいは、更新は、列のデータに対す
るクエリーに対応するために使用される現在のブロックメタデータ構造を置換するために
、更新された確率的データ構造で満たされた、スーパーブロックなどの、新しいブロック
メタデータ構造を生成することを含み得る。現在のスーパーブロックデータ構造は、新し
いスーパーブロックデータ構造が完成するまで利用される。
【００５５】
図１０は、いくつかの実施形態に従い、データブロックに対する確率的データ構造を更
新する方法の流れ図を示す。９００に示すように、カラムナデータベーステーブルの列に
対する追加のデータが受信され得る。９１０に示すように、データが１つ以上のデータブ
ロックに格納され得る。９２０に示すように、作成されたデータブロック数などの、格納
されたデータ量が、図９に関して前述したリバランス事象をトリガーするために使用され
る様々な閾値の１つなどの、リバランス閾値を上回り得る。そうでない場合は、９１２に
示すように、バケット間でのデータの分布を表す高さのバランスを調整したヒストグラム
のバケット内に配置されたデータ値に対してビットを設定する１つ以上のデータブロック
に対するビットマップを生成する。リバランス閾値を上回る場合、９３０に示すように、
列内のデータのバケット間での分布を表す高さのバランスを調整したヒストグラムに対す
る各バケットに対するバケット範囲サイズを修正する。次いで、９４０に示すように、現
在、修正されたバケット範囲サイト内のデータ値を格納するように示されている、列内の
データブロックに対するバケットを表すビットマップの未設定のビットが識別され、９５
０に示すように、設定される。
【００５６】
様々な実施形態では、修正されたバケット範囲サイズに起因して更新された確率的デー
タ構造が、データ構造に対応するデータブロックの後続の読み取り後に、さらに更新され
得る。例えば、確率的データ構造が、ある値の範囲内のデータ値がデータブロック内に格
納されていることを示していて、データブロックの読取り後に、かかる値がその範囲内に
ないと判断される場合、確率的データ構造が、その値がその範囲内に格納されていないこ
とを示すように更新され得る。再度、図１を参照して、例えば、バケット８が、以前より
もさらに大きい修正されたバケット範囲サイズに変更されていて、第１のデータブロック
に対するスーパーブロック１００ビットマップが、ビット８が現在、（バケット８によっ
て表される修正された値の範囲内に格納されている値を示す）０ではなく、１に設定され
ていることを示すように更新され、次いで、データブロックが読み取られて、ビット８内
の１によって示されるように、データ値が修正された範囲内に実際には格納されていない
場合、ビットマップがさらに更新されて、ビットを０に戻し得る。
【００５７】
少なくともいくつかの実施形態では、データブロックに対する確率的データ構造の選択
性レベルが判断され得る。例えば、データビットマップのビットのほとんどが１に設定さ
れている場合、ほとんどの検査がデータブロックを読み取るべきことを示すので、ビット
マップは高度に選択的ではない。選択性レベルが選択性閾値を下回る場合、いくつかの実
施形態では、ブルームフィルタ、指数フィルタ（ｑｕｏｔｉｅｎｔ  ｆｉｌｔｅｒ）、ま
たはスキップリストが、高さのバランスを調整したヒストグラムの代わりに実装されて、
クエリー処理を容易にするために、ブロックメタデータ内に格納され得る。
【００５８】
システム例
本明細書で説明するようなカラムナデータベースの列に対するヒストグラムを使用する
効率的なクエリー処理の実施形態が、１つ以上のコンピュータシステム上で実行され得、
それらは様々な他の装置とやりとりし得る。１つのかかるコンピュータシステムを図１１
に示す。異なる実施形態では、コンピュータシステム１０００は、パーソナルコンピュー
タシステム、デスクトップコンピュータ、ラップトップ、ノートブック、もしくはネット
ブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ
、ワークステーション、ネットワークコンピュータ、カメラ、セットトップボックス、モ
バイル機器、消費者向け装置、ビデオゲーム機、ハンドヘルドビデオゲーム機、アプリケ
ーションサーバー、記憶装置、周辺機器（スイッチ、モデム、ルーターなど）、または任
意のタイプのコンピューティング装置もしくは電子装置一般を含むが、それらに限定され
ず、様々なタイプの装置のいずれかであり得る。
【００５９】
図示した実施形態では、コンピュータシステム１０００は、入力／出力（Ｉ／Ｏ）イン
タフェース１０３０を経由してシステムメモリ１０２０に結合された１つ以上のプロセッ
サ１０１０を含む。コンピュータシステム１０００は、Ｉ／Ｏインタフェース１０３０に
結合されたネットワークインタフェース１０４０、ならびにカーソル制御装置１０６０、
キーボード１０７０、およびディスプレイ（複数可）１０８０などの、１つ以上の入力／
出力装置１０５０をさらに含む。ディスプレイ（複数可）１０８０は、標準的なコンピュ
ータモニター（複数可）および／または他のディスプレイシステム、技法もしくは装置を
含み得る。少なくともいくつかの実施態様では、入力／出力装置１０５０は、それを用い
てユーザーがスタイラスタイプ装置での入力および／もしくは１つ以上の数字を入力でき
るパッドまたはタブレットなどの、タッチまたはマルチタッチ対応装置も含み得る。いく
つかの実施形態では、実施形態はコンピュータシステム１０００の単一のインスタンスを
使用して実装され得、他方、他の実施形態では、複数のかかるシステム、またはコンピュ
ータシステム１０００を構成する複数のノードが、実施形態の異なる部分もしくはインス
タンスをホストするように構成され得ると考えられる。例えば、一実施形態では、いくつ
かの要素が、他の要素を実装しているノードとは異なる、コンピュータシステム１０００
の１つ以上のノードを介して実装され得る。
【００６０】
様々な実施形態では、コンピュータシステム１０００は、１つのプロセッサ１０１０を
含むユニプロセッサシステム、またはいくつか（例えば、２、４、８、または別の適切な
数）のプロセッサ１０１０を含むマルチプロセッサシステムであり得る。プロセッサ１０
１０は、命令を実行可能な任意の適切なプロセッサであり得る。例えば、様々な実施形態
では、プロセッサ１０１０は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、またはＭＩＰＳ  
ＩＳＡ、もしくは任意の他の適切なＩＳＡなどの、様々な命令セットアーキテクチャ（Ｉ
ＳＡ）のいずれかを実装する、汎用または組込みプロセッサであり得る。マルチプロセッ
サシステムでは、プロセッサ１０１０の各々は一般に、必ずしもではないが、同じＩＳＡ
を実装し得る。
【００６１】
いくつかの実施形態では、少なくとも１つのプロセッサ１０１０が、グラフィック処理
装置であり得る。グラフィック処理装置すなわちＧＰＵは、パーソナルコンピュータ、ワ
ークステーション、ゲーム機、または他のコンピューティング装置もしくは電子装置に対
する専用のグラフィックスレンダリング装置と考えられ得る。最新のＧＰＵは、コンピュ
ータグラフィックスの操作および表示の効率が非常に良い可能性があり、その高度な並列
構造は、ある範囲の複雑なグラフィカルアルゴリズムに対して、典型的なＣＰＵよりも、
それらを効率的にし得る。例えば、グラフィックスプロセッサは、いくつかのグラフィッ
クス基本処理を、ホスト中央処理装置（ＣＰＵ）で画面に直接描くよりもはるかに高速に
それらを実行させる方法で、実装し得る。様々な実施形態では、グラフィックスレンダリ
ングは、かかるＧＰＵの、１つ上での実行、または２つ以上での並列実行に対して構成さ
れたプログラム命令によって、少なくとも一部、実装され得る。ＧＰＵは、プログラマが
ＧＰＵの機能を呼び出すのを許可する１つ以上のアプリケーションプログラマインタフェ
ース（ＡＰＩ）を実装し得る。適切なＧＰＵは、ＮＶＩＤＩＡ  Ｃｏｒｐｏｒａｔｉｏｎ
、ＡＴＩ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（ＡＭＤ）、およびその他などのベンダーから市販
されている可能性がある。
【００６２】
システムメモリ１０２０は、プロセッサ１０１０によってアクセス可能なプログラム命
令および／またはデータを格納するように構成され得る。様々な実施形態では、システム
メモリ１０２０は、スタティックランダムアクセスメモリ（ＳＲＡＭ）、シンクロナスダ
イナミックＲＡＭ（ＳＤＲＡＭ）、不揮発性／フラッシュタイプメモリ、または任意の他
のタイプのメモリなどの、任意の適切なメモリ技術を使用して実装され得る。図示した実
施形態では、本明細書で説明したような分散システム内のコンピューティングクラスタを
スケーリングするための前述したものなどの、所望の機能を実装するプログラム命令およ
びデータが、それぞれ、プログラム命令１０２５およびデータ記憶１０３５として、シス
テムメモリ１０２０内に格納されて示されている。他の実施形態では、プログラム命令お
よび／またはデータは、異なるタイプのコンピュータアクセス可能媒体上、またはシステ
ムメモリ１０２０もしくはコンピュータシステム１０００から離れた類似の媒体上で、受
信、送信、または格納され得る。一般的に言えば、コンピュータアクセス可能媒体は、磁
気または光媒体などの記憶媒体またはメモリ媒体を含み得、例えば、Ｉ／Ｏインタフェー
ス１０３０を介してコンピュータシステム１０００に結合されたディスクまたはＣＤ／Ｄ
ＶＤ−ＲＯＭである。コンピュータアクセス可能媒体を用いて格納されたプログラム命令
およびデータは、伝送媒体または、電気信号、電磁信号、もしくはデジタル信号などの信
号によって伝送され得、それらは、ネットワークインタフェース１０４０を用いて実装さ
れ得るように、ネットワークおよび／または無線リンクなどの通信媒体を経由して伝達さ
れ得る。
【００６３】
一実施形態では、Ｉ／Ｏインタフェース１０３０は、プロセッサ１０１０、システムメ
モリ１０２０、およびネットワークインタフェース１０４０または、入力／出力装置１０
５０などの、他の周辺インタフェースを含む、装置内の任意の周辺機器の間のＩ／Ｏトラ
フィックを調整するように構成され得る。いくつかの実施形態では、Ｉ／Ｏインタフェー
ス１０３０は、１つの構成要素（例えば、システムメモリ１０２０）からのデータ信号を
別の構成要素（例えば、プロセッサ１０１０）による使用に適したフォーマットに変換す
るための、任意の必要なプロトコル、タイミングまたは他のデータ媒体変換を実行し得る
。いくつかの実施形態では、Ｉ／Ｏインタフェース１０３０は、例えば、Ｐｅｒｉｐｈｅ
ｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス規格の変形また
はユニバーサルシリアルバス（ＵＳＢ）規格などの、様々なタイプの周辺機器用バスを通
じて取り付けられた装置に対するサポートを含み得る。いくつかの実施形態では、Ｉ／Ｏ
インタフェース１０３０の機能は、例えば、ノースブリッジおよびサウスブリッジなどの
、２つ以上の別個の構成要素に分割され得る。さらに、いくつかの実施形態では、システ
ムメモリ１０２０へのインタフェースなどの、Ｉ／Ｏインタフェース１０３０の機能の一
部または全部が、プロセッサ１０１０に直接組み込まれ得る。
【００６４】
ネットワークインタフェース１０４０は、データが、コンピュータシステム１０００と
、他のコンピュータシステムなどの、ネットワークに取り付けられた他の装置との間で、
またはコンピュータシステム１０００のノード間で、交換できるように構成され得る。様
々な実施形態では、ネットワークインタフェース１０４０は、例えば、任意の適したタイ
プのイーサネット（登録商標）ネットワークなどの、有線もしくは無線の一般データネッ
トワークを経由した；アナログ音声ネットワークもしくはデジタルファイバー通信ネット
ワークなどの通信／電話網を経由した；ファイバーチャネルＳＡＮなどのストレージエリ
アネットワークを経由した、または任意の他の適切なタイプのネットワークおよび／もし
くはプロトコルを経由した、通信をサポートし得る。
【００６５】
入力／出力装置１０５０は、いくつかの実施形態では、１つ以上のディスプレイ端末、
キーボード、キーパッド、タッチパッド、スキャン装置、音声もしくは光学的認識装置、
または１つ以上のコンピュータシステム１０００によるデータの入力もしくは取得に適し
た任意の他の装置を含み得る。複数の入力／出力装置１０５０がコンピュータシステム１
０００内に存在し得るか、またはコンピュータシステム１０００の様々なノード上に分散
され得る。いくつかの実施形態では、類似の入力／出力装置が、コンピュータシステム１
０００から分離され得、ネットワークインタフェース１０４０を介してなど、有線もしく
は無線接続を通して、コンピュータシステム１０００の１つ以上のノードとやりとりし得
る。
【００６６】
図１１に示すように、メモリ１０２０は、本明細書で説明するようなスケジューリング
された配信指示に対して時間ベースの品目推奨を提供するように構成された、プログラム
命令１０２５、およびプログラム命令１０２５によってアクセス可能な様々なデータを含
む、データ記憶１０３５を含み得る。一実施形態では、プログラム命令１０２５は、本明
細書で説明し、図に示すような、実施形態のソフトウェア要素を含み得る。データ記憶１
０３５は、実施形態で使用され得るデータを含み得る。他の実施形態では、その他または
異なるソフトウェア要素およびデータが含まれ得る。
【００６７】
当業者は、コンピュータシステム１０００は例示にすぎず、本明細書で説明するステレ
オ描画技法の範囲に制限することを意図しないことを理解するであろう。具体的には、コ
ンピュータシステムおよび装置は、コンピュータ、パーソナルコンピュータシステム、デ
スクトップコンピュータ、ラップトップ、ノートブック、もしくはネットブックコンピュ
ータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステー
ション、ネットワークコンピュータ、カメラ、セットトップボックス、モバイル機器、ネ
ットワーク装置、インターネット家電、ＰＤＡ、無線電話、ポケットベル、消費者向け装
置、ビデオゲーム機、ハンドヘルドビデオゲーム機、アプリケーションサーバー、記憶装
置、周辺機器（スイッチ、モデム、ルーターなど）、または任意のタイプのコンピューテ
ィング装置もしくは電子装置一般を含む、指示された機能を実行できる、ハードウェアま
たはソフトウェアの任意の組合せを含み得る。コンピュータシステム１０００は、図示し
ていない他の装置にも接続され得るか、または代わりに、スタンドアロンシステムとして
動作し得る。加えて、図示する構成要素によって提供される機能は、いくつかの実施形態
では、もっと少ない構成要素に結合され得るか、または追加の構成要素内に分散され得る
。同様に、いくつかの実施形態では、図示する構成要素のいくつかの機能が提供されない
可能性があり、かつ／または他の追加の機能が利用可能であり得る。
【００６８】
様々な項目が、使用されている間に、メモリ内または記憶装置上に格納されているとし
て示されているが、当業者は、これらの項目またはそれらの一部は、メモリ管理およびデ
ータの整合性を目的として、メモリと他の記憶装置との間で転送され得ることも理解する
であろう。あるいは、他の実施形態では、ソフトウェア構成要素の一部または全部が、他
の装置上のメモリ内で実行して、図示するコンピュータシステムとコンピュータ間通信を
経由して通信し得る。システム構成要素またはデータ構造の一部または全部が、コンピュ
ータアクセス可能媒体または適切なドライブによって読み取られる可搬型品目上にも（例
えば、命令または構造化データとして）格納され得、その様々な例が上で説明されている
。いくつかの実施形態では、コンピュータシステム１０００から離れたコンピュータアク
セス可能媒体上に格納された命令は、ネットワークおよび／もしくは無線リンクなどの通
信媒体を経由して伝達される、伝送媒体または、電気信号、電磁信号、もしくはデジタル
信号などの信号によってコンピュータシステム１０００に伝送され得る。様々な実施形態
は、前述の説明に従って実装された、受信、送信、もしくは格納命令、および／またはデ
ータをコンピュータアクセス可能媒体上にさらに含み得る。その結果、本発明は、他のコ
ンピュータシステム構成で実施され得る。
【００６９】
本明細書で説明する分散システム実施形態のいずれも、またはそれらの構成要素のいず
れも、１つ以上のウェブサービスとして実装され得ることに留意されたい。例えば、デー
タウェアハウスシステム内のリーダーノードは、データ記憶サービスおよび／またはデー
タベースサービスをウェブサービスとしてクライアントに提示し得る。いくつかの実施形
態では、ウェブサービスは、ネットワークを介して相互運用可能なマシン同士のインタラ
クションをサポートするように設計されたソフトウェアおよび／またはハードウェアシス
テムによって実装され得る。ウェブサービスは、ウェブサービス記述言語（ＷＳＤＬ）な
どの、マシン処理可能なフォーマットで記述されたインタフェースを有し得る。他のシス
テムは、ウェブサービスのインタフェースの記述によって規定される方法で、ウェブサー
ビスとやりとりし得る。例えば、ウェブサービスは、他のシステムが呼び出し得る様々な
動作を定義し得、他のシステムが、様々な動作を要求する際に従うと予期され得る、特定
のアプリケーションプログラミングインタフェース（ＡＰＩ）を定義し得る。
【００７０】
様々な実施形態では、ウェブサービスは、ウェブサービス要求と関連したパラメータお
よび／またはデータを含むメッセージの使用を通じて、要求され得るか、または呼び出さ
れ得る。かかるメッセージは、拡張マークアップ言語（ＸＭＬ）などの特定のマークアッ
プ言語に従ってフォーマットされ得、かつ／またはシンプルオブジェクトアクセスプロト
コル（ＳＯＡＰ）などのプロトコルを使用してカプセル化され得る。ウェブサービス要求
を実行するため、ウェブサービスクライアントは、要求を含むメッセージを組み立てて、
そのメッセージを、ウェブサービスに対応するアドレス可能なエンドポイント（例えば、
ユニフォームリソースロケーター（ＵＲＬ））に、ハイパーテキスト転送プロトコル（Ｈ
ＴＴＰ）などのインターネットベースのアプリケーション層転送プロトコルを使用して、
伝達し得る。
【００７１】
いくつかの実施形態では、ウェブサービスは、メッセージベースの技法ではなく、表現
状態転送（「ＲＥＳＴｆｕｌ」）技法を使用して、実装され得る。例えば、ＲＥＳＴｆｕ
ｌ技法に従って実装されたウェブサービスは、ＳＯＡＰメッセージ内にカプセル化される
のではなく、ＰＵＴ、ＧＥＴ、またはＤＥＬＥＴＥなどのＨＴＴＰメソッド内に含まれる
パラメータを通じて呼び出され得る。
【００７２】
前述の実施形態は、以下の付記項を考慮してより良く理解され得る：
１．分散データウェアハウスシステムであって、
複数のノードを含み、
複数のノードの少なくともいくつかのノードの各々が：
カラムナデータベーステーブルのための記憶装置であって、前記記憶装置が複数の
データブロックを含む、記憶装置と、
クエリー実行モジュールと
を含み、
複数のノードの少なくとも１つのノードが、
カラムナデータベーステーブルの列内の複数のバケット間でのデータの分布を表す
高さのバランスを調整したヒストグラムに対して複数のバケット範囲サイズを判断するこ
とであって、複数のバケットの各バケットが、列内のデータの１つ以上のデータ値が値の
範囲内に存在することを表す、複数のバケット範囲サイズを判断することと、
列に対するデータを格納している１つ以上のデータブロックの各データブロックに対
する確率的データ構造を生成することであって、確率的データ構造が、複数のバケットの
どのバケットに対して、データブロック内に格納されているバケット範囲サイズ内のデー
タ値があるかを示す、確率的データ構造を生成することと
を行うように構成された、高さのバランスを調整したヒストグラム生成器を含み、
クエリー実行モジュールが：
選択データに対するカラムナデータベーステーブルの列を対象としたクエリーの指
示を受信することと、
クエリーの指示の受信に応答して：
列に対するデータを格納している１つ以上のデータブロックの各々に対する確率
的データ構造を検査して、選択データに対するクエリーに対応するために読み取る必要の
ない、１つ以上のデータブロックのうちの特定のものを判断することと、
読み取る必要のない１つ以上のデータブロックのうちの特定のものを除いて、列
に対するデータを格納している１つ以上のデータブロックを読み取ることと
を行うように構成されている、
分散データウェアハウスシステム。
２．カラムナデータベーステーブルの列を表す高さのバランスを調整したヒストグラム
に対する複数のバケットに対して複数のバケット範囲サイズを判断するために、高さのバ
ランスを調整したヒストグラム生成器が：
列のデータを取得することと、
複数のバケットを生成することと、
列のデータがバケット間で均等に分布されるように、高さのバランスを調整したヒス
トグラムに対する各バケットに対して、複数のバケット範囲サイズのうちのバケット範囲
サイズを設定することと
を行うように構成されている、付記項１に記載のシステム。
３．確率的データ構造が、複数のビットを含むビットマップであり、ビットマップの各
ビットが、高さのバランスを調整したヒストグラムに対する複数のバケットの各バケット
を表し、かつデータブロック内に格納されているバケット範囲サイズ内に含まれる全ての
データ値に対して、バケットに対応するビットマップのビットが設定される、付記項１に
記載のシステム。
４．高さのバランスを調整したヒストグラム生成器が、１つ以上のデータブロックの各
々の確率的データ構造を、１つ以上のデータブロックに関する情報を格納するブロックメ
タデータ構造内のそれぞれのエントリ内に格納するようにさらに構成されている、付記項
１に記載のシステム。
５．少なくとも１つのノードが、分散データウェアハウスクラスタのリーダーノードで
あり、かつ、少なくともいくつかのノードのうちの少なくとも１つが、分散データウェア
ハウスクラスタの計算ノードである、付記項１に記載のシステム。
６．１つ以上のコンピューティング装置によって、
カラムナデータベーステーブルの列のヒストグラムに対する複数のバケットの各々に
対してバケット範囲サイズを判断することであって、ヒストグラムが列内のデータの複数
のバケット間での分布を表し、複数のバケットの各バケットが、列内のデータの１つ以上
のデータ値が判断されたバケット範囲サイズに従って値の範囲内に存在することを表す、
バケット範囲サイズを判断することと、
カラムナデータベーステーブルの列に対するデータを格納している１つ以上のデータ
ブロックの各々に対して確率的データ構造を生成することであって、確率的データ構造が
、複数のバケットのどの特定のバケットに対して、データブロック内に格納されたデータ
値があるかを示す、確率的データ構造を生成することと、
選択データに対する列を対象としたクエリーの指示を受信することと、
クエリーの指示の受信に応答して、列に対するデータを格納している１つ以上のデー
タブロックの各々に対する確率的データ構造を検査して、選択データに対するクエリーに
対応するために読み取る必要のない、１つ以上のデータブロックのうちの特定のものを判
断することと
を実行することを含む、方法。
７．カラムナデータベーステーブルの列のヒストグラムに対する複数のバケットの各々
に対してバケット範囲サイズを前記判断することが：
列のデータを取得することと、
複数のバケットを生成することと、
列のデータがバケット間で均等に分布されるように、各バケットに対して複数のバケ
ット範囲サイズのうちのバケット範囲サイズを設定することと
を含む、付記項６に記載の方法。
８．カラムナデータベーステーブルの列に対するデータを格納している１つ以上のデー
タブロックの各々に対して確率的データ構造を前記生成することが：
複数のビットを含むデータブロックに対するビットマップを生成することであって、
各ビットがヒストグラムに対する複数のバケットの異なるバケットを表す、ビットマップ
を生成することと、
ビットマップ内のそれぞれのビットを、データブロック内に格納されたデータ値があ
る、特定のバケットの各々に対して設定することと
を含む、付記項６に記載の方法。
９．１つ以上のデータブロックの各々の確率的データ構造を、１つ以上のデータブロッ
クに関する情報を格納するブロックメタデータ構造内のそれぞれのエントリ内に格納する
ことをさらに含む、付記項８に記載の方法。
１０．列に対するデータを格納している１つ以上のデータブロックの各々に対する確率
的データ構造を前記検査して、選択データに対するクエリーに対応するために読み取る必
要のない１つ以上のデータブロックのうちの特定のものを判断することが：
選択データを含む値の範囲内の１つ以上のバケットを表す１つ以上のビットを判断す
ることと、
１つ以上のデータブロックに対するブロックメタデータ構造内に格納されている各ビ
ットマップ内の１つ以上のビットを検査して、１つ以上のビットのうちの１つも、選択デ
ータに対するクエリーに対応するために読み取る必要のない特定のものとして設定されて
いない、データブロックを識別することと
を含む、付記項９に記載の方法。
１１．カラムナデータベーステーブルの列のヒストグラムが、高さのバランスを調整し
たヒストグラムである、付記項６に記載の方法。
１２．列内のデータの複数のバケット間での分布に対するリバランス事象を検出するこ
とと、
リバランス事象の検出に応答して、
列の高さのバランスを調整したヒストグラムに対する複数のバケットの各々に対する
バケット範囲サイズを修正することと、
複数のバケットの修正されたバケット範囲サイズに従って１つ以上のデータブロック
の各々に対する各確率的データ構造を更新することと
をさらに含む、付記項１１に記載の方法。
１３．列内のデータの複数のバケット間での分布に対するリバランス事象を前記検出す
ることが、１つ以上の新しいデータブロック内に格納されている列に対する追加のデータ
量がリバランス閾値を上回っていると判断することを含む、付記項１２に記載の方法。
１４．列内のデータの複数のバケット間での分布に対するリバランス事象を前記検出す
ることが、列内のデータの分布と比較したデータの追加量の分布間の変化が分布閾値を上
回っていると判断するために、列に対するデータの追加量の分布を分析することを含む、
付記項１２に記載の方法。
１５．各確率的データ構造を前記更新することに続いて、クエリーに対応するために１
つ以上のデータブロックの１つから読み取ったデータが、１つのデータブロックに対する
確率的データ構造によって示される通りのデータ値の範囲内のデータ値を含んでいないと
いう指示を受信することと、
データ値がデータ値の範囲内に含まれているという指示を除去するために１つのデータ
ブロックに対する確率的データ構造を更新することと
をさらに含む、付記項１２に記載の方法。
１６．列に対する１つ以上のデータブロック内に格納されているデータがソートされて
いない、付記項６に記載の方法。
１７．コンピューティング装置の１つ以上が、分散データウェアハウスシステムを実装
する膨大なコンピューティング装置の一部であり、１つ以上のコンピューティング装置が
、データベースウェアハウスクラスタの１つ以上の計算ノードであり、膨大なコンピュー
ティング装置の異なるコンピューティング装置が、データベースウェアハウスクラスタの
リーダーノードであり、かつ方法が、リーダーノードによって、カラムナデータベーステ
ーブルの列を対象とした１つ以上のクエリーを１つ以上の計算ノードに送信することを実
行することをさらに含む、付記項６に記載の方法。
１８．プログラム命令を格納している、持続性コンピュータ可読記憶媒体であって、プ
ログラム命令が、１つ以上のコンピューティング装置によって実行される場合に：
カラムナデータベーステーブルの列のヒストグラムに対する複数のバケットの各々に対
して、バケット範囲サイズを判断することであって、ヒストグラムが列内のデータの複数
のバケット間での分布を表し、複数のバケットの各バケットが、列内のデータの１つ以上
のデータ値が判断されたバケット範囲サイズに従って値の範囲内に存在することを表す、
バケット範囲サイズを判断することと、
カラムナデータベーステーブルの列に対するデータを格納している１つ以上のデータブ
ロックの各々に対してビットマップを生成することであって、ビットマップ内の各ビット
が複数のバケットの異なる１つを表し、かつ、ビットマップ内の設定されたビットが、デ
ータブロック内に格納されたデータ値がある、ヒストグラム内の複数のバケットのうちの
特定のバケットを示す、ビットマップを生成することと、
選択データに対する列を対象としたクエリーの指示を受信することと、
クエリーの指示の受信に応答して：
列に対するデータを格納している１つ以上のデータブロックの各々に対するビットマ
ップを検査して、選択データに対するクエリーに対応するために読み取る必要のない、１
つ以上のデータブロックのうちの特定のものを判断することと、
読み取る必要のない、１つ以上のデータブロックのうちの特定のものを除いて、列に
対するデータを格納している１つ以上のデータブロックを読み取ることと
を実装する、持続性コンピュータ可読記憶媒体。
１９．カラムナデータベーステーブルの列に対するヒストグラムが、高さのバランスを
調整したヒストグラムである、付記項１８に記載の持続性コンピュータ可読記憶媒体。
２０．プログラム命令が、１つ以上のコンピューティング装置によってさらに実行され
る場合に：
列内のデータの複数のバケット間での分布に対するリバランス事象を検出することと、
リバランス事象の検出に応答して：
列の高さのバランスを調整したヒストグラムに対する複数のバケットの各々に対する
バケット範囲サイズを修正することと、
複数のバケットの修正されたバケット範囲サイズに従って１つ以上のデータブロック
の各々に対する各ビットマップを更新することと
を実装する、付記項１９に記載の持続性コンピュータ可読記憶媒体。
２１．列内のデータの複数のバケット間での分布に対するリバランス事象を前記検出す
る際に、プログラム命令が、１つ以上のコンピューティング装置によって実行される場合
に、複数のバケットの各々に対するバケット範囲サイズが判断されてからの時間が、リバ
ランス時間閾値を上回っていると判断することを実装する、付記項２０に記載の持続性コ
ンピュータ可読記憶媒体。
２２．複数のバケットの修正されたバケット範囲サイズに従って１つ以上のデータブロ
ックの各々に対する各ビットマップを前記更新する際に、プログラム命令が、１つ以上の
コンピューティング装置によって実行される場合に：
修正されたバケット範囲サイズ内のデータブロック内に格納されたデータ値があること
を示す、複数のバケットのうちのバケットを表すビットマップの１つ以上の未設定のビッ
トを識別することと、
ビットマップの１つ以上の未設定のビットを設定することと
をさらに実装する、付記項２０に記載の持続性コンピュータ可読記憶媒体。
２３．各ビットマップが、１つ以上のデータブロックに関する情報を格納している現在
のブロックメタデータ構造内のそれぞれのエントリ内に格納されていて、かつ、複数のバ
ケットの修正されたバケット範囲サイズに従って１つ以上のデータブロックの各々に対す
る各ビットマップを前記更新する際に、プログラム命令が、１つ以上のコンピューティン
グ装置によって実行される場合に：
現在のブロックメタデータ構造のそれぞれのエントリで満たされた新しいブロックメタ
データ構造を生成することと、
複数のバケットの修正されたバケット範囲サイズに従って、１つ以上のデータブロック
の各々に対する新しいブロックメタデータ構造内のそれぞれのエントリ内の各ビットマッ
プを修正することと
を実装し、
新しいブロックメタデータ構造を前記生成すること、および新しいブロックメタデータ
構造内のそれぞれのエントリ内の各ビットマップを修正することが完了するまで、クエリ
の指示に応答したビットマップの前記検査の実行が、現在のブロックメタデータ構造内に
格納されているビットマップを利用する、
付記項２０に記載の持続性コンピュータ可読記憶媒体。
【００７３】
結論
様々な実施形態は、コンピュータアクセス可能媒体上での、前述の説明に従って実装さ
れた命令および／またはデータの受信、送信または格納をさらに含み得る。一般的に言え
ば、コンピュータアクセス可能媒体は、磁気または光媒体、例えば、ディスクもしくはＤ
ＶＤ／ＣＤ−ＲＯＭ、不揮発性媒体（ＲＡＭ（例えば、ＳＤＲＡＭ、ＤＤＲ、ＲＤＲＡＭ
、ＳＲＡＭなど）、ＲＯＭなど）などの記憶媒体またはメモリ媒体、ならびにネットワー
クおよび／または無線リンクなどの通信媒体を経由して伝達される、伝送媒体または、電
気信号、電磁信号、もしくはデジタル信号などの信号を含み得る。
【００７４】
図に示し、本明細書で説明する様々な方法は、方法の実施形態例を表す。方法は、ソフ
トウェア、ハードウェア、またはそれらの組合せで実装され得る。方法の順序は変更され
得、様々な要素は、追加、並べ替え、結合、省略、修正、などが行われ得る。
【００７５】
様々な修正および変更は、本開示の利益を有する当業者に明らかであるように、行われ
得る。本発明は、かかる修正および変更の全てを包含し、それに応じて、前述の説明は、
制限的な意味ではなく例示的と見なされることを意図する。
【図１】
0006393805.tif 000002
【図２】
0006393805.tif 000003
【図３】
0006393805.tif 000004
【図４Ａ】
0006393805.tif 000005
【図４Ｂ】
0006393805.tif 000006
【図５】
0006393805.tif 000007
【図６】
0006393805.tif 000008
【図７】
0006393805.tif 000009
【図８】
0006393805.tif 000010
【図９】
0006393805.tif 000011
【図１０】
0006393805.tif 000012
【図１１】
0006393805.tif 000013