特許第6588977号(P6588977)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マイクロソフト テクノロジー ライセンシング,エルエルシーの特許一覧

<>
  • 特許6588977-複合パーティション関数 図000003
  • 特許6588977-複合パーティション関数 図000004
  • 特許6588977-複合パーティション関数 図000005
  • 特許6588977-複合パーティション関数 図000006
  • 特許6588977-複合パーティション関数 図000007
  • 特許6588977-複合パーティション関数 図000008
  • 特許6588977-複合パーティション関数 図000009
  • 特許6588977-複合パーティション関数 図000010
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6588977
(24)【登録日】2019年9月20日
(45)【発行日】2019年10月9日
(54)【発明の名称】複合パーティション関数
(51)【国際特許分類】
   G06F 16/13 20190101AFI20191001BHJP
【FI】
   G06F16/13 100
   G06F16/13 200
【請求項の数】14
【全頁数】28
(21)【出願番号】特願2017-522107(P2017-522107)
(86)(22)【出願日】2015年10月14日
(65)【公表番号】特表2017-538194(P2017-538194A)
(43)【公表日】2017年12月21日
(86)【国際出願番号】US2015055413
(87)【国際公開番号】WO2016064629
(87)【国際公開日】20160428
【審査請求日】2018年10月12日
(31)【優先権主張番号】14/519,952
(32)【優先日】2014年10月21日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100140109
【弁理士】
【氏名又は名称】小野 新次郎
(74)【代理人】
【識別番号】100118902
【弁理士】
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100106208
【弁理士】
【氏名又は名称】宮前 徹
(74)【代理人】
【識別番号】100120112
【弁理士】
【氏名又は名称】中西 基晴
(74)【代理人】
【識別番号】100138759
【弁理士】
【氏名又は名称】大房 直樹
(72)【発明者】
【氏名】コリッキ,ヤツェク・アー
(72)【発明者】
【氏名】ヴァン・ブリンク,デーヴィッド・エイ
【審査官】 甲斐 哲雄
(56)【参考文献】
【文献】 特開2006−293981(JP,A)
【文献】 米国特許第8793250(US,B1)
【文献】 国際公開第2013/061680(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00−16/958
(57)【特許請求の範囲】
【請求項1】
コンピューティング・デバイスによって実現される方法であって、
第1パーティション関数を用いてデーターベースを区分するステップと、
前記データーベースを再区分するステップであって、
再区分の時点において存在するパーティション内に位置するデーター・エントリーに対してキー・メンバーシップのレコードを作成し、
第2パーティション関数に関連付けられた1または複数の新たなパーティションを追加し、
後続のデーターベース処理のために複合パーティション関数を定める
ことによって、前記データーベースを再区分するステップと、
を含み、
前記複合パーティション関数は、
前記キー・メンバーシップのレコードにおいて発見されるキー値を有するデーターに対して前記第1パーティション関数を適用し、
前記キー・メンバーシップのレコードにおいて発見されないキー値を有するデーターに対して前記第2パーティション関数を適用する
ように構成され、
前記再区分は、前記再区分の時点において存在するパーティション内に位置する前記データー・エントリーがそれぞれの位置を保持するように実行される、
方法。
【請求項2】
前記キー・メンバーシップのレコードは、前記再区分の時点において存在する前記パーティション内に位置するデーター・エントリーに関連付けられたキー値を記録するように構成される、請求項1に記載の方法。
【請求項3】
前記キー・メンバーシップのレコードは、前記再区分の時点において前記データーベース内に存在するデーター・エントリーに対応するキーを識別するように構成された圧縮データー構造を含む、請求項1に記載の方法。
【請求項4】
前記キー・メンバーシップのレコードはブルーム・フィルターを含む、請求項1に記載の方法。
【請求項5】
前記複合パーティション関数は、連続するパーティション配置に関連付けられた2つ以上のパーティション関数を組み合わせるように構成される、請求項1に記載の方法。
【請求項6】
前記第1パーティション関数および前記第2パーティション関数は、データー要求に対するキー値に適用されたときに前記キー値に対応する前記データーベースのパーティションを識別するデーターを戻すハッシュ関数として構成される、請求項1に記載の方法。
【請求項7】
前記第1パーティション関数は、付加的な記憶容量を追加するための前記データーベースの以前の再区分のために作られた以前の複合関数を含み、前記複合パーティション関数は、前記キー・メンバーシップのレコードにおいて発見されるキー値を有するデーターに対して前記以前の複合関数を適用し、その他のデーターに対して前記第2パーティション関数を適用するように構成される、請求項1に記載の方法。
【請求項8】
前記複合パーティション関数は、前記データーベースのパーティションにわたるデーターの分布の均衡を取るために、前記新たなパーティション上における新たなデーター・エントリーの配置に向けたデーターの割り当てを偏倚させるように構成される、請求項1に記載の方法。
【請求項9】
前記複合パーティション関数は、新たなデーター・エントリーに対する少なくともいくつかのキー値を前記キー・メンバーシップのレコードにおいて発見されたものとして誤認識し、その結果、誤認識されたキー値に関連付けられたデーター・エントリーが、前記再区分の時点において存在する前記パーティションに割り当てられ、前記パーティション内に整合的に配置される、請求項1に記載の方法。
【請求項10】
処理システムと、
前記処理システムによって実行されると、記憶容量を増加させるようにデーターベースの再区分のための動作を実行する1つまたは複数のモジュールと、
を備えるコンピューティング・デバイスであって、
前記動作は、
前記再区分の時点において存在する前記データーベースのパーティション内に位置するデーター・エントリーに対してキー・メンバーシップのレコードを作成するステップであって、再区分の時点において存在する前記データーベースのパーティションは第1パーティション関数と関連付けられる、ステップと、
第2パーティション関数に関連付けられた新たなパーティションを追加するステップと、
後続のデーターベース要求の処理のために複合パーティション関数を定めるステップと、
を含み、
前記複合パーティション関数は、
前記キー・メンバーシップのレコードにおいて発見されるキー値を含むデーター要求に対して前記第1パーティション関数を適用し、
前記キー・メンバーシップのレコードにおいて発見されないキー値を含むデーター要求に対して前記第2パーティション関数を適用し、
その結果、前記再区分の時点において存在するパーティション内に位置するデーター・エントリーが、前記再区分の時点において存在する前記パーティションにおけるそれぞれの位置を保持する
ように構成される、
コンピューティング・デバイス。
【請求項11】
前記キー・メンバーシップのレコードは、前記再区分の時点において存在するデーター・エントリーに関連付けられたキーに対して設定されたビット値を有するブルーム・フィルターとして構成され、前記ブルーム・フィルターを介して前記キーに対するメンバーシップを示すように構成される、請求項10に記載のコンピューティング・デバイス。
【請求項12】
前記ブルーム・フィルターは、再区分の後に作成されたデーター・エントリーの少なくとも一部が誤認識されて、前記第1パーティション関数を使用して処理されるようにさせる設定変更可能な許容度にしたがう偽陽性エラーを生じさせ、前記偽陽性エラーは、誤認識されたデーター・エントリーが前記第1パーティション関数を使用して信頼性高く配置されるように整合的であり、
前記ブルーム・フィルターの簡潔さの度合いは、前記設定変更可能な許容度に依存する、
請求項11に記載のコンピューティング・デバイス。
【請求項13】
前記複合パーティション関数は、前記第2パーティション関数を、前記データーベースを再区分する複数の以前の動作に関連付けられた複数の別々のパーティション関数と組み合わせるように構成される、請求項10に記載のコンピューティング・デバイス。
【請求項14】
前記第2パーティション関数は、前記再区分の時点において存在する前記データーベースのパーティションと前記新たなパーティションとに跨がってデーターを割り当てるように構成される、請求項10に記載のコンピューティング・デバイス。
【発明の詳細な説明】
【背景技術】
【0001】
[0001] ユーザーは、業務および個人用通信、オンライン・ミーティング、画面共有、ビデオ・チャット、メッセージングを行うというようなオンライン活動のために増々クラウド・ベースのリソースに頼りつつあり、それ以外でもサービス・プロバイダーから入手可能な種々のリソースを使用する。ユーザーの対話処理に関連する種々のアプリケーションおよびユーザー・データーは、リソースと関連付けられたデーターベースに保持することができる。一般に、データーベースは、多くの異なる個々のパーティションまたはデーターベース・ノードを含むことができ、これらにデーターが割り当てられる。複数の異なる物理デバイスおよびサーバーにまたがってパーティションを広げることもできる。データー・エントリーは、データーに対応するパーティションがどれかを示すキー値のような識別子と関連付けることができる。識別子は、対応するデーター・エントリーの加算、アクセス、および変更というような動作を実行するときに、データーを割り当てるおよびデーターを参照するために使用することができる。
【0002】
[0002] ときの経過につれて、データーベース内に格納されるデーター量は増大し、ある時点で、データーのボリュームおよび要求に応えるために、記憶容量を拡張する場合がある。従前からのデーターベース拡張手法の1つでは、データーベースのためのサービスおよび/またはデーターベースへのアクセスを停止し、新たなストレージ/パーティションをデーターベースに追加し、次いで既存のデーター全てをパーティションの新たな配置にわたって割り当てし直す必要がある。この手法では、既存のデーターは新たな位置に移動させられ、この移動プロセスは、大規模なデーターベースでは非常に時間がかかるおそれがある。したがって、従前からのデーターベース拡張技法は、ユーザーに提供されるサービスにとって正しく破壊的であり、データーを処理して、更新されたパーティションの配置における新たな位置に挿入し直すには多大な時間量を要するおそれがある。
【発明の概要】
【0003】
[0003] 本明細書では、既存のデーターを移動させることなく、データーベースを区分し直すために使用することができる複合パーティション関数技法について説明する。1つ以上の実施態様では、第1パーティション関数に関連付けられた第1配置にデーターベースを区分する。データーベースは、第2パーティション関数に関連付けられた第2配置を形成するために区分し直される。再区分の時点に存在するパーティションにおけるデーター・エントリーに対してキー・メンバーシップ(key membership)のレコードを作成する。これは、第1配置に対応するデーターを認識するために使用することができる。1つの手法では、キー・メンバーシップのレコードは、ブルーム・フィルター(Bloom filter)として構成され、パーティションの第1配置に関連付けられたキーまたは他の識別子を簡潔に表す。第1パーティション関数および第2パーティション関数を組み込む複合パーティション関数が定められ、第2配置における以後のデーターベース処理に使用される。複合パーティション関数は、第1パーティション関数を、キー・メンバーシップのレコードにおいて発見されるキーを有するデーターに適用し、第2パーティション関数を、キー・メンバーシップのレコードにおいて発見されないキーを有する他のデーターに適用するように構成される。再区分は、再区分の時点に存在するデーター・エントリーが、第1配置のパーティションにおいてそれらのそれぞれの位置を保持するように実行される。
【0004】
[0004] この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を判断するときに補助として使用されることを意図するのでもない。
【図面の簡単な説明】
【0005】
[0005] 添付図面を参照しながら、詳細な説明を記載する。図では、参照番号の左側の桁(1つまたは複数)は、その参照番号が最初に現れる図を識別する。説明および図における異なる実例において同じ参照番号が使用される場合、同様または同一の項目を示すことができる。図に表されるエンティティは1つ以上のエンティティを示す場合もあり、したがって以下の論述ではエンティティの単数形または複数形を相互交換可能に引用することができる。
図1図1は、複合パーティション関数の技法を採用するように動作可能である動作環境例の図である。
図2図2は、1つ以上の実施態様によるデーターベース・システムのバーティション配置例を示す。
図3図3は、1つ以上の実施態様による図2のシステムの拡張を表す、データーベース・システムの他のパーティションの配置例を示す。
図4図4は、1つ以上の実施態様によるデーターベース・システムの他のパーティションの配置例を示す。
図5図5は、1つ以上の実施態様による、パーティションのスロットへの割り当ての図を示す。
図6図6は、1つ以上の実施態様にしたがって複合パーティション関数を定める手順例を示す流れ図である。
図7図7は、1つ以上の実施態様にしたがって、パーティションの配置(arrangement)要求を導く(route)ために複合パーティション関数を使用する手順例を示す流れ図である。
図8図8は、本明細書において説明する技法の態様を実現するために採用することができるデバイスおよびコンポーネントを有するシステム例を示す。
【発明を実施するための形態】
【0006】
全体像
[0014] ときの経過につれて、データーベース内に格納されるデーター量は増大する可能性があり、ある時点で、データー量および要求に対処するために、記憶容量を拡張する場合がある。従前からのデーターベース拡張技法の1つでは、新たなパーティションを作成するためにはデーターベースを停止し、既存のデーターの全てをパーティションの新たな配置にわたって分散する必要があるが、ユーザーにとって時間がかかり破壊的である。
【0007】
[0015] 本明細書では、既存のデーターを移動させることなく、データーベースを区分し直すために使用することができる複合パーティション関数技法について説明する。1つ以上の実施態様では、第1パーティション関数に関連付けられた第1配置にデーターベースを区分する。データーベースは、第2パーティション関数に関連付けられた第2配置を形成するために区分し直される。再区分の時点に存在するパーティションにおけるデーター・エントリーに対してキー・メンバーシップ(key membership)のレコードを作成する。これは、第1配置に対応するデーターを認識するために使用することができる。1つの手法では、キー・メンバーシップのレコードは、ブルーム・フィルター(Bloom filter)として構成され、パーティションの第1配置に関連付けられたキーまたは他の識別子を簡潔に表す。第1パーティション関数および第2パーティション関数を組み込む複合パーティション関数が定められ、第2配置における以後のデーターベース処理に使用される。複合パーティション関数は、第1パーティション関数を、キー・メンバーシップのレコードにおいて発見されるキーを有するデーターに適用し、第2パーティション関数を、キー・メンバーシップのレコードにおいて発見されないキーを有する他のデーターに適用するように構成される。再区分は、再区分の時点に存在するデーター・エントリーが、第1配置のパーティションにおいてそれらのそれぞれの位置を保持するように実行される。
【0008】
[0016] 本明細書において説明するように複合パーティション関数技法を使用すると、データーベースの再区分の間、既存のデーターをパーティションの配置内部におけるそれらのそれぞれの位置に保持することが可能になる。したがって、大量のデーターを移動させる必要がなく、再区分に伴う時間量を削減する。更に、ブルーム・フィルターまたはキー・メンバーシップの他の圧縮表現を使用することによって、異なるパーティション配置(例えば、パーティション時期(era))に関連付けられたデーター間で区別し、データー要求の管理のために正しいパーティション関数を選択するための素早い評価が可能になる。更に、キー・メンバーシップのレコードは、比較的小さいサイズを有するように構成されるので、レコードが管理可能となり、異なるサーバー、パーティション、およびデーターベース・システムのコンポーネントによる使用のためのレコードの配布(distribution)が実現可能となる。
【0009】
[0017] 以下の論述では、最初に、本明細書において説明する技法を採用することができる環境例について説明する。次いで、この環境例およびその他の環境において実現することができる詳細および手順の例について説明する。したがって、詳細および手順の例は、この環境例には限定されず、更にこの環境例は詳細および手順の例には限定されない。最後に、本明細書において説明する技法の態様を実現するために採用することができるシステム例、およびこのシステムのコンポーネント例について論ずる。
環境例
[0018] 図1は、本明細書において説明する技法を採用するように動作可能な実施態様例における環境100の図である。図示する環境100は、クライアント・デバイス102、他のクライアント・デバイス104、およびサービス・プロバイダー106を含み、これらはネットワーク108によって通信可能に結合されている。クライアント・デバイス102、他のクライアント・デバイス104、およびサービス・プロバイダー106は、1つ以上のコンピューティング・デバイスによって実現することができ、更に1つ以上のエンティティを表すこともできる。
【0010】
[0019] コンピューティング・デバイスは、種々の方法で構成することができる。例えば、コンピューティング・デバイスは、デスクトップ・コンピューター、移動局、娯楽用アプライアンス、ディスプレイ・デバイスに通信可能に結合されたセットトップ・ボックス、ワイヤレス・フォン、ゲーム・コンソール等のような、ネットワーク108を通じて通信することができるコンピューターとして構成することができる。つまり、コンピューティング・デバイスは、大量のメモリーおよびプロセッサー・リソースを有する最大リソース・デバイス(例えば、パーソナル・コンピューター、ゲーム・コンソール)から、メモリーおよび/または処理リソースが限られた低リソース・デバイス(例えば、従前からのセットトップ・ボックス、ハンド・ヘルド・ゲーム・コンソール)までの範囲に及ぶことができる。加えて、実例によっては1つのコンピューティング・デバイスが示されることもあるが、コンピューティング・デバイスは、動作を実行するために業務によって利用されるサービス・プロバイダー106の複数のサーバー等のような、複数の異なるデバイスを表すこともできる。本明細書において説明する技法を実現するのに適したコンピューティング・システムおよびデバイスの更に他の例について、図8に関して以下で説明する。
【0011】
[0020] ネットワーク108はインターネットとして示されているが、ネットワークは広範囲におよぶ種々の構成を取ることができる。例えば、ネットワーク108は、ワイド・エリア・ネットワーク(WAN)、ローカル・エリア・ネットワーク(LAN)、ワイヤレス・ネットワーク、公衆電話ネットワーク、イントラネット、ピア・ツー・ピア・ネットワーク等を含むことができる。更に、1つのネットワーク108が示されているが、ネットワーク108は複数のネットワークを含むように構成することもできる。
【0012】
[0021] 更に、クライアント・デバイス102は、オペレーティング・システム110を含むように示されている。オペレーティング・システム110は、基礎デバイスの基礎機能を、クライアント・デバイス102上で実行可能なアプリケーション112に抽象化するように構成されている。例えば、オペレーティング・システム110は、どのようにこの基礎機能が実装されるか知ることなくアプリケーション112を書くことができるように、処理、メモリー、ネットワーク、および/または表示機能を抽象化することができる。例えば、アプリケーション112は、図示のように、ディスプレイ・デバイスによってレンダリングおよび表示されるように、オペレーティング・システム110にデーターを供給することができるが、このレンダリングがどのように実行されるか理解しなくてよい。クライアント・デバイスに通例関連する種々のアプリケーション112が考えられ、複数のオフィス生産性モジュールを統合する生産性スイート(productivity suite)、ウェブ・ブラウザー、ゲーム、マルチメディア・プレーヤ、ワード・プロセッサー、スプレッドシート・プログラム、写真管理(photo manager)等を含むが、これらに限定されるのではない。
【0013】
[0022] クライアント・デバイス102および他のクライアント・デバイスは、各々、通信モジュール114を含むように示されている。通信モジュールは、ネットワーク108を通じた様々な種類の通信を可能にする機能を表す。通信モジュールの例には、音声通信アプリケーション(例えば、VoIPクライアント)、ビデオ通信アプリケーション、メッセージング・アプリケーション、コンテンツ共有アプリケーション、ウェブ・コンテンツにアクセスするためのブラウザー、およびこれらの組み合わせが含まれる。例えば、通信モジュール114は、異なる通信様式(modality)を組み合わせて、多様な通信シナリオを提供することを可能にする。これには、ユーザー存在指示、ビデオ通信、オンライン・コラボレーションおよびミーティング体験、インスタント・メッセージング(IM)、および音声通話(voice calling)のために統合機能を実装することが含まれるが、これに限定されるのではない。更に、通信モジュールは、オンライン・リソース(例えば、コンテンツおよびサービス)、ブラウザーのウェブ・ページおよびサイトにアクセスし、サービス・プロバイダーおよび他のクライアントと通信接続を確立し、通信モジュールを介して出力することができるユーザー・インターフェース116を介した種々のその他の対話処理を可能にするように動作可能であってもよい。少なくとも一部の実施態様では、通信モジュール114は、クライアント・デバイス上でローカルにデプロイされインストールされるアプリケーションを表す。加えてまたは代わりに、通信モジュール114は、全体的または部分的に、プロバイダーからのリモート・サービスのように、ピア・ツー・ピア技法等を使用してウェブ・ブラウザー(例えば、ウェブ・アプリケーション)を介してアクセスおよび実行されるリモート・アプリケーションとして実装することもできる。
【0014】
[0023] サービス・プロバイダー106は、図1に示すように、リソース・マネージャ120を介してというようにして、ネットワーク108を通じて利用可能にすることができる種々のリソース118を管理するように動作可能な機能を含む。リソース・マネージャ120は、本明細書において論ずるように、リソース118およびこのリソースに関係するデーターを管理する種々の機能を表す。サービス・プロバイダー106は、ウェブ・ページまたは他のユーザー・インターフェース116を介して種々のリソース118を提供することができ、リソース118は、ウェブ・ブラウザーまたは他のクライアント・アプリケーションを介して、1つ以上のクライアントによる出力のためにネットワークを通じて伝達される。サービス・プロバイダー106は、リソース118へのアクセス、リソースの性能、およびリソース122を提供するためのユーザー・インターフェース116の構成等を管理するように構成されている。サービス・プロバイダー106は、種々のリソース118を提供するために使用される1つ以上のサーバー・デバイスを表すこともできる。
【0015】
[0024] 加えて、リソース・マネージャ120は、複数のパーティション126(シャード(shard)とも呼ぶ)に区分および再区分することができるリソース118に関連するデーターベース124を管理するパーティション関数122を実装するように構成することもできる。一般に、パーティション関数は、パーティションの配置にわたってどのようにデーターを割り当てるか定めるように構成され、データー要求をしかるべきパーティションに導くために使用することもできる。パーティション関数122の少なくとも一部は、以上および以下で説明するように構成され動作する複合パーティション関数(composite partition function)にすることができる。複合パーティション関数の形成および使用に関するその他の詳細は、以下の図に関係付けて理解することができる。
【0016】
[0025] 少なくとも一部の実施形態では、クライアントは、サービス・プロバイダー106によって提供されるリソース118に、クライアントが認証されるクライアント/ユーザー・アカウントを介してアクセスすることができる。例えば、リソース118にアクセスするために、クライアント・デバイスはユーザー名およびパスワードを与えればよく、これらは認証サービスによって認証される。認証が成功したとき(例えば、クライアントが「自らが名のっているその人物である」(is who they say they are))、認証サービスは、対応するリソースへのアクセスを可能にするために、トークン(または他の適した認証識別子/秘密)を渡すことができる。1回の認証が1つ以上のリソースに対応してもよいため、「1回のサインオン」による1つのアカウントの認証が、個々のリソース、複数のサービス・プロバイダー106からのリソース、および/またはサービス・プロバイダー106から入手可能な完全な一組のリソースへのアクセスを与えることができる。
【0017】
[0026] 一般に、サービス・プロバイダー106によってアクセス可能にされたリソース118は、1つ以上のプロバイダーによってネットワークを通じて通例入手可能にされるサービスおよび/またはコンテンツの任意の適した組み合わせを含むことができる。サービスのいくつかの例には、検索サービス、電子メール・サービス、インスタント・メッセージング・サービス、オンライン生産性スイート、コラボレーション・サービス(例えば、VoIP通話、オンライン・ミーティングおよび会議、画面共有、統一通信およびコラボレーション(UC&C)サービス、インスタント・メッセージング、ビデオ・チャット、音声通信等の内1つ以上のための機能を統合するサービス)、およびリソース118へのクライアントのアクセスを制御するための認証サービスが含まれるが、これらに限定されるのではない。コンテンツは、テキスト、マルチメディア・ストリーム、文書、アプリケーション・ファイル、写真、オーディオ/ビデオ・ファイル、アニメーション、画像、ウェブ・ページ、ウェブ・アプリケーション、デバイス・アプリケーション、ブラウザーまたは他のクライアント・アプリケーションによる表示のためのコンテンツ等の種々の組み合わせを含むことができる。
【0018】
[0027] 以上で環境例について検討したので、これより1つ以上の実施態様による複合パーティション関数技法についての詳細および手順のいくつかの例の論述について検討する。
複合パーティション関数の詳細
[0028] この章では、1つ以上の実施態様にしたがって、既存のデーターを移動させることなく、データーベースを再区分するために使用することができる複合パーティション関数技法および手順例の詳細について論ずる。概して言えば、区分(partitioning)とはデーターベースの規模を調整するために使用することができる技法である。区分は、レコード/データー・エントリーを、パーティション126(シャードとも呼ぶ)と呼ばれるばらばらなサブセットに分割することを必要とする場合がある。区分は、レコードに適した識別子に基づくこともできる。識別子の一例にレコードの主キーがある。パーティションは、複数の異なるサーバーおよび/または記憶デバイス(例えば、データーベース・ノード)に物理的に跨がって分散されることもある。1つの手法では、パーティションとデーターベース・ノードとの間に1対1のマッピングができるように、各パーティションを別個のデーターベース・サーバーに割り当てることができる。加えてまたは代わりに、所与のパーティションに割り当てられた空間を2つ以上の個々のデーターベース・ノード上に配置できるように、1つ以上のパーティションをサーバー/記憶デバイスにまたがって論理的に分割することもできる。
【0019】
[0029] このコンテキストでは、所与のパーティションの配置は、データーベースにデーターが入力されるに連れて消費される有限量の記憶容量を有する。ある時点において、容量閾値に達する可能性があり、この時点で、データーベースの連続動作を可能にするためには、記憶容量を拡張しなければならない場合がある。データーベースの拡張は、記憶容量が多い他のパーティションの配置を作成するために、1つ以上のパーティションを既存のパーティションの配置に追加する必要がある場合がある。データーベースの拡張は、ここでは、再区分(repartitioning)とも呼ばれる。格納されているデーターのボリューム、またはデーターへのアクセス要求のレートのいずれに関しても、各データーベース・ノードが等しく飽和される、均衡の取れたシステムとなるために、再区分を行うこともできる。この場合、追加ストレージを利用するように構成された新たなパーティション関数によって、追加のストレージ(例えば、他のサーバー/記憶デバイス)を追加することができる。また、あるデーターベース・ノードはほぼ記憶限界であるが、他のノードの負荷は少なく余裕がある、不均一に均衡の取れたシステムとなるように、再区分を行うこともできる。この状況では、データーベース・ノードは同一のままでもよいが、利用が少ないノードを、負荷が多いノードよりも優先するように構成された新たなパーティション関数を定めることができる。
【0020】
[0030] 本明細書において説明する技法によれば、再区分は、この再区分の時点において存在するパーティション内に位置するデーター・エントリーがそれらのそれぞれの位置を保持するように、実行することができる。言い換えると、再区分の時点にデーターベース内に既にあるデーターは、再区分の結果移動させられず、処理時間の短縮およびリソース利用の削減となる。これは、本明細書において論ずるように複合パーティション関数を使用することによって遂行することができる。複合パーティション関数は、データー要求の処理のために、連続的なパーティションの配置、または、「パーティション時期」(partition era)に対応する複数の異なる基礎パーティション関数を選択的に適用するように構成されている。このようにするために、複合パーティション関数は、各データー要求が対応するパーティション時期を認識し、要求を処理するために認識されたパーティション時期に適したパーティション関数を適用するために、キー・メンバーシップのレコードを含む、またはそうでなければ利用することができる。
【0021】
[0031] これより、複合パーティション関数およびキー・メンバーシップ・レコード、ならびに複合パーティション関数を使用した再区分に関する更なる詳細および概念を示す図2図5の例を検討する。具体的には、図2は、全体的に200で、1つ以上の実施態様によるデーターベース・システムに対するパーティションの配置例を示す。図示する例では、図1に関して論じたようなサービス・プロバイダー106と関連付けることができる サーバー202が示されている。サーバー202は、ウェブ・アプリケーション204および/または他のリソース118に関連する機能を提供するように構成することができる。また、サーバー202はリソース・マネージャ120も含む。リソース・マネージャ120は、本明細書で論ずるように動作して、ウェブ・アプリケーション204との対話処理、および対応するデーターベースにおいてウェブ・アプリケーションに関連するデーターの格納を管理することができる。データーは、データーベースのパーティション126が定められた記憶デバイスを介して格納することができ、記憶デバイスは、サーバー202を含んでも含まなくてもよい1つ以上のサーバーを介して実装されてもよい。一実施態様では、データーベースのパーティション126の内1つ以上は、サーバー202を介して提供されてもよい。
【0022】
[0032] 図示する例におけるリソース・マネージャ120は、2つのパーティション例、即ち、パーティション208(0)およびパーティション208(1)を含む、図2に示すパーティションの配置に対してパーティション関数p1206(1)を実装するように構成されている。データーは、キー−値フォーマットで表され、キーはデーター・レコードの主キーであり、値はデーター・レコードのコンテンツを表す。データーにアクセスし、このデーターに対して処理を実行するためにデーター要求を行うことができる。処理には、レコードを追加する、レコードを削除する、データーの変更、読み出し処理、書き込み処理等が含まれるが、これらに限定されるのではない。データーにアクセスして処理を実行するためには、要求側アプリケーションはキー(または他の相当する識別子)を使用してデーターベース・ノードを突き止め、示されたキーに対応するパーティションを探し出す。一旦これが行われたなら、この選択されたノードおよび/またはパーティションから、データーベース・システムに特定のプロトコル、フォーマット、および/またはデーターベース技術にしたがって、データーにアクセスすることができる。プロトコル、フォーマット、および/またはデーターベース技術は、異なるシステム毎に異なってもよい。
【0023】
[0033] パーティション関数p1 206(1)およびパーティション関数122は、一般に、対応するキーに基づいてパーティションの決定論的選択(deterministic selection)を可能にする。言い換えると、この機能は、データーを信頼性高く突き止めることができるように、所与のキーに対して同じパーティションを一貫して選択する。パーティション関数122には種々の構成(configuration)が考えられる。1つの手法では、パーティション関数をハッシュ関数として構成することができ、データー要求に対するキー値に適用されると、キー値に対応するデーターベースのパーティションを識別するデーターを戻す。
【0024】
[0034] 一例としてそして限定ではなく、パーティション関数pは、p(k)=hash(k)modNという形態を有することができ、ここでkはキー、hashはハッシュ関数、そしてNは所与の配置(arrangement)に対するパーティションの数である。この例では、パーティション関数は、0からN−1までカウントするパーティション番号を戻す。ハッシュ関数は、大きな整数を、キーkまたは他の識別データーを表すストリング(またはバイト・アレイ)に割り当てるように動作する。この形態で利用されるハッシュ関数は、均一な値の分布を与えるように構成することができる。あるいは、ハッシュ関数は、特定のパーティション(例えば、過小利用の(under-utilized)パーティション)にデーターの配置を偏らせる(skew)ために使用することができる値の分布を行うように、選択/構成することもできる。モジュロ関数modNは、大きな整数を逆に0からN−1の範囲に嵌め込み、パーティションの配置における個々のパーティションの識別子として使用することができる。したがって、パーティション関数は、このパーティション関数によって反映される分布方式にしたがって、データーベース・ノード/パーティション間でデーターを分散させるように設計することができる。
【0025】
[0035] 図2の例では、パーティション関数p1206(1)は、キーk1およびk2に対するレコードを、この例ではパーティション208(0)である第1パーティションにマッピングするように構成されている。言い換えると、キーk1およびk2に対して評価されたパーティション関数p1206(1)は、パーティション208(0)に対する識別子を戻す。この場合、これはゼロ値である(例えば、(p1(k1)=p1(k2)=0)。したがって、キーk1およびk2に対応するデーター・レコード/値は、図2に表されるように、パーティション208(0)に関連付けられたサーバー/ストレージに格納し、ここからアクセスすることができる。また、パーティション関数p1 206(1)は、キーk3およびk4に対するレコードを第2パーティション、即ち、パーティション208(1)にマッピングするように構成されている。ここで、キーk3およびk4に対して評価された関数は、パーティション208(1)に対する識別子を戻す。この場合、これは値1である(例えば、p1(k3)=p1(k4)=1)。したがって、キーk3およびk4に対応するデーター・レコード/値は、図2に表されるように、パーティション208(1)に関連付けられたサーバー/ストレージに格納し、ここからアクセスすることができる。
【0026】
[0036] ここで、図2に示すシステム例に対する容量閾値に達した場合、追加のサーバー/ストレージを含ませ、パーティションの新たな配置にわたってデーターベースを再区分することによって、追加の容量を追加することができる。例えば、NからN’>Nへの拡張について検討する。ここで、例えば、N’=N+1、またはN’=2Nである。新たなパーティションの配置は、追加の容量/パーティションを収容するために作成された新たなパーティション関数によって管理される(govern)。次いで、新たなパーティション関数を使用して、拡張されたシステムに新たなデーターを割り当てることができる。新たなパーティション関数は、先に論じたように、p’(k)=hash(k)modN’という形態を取ることができる。しかしながら、既存のデーターの位置は、以前のパーティション関数(例えば、パーティション関数p1 206(1))によって管理され、したがって、新たなパーティション関数は、既存のデーターを信頼性高く突き止めることができないおそれがある。何故なら、通常、これら2つの機能は整列されない(align)からである(例えば、p(k)≠p’(k))。従前からの解決策では、新たなパーティション関数を以後使用可能にするためには、ある時間期間データーベース・サービスを停止し、新たなパーティション関数にしたがって、既存のレコードにわたって繰り返し除去および再挿入処理を実行する必要がある。既に述べたように、これは、大量のデーターおよび要求を有するデーターベースにとって、正しく破壊的であり、時間がかかる可能性がある。
【0027】
[0037] 本明細書において説明する複合パーティション関数技法は、しかしながら、既存のデーターを移動させることなく、データーベースを再区分するために使用することができる。概略的には、複合パーティション関数は、異なるパーティション配置に対してキー・メンバーシップのレコードを使用して、対応するパーティション関数を選択し所与のデーターベース処理に使用する。この場合、特定のデーターが最初にデーターベースに割り当てられたときに使用されたパーティション関数は、再区分の後であっても、この特定のデーターのために使用され続ける。キー・メンバーシップのレコードは、適用すべき正しい関数の選択を可能にし、複合パーティション関数は、各々異なるパーティション時期に対応する2つ以上の個々のパーティション関数の組み合わせを使用するように設計されている。
【0028】
[0038] 例示するために、図3を検討する。図3は、1つ以上の実施態様にしたがって、図2のシステムの拡張を表すデーターベース・システムに対する別のパーティションの配置例を、全体的に300で示す。この例では、追加のパーティション208(2)が、図3のパーティションの配置に含まれることが示されている。加えて、リソース・マネージャ120は、図3のパーティションの配置に対するデーター割り当てを管理する複合パーティション関数302を実装することも示されている。複合パーティション関数302は、図2の配置に対する以前の関数、即ち、パーティション関数p1 206(1)を、図3に示すパーティションの再配置のために作られた(establish)新たな関数である、パーティション関数p2 206(2)と組み合わせるように構成されている。また、複合パーティション関数302は、キー・レコードb1 304(1)を含むまたは利用するように構成されている。キー・レコードb1 304(1)は、キー値と、複合パーティション関数302に組み込まれた個々のパーティション関数との対応付けを認識するために使用することができる。1つの手法では、キー・レコードb1 304(1)は、どのキー値が以前の関数(パーティション関数p1 206(1))と関連付けられているか識別し、したがって、対応するデーター要求の処理のためにこの機能を選択するメカニズムを設ける。パーティション関数p2 206(2)は、キー・レコードb1 304(1)に収容されているキー値に対応しない他のデーター要求のために使用することができる。
【0029】
[0039] この例では、キーk1、k3、k3、およびk4に関連付けられたデーター・エントリー/値は、システムにおいて既に存在しており、図2に示すように2つのパーティションに跨がって分散されている。再区分は、図3に示すように追加のパーティションを追加するために行うことができる。実施態様では、追加のパーティション(1つまたは複数)を作成し、複合パーティション関数をインストールするために、データーベース・システムを停止させることもある。再区分の一部として、システムにおける既存のキー(例えば、k1、k2、k3、およびk4)を処理して、再区分の時点においてレコード・キー・メンバーシップを作成する。これは、キー・レコードb1 304(1)によって表されている。尚、この処理は、新たなパーティション関数にしたがって既存のレコードを移動させるとすれば要する時間量と比較して、はるかに短い時間で済むことを注記しておく。
【0030】
[0040] 複合パーティション関数302は、以下のようにして定めることができる。パーティション関数p1 206(1)は、2つのパーティションの配置に対する元のパーティション関数であり、p1(k)=hash(k)mod2という形態を取ることができる。パーティション関数p2 206(2)は、3つのパーティションとした拡張配置(expanded arrangement)のために作られた新たなパーティション関数であり、p2(k)=hash(k)mod3という形態を取ることができる。ここで、p’(k)として表される複合パーティション関数302は、次のように表すことができる。
【0031】
b1(k)=真となる任意のkに対して、p’(k)=p1(k)、
それ以外の場合、p’(k)=p2(k)
[0041] 言い換えると、キー値がキー・レコードb1 304(1)に含まれるか否か確かめるためにチェックが行われる。キー値が見つかった場合、対応する要求/処理を行うために(handle)p1を使用する。そうでない場合、キー値が見つからない場合、対応する要求/処理を行うためにp2を使用する。複合パーティション関数302を使用すると、既存のレコードは、依然としてp1を使用して突き止められるので、それらの元の位置に留まることができる。新たなレコードは、新たなパーティションを含むパーティションの配置にわたって、p2を使用して、データーを入力することができる。したがって、データーベース・ノードの集合全体が以後も利用される。
【0032】
[0042] 図3のキー・レコードb1 304(1)のようなキー・メンバーシップのレコードは、異なるパーティション配置および/またはパーティション時期に関連付けられたキー間で区別するために、任意の適した方法で構成することができる。各配置/時期に対応するキーの生のリストは、1つ以上の実施態様において採用されてもよい。しかしながら、実際には、キーの生のリストのサイズが、このリストを異なるデーターベース・サーバーに配布することを困難にし、かなりの量のメモリーを占める可能性がある。したがって、圧縮フォーマットとした簡潔なキー表現が、生のリストを使用することに加えてまたはその代わりに、採用されてもよい。再区分の時点においてデーターベース内に存在するデーター・エントリーに対応するキーを識別するように構成することができる種々の異なる圧縮データー構造が考えられる。圧縮データー構造の例には、ビット・マップ、アレイ、マトリクス、およびフィルターが含まれるが、これらに限定されるのではなく、他にもいくつもの例をあげられる。
【0033】
[0043] 1つ以上の実施態様においてキー・メンバーシップのレコードに適していると考えられる圧縮データー構造の他の例にブルーム・フィルター(Bloom filter)がある。ブルーム・フィルターとは、空間効率的な方法で値の集合に対して集合メンバーシップ(a set membership)を記憶する(remember)ように設計されたデーター構造である。具体的には、キーの集合S={k1,...kN}が与えられると、この集合Sにおける各キーの存在を「記憶する」ために、ブルーム・フィルターを作成することができる。これは空間効率的であるので、ブルーム・フィルターは単に全てのキーのリストを記憶するだけではない。代わりに、ブルーム・フィルターはビット・ベクトルを維持し、集合Sからの各キーkに対して、インデックスhash(k)modMにおいて1ビットをセットする。ここで、hashはハッシュ関数であり(パーティション関数に関連付けられたハッシュ関数と異なっても、同じでもよい)、Mはビット・ベクトルの長さである。任意の所与のキーkの集合メンバーシップを判定するために、位置hash(k)modMにおけるビットに対して参照(lookup)を行う。ビットがセットされている場合、キーはその集合のメンバーであり、そうでない場合、キーはメンバーではない。ビット・ベクトルは非常に空間効率的であり、したがって、大きなアプリケーションをサポートするデーターベースにおいて通例見られる大多数のキーに対してでも、ブルーム・フィルターをデーターベース・ノードのメモリーに格納することを可能にする。
【0034】
[0044] 尚、ブルーム・フィルターは、何らかの偽陽性エラー(false positive error)を起こす確率論的データー構造であることを注記しておく。例えば、集合Sのメンバーでないキーk2が、Sのメンバーであるキーk1と同じ値にハッシュする可能性がある。このエラーは、ハッシュ関数の衝突として知られている。エラー率は低いが、可能性があることに変わりはない。したがって、Sのメンバーでない少数のキーに対して、ブルーム・フィルターはこれらを集合メンバーとして間違って分類するおそれがある。エラーの確率は、ビット・ベクトルの長さを延長することによって、および/または複数のハッシュ関数を使用し、これらのハッシュ関数によって示される複数のビット設定値の試験に基づいてメンバーシップを解決する(resolve)ことによって、最少に抑えることができる。つまり、ブルーム・フィルターは、ビット・ベクトルの長さを指定することにより、そしてブルーム・フィルターに使用するための1つ以上のハッシュ関数を選択することによって、エラーを制御するように選択的に構成することができる。実際には、ブルーム・フィルターによって消費される記憶空間に対する制約を受ける容認可能なエラー率、およびハッシュ関数の計算のためのレイテンシー/コストを設定するためにトレードオフを行えばよい。このエラー率が容認可能なのは、ブルーム・フィルターが新たなデーターに対するキーを集合のメンバーであると誤認識した場合、一貫してそうするからである。つまり、以前のパーティション関数を使用して配置されたとしても、データーを信頼性高く突き止めることができる。更に、ブルーム・フィルターは集合のメンバーであるキー(例えば、既存のレコードに対するキー)に対して偽陰性を返さず、したがって、古いデーターは元の位置に残り、信頼性高く突き止めることができる。1つの手法では、ブルーム・フィルターの構成が、どの程度の頻度で偽陽性エラーが起こるか判定する、設定変更可能な許容度(configurable tolerance)を設定することを含んでもよい。一方、ブルーム・フィルターの簡潔さの度合いは、この設定変更可能な許容度に左右される。例えば、設定変更可能な許容度を、より多くの偽陽性エラーを生じるまたはこれらに「耐える」ように設定することによって、簡潔さの度合いを一層高くすることができる。実際には、非常に高い度合いの簡潔さを達成することができる。何故なら、データー・エントリーが誤認識されても、以前の時期からの関数を使用すれば、信頼性高く突き止められることに変わりがないからである。言い換えると、ブルーム・フィルター・エラーの影響は無視できるので、比較的高い頻度のエラーでも許容可能であり、したがって、非常に簡潔な構成のブルーム・フィルターを採用することができる。
【0035】
[0045] ここで、4つの新たなレコードが、再区分の後システムに追加される、図3によって表される例について検討する。この例に限って、キー・レコードb1 304(1)は、説明したばかりのブルーム・フィルターとして構成されると仮定する。キーk1、k3、k3、およびk4はシステムに既に存在しており、ブルーム・フィルターのメンバーであると認識される。したがって、これらのキーに関連する要求は、パーティション関数p1 206(1)によって管理される。キーk5およびk6は、ブルーム・フィルターのメンバーでないことが分かり、パーティション関数p2 206(2)によって、パーティション208(1)に割り当てられればよい。また、キーk7もブルーム・フィルターにおいては発見されず、パーティション関数p2 206(2)によってデーターベース3の新たなパーティションに割り当てられる。キー8は興味深い事例である。何故なら、これは再区分の後に、しかも先に論じたようなブルーム・フィルター・エラーのために発生した新たなキーであり、メンバーとして誤分類され、このためパーティション関数p1 206(1)によってパーティション208(1)に割り当てられたからである。しかしながら、注記したように、これは、データーの完全性や、キーk8に対応するデーターを突き止める能力に伴う問題を起こすことはない。何故なら、ブルーム・フィルターは一貫してキーk8を誤認識し、したがって信頼性高くデーター要求を導くからである。
【0036】
[0046] 更に、ここで説明する再区分プロセスは、連続するパーティション時期に対して複数回実行できることも注記しておく。図1図3に関して先に論じた概念は、複数の再パーティション処理を伴う、一般化された場合にも適用することができる。例えば、直前の例における以前の関数p1が、以前の再区分に対応する異なる複合パーティション関数であってもよい。言い換えると、現行のパーティションの配置に対して作られた複合パーティション関数は、以前の配置に対する1つ以上の他の複合パーティション関数を組み込むことができる。
【0037】
[0047] 更に例示するために、図4について検討する。図4は、1つ以上の実施態様によるデーターベース・システムの他のパーティションの配置例を全体的に400で示す。具体的には、図4は、複数のデーターベース・パーティション(1からNまで)および複数の再区分処理を一般化した場合を示し、各々が、パーティションの配置において既存のデーターを新たな位置への移動を生じさせない。この例では、データーベース・システムの寿命は、一連の連続パーティション時期(1からMまで)を有することができる。各パーティション時期は、そのパーティション時期の間存在していたパーティションのデーターをどのように割り当てそして突き止めるかを定めるそれぞれのパーティション関数122に関連付けられている。加えて、再区分は、以前のパーティション時期の終端、および新しいパーティション時期の開始を表す。各時期の終端時に存在するキー・メンバーシップのブルーム・フィルターまたは他のレコードは、再区分の一部として作ることができる。つまり、異なるパーティション時期には、データー要求に適用すべき正しいパーティション関数122を認識するために使用することができる異なるキー・メンバーシップのレコードを関連付けることができる。
【0038】
[0048] 現在のパーティション時期Mは、パーティション時期毎に参照206(1)...206(M)を有するパーティション関数p1...pMに基づいて、複数のハッシュの組み合わせである複合パーティション関数402によって管理される。加えて、参照304(1)...304(M−1)を有するキー・レコードb1...bM−1は、現在の時期の前にパーティション時期の各々に対して作られたとして図示されている。複合パーティション関数402は、キー値がキー・レコードの内いずれか1つにおいて発見されたか否かチェックし、次いで、キー・レコードの1つにおいてメンバーシップが判定されたときに対応するパーティション関数を適用するように構成することができる。1つの手法では、このチェックは、最も古い時期のキー・レコードをチェックすることから開始し、次いで一致が発見されるまで、最も古いものから最も新しいものまで各時期を進めていく。キー・レコードのいずれにおいても一致が発見されない場合、現在のパーティション関数pM(206(M))に対する現在の時期が選択され適用される。このコンテキストでは、複合パーティション関数402は次のように表すことができる。
【0039】
kがフィルターbにおいて発見された場合、p(k)=p(k)と設定する。
または、kがフィルターbにおいて発見された場合、p(k)=p(k)と設定する。
【0040】
介在する時期について評価を継続する。
または、kがフィルターbM−1において発見された場合、p(k)=pM−1(k)と設定する。
【0041】
または、p(k)=p(k)と設定する。
この複合パーティション関数402の擬似コードによる表現は、次のようになる。
【0042】
【表1】
【0043】
[0049] 以上の論述にしたがって、2つ以上のパーティション時期に選択的にパーティション関数を適用するように構成された複合パーティション関数は、現在の時期に対するデーターベース処理および要求を管理するように定めることができる。1つ以上の実施態様では、複合パーティション関数は、現在のパーティションの配置において全パーティションにわたって新たなデーター・レコードの実質的に等しい分布が得られるように構成される。しかしながら、再区分の時点に存在するデーターの分布によっては、新たなデーターの分配が容認可能な負荷均衡を生じる場合も、生じない場合もあり得る。何故なら、新たに追加されるパーティションは、古いデーターが既に格納されている既存のパーティションよりも遙かに多い利用可能な記憶空間を有する可能性があるからである。
【0044】
[0050] 例えば、パーティション関数hash(k)modNおよびhash(k)modN’を使用して、N個のパーティションがN’個に拡張されたシステムについて検討する。この例に限って、図2および図3の例におけるように、それぞれ、N=2およびN’=3と仮定する。対応するパーティション関数p1(k)=hash(k)mod2およびp2(k)=hash(k)mod3は、一部のデーターを新たなパーティション上に置くが、既存のパーティションの方が、再区分の時点における負荷条件のために、負荷が多い可能性が高い。したがって、この割り当ての結果、均衡を失ったシステムとなってしまうおそれがある。
【0045】
[0051] このため、本明細書において論ずる複合パーティション関数技法と併せて、再均衡化機能(rebalancing feature)も設けることができる。1つの手法では、再均衡化機能は、新たなデーターの割り当てを新たなパーティションおよび/または過小利用パーティションに偏らせるために、選択的にオンまたはオフに切り替えることができる選択肢として設けることができる。加えてまたは代わりに、利用可能なパーティション容量、要求のボリューム、データーの増加率等のような要因に基づいて、リソース・マネージャ120が自動的に再均衡化を実施するように構成することもできる。一般に、再均衡化機能は、新たなデーターを、他のパーティションよりも頻繁に、1つ以上の指定パーティションに割り当てさせるために、偏重係数(skew factor)を組み込むように構成された修正ハッシュ関数の使用を伴うことができる。例えば、偏重係数は、再区分処理の前に存在していた古いパーティションよりも、再構成された配置に追加された新たなパーティションに多くのデーターを割り当てるために、不均衡なデーター分配を行わせることができる。特定のパーティションに向けて割り当てを偏らせる種々の技法が考えられる。例えば、偏重係数は、ハッシュ関数が異なるパーティションを示しても、選択されたパーティションに要求を割り当てる設定変更可能な間隔(interval)を指定するように動作するのでもよい。つまり、この間隔で選択されたパーティションに要求を自動的に割り当てるように(例えば、2つおきまたは3つおきの要求)システムを設定することができる。他の手法では、パーティションの相対的な負荷に基づいて、最初は選択されたパーティションに多くの要求を割り当てるが、ときの経過と共に関数が徐々に均一な分配を行うことに戻ることができるように、偏重係数を動的に変更することもできる。例えば、偏重係数は、偏重係数の効果を、選択されたパーティションにデーターが埋まるにつれて、ときの経過と共に減少させる減衰関数にしたがって変化するのでもよい。
【0046】
[0052] 他の手法では、偏重係数は、割り当てを配置における新たなパーティションに向けて偏倚させる(bias)スロッティング(slotting)の概念を使用する修正パーティション関数によって組み入れられる(implement)。ここでは、修正パーティション関数は、パーティション数よりも数が大きい複数のスロットを定める。次いで、新たなパーティションまたは選択されたパーティションがこれらのスロットの内1つよりも多くに割り当てられるように、スロットをパーティションに論理的に割り当てる。このハッシュ関数は、スロットを識別するデーターを戻し、データーを対応するパーティションに割り当てるように構成される。ハッシュ関数によって戻される値は、スロット数に及ぶので、1つのスロットだけに割り当てられたパーティションと比較して、スロットの内1つよりも多くに割り当てられたパーティションにデーターが一層頻繁に割り当てられることになる。
【0047】
[0053] 例示するために、図5について検討する。図5は、1つ以上の実施態様にしたがってパーティションをスロットに割り当てる図を全体的に500で示す。ここでは、図3における例の3つのパーティション208(0)、208(1)、208(1)が示されている。ある数のスロット502を定めて、パーティションに割り当てる。この例では、4つのスロット502を3つのパーティション208(0)、208(1)、208(2)に割り当て、パーティション208(0)およびパーティション208(1)(例えば、古いパーティション)の各々が1つのスロットに割り当てられ、パーティション208(2)(例えば、新しいパーティション)が2つのスロットに割り当てられる。
【0048】
[0054] 先とは異なる一般形態p(k)=hash(k)modNを有するパーティション関数に対して、偏倚を実施するための修正は、Nの値をSの値と置き換えることを伴う。ここで、Sはスロットの数である。加えて、実際のパーティションに戻されるスロット識別にマッピングするために、スロット割り当てを示すデーターを維持しなければならない。次いで、2ステップで区分を計算する。
【0049】
(1)スロット=hash(k)modSを計算する。ここで、Sはスロットの数である。
(2)スロット割り当てを示すデーターを使用して、スロットをパーティションにマッピングする。
【0050】
[0055] 新たなデーターが到達するに連れて、より多くのキーが新たなパーティションにマッピングされ、したがって、新たなパーティションは、古いパーティションよりも高い速度で埋められて行き、多くの負荷を引き受ける。最終的に、システムはパーティション間の均衡に近づくことができ、その時点で、新しい方のパーティションに向けて偏らせ続けると、不均衡に戻る原因となるおそれがある。この場合、新しい方のパーティションが過剰な負荷にサービスすることになる。この問題に取り組むために、本明細書において説明したような他の再区分処理を実行することができる。これは、同じパーティションを使用するが、偏重ハッシュ関数から、スロットや偏重係数を使用しない「標準的な」関数への切り替えを行わせる。ここでは、より多くの容量を追加せずに、パーティション関数を変更/更新するために、追加の再区分を行う。この追加の再区分の後、システムは均衡が取れそして拡張される。
手順例
[0056] 以下の論出では、既に説明したシステムおよびデバイスを利用して実現することができる技法について説明する。手順の各々の態様は、ハードウェア、ファームウェア、またはソフトウェア、あるいはこれらの組み合わせで実現することができる。手順は、1つ以上のデバイスによって実行される動作を指定する1組のブロックとして示され、それぞれのブロックによって動作を実行するために示される順序には必ずしも限定されない。以下の論述の一部では、図1の環境100および図2図5の例を引用する場合もある。一例として、手順の態様は、リソース118および/またはリソース・マネージャ120を提供するように構成されたサービス・プロバイダー106に関連する1つ以上のサーバー・デバイスによってというように、相応しく構成されたコンピューティング・デバイスによって実行することができる。
【0051】
[0057] 図1図5の例に関係付けて説明した機能、特徴、および概念は、ここで説明する手順のコンテキストにおいても採用することができる。更に、以下で異なる手順に関係付けて説明する機能、特徴、および概念は、異なる手順間で相互交換することができ、個々の手順のコンテキストにおける実施に限定されるのではない。更に、この説明における異なる代表的手順および対応する図に関連するブロックは、一緒に適用すること、および/または異なる方法で組み合わせることもできる。したがって、異なる環境例、デバイス例、コンポーネント例、および手順例に関係付けて本文書全体において説明する個々の機能、特徴、および概念は、適した組み合わせであればいずれにおいても使用することができ、列挙した例によって表される特定の組み合わせに限定されるのではない。
【0052】
[0058] 図6は、複合パーティション関数が、1つ以上の実施態様にしたがって定められる手順例600を示す流れ図である。第1パーティション関数を用いてデーターベースを区分する(ブロック602)。例えば、リソース・マネージャ120が、既に論じたように、リソース118に関連付けられたデーターベース124を管理するように動作するのでもよい。データーベース124を複数のパーティション126に分割することができる。パーティション126は、リソース・マネージャ120またはこれ以外によって実装されるパーティション関数122によって定められ、および/または管理される。
【0053】
[0059] 次いで、データーベースを再区分する(ブロック604)。再区分は、自動的に開始すること、またはユーザーの指令で開始することもできる。再区分を実行できるのは、既存のパーティションの配置の記憶容量が閾値利用レベルに達したときである。この場合、再区分は、更に多くの記憶容量を追加することを伴えばよい。加えてまたは代わりに、本明細書において論じたようにパーティションの均衡を取り直す、特定の割り当て目標を達成するためにパーティション関数を変更する、均衡が取れた割り当てに戻すために偏ったハッシュ関数を取り消す等のような他の理由のために、再区分を実行してもよい。
【0054】
[0060] 再区分の一部として、再区分の時点において存在するパーティション内に位置するデーター・エントリーに対してキー・メンバーシップのレコードを作成し(ブロック606)、第2パーティション関数に関連付けられた1つ以上の新たなパーティションを追加する(608)。本明細書において既に論じたようにキー・メンバーシップのレコードを実装するためには、種々の技法を使用することができる。例えば、ブルーム・フィルターまたは他の圧縮データー構造を使用して、再区分の時点において存在するパーティション内に位置するデーター・エントリーに関連付けられたキー値またはその他の適した識別子を記録することができる。更に、記憶容量を増加し、パーティションの新たな配置を作成するために、新たなパーティションを追加することもできる。本明細書において論ずるように、パーティションの新たな配置は、新たなパーティションを処理する(account for)第2パーティション関数と関連付けられ、新旧双方のパーティションにまたがって新たなデーターを分配するように構成されている。
【0055】
[0061] 加えて、以後のデーターベース処理のために複合パーティション関数を定める。複合パーティション関数は、キー・メンバーシップのレコードにおいて発見されたキー値を有するデーターに対して第1パーティション関数を適用し、またはキー・メンバーシップのレコードにおいて発見されないキー値を有するデーターに対して第2パーティション関数を適用するように構成されている(ブロック610)。次いで、データーベースに関連するデーター要求を管理するために、複合パーティション関数を適用する(ブロック612)。一般に、複合パーティション関数は、キー・メンバーシップの1つまたは複数のレコードを利用して、データーに対するキー値/識別子を、異なるパーティション時期に関連付けられた対応するパーティション関数にマッピングするように構成される。次いで、複合パーティション関数の適用によって戻された、対応するパーティション関数にしたがって、データー要求を処理することができる。本明細書において論じた複合パーティション関数手法を使用することによって、再区分の時点において存在していたパーティション内に位置するデーター・エントリーがそれらのそれぞれの位置を保持するように、再区分を実行することが可能になる。言い換えると、古いデーターは移動させられない。手順600と関連付けて採用することができる複合パーティション関数に関する種々の詳細および例については、既に図1図5に関して論じた。
【0056】
[0062] 図7は、1つ以上の実施態様にしたがって、要求をパーティションの配置に導くために複合パーティション関数を使用する手順例700を示す流れ図である。データーベースの1つ以上のパーティションの第1配置に関連付けられた第1パーティション関数に対応するデーターに対して、識別子のレコードを作る(ブロック702)。識別子のレコードは、本明細書において説明したようなブルーム・フィルターとして、または1つ以上のパーティションの配置に関するデーターのメンバーシップを示すために使用することができる他の適したデーター構造(例えば、パーティション時期)として構成することができる。識別子は、本明細書において論じたようなキー値として構成することができるが、識別ストリング、データー・コンテンツに対するハッシュ値等のような、他の識別子も考えられる。1つ以上のパーティションの第1配置(arrangement)は、データーベースの初期構成(configuration)(例えば、最初のパーティション時期)に対応するのでもよい。加えてまたは代わりに、1つ以上のパーティションの第1配置は、以前の時期に対する配置の再区分の結果生じるのでもよく、この場合、第1パーティション関数は複合関数として構成することができる。
【0057】
[0063] 少なくとも1つの追加のパーティションを追加して、再構成された(reconfigured)配置における記憶容量を増加させるために、データーベースに対するパーティションの配置を再構成する(ブロック704)。ここでは、再区分は、追加の容量をシステムに追加するために、先に論じたように行うことができる。再区分の結果、最初の配置よりも多いパーティションを有することができる構成された配置(reconfigured arrangement)が得られる。したがって、第1配置に関連付けられた第1パーティション関数と再構成された配置に関連付けられた第2パーティション関数とを組み合わせた複合パーティション関数が生成される。複合パーティション関数は、データーベースに対するデーター要求をこれらのパーティション間で導くために、識別子のレコードを使用して、第1パーティション関数または第2パーティション関数のどちらを適用するか確認するように構成されている(ブロック706)。次いで、複合パーティション関数を使用してデーター要求を導く(ブロック708)。既に説明したように、異なるパーティションの配置に関連付けられた2つ以上の連続パーティション時期を処理する複合パーティション関数を生成することができる。異なる配置を異なる個々のパーティション関数および/または異なる数のパーティションに関連付けることができる(しかし、あるシナリオでは、同じ数のパーティションが2つ以上の時期に使用されることもある(例えば、再均衡化))。また、異なる時期/配置を、特定の時期内にあるデーター/要求のメンバーシップを認識するために使用することができるそれぞれの識別子のレコードと関連付けることもできる。次いで、しかるべきパーティション関数をデーター/要求にマッピングし、データー/要求を対応するパーティションに導くために使用する。複合パーティション関数は、連続するパーティション時期に関連付けられた2つ以上のパーティション関数を組み合わせるように構成され、各パーティション時期は、データーベースに対する特定のパーティションの配置に対応する。手順700と関連付けて採用することができる複合パーティション関数に関する種々の更なる詳細および例については、既に図1図6に関して論じた。
【0058】
[0064] 以上、いくつかの手順例について検討したので、1つ以上の実施態様において本明細書で説明した技法の態様を実現するために採用することができるシステムおよびデバイス例の論述についてこれより検討する。
システムおよびデバイス例
[0065] 図8は、本明細書において説明した種々の技法を実現することができる1つ以上のコンピューティング・システムおよび/またはデバイスを表すコンピューティング・デバイス例802を含むシステム例を、全体的に800で示す。コンピューティング・デバイス802は、例えば、サービス・プロバイダーのサーバー、クライアントに関連するデバイス(例えば、クライアント・デバイス)、オンチップ・システム、および/または任意の他の適したコンピューティング・デバイスまたはコンピューティング・システムであってもよい。
【0059】
[0066] 図示するコンピューティング・デバイス例802は、処理システム804、1つ以上のコンピューター読み取り可能媒体806、および1つ以上のI/Oインターフェース808を含み、これらは互いに通信可能に結合されている。図示しないが、コンピューティング・デバイス802は、更に、種々のコンポーネントを互いに結合するシステム・バスまたは他のデーターおよびコマンド転送システムも含むことができる。システム・バスは、メモリー・バスまたはメモリー・コントローラー、周辺バス、ユニバーサル・シリアル・バス、および/または種々のバス・アーキテクチャの内任意のものを利用するプロセッサー・バスまたはローカル・バスというような、異なるバス構造の内任意の1つまたは組み合わせを含むことができる。制御ラインおよびデーター・ラインというような、種々の他の例も考えられる。
【0060】
[0067] 処理システム804は、ハードウェアを使用して1つ以上の動作を実行する機能を表す。したがって、処理システム804は、プロセッサー、機能ブロック等として構成することができるハードウェア・エレメント810を含むように示されている。これは、特定用途集積回路、または1つ以上の半導体を使用して形成される他のロジック・デバイスのような、ハードウェアによる実装を含んでもよい。ハードウェア・エレメント810は、これらが形成される材料にも、処理メカニズムが内部で採用されている用具(material)にも限定されない。例えば、プロセッサーは、半導体(1つまたは複数)および/またはトランジスター(例えば、電子集積回路(IC))で構成されてもよい。このようなコンテキストでは、プロセッサー実行可能命令は、電子的実行可能命令となることができる。
【0061】
[0068] コンピューター読み取り可能媒体806は、メモリー/ストレージ812を含むように示されている。メモリー/ストレージ812は、1つ以上のコンピューター読み取り可能媒体に関連するメモリー/記憶容量を表す。メモリー/ストレージ812は、揮発性媒体(ランダム・アクセス・メモリー(RAM)のような媒体)、および/または不揮発性媒体(リード・オンリー・メモリー(ROM)、フラッシュ・メモリー、光ディスク、磁気ディスク等のような媒体)を含むことができる。メモリー/ストレージ812は、固定媒体(例えば、RAM、ROM、固定ハード・ドライブ等)、およびリムーバブル媒体(例えば、フラッシュ・メモリー、リムーバブル・ハード・ドライブ、光ディスク等)を含むことができる。コンピューター読み取り可能媒体806は、以下で更に説明するように、種々の他の方法で構成することもできる。
【0062】
[0069] 入力/出力インターフェース(1つまたは複数)808は、ユーザーがコマンドおよび情報をコンピューティング・デバイス802に入力することを可能にし、更に種々の入力/出力デバイスを使用して、ユーザーおよび/または他のコンポーネントあるいはデバイスに情報を提示することを可能にする機能を表す。入力デバイスの例には、キーボード、カーソル制御デバイス(例えば、マウス)、マイクロフォン、スキャナー、タッチ機能(例えば、物理的接触を検出するように構成された容量性または他のセンサ)、カメラ(例えば、可視波長または赤外線周波数のような非可視波長を採用して、タッチを伴わない動きをジェスチャとして検出することができるもの)等が含まれる。出力デバイスの例には、ディスプレイ・デバイス(例えば、モニターまたはプロジェクタ)、スピーカー、プリンター、ネットワーク・カード、接触応答デバイス等が含まれる。つまり、コンピューティング・デバイス802は、ユーザーの対話処理をサポートするために、以下で更に説明するような、種々の方法で構成することができる。
【0063】
[0070] 本明細書では、ソフトウェア、ハードウェア・エレメント、またはプログラム・モジュールという一般的なコンテキストで種々の技法を記述することができる。一般に、このようなモジュールは、ルーチン、プログラム、オブジェクト、エレメント、コンポーネント、データー構造等を含み、特定のタスクを実行するかまたは特定の抽象データー型を実装する。「モジュール」、「機能」、および「コンポーネント」という用語は、本明細書において使用される場合、一般に、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。本明細書において説明した技法の特徴は、プラットフォーム独立である。これが意味するのは、種々のプロセッサーを有する種々の商用コンピューティング・プラットフォーム上で本技法を実現できるということである。
【0064】
[0071] 説明したモジュールおよび技法の実施態様(implementation)には、何らかの形態のコンピューター読み取り可能媒体上に格納すること、またはこの媒体を通じて送信することができるものもある。コンピューター読み取り可能媒体は、コンピューティング・デバイス802によってアクセスすることができる種々の媒体を含むことができる。一例として、そして限定ではなく、コンピューター読み取り可能媒体は「コンピューター読み取り可能記憶媒体」および「通信媒体」を含むことができる。
【0065】
[0072] 「コンピューター読み取り可能記憶媒体」とは、単なる信号送信、搬送波、または信号自体とは対照的に、情報の格納を可能にする媒体および/またはデバイスを指す。つまり、コンピューター読み取り可能記憶媒体は、信号担持媒体も信号自体も含まない。コンピューター読み取り可能記憶媒体は、揮発性および不揮発性、リムーバブルおよび非リムーバブル媒体および/または記憶デバイスのようなハードウェアを含み、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、論理エレメント/回路、または他のデーターのような情報の格納に適した方法または技術で実現される。コンピューター読み取り可能記憶媒体の例には、RAM、ROM、EEPROM、フラッシュ・メモリーまたは他のメモリー技術、CD−ROM、ディジタル・バーサタイル・ディスク(DVD)または他の光ストレージ、ハード・ディスク、磁気カセット、磁気テープ、磁気ディスク記憶デバイスまたは他の磁気記憶デバイス、あるいはその他の記憶デバイス、有形媒体、あるいは所望の情報を格納するのに適しており、コンピューターによってアクセスすることができる製品を含むことができるが、これらに限定されるのではない。
【0066】
[0073] 「通信媒体」とは、ネットワークを通じてというようにして、コンピューティング・デバイス802のハードウェアに命令を送信するように構成された信号担持媒体を指すとして差し支えない。通信媒体は、通例、搬送波のような変調データー信号、データー信号、または他の移送メカニズムに、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、またはその他のデーターを具体化することができる。また、信号媒体は任意の情報配信媒体も含む。「変調データー信号」という用語は、信号内に情報をエンコードする方法でその特性の1つ以上が設定または変更させられた信号を意味する。一例として、そして限定ではなく、通信媒体は、有線ネットワークまたは直接有線接続のような有線媒体と、音響、RF、赤外線、およびその他のワイヤレス媒体のようなワイヤレス媒体とを含む。
【0067】
[0074] 既に説明したように、ハードウェア・エレメント810およびコンピューター読み取り可能媒体806は、命令、モジュール、プログラマブル・デバイス・ロジック、および/または固定デバイス・ロジックを表し、本明細書において説明した技法の少なくとも一部の態様を実現するために一部の実施形態において採用することができるハードウェア形態で実現される。ハードウェア・エレメントは、集積回路またはオンチップ・システム、特定用途集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、複合プログラマブル・ロジック・デバイス(CPLD)、およびシリコンまたはその他のハードウェア・デバイスにおけるその他の実施態様のコンポーネントを含むことができる。このコンテキストでは、ハードウェア・エレメントは、プログラム・タスクを実行する処理デバイスとして動作することができ、タスクは、ハードウェア・エレメント、および実行のための命令を格納するために利用されるハードウェア・デバイス、例えば、既に説明したコンピューター読み取り可能記憶媒体によって具体化される、命令、モジュール、および/またはロジックによって定められる。
【0068】
[0075] 以上のものの組み合わせも、本明細書において説明した種々の技法およびモジュールを実現するために採用することができる。したがって、アプリケーション112、通信モジュール114、リソース・マネージャ120、およびその他のプログラム・モジュールを含むソフトウェア、ハードウェア、またはプログラム・モジュールは、何らかの形態のコンピューター読み取り可能記憶媒体上に実現することができ、および/または1つ以上のハードウェア・エレメント810によって具体化された1つ以上の命令および/またはロジックとして実現することができる。コンピューティング・デバイス802は、ソフトウェアおよび/またはハードウェア・モジュールに対応する特定の命令および/または機能を実装するように構成することができる。したがって、コンピューティング・デバイス802によってソフトウェアとして実行可能なモジュールとしてのモジュールの実装は、少なくとも部分的にハードウェアで、例えば、コンピューター読み取り可能記憶媒体および/または処理システムのハードウェア・エレメント810の使用によって達成することができる。命令および/または機能は、本明細書において説明した技法、モジュール、および例を実現するために、1つ以上の製品(例えば、1つ以上のコンピューティング・デバイス802および/または処理システム804)によって実行可能/動作可能にすることもできる。
【0069】
[0076] 更に図8に示すように、システム例800は、パーソナル・コンピューター(PC)、テレビジョン・デバイス、および/または移動体デバイス上においてアプリケーションを実行するとき、継ぎ目のないユーザー体験のためのユビキタス環境を可能にする。アプリケーションを利用しながら、ビデオ・ゲームをプレーしながら、ビデオを見ながら等で1つのデバイスから次のデバイスに移るとき、サービスおよびアプリケーションは共通のユーザー体験のために3つの環境全てにおいて実質的に同様に実行する。
【0070】
[0077] システム例800では、複数のデバイスが中央コンピューティング・デバイスを介して相互接続されている。中央コンピューティング・デバイスは、複数のデバイスに対してローカルでもよく、または複数のデバイスから離れて配置されてもよい。一実施形態では、中央コンピューティング・デバイスは、ネットワーク、インターネット、または他のデーター通信リンクを通じて複数のデバイスに接続された1つ以上のサーバー・コンピューターを擁するクラウドであってもよい。
【0071】
[0078] 一実施形態では、この相互接続アーキテクチャは、共通の継ぎ目のない体験を複数のデバイスのユーザーに提供するために、複数のデバイスにまたがって機能を配信する(deliver)ことを可能にする。複数のデバイスの各々は、異なる物理的要件および能力を有しても良く、中央コンピューティング・デバイスは、デバイスへの体験の配信を可能にするプラットフォームを使用する。この体験は、そのデバイスに合わせて特別に作られる(tailored)が、しかも全てのデバイスに共通でもある。一実施形態では、ターゲット・デバイスのクラスが作成され、体験は包括的なデバイスのクラスに合わせて特別に作られる。デバイスのクラスは、物理的特徴、使用の形式、または他の共通するデバイスの特性によって定められてもよい。
【0072】
[0079] 種々の実施態様において、コンピューティング・デバイス802は、コンピューター814、移動体816、およびテレビジョン818の使用に合わせてというように、種々の異なる構成を取ることができる。これらの構成の各々は、全体的に異なる構造および能力を有する可能性があるデバイスを含み、したがって、コンピューティング・デバイス802は、異なるデバイス・クラスの1つ以上にしたがって構成することができる。例えば、コンピューティング・デバイス802は、パーソナル・コンピューター、デスクトップ・コンピューター、マルチスクリーン・コンピューター、ラップトップ・コンピューター、ネットブック等を含む、コンピューター814クラスのデバイスとして実現することもできる。
【0073】
[0080] また、コンピューティング・デバイス802は、移動体電話機、携帯用音楽プレーヤー、携帯用ゲーミング・デバイス、タブレット・コンピューター、マルチスクリーン・コンピューター等のような、移動体デバイスを含む移動体816クラスのデバイスとして実現することもできる。また、コンピューティング・デバイス802は、日常的な視聴環境において通常もっと大きな画面を有するデバイスまたはこれに接続されたデバイスを含むテレビジョン818クラスのデバイスとして実現することもできる。これらのデバイスは、テレビジョン、セットトップ・ボックス、ゲーミング・コンソール等を含む。
【0074】
[0081] 本明細書において説明した技法は、コンピューティング・デバイス802のこれら種々の構成によってサポートすることができ、本明細書において説明した技法の具体的な例に限定されるのではない。これは、コンピューティング・デバイス802上にリソース・マネージャ120を含ませることによって例示されている。また、リソース・マネージャ120およびその他のモジュールの機能は、全体的にまたは部分的に、以下で説明するように、プラットフォーム822を介して「クラウド」820上においてというように、分散型システムの使用によって実現することもできる。
【0075】
[0082] クラウド820は、リソース824のためのプラットフォーム822を含む、および/または表す。プラットフォーム822は、クラウド820のハードウェア(例えば、サーバー)およびソフトウェア・リソースの基礎機能を抽象化する。リソース824は、コンピューティング・デバイス802から離れたサーバー上でコンピューター処理が実行されている間に利用することができるアプリケーションおよび/またはデーターを含むことができる。また、リソース824は、インターネットを通じて、および/またはセルラまたはWi−Fiネットワークのような加入者ネットワークを通じて提供されるサービスも含むことができる。
【0076】
[0083] プラットフォーム822は、コンピューティング・デバイス802を他のコンピューティング・デバイスと接続するためのリソースおよび機能を抽象化することができる。また、プラットフォーム822は、プラットフォーム822を介して実装されるリソース824に対して出される要求(demand)に合わせて、対応するレベルの規模(scale)を与えるために、リソースの規模調整(scaling)を抽象化する役割を果たすこともできる。したがって、相互接続されたデバイスの実施形態では、本明細書において説明した機能の実装は、システム800全域にわたって分散することができる。例えば、機能は、部分的にコンピューティング・デバイス802上に実装され、更にクラウド820の機能を抽象化するプラットフォーム822を介して実装されてもよい。
実施態様例
[0084] 本明細書において説明した複合パーティション関数の実施態様例は、以下の例の内の1つ、またはその1つ以上の任意の組み合わせを含むが、それらに限定されるのではない。
【0077】
[0085] コンピューティング・デバイスによって実行される方法は、第1パーティション関数によってデーターベースを区分するステップと、データーベースを再区分するステップとを含む。データーベースを再区分するステップは、再区分の時点において存在するパーティション内に位置するデーター・エントリーに対してキー・メンバーシップのレコードを作成するステップと、第2パーティション関数に関連付けられた1つ以上の新たなパーティションを追加するステップと、後続のデーターベース処理のために複合パーティション関数を定めるステップとによって行われる。複合パーティション関数は、キー・メンバーシップのレコードにおいて発見されたキー値を有するデーターに対して第1パーティション関数を適用する、またはキー・メンバーシップのレコードにおいて発見されないキー値を有するデーターに対して第2パーティション関数を適用するように構成される。
【0078】
[0086] 以上で説明した方法において、再区分の時点において存在するパーティション内に位置するデーター・エントリーがそれらのそれぞれの位置を保持するように、再区分が実行される。
【0079】
[0087] 以上で説明した方法において、キー・メンバーシップのレコードは、再区分の時点において存在するパーティション内に位置するデーター・エントリーに関連付けられたキー値を記録するように構成される。
【0080】
[0088] 以上で説明した方法において、キー・メンバーシップのレコードは、再区分の時点においてデーターベース内に存在するデーター・エントリーに対応するキーを識別するように構成された圧縮データー構造を含む。
【0081】
[0089] 以上で説明した方法において、キー・メンバーシップのレコードはブルーム・フィルターを含む。
[0090] 以上で説明した方法において、複合パーティション関数は、連続するパーティション時期に関連付けられた2つ以上のパーティション関数を組み合わせるように構成され、各パーティション時期が、データーベースに対する特定のパーティションの配置に対応する。
【0082】
[0091] 以上で説明した方法において、第1パーティション関数および第2パーティション関数は、ハッシュ関数として構成され、データー要求に対するキー値に適用されたとき、キー値に対応するデーターベースのパーティションを識別するデーターを戻す。
【0083】
[0092] 以上で説明した方法において、第1パーティション関数は、追加の記憶容量を追加するためのデーターベースの以前の再区分のために作られた以前の複合関数を含み、定められた複合パーティション関数は、キー・メンバーシップのレコードにおいて発見されたキー値を有するデーターに対して以前の複合関数を適用し、その他のデーターに対して第2パーティション関数を適用するように構成される。
【0084】
[0093] 以上で説明した方法において、複合(combined)パーティション関数は、データーベースのパーティションにわたるデーター分布の均衡を取るために、新たなパーティション上の新たなデーター・エントリーの配置に向けてデーターの割り当てを偏倚させるように構成される
[0094] 以上で説明した方法において、複合パーティション関数は、新たなデーター・エントリーに対する少なくとも一部のキー値を、キー・メンバーシップのレコードにおいて発見されたものとして誤認識し、誤認識されたキー値に関連付けられたデーター・エントリーが、再区分の時点において存在するパーティションに割り当てられ、一貫してその内部で突き止められるようにする。
【0085】
[0095] コンピューティング・デバイスは、処理システムと、1つ以上のモジュールとを含み、処理システムによってモジュールが実行されると、記憶容量を増加させるためのデーターベースの再区分のための動作を実行する。この動作は、再区分の時点において存在するデーターベースのパーティション内に位置するデーター・エントリーに対してキー・メンバーシップのレコードを作成し、再区分の時点において存在するデーターベースのパーティションが第1パーティション関数と関連付けられ、第2パーティション関数に関連付けられた新たなパーティションを追加し、複合パーティション関数を後続のデーターベース要求処理のために定める動作を含む。複合パーティション関数は、再再区分の時点において存在するパーティション内に位置するデーター・エントリーが、再区分の時点において存在するパーティションにおいてそれらのそれぞれの位置を保持するように、キー・メンバーシップのレコードにおいて発見されたキー値を含むデーター要求に対して第1パーティション関数を適用し、またはキー・メンバーシップのレコードにおいて発見されないキー値を含むデーター要求に対して第2パーティション関数を適用するように構成される。
【0086】
[0096] 以上のコンピューティング・デバイスにおいて、キー・メンバーシップのレコードは、再区分の時点において存在するデーター・エントリーに関連付けられたキーに対して設定されたビット値を有するブルーム・フィルターとして構成され、ブルーム・フィルターを介して、キーに対するメンバーシップを示す。
【0087】
[0097] 以上のコンピューティング・デバイスにおいて、ブルーム・フィルターは、設定変更可能な許容度にしたがって偽陽性エラーを生じ、再区分の後に作成されたデーター・エントリーの少なくとも一部を誤認識させ、第1パーティション関数を使用して処理させる。誤認識されたデーター・エントリーが第1パーティション関数を使用して信頼性高く突き止められるように、偽陽性エラーには一貫性があり、ブルーム・フィルターの簡潔さの度合いは設定変更可能な許容度に依存する。
【0088】
[0098] 以上のコンピューティング・デバイスにおいて複合パーティション関数は、データーベースを再区分するために、第2パーティション関数を、複数の以前の動作に関連付けられた複数の個々のパーティション関数と組み合わせるように構成される。
【0089】
[0099] 以上のコンピューティング・デバイスにおいて、第2パーティション関数は、再区分の時点に存在するデーターベースのパーティションおよび新たなパーティションに跨がってデーターを割り当てるように構成される。
【0090】
[00100] コンピューティング・デバイスによって実行される方法は、データーベースに対する1つ以上のパーティションの第1配置に関連付けられた第1パーティション関数に対応するデーターに対して識別子のレコードを作るステップと、少なくとも1つの追加のパーティションを追加して再構成された配置において記憶容量を増加させるために、データーベースに対するパーティションの配置を再構成するステップと、第1配置に関連付けられた第1パーティション関数と再構成された配置に関連付けられた第2パーティション関数とを組み合わせる複合パーティション関数を生成するステップであって、複合パーティション関数が、データーベースに対するデーター要求をこれらのパーティション間で導くために、識別子のレコードを使用して、第1パーティション関数または第2パーティション関数のどちらを適用するか確認するように構成される、ステップと、複合パーティション関数を使用してデーター要求を導くステップとを含む。
【0091】
[00101] 以上で説明した方法において、複合パーティション関数を使用してデーター要求を導出するステップは、データー要求毎に、識別子のレコードを使用して、データー要求に関連付けられた識別子が識別子のレコードに含まれているか否か確認するステップと、識別子が含まれるとき、第1パーティション関数を使用してデーター要求を導出するステップと、または、識別子が含まれていない場合、第2パーティション関数を使用してデーター要求を導出するステップとを含む。
【0092】
[00102] 以上で説明した方法において、データー要求は、データーベースのパーティションにおいてデーター・エントリーにアクセスする、追加する、または修正する要求を含む。
【0093】
[00103] 以上で説明した方法において、再区分よりも前に存在するデーター・エントリーは、再区分の結果として、異なる位置に移動されない。
[00104] 以上で説明した方法において、第2パーティション関数は、偏重係数を組み込むように構成された修正ハッシュ関数を含み、偏重係数は、再構成された配置に追加された少なくとも1つの追加のパーティションへの新たなデーターの割り当てを、第1配置に対して存在する1つ以上のパーティションに対するよりも頻繁に行わせる。
【0094】
結論
[00105] 以上、構造的特徴および/または方法論的アクトに特定的な文言で主題について説明したが、添付する特許請求の範囲において定められる主題は、必ずしも、説明した具体的な特徴やアクトには限定されないことは理解されてしかるべきである。逆に、具体的な特徴やアクトは、特許請求する主題を実現する形態例として開示したまでである。
図1
図2
図3
図4
図5
図6
図7
図8