(57)【特許請求の範囲】
【請求項１】
コンピューティング・デバイスによって実現される方法であって、
第１パーティション関数を用いてデーターベースを区分するステップと、
前記データーベースを再区分するステップであって、
再区分の時点において存在するパーティション内に位置するデーター・エントリーに対してキー・メンバーシップのレコードを作成し、
第２パーティション関数に関連付けられた１または複数の新たなパーティションを追加し、
後続のデーターベース処理のために複合パーティション関数を定める
ことによって、前記データーベースを再区分するステップと、
を含み、
前記複合パーティション関数は、
前記キー・メンバーシップのレコードにおいて発見されるキー値を有するデーターに対して前記第１パーティション関数を適用し、
前記キー・メンバーシップのレコードにおいて発見されないキー値を有するデーターに対して前記第２パーティション関数を適用する
ように構成され、
前記再区分は、前記再区分の時点において存在するパーティション内に位置する前記データー・エントリーがそれぞれの位置を保持するように実行される、
方法。
【請求項２】
前記キー・メンバーシップのレコードは、前記再区分の時点において存在する前記パーティション内に位置するデーター・エントリーに関連付けられたキー値を記録するように構成される、請求項１に記載の方法。
【請求項３】
前記キー・メンバーシップのレコードは、前記再区分の時点において前記データーベース内に存在するデーター・エントリーに対応するキーを識別するように構成された圧縮データー構造を含む、請求項１に記載の方法。
【請求項４】
前記キー・メンバーシップのレコードはブルーム・フィルターを含む、請求項１に記載の方法。
【請求項５】
前記複合パーティション関数は、連続するパーティション配置に関連付けられた２つ以上のパーティション関数を組み合わせるように構成される、請求項１に記載の方法。
【請求項６】
前記第１パーティション関数および前記第２パーティション関数は、データー要求に対するキー値に適用されたときに前記キー値に対応する前記データーベースのパーティションを識別するデーターを戻すハッシュ関数として構成される、請求項１に記載の方法。
【請求項７】
前記第１パーティション関数は、付加的な記憶容量を追加するための前記データーベースの以前の再区分のために作られた以前の複合関数を含み、前記複合パーティション関数は、前記キー・メンバーシップのレコードにおいて発見されるキー値を有するデーターに対して前記以前の複合関数を適用し、その他のデーターに対して前記第２パーティション関数を適用するように構成される、請求項１に記載の方法。
【請求項８】
前記複合パーティション関数は、前記データーベースのパーティションにわたるデーターの分布の均衡を取るために、前記新たなパーティション上における新たなデーター・エントリーの配置に向けたデーターの割り当てを偏倚させるように構成される、請求項１に記載の方法。
【請求項９】
前記複合パーティション関数は、新たなデーター・エントリーに対する少なくともいくつかのキー値を前記キー・メンバーシップのレコードにおいて発見されたものとして誤認識し、その結果、誤認識されたキー値に関連付けられたデーター・エントリーが、前記再区分の時点において存在する前記パーティションに割り当てられ、前記パーティション内に整合的に配置される、請求項１に記載の方法。
【請求項１０】
処理システムと、
前記処理システムによって実行されると、記憶容量を増加させるようにデーターベースの再区分のための動作を実行する１つまたは複数のモジュールと、
を備えるコンピューティング・デバイスであって、
前記動作は、
前記再区分の時点において存在する前記データーベースのパーティション内に位置するデーター・エントリーに対してキー・メンバーシップのレコードを作成するステップであって、再区分の時点において存在する前記データーベースのパーティションは第１パーティション関数と関連付けられる、ステップと、
第２パーティション関数に関連付けられた新たなパーティションを追加するステップと、
後続のデーターベース要求の処理のために複合パーティション関数を定めるステップと、
を含み、
前記複合パーティション関数は、
前記キー・メンバーシップのレコードにおいて発見されるキー値を含むデーター要求に対して前記第１パーティション関数を適用し、
前記キー・メンバーシップのレコードにおいて発見されないキー値を含むデーター要求に対して前記第２パーティション関数を適用し、
その結果、前記再区分の時点において存在するパーティション内に位置するデーター・エントリーが、前記再区分の時点において存在する前記パーティションにおけるそれぞれの位置を保持する
ように構成される、
コンピューティング・デバイス。
【請求項１１】
前記キー・メンバーシップのレコードは、前記再区分の時点において存在するデーター・エントリーに関連付けられたキーに対して設定されたビット値を有するブルーム・フィルターとして構成され、前記ブルーム・フィルターを介して前記キーに対するメンバーシップを示すように構成される、請求項１０に記載のコンピューティング・デバイス。
【請求項１２】
前記ブルーム・フィルターは、再区分の後に作成されたデーター・エントリーの少なくとも一部が誤認識されて、前記第１パーティション関数を使用して処理されるようにさせる設定変更可能な許容度にしたがう偽陽性エラーを生じさせ、前記偽陽性エラーは、誤認識されたデーター・エントリーが前記第１パーティション関数を使用して信頼性高く配置されるように整合的であり、
前記ブルーム・フィルターの簡潔さの度合いは、前記設定変更可能な許容度に依存する、
請求項１１に記載のコンピューティング・デバイス。
【請求項１３】
前記複合パーティション関数は、前記第２パーティション関数を、前記データーベースを再区分する複数の以前の動作に関連付けられた複数の別々のパーティション関数と組み合わせるように構成される、請求項１０に記載のコンピューティング・デバイス。
【請求項１４】
前記第２パーティション関数は、前記再区分の時点において存在する前記データーベースのパーティションと前記新たなパーティションとに跨がってデーターを割り当てるように構成される、請求項１０に記載のコンピューティング・デバイス。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  ユーザーは、業務および個人用通信、オンライン・ミーティング、画面共有、ビデオ・チャット、メッセージングを行うというようなオンライン活動のために増々クラウド・ベースのリソースに頼りつつあり、それ以外でもサービス・プロバイダーから入手可能な種々のリソースを使用する。ユーザーの対話処理に関連する種々のアプリケーションおよびユーザー・データーは、リソースと関連付けられたデーターベースに保持することができる。一般に、データーベースは、多くの異なる個々のパーティションまたはデーターベース・ノードを含むことができ、これらにデーターが割り当てられる。複数の異なる物理デバイスおよびサーバーにまたがってパーティションを広げることもできる。データー・エントリーは、データーに対応するパーティションがどれかを示すキー値のような識別子と関連付けることができる。識別子は、対応するデーター・エントリーの加算、アクセス、および変更というような動作を実行するときに、データーを割り当てるおよびデーターを参照するために使用することができる。
【０００２】
[0002]  ときの経過につれて、データーベース内に格納されるデーター量は増大し、ある時点で、データーのボリュームおよび要求に応えるために、記憶容量を拡張する場合がある。従前からのデーターベース拡張手法の１つでは、データーベースのためのサービスおよび／またはデーターベースへのアクセスを停止し、新たなストレージ／パーティションをデーターベースに追加し、次いで既存のデーター全てをパーティションの新たな配置にわたって割り当てし直す必要がある。この手法では、既存のデーターは新たな位置に移動させられ、この移動プロセスは、大規模なデーターベースでは非常に時間がかかるおそれがある。したがって、従前からのデーターベース拡張技法は、ユーザーに提供されるサービスにとって正しく破壊的であり、データーを処理して、更新されたパーティションの配置における新たな位置に挿入し直すには多大な時間量を要するおそれがある。
【発明の概要】
【０００３】
[0003]  本明細書では、既存のデーターを移動させることなく、データーベースを区分し直すために使用することができる複合パーティション関数技法について説明する。１つ以上の実施態様では、第１パーティション関数に関連付けられた第１配置にデーターベースを区分する。データーベースは、第２パーティション関数に関連付けられた第２配置を形成するために区分し直される。再区分の時点に存在するパーティションにおけるデーター・エントリーに対してキー・メンバーシップ(key membership)のレコードを作成する。これは、第１配置に対応するデーターを認識するために使用することができる。１つの手法では、キー・メンバーシップのレコードは、ブルーム・フィルター(Bloom filter)として構成され、パーティションの第１配置に関連付けられたキーまたは他の識別子を簡潔に表す。第１パーティション関数および第２パーティション関数を組み込む複合パーティション関数が定められ、第２配置における以後のデーターベース処理に使用される。複合パーティション関数は、第１パーティション関数を、キー・メンバーシップのレコードにおいて発見されるキーを有するデーターに適用し、第２パーティション関数を、キー・メンバーシップのレコードにおいて発見されないキーを有する他のデーターに適用するように構成される。再区分は、再区分の時点に存在するデーター・エントリーが、第１配置のパーティションにおいてそれらのそれぞれの位置を保持するように実行される。
【０００４】
[0004]  この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を判断するときに補助として使用されることを意図するのでもない。
【図面の簡単な説明】
【０００５】
[0005]  添付図面を参照しながら、詳細な説明を記載する。図では、参照番号の左側の桁（１つまたは複数）は、その参照番号が最初に現れる図を識別する。説明および図における異なる実例において同じ参照番号が使用される場合、同様または同一の項目を示すことができる。図に表されるエンティティは１つ以上のエンティティを示す場合もあり、したがって以下の論述ではエンティティの単数形または複数形を相互交換可能に引用することができる。
【図１】図１は、複合パーティション関数の技法を採用するように動作可能である動作環境例の図である。
【図２】図２は、１つ以上の実施態様によるデーターベース・システムのバーティション配置例を示す。
【図３】図３は、１つ以上の実施態様による図２のシステムの拡張を表す、データーベース・システムの他のパーティションの配置例を示す。
【図４】図４は、１つ以上の実施態様によるデーターベース・システムの他のパーティションの配置例を示す。
【図５】図５は、１つ以上の実施態様による、パーティションのスロットへの割り当ての図を示す。
【図６】図６は、１つ以上の実施態様にしたがって複合パーティション関数を定める手順例を示す流れ図である。
【図７】図７は、１つ以上の実施態様にしたがって、パーティションの配置(arrangement)要求を導く(route)ために複合パーティション関数を使用する手順例を示す流れ図である。
【図８】図８は、本明細書において説明する技法の態様を実現するために採用することができるデバイスおよびコンポーネントを有するシステム例を示す。
【発明を実施するための形態】
【０００６】
全体像
[0014]  ときの経過につれて、データーベース内に格納されるデーター量は増大する可能性があり、ある時点で、データー量および要求に対処するために、記憶容量を拡張する場合がある。従前からのデーターベース拡張技法の１つでは、新たなパーティションを作成するためにはデーターベースを停止し、既存のデーターの全てをパーティションの新たな配置にわたって分散する必要があるが、ユーザーにとって時間がかかり破壊的である。
【０００７】
[0015]  本明細書では、既存のデーターを移動させることなく、データーベースを区分し直すために使用することができる複合パーティション関数技法について説明する。１つ以上の実施態様では、第１パーティション関数に関連付けられた第１配置にデーターベースを区分する。データーベースは、第２パーティション関数に関連付けられた第２配置を形成するために区分し直される。再区分の時点に存在するパーティションにおけるデーター・エントリーに対してキー・メンバーシップ(key membership)のレコードを作成する。これは、第１配置に対応するデーターを認識するために使用することができる。１つの手法では、キー・メンバーシップのレコードは、ブルーム・フィルター(Bloom filter)として構成され、パーティションの第１配置に関連付けられたキーまたは他の識別子を簡潔に表す。第１パーティション関数および第２パーティション関数を組み込む複合パーティション関数が定められ、第２配置における以後のデーターベース処理に使用される。複合パーティション関数は、第１パーティション関数を、キー・メンバーシップのレコードにおいて発見されるキーを有するデーターに適用し、第２パーティション関数を、キー・メンバーシップのレコードにおいて発見されないキーを有する他のデーターに適用するように構成される。再区分は、再区分の時点に存在するデーター・エントリーが、第１配置のパーティションにおいてそれらのそれぞれの位置を保持するように実行される。
【０００８】
[0016]  本明細書において説明するように複合パーティション関数技法を使用すると、データーベースの再区分の間、既存のデーターをパーティションの配置内部におけるそれらのそれぞれの位置に保持することが可能になる。したがって、大量のデーターを移動させる必要がなく、再区分に伴う時間量を削減する。更に、ブルーム・フィルターまたはキー・メンバーシップの他の圧縮表現を使用することによって、異なるパーティション配置（例えば、パーティション時期(era)）に関連付けられたデーター間で区別し、データー要求の管理のために正しいパーティション関数を選択するための素早い評価が可能になる。更に、キー・メンバーシップのレコードは、比較的小さいサイズを有するように構成されるので、レコードが管理可能となり、異なるサーバー、パーティション、およびデーターベース・システムのコンポーネントによる使用のためのレコードの配布(distribution)が実現可能となる。
【０００９】
[0017]  以下の論述では、最初に、本明細書において説明する技法を採用することができる環境例について説明する。次いで、この環境例およびその他の環境において実現することができる詳細および手順の例について説明する。したがって、詳細および手順の例は、この環境例には限定されず、更にこの環境例は詳細および手順の例には限定されない。最後に、本明細書において説明する技法の態様を実現するために採用することができるシステム例、およびこのシステムのコンポーネント例について論ずる。
環境例
[0018]  図１は、本明細書において説明する技法を採用するように動作可能な実施態様例における環境１００の図である。図示する環境１００は、クライアント・デバイス１０２、他のクライアント・デバイス１０４、およびサービス・プロバイダー１０６を含み、これらはネットワーク１０８によって通信可能に結合されている。クライアント・デバイス１０２、他のクライアント・デバイス１０４、およびサービス・プロバイダー１０６は、１つ以上のコンピューティング・デバイスによって実現することができ、更に１つ以上のエンティティを表すこともできる。
【００１０】
[0019]  コンピューティング・デバイスは、種々の方法で構成することができる。例えば、コンピューティング・デバイスは、デスクトップ・コンピューター、移動局、娯楽用アプライアンス、ディスプレイ・デバイスに通信可能に結合されたセットトップ・ボックス、ワイヤレス・フォン、ゲーム・コンソール等のような、ネットワーク１０８を通じて通信することができるコンピューターとして構成することができる。つまり、コンピューティング・デバイスは、大量のメモリーおよびプロセッサー・リソースを有する最大リソース・デバイス（例えば、パーソナル・コンピューター、ゲーム・コンソール）から、メモリーおよび／または処理リソースが限られた低リソース・デバイス（例えば、従前からのセットトップ・ボックス、ハンド・ヘルド・ゲーム・コンソール）までの範囲に及ぶことができる。加えて、実例によっては１つのコンピューティング・デバイスが示されることもあるが、コンピューティング・デバイスは、動作を実行するために業務によって利用されるサービス・プロバイダー１０６の複数のサーバー等のような、複数の異なるデバイスを表すこともできる。本明細書において説明する技法を実現するのに適したコンピューティング・システムおよびデバイスの更に他の例について、図８に関して以下で説明する。
【００１１】
[0020]  ネットワーク１０８はインターネットとして示されているが、ネットワークは広範囲におよぶ種々の構成を取ることができる。例えば、ネットワーク１０８は、ワイド・エリア・ネットワーク（ＷＡＮ）、ローカル・エリア・ネットワーク（ＬＡＮ）、ワイヤレス・ネットワーク、公衆電話ネットワーク、イントラネット、ピア・ツー・ピア・ネットワーク等を含むことができる。更に、１つのネットワーク１０８が示されているが、ネットワーク１０８は複数のネットワークを含むように構成することもできる。
【００１２】
[0021]  更に、クライアント・デバイス１０２は、オペレーティング・システム１１０を含むように示されている。オペレーティング・システム１１０は、基礎デバイスの基礎機能を、クライアント・デバイス１０２上で実行可能なアプリケーション１１２に抽象化するように構成されている。例えば、オペレーティング・システム１１０は、どのようにこの基礎機能が実装されるか知ることなくアプリケーション１１２を書くことができるように、処理、メモリー、ネットワーク、および／または表示機能を抽象化することができる。例えば、アプリケーション１１２は、図示のように、ディスプレイ・デバイスによってレンダリングおよび表示されるように、オペレーティング・システム１１０にデーターを供給することができるが、このレンダリングがどのように実行されるか理解しなくてよい。クライアント・デバイスに通例関連する種々のアプリケーション１１２が考えられ、複数のオフィス生産性モジュールを統合する生産性スイート(productivity suite)、ウェブ・ブラウザー、ゲーム、マルチメディア・プレーヤ、ワード・プロセッサー、スプレッドシート・プログラム、写真管理(photo manager)等を含むが、これらに限定されるのではない。
【００１３】
[0022]  クライアント・デバイス１０２および他のクライアント・デバイスは、各々、通信モジュール１１４を含むように示されている。通信モジュールは、ネットワーク１０８を通じた様々な種類の通信を可能にする機能を表す。通信モジュールの例には、音声通信アプリケーション（例えば、ＶｏＩＰクライアント）、ビデオ通信アプリケーション、メッセージング・アプリケーション、コンテンツ共有アプリケーション、ウェブ・コンテンツにアクセスするためのブラウザー、およびこれらの組み合わせが含まれる。例えば、通信モジュール１１４は、異なる通信様式(modality)を組み合わせて、多様な通信シナリオを提供することを可能にする。これには、ユーザー存在指示、ビデオ通信、オンライン・コラボレーションおよびミーティング体験、インスタント・メッセージング（ＩＭ）、および音声通話(voice calling)のために統合機能を実装することが含まれるが、これに限定されるのではない。更に、通信モジュールは、オンライン・リソース（例えば、コンテンツおよびサービス）、ブラウザーのウェブ・ページおよびサイトにアクセスし、サービス・プロバイダーおよび他のクライアントと通信接続を確立し、通信モジュールを介して出力することができるユーザー・インターフェース１１６を介した種々のその他の対話処理を可能にするように動作可能であってもよい。少なくとも一部の実施態様では、通信モジュール１１４は、クライアント・デバイス上でローカルにデプロイされインストールされるアプリケーションを表す。加えてまたは代わりに、通信モジュール１１４は、全体的または部分的に、プロバイダーからのリモート・サービスのように、ピア・ツー・ピア技法等を使用してウェブ・ブラウザー（例えば、ウェブ・アプリケーション）を介してアクセスおよび実行されるリモート・アプリケーションとして実装することもできる。
【００１４】
[0023]  サービス・プロバイダー１０６は、図１に示すように、リソース・マネージャ１２０を介してというようにして、ネットワーク１０８を通じて利用可能にすることができる種々のリソース１１８を管理するように動作可能な機能を含む。リソース・マネージャ１２０は、本明細書において論ずるように、リソース１１８およびこのリソースに関係するデーターを管理する種々の機能を表す。サービス・プロバイダー１０６は、ウェブ・ページまたは他のユーザー・インターフェース１１６を介して種々のリソース１１８を提供することができ、リソース１１８は、ウェブ・ブラウザーまたは他のクライアント・アプリケーションを介して、１つ以上のクライアントによる出力のためにネットワークを通じて伝達される。サービス・プロバイダー１０６は、リソース１１８へのアクセス、リソースの性能、およびリソース１２２を提供するためのユーザー・インターフェース１１６の構成等を管理するように構成されている。サービス・プロバイダー１０６は、種々のリソース１１８を提供するために使用される１つ以上のサーバー・デバイスを表すこともできる。
【００１５】
[0024]  加えて、リソース・マネージャ１２０は、複数のパーティション１２６（シャード(shard)とも呼ぶ）に区分および再区分することができるリソース１１８に関連するデーターベース１２４を管理するパーティション関数１２２を実装するように構成することもできる。一般に、パーティション関数は、パーティションの配置にわたってどのようにデーターを割り当てるか定めるように構成され、データー要求をしかるべきパーティションに導くために使用することもできる。パーティション関数１２２の少なくとも一部は、以上および以下で説明するように構成され動作する複合パーティション関数(composite partition function)にすることができる。複合パーティション関数の形成および使用に関するその他の詳細は、以下の図に関係付けて理解することができる。
【００１６】
[0025]  少なくとも一部の実施形態では、クライアントは、サービス・プロバイダー１０６によって提供されるリソース１１８に、クライアントが認証されるクライアント／ユーザー・アカウントを介してアクセスすることができる。例えば、リソース１１８にアクセスするために、クライアント・デバイスはユーザー名およびパスワードを与えればよく、これらは認証サービスによって認証される。認証が成功したとき（例えば、クライアントが「自らが名のっているその人物である」(is who they say they are)）、認証サービスは、対応するリソースへのアクセスを可能にするために、トークン（または他の適した認証識別子／秘密）を渡すことができる。１回の認証が１つ以上のリソースに対応してもよいため、「１回のサインオン」による１つのアカウントの認証が、個々のリソース、複数のサービス・プロバイダー１０６からのリソース、および／またはサービス・プロバイダー１０６から入手可能な完全な一組のリソースへのアクセスを与えることができる。
【００１７】
[0026]  一般に、サービス・プロバイダー１０６によってアクセス可能にされたリソース１１８は、１つ以上のプロバイダーによってネットワークを通じて通例入手可能にされるサービスおよび／またはコンテンツの任意の適した組み合わせを含むことができる。サービスのいくつかの例には、検索サービス、電子メール・サービス、インスタント・メッセージング・サービス、オンライン生産性スイート、コラボレーション・サービス（例えば、ＶｏＩＰ通話、オンライン・ミーティングおよび会議、画面共有、統一通信およびコラボレーション（ＵＣ＆Ｃ）サービス、インスタント・メッセージング、ビデオ・チャット、音声通信等の内１つ以上のための機能を統合するサービス）、およびリソース１１８へのクライアントのアクセスを制御するための認証サービスが含まれるが、これらに限定されるのではない。コンテンツは、テキスト、マルチメディア・ストリーム、文書、アプリケーション・ファイル、写真、オーディオ／ビデオ・ファイル、アニメーション、画像、ウェブ・ページ、ウェブ・アプリケーション、デバイス・アプリケーション、ブラウザーまたは他のクライアント・アプリケーションによる表示のためのコンテンツ等の種々の組み合わせを含むことができる。
【００１８】
[0027]  以上で環境例について検討したので、これより１つ以上の実施態様による複合パーティション関数技法についての詳細および手順のいくつかの例の論述について検討する。
複合パーティション関数の詳細
[0028]  この章では、１つ以上の実施態様にしたがって、既存のデーターを移動させることなく、データーベースを再区分するために使用することができる複合パーティション関数技法および手順例の詳細について論ずる。概して言えば、区分(partitioning)とはデーターベースの規模を調整するために使用することができる技法である。区分は、レコード／データー・エントリーを、パーティション１２６（シャードとも呼ぶ）と呼ばれるばらばらなサブセットに分割することを必要とする場合がある。区分は、レコードに適した識別子に基づくこともできる。識別子の一例にレコードの主キーがある。パーティションは、複数の異なるサーバーおよび／または記憶デバイス（例えば、データーベース・ノード）に物理的に跨がって分散されることもある。１つの手法では、パーティションとデーターベース・ノードとの間に１対１のマッピングができるように、各パーティションを別個のデーターベース・サーバーに割り当てることができる。加えてまたは代わりに、所与のパーティションに割り当てられた空間を２つ以上の個々のデーターベース・ノード上に配置できるように、１つ以上のパーティションをサーバー／記憶デバイスにまたがって論理的に分割することもできる。
【００１９】
[0029]  このコンテキストでは、所与のパーティションの配置は、データーベースにデーターが入力されるに連れて消費される有限量の記憶容量を有する。ある時点において、容量閾値に達する可能性があり、この時点で、データーベースの連続動作を可能にするためには、記憶容量を拡張しなければならない場合がある。データーベースの拡張は、記憶容量が多い他のパーティションの配置を作成するために、１つ以上のパーティションを既存のパーティションの配置に追加する必要がある場合がある。データーベースの拡張は、ここでは、再区分(repartitioning)とも呼ばれる。格納されているデーターのボリューム、またはデーターへのアクセス要求のレートのいずれに関しても、各データーベース・ノードが等しく飽和される、均衡の取れたシステムとなるために、再区分を行うこともできる。この場合、追加ストレージを利用するように構成された新たなパーティション関数によって、追加のストレージ（例えば、他のサーバー／記憶デバイス）を追加することができる。また、あるデーターベース・ノードはほぼ記憶限界であるが、他のノードの負荷は少なく余裕がある、不均一に均衡の取れたシステムとなるように、再区分を行うこともできる。この状況では、データーベース・ノードは同一のままでもよいが、利用が少ないノードを、負荷が多いノードよりも優先するように構成された新たなパーティション関数を定めることができる。
【００２０】
[0030]  本明細書において説明する技法によれば、再区分は、この再区分の時点において存在するパーティション内に位置するデーター・エントリーがそれらのそれぞれの位置を保持するように、実行することができる。言い換えると、再区分の時点にデーターベース内に既にあるデーターは、再区分の結果移動させられず、処理時間の短縮およびリソース利用の削減となる。これは、本明細書において論ずるように複合パーティション関数を使用することによって遂行することができる。複合パーティション関数は、データー要求の処理のために、連続的なパーティションの配置、または、「パーティション時期」(partition era)に対応する複数の異なる基礎パーティション関数を選択的に適用するように構成されている。このようにするために、複合パーティション関数は、各データー要求が対応するパーティション時期を認識し、要求を処理するために認識されたパーティション時期に適したパーティション関数を適用するために、キー・メンバーシップのレコードを含む、またはそうでなければ利用することができる。
【００２１】
[0031]  これより、複合パーティション関数およびキー・メンバーシップ・レコード、ならびに複合パーティション関数を使用した再区分に関する更なる詳細および概念を示す図２〜図５の例を検討する。具体的には、図２は、全体的に２００で、１つ以上の実施態様によるデーターベース・システムに対するパーティションの配置例を示す。図示する例では、図１に関して論じたようなサービス・プロバイダー１０６と関連付けることができる サーバー２０２が示されている。サーバー２０２は、ウェブ・アプリケーション２０４および／または他のリソース１１８に関連する機能を提供するように構成することができる。また、サーバー２０２はリソース・マネージャ１２０も含む。リソース・マネージャ１２０は、本明細書で論ずるように動作して、ウェブ・アプリケーション２０４との対話処理、および対応するデーターベースにおいてウェブ・アプリケーションに関連するデーターの格納を管理することができる。データーは、データーベースのパーティション１２６が定められた記憶デバイスを介して格納することができ、記憶デバイスは、サーバー２０２を含んでも含まなくてもよい１つ以上のサーバーを介して実装されてもよい。一実施態様では、データーベースのパーティション１２６の内１つ以上は、サーバー２０２を介して提供されてもよい。
【００２２】
[0032]  図示する例におけるリソース・マネージャ１２０は、２つのパーティション例、即ち、パーティション２０８（０）およびパーティション２０８（１）を含む、図２に示すパーティションの配置に対してパーティション関数ｐ１２０６（１）を実装するように構成されている。データーは、キー−値フォーマットで表され、キーはデーター・レコードの主キーであり、値はデーター・レコードのコンテンツを表す。データーにアクセスし、このデーターに対して処理を実行するためにデーター要求を行うことができる。処理には、レコードを追加する、レコードを削除する、データーの変更、読み出し処理、書き込み処理等が含まれるが、これらに限定されるのではない。データーにアクセスして処理を実行するためには、要求側アプリケーションはキー（または他の相当する識別子）を使用してデーターベース・ノードを突き止め、示されたキーに対応するパーティションを探し出す。一旦これが行われたなら、この選択されたノードおよび／またはパーティションから、データーベース・システムに特定のプロトコル、フォーマット、および／またはデーターベース技術にしたがって、データーにアクセスすることができる。プロトコル、フォーマット、および／またはデーターベース技術は、異なるシステム毎に異なってもよい。
【００２３】
[0033]  パーティション関数ｐ１  ２０６（１）およびパーティション関数１２２は、一般に、対応するキーに基づいてパーティションの決定論的選択(deterministic selection)を可能にする。言い換えると、この機能は、データーを信頼性高く突き止めることができるように、所与のキーに対して同じパーティションを一貫して選択する。パーティション関数１２２には種々の構成(configuration)が考えられる。１つの手法では、パーティション関数をハッシュ関数として構成することができ、データー要求に対するキー値に適用されると、キー値に対応するデーターベースのパーティションを識別するデーターを戻す。
【００２４】
[0034]  一例としてそして限定ではなく、パーティション関数ｐは、ｐ（ｋ）＝ｈａｓｈ（ｋ）ｍｏｄＮという形態を有することができ、ここでｋはキー、ｈａｓｈはハッシュ関数、そしてＮは所与の配置(arrangement)に対するパーティションの数である。この例では、パーティション関数は、０からＮ−１までカウントするパーティション番号を戻す。ハッシュ関数は、大きな整数を、キーｋまたは他の識別データーを表すストリング（またはバイト・アレイ）に割り当てるように動作する。この形態で利用されるハッシュ関数は、均一な値の分布を与えるように構成することができる。あるいは、ハッシュ関数は、特定のパーティション（例えば、過小利用の(under-utilized)パーティション）にデーターの配置を偏らせる(skew)ために使用することができる値の分布を行うように、選択／構成することもできる。モジュロ関数ｍｏｄＮは、大きな整数を逆に０からＮ−１の範囲に嵌め込み、パーティションの配置における個々のパーティションの識別子として使用することができる。したがって、パーティション関数は、このパーティション関数によって反映される分布方式にしたがって、データーベース・ノード／パーティション間でデーターを分散させるように設計することができる。
【００２５】
[0035]  図２の例では、パーティション関数ｐ１２０６（１）は、キーｋ１およびｋ２に対するレコードを、この例ではパーティション２０８（０）である第１パーティションにマッピングするように構成されている。言い換えると、キーｋ１およびｋ２に対して評価されたパーティション関数ｐ１２０６（１）は、パーティション２０８（０）に対する識別子を戻す。この場合、これはゼロ値である（例えば、（ｐ１（ｋ１）＝ｐ１（ｋ２）＝０）。したがって、キーｋ１およびｋ２に対応するデーター・レコード／値は、図２に表されるように、パーティション２０８（０）に関連付けられたサーバー／ストレージに格納し、ここからアクセスすることができる。また、パーティション関数ｐ１  ２０６（１）は、キーｋ３およびｋ４に対するレコードを第２パーティション、即ち、パーティション２０８（１）にマッピングするように構成されている。ここで、キーｋ３およびｋ４に対して評価された関数は、パーティション２０８（１）に対する識別子を戻す。この場合、これは値１である（例えば、ｐ１（ｋ３）＝ｐ１（ｋ４）＝１）。したがって、キーｋ３およびｋ４に対応するデーター・レコード／値は、図２に表されるように、パーティション２０８（１）に関連付けられたサーバー／ストレージに格納し、ここからアクセスすることができる。
【００２６】
[0036]  ここで、図２に示すシステム例に対する容量閾値に達した場合、追加のサーバー／ストレージを含ませ、パーティションの新たな配置にわたってデーターベースを再区分することによって、追加の容量を追加することができる。例えば、ＮからＮ’＞Ｎへの拡張について検討する。ここで、例えば、Ｎ’＝Ｎ＋１、またはＮ’＝２＊Ｎである。新たなパーティションの配置は、追加の容量／パーティションを収容するために作成された新たなパーティション関数によって管理される（govern)。次いで、新たなパーティション関数を使用して、拡張されたシステムに新たなデーターを割り当てることができる。新たなパーティション関数は、先に論じたように、ｐ’（ｋ）＝ｈａｓｈ（ｋ）ｍｏｄＮ’という形態を取ることができる。しかしながら、既存のデーターの位置は、以前のパーティション関数（例えば、パーティション関数ｐ１  ２０６（１））によって管理され、したがって、新たなパーティション関数は、既存のデーターを信頼性高く突き止めることができないおそれがある。何故なら、通常、これら２つの機能は整列されない(align)からである（例えば、ｐ（ｋ）≠ｐ’（ｋ））。従前からの解決策では、新たなパーティション関数を以後使用可能にするためには、ある時間期間データーベース・サービスを停止し、新たなパーティション関数にしたがって、既存のレコードにわたって繰り返し除去および再挿入処理を実行する必要がある。既に述べたように、これは、大量のデーターおよび要求を有するデーターベースにとって、正しく破壊的であり、時間がかかる可能性がある。
【００２７】
[0037]  本明細書において説明する複合パーティション関数技法は、しかしながら、既存のデーターを移動させることなく、データーベースを再区分するために使用することができる。概略的には、複合パーティション関数は、異なるパーティション配置に対してキー・メンバーシップのレコードを使用して、対応するパーティション関数を選択し所与のデーターベース処理に使用する。この場合、特定のデーターが最初にデーターベースに割り当てられたときに使用されたパーティション関数は、再区分の後であっても、この特定のデーターのために使用され続ける。キー・メンバーシップのレコードは、適用すべき正しい関数の選択を可能にし、複合パーティション関数は、各々異なるパーティション時期に対応する２つ以上の個々のパーティション関数の組み合わせを使用するように設計されている。
【００２８】
[0038]  例示するために、図３を検討する。図３は、１つ以上の実施態様にしたがって、図２のシステムの拡張を表すデーターベース・システムに対する別のパーティションの配置例を、全体的に３００で示す。この例では、追加のパーティション２０８（２）が、図３のパーティションの配置に含まれることが示されている。加えて、リソース・マネージャ１２０は、図３のパーティションの配置に対するデーター割り当てを管理する複合パーティション関数３０２を実装することも示されている。複合パーティション関数３０２は、図２の配置に対する以前の関数、即ち、パーティション関数ｐ１  ２０６（１）を、図３に示すパーティションの再配置のために作られた(establish)新たな関数である、パーティション関数ｐ２  ２０６（２）と組み合わせるように構成されている。また、複合パーティション関数３０２は、キー・レコードｂ１  ３０４（１）を含むまたは利用するように構成されている。キー・レコードｂ１  ３０４（１）は、キー値と、複合パーティション関数３０２に組み込まれた個々のパーティション関数との対応付けを認識するために使用することができる。１つの手法では、キー・レコードｂ１  ３０４（１）は、どのキー値が以前の関数（パーティション関数ｐ１  ２０６（１））と関連付けられているか識別し、したがって、対応するデーター要求の処理のためにこの機能を選択するメカニズムを設ける。パーティション関数ｐ２  ２０６（２）は、キー・レコードｂ１  ３０４（１）に収容されているキー値に対応しない他のデーター要求のために使用することができる。
【００２９】
[0039]  この例では、キーｋ１、ｋ３、ｋ３、およびｋ４に関連付けられたデーター・エントリー／値は、システムにおいて既に存在しており、図２に示すように２つのパーティションに跨がって分散されている。再区分は、図３に示すように追加のパーティションを追加するために行うことができる。実施態様では、追加のパーティション（１つまたは複数）を作成し、複合パーティション関数をインストールするために、データーベース・システムを停止させることもある。再区分の一部として、システムにおける既存のキー（例えば、ｋ１、ｋ２、ｋ３、およびｋ４）を処理して、再区分の時点においてレコード・キー・メンバーシップを作成する。これは、キー・レコードｂ１  ３０４（１）によって表されている。尚、この処理は、新たなパーティション関数にしたがって既存のレコードを移動させるとすれば要する時間量と比較して、はるかに短い時間で済むことを注記しておく。
【００３０】
[0040]  複合パーティション関数３０２は、以下のようにして定めることができる。パーティション関数ｐ１  ２０６（１）は、２つのパーティションの配置に対する元のパーティション関数であり、ｐ１（ｋ）＝ｈａｓｈ（ｋ）ｍｏｄ２という形態を取ることができる。パーティション関数ｐ２  ２０６（２）は、３つのパーティションとした拡張配置(expanded arrangement)のために作られた新たなパーティション関数であり、ｐ２（ｋ）＝ｈａｓｈ（ｋ）ｍｏｄ３という形態を取ることができる。ここで、ｐ’（ｋ）として表される複合パーティション関数３０２は、次のように表すことができる。
【００３１】
ｂ１（ｋ）＝真となる任意のｋに対して、ｐ’（ｋ）＝ｐ１（ｋ）、
それ以外の場合、ｐ’（ｋ）＝ｐ２（ｋ）
[0041]  言い換えると、キー値がキー・レコードｂ１  ３０４（１）に含まれるか否か確かめるためにチェックが行われる。キー値が見つかった場合、対応する要求／処理を行うために(handle)ｐ１を使用する。そうでない場合、キー値が見つからない場合、対応する要求／処理を行うためにｐ２を使用する。複合パーティション関数３０２を使用すると、既存のレコードは、依然としてｐ１を使用して突き止められるので、それらの元の位置に留まることができる。新たなレコードは、新たなパーティションを含むパーティションの配置にわたって、ｐ２を使用して、データーを入力することができる。したがって、データーベース・ノードの集合全体が以後も利用される。
【００３２】
[0042]  図３のキー・レコードｂ１  ３０４（１）のようなキー・メンバーシップのレコードは、異なるパーティション配置および／またはパーティション時期に関連付けられたキー間で区別するために、任意の適した方法で構成することができる。各配置／時期に対応するキーの生のリストは、１つ以上の実施態様において採用されてもよい。しかしながら、実際には、キーの生のリストのサイズが、このリストを異なるデーターベース・サーバーに配布することを困難にし、かなりの量のメモリーを占める可能性がある。したがって、圧縮フォーマットとした簡潔なキー表現が、生のリストを使用することに加えてまたはその代わりに、採用されてもよい。再区分の時点においてデーターベース内に存在するデーター・エントリーに対応するキーを識別するように構成することができる種々の異なる圧縮データー構造が考えられる。圧縮データー構造の例には、ビット・マップ、アレイ、マトリクス、およびフィルターが含まれるが、これらに限定されるのではなく、他にもいくつもの例をあげられる。
【００３３】
[0043]  １つ以上の実施態様においてキー・メンバーシップのレコードに適していると考えられる圧縮データー構造の他の例にブルーム・フィルター(Bloom filter)がある。ブルーム・フィルターとは、空間効率的な方法で値の集合に対して集合メンバーシップ(a set membership)を記憶する(remember)ように設計されたデーター構造である。具体的には、キーの集合Ｓ＝｛ｋ１，．．．ｋＮ｝が与えられると、この集合Ｓにおける各キーの存在を「記憶する」ために、ブルーム・フィルターを作成することができる。これは空間効率的であるので、ブルーム・フィルターは単に全てのキーのリストを記憶するだけではない。代わりに、ブルーム・フィルターはビット・ベクトルを維持し、集合Ｓからの各キーｋに対して、インデックスｈａｓｈ（ｋ）ｍｏｄＭにおいて１ビットをセットする。ここで、ｈａｓｈはハッシュ関数であり（パーティション関数に関連付けられたハッシュ関数と異なっても、同じでもよい）、Ｍはビット・ベクトルの長さである。任意の所与のキーｋの集合メンバーシップを判定するために、位置ｈａｓｈ（ｋ）ｍｏｄＭにおけるビットに対して参照(lookup)を行う。ビットがセットされている場合、キーはその集合のメンバーであり、そうでない場合、キーはメンバーではない。ビット・ベクトルは非常に空間効率的であり、したがって、大きなアプリケーションをサポートするデーターベースにおいて通例見られる大多数のキーに対してでも、ブルーム・フィルターをデーターベース・ノードのメモリーに格納することを可能にする。
【００３４】
[0044]  尚、ブルーム・フィルターは、何らかの偽陽性エラー(false positive error)を起こす確率論的データー構造であることを注記しておく。例えば、集合Ｓのメンバーでないキーｋ２が、Ｓのメンバーであるキーｋ１と同じ値にハッシュする可能性がある。このエラーは、ハッシュ関数の衝突として知られている。エラー率は低いが、可能性があることに変わりはない。したがって、Ｓのメンバーでない少数のキーに対して、ブルーム・フィルターはこれらを集合メンバーとして間違って分類するおそれがある。エラーの確率は、ビット・ベクトルの長さを延長することによって、および／または複数のハッシュ関数を使用し、これらのハッシュ関数によって示される複数のビット設定値の試験に基づいてメンバーシップを解決する(resolve)ことによって、最少に抑えることができる。つまり、ブルーム・フィルターは、ビット・ベクトルの長さを指定することにより、そしてブルーム・フィルターに使用するための１つ以上のハッシュ関数を選択することによって、エラーを制御するように選択的に構成することができる。実際には、ブルーム・フィルターによって消費される記憶空間に対する制約を受ける容認可能なエラー率、およびハッシュ関数の計算のためのレイテンシー／コストを設定するためにトレードオフを行えばよい。このエラー率が容認可能なのは、ブルーム・フィルターが新たなデーターに対するキーを集合のメンバーであると誤認識した場合、一貫してそうするからである。つまり、以前のパーティション関数を使用して配置されたとしても、データーを信頼性高く突き止めることができる。更に、ブルーム・フィルターは集合のメンバーであるキー（例えば、既存のレコードに対するキー）に対して偽陰性を返さず、したがって、古いデーターは元の位置に残り、信頼性高く突き止めることができる。１つの手法では、ブルーム・フィルターの構成が、どの程度の頻度で偽陽性エラーが起こるか判定する、設定変更可能な許容度(configurable tolerance)を設定することを含んでもよい。一方、ブルーム・フィルターの簡潔さの度合いは、この設定変更可能な許容度に左右される。例えば、設定変更可能な許容度を、より多くの偽陽性エラーを生じるまたはこれらに「耐える」ように設定することによって、簡潔さの度合いを一層高くすることができる。実際には、非常に高い度合いの簡潔さを達成することができる。何故なら、データー・エントリーが誤認識されても、以前の時期からの関数を使用すれば、信頼性高く突き止められることに変わりがないからである。言い換えると、ブルーム・フィルター・エラーの影響は無視できるので、比較的高い頻度のエラーでも許容可能であり、したがって、非常に簡潔な構成のブルーム・フィルターを採用することができる。
【００３５】
[0045]  ここで、４つの新たなレコードが、再区分の後システムに追加される、図３によって表される例について検討する。この例に限って、キー・レコードｂ１  ３０４（１）は、説明したばかりのブルーム・フィルターとして構成されると仮定する。キーｋ１、ｋ３、ｋ３、およびｋ４はシステムに既に存在しており、ブルーム・フィルターのメンバーであると認識される。したがって、これらのキーに関連する要求は、パーティション関数ｐ１  ２０６（１）によって管理される。キーｋ５およびｋ６は、ブルーム・フィルターのメンバーでないことが分かり、パーティション関数ｐ２  ２０６（２）によって、パーティション２０８（１）に割り当てられればよい。また、キーｋ７もブルーム・フィルターにおいては発見されず、パーティション関数ｐ２  ２０６（２）によってデーターベース３の新たなパーティションに割り当てられる。キー８は興味深い事例である。何故なら、これは再区分の後に、しかも先に論じたようなブルーム・フィルター・エラーのために発生した新たなキーであり、メンバーとして誤分類され、このためパーティション関数ｐ１  ２０６（１）によってパーティション２０８（１）に割り当てられたからである。しかしながら、注記したように、これは、データーの完全性や、キーｋ８に対応するデーターを突き止める能力に伴う問題を起こすことはない。何故なら、ブルーム・フィルターは一貫してキーｋ８を誤認識し、したがって信頼性高くデーター要求を導くからである。
【００３６】
[0046]  更に、ここで説明する再区分プロセスは、連続するパーティション時期に対して複数回実行できることも注記しておく。図１〜図３に関して先に論じた概念は、複数の再パーティション処理を伴う、一般化された場合にも適用することができる。例えば、直前の例における以前の関数ｐ１が、以前の再区分に対応する異なる複合パーティション関数であってもよい。言い換えると、現行のパーティションの配置に対して作られた複合パーティション関数は、以前の配置に対する１つ以上の他の複合パーティション関数を組み込むことができる。
【００３７】
[0047]  更に例示するために、図４について検討する。図４は、１つ以上の実施態様によるデーターベース・システムの他のパーティションの配置例を全体的に４００で示す。具体的には、図４は、複数のデーターベース・パーティション（１からＮまで）および複数の再区分処理を一般化した場合を示し、各々が、パーティションの配置において既存のデーターを新たな位置への移動を生じさせない。この例では、データーベース・システムの寿命は、一連の連続パーティション時期（１からＭまで）を有することができる。各パーティション時期は、そのパーティション時期の間存在していたパーティションのデーターをどのように割り当てそして突き止めるかを定めるそれぞれのパーティション関数１２２に関連付けられている。加えて、再区分は、以前のパーティション時期の終端、および新しいパーティション時期の開始を表す。各時期の終端時に存在するキー・メンバーシップのブルーム・フィルターまたは他のレコードは、再区分の一部として作ることができる。つまり、異なるパーティション時期には、データー要求に適用すべき正しいパーティション関数１２２を認識するために使用することができる異なるキー・メンバーシップのレコードを関連付けることができる。
【００３８】
[0048]  現在のパーティション時期Ｍは、パーティション時期毎に参照２０６（１）．．．２０６（Ｍ）を有するパーティション関数ｐ１．．．ｐＭに基づいて、複数のハッシュの組み合わせである複合パーティション関数４０２によって管理される。加えて、参照３０４（１）．．．３０４（Ｍ−１）を有するキー・レコードｂ１．．．ｂＭ−１は、現在の時期の前にパーティション時期の各々に対して作られたとして図示されている。複合パーティション関数４０２は、キー値がキー・レコードの内いずれか１つにおいて発見されたか否かチェックし、次いで、キー・レコードの１つにおいてメンバーシップが判定されたときに対応するパーティション関数を適用するように構成することができる。１つの手法では、このチェックは、最も古い時期のキー・レコードをチェックすることから開始し、次いで一致が発見されるまで、最も古いものから最も新しいものまで各時期を進めていく。キー・レコードのいずれにおいても一致が発見されない場合、現在のパーティション関数ｐＭ（２０６（Ｍ））に対する現在の時期が選択され適用される。このコンテキストでは、複合パーティション関数４０２は次のように表すことができる。
【００３９】
ｋがフィルターｂ１において発見された場合、ｐ（ｋ）＝ｐ１（ｋ）と設定する。
または、ｋがフィルターｂ２において発見された場合、ｐ（ｋ）＝ｐ２（ｋ）と設定する。
【００４０】
介在する時期について評価を継続する。
または、ｋがフィルターｂＭ−１において発見された場合、ｐ（ｋ）＝ｐＭ−１（ｋ）と設定する。
【００４１】
または、ｐ（ｋ）＝ｐＭ（ｋ）と設定する。
この複合パーティション関数４０２の擬似コードによる表現は、次のようになる。
【００４２】
【表１】
0006588977.tif 000002
【００４３】
[0049]  以上の論述にしたがって、２つ以上のパーティション時期に選択的にパーティション関数を適用するように構成された複合パーティション関数は、現在の時期に対するデーターベース処理および要求を管理するように定めることができる。１つ以上の実施態様では、複合パーティション関数は、現在のパーティションの配置において全パーティションにわたって新たなデーター・レコードの実質的に等しい分布が得られるように構成される。しかしながら、再区分の時点に存在するデーターの分布によっては、新たなデーターの分配が容認可能な負荷均衡を生じる場合も、生じない場合もあり得る。何故なら、新たに追加されるパーティションは、古いデーターが既に格納されている既存のパーティションよりも遙かに多い利用可能な記憶空間を有する可能性があるからである。
【００４４】
[0050]  例えば、パーティション関数ｈａｓｈ（ｋ）ｍｏｄＮおよびｈａｓｈ（ｋ）ｍｏｄＮ’を使用して、Ｎ個のパーティションがＮ’個に拡張されたシステムについて検討する。この例に限って、図２および図３の例におけるように、それぞれ、Ｎ＝２およびＮ’＝３と仮定する。対応するパーティション関数ｐ１（ｋ）＝ｈａｓｈ（ｋ）ｍｏｄ２およびｐ２（ｋ）＝ｈａｓｈ（ｋ）ｍｏｄ３は、一部のデーターを新たなパーティション上に置くが、既存のパーティションの方が、再区分の時点における負荷条件のために、負荷が多い可能性が高い。したがって、この割り当ての結果、均衡を失ったシステムとなってしまうおそれがある。
【００４５】
[0051]  このため、本明細書において論ずる複合パーティション関数技法と併せて、再均衡化機能(rebalancing feature)も設けることができる。１つの手法では、再均衡化機能は、新たなデーターの割り当てを新たなパーティションおよび／または過小利用パーティションに偏らせるために、選択的にオンまたはオフに切り替えることができる選択肢として設けることができる。加えてまたは代わりに、利用可能なパーティション容量、要求のボリューム、データーの増加率等のような要因に基づいて、リソース・マネージャ１２０が自動的に再均衡化を実施するように構成することもできる。一般に、再均衡化機能は、新たなデーターを、他のパーティションよりも頻繁に、１つ以上の指定パーティションに割り当てさせるために、偏重係数(skew factor)を組み込むように構成された修正ハッシュ関数の使用を伴うことができる。例えば、偏重係数は、再区分処理の前に存在していた古いパーティションよりも、再構成された配置に追加された新たなパーティションに多くのデーターを割り当てるために、不均衡なデーター分配を行わせることができる。特定のパーティションに向けて割り当てを偏らせる種々の技法が考えられる。例えば、偏重係数は、ハッシュ関数が異なるパーティションを示しても、選択されたパーティションに要求を割り当てる設定変更可能な間隔(interval)を指定するように動作するのでもよい。つまり、この間隔で選択されたパーティションに要求を自動的に割り当てるように（例えば、２つおきまたは３つおきの要求）システムを設定することができる。他の手法では、パーティションの相対的な負荷に基づいて、最初は選択されたパーティションに多くの要求を割り当てるが、ときの経過と共に関数が徐々に均一な分配を行うことに戻ることができるように、偏重係数を動的に変更することもできる。例えば、偏重係数は、偏重係数の効果を、選択されたパーティションにデーターが埋まるにつれて、ときの経過と共に減少させる減衰関数にしたがって変化するのでもよい。
【００４６】
[0052]  他の手法では、偏重係数は、割り当てを配置における新たなパーティションに向けて偏倚させる(bias)スロッティング(slotting)の概念を使用する修正パーティション関数によって組み入れられる(implement)。ここでは、修正パーティション関数は、パーティション数よりも数が大きい複数のスロットを定める。次いで、新たなパーティションまたは選択されたパーティションがこれらのスロットの内１つよりも多くに割り当てられるように、スロットをパーティションに論理的に割り当てる。このハッシュ関数は、スロットを識別するデーターを戻し、データーを対応するパーティションに割り当てるように構成される。ハッシュ関数によって戻される値は、スロット数に及ぶので、１つのスロットだけに割り当てられたパーティションと比較して、スロットの内１つよりも多くに割り当てられたパーティションにデーターが一層頻繁に割り当てられることになる。
【００４７】
[0053]  例示するために、図５について検討する。図５は、１つ以上の実施態様にしたがってパーティションをスロットに割り当てる図を全体的に５００で示す。ここでは、図３における例の３つのパーティション２０８（０）、２０８（１）、２０８（１）が示されている。ある数のスロット５０２を定めて、パーティションに割り当てる。この例では、４つのスロット５０２を３つのパーティション２０８（０）、２０８（１）、２０８（２）に割り当て、パーティション２０８（０）およびパーティション２０８（１）（例えば、古いパーティション）の各々が１つのスロットに割り当てられ、パーティション２０８（２）（例えば、新しいパーティション）が２つのスロットに割り当てられる。
【００４８】
[0054]  先とは異なる一般形態ｐ（ｋ）＝ｈａｓｈ（ｋ）ｍｏｄＮを有するパーティション関数に対して、偏倚を実施するための修正は、Ｎの値をＳの値と置き換えることを伴う。ここで、Ｓはスロットの数である。加えて、実際のパーティションに戻されるスロット識別にマッピングするために、スロット割り当てを示すデーターを維持しなければならない。次いで、２ステップで区分を計算する。
【００４９】
（１）スロット＝ｈａｓｈ（ｋ）ｍｏｄＳを計算する。ここで、Ｓはスロットの数である。
（２）スロット割り当てを示すデーターを使用して、スロットをパーティションにマッピングする。
【００５０】
[0055]  新たなデーターが到達するに連れて、より多くのキーが新たなパーティションにマッピングされ、したがって、新たなパーティションは、古いパーティションよりも高い速度で埋められて行き、多くの負荷を引き受ける。最終的に、システムはパーティション間の均衡に近づくことができ、その時点で、新しい方のパーティションに向けて偏らせ続けると、不均衡に戻る原因となるおそれがある。この場合、新しい方のパーティションが過剰な負荷にサービスすることになる。この問題に取り組むために、本明細書において説明したような他の再区分処理を実行することができる。これは、同じパーティションを使用するが、偏重ハッシュ関数から、スロットや偏重係数を使用しない「標準的な」関数への切り替えを行わせる。ここでは、より多くの容量を追加せずに、パーティション関数を変更／更新するために、追加の再区分を行う。この追加の再区分の後、システムは均衡が取れそして拡張される。
手順例
[0056]  以下の論出では、既に説明したシステムおよびデバイスを利用して実現することができる技法について説明する。手順の各々の態様は、ハードウェア、ファームウェア、またはソフトウェア、あるいはこれらの組み合わせで実現することができる。手順は、１つ以上のデバイスによって実行される動作を指定する１組のブロックとして示され、それぞれのブロックによって動作を実行するために示される順序には必ずしも限定されない。以下の論述の一部では、図１の環境１００および図２〜図５の例を引用する場合もある。一例として、手順の態様は、リソース１１８および／またはリソース・マネージャ１２０を提供するように構成されたサービス・プロバイダー１０６に関連する１つ以上のサーバー・デバイスによってというように、相応しく構成されたコンピューティング・デバイスによって実行することができる。
【００５１】
[0057]   図１〜図５の例に関係付けて説明した機能、特徴、および概念は、ここで説明する手順のコンテキストにおいても採用することができる。更に、以下で異なる手順に関係付けて説明する機能、特徴、および概念は、異なる手順間で相互交換することができ、個々の手順のコンテキストにおける実施に限定されるのではない。更に、この説明における異なる代表的手順および対応する図に関連するブロックは、一緒に適用すること、および／または異なる方法で組み合わせることもできる。したがって、異なる環境例、デバイス例、コンポーネント例、および手順例に関係付けて本文書全体において説明する個々の機能、特徴、および概念は、適した組み合わせであればいずれにおいても使用することができ、列挙した例によって表される特定の組み合わせに限定されるのではない。
【００５２】
[0058]  図６は、複合パーティション関数が、１つ以上の実施態様にしたがって定められる手順例６００を示す流れ図である。第１パーティション関数を用いてデーターベースを区分する（ブロック６０２）。例えば、リソース・マネージャ１２０が、既に論じたように、リソース１１８に関連付けられたデーターベース１２４を管理するように動作するのでもよい。データーベース１２４を複数のパーティション１２６に分割することができる。パーティション１２６は、リソース・マネージャ１２０またはこれ以外によって実装されるパーティション関数１２２によって定められ、および／または管理される。
【００５３】
[0059]  次いで、データーベースを再区分する（ブロック６０４）。再区分は、自動的に開始すること、またはユーザーの指令で開始することもできる。再区分を実行できるのは、既存のパーティションの配置の記憶容量が閾値利用レベルに達したときである。この場合、再区分は、更に多くの記憶容量を追加することを伴えばよい。加えてまたは代わりに、本明細書において論じたようにパーティションの均衡を取り直す、特定の割り当て目標を達成するためにパーティション関数を変更する、均衡が取れた割り当てに戻すために偏ったハッシュ関数を取り消す等のような他の理由のために、再区分を実行してもよい。
【００５４】
[0060]  再区分の一部として、再区分の時点において存在するパーティション内に位置するデーター・エントリーに対してキー・メンバーシップのレコードを作成し（ブロック６０６）、第２パーティション関数に関連付けられた１つ以上の新たなパーティションを追加する（６０８）。本明細書において既に論じたようにキー・メンバーシップのレコードを実装するためには、種々の技法を使用することができる。例えば、ブルーム・フィルターまたは他の圧縮データー構造を使用して、再区分の時点において存在するパーティション内に位置するデーター・エントリーに関連付けられたキー値またはその他の適した識別子を記録することができる。更に、記憶容量を増加し、パーティションの新たな配置を作成するために、新たなパーティションを追加することもできる。本明細書において論ずるように、パーティションの新たな配置は、新たなパーティションを処理する(account for)第２パーティション関数と関連付けられ、新旧双方のパーティションにまたがって新たなデーターを分配するように構成されている。
【００５５】
[0061]  加えて、以後のデーターベース処理のために複合パーティション関数を定める。複合パーティション関数は、キー・メンバーシップのレコードにおいて発見されたキー値を有するデーターに対して第１パーティション関数を適用し、またはキー・メンバーシップのレコードにおいて発見されないキー値を有するデーターに対して第２パーティション関数を適用するように構成されている（ブロック６１０）。次いで、データーベースに関連するデーター要求を管理するために、複合パーティション関数を適用する（ブロック６１２）。一般に、複合パーティション関数は、キー・メンバーシップの１つまたは複数のレコードを利用して、データーに対するキー値／識別子を、異なるパーティション時期に関連付けられた対応するパーティション関数にマッピングするように構成される。次いで、複合パーティション関数の適用によって戻された、対応するパーティション関数にしたがって、データー要求を処理することができる。本明細書において論じた複合パーティション関数手法を使用することによって、再区分の時点において存在していたパーティション内に位置するデーター・エントリーがそれらのそれぞれの位置を保持するように、再区分を実行することが可能になる。言い換えると、古いデーターは移動させられない。手順６００と関連付けて採用することができる複合パーティション関数に関する種々の詳細および例については、既に図１〜図５に関して論じた。
【００５６】
[0062]  図７は、１つ以上の実施態様にしたがって、要求をパーティションの配置に導くために複合パーティション関数を使用する手順例７００を示す流れ図である。データーベースの１つ以上のパーティションの第１配置に関連付けられた第１パーティション関数に対応するデーターに対して、識別子のレコードを作る（ブロック７０２）。識別子のレコードは、本明細書において説明したようなブルーム・フィルターとして、または１つ以上のパーティションの配置に関するデーターのメンバーシップを示すために使用することができる他の適したデーター構造（例えば、パーティション時期）として構成することができる。識別子は、本明細書において論じたようなキー値として構成することができるが、識別ストリング、データー・コンテンツに対するハッシュ値等のような、他の識別子も考えられる。１つ以上のパーティションの第１配置(arrangement)は、データーベースの初期構成(configuration)（例えば、最初のパーティション時期）に対応するのでもよい。加えてまたは代わりに、１つ以上のパーティションの第１配置は、以前の時期に対する配置の再区分の結果生じるのでもよく、この場合、第１パーティション関数は複合関数として構成することができる。
【００５７】
[0063]  少なくとも１つの追加のパーティションを追加して、再構成された(reconfigured)配置における記憶容量を増加させるために、データーベースに対するパーティションの配置を再構成する（ブロック７０４）。ここでは、再区分は、追加の容量をシステムに追加するために、先に論じたように行うことができる。再区分の結果、最初の配置よりも多いパーティションを有することができる構成された配置(reconfigured arrangement)が得られる。したがって、第１配置に関連付けられた第１パーティション関数と再構成された配置に関連付けられた第２パーティション関数とを組み合わせた複合パーティション関数が生成される。複合パーティション関数は、データーベースに対するデーター要求をこれらのパーティション間で導くために、識別子のレコードを使用して、第１パーティション関数または第２パーティション関数のどちらを適用するか確認するように構成されている（ブロック７０６）。次いで、複合パーティション関数を使用してデーター要求を導く（ブロック７０８）。既に説明したように、異なるパーティションの配置に関連付けられた２つ以上の連続パーティション時期を処理する複合パーティション関数を生成することができる。異なる配置を異なる個々のパーティション関数および／または異なる数のパーティションに関連付けることができる（しかし、あるシナリオでは、同じ数のパーティションが２つ以上の時期に使用されることもある（例えば、再均衡化））。また、異なる時期／配置を、特定の時期内にあるデーター／要求のメンバーシップを認識するために使用することができるそれぞれの識別子のレコードと関連付けることもできる。次いで、しかるべきパーティション関数をデーター／要求にマッピングし、データー／要求を対応するパーティションに導くために使用する。複合パーティション関数は、連続するパーティション時期に関連付けられた２つ以上のパーティション関数を組み合わせるように構成され、各パーティション時期は、データーベースに対する特定のパーティションの配置に対応する。手順７００と関連付けて採用することができる複合パーティション関数に関する種々の更なる詳細および例については、既に図１〜図６に関して論じた。
【００５８】
[0064]  以上、いくつかの手順例について検討したので、１つ以上の実施態様において本明細書で説明した技法の態様を実現するために採用することができるシステムおよびデバイス例の論述についてこれより検討する。
システムおよびデバイス例
[0065]  図８は、本明細書において説明した種々の技法を実現することができる１つ以上のコンピューティング・システムおよび／またはデバイスを表すコンピューティング・デバイス例８０２を含むシステム例を、全体的に８００で示す。コンピューティング・デバイス８０２は、例えば、サービス・プロバイダーのサーバー、クライアントに関連するデバイス（例えば、クライアント・デバイス）、オンチップ・システム、および／または任意の他の適したコンピューティング・デバイスまたはコンピューティング・システムであってもよい。
【００５９】
[0066]  図示するコンピューティング・デバイス例８０２は、処理システム８０４、１つ以上のコンピューター読み取り可能媒体８０６、および１つ以上のＩ／Ｏインターフェース８０８を含み、これらは互いに通信可能に結合されている。図示しないが、コンピューティング・デバイス８０２は、更に、種々のコンポーネントを互いに結合するシステム・バスまたは他のデーターおよびコマンド転送システムも含むことができる。システム・バスは、メモリー・バスまたはメモリー・コントローラー、周辺バス、ユニバーサル・シリアル・バス、および／または種々のバス・アーキテクチャの内任意のものを利用するプロセッサー・バスまたはローカル・バスというような、異なるバス構造の内任意の１つまたは組み合わせを含むことができる。制御ラインおよびデーター・ラインというような、種々の他の例も考えられる。
【００６０】
[0067]  処理システム８０４は、ハードウェアを使用して１つ以上の動作を実行する機能を表す。したがって、処理システム８０４は、プロセッサー、機能ブロック等として構成することができるハードウェア・エレメント８１０を含むように示されている。これは、特定用途集積回路、または１つ以上の半導体を使用して形成される他のロジック・デバイスのような、ハードウェアによる実装を含んでもよい。ハードウェア・エレメント８１０は、これらが形成される材料にも、処理メカニズムが内部で採用されている用具(material)にも限定されない。例えば、プロセッサーは、半導体（１つまたは複数）および／またはトランジスター（例えば、電子集積回路（ＩＣ））で構成されてもよい。このようなコンテキストでは、プロセッサー実行可能命令は、電子的実行可能命令となることができる。
【００６１】
[0068]  コンピューター読み取り可能媒体８０６は、メモリー／ストレージ８１２を含むように示されている。メモリー／ストレージ８１２は、１つ以上のコンピューター読み取り可能媒体に関連するメモリー／記憶容量を表す。メモリー／ストレージ８１２は、揮発性媒体（ランダム・アクセス・メモリー（ＲＡＭ）のような媒体）、および／または不揮発性媒体（リード・オンリー・メモリー（ＲＯＭ）、フラッシュ・メモリー、光ディスク、磁気ディスク等のような媒体）を含むことができる。メモリー／ストレージ８１２は、固定媒体（例えば、ＲＡＭ、ＲＯＭ、固定ハード・ドライブ等）、およびリムーバブル媒体（例えば、フラッシュ・メモリー、リムーバブル・ハード・ドライブ、光ディスク等）を含むことができる。コンピューター読み取り可能媒体８０６は、以下で更に説明するように、種々の他の方法で構成することもできる。
【００６２】
[0069]  入力／出力インターフェース（１つまたは複数）８０８は、ユーザーがコマンドおよび情報をコンピューティング・デバイス８０２に入力することを可能にし、更に種々の入力／出力デバイスを使用して、ユーザーおよび／または他のコンポーネントあるいはデバイスに情報を提示することを可能にする機能を表す。入力デバイスの例には、キーボード、カーソル制御デバイス（例えば、マウス）、マイクロフォン、スキャナー、タッチ機能（例えば、物理的接触を検出するように構成された容量性または他のセンサ）、カメラ（例えば、可視波長または赤外線周波数のような非可視波長を採用して、タッチを伴わない動きをジェスチャとして検出することができるもの）等が含まれる。出力デバイスの例には、ディスプレイ・デバイス（例えば、モニターまたはプロジェクタ）、スピーカー、プリンター、ネットワーク・カード、接触応答デバイス等が含まれる。つまり、コンピューティング・デバイス８０２は、ユーザーの対話処理をサポートするために、以下で更に説明するような、種々の方法で構成することができる。
【００６３】
[0070]  本明細書では、ソフトウェア、ハードウェア・エレメント、またはプログラム・モジュールという一般的なコンテキストで種々の技法を記述することができる。一般に、このようなモジュールは、ルーチン、プログラム、オブジェクト、エレメント、コンポーネント、データー構造等を含み、特定のタスクを実行するかまたは特定の抽象データー型を実装する。「モジュール」、「機能」、および「コンポーネント」という用語は、本明細書において使用される場合、一般に、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。本明細書において説明した技法の特徴は、プラットフォーム独立である。これが意味するのは、種々のプロセッサーを有する種々の商用コンピューティング・プラットフォーム上で本技法を実現できるということである。
【００６４】
[0071]  説明したモジュールおよび技法の実施態様(implementation)には、何らかの形態のコンピューター読み取り可能媒体上に格納すること、またはこの媒体を通じて送信することができるものもある。コンピューター読み取り可能媒体は、コンピューティング・デバイス８０２によってアクセスすることができる種々の媒体を含むことができる。一例として、そして限定ではなく、コンピューター読み取り可能媒体は「コンピューター読み取り可能記憶媒体」および「通信媒体」を含むことができる。
【００６５】
[0072]  「コンピューター読み取り可能記憶媒体」とは、単なる信号送信、搬送波、または信号自体とは対照的に、情報の格納を可能にする媒体および／またはデバイスを指す。つまり、コンピューター読み取り可能記憶媒体は、信号担持媒体も信号自体も含まない。コンピューター読み取り可能記憶媒体は、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体および／または記憶デバイスのようなハードウェアを含み、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、論理エレメント／回路、または他のデーターのような情報の格納に適した方法または技術で実現される。コンピューター読み取り可能記憶媒体の例には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリーまたは他のメモリー技術、ＣＤ−ＲＯＭ、ディジタル・バーサタイル・ディスク（ＤＶＤ）または他の光ストレージ、ハード・ディスク、磁気カセット、磁気テープ、磁気ディスク記憶デバイスまたは他の磁気記憶デバイス、あるいはその他の記憶デバイス、有形媒体、あるいは所望の情報を格納するのに適しており、コンピューターによってアクセスすることができる製品を含むことができるが、これらに限定されるのではない。
【００６６】
[0073]  「通信媒体」とは、ネットワークを通じてというようにして、コンピューティング・デバイス８０２のハードウェアに命令を送信するように構成された信号担持媒体を指すとして差し支えない。通信媒体は、通例、搬送波のような変調データー信号、データー信号、または他の移送メカニズムに、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、またはその他のデーターを具体化することができる。また、信号媒体は任意の情報配信媒体も含む。「変調データー信号」という用語は、信号内に情報をエンコードする方法でその特性の１つ以上が設定または変更させられた信号を意味する。一例として、そして限定ではなく、通信媒体は、有線ネットワークまたは直接有線接続のような有線媒体と、音響、ＲＦ、赤外線、およびその他のワイヤレス媒体のようなワイヤレス媒体とを含む。
【００６７】
[0074]  既に説明したように、ハードウェア・エレメント８１０およびコンピューター読み取り可能媒体８０６は、命令、モジュール、プログラマブル・デバイス・ロジック、および／または固定デバイス・ロジックを表し、本明細書において説明した技法の少なくとも一部の態様を実現するために一部の実施形態において採用することができるハードウェア形態で実現される。ハードウェア・エレメントは、集積回路またはオンチップ・システム、特定用途集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、複合プログラマブル・ロジック・デバイス（ＣＰＬＤ）、およびシリコンまたはその他のハードウェア・デバイスにおけるその他の実施態様のコンポーネントを含むことができる。このコンテキストでは、ハードウェア・エレメントは、プログラム・タスクを実行する処理デバイスとして動作することができ、タスクは、ハードウェア・エレメント、および実行のための命令を格納するために利用されるハードウェア・デバイス、例えば、既に説明したコンピューター読み取り可能記憶媒体によって具体化される、命令、モジュール、および／またはロジックによって定められる。
【００６８】
[0075]  以上のものの組み合わせも、本明細書において説明した種々の技法およびモジュールを実現するために採用することができる。したがって、アプリケーション１１２、通信モジュール１１４、リソース・マネージャ１２０、およびその他のプログラム・モジュールを含むソフトウェア、ハードウェア、またはプログラム・モジュールは、何らかの形態のコンピューター読み取り可能記憶媒体上に実現することができ、および／または１つ以上のハードウェア・エレメント８１０によって具体化された１つ以上の命令および／またはロジックとして実現することができる。コンピューティング・デバイス８０２は、ソフトウェアおよび／またはハードウェア・モジュールに対応する特定の命令および／または機能を実装するように構成することができる。したがって、コンピューティング・デバイス８０２によってソフトウェアとして実行可能なモジュールとしてのモジュールの実装は、少なくとも部分的にハードウェアで、例えば、コンピューター読み取り可能記憶媒体および／または処理システムのハードウェア・エレメント８１０の使用によって達成することができる。命令および／または機能は、本明細書において説明した技法、モジュール、および例を実現するために、１つ以上の製品（例えば、１つ以上のコンピューティング・デバイス８０２および／または処理システム８０４）によって実行可能／動作可能にすることもできる。
【００６９】
[0076]  更に図８に示すように、システム例８００は、パーソナル・コンピューター（ＰＣ）、テレビジョン・デバイス、および／または移動体デバイス上においてアプリケーションを実行するとき、継ぎ目のないユーザー体験のためのユビキタス環境を可能にする。アプリケーションを利用しながら、ビデオ・ゲームをプレーしながら、ビデオを見ながら等で１つのデバイスから次のデバイスに移るとき、サービスおよびアプリケーションは共通のユーザー体験のために３つの環境全てにおいて実質的に同様に実行する。
【００７０】
[0077]  システム例８００では、複数のデバイスが中央コンピューティング・デバイスを介して相互接続されている。中央コンピューティング・デバイスは、複数のデバイスに対してローカルでもよく、または複数のデバイスから離れて配置されてもよい。一実施形態では、中央コンピューティング・デバイスは、ネットワーク、インターネット、または他のデーター通信リンクを通じて複数のデバイスに接続された１つ以上のサーバー・コンピューターを擁するクラウドであってもよい。
【００７１】
[0078]  一実施形態では、この相互接続アーキテクチャは、共通の継ぎ目のない体験を複数のデバイスのユーザーに提供するために、複数のデバイスにまたがって機能を配信する(deliver)ことを可能にする。複数のデバイスの各々は、異なる物理的要件および能力を有しても良く、中央コンピューティング・デバイスは、デバイスへの体験の配信を可能にするプラットフォームを使用する。この体験は、そのデバイスに合わせて特別に作られる(tailored)が、しかも全てのデバイスに共通でもある。一実施形態では、ターゲット・デバイスのクラスが作成され、体験は包括的なデバイスのクラスに合わせて特別に作られる。デバイスのクラスは、物理的特徴、使用の形式、または他の共通するデバイスの特性によって定められてもよい。
【００７２】
[0079]  種々の実施態様において、コンピューティング・デバイス８０２は、コンピューター８１４、移動体８１６、およびテレビジョン８１８の使用に合わせてというように、種々の異なる構成を取ることができる。これらの構成の各々は、全体的に異なる構造および能力を有する可能性があるデバイスを含み、したがって、コンピューティング・デバイス８０２は、異なるデバイス・クラスの１つ以上にしたがって構成することができる。例えば、コンピューティング・デバイス８０２は、パーソナル・コンピューター、デスクトップ・コンピューター、マルチスクリーン・コンピューター、ラップトップ・コンピューター、ネットブック等を含む、コンピューター８１４クラスのデバイスとして実現することもできる。
【００７３】
[0080]  また、コンピューティング・デバイス８０２は、移動体電話機、携帯用音楽プレーヤー、携帯用ゲーミング・デバイス、タブレット・コンピューター、マルチスクリーン・コンピューター等のような、移動体デバイスを含む移動体８１６クラスのデバイスとして実現することもできる。また、コンピューティング・デバイス８０２は、日常的な視聴環境において通常もっと大きな画面を有するデバイスまたはこれに接続されたデバイスを含むテレビジョン８１８クラスのデバイスとして実現することもできる。これらのデバイスは、テレビジョン、セットトップ・ボックス、ゲーミング・コンソール等を含む。
【００７４】
[0081]  本明細書において説明した技法は、コンピューティング・デバイス８０２のこれら種々の構成によってサポートすることができ、本明細書において説明した技法の具体的な例に限定されるのではない。これは、コンピューティング・デバイス８０２上にリソース・マネージャ１２０を含ませることによって例示されている。また、リソース・マネージャ１２０およびその他のモジュールの機能は、全体的にまたは部分的に、以下で説明するように、プラットフォーム８２２を介して「クラウド」８２０上においてというように、分散型システムの使用によって実現することもできる。
【００７５】
[0082]  クラウド８２０は、リソース８２４のためのプラットフォーム８２２を含む、および／または表す。プラットフォーム８２２は、クラウド８２０のハードウェア（例えば、サーバー）およびソフトウェア・リソースの基礎機能を抽象化する。リソース８２４は、コンピューティング・デバイス８０２から離れたサーバー上でコンピューター処理が実行されている間に利用することができるアプリケーションおよび／またはデーターを含むことができる。また、リソース８２４は、インターネットを通じて、および／またはセルラまたはＷｉ−Ｆｉネットワークのような加入者ネットワークを通じて提供されるサービスも含むことができる。
【００７６】
[0083]  プラットフォーム８２２は、コンピューティング・デバイス８０２を他のコンピューティング・デバイスと接続するためのリソースおよび機能を抽象化することができる。また、プラットフォーム８２２は、プラットフォーム８２２を介して実装されるリソース８２４に対して出される要求(demand)に合わせて、対応するレベルの規模(scale)を与えるために、リソースの規模調整(scaling)を抽象化する役割を果たすこともできる。したがって、相互接続されたデバイスの実施形態では、本明細書において説明した機能の実装は、システム８００全域にわたって分散することができる。例えば、機能は、部分的にコンピューティング・デバイス８０２上に実装され、更にクラウド８２０の機能を抽象化するプラットフォーム８２２を介して実装されてもよい。
実施態様例
[0084]  本明細書において説明した複合パーティション関数の実施態様例は、以下の例の内の１つ、またはその１つ以上の任意の組み合わせを含むが、それらに限定されるのではない。
【００７７】
[0085]  コンピューティング・デバイスによって実行される方法は、第１パーティション関数によってデーターベースを区分するステップと、データーベースを再区分するステップとを含む。データーベースを再区分するステップは、再区分の時点において存在するパーティション内に位置するデーター・エントリーに対してキー・メンバーシップのレコードを作成するステップと、第２パーティション関数に関連付けられた１つ以上の新たなパーティションを追加するステップと、後続のデーターベース処理のために複合パーティション関数を定めるステップとによって行われる。複合パーティション関数は、キー・メンバーシップのレコードにおいて発見されたキー値を有するデーターに対して第１パーティション関数を適用する、またはキー・メンバーシップのレコードにおいて発見されないキー値を有するデーターに対して第２パーティション関数を適用するように構成される。
【００７８】
[0086]  以上で説明した方法において、再区分の時点において存在するパーティション内に位置するデーター・エントリーがそれらのそれぞれの位置を保持するように、再区分が実行される。
【００７９】
[0087]  以上で説明した方法において、キー・メンバーシップのレコードは、再区分の時点において存在するパーティション内に位置するデーター・エントリーに関連付けられたキー値を記録するように構成される。
【００８０】
[0088]  以上で説明した方法において、キー・メンバーシップのレコードは、再区分の時点においてデーターベース内に存在するデーター・エントリーに対応するキーを識別するように構成された圧縮データー構造を含む。
【００８１】
[0089]  以上で説明した方法において、キー・メンバーシップのレコードはブルーム・フィルターを含む。
[0090]  以上で説明した方法において、複合パーティション関数は、連続するパーティション時期に関連付けられた２つ以上のパーティション関数を組み合わせるように構成され、各パーティション時期が、データーベースに対する特定のパーティションの配置に対応する。
【００８２】
[0091]  以上で説明した方法において、第１パーティション関数および第２パーティション関数は、ハッシュ関数として構成され、データー要求に対するキー値に適用されたとき、キー値に対応するデーターベースのパーティションを識別するデーターを戻す。
【００８３】
[0092]  以上で説明した方法において、第１パーティション関数は、追加の記憶容量を追加するためのデーターベースの以前の再区分のために作られた以前の複合関数を含み、定められた複合パーティション関数は、キー・メンバーシップのレコードにおいて発見されたキー値を有するデーターに対して以前の複合関数を適用し、その他のデーターに対して第２パーティション関数を適用するように構成される。
【００８４】
[0093]  以上で説明した方法において、複合(combined)パーティション関数は、データーベースのパーティションにわたるデーター分布の均衡を取るために、新たなパーティション上の新たなデーター・エントリーの配置に向けてデーターの割り当てを偏倚させるように構成される
[0094]  以上で説明した方法において、複合パーティション関数は、新たなデーター・エントリーに対する少なくとも一部のキー値を、キー・メンバーシップのレコードにおいて発見されたものとして誤認識し、誤認識されたキー値に関連付けられたデーター・エントリーが、再区分の時点において存在するパーティションに割り当てられ、一貫してその内部で突き止められるようにする。
【００８５】
[0095]  コンピューティング・デバイスは、処理システムと、１つ以上のモジュールとを含み、処理システムによってモジュールが実行されると、記憶容量を増加させるためのデーターベースの再区分のための動作を実行する。この動作は、再区分の時点において存在するデーターベースのパーティション内に位置するデーター・エントリーに対してキー・メンバーシップのレコードを作成し、再区分の時点において存在するデーターベースのパーティションが第１パーティション関数と関連付けられ、第２パーティション関数に関連付けられた新たなパーティションを追加し、複合パーティション関数を後続のデーターベース要求処理のために定める動作を含む。複合パーティション関数は、再再区分の時点において存在するパーティション内に位置するデーター・エントリーが、再区分の時点において存在するパーティションにおいてそれらのそれぞれの位置を保持するように、キー・メンバーシップのレコードにおいて発見されたキー値を含むデーター要求に対して第１パーティション関数を適用し、またはキー・メンバーシップのレコードにおいて発見されないキー値を含むデーター要求に対して第２パーティション関数を適用するように構成される。
【００８６】
[0096]  以上のコンピューティング・デバイスにおいて、キー・メンバーシップのレコードは、再区分の時点において存在するデーター・エントリーに関連付けられたキーに対して設定されたビット値を有するブルーム・フィルターとして構成され、ブルーム・フィルターを介して、キーに対するメンバーシップを示す。
【００８７】
[0097]  以上のコンピューティング・デバイスにおいて、ブルーム・フィルターは、設定変更可能な許容度にしたがって偽陽性エラーを生じ、再区分の後に作成されたデーター・エントリーの少なくとも一部を誤認識させ、第１パーティション関数を使用して処理させる。誤認識されたデーター・エントリーが第１パーティション関数を使用して信頼性高く突き止められるように、偽陽性エラーには一貫性があり、ブルーム・フィルターの簡潔さの度合いは設定変更可能な許容度に依存する。
【００８８】
[0098]  以上のコンピューティング・デバイスにおいて複合パーティション関数は、データーベースを再区分するために、第２パーティション関数を、複数の以前の動作に関連付けられた複数の個々のパーティション関数と組み合わせるように構成される。  
【００８９】
[0099]  以上のコンピューティング・デバイスにおいて、第２パーティション関数は、再区分の時点に存在するデーターベースのパーティションおよび新たなパーティションに跨がってデーターを割り当てるように構成される。
【００９０】
[00100]  コンピューティング・デバイスによって実行される方法は、データーベースに対する１つ以上のパーティションの第１配置に関連付けられた第１パーティション関数に対応するデーターに対して識別子のレコードを作るステップと、少なくとも１つの追加のパーティションを追加して再構成された配置において記憶容量を増加させるために、データーベースに対するパーティションの配置を再構成するステップと、第１配置に関連付けられた第１パーティション関数と再構成された配置に関連付けられた第２パーティション関数とを組み合わせる複合パーティション関数を生成するステップであって、複合パーティション関数が、データーベースに対するデーター要求をこれらのパーティション間で導くために、識別子のレコードを使用して、第１パーティション関数または第２パーティション関数のどちらを適用するか確認するように構成される、ステップと、複合パーティション関数を使用してデーター要求を導くステップとを含む。
【００９１】
[00101]  以上で説明した方法において、複合パーティション関数を使用してデーター要求を導出するステップは、データー要求毎に、識別子のレコードを使用して、データー要求に関連付けられた識別子が識別子のレコードに含まれているか否か確認するステップと、識別子が含まれるとき、第１パーティション関数を使用してデーター要求を導出するステップと、または、識別子が含まれていない場合、第２パーティション関数を使用してデーター要求を導出するステップとを含む。
【００９２】
[00102]  以上で説明した方法において、データー要求は、データーベースのパーティションにおいてデーター・エントリーにアクセスする、追加する、または修正する要求を含む。
【００９３】
[00103]  以上で説明した方法において、再区分よりも前に存在するデーター・エントリーは、再区分の結果として、異なる位置に移動されない。
[00104]  以上で説明した方法において、第２パーティション関数は、偏重係数を組み込むように構成された修正ハッシュ関数を含み、偏重係数は、再構成された配置に追加された少なくとも１つの追加のパーティションへの新たなデーターの割り当てを、第１配置に対して存在する１つ以上のパーティションに対するよりも頻繁に行わせる。
【００９４】
結論
[00105]  以上、構造的特徴および／または方法論的アクトに特定的な文言で主題について説明したが、添付する特許請求の範囲において定められる主題は、必ずしも、説明した具体的な特徴やアクトには限定されないことは理解されてしかるべきである。逆に、具体的な特徴やアクトは、特許請求する主題を実現する形態例として開示したまでである。
【図１】
0006588977.tif 000003
【図２】
0006588977.tif 000004
【図３】
0006588977.tif 000005
【図４】
0006588977.tif 000006
【図５】
0006588977.tif 000007
【図６】
0006588977.tif 000008
【図７】
0006588977.tif 000009
【図８】
0006588977.tif 000010