(57)【特許請求の範囲】
【請求項１】
コンピュータによって実行される方法であって、
複数シャードシステム内のシャードの量の変化が生じたことを判断するステップと、
前記シャードの量の変化の判断に応答して、クライアントを通常状態からリバランシング状態に遷移させるステップとを備え、前記通常状態において、クライアントは前記複数シャードシステムに格納された複数のデータ項目に対して、所定タイプの動作を第１の態様で実行し、前記リバランシング状態において、前記クライアントは前記複数シャードシステムに格納された前記複数のデータ項目に対して、前記所定タイプの動作を第２の態様で実行し、前記第２の態様は前記第１の態様とは異なっており、前記リバランシング状態において、前記クライアントは前記データ項目のいずれに対する１つ以上の排他的ロックを取得することなく前記所定タイプの動作を実行し、前記リバランシング状態において、前記所定タイプの動作は、前記複数シャードシステム内の第１のシャードおよび前記複数シャードシステム内の第２のシャードに基づいて実行され、前記第１のシャードは、前記シャードの量の変化前において、前記第１のシャード内の第１のメモリ位置に格納されたデータ項目を含み、当該データ項目は前記複数のデータ項目の１つであり、前記第２のシャードは、前記シャードの量の変化後において、前記第２のシャード内の第２のメモリ位置に格納されたデータ項目を含み、
前記クライアントが前記リバランシング状態にある間に、前記複数のデータ項目の１つ以上のデータ項目について、１つ以上のソースシャードとは異なる１つ以上の宛先シャードを決定するステップを備え、前記１つ以上のソースシャードは、前記クライアントが前記通常状態から前記リバランシング状態に遷移する前の前記通常状態において、当該１つ以上のデータ項目を格納していたものであり、
前記クライアントが前記リバランシング状態にある間に、前記１つ以上のデータ項目を前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動させるステップを備える、コンピュータによって実行される方法。
【請求項２】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、排他的ロックを取得することなく、前記１つ以上のデータ項目の移動とは非同期的に、データ項目に対して前記所定タイプの動作を前記第２の態様で実行するステップをさらに備える、請求項１に記載のコンピュータによって実行される方法。
【請求項３】
前記シャードの量の変化に続いて、前記複数シャードシステム内の前記シャードの量に少なくとも部分的に基づいて、前記データ項目のプライマリキーをハッシュすることによって、前記１つ以上のデータ項目について、前記１つ以上の宛先シャードを決定するステップと、
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されたとの判断に応答して、前記クライアントを前記リバランシング状態から前記通常状態に遷移させるステップとをさらに備える、請求項１または２に記載のコンピュータによって実行される方法。
【請求項４】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーを有する第１のデータ項目に対して、追加の動作を前記第２の態様で実行するステップをさらに備え、前記追加の動作は、少なくとも部分的に、
前記シャードの量の変化前の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化前に前記第１のデータ項目が格納された特定のソースシャードを判断することと、
前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記第１のデータ項目が追加されることになる特定の宛先シャードを判断することと、
前記特定のソースシャード上のデータ項目のいずれもが前記第１のデータ項目のプライマリキーを有していないことを判断することと、
前記特定の宛先シャード上のデータ項目のいずれもが真のトゥームストーン属性値および前記第１のデータ項目のプライマリキーを有していないことを判断することと、
前記第１のデータ項目を前記特定の宛先シャードに挿入することと、によって実行される、請求項１〜３のいずれか１項に記載のコンピュータによって実行される方法。
【請求項５】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーを有する第１のデータ項目に対して、追加の動作を前記第２の態様で実行するステップをさらに備え、前記追加の動作は、少なくとも部分的に、
前記シャードの量の変化前の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化前に前記第１のデータ項目が格納された特定のソースシャードを判断することと、
前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記第１のデータ項目が追加されることになる特定の宛先シャードを判断することと、
前記特定のソースシャード上のデータ項目のいずれもが前記第１のデータ項目のプライマリキーを有していないことを判断することと、
前記特定の宛先シャード上の第２のデータ項目が真のトゥームストーン属性値および前記第１のデータ項目のプライマリキーを有していることを判断することと、
前記第１のデータ項目の属性値を前記第２のデータ項目の１つ以上の属性に割り当てることと、
前記第２のデータ項目のトゥームストーン属性値を偽に設定することと、によって実行される、請求項１〜４のいずれか１項に記載のコンピュータによって実行される方法。
【請求項６】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーを有する第１のデータ項目に対して、更新タイプの動作を前記第２の態様で実行するステップをさらに備え、
前記更新タイプの動作は、少なくとも部分的に、
前記シャードの量の変化前の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化前に前記第１のデータ項目が格納された特定のソースシャードを判断することと、
前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記第１のデータ項目が位置することになる特定の宛先シャードを判断することと、
前記特定のソースシャード上のデータ項目のいずれもが前記第１のデータ項目のプライマリキーを有していないことを判断することと、
前記特定の宛先シャード上の第２のデータ項目が偽のトゥームストーン属性値および前記第１のデータ項目のプライマリキーを有していることを判断することと、
前記第１のデータ項目の属性値を前記第２のデータ項目の１つ以上の属性に割り当てることと、によって実行される、請求項１〜５のいずれか１項に記載のコンピュータによって実行される方法。
【請求項７】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーを有する第１のデータ項目に対して、更新タイプの動作を前記第２の態様で実行するステップをさらに備え、前記更新タイプの動作は、少なくとも部分的に、
前記シャードの量の変化前の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化前に前記第１のデータ項目が格納された特定のソースシャードを判断することと、
前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記第１のデータ項目が位置することになる特定の宛先シャードを判断することと、
前記特定のソースシャード上の第２のデータ項目が前記第１のデータ項目のプライマリキーおよび偽のトゥームストーン属性値を有していることを判断することと、
前記特定の宛先シャード上の第３のデータ項目が前記第１のデータ項目のプライマリキーを有していることを判断することと、
前記第１のデータ項目の属性値を前記第３のデータ項目の１つ以上の属性に割り当てることと、
前記第３のデータ項目のバージョン番号を前記第２のデータ項目のバージョン番号とは異なる値に設定することと、によって実行される、請求項１〜６のいずれか１項に記載のコンピュータによって実行される方法。
【請求項８】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーを有する第１のデータ項目に対して、更新タイプの動作を前記第２の態様で実行するステップをさらに備え、前記更新タイプの動作は、少なくとも部分的に、
前記シャードの量の変化前の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化前に前記第１のデータ項目が格納された特定のソースシャードを判断することと、
前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記第１のデータ項目が位置することになる特定の宛先シャードを判断することと、
前記特定のソースシャード上の第２のデータ項目が前記第１のデータ項目のプライマリキーおよび偽のトゥームストーン属性値を有していることを判断することと、
前記特定の宛先シャード上のデータ項目のいずれもが前記第１のデータ項目のプライマリキーを有していないことを判断することと、
前記第２のデータ項目のバージョン番号とは異なるバージョン番号を有する前記第１のデータ項目を前記特定の宛先シャードに挿入することと、によって実行される、請求項１〜７のいずれか１項に記載のコンピュータによって実行される方法。
【請求項９】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーを有する第１のデータ項目に対して、削除タイプの動作を前記第２の態様で実行するステップをさらに備え、前記削除タイプの動作は、少なくとも部分的に、
前記シャードの量の変化前の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化前に前記第１のデータ項目が格納された特定のソースシャードを判断することと、
前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記第１のデータ項目が位置することになる特定の宛先シャードを判断することと、
前記特定のソースシャード上の第２のデータ項目が前記第１のデータ項目のプライマリキーを有していることを判断することと、
前記第２のデータ項目のバージョン番号とは異なるバージョン番号を有する前記第１のデータ項目を前記特定の宛先シャードに更新／挿入することと、
前記特定の宛先シャード上の前記第１のデータ項目のトゥームストーン属性値を真に設定することと、によって実行される、請求項１〜８のいずれか１項に記載のコンピュータによって実行される方法。
【請求項１０】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーを有する第１のデータ項目に対して、削除タイプの動作を前記第２の態様で実行するステップをさらに備え、前記削除タイプの動作は、少なくとも部分的に、
前記シャードの量の変化前の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化前に前記第１のデータ項目が格納された特定のソースシャードを判断することと、
前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記第１のデータ項目が位置することになる特定の宛先シャードを判断することと、
前記特定のソースシャード上のデータ項目のいずれもが前記第１のデータ項目のプライマリキーを有していないことを判断することと、
前記特定の宛先シャード上の第２のデータ項目が前記第１のデータ項目のプライマリキーを有していることを判断することと、
前記第２のデータ項目のトゥームストーン属性値を真に設定することと、によって実行される、請求項１〜９のいずれか１項に記載のコンピュータによって実行される方法。
【請求項１１】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーに対して取得タイプの動作を前記第２の態様で実行するステップをさらに備え、前記取得タイプの動作は、少なくとも部分的に、
前記シャードの量の変化前の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化前に前記プライマリキーを有するデータ項目が格納された特定のソースシャードを判断することと、
前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記プライマリキーを有するデータ項目が位置することになる特定の宛先シャードを判断することと、
前記特定の宛先シャード上の第１のデータ項目が前記プライマリキーおよび偽のトゥームストーン属性値を有していることを判断することと、
前記第１のデータ項目の属性値を読取ることと、によって実行される、請求項１〜１０のいずれか１項に記載のコンピュータによって実行される方法。
【請求項１２】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーに対して取得タイプの動作を前記第２の態様で実行するステップをさらに備え、前記取得タイプの動作は、少なくとも部分的に、
前記シャードの量の変化前の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化前に前記プライマリキーを有するデータ項目が格納された特定のソースシャードを判断することと、
前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記プライマリキーを有するデータ項目が位置することになる特定の宛先シャードを判断することと、
前記特定の宛先シャード上のデータ項目が前記プライマリキーを有していないことを判断することと、
前記特定のソースシャード上の第１のデータ項目が前記プライマリキーおよび偽のトゥームストーン属性値を有していることを判断することと、
前記第１のデータ項目の属性値を読取ることと、によって実行される、請求項１〜１１のいずれか１項に記載のコンピュータによって実行される方法。
【請求項１３】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーに対して取得タイプの動作を前記第２の態様で実行するステップをさらに備え、前記取得タイプの動作は、少なくとも部分的に、
前記シャードの量の変化前の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化前に前記プライマリキーを有するデータ項目が格納された特定のソースシャードを判断することと、
前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記プライマリキーを有するデータ項目が位置することになる特定の宛先シャードを判断することと、
前記特定の宛先シャード上のデータ項目が前記プライマリキーを有していないことを第１の時点で判断することと、
前記特定のソースシャード上のデータ項目が前記プライマリキーを有していないことを判断することと、
前記特定の宛先シャード上の第１のデータ項目が前記プライマリキーおよび偽のトゥームストーン属性値を有していることを第２の時点で判断することと、
前記第１のデータ項目の属性値を読取ることと、によって実行される、請求項１〜１２のいずれか１項に記載のコンピュータによって実行される方法。
【請求項１４】
前記１つ以上のデータ項目を前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動させるステップは、
システム全体にわたるバージョン番号をインクリメントするステップと、
前記システム全体にわたるバージョン番号よりも小さなバージョン番号を有する各々の第１のデータ項目について、前記シャードの量の変化後の前記複数シャードシステム内のシャードの量に少なくとも部分的に基づいて、前記シャードの量の変化後に前記第１のデータ項目が位置することになる第１の宛先シャードを判断するステップと、
（ａ）前記システム全体にわたるバージョン番号よりも小さなバージョン番号を有し、（ｂ）前記シャードの量の変化後に第２のデータ項目が位置することになる第２の宛先シャードとは異なるソースシャード上に位置する各々の第２のデータ項目について、前記システム全体にわたるバージョン番号を有する前記第２のデータ項目のコピーを前記第２の宛先シャードに挿入するステップと、
（ａ）前記システム全体にわたるバージョン番号よりも小さなバージョン番号を有し、（ｂ）前記シャードの量の変化後に第３のデータ項目が位置することになる第３の宛先シャード上にすでに位置している各々の第３のデータ項目について、前記第３のデータ項目のバージョン番号を前記システム全体にわたるバージョン番号に変化させるステップとを備える、請求項１〜１３のいずれか１項に記載のコンピュータによって実行される方法。
【請求項１５】
前記１つ以上のデータ項目を前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動させるステップは、システム全体にわたるバージョン番号をインクリメントするステップを備え、
前記１つ以上のデータ項目の移動が完了した時点で前記複数シャードシステム内の１つ以上のシャードに対してペンディングになっているクエリセットを判断するステップと、
前記クエリセットにおける全てのクエリが終了するのを待機するステップと、
前記クエリセットにおける全てのクエリが終了した後に、前記システム全体にわたるバージョン番号とは異なるバージョン番号属性値を有する全てのデータ項目コピーを前記複数シャードシステム内の全てのシャードから除去するステップと、
前記クエリセットにおける全てのクエリが終了した後に、真のトゥームストーン属性値を有する全てのデータ項目コピーを前記複数シャードシステム内の全てのシャードから除去するステップとをさらに備える、請求項１〜１４のいずれか１項に記載のコンピュータによって実行される方法。
【請求項１６】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記複数シャードシステム内の各々の特定のシャードについて、（ａ）前記特定のシャード上に位置しかつ（ｂ）指定のクエリ基準を満たすデータ項目を有する前記特定のシャードについての事前結果キューを投入するステップと、
各々の特定のシャードの事前結果キューについて、前記シャードの事前結果キューにおけるデータ項目のプライマリキーに少なくとも部分的に基づいて、前記シャードの事前結果キューにおけるデータ項目を分類するステップと、
空ではないシャードの事前結果キューが存在しなくなるまで、動作を繰返し実行するステップとをさらに備え、前記動作は、
前記複数シャードシステム内の全てのシャードの事前結果キューのトップに現在位置しているデータ項目を備えるセットから第１のデータ項目を選択することを備え、前記複数シャードシステム内の全てのシャードの事前結果キューのトップに現在位置しているデータ項目を備える前記クエリセットから前記第１のデータ項目を選択することは、
前記クエリセットにおけるデータ項目のプライマリキーのうち、最小のプライマリキーを有するデータ項目のサブセットを前記クエリセットから選択することと、
前記サブセットにおけるデータ項目のバージョン番号属性値のうち、最大のバージョン番号属性値を有するデータ項目を前記第１のデータ項目から選択することとを備え、前記動作はさらに、
真のトゥームストーン属性値を有していない各々の第１のデータ項目を最終結果セットに追加することと、
前記第１のデータ項目のプライマリキーに一致するプライマリキーを有する全てのデータ項目コピーを全てのシャードの事前結果キューから除去することと、
全てのシャードの事前結果キューが空になった後に、前記最終結果セットにおけるデータ項目をクエリ結果として返すステップとを備える、請求項１５に記載のコンピュータによって実行される方法。
【請求項１７】
前記１つ以上のデータ項目が前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動されている間に、前記クライアントが、プライマリキーを有する第１のデータ項目に対して前記第２の態様で削除タイプの動作を実行しようと試みたり、実行することに失敗したりするステップをさらに備え、前記削除タイプの動作は、少なくとも部分的に、
前記ソースシャード上のデータ項目が前記第１のデータ項目のプライマリキーを有していないことを判断することと、
前記宛先シャード上のデータ項目が前記第１のデータ項目のプライマリキーを有していないことを判断することと、
前記第１のデータ項目が存在していないことにより削除動作が失敗したことを示すデータを生成することと、によって実行される、請求項１〜１６のいずれか１項に記載のコンピュータによって実行される方法。
【請求項１８】
システムであって、
データ項目を格納する複数のデータベースシャードと、
複数のクライアントとを備え、前記複数のクライアントは、前記複数のデータベースシャードの量の変化に応答して、前記複数のクライアントを通常状態からリバランシング状態に遷移するように構成され、前記通常状態において、クライアントは複数シャードシステムに格納された複数のデータ項目に対して、所定タイプの動作を第１の態様で実行し、前記リバランシング状態において、前記クライアントは前記複数のデータ項目に対して、前記所定タイプの動作を第２の態様で実行し、前記第２の態様は前記第１の態様とは異なっており、前記リバランシング状態において、前記クライアントは前記データ項目のいずれに対する１つ以上の排他的ロックを取得することなく前記所定タイプの動作を実行し、前記リバランシング状態において、前記所定タイプの動作は、前記複数シャードシステム内の第１のシャードおよび前記複数シャードシステム内の第２のシャードに基づいて実行され、前記第１のシャードは、前記複数のデータベースシャードの量の変化前において、前記第１のシャード内の第１のメモリ位置に格納されたデータ項目を含み、当該データ項目は前記複数のデータ項目の１つであり、前記第２のシャードは、前記複数のデータベースシャードの量の変化後において、前記第２のシャード内の第２のメモリ位置に格納されたデータ項目を含み、前記システムはさらに、
少なくとも１つの計算装置を備え、前記少なくとも１つの計算装置は、（ａ）前記複数のクライアントが前記リバランシング状態にある間に、前記複数のデータ項目の１つ以上のデータ項目について、１つ以上の宛先シャードを決定し、１つ以上のソースシャードは、前記複数のクライアントの各クライアントが前記通常状態にあった間に、前記通常状態における前記１つ以上のデータ項目を格納していたものであり、（ｂ）前記複数のクライアントの各クライアントが前記リバランシング状態にある間に、前記１つ以上のデータ項目を前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動させるように構成される、システム。
【請求項１９】
プロセッサによって実行可能な命令を含むコンピュータ読取可能プログラムあって、前記プロセッサによって実行可能な命令は、
複数のシャードを有する複数シャードシステム内のシャードの量の変化が生じたことを１つ以上のプロセッサに判断させるための命令と、
前記シャードの量の変化の判断に応答して、クライアントを通常状態からリバランシング状態に遷移させることを１つ以上のプロセッサにさせるための命令とを備え、前記通常状態において、クライアントは前記複数シャードシステムに格納された複数のデータ項目に対して、所定タイプの動作を第１の態様で実行し、前記リバランシング状態において、前記クライアントは前記複数シャードシステムに格納された前記複数のデータ項目に対して、前記所定タイプの動作を第２の態様で実行し、前記リバランシング状態において、前記クライアントは前記データ項目のいずれに対する１つ以上の排他的ロックを取得することなく前記所定タイプの動作を実行し、前記リバランシング状態において、前記所定タイプの動作は、前記複数シャードシステム内の第１のシャードおよび前記複数シャードシステム内の第２のシャードに基づいて実行され、前記第１のシャードは、前記シャードの量
の変化前において、前記第１のシャード内の第１のメモリ位置に格納されたデータ項目を含み、当該データ項目は前記複数のデータ項目の１つであり、前記第２のシャードは、前記シャードの量の変化後において、前記第２のシャード内の第２のメモリ位置に格納されたデータ項目を含み、前記プロセッサによって実行可能な命令はさらに
前記クライアントが前記リバランシング状態にある間に、前記複数のデータ項目の１つ以上のデータ項目について、１つ以上のソースシャードとは異なる１つ以上の宛先シャードを１つ以上のプロセッサに決定させるための命令を備え、前記１つ以上のソースシャードは、前記クライアントが前記通常状態から前記リバランシング状態に遷移する前の前記通常状態において、当該１つ以上のデータ項目を格納していたものであり、前記プロセッサによって実行可能な命令はさらに
前記クライアントが前記リバランシング状態にある間に、前記１つ以上のデータ項目を前記１つ以上のソースシャードから前記１つ以上の宛先シャードに移動させることを１つ以上のプロセッサにさせるための命令を備える、コンピュータ読取可能プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
著作権表示
この特許文献の開示の一部は、著作権保護の対象となる資料を含む。この特許文献または特許開示は特許商標庁の特許ファイルまたは記録に記載されているため、著作権保有者は、何人によるその複写複製に対して異議はないが、その他の場合にはいかなるときも全ての著作権を保有する。
【０００２】
関連出願の相互参照、優先権主張
本願は、米国特許法第１１９条に基づいて、「NAIVE, CLIENT-SIDE SHARDING WITH ONLINE ADDITION OF SHARDS（シャードのオンライン追加によるナイーブなクライアント側シャーディング）」と題される２０１３年６月２８日に出願された米国仮特許出願番号第６１／８４１，０４５号の優先権を主張し、その内容全体は引用によって本明細書に援用され、「NAIVE, CLIENT SIDE SHARDING WITH ONLINE ADDITION OF SHARDS（シャードのオンライン追加によるナイーブなクライアント側シャーディング）」と題される２０１４年３月２６日に出願された米国特許出願番号第１４／２２６，５５７号の優先権を主張し、その内容全体は引用によって本明細書に援用される。
【背景技術】
【０００３】
背景
データベースシャードのシステムでは、記録または行または文書などのデータ項目は、シャード（shard）と呼ばれる複数の別々の独立したデータベースに分散されることができる。このようなシステムでは、データ項目は、一般に、シャード間で重複せず、重複することが許可されない。したがって、このようなシステムでは、いかなる所与の時点においてもいくつかのシャードのうちの１つにのみ特定のデータ項目が位置することになる。いくつかのシャードのうちのどれが当該特定のデータ項目を含んでいるかをクライアントが判断するために、クライアントは、当該特定のデータ項目を一義的に特定するデータ項目のプライマリキーをハッシュ関数に入力することができる。ハッシュ関数は、プライマリキーに基づいて、当該特定のデータ項目が現在格納されているシャードのアイデンティティを計算する。例えば、ハッシュ関数は、数値プライマリキーをシステム内のシャードの量で除算し、次いで剰余（基本的にはモジュロ演算）を、当該特定のデータ項目を含むシャードのための識別子であると考えてもよい。一般に、このようなハッシュ関数を用いて、各々のデータ項目が格納されることになるシャードを最初の段階で判断することにより、データ項目が比較的均一にシャードに分散される。
【０００４】
特定のデータ項目が位置するシャードをクライアントが特定すると、クライアントは、当該データ項目に対して読取、削除または更新動作などの動作を実行し得る。通常、シャードシステムは、多数のクライアントに同時に対応し、これらのクライアントの各々が、互いに非同期的に別々のデータ項目に対して動作を実行することができる。場合によっては、複数のクライアントが、意図せずに、同一のデータ項目に対して同時に動作を実行しようと試みる可能性がある。この状況が制限なく発生することが許可されると、データ項目が破損して、シャードシステムの状態が一貫性のないものになる可能性がある。１つのアプローチでは、複数のクライアントが同一のデータ項目に対して同時に動作を実行しないことを保証するために、特定のデータ項目に対して動作を実行しようとするクライアントは、まず、当該特定のデータ項目に対する排他的ロックを取得するよう要求され得る。各々のデータ項目は、別々のロックに関連付けられ得る。別のクライアントが特定のデータ項目に対する排他的ロックをすでに保持している場合には、クライアントは、当該排他的ロックを取得することが妨げられ、このような状況下では、排他的ロックを取得しようとするクライアントは、ロックを保持しているクライアントが排他的ロックを解放するのを待たなければならない。クライアントが特定のデータ項目に対する排他的ロックを保持している間は、当該クライアントのみが当該特定のデータ項目に対して動作を実行することができる。クライアントは、特定のデータ項目に対する動作の実行を終了すると、特定のデータ項目に対する排他的ロックを解放し、それによって、他のクライアントが特定のデータ項目にアクセスできるようになり得る。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
シャードシステム内に格納されるデータの量が増大するにつれて、システム内に存在するシャードの容量が、システムに格納されることになる全てのデータを収容するのに不十分になる可能性がある。そのような状況下では、１つ以上の新たなシャードをシステムに追加することが望ましいであろう。新たなシャードの追加は、新たなデータベースを収容および管理するために新たなハードウェア計算および記憶装置を追加することを含み得る。シャード間でクライアントアクセス負荷のバランスをとろうと試みて、どのシャードのサブセットもクライアント要求を偏って課されないようにするために、システムへの新たなシャードの追加は、増大したシャードの群の中でシステムの格納されたデータ項目を再分配することを促進させることができる。当該再分配イベントまたはリバランシングイベントは、１つのシャードに以前に格納されたデータ項目を別のシャードに、すなわち必ずしもそうではないが場合によっては新たに追加されたシャードに、リロケート（re-locate）させ得る。１つのアプローチでは、リバランシングプロセスは、移動されるべきデータ項目に対する排他的ロックを取得し得る。データ項目に対する排他的ロックを取得した後に、リバランシングプロセスは、それらのデータ項目を古いシャードから、それらのデータ項目のための宛先であると修正ハッシュ関数によって判断された新たなシャードに移動させ得る。データ項目を移動させた後に、リバランシングプロセスは、それらのデータ項目に対する排他的ロックを解放し得る。
【０００６】
排他的ロックが存在している限り、それらの使用にはいくつかの欠点が伴っていた。１つの欠点は、データ項目の排他的ロックがプロセスによって保持されている間は他のプロセスが当該データ項目にアクセスできないというものである。したがって、上記のロックを使用したリバランシングアプローチでは、クライアントは、リバランシングイベントが進行している間はシャードシステムに対して動作を実行することがたいていできない可能性があり、リバランシングプロセスがデータ項目に対する排他的ロックを保持している間はどのクライアントも当該排他的ロックを取得することができない。リバランシングイベントが進行していなかったとしても、同時的な複数のクライアントアクセスから保護するためのクライアントのロックの取得、維持および解放に関わるオーバーヘッドが相当であり、厄介である可能性がある。リバランシングイベントの影響を無視したとしても、シャードシステム内でロックを使用することは、システムの効率および性能にマイナスの影響を及ぼし得る。恐らくなお悪いことに、シャードシステム内の不測の障害により、（例えばクライアントまたはリバランシングプロセスであり得る）ロックを保持しているプロセスがフリーズするか、またはそうでなければ適切に機能しなくなる可能性がある。このような状況下では、あるタイマが期限切れになり、その時に非機能的プロセスが終了し得えて、保持していたロックが強制的に解放されるまで、非機能的なプロセスは、特定のデータ項目に対する排他的ロックを保有し得る。その結果、クライアントおよびリバランシングプロセスを含む他のプロセスは、当該特定のデータ項目に対する所期のタスクを進める前に、タイマが期限切れになるのを待たざるを得ない。特に特定のデータ項目に対して実行されるべき動作が、複数の別々のデータ項目に対して実行されるべき動作の厳密に順序付けられたシーケンス内の１つのステップにすぎない場合には、このような待機の強制は、シャードシステム全体の性能を著しく劣化させる可能性がある。しばしば動作が実行される必要がある順序によって課される依存性は、これらの種類の問題を次々に発生させる可能性がある。
【図面の簡単な説明】
【０００７】
【図１】本発明の実施例に係る、複数のデータベースシャードに分散されたデータ項目に複数のクライアントがアクセスできるスケーラブルなシャードシステムの例を示すブロック図である。
【図２】本発明の実施例に係る、さまざまな時点においてシステムが存在し得るさまざまな状態およびそれらの状態間の起こり得る遷移を示す状態図である。
【図３】本発明の実施例に係る、リバランシング状態にある間に追加動作を実行するための技術の例を示すフロー図である。
【図４】本発明の実施例に係る、リバランシング状態にある間に更新動作を実行するための技術の例を示すフロー図である。
【図５】本発明の実施例に係る、リバランシング状態にある間に削除動作を実行するための技術の例を示すフロー図である。
【図６Ａ】本発明の実施例に係る、リバランシング状態にある間に取得動作を実行するための技術の例を示すフロー図である。
【図６Ｂ】本発明の実施例に係る、リバランシング状態にある間に取得動作を実行するための技術の例を示すフロー図である。
【図７】本発明の実施例に係る、（最初に）リバランシング状態にある間にリバランシング動作を実行するための技術の例を示すフロー図である。
【図８】本発明の実施例に係る、リバランシング状態にある間にクエリ動作を実行するための技術の例を示すフロー図である。
【図９】実施例のうちの１つを実現するための分散システムの簡略化された図である。
【図１０】本開示の実施例に係る、実施例のシステムの構成要素によって提供されるサービスをクラウドサービスとして供給することができるシステム環境の構成要素の簡略化されたブロック図である。
【図１１】本発明のさまざまな実施例を実現することができるコンピュータシステムの例を示す図である。
【発明を実施するための形態】
【０００８】
詳細な説明
以下の説明には、説明の目的で、本発明の実施例を完全に理解できるようにするために具体的な詳細が記載されている。しかし、これらの具体的な詳細がなくても本発明を実施できることは明らかであろう。
【０００９】
本発明の実施例によれば、複数のクライアントは、当該クライアントが排他的ロックを使用することなく、互いに非同期的にシャードシステム内のデータ項目に対して動作を実行することが可能となる。さらに、本発明の実施例によれば、システム内のシャードの量の変化（追加または差し迫った除去）に起因してデータ項目をシャードセットの中で自動的に再分配するリバランシングイベントは、クライアントが排他的ロックを使用することなく実行されることができる。また、本発明の実施例では、クライアントは、リバランシングプロセスがシステム全体にわたるリバランシングイベント中に非同期的にデータ項目のうちの少なくともいくつかを再分配している間でさえ、シャードシステム内のデータ項目のうちの少なくともいくつかに対して動作を実行し続けることができる。これらの特徴を提供するプログラムコードは、シャードサーバではなく、もっぱらクライアントに位置し得る。これらの利点は全て、シャードシステム内のデータ整合性を犠牲にすることなく得られることができる。
【００１０】
ケーラブルなシャードシステムの例
図１は、本発明の実施例に係る、複数のデータベースシャードに分散されたデータ項目に複数のクライアントがアクセスできるスケーラブルなシャードシステム１００の例を示すブロック図である。シャードシステム１００は、クライアント１０２Ａ〜Ｎと、シャード１０４Ａ〜Ｎとを含む。システム１００内のクライアントおよびシャードの量は、可変である。シャード１０４Ａ〜Ｎの各々は、システム１００内のその他のシャードを意識する必要がない別々の独立したデータベースであってもよい。例えば、シャード１０４Ａ〜Ｎの各々は、別々のデータベースサーバと、リレーショナルデータベースとを含んでいてもよい。本明細書では具体的な例としてデータベースが記載されているが、本発明の実施例は、データベース以外のさまざまな種類のデータリポジトリ（例えば、ライトウェイト・ディレクトリ・アクセス・プロトコル（Lightweight Directory Access Protocol：ＬＤＡＰ）ディレクトリ、フラットファイル、連想記憶装置など）に適用可能である。クライアント１０２Ａ〜Ｎの各々は、互いに独立して動作できる別々の計算システムであってもよい。例えば、クライアント１０２Ａ〜Ｎは、デスクトップコンピュータ、ラップトップコンピュータ、モバイル機器などであってもよい。
【００１１】
クライアント１０２Ａ〜Ｎは、ネットワーク１０６を介してシャード１０４Ａ〜Ｎと相互作用し得る。ネットワーク１０６は、ローカルエリアネットワーク（local area network：ＬＡＮ）、広域ネットワーク（wide area network：ＷＡＮ）および／またはインターネットであってもよく、またはこれらを含んでいてもよい。ネットワーク１０６を介した通信は、イーサネット（登録商標）、伝送制御プロトコル／インターネットプロトコル（Transmission Control Protocol/Internet Protocol：ＴＣＰ／ＩＰ）、ハイパーテキスト転送プロトコル（Hypertext Transfer Protocol：ＨＴＴＰ）、シンプル・オブジェクト・アクセス・プロトコル（Simple Object Access Protocol：ＳＯＡＰ）、オープン・データベース・コネクティビティ（Open Database Connectivity：ＯＤＢＣ）などの一連のネットワーク通信プロトコルを介して達成可能である。クライアント１０２Ａ〜Ｎの各々は、特定のデータ項目のプライマリキーに基づいて、当該特定のデータ項目が格納されていたまたは格納されることになるシャード１０４Ａ〜Ｎの中の特定のシャードのアイデンティティを計算するためにハッシュ関数を利用するソフトウェアプログラムの別々のインスタンスを実行し得る。このようなデータ項目は、類似の属性セットについて異なる値を有する別々の記録であってもよい。少なくとも一実施例では、このようなデータ項目は、１つ以上のリレーショナルデータベーステーブル内の別々の行としてシャード１０４Ａ〜Ｎ内に格納され得る。リバランシングイベント中にシステム１００に適用可能な下記の非常に特殊な例外により、各々のデータ項目は、いかなる特定の時点においてもシャード１０４Ａ〜Ｎのうちの１つにのみ位置する。場合によっては、リバランシングイベントは、さまざまなデータ項目をあるシャードから別のシャードにリロケートさせ得る。本発明の実施例では、リバランシングイベント中にクライアントが動作を実行することに関わるアクティビティのシーケンスは、リバランシングイベント以外で発生する「通常の」システム状態の間にクライアントが同一タイプの動作を実行することに関わるアクティビティのシーケンスとは異なり得る。
【００１２】
一般に、シャード１０４Ａ〜Ｎのうちの特定のシャードにすでに格納されているデータ項目に対して動作を実行するために、クライアント１０２Ａ〜Ｎのうちの特定のクライアントは、まず、（例えばハッシュ関数に基づいて）当該データ項目が現在格納されているシャードを判断し得る。リバランシングイベント中に、特定のクライアントは、特定のクライアントがデータ項目の正しいコピー上で動作することを保証するため、すなわち特定のクライアントのアクティビティに非同期的にデータ項目がリロケートまたは削除されたかもしれない可能性を補償するために、確認を行い得る。通常のシステム状態の間は、データ項目の１つのコピーのみがシステム１００内のどこかに存在し得るが、リバランシングイベント中は、データ項目の複数のコピー、すなわち異なるバージョンがシステム１００内に一時的に存在することが起こり得る。これらの確認を行う際、特定のクライアントは、各々のデータ項目の各々のコピーとともに格納されるバージョン情報（以下でより詳細に説明）を利用することができる。少なくとも部分的にこのようなバージョン情報に基づいて、特定のクライアントは、データ項目が最も新しく配置されたシャードに格納されたデータ項目のコピーに対して、動作が、実行される場合には実行されることを保証することができる。リバランシングイベント中に特定のクライアントが動作を実行することは、データ項目の別のコピーが以前に存在していたシャードとは別のシャード上にデータ項目の新たなコピーを作成することを含み得る。実施例では、動作は、データ項目に対して１つ以上の命令を実行することを含み得る。例えば、このような命令は、クエリ言語命令の形態をとってもよく、構造化クエリ言語（Structured Query Language：ＳＱＬ）命令は、１つの具体的な可能性にすぎない。特定のクライアントがデータ項目の最新のコピーに対して動作を実行した後、データ項目がもはや存在すべきでないシャードからデータ項目の古い旧式のバージョンを除去するためにクリーンアップ動作が実行され得る。一般に、システム１００内のデータ整合性は、クライアント１０２Ａ〜Ｎがロックを使用することなく、このようにして維持されることができる。
【００１３】
本発明の実施例によれば、シャードをシステム１００に追加（またはシステム１００から除去）できるので、システム１００はスケーラブルである。シャード１０４Ａ〜Ｎの量の変化は、システム１００内でリバランシングイベントを生じさせ得る。リバランシングイベント中に、リバランシングプロセスは、古い量の代わりにシャードの新たな量に基づいて各々のデータ項目のプライマリキーをリハッシュし、それによって、リバランシングイベントの終了時点で当該データ項目が位置しているべき（異なっているまたは同一の）シャードのアイデンティティを判断し得る。次いで、リバランシングプロセスは、以下でより詳細に説明する技術を用いてデータ項目をシャードからシャードにリロケートし得る。当該リロケーションは、リバランシングイベント以外ではシステム１００内に存在しないであろうデータ項目のコピーを作成および削除することを含み得る。リバランシングプロセスは、クライアント１０２Ａ〜Ｎで実行されるソフトウェアに非同期的に実行され得る。有益なことに、クライアント１０２Ａ〜Ｎは、少なくとも部分的にリバランシング動作中にクライアント１０２Ａ〜Ｎが実行するアクティビティのシーケンスを調整することによって、リバランシング動作中にデータ項目に対して動作を実行し続けることができる。
【００１４】
バージョンおよびトゥームストーン（tombstone）属性
上記のように、本発明の実施例では、特定のデータ項目の各コピーは、バージョン情報に関連付けて格納されることができる。実施例では、このようなバージョン情報は、システム１００においてリバランシングイベントが生じるたびにインクリメントされるシステム全体にわたるバージョン番号の形態をとってもよい。したがって、例えば、既存のデータ項目のバージョン番号が３であり、かつ、リバランシングイベント中に異なるシャード上にデータ項目の新たなコピーが作成された時点でシステムの現在のバージョン番号が４であれば、当該データ項目の新たなコピーは、バージョン番号４を有することになる。リバランシングイベント中に存在し得るデータ項目の２つの別々のコピーのバージョン情報を調べることによって、クライアントは、どのコピーがより新しいバージョンであるかを判断することができ、当該コピーに対して動作を実行することができる。また、リバランシングイベント中に存在し得るデータ項目の２つの別々のコピーのバージョン情報を調べることによって、リバランシングプロセスは、どのコピーがより古いバージョンであり、そのため当該コピーが位置しているシャードから除去されるべきであるかを判断することができる。
【００１５】
クライアントが実行する動作は、シャードからデータ項目を削除することを含み得る。実施例では、クライアントがデータ項目に対して削除動作を実行することは、当該データ項目が位置していたシャードから当該データ項目の全ての痕跡を即座に除去することはない。その代わりに、実施例では、各々のデータ項目は、「トゥームストーン」と呼ばれる属性を有し、その値が真（当該シャード上のデータ項目の当該コピーが削除された場合）または偽（当該シャード上のデータ項目の当該コピーが削除されなかった場合）に設定され得る。データ項目のトゥームストーン属性を「真」に設定することにより、データ項目がシャード上に無いことがリバランシングイベントの一部としての削除または別のシャードへの移動によるものである可能性がある場合に起こり得る曖昧な状況が回避される。実施例では、（クライアントではなく）リバランシングプロセスのみが、シャードからデータ項目を完全に除去することを許可される。
【００１６】
システム状態遷移
上記のように、さまざまな時点において、システム１００はリバランシングイベントを実行している状態にある可能性があり、または、システム１００はこのようなリバランシングイベント以外の状態にある可能性がある。また、上記のように、クライアント１０２Ａ〜Ｎがリバランシングイベント中にデータ項目に対する動作の一部として実行するアクティビティのシーケンスは、リバランシングイベントが生じていない状態の間にクライアント１０２Ａ〜Ｎが同一タイプの動作の一部として実行するアクティビティのシーケンスとは異なり得る。簡単な態様で考えると、システム１００がリバランシングイベントを受けていない間に存在する「通常」状態の間は、クライアント１０２Ａ〜Ｎは、ある種の不整合性から保護する防護策が無い可能性がある単純で高効率の「ナイーブな」技術を用いてデータ項目に対して動作を実行し得る。対照的に、システム１００がリバランシングイベントを受けている間に存在する状態の間は、クライアント１０２Ａ〜Ｎは、このような防護策を課すより複雑でより慎重な技術を用いて同一タイプの動作を実行し得る。このような防護策は、リバランシングイベント以外では不要であるかもしれないが、リバランシングイベント中は好適であろう。
【００１７】
図２は、本発明の実施例に係る、さまざまな時点においてクライアント１０２Ａ〜Ｎが存在し得るさまざまな状態２００およびそれらの状態間の起こり得る遷移を示す状態図である。状態２００は、通常状態２０２と、リバランス移行状態２０４と、リバランシング状態２０６と、クリーンアップ移行状態２０８と、クリーンアップ状態２１０と、リバランス解放状態２１２とを含み得る。一実施例では、クライアント１０２Ａ〜Ｎは、通常状態２０２およびリバランシング状態２０６中にのみ、シャード１０４Ａ〜Ｎ内に格納されたデータ項目に対して動作を実行することを許可され、通常状態２０２およびリバランシング状態２０６は、クライアント１０２Ａ〜Ｎが大部分の時間属する状態である可能性が高い。クライアント１０２Ａ〜Ｎは通常は同一の状態にあるが、以下の説明から分かるように、それらのクライアントのそれぞれは、状態遷移中には少しの間異なる状態にあってもよい。
【００１８】
実施例によれば、クライアント１０２Ａ〜Ｎは、通常状態２０２において初期化し得る。クライアント１０２Ａ〜Ｎは、通常状態２０２にある間に新たな動作を開始し得る。通知機構は、１つ以上のシャードがシステム１００に追加されたこと、または１つ以上のシャードがシステム１００から除去される予定であることをクライアント１０２Ａ〜Ｎの各々に通知し得る。このような通知に応答して、クライアント１０２Ａ〜Ｎの各々は、ペンディング状態の動作が完了するのを待機し得て、次いで、当該クライアントは、リバランス移行状態２０４に遷移し得る。クライアント１０２Ａ〜Ｎは、リバランス移行状態２０４にある間は新たな動作を開始することはなく、クライアント１０２Ａ〜Ｎは、実行されるべき動作をキューに入れ得る。全てのクライアント１０２Ａ〜Ｎがリバランス移行状態２０４に遷移すると、クライアント１０２Ａ〜Ｎの各々は、リバランシング状態２０６に遷移し得る。クライアント１０２Ａ〜Ｎがリバランシング状態２０６に入ると、リバランシングプロセスは、ソースシャードから宛先シャードにデータ項目を移動させることを行い得る。本発明の実施例では、当該時点以降に新たなデータ項目コピーが関連付けられることになる現在のバージョン番号は、クライアント１０２Ａ〜Ｎがリバランシング状態２０６に入り次第、インクリメントされ得る。クライアント１０２Ａ〜Ｎは、リバランシング状態２０６にある間に新たな動作（場合によっては、キューに入れられた動作を含む）を開始し得る。リバランシングプロセスがリロケートされるべき全てのデータ項目を移動させると、通知機構は、この事実をクライアント１０２Ａ〜Ｎの各々に通知し得る。このような通知に応答して、クライアント１０２Ａ〜Ｎの各々は、ペンディング状態の動作が完了するのを待機し得て、次いで、当該クライアントは、クリーンアップ移行状態２０８に遷移し得る。クライアント１０２Ａ〜Ｎは、クリーンアップ移行状態２０８にある間は新たな動作を開始することはなく、クライアント１０２Ａ〜Ｎは、実行されるべき動作をキューに入れ得る。全てのクライアント１０２Ａ〜Ｎがクリーンアップ移行状態２０８に遷移すると、クライアント１０２Ａ〜Ｎの各々は、クリーンアップ状態２１０に遷移し得る。クライアント１０２Ａ〜Ｎがクリーンアップ状態２１０に入ると、リバランシングプロセスは、いかなるシャード上にももはや存在すべきでないデータ項目コピーをシャードから除去することを行い得る。実施例では、クライアント１０２Ａ〜Ｎがクリーンアップ状態２１０にある間に、リバランシングプロセスは、「真」のトゥームストーン属性値を有する全てのデータ項目コピーをシャードから除去し得る。また、実施例では、クライアント１０２Ａ〜Ｎがクリーンアップ状態２１０にある間に、リバランシングプロセスは、システムの現在のバージョン番号よりも小さなバージョン番号属性値を有する全てのデータ項目コピーをシャードから除去し得る。クライアント１０２Ａ〜Ｎは、クリーンアップ状態２１０にある間は新たな動作を開始することはなく、クライアント１０２Ａ〜Ｎは、実行されるべき動作をキューに入れ得る。リバランシングプロセスが除去されるべき全てのデータ項目コピーを除去すると、通知機構は、この事実をクライアント１０２Ａ〜Ｎの各々に通知し得る。このような通知に応答して、クライアント１０２Ａ〜Ｎの各々は、リバランス解放状態２１２に遷移し得る。クライアント１０２Ａ〜Ｎは、リバランス解放状態２１２にある間は新たな動作を開始することはなく、クライアント１０２Ａ〜Ｎは、実行されるべき動作をキューに入れ得る。全てのクライアント１０２Ａ〜Ｎがリバランス解放状態２１２に遷移すると、クライアント１０２Ａ〜Ｎの各々は、通常状態２０２に戻り得る。クライアント１０２Ａ〜Ｎは、通常状態２０２にある間に新たな動作（場合によっては、キューに入れられた動作を含む）を開始し得る。
【００１９】
上記のように、クライアント１０２Ａ〜Ｎがリバランシング状態２０６にある間に、クライアント１０２Ａ〜Ｎは、クライアント１０２Ａ〜Ｎが通常状態２０２にある間に同一タイプの動作を実行するであろう態様よりも慎重な態様で動作を実行し得る。クライアント１０２Ａ〜Ｎがリバランシング状態２０６にある間に動作を実行し得る態様は、シャードからシャードにデータ項目をリロケートしている可能性があるリバランシングプロセスの同時的な非同期的実行、すなわち通常状態２０２では存在しない懸案事項にもかかわらず、データ整合性を保証することができる。リバランシング状態２０６にある間にこのより慎重な整合性を保証する態様でさまざまな異なるタイプの動作を実行するための技術について、以下で説明する。
【００２０】
追加動作
図３は、本発明の実施例に係る、リバランシング状態にある間に追加動作を実行するための技術３００の例を示すフロー図である。技術３００は、特定の順序で実行される特定のアクティビティを含むように示されているが、本発明の代替的な実施例は、追加のアクティビティ、より少ない数のアクティビティまたは異なるアクティビティを有する技術を含んでいてもよい。クライアント１０２Ａ〜Ｎはいずれも、技術３００を実行することができる。ブロック３０２において、クライアントは、シャード量の変化の前に特定のデータ項目が位置していたであろうソースシャードのアイデンティティを判断し得る。この判断は、例えば古いシャード量を法として特定のデータ項目のプライマリキーを計算することによって実現されてもよい。ブロック３０４において、クライアントは、シャード量の変化の後に当該特定のデータ項目が位置することになる宛先シャードのアイデンティティを判断し得る。この判断は、例えば新たなシャード量を法として特定のデータ項目のプライマリキーを計算することによって実現されてもよい。ブロック３０６において、クライアントは、ソースシャードのアイデンティティが宛先シャードのアイデンティティと同一であるか否かを判断し得る。アイデンティティが同一であれば、制御はブロック３０８に進む。そうでなければ、制御はブロック３１０に進む。
【００２１】
ブロック３０８において、クライアントは、追加動作を実行するための通常のナイーブな高効率の標準的な態様で特定のデータ項目を宛先シャードに追加し得る。この時点で、技術３００は終了する。
【００２２】
代替的に、ブロック３１０において、クライアントは、特定のデータ項目のプライマリキーを有するデータ項目がソースシャード上にすでに存在しているか否かを判断し得る。特定のデータ項目のプライマリキーを有するデータ項目がソースシャード上にすでに存在していれば、制御はブロック３１２に進む。そうでなければ、制御はブロック３１４に進む。
【００２３】
ブロック３１２において、クライアントは、特定のデータ項目が、シャードシステムにすでに存在しているデータ項目と重複していると結論付け得て、追加動作を実行することを控え得る。クライアントは、重複のために追加動作が阻止されたことをユーザに知らせ得る。この時点で、技術３００は終了する。
【００２４】
代替的に、ブロック３１４において、クライアントは、（ａ）特定のデータ項目のプライマリキーおよび（ｂ）「真」のトゥームストーン属性値を両方とも有するデータ項目が宛先シャード上にすでに存在しているか否かを判断し得る。（ａ）特定のデータ項目のプライマリキーおよび（ｂ）「真」のトゥームストーン属性値を両方とも有するデータ項目が宛先シャード上にすでに存在していれば、制御はブロック３１６に進む。そうでなければ、制御はブロック３２０に進む。
【００２５】
ブロック３１６において、アトミックアクションの一部として、クライアントは、特定のデータ項目の属性値を、（宛先シャード上の）特定のデータ項目のプライマリキーを有するデータ項目の属性値に割り当て得る。この割り当ては、基本的には、宛先シャード上に存在しているデータ項目を更新する。クライアントは、システムの現在のバージョン番号をデータ項目のバージョン番号属性に割り当て得る。ブロック３１８において、同一のアトミックアクションの一部として、クライアントは、（宛先シャード上の）特定のデータ項目のプライマリキーを有するデータ項目のトゥームストーン属性値を「偽」に設定し得る。実施例では、ブロック３１６の属性値割り当ては、ブロック３１８のアクティビティによって達成される結果と同一の結果を達成する。なぜなら、特定のデータ項目のトゥームストーン属性値は、割り当ての前にすでに「偽」であるからである。クライアントは、追加動作が成功したことをユーザに知らせ得る。この時点で、技術３００は終了する。
【００２６】
代替的に、ブロック３２０において、クライアントは、特定のデータ項目を宛先シャードに挿入し得る。クライアントは、システムの現在のバージョン番号を特定のデータ項目のバージョン番号属性に割り当て得る。クライアントは、追加動作が成功したことをユーザに知らせ得る。この時点で、技術３００は終了する。本発明の実施例では、ブロック３１４〜３２０のアクティビティは、単一のアトミック動作として実行される。
【００２７】
更新動作
図４は、本発明の実施例に係る、リバランシング状態にある間に更新動作を実行するための技術４００の例を示すフロー図である。技術４００は、特定の順序で実行される特定のアクティビティを含むものとして示されているが、本発明の代替的な実施例は、追加のアクティビティ、より少ない数のアクティビティまたは異なるアクティビティを有する技術を含んでいてもよい。クライアント１０２Ａ〜Ｎはいずれも、技術４００を実行することができる。ブロック４０２において、クライアントは、シャード量の変化の前に特定のデータ項目が位置していたであろうソースシャードのアイデンティティを判断し得る。この判断は、例えば古いシャード量を法として特定のデータ項目のプライマリキーを計算することによって実現されてもよい。ブロック４０４において、クライアントは、シャード量の変化の後に当該特定のデータ項目が位置することになる宛先シャードのアイデンティティを判断し得る。この判断は、例えば新たなシャード量を法として特定のデータ項目のプライマリキーを計算することによって実現されてもよい。ブロック４０６において、クライアントは、ソースシャードのアイデンティティが宛先シャードのアイデンティティと同一であるか否かを判断し得る。アイデンティティが同一であれば、制御はブロック４０８に進む。そうでなければ、制御はブロック４１０に進む。
【００２８】
ブロック４０８において、クライアントは、更新動作を実行するための通常のナイーブな高効率の標準的な態様で宛先シャード上の特定のデータ項目を更新し得る。この時点で、技術４００は終了する。
【００２９】
代替的に、ブロック４１０において、クライアントは、特定のデータ項目のプライマリキーを有するデータ項目がソースシャード上にすでに存在しているか否かを判断し得る。特定のデータ項目のプライマリキーを有するデータ項目がソースシャード上にすでに存在していれば、制御はブロック４１６に進む。そうでなければ、制御はブロック４２２に進む。
【００３０】
ブロック４１６において、クライアントは、特定のデータ項目のプライマリキーを有するデータ項目が宛先シャード上にすでに存在しているか否かを判断し得る。特定のデータ項目のプライマリキーを有するデータ項目が宛先シャード上にすでに存在していれば、制御はブロック４１８に進む。そうでなければ、制御はブロック４２０に進む。
【００３１】
ブロック４１８において、クライアントは、特定のデータ項目の属性値を、（宛先シャード上の）特定のデータ項目のプライマリキーを有するデータ項目の属性値に割り当て得る。この割り当ては、基本的には、宛先シャード上に存在しているデータ項目を更新する。クライアントは、システムの現在のバージョン番号をデータ項目のバージョン番号属性に割り当て得る。クライアントは、更新動作が成功したことをユーザに知らせ得る。この時点で、技術４００は終了する。
【００３２】
代替的に、ブロック４２０において、クライアントは、特定のデータ項目を宛先シャードに挿入し得る。クライアントは、システムの現在のバージョン番号を特定のデータ項目のバージョン番号属性に割り当て得る。クライアントは、更新動作が成功したことをユーザに知らせ得る。この時点で、技術４００は終了する。
【００３３】
代替的に、ブロック４２２において、クライアントは、（ａ）特定のデータ項目のプライマリキーおよび（ｂ）「偽」のトゥームストーン属性値を両方とも有するデータ項目が宛先シャード上にすでに存在しているか否かを判断し得る。（ａ）特定のデータ項目のプライマリキーおよび（ｂ）「偽」のトゥームストーン属性値を両方とも有するデータ項目が宛先シャード上にすでに存在していれば、制御はブロック４１８に進む。そうでなければ、制御はブロック４２８に進む。
【００３４】
代替的に、ブロック４２８において、クライアントは、更新動作を実行することを控え得る。クライアントは、（更新すべきデータ項目がなかったので）更新動作が失敗したことをユーザに知らせ得る。この時点で、技術４００は終了する。
【００３５】
削除動作
図５は、本発明の実施例に係る、リバランシング状態にある間に削除動作を実行するための技術５００の例を示すフロー図である。技術５００は、特定の順序で実行される特定のアクティビティを含むものとして示されているが、本発明の代替的な実施例は、追加のアクティビティ、より少ない数のアクティビティまたは異なるアクティビティを有する技術を含んでいてもよい。クライアント１０２Ａ〜Ｎはいずれも、技術５００を実行することができる。ブロック５０２において、クライアントは、シャード量の変化の前に特定のデータ項目が位置していたであろうソースシャードのアイデンティティを判断し得る。この判断は、例えば古いシャード量を法として特定のデータ項目のプライマリキーを計算することによって実現されてもよい。ブロック５０４において、クライアントは、シャード量の変化の後に当該特定のデータ項目が位置することになる宛先シャードのアイデンティティを判断し得る。この判断は、例えば新たなシャード量を法として特定のデータ項目のプライマリキーを計算することによって実現されてもよい。ブロック５０６において、クライアントは、ソースシャードのアイデンティティが宛先シャードのアイデンティティと同一であるか否かを判断し得る。アイデンティティが同一であれば、制御はブロック５０８に進む。そうでなければ、制御はブロック５１０に進む。
【００３６】
ブロック５０８において、クライアントは、削除動作を実行するための通常のナイーブな高効率の標準的な態様で宛先シャード上の特定のデータ項目を削除し得る。この時点で、技術５００は終了する。
【００３７】
代替的に、ブロック５１０において、アトミックアクションの一部として、クライアントは、特定のデータ項目のプライマリキーを有するデータ項目がソースシャード上にすでに存在しているか否かを判断し得る。特定のデータ項目のプライマリキーを有するデータ項目がソースシャード上にすでに存在していれば、制御はブロック５１２に進む。そうでなければ、制御はブロック５１６に進む。
【００３８】
ブロック５１２において、アトミックアクションの一部として、クライアントは、特定のデータ項目を宛先シャードに更新／挿入し得る。更新／挿入は、（１）プライマリキーによって特定されるオブジェクトがデータベース（すなわち宛先シャード）に存在しない場合には挿入として定義され、または（２）プライマリキーによって特定されるオブジェクトがデータベース（すなわち宛先シャード）に存在する場合には更新として定義される。ブロック５１４において、アトミックアクションの一部として、クライアントは、特定のデータ項目のトゥームストーン属性の値を「真」に設定し得る。クライアントは、システムの現在のバージョン番号を特定のデータ項目のバージョン番号属性に割り当て得る。クライアントは、削除動作が成功したことをユーザに知らせ得る。この時点で、技術５００は終了する。
【００３９】
代替的に、ブロック５１６において、クライアントは、特定のデータ項目のプライマリキーを有するデータ項目が宛先シャード上にすでに存在しているか否かを判断し得る。特定のデータ項目のプライマリキーを有するデータ項目が宛先シャード上にすでに存在していれば、制御はブロック５１８に進む。そうでなければ、制御はブロック５２０に進む。
【００４０】
ブロック５１８において、クライアントは、（宛先シャード上の）データ項目のトゥームストーン属性の値を「真」に設定し得る。クライアントは、システムの現在のバージョン番号をデータ項目のバージョン番号属性に割り当て得る。クライアントは、削除動作が成功したことをユーザに知らせ得る。この時点で、技術５００は終了する。
【００４１】
代替的に、ブロック５２０において、クライアントは、削除動作を実行することを控え得る。クライアントは、（削除すべきデータ項目がなかったので）削除動作が失敗したことをユーザに知らせ得る。この時点で、技術５００は終了する。
【００４２】
取得動作
図６Ａ〜図６Ｂは、本発明の実施例に係る、リバランシング状態にある間に取得動作を実行するための技術６００の例を示すフロー図である。実施例では、取得動作は、クライアント指定のプライマリキーを有するデータ項目の属性値を読取って、返し得る。技術６００は、特定の順序で実行される特定のアクティビティを含むものとして示されているが、本発明の代替的な実施例は、追加のアクティビティ、より少ない数のアクティビティまたは異なるアクティビティを有する技術を含んでいてもよい。クライアント１０２Ａ〜Ｎはいずれも、技術６００を実行することができる。まず図６Ａを参照して、ブロック６０２において、クライアントは、シャード量の変化の前に指定のプライマリキーを有する特定のデータ項目が位置していたであろうソースシャードのアイデンティティを判断し得る。この判断は、例えば古いシャード量を法として指定のプライマリキーを計算することによって実現されてもよい。ブロック６０４において、クライアントは、シャード量の変化の後に当該指定のプライマリキーを有する特定のデータ項目が位置することになる宛先シャードのアイデンティティを判断し得る。この判断は、例えば新たなシャード量を法として指定のプライマリキーを計算することによって実現されてもよい。ブロック６０６において、クライアントは、ソースシャードのアイデンティティが宛先シャードのアイデンティティと同一であるか否かを判断し得る。アイデンティティが同一であれば、制御はブロック６０８に進む。そうでなければ、制御はブロック６１０に進む。
【００４３】
ブロック６０８において、クライアントは、取得動作を実行するための通常のナイーブな高効率の標準的な態様で宛先シャード上の指定のプライマリキーを有する特定のデータ項目に対して取得動作を実行し得る。この時点で、技術６００は終了する。
【００４４】
代替的に、ブロック６１０において、クライアントは、指定のプライマリキーを有するデータ項目が宛先シャード上にすでに存在しているか否かを判断し得る。指定のプライマリキーを有するデータ項目が宛先シャード上にすでに存在していれば、制御はブロック６１２に進む。そうでなければ、制御はブロック６１８に進む。
【００４５】
ブロック６１２において、クライアントは、宛先シャード上の指定のプライマリキーを有するデータ項目が「真」のトゥームストーン属性値を有しているか否かを判断し得る。宛先シャード上の指定のプライマリキーを有するデータ項目が「真」のトゥームストーン属性値を有していれば、制御はブロック６１４に進む。そうでなければ、制御はブロック６１６に進む。
【００４６】
ブロック６１４において、クライアントは、取得動作を実行することを控え得る。クライアントは、（指定のプライマリキーを有するデータ項目が見つけられなかったので）取得動作が失敗したことをユーザに知らせ得る。この時点で、技術６００は終了する。
【００４７】
代替的に、ブロック６１６において、クライアントは、宛先シャード上の指定のプライマリキーを有するデータの属性値を読取り得る。クライアントは、これらの属性値をユーザに提示して、同時に、取得動作が成功したことを知らせ得る。この時点で、技術６００は終了する。
【００４８】
代替的に、ブロック６１８において、クライアントは、指定のプライマリキーを有するデータ項目がソースシャード上にすでに存在しているか否かを判断し得る。指定のプライマリキーを有するデータ項目がソースシャード上にすでに存在していれば、制御はブロック６２０に進む。そうでなければ、制御は図６Ｂのブロック６２６に進む。
【００４９】
代替的に、ブロック６２０において、クライアントは、ソースシャード上の指定のプライマリキーを有するデータ項目が「真」のトゥームストーン属性値を有しているか否かを判断し得る。ソースシャード上の指定のプライマリキーを有するデータ項目が「真」のトゥームストーン属性値を有していれば、制御はブロック６２２に進む。そうでなければ、制御はブロック６２４に進む。
【００５０】
ブロック６２２において、クライアントは、取得動作を実行することを控え得る。クライアントは、（指定のプライマリキーを有するデータ項目が見つけられなかったので）取得動作が失敗したことをユーザに知らせ得る。この時点で、技術６００は終了する。
【００５１】
代替的に、ブロック６２４において、クライアントは、ソースシャード上の指定のプライマリキーを有するデータの属性値を読取り得る。クライアントは、これらの属性値をユーザに提示して、同時に、取得動作が成功したことを知らせ得る。この時点で、技術６００は終了する。
【００５２】
ここで図６Ｂを参照して、代替的に、ブロック６２６において、クライアントは、指定のプライマリキーを有するデータ項目が宛先シャード上に現在存在しているか否かを（再び）判断し得る。（例えばリバランシングプロセスが当該データ項目を宛先シャードに新しく移動させた結果として）指定のプライマリキーを有するデータ項目が宛先シャード上に現在存在していれば、制御はブロック６２８に進む。そうでなければ、制御はブロック６３０に進む。
【００５３】
ブロック６２８において、クライアントは、宛先シャード上の指定のプライマリキーを有するデータ項目が「真」のトゥームストーン属性値を有しているか否かを判断し得る。宛先シャード上の指定のプライマリキーを有するデータ項目が「真」のトゥームストーン属性値を有していれば、制御はブロック６３０に進む。そうでなければ、制御はブロック６３２に進む。
【００５４】
ブロック６３０において、クライアントは、取得動作を実行することを控え得る。クライアントは、（指定のプライマリキーを有するデータ項目が見つけられなかったので）取得動作が失敗したことをユーザに知らせ得る。この時点で、技術６００は終了する。
【００５５】
代替的に、ブロック６３２において、クライアントは、宛先シャード上の指定のプライマリキーを有するデータの属性値を読取り得る。クライアントは、これらの属性値をユーザに提示して、同時に、取得動作が成功したことを知らせ得る。この時点で、技術６００は終了する。
【００５６】
リバランシング動作
図７は、本発明の実施例に係る、クライアント１０２Ａ〜Ｎが（最初に）リバランシング状態にある間にリバランシング動作を実行するための技術７００の例を示すフロー図である。技術７００は、特定の順序で実行される特定のアクティビティを含むものとして示されているが、本発明の代替的な実施例は、追加のアクティビティ、より少ない数のアクティビティまたは異なるアクティビティを有する技術を含んでいてもよい。リバランシングプロセスは、クライアント１０２Ａ〜Ｎによる他のタイプの動作の実行に非同期的に技術７００を実行し得る。
【００５７】
ブロック７０２において、システムの現在のバージョン番号がインクリメントされる。ブロック７０４において、リバランシングプロセスは、バージョン番号属性値がシステムの現在のバージョン番号よりも小さいデータ項目を任意のシャードが依然として含んでいるか否かを判断し得る。バージョン番号属性値がシステムの現在のバージョン番号よりも小さい特定のデータ項目をあるシャードが含んでいれば、制御はブロック７０６に進む。そうでなければ、リバランシングプロセスは、この特定のリバランシングイベントのためのデータ項目のリロケーションを終了し、制御はブロック７１４に進む。
【００５８】
ブロック７０６において、リバランシングプロセスは、シャード量の変化の後に当該特定のデータ項目が位置することになる宛先シャードのアイデンティティを判断し得る。この判断は、例えば新たなシャード量を法として特定のデータ項目のプライマリキーを計算することによって実現されてもよい。ブロック７０８において、リバランシングプロセスは、特定のデータ項目が現在位置しているソースシャードのアイデンティティが宛先シャードのアイデンティティと同一であるか否かを判断し得る。アイデンティティが同一であれば、制御はブロック７１０に進む。そうでなければ、制御はブロック７１２に進む。
【００５９】
ブロック７１０において、リバランシングプロセスは、システムの現在のバージョン番号を特定のデータ項目のバージョン番号属性に割り当て得る。このような状況下では、特定のデータ項目は、異なるシャードにリロケートされる必要はない。制御はブロック７０４に戻る。
【００６０】
代替的に、ブロック７１２において、リバランシングプロセスは、特定のデータ項目を宛先シャードに挿入し得る。一実施例では、起こり得るコンフリクトを無視することができる。リバランシングプロセスは、システムの現在のバージョン番号を特定のデータ項目のバージョン番号属性に割り当て得る。重要なことに、実施例では、ブロック７１６および７１８のアクティビティが実行されるまで、特定のデータ項目の古いコピーがソースシャード上に残っている可能性がある。制御はブロック７０４に戻る。
【００６１】
代替的に、ブロック７１４において、リバランシングプロセスは、リバランシングプロセスがデータ項目のリロケーションを終了した時点で実行されていた（例えばクライアント１０２Ａ〜Ｎからの）任意のクエリが、シャード（例えばシャード１０４Ａ〜Ｎ）のうちのいずれかに対して現在実行されているか否かを判断し得る。リバランシングプロセスがデータ項目のリロケーションを終了した時点で実行されていた少なくとも１つのクエリが、少なくとも１つのシャードに対して現在実行されていれば、制御はブロック７１４に戻る。そうでなければ、制御はブロック７１６に進む。
【００６２】
データ項目リロケーションの終了時点でペンディングであった全てのクエリが完了した後、ブロック７１６において、リバランシングプロセスは、バージョン番号属性値がシステムの現在のバージョン番号よりも小さい全てのデータ項目コピーを全てのシャードから除去し得る。ブロック７１８において、リバランシングプロセスは、トゥームストーン属性値が「真」である全てのデータ項目コピーを全てのシャードから除去し得る。実施例では、ブロック７１６および７１８のアクティビティは、図２に関連して上記したクリーンアップ局面２１０中に実行可能である。
【００６３】
クエリ動作
図８は、本発明の実施例に係る、リバランシング状態にある間にクエリ動作を実行するための技術８００の例を示すフロー図である。技術８００は、特定の順序で実行される特定のアクティビティを含むものとして示されているが、本発明の代替的な実施例は、追加のアクティビティ、より少ない数のアクティビティまたは異なるアクティビティを有する技術を含んでいてもよい。例えば、クライアント１０２Ａ〜Ｎはいずれも、技術８００を実行することができる。技術８００は、技術７００と同時に実行可能である。ブロック８０２において、シャード１０４Ａ〜Ｎの各々の特定のシャードについて、クエリ指定のフィルタリング基準を満たす特定のシャードのデータ項目が全て、当該特定のシャードについての別々の事前結果キューに入れられ得る。各々のこのような事前結果キューは、空の状態で開始し得る。したがって、シャード１０４Ａ〜Ｎの各々について、別々の事前結果キューが投入され得る。ブロック８０４において、シャード１０４Ａ〜Ｎの各々の特定のシャードについて、当該特定のシャードの事前結果キュー内に含まれるデータ項目が、少なくとも部分的にそれらのデータ項目のプライマリキーに基づいて、分類され得る。その結果、例えば、各々の事前結果キューは、当該事前結果キューにおけるデータ項目のうちの最小のプライマリキーを有するデータ項目が当該事前結果キューの先頭にあることができるように分類されるデータ項目を含み得る。ブロック８０６において、全てのシャードの事前結果キューが空であるか否かについて判断がなされ得る。全てのシャードの事前結果キューが空であれば、制御はブロック８１８に進む。そうでなければ、制御はブロック８０８に進む。
【００６４】
ブロック８０８において、現在のところ各々のシャードの事前結果キューのトップにあるデータ項目のセットから、当該セットにおけるデータ項目の中で最小のプライマリキーを有する１つ以上のデータ項目のサブセットが選択され得る。ブロック８１０において、ブロック８０８において選択された１つ以上のデータ項目のサブセットから、最大のバージョン番号属性値を有する特定のデータ項目が選択され得る。ブロック８１２において、特定のデータ項目のトゥームストーン属性値が「偽」であるか否かについて判断がなされ得る。特定のデータ項目のトゥームストーン属性値が「偽」であれば、制御はブロック８１４に進む。そうでなければ、制御はブロック８１６に進む。
【００６５】
ブロック８１４において、特定のデータ項目が最終結果セットに追加され得る。最終結果セットは、空の状態で開始し得る。制御はブロック８１６に進む。ブロック８１６において、（特定のデータ項目自体を含む）特定のデータ項目と同一のプライマリキーを有する全てのデータ項目コピーが、全てのシャードの事前結果キューから除去され得る。この除去は、場合によっては、他のデータ項目をそれらのキューのうちの１つ以上のトップに上昇させる可能性がある。制御はブロック８０６に戻る。
【００６６】
代替的に、ブロック８１８において、最終結果セットにおけるデータ項目が、クエリ動作の最終結果として返され得る。
【００６７】
ハードウェアの概要
図９は、実施例のうちの１つを実現するための分散システム９００の簡略化された図を示す。示されている実施例では、分散システム９００は、１つ以上のクライアント計算装置９０２，９０４，９０６および９０８を含み、当該１つ以上のクライアント計算装置９０２，９０４，９０６および９０８は、ウェブブラウザ、専有のクライアント（例えばオラクルフォームズ）などのクライアントアプリケーションを１つ以上のネットワーク９１０を介して実行および動作させるように構成されている。サーバ９１２は、ネットワーク９１０を介して、遠く離れたクライアント計算装置９０２，９０４，９０６および９０８と通信可能に結合され得る。
【００６８】
さまざまな実施例では、サーバ９１２は、システムの１つ以上の構成要素によって提供される１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合され得る。いくつかの実施例では、これらのサービスは、ウェブベースのサービスもしくはクラウドサービスとして、またはソフトウェア・アズ・ア・サービス（Software as a Service：ＳａａＳ）モデルのもとで、クライアント計算装置９０２，９０４，９０６および／または９０８のユーザに供給されてもよい。そして、クライアント計算装置９０２，９０４，９０６および／または９０８を動作させるユーザは、１つ以上のクライアントアプリケーションを利用して、サーバ９１２と相互作用して、これらの構成要素によって提供されるサービスを利用し得る。
【００６９】
図に示されている構成では、システム９００のソフトウェアコンポーネント９１８，９２０および９２２は、サーバ９１２上に実装されるように示されている。また、他の実施例では、システム９００の構成要素のうちの１つ以上および／またはこれらの構成要素によって提供されるサービスは、クライアント計算装置９０２，９０４，９０６および／または９０８のうちの１つ以上によって実現されてもよい。その場合、クライアント計算装置を動作させるユーザは、１つ以上のクライアントアプリケーションを利用して、これらの構成要素によって提供されるサービスを使用し得る。これらの構成要素は、ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせで実現されてもよい。分散システム９００とは異なり得るさまざまな異なるシステム構成が可能であることが理解されるべきである。したがって、図に示されている実施例は、実施例のシステムを実現するための分散システムの一例であり、限定的であるよう意図したものではない。
【００７０】
クライアント計算装置９０２，９０４，９０６および／または９０８は、手持ち式携帯機器（例えばｉＰｈｏｎｅ（登録商標）、携帯電話、ｉＰａｄ（登録商標）、計算タブレット、パーソナルデジタルアシスタント（personal digital assistant：ＰＤＡ））またはウェアラブル装置（例えばグーグルグラス（登録商標）ヘッドマウントディスプレイ）であってもよく、当該装置は、マイクロソフト・ウィンドウズ・モバイル（登録商標）などのソフトウェアを実行し、および／または、ｉＯＳ、ウィンドウズ・フォン、アンドロイド、ブラックベリー１０、パームＯＳなどのさまざまなモバイルオペレーティングシステムを実行し、インターネット、ｅメール、ショート・メッセージ・サービス（short message service：ＳＭＳ）、ブラックベリー（登録商標）、または使用可能な他の通信プロトコルである。クライアント計算装置は、汎用パーソナルコンピュータであってもよく、当該汎用パーソナルコンピュータは、一例として、マイクロソフトウィンドウズ（登録商標）、アップルマッキントッシュ（登録商標）および／またはリナックス（登録商標）オペレーティングシステムのさまざまなバージョンを実行するパーソナルコンピュータおよび／またはラップトップコンピュータを含む。クライアント計算装置は、ワークステーションコンピュータであってもよく、当該ワークステーションコンピュータは、例えばＧｏｏｇｌｅ  Ｃｈｒｏｍｅ  ＯＳなどのさまざまなＧＮＵ／リナックスオペレーティングシステムを含むがこれらに限定されるものではないさまざまな市販のＵＮＩＸ（登録商標）またはＵＮＩＸライクオペレーティングシステムのうちのいずれかを実行する。代替的に、またはさらに、クライアント計算装置９０２，９０４，９０６および９０８は、シン・クライアントコンピュータ、インターネットにより可能なゲームシステム（例えばキネクト（登録商標）ジェスチャ入力装置を有するまたは持たないマイクロソフトＸボックスゲーム機）、および／または、ネットワーク９１０を介して通信が可能なパーソナルメッセージング装置などのその他の電子装置であってもよい。
【００７１】
例示的な分散システム９００は、４個のクライアント計算装置を有するように示されているが、任意の数のクライアント計算装置がサポートされてもよい。センサを有する装置などの他の装置が、サーバ９１２と相互作用してもよい。
【００７２】
分散システム９００におけるネットワーク９１０は、さまざまな市販のプロトコルのうちのいずれかを用いてデータ通信をサポートすることができる、当業者になじみのある任意のタイプのネットワークであってもよく、当該プロトコルは、ＴＣＰ／ＩＰ（伝送制御プロトコル／インターネットプロトコル）、ＳＮＡ（システムネットワークアーキテクチャ）、ＩＰＸ（インターネットパケット交換）、アップルトークなどを含むが、これらに限定されるものではない。単に一例として、ネットワーク９１０は、イーサネット、トークンリングなどに基づくものなどのローカルエリアネットワーク（ＬＡＮ）であってもよい。ネットワーク９１０は、広域ネットワークおよびインターネットであってもよい。ネットワーク９１０は、仮想ネットワークを含んでいてもよく、当該仮想ネットワークは、仮想プライベートネットワーク（virtual private network：ＶＰＮ）、イントラネット、エクストラネット、公衆交換電話網（public switched telephone network：ＰＳＴＮ）、赤外線ネットワーク、無線ネットワーク（例えば米国電気電子学会（Institute of Electrical and Electronics：ＩＥＥＥ）９０２．１１の一連のプロトコル、ブルートゥース（登録商標）および／またはその他の無線プロトコルのうちのいずれかのもとで動作するネットワーク）、および／またはこれらの任意の組み合わせ、および／または他のネットワークを含むが、これらに限定されるものではない。
【００７３】
サーバ９１２は、１つ以上の汎用コンピュータ、専用サーバコンピュータ（一例として、ＰＣ（パーソナルコンピュータ）サーバ、ＵＮＩＸ（登録商標）サーバ、ミッドレンジサーバ、メインフレームコンピュータ、ラックマウント式サーバなどを含む）、サーバファーム、サーバクラスタ、またはその他の適切な構成および／または組み合わせで構成され得る。さまざまな実施例では、サーバ９１２は、上記の開示に記載されている１つ以上のサービスまたはソフトウェアアプリケーションを実行するように適合され得る。例えば、サーバ９１２は、本開示の実施例に係る上記の処理を実行するためのサーバに対応してもよい。
【００７４】
サーバ９１２は、上記のもののうちのいずれか、および、任意の市販のサーバオペレーティングシステムを含むオペレーティングシステムを実行し得る。また、サーバ９１２は、ＨＴＴＰ（ハイパーテキスト転送プロトコル）サーバ、ＦＴＰ（ファイル転送プロトコル）サーバ、ＣＧＩ（共通ゲートウェイインターフェース）サーバ、ＪＡＶＡ（登録商標）サーバ、データベースサーバなどを含むさまざまなさらなるサーバアプリケーションおよび／または中間層アプリケーションのうちのいずれかを実行し得る。例示的なデータベースサーバは、オラクル社、マイクロソフト社、サイベース社、ＩＢＭ社（International Business Machines）などから市販されているものを含むが、これらに限定されるものではない。
【００７５】
いくつかの実現例では、サーバ９１２は、クライアント計算装置９０２，９０４，９０６および９０８のユーザから受信されたデータフィードおよび／またはイベント更新を分析および統合するための１つ以上のアプリケーションを含み得る。一例として、データフィードおよび／またはイベント更新は、１つ以上の第三者情報源および連続的なデータストリームから受信されるツイッター（登録商標）フィード、フェースブック（登録商標）更新またはリアルタイム更新を含み得るが、これらに限定されるものではなく、センサデータアプリケーション、金融ティッカ、ネットワーク性能測定ツール（例えばネットワークモニタリングおよびトラフィック管理アプリケーション）、クリックストリーム分析ツール、自動車交通モニタリングなどに関連するリアルタイムイベントを含み得る。また、サーバ９１２は、クライアント計算装置９０２，９０４，９０６および９０８の１つ以上の表示装置を介してデータフィードおよび／またはリアルタイムイベントを表示するための１つ以上のアプリケーションを含み得る。
【００７６】
また、分散システム９００は、１つ以上のデータベース９１４および９１６を含み得る。データベース９１４および９１６は、さまざまな場所に存在し得る。一例として、データベース９１４および９１６の１つ以上は、サーバ９１２にローカルな（および／または存在する）非一時的な記憶媒体に存在していてもよい。代替的に、データベース９１４および９１６は、サーバ９１２から遠く離れていて、ネットワークベースまたは専用の接続を介してサーバ９１２と通信してもよい。一組の実施例では、データベース９１４および９１６は、記憶領域ネットワーク（storage-area network：ＳＡＮ）に存在していてもよい。同様に、サーバ９１２に起因する機能を実行するための任意の必要なファイルが、サーバ９１２上にローカルに、および／または、リモートで適宜格納されていてもよい。一組の実施例では、データベース９１４および９１６は、ＳＱＬフォーマットコマンドに応答してデータを格納、更新および検索するように適合された、オラクル社によって提供されるデータベースなどのリレーショナルデータベースを含み得る。
【００７７】
図１０は、本開示の実施例に係る、実施例のシステムの１つ以上の構成要素によって提供されるサービスをクラウドサービスとして供給することができるシステム環境１０００の１つ以上の構成要素の簡略化されたブロック図である。示されている実施例では、システム環境１０００は、クラウドサービスをホストするクラウドインフラストラクチャシステム１００２と相互作用するようにユーザによって使用され得る１つ以上のクライアント計算装置１００４，１００６および１００８を含む。クライアント計算装置は、クラウドインフラストラクチャシステム１００２によって提供されるサービスを使用するためにクラウドインフラストラクチャシステム１００２と相互作用するようにクライアント計算装置のユーザによって使用され得る、ウェブブラウザ、専有のクライアントアプリケーション（例えばオラクルフォームズ）または他のアプリケーションなどのクライアントアプリケーションを動作させるように構成され得る。
【００７８】
図に示されているクラウドインフラストラクチャシステム１００２は、示されている構成要素とは他の構成要素を有していてもよいということが理解されるべきである。さらに、図に示されている実施例は、本発明の実施例を組み込むことができるクラウドインフラストラクチャシステムの一例にすぎない。いくつかの他の実施例では、クラウドインフラストラクチャシステム１００２は、図に示されているものよりも多いまたは少ない数の構成要素を有していてもよく、２つ以上の構成要素を組み合わせてもよく、または構成要素の異なる構成または配置を有していてもよい。
【００７９】
クライアント計算装置１００４，１００６および１００８は、９０２，９０４，９０６および９０８について上記したものと類似の装置であってもよい。
【００８０】
例示的なシステム環境１０００は３個のクライアント計算装置を有するように示されているが、任意の数のクライアント計算装置がサポートされてもよい。センサを有する装置などの他の装置が、クラウドインフラストラクチャシステム１００２と相互作用してもよい。
【００８１】
ネットワーク１０１０は、クライアント１００４，１００６および１００８とクラウドインフラストラクチャシステム１００２との間のデータの通信およびやりとりを容易にし得る。各々のネットワークは、ネットワーク９１０について上記したものを含むさまざまな市販のプロトコルのうちのいずれかを用いてデータ通信をサポートすることができる、当業者になじみのある任意のタイプのネットワークであってもよい。
【００８２】
クラウドインフラストラクチャシステム１００２は、サーバ９１２について上記したものを含み得る１つ以上のコンピュータおよび／またはサーバを備え得る。
【００８３】
特定の実施例では、クラウドインフラストラクチャシステムによって提供されるサービスは、オンラインデータ記憶およびバックアップソリューション、ウェブベースのｅメールサービス、ホスト型オフィススイートおよびドキュメントコラボレーションサービス、データベース処理、管理技術サポートサービスなどの、クラウドインフラストラクチャシステムのユーザがオンデマンドで利用可能な多数のサービスを含み得る。クラウドインフラストラクチャシステムによって提供されるサービスは、そのユーザのニーズを満たすように動的にスケーリング可能である。クラウドインフラストラクチャシステムによって提供されるサービスの具体的なインスタンス化は、本明細書では「サービスインスタンス」と称される。一般に、インターネットなどの通信ネットワークを介してクラウドサービスプロバイダのシステムからユーザが利用可能な任意のサービスは、「クラウドサービス」と称される。通常、パブリッククラウド環境では、クラウドサービスプロバイダのシステムを構成するサーバおよびシステムは、顧客自身のオンプレミスサーバおよびシステムとは異なっている。例えば、クラウドサービスプロバイダのシステムがアプリケーションを提供してもよく、ユーザは、インターネットなどの通信ネットワークを介してオンデマンドで当該アプリケーションを注文および使用してもよい。
【００８４】
いくつかの例では、コンピュータネットワーククラウドインフラストラクチャにおけるサービスは、記憶装置、ホスト型データベース、ホスト型ウェブサーバ、ソフトウェアアプリケーションへの保護されたコンピュータネットワークアクセス、またはクラウドベンダによってユーザに提供されるかもしくはそうでなければ当該技術分野において公知の他のサービスを含み得る。例えば、サービスは、インターネットを介したクラウド上のリモート記憶装置へのパスワードによって保護されたアクセスを含み得る。別の例として、サービスは、ネットワーク化された開発者による私的使用のためのウェブサービスベースのホスト型リレーショナルデータベースおよびスクリプト言語ミドルウェアエンジンを含み得る。別の例として、サービスは、クラウドベンダのウェブサイト上でホストされるｅメールソフトウェアアプリケーションへのアクセスを含み得る。
【００８５】
特定の実施例では、クラウドインフラストラクチャシステム１００２は、セルフサービスの、サブスクリプションベースの、弾性的にスケーラブルな、信頼性のある、高可用性の、安全な態様で顧客に配信される一連のアプリケーション、ミドルウェアおよびデータベースサービス提供品を含み得る。このようなクラウドインフラストラクチャシステムの一例は、本譲受人によって提供されるオラクルパブリッククラウドである。
【００８６】
さまざまな実施例では、クラウドインフラストラクチャシステム１００２は、クラウドインフラストラクチャシステム１００２によって供給されるサービスへの顧客のサブスクリプションを自動的にプロビジョニング、管理および追跡するように適合され得る。クラウドインフラストラクチャシステム１００２は、さまざまなデプロイメントモデルを介してクラウドサービスを提供し得る。例えば、クラウドインフラストラクチャシステム１００２が、（例えばオラクル社によって所有される）クラウドサービスを販売する組織によって所有され、一般大衆またはさまざまな産業企業がサービスを利用できるパブリッククラウドモデルのもとでサービスが提供されてもよい。別の例として、クラウドインフラストラクチャシステム１００２が単一の組織のためだけに運営され、当該組織内の１つ以上のエンティティにサービスを提供し得るプライベートクラウドモデルのもとでサービスが提供されてもよい。また、クラウドインフラストラクチャシステム１００２およびクラウドインフラストラクチャシステム１００２によって提供されるサービスが、関連のコミュニティ内のいくつかの組織によって共有されるコミュニティクラウドモデルのもとでクラウドサービスが提供されてもよい。また、２つ以上の異なるモデルの組み合わせであるハイブリッドクラウドモデルのもとでクラウドサービスが提供されてもよい。
【００８７】
いくつかの実施例では、クラウドインフラストラクチャシステム１００２によって提供されるサービスは、ソフトウェア・アズ・ア・サービス（Software as a Service：ＳａａＳ）カテゴリ、プラットフォーム・アズ・ア・サービス（Platform as a Service：ＰａａＳ）カテゴリ、インフラストラクチャ・アズ・ア・サービス（Infrastructure as a Service：ＩａａＳ）カテゴリ、またはハイブリッドサービスを含むサービスの他のカテゴリのもとで提供される１つ以上のサービスを含み得る。顧客は、サブスクリプションオーダーによって、クラウドインフラストラクチャシステム１００２によって提供される１つ以上のサービスを注文し得る。次いで、クラウドインフラストラクチャシステム１００２は、顧客のサブスクリプションオーダーにおけるサービスを提供するために処理を実行する。
【００８８】
いくつかの実施例では、クラウドインフラストラクチャシステム１００２によって提供されるサービスは、アプリケーションサービス、プラットフォームサービスおよびインフラストラクチャサービスを含み得るが、これらに限定されるものではない。いくつかの例では、アプリケーションサービスは、ＳａａＳプラットフォームを介してクラウドインフラストラクチャシステムによって提供されてもよい。ＳａａＳプラットフォームは、ＳａａＳカテゴリに分類されるクラウドサービスを提供するように構成され得る。例えば、ＳａａＳプラットフォームは、一体化された開発およびデプロイメントプラットフォーム上で一連のオンデマンドアプリケーションを構築および配信するための機能を提供し得る。ＳａａＳプラットフォームは、ＳａａＳサービスを提供するための基本的なソフトウェアおよびインフラストラクチャを管理および制御し得る。ＳａａＳプラットフォームによって提供されるサービスを利用することによって、顧客は、クラウドインフラストラクチャシステムで実行されるアプリケーションを利用することができる。顧客は、顧客が別々のライセンスおよびサポートを購入する必要なく、アプリケーションサービスを取得することができる。さまざまな異なるＳａａＳサービスが提供されてもよい。例としては、大規模組織のための販売実績管理、企業統合およびビジネスの柔軟性のためのソリューションを提供するサービスが挙げられるが、これらに限定されるものではない。
【００８９】
いくつかの実施例では、プラットフォームサービスは、ＰａａＳプラットフォームを介してクラウドインフラストラクチャシステムによって提供されてもよい。ＰａａＳプラットフォームは、ＰａａＳカテゴリに分類されるクラウドサービスを提供するように構成され得る。プラットフォームサービスの例としては、組織（オラクル社など）が既存のアプリケーションを共有の共通のアーキテクチャ上で統合することを可能にするサービス、および、プラットフォームによって提供される共有のサービスを活用する新たなアプリケーションを構築する機能を挙げることができるが、これらに限定されるものではない。ＰａａＳプラットフォームは、ＰａａＳサービスを提供するための基本的なソフトウェアおよびインフラストラクチャを管理および制御し得る。顧客は、顧客が別々のライセンスおよびサポートを購入する必要なく、クラウドインフラストラクチャシステムによって提供されるＰａａＳサービスを取得することができる。プラットフォームサービスの例としては、オラクルＪａｖａクラウドサービス（Java Cloud Service：ＪＣＳ）、オラクルデータベースクラウドサービス（Database Cloud Service：ＤＢＣＳ）などが挙げられるが、これらに限定されるものではない。
【００９０】
ＰａａＳプラットフォームによって提供されるサービスを利用することによって、顧客は、クラウドインフラストラクチャシステムによってサポートされるプログラミング言語およびツールを利用することができ、デプロイされたサービスを制御することもできる。いくつかの実施例では、クラウドインフラストラクチャシステムによって提供されるプラットフォームサービスは、データベースクラウドサービス、ミドルウェアクラウドサービル（例えばオラクルフージョンミドルウェアサービス）およびＪａｖａクラウドサービスを含み得る。一実施例では、データベースクラウドサービスは、組織がデータベースリソースをプールしてデータベースクラウドの形態でデータベース・アズ・ア・サービスを顧客に供給することを可能にする共有のサービスデプロイメントモデルをサポートし得る。ミドルウェアクラウドサービスは、クラウドインフラストラクチャシステムにおいてさまざまなビジネスアプリケーションを開発およびデプロイするために顧客にプラットフォームを提供し得て、Ｊａｖａクラウドサービスは、クラウドインフラストラクチャシステムにおいてＪａｖａアプリケーションをデプロイするために顧客にプラットフォームを提供し得る。
【００９１】
さまざまな異なるインフラストラクチャサービスは、クラウドインフラストラクチャシステムにおけるＩａａＳプラットフォームによって提供されてもよい。インフラストラクチャサービスは、記憶装置、ネットワークなどの基本的な計算リソース、ならびに、ＳａａＳプラットフォームおよびＰａａＳプラットフォームによって提供されるサービスを利用する顧客のための他の基礎的な計算リソースの管理および制御を容易にする。
【００９２】
また、特定の実施例では、クラウドインフラストラクチャシステム１００２は、クラウドインフラストラクチャシステムの顧客にさまざまなサービスを提供するために使用されるリソースを提供するためのインフラストラクチャリソース１０３０を含み得る。一実施例では、インフラストラクチャリソース１０３０は、ＰａａＳプラットフォームおよびＳａａＳプラットフォームによって提供されるサービスを実行するための、サーバ、記憶装置およびネットワーキングリソースなどのハードウェアの事前に一体化された最適な組み合わせを含み得る。
【００９３】
いくつかの実施例では、クラウドインフラストラクチャシステム１００２におけるリソースは、複数のユーザによって共有され、デマンド当たり動的に再割り振りされ得る。また、リソースは、異なる時間帯におけるユーザに割り振られ得る。例えば、クラウドインフラストラクチャシステム１０３０は、第１の時間帯におけるユーザの第１の組が規定の時間にわたってクラウドインフラストラクチャシステムのリソースを利用することができ、次いで、異なる時間帯に位置するユーザの別の組への同一のリソースの再割り振りを可能にし、それによってリソースの利用を最大化することができる。
【００９４】
特定の実施例では、クラウドインフラストラクチャシステム１００２の異なる構成要素またはモジュール、および、クラウドインフラストラクチャシステム１００２によって提供されるサービス、によって共有されるいくつかの内部共有サービス１０３２が提供され得る。これらの内部共有サービスは、セキュリティおよびアイデンティティサービス、インテグレーションサービス、企業リポジトリサービス、企業マネージャサービス、ウイルススキャンおよびホワイトリストサービス、高可用性・バックアップおよび回復サービス、クラウドサポートを可能にするためのサービス、ｅメールサービス、通知サービス、ファイル転送サービスなどを含み得るが、これらに限定されるものではない。
【００９５】
特定の実施例では、クラウドインフラストラクチャシステム１００２は、クラウドインフラストラクチャシステムにおけるクラウドサービス（例えばＳａａＳ、ＰａａＳおよびＩａａＳサービス）の包括的管理を提供し得る。一実施例では、クラウド管理機能は、クラウドインフラストラクチャシステム１００２によって受信された顧客のサブスクリプションをプロビジョニング、管理および追跡などするための機能を含み得る。
【００９６】
一実施例では、図に示されているように、クラウド管理機能は、オーダー管理モジュール１０２０、オーダーオーケストレーションモジュール１０２２、オーダープロビジョニングモジュール１０２４、オーダー管理およびモニタリングモジュール１０２６、ならびにアイデンティティ管理モジュール１０２８などの１つ以上のモジュールによって提供され得る。これらのモジュールは、汎用コンピュータ、専用サーバコンピュータ、サーバファーム、サーバクラスタ、またはその他の適切な構成および／もしくは組み合わせであってもよい１つ以上のコンピュータおよび／またはサーバを含み得て、またはそれらを用いて提供され得る。
【００９７】
例示的な動作１０３４において、顧客は、クラウドインフラストラクチャシステム１００２によって提供される１つ以上のサービスを要求し、クラウドインフラストラクチャシステム１００２によって供給される１つ以上のサービスのサブスクリプションについてオーダーを行うことによって、クライアント装置１００４，１００６または１００８などのクライアント装置を用いてクラウドインフラストラクチャシステム１００２と相互作用し得る。特定の実施例では、顧客は、クラウドユーザインターフェース（User Interface：ＵＩ）、すなわちクラウドＵＩ１０１２、クラウドＵＩ１０１４および／またはクラウドＵＩ１０１６にアクセスして、これらのＵＩを介してサブスクリプションオーダーを行い得る。顧客がオーダーを行ったことに応答してクラウドインフラストラクチャシステム１００２によって受信されたオーダー情報は、顧客および顧客がサブスクライブする予定のクラウドインフラストラクチャシステム１００２によって供給される１つ以上のサービスを特定する情報を含み得る。
【００９８】
オーダーが顧客によって行われた後、オーダー情報は、クラウドＵＩ１０１２，１０１４および／または１０１６を介して受信される。
【００９９】
動作１０３６において、オーダーは、オーダーデータベース１０１８に格納される。オーダーデータベース１０１８は、クラウドインフラストラクチャシステム１０１８によって動作され、かつ、他のシステム要素と連携して動作されるいくつかのデータベースのうちの１つであってもよい。
【０１００】
動作１０３８において、オーダー情報は、オーダー管理モジュール１０２０に転送される。いくつかの例では、オーダー管理モジュール１０２０は、オーダーの確認および確認時のオーダーの予約などのオーダーに関連するビリングおよびアカウンティング機能を実行するように構成され得る。
【０１０１】
動作１０４０において、オーダーに関する情報は、オーダーオーケストレーションモジュール１０２２に通信される。オーダーオーケストレーションモジュール１０２２は、顧客によって行われたオーダーのためのサービスおよびリソースのプロビジョニングをオーケストレートするためにオーダー情報を利用し得る。いくつかの例では、オーダーオーケストレーションモジュール１０２２は、オーダープロビジョニングモジュール１０２４のサービスを用いてサブスクライブされたサービスをサポートするためにリソースのプロビジョニングをオーケストレートし得る。
【０１０２】
特定の実施例では、オーダーオーケストレーションモジュール１０２２は、各々のオーダーに関連付けられるビジネスプロセスの管理を可能にし、ビジネス論理を適用してオーダーがプロビジョニングに進むべきか否かを判断する。動作１０４２において、新たなサブスクリプションについてのオーダを受信すると、オーダーオーケストレーションモジュール１０２２は、リソースを割り振って当該サブスクリプションオーダーを満たすのに必要とされるそれらのリソースを構成するための要求をオーダープロビジョニングモジュール１０２４に送る。オーダープロビジョニングモジュール１０２４は、顧客によってオーダーされたサービスのためのリソースの割り振りを可能にする。オーダープロビジョニングモジュール１０２４は、クラウドインフラストラクチャシステム１０００によって提供されるクラウドサービスと、要求されたサービスを提供するためのリソースをプロビジョニングするために使用される物理的実装層との間にあるレベルの抽象化を提供する。したがって、オーダーオーケストレーションモジュール１０２２は、サービスおよびリソースが実際に実行中にプロビジョニングされるか、事前にプロビジョニングされて要求があったときに割り振られる／割り当てられるのみであるかなどの実装の詳細から分離させることができる。
【０１０３】
動作１０４４において、サービスおよびリソースがプロビジョニングされると、提供されたサービスの通知が、クラウドインフラストラクチャシステム１００２のオーダープロビジョニングモジュール１０２４によってクライアント装置１００４，１００６および／または１００８上の顧客に送られ得る。
【０１０４】
動作１０４６において、顧客のサブスクリプションオーダーが、オーダー管理およびモニタリングモジュール１０２６によって管理および追跡され得る。いくつかの例では、オーダー管理およびモニタリングモジュール１０２６は、使用される記憶量、転送されるデータ量、ユーザの数、ならびにシステムアップ時間およびシステムダウン時間などのサブスクリプションオーダーにおけるサービスについての使用統計を収集するように構成され得る。
【０１０５】
特定の実施例では、クラウドインフラストラクチャシステム１０００は、アイデンティティ管理モジュール１０２８を含み得る。アイデンティティ管理モジュール１０２８は、クラウドインフラストラクチャシステム１０００におけるアクセス管理および認可サービスなどのアイデンティティサービスを提供するように構成され得る。いくつかの実施例では、アイデンティティ管理モジュール１０２８は、クラウドインフラストラクチャシステム１００２によって提供されるサービスを利用したい顧客についての情報を制御し得る。このような情報は、このような顧客のアイデンティティを認証する情報、および、それらの顧客がさまざまなシステムリソース（例えばファイル、ディレクトリ、アプリケーション、通信ポート、メモリセグメントなど）に対してどのアクションを実行することを認可されるかを記載する情報を含み得る。また、アイデンティティ管理モジュール１０２８は、各々の顧客についての説明的情報、ならびに、どのようにしておよび誰によって当該説明的情報がアクセスおよび変更され得るかについての情報の管理を含み得る。
【０１０６】
図１１は、本発明のさまざまな実施例を実現することができる例示的なコンピュータシステム１１００を示す。システム１１００は、上記のコンピュータシステムのうちのいずれかを実現するために使用され得る。図に示されているように、コンピュータシステム１１００は、バスサブシステム１１０２を介していくつかの周辺サブシステムと通信する処理ユニット１１０４を含む。これらの周辺サブシステムは、処理加速ユニット１１０６と、Ｉ／Ｏサブシステム１１０８と、記憶サブシステム１１１８と、通信サブシステム１１２４とを含み得る。記憶サブシステム１１１８は、有形のコンピュータ読取可能な記憶媒体１１２２と、システムメモリ１１１０とを含む。
【０１０７】
バスサブシステム１１０２は、コンピュータシステム１１００のさまざまな構成要素およびサブシステムに、意図されたように互いに通信させるための機構を提供する。バスサブシステム１１０２は、単一のバスとして概略的に示されているが、バスサブシステムの代替的な実施例は、複数のバスを利用してもよい。バスサブシステム１１０２は、メモリバスまたはメモリコントローラ、周辺バス、およびさまざまなバスアーキテクチャのうちのいずれかを使用するローカルバスを含むいくつかのタイプのバス構造のうちのいずれかであってもよい。例えば、このようなアーキテクチャは、ＩＥＥＥ  Ｐ１３８６．１標準に合わせて製造されたメザニンバスとして実現可能な、業界標準アーキテクチャ（Industry Standard Architecture：ＩＳＡ）バス、マイクロチャネルアーキテクチャ（Micro Channel Architecture：ＭＣＡ）バス、拡張ＩＳＡ（Enhanced ISA：ＥＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（Video Electronics Standards Association：ＶＥＳＡ）ローカルバスおよび周辺機器相互接続（Peripheral Component Interconnect：ＰＣＩ）バスを含み得る。
【０１０８】
１つ以上の集積回路（例えば従来のマイクロプロセッサまたはマイクロコントローラ）として実現可能な処理ユニット１１０４は、コンピュータシステム１１００の動作を制御する。処理ユニット１１０４には、１つ以上のプロセッサが含まれ得る。これらのプロセッサは、単一コアまたはマルチコアプロセッサを含み得る。特定の実施例では、処理ユニット１１０４は、各々の処理ユニットに含まれる単一またはマルチコアプロセッサを有する１つ以上の独立した処理ユニット１１３２および／または１１３４として実現されてもよい。また、他の実施例では、処理ユニット１１０４は、２つのデュアルコアプロセッサを単一のチップに組み入れることによって形成されるクアッドコア処理ユニットとして実現されてもよい。
【０１０９】
さまざまな実施例では、処理ユニット１１０４は、プログラムコードに応答してさまざまなプログラムを実行し得て、同時に実行される複数のプログラムまたはプロセスを維持し得る。任意の所与の時点において、実行されるべきプログラムコードのうちのいくつかまたは全ては、プロセッサ１１０４および／または記憶サブシステム１１１８に存在し得る。好適なプログラミングを通じて、プロセッサ１１０４は、上記のさまざまな機能を提供し得る。また、コンピュータシステム１１００は、デジタル信号プロセッサ（digital signal processor：ＤＳＰ）、特殊用途プロセッサなどを含み得る処理加速ユニット１１０６を含み得る。
【０１１０】
Ｉ／Ｏサブシステム１１０８は、ユーザインターフェース入力装置と、ユーザインターフェース出力装置とを含み得る。ユーザインターフェース入力装置は、キーボード、マウスまたはトラックボールなどのポインティング装置、タッチパッドまたはタッチスクリーンを含み得て、これらは、音声コマンド認識システム、マイクロホンおよび他のタイプの入力装置とともに、ディスプレイ、スクロールホイール、クリックホイール、ダイアル、ボタン、スイッチ、キーパッド、オーディオ入力装置に組み込まれている。ユーザインターフェース入力装置は、例えば、ジェスチャおよび話されたコマンドを用いてナチュラルユーザインターフェースを介してユーザがマイクロソフトＸｂｏｘ（登録商標）３６０ゲームコントローラなどの入力装置を制御して入力装置と相互作用することを可能にするマイクロソフトキネクト（登録商標）モーションセンサなどのモーション検知および／またはジェスチャ認識装置を含み得る。また、ユーザインターフェース入力装置は、ユーザから眼球運動（例えば撮影および／またはメニュー選択を行っている間の「まばたき」）を検出して、当該眼球ジェスチャを入力装置への入力として変換するグーグルグラス（登録商標）まばたき検出器などの眼球ジェスチャ認識装置を含み得る。また、ユーザインターフェース入力装置は、ユーザが音声コマンドを介して音声認識システム（例えばＳｉｒｉ（登録商標）ナビゲータ）と相互作用することを可能にする音声認識検知装置を含み得る。
【０１１１】
また、ユーザインターフェース入力装置は、三次元（３Ｄ）マウス、ジョイスティックまたはポインティングスティック、ゲームパッドおよびグラフィックタブレット、およびスピーカなどのオーディオ／ビジュアル装置、デジタルカメラ、デジタルカムコーダ、携帯型メディアプレーヤ、ウェブカム、画像スキャナ、指紋スキャナ、バーコードリーダ３Ｄスキャナ、３Ｄプリンタ、レーザレンジファインダ、および視線検出装置を含み得るが、これらに限定されるものではない。また、ユーザインターフェース入力装置は、例えば、コンピュータ断層撮影、磁気共鳴画像化、位置発光断層撮影、医療用超音波検査装置などの医療用画像化入力装置を含み得る。また、ユーザインターフェース入力装置は、例えばＭＩＤＩキーボード、デジタル楽器などのオーディオ入力装置を含み得る。
【０１１２】
ユーザインターフェース出力装置は、ディスプレイサブシステム、表示灯、またはオーディオ出力装置などの非視覚的ディスプレイなどを含み得る。ディスプレイサブシステムは、陰極線管（cathode ray tube：ＣＲＴ）、液晶ディスプレイ（liquid crystal display：ＬＣＤ）またはプラズマディスプレイを使用するものなどのフラットパネルディスプレイ、投影装置、タッチスクリーンなどであってもよい。一般に、「出力装置」という用語の使用は、コンピュータシステム１１００からの情報をユーザまたは他のコンピュータに出力するための全ての可能なタイプの装置および機構を含むよう意図されている。例えば、ユーザインターフェース出力装置は、モニタ、プリンタ、スピーカ、ヘッドホン、自動車のナビゲーションシステム、プロッタ、音声出力装置およびモデムなどの、テキスト、グラフィックスおよびオーディオ／ビデオ情報を視覚的に伝えるさまざまな表示装置を含み得るが、これらに限定されるものではない。
【０１１３】
コンピュータシステム１１００は、現在のところシステムメモリ１１１０内に位置しているように示されているソフトウェア要素を備える記憶サブシステム１１１８を備え得る。システムメモリ１１１０は、処理ユニット１１０４上でロード可能および実行可能なプログラム命令と、これらのプログラムの実行中に生成されるデータとを格納し得る。
【０１１４】
コンピュータシステム１１００の構成およびタイプに応じて、システムメモリ１１１０は、揮発性（ランダムアクセスメモリ（random access memory：ＲＡＭ）など）であってもよく、および／または、不揮発性（リードオンリメモリ（read-only memory：ＲＯＭ）、フラッシュメモリなど）であってもよい。一般に、ＲＡＭは、処理ユニット１１０４がすぐにアクセス可能なデータおよび／またはプログラムモジュール、および／または、処理ユニット１１０４によって現在動作および実行されているデータおよび／またはプログラムモジュールを収容する。いくつかの実現例では、システムメモリ１１１０は、スタティックランダムアクセスメモリ（static random access memory：ＳＲＡＭ）またはダイナミックランダムアクセスメモリ（dynamic random access memory：ＤＲＡＭ）などの複数の異なるタイプのメモリを含み得る。いくつかの実現例では、始動中などにコンピュータシステム１１００内の要素間で情報を転送することを助ける基本ルーチンを含む基本入力／出力システム（basic input/output system：ＢＩＯＳ）が、一般にＲＯＭに格納され得る。一例としておよび非限定的に、システムメモリ１１１０は、クライアントアプリケーション、ウェブブラウザ、中間層アプリケーション、リレーショナルデータベース管理システム（relational database management system：ＲＤＢＭＳ）などを含み得るアプリケーションプログラム１１１２、プログラムデータ１１１４およびオペレーティングシステム１１１６も示す。一例として、オペレーティングシステム１１１６は、マイクロソフトウィンドウズ（登録商標）、アップルマッキントッシュ（登録商標）および／もしくはリナックスオペレーティングシステムのさまざまなバージョン、さまざまな市販のＵＮＩＸ（登録商標）もしくはＵＮＩＸライクオペレーティングシステム（さまざまなＧＮＵ／リナックスオペレーティングシステム、Ｇｏｏｇｌｅ  Ｃｈｒｏｍｅ（登録商標）ＯＳなどを含むが、これらに限定されるものではない）、ならびに／または、ｉＯＳ、ウィンドウズ（登録商標）フォン、アンドロイド（登録商標）ＯＳ、ブラックベリー（登録商標）１１ＯＳおよびパーム（登録商標）ＯＳオペレーティングシステムなどのモバイルオペレーティングシステムを含み得る。
【０１１５】
また、記憶サブシステム１１１８は、いくつかの実施例の機能を提供する基本的なプログラミングおよびデータ構造を格納するための有形のコンピュータ読取可能な記憶媒体を提供し得る。プロセッサによって実行されたときに上記の機能を提供するソフトウェア（プログラム、コードモジュール、命令）が記憶サブシステム１１１８に格納され得る。これらのソフトウェアモジュールまたは命令は、処理ユニット１１０４によって実行され得る。また、記憶サブシステム１１１８は、本発明に従って使用されるデータを格納するためのリポジトリを提供し得る。
【０１１６】
また、記憶サブシステム１１１０は、コンピュータ読取可能な記憶媒体１１２２にさらに接続可能なコンピュータ読取可能な記憶媒体リーダ１１２０を含み得る。ともにおよび任意に、システムメモリ１１１０と組み合わせて、コンピュータ読取可能な記憶媒体１１２２は、コンピュータ読取可能な情報を一時的および／または永久に収容、格納、送信および検索するための記憶媒体に加えて、リモートの、ローカルの、固定されたおよび／または取外し可能な記憶装置を包括的に表わし得る。
【０１１７】
また、コードまたはコードの一部を含むコンピュータ読取可能な記憶媒体１１２２は、当該技術分野において公知のまたは使用される任意の適切な媒体を含み得て、当該媒体は、情報の格納および／または送信のための任意の方法または技術において実現される揮発性および不揮発性の、取外し可能および取外し不可能な媒体などであるが、これらに限定されるものではない記憶媒体および通信媒体を含む。これは、ＲＡＭ、ＲＯＭ、電子的消去・プログラム可能ＲＯＭ（electronically erasable programmable ROM：ＥＥＰＲＯＭ）、フラッシュメモリもしくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（digital versatile disk：ＤＶＤ）、または他の光学式記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置もしくは他の磁気記憶装置、または他の有形のコンピュータ読取可能な媒体などの有形のコンピュータ読取可能な記憶媒体を含み得る。また、これは、データ信号、データ送信などの無形のコンピュータ読取可能な媒体、または、所望の情報を送信するために使用可能でありかつ計算システム１１００によってアクセス可能なその他の媒体を含み得る。
【０１１８】
一例として、コンピュータ読取可能な記憶媒体１１２２は、取外し不可能な不揮発性磁気媒体から読取るまたは当該媒体に書込むハードディスクドライブ、取外し可能な不揮発性磁気ディスクから読取るまたは当該ディスクに書込む磁気ディスクドライブ、ならびに、ＣＤ  ＲＯＭ、ＤＶＤおよびブルーレイ（登録商標）ディスクまたは他の光学式媒体などの取外し可能な不揮発性光学ディスクから読取るまたは当該ディスクに書込む光学式ディスクドライブを含み得る。コンピュータ読取可能な記憶媒体１１２２は、ジップ（登録商標）ドライブ、フラッシュメモリカード、ユニバーサルシリアルバス（universal serial bus：ＵＳＢ）フラッシュドライブ、セキュアデジタル（secure digital：ＳＤ）カード、ＤＶＤディスク、デジタルビデオテープなどを含み得るが、これらに限定されるものではない。また、コンピュータ読取可能な記憶媒体１１２２は、フラッシュメモリベースのＳＳＤ、企業向けフラッシュドライブ、ソリッドステートＲＯＭなどの不揮発性メモリに基づくソリッドステートドライブ（solid-state drive：ＳＳＤ）、ソリッドステートＲＡＭ、ダイナミックＲＡＭ、スタティックＲＡＭなどの揮発性メモリに基づくＳＳＤ、ＤＲＡＭベースのＳＳＤ、磁気抵抗ＲＡＭ（magnetoresistive RAM：ＭＲＡＭ）ＳＳＤ、およびＤＲＡＭとフラッシュメモリベースのＳＳＤとの組み合わせを使用するハイブリッドＳＳＤを含み得る。ディスクドライブおよびそれらの関連のコンピュータ読取可能な媒体は、コンピュータ読取可能な命令、データ構造、プログラムモジュールおよび他のデータの不揮発性記憶装置をコンピュータシステム１１００に提供し得る。
【０１１９】
通信サブシステム１１２４は、他のコンピュータシステムおよびネットワークとのインターフェースを提供する。通信サブシステム１１２４は、他のシステムからデータを受信したり、コンピュータシステム１１００から他のシステムにデータを送信するためのインターフェースの役割を果たす。例えば、通信サブシステム１１２４は、コンピュータシステム１１００がインターネットを介して１つ以上の装置に接続することを可能にし得る。いくつかの実施例では、通信サブシステム１１２４は、（例えば３Ｇ、４ＧまたはＥＤＧＥ（enhanced data rates for global evolution）などの携帯電話技術、高度データネットワーク技術を用いて）無線音声および／またはデータネットワークにアクセスするための無線周波数（radio frequency：ＲＦ）トランシーバコンポーネント、ＷｉＦｉ（ＩＥＥＥ８０２．１１ファミリ標準または他のモバイル通信技術またはそれらの任意の組み合わせ）、全地球測位システム（global positioning system：ＧＰＳ）レシーバコンポーネント、および／または、他のコンポーネントを含み得る。いくつかの実施例では、通信サブシステム１１２４は、無線インターフェースに加えて、または無線インターフェースの代わりに、有線ネットワーク接続（例えばイーサネット）を提供し得る。
【０１２０】
また、いくつかの実施例では、通信サブシステム１１２４は、コンピュータシステム１１００を使用し得る１人以上のユーザを代表して、構造化されたおよび／または構造化されていないデータフィード１１２６、イベントストリーム１１２８、イベント更新１１３０などの形態で入力通信を受信し得る。
【０１２１】
一例として、通信サブシステム１１２４は、ツイッター（登録商標）フィード、フェースブック（登録商標）更新、リッチ・サイト・サマリ（Rich Site Summary：ＲＳＳ）フィードなどのウェブフィードなどのデータフィード１１２６をリアルタイムでソーシャルネットワークおよび／または他の通信サービスのユーザから受信し、および／または、１つ以上の第三者情報源からリアルタイム更新を受信するように構成され得る。
【０１２２】
また、通信サブシステム１１２４は、連続的なデータストリームの形態でデータを受信するように構成され得て、当該データは、連続的である場合もあれば本質的に明確な端部を持たない状態で境界がない場合もあるリアルタイムイベントのイベントストリーム１１２８および／またはイベント更新１１３０を含み得る。連続的なデータを生成するアプリケーションの例としては、例えばセンサデータアプリケーション、金融ティッカ、ネットワーク性能測定ツール（例えばネットワークモニタリングおよびトラフィック管理アプリケーション）、クリックストリーム分析ツール、自動車交通モニタリングなどを含み得る。また、通信サブシステム１１２４は、構造化されたおよび／または構造化されていないデータフィード１１２６、イベントストリーム１１２８、イベント更新１１３０などを、コンピュータシステム１１００に結合された１つ以上のストリーミングデータソースコンピュータと通信し得る１つ以上のデータベースに出力するように構成され得る。
【０１２３】
コンピュータシステム１１００は、手持ち式携帯機器（例えばｉＰｈｏｎｅ（登録商標）携帯電話、ｉＰａｄ（登録商標）計算タブレット、ＰＤＡ）、ウェアラブル装置（例えばグーグルグラス（登録商標）ヘッドマウントディスプレイ）、ＰＣ、ワークステーション、メインフレーム、キオスク、サーバラックまたはその他のデータ処理システムを含むさまざまなタイプのうちの１つであってもよい。
【０１２４】
コンピュータおよびネットワークの絶え間なく変化し続ける性質のために、図に示されているコンピュータシステム１１００の説明は、特定の例として意図されているにすぎない。図に示されているシステムよりも多くのまたは少ない数の構成要素を有する多くの他の構成が可能である。例えば、ハードウェア、ファームウェア、（アプレットを含む）ソフトウェア、または組み合わせにおいて、カスタマイズされたハードウェアも使用されてもよく、および／または、特定の要素が実装されてもよい。さらに、ネットワーク入力／出力装置などの他の計算装置への接続が利用されてもよい。本明細書で提供される開示および教示に基づいて、当業者は、さまざまな実施例を実現するための他の手段および／または方法を理解するであろう。上記の明細書では、本発明の局面は、その具体的な実施例を参照して記載されているが、本発明はこれに限定されるものではないことを当業者は認識するであろう。上記の発明のさまざまな特徴および局面は、個々にまたは一緒に使用されてもよい。さらに、実施例は、明細書のより広い精神および範囲から逸脱することなく、本明細書に記載されているものを越えたどのような環境およびアプリケーションでも利用可能である。したがって、明細書および図面は、限定的ではなく例示的であるものとみなされるべきである。
【図１】
0006509204.tif 000002
【図２】
0006509204.tif 000003
【図３】
0006509204.tif 000004
【図４】
0006509204.tif 000005
【図５】
0006509204.tif 000006
【図６Ａ】
0006509204.tif 000007
【図６Ｂ】
0006509204.tif 000008
【図７】
0006509204.tif 000009
【図８】
0006509204.tif 000010
【図９】
0006509204.tif 000011
【図１０】
0006509204.tif 000012
【図１１】
0006509204.tif 000013