【実施例】
【0041】
図1に、例えば
図2を参照しながら説明するデータベース10の動的シャーディングを行うコンピュータされた実装方法を実装するのに適したシステムを示す。データベース10は、順序付けられた大域的範囲14に含まれるキー12により識別可能なデータ11を含んでいる。データベースは、例えば(特許文献6)または(特許文献7)により公知の大規模分散オブジェクトストレージシステムのメタデータを格納している適切なキー値ストアであってよく、データオブジェクトの全てのキー12に対して、例えば冗長に符号化されたサブブロックがデータオブジェクトの検索に利用可能なストレージノードに関するデータ11が格納されている。このような大規模分散オブジェクトストレージシステムは、既存の境界を越えて成長するため、当該システムの性能および堅牢性を向上させるニーズが増している。そのようなデータベースを格納するために例えばフラッシュストレージデバイスを含む大容量の専用且つ高性能なストレージデバイスを用いたとしても、分散オブジェクトストレージシステムが成長した場合、そのメタデータのキー値ストアも成長し、最終的にはこれらのストレージデバイスの記憶容量限度に達し、待ち時間、スループット、信頼性、粒度等の観点から可能な限り性能を保持する仕方でメタデータを複数のそのようなストレージシステムに跨って分散させることが必要になる。待ち時間とは、メタデータストアに格納された特定のデータへのアクセスに要する時間であり、典型的にはミリ秒で表される。スループットとは、メタデータストアとの間でのデータの読み出しまたは書き込み可能な速度であり、通常は1秒当たりの入力/出力動作の回数すなわちIOPS、および/またはメガバイト/秒すなわちMB/sで表される。粒度とは、追加的な待ち時間が一切生じない単一ユニットとして効率的にアクセス可能なデータの最も大きい集合体のサイズを指す。また信頼性とは、1個以上の記憶またはネットワーク要素が一時的に利用不可能である等、分散ストレージシステムで一般的な障害に対処する能力を指す。キー値ストアが一般に高性能データベース構造をなしているが、データベースに対して代替的な実施形態、例えばカラム、グラフ、ドキュメント等に基づくデータ構造等、他のNoSQL機構、あるいは例えばテーブルに基づくデータ構造も可能であることは明らかである。また、以下で詳述するデータベース10の動的シャーディングが大規模分散オブジェクトストレージシステム用のメタデータストア環境において有利であるが、他の適当な有利なデータベースアプリケーションであっても、特に例えばインターネット検索サービス索引等、堅牢且つ高性能な大規模分散データベースを必要とする環境で本方法の恩恵を得られことは明らかである。
【0042】
しかし、本方法は、メタデータストアによりコントローラノードが、どのストレージ要素で特定のデータオブジェクトの冗長に符号化されたサブブロックを効率的に検索できるかを判定できるようにする、例えば(特許文献6)または(特許文献7)に開示された消去符号化に基づく分散オブジェクトストレージシステムのメタデータストアに特別に有利である。これらの文献に記述されている消去符号化分散オブジェクトストレージシステムによれば、クラスタリングモジュールが、コントローラノードに集中して存在するメタデータストレージから、特定のデータオブジェクトのサブブロックがどの特定のストレージ要素に格納されているかを効率的に確認することができる。また当該システムでは、どの符号化ポリシが用いられたかを復号化モジュールが効率的に確認することができる。更に、このようなメタデータストレージではまた、データオブジェクト毎に符号化ポリシを柔軟に決定することができ、これは分散オブジェクトストレージシステムに格納された全てのデータオブジェクトについて冗長ポリシを固定する必要が無く、各々の特定のデータオブジェクトに毎に個々に設定できることを意味する。メタデータストレージのまた更なる実施形態によれば、データオブジェクトに対して格納されたメタデータがデータオブジェクトの特性、例えばバージョン情報またはデータオブジェクトの状態を含む他の適切なエントリを含んでいてもよいことは明らかである。このようなシステムにおいて、コントローラノードは複数のストレージノードを管理することができ、これらのストレージノードは例えば、低速プロセッサを含み10または12個の3TB SATAディスクドライヴを備えた1Uラックマウントサーバ筐体内で36TBの記憶容量を実現している。コントローラノードは例えば、バックエンドストレージノードへの高速接続を可能にする10Gbのイーサネットネットワークインターフェース(イーサネット:登録商標)を備えている。典型的には複数のストレージノード、例えば10個以上のストレージノードを含む1個のラックにつき1個のコントローラノードが配置されている。これらのラックのいくつかのコントローラノードは次いで、コントローラノードの利用可能性が高いクラスタに組み込むことによりストレージノードへの完全に共有されたアクセスを許すと共に、例えば複数、例えば3個の異なるSSDに跨る複製により適当なレベルの冗長性を有する高性能ソリッドステートドライブすなわちSSDにおいて分散メタデータストレージへのアクセスを許すことにより、例えば(特許文献3)により公知のものと同様の多数決投票システムが可能になる。これにより、数百テラバイトからゼタバイトにわたるスケーラブルな記憶容量に大域的オブジェクト名前空間容量を提供する、複数ラックに跨る単一システムのスケーラビリティを実現することができる。いくつかの実施形態によれば、分散メタデータストレージをコントローラノード自身により、あるいは例えば、複数の当該コントローラノードにより共有的に利用可能な複数のスケーラの形式で実装できることは明らかである。一般に、例えば分散メタデータストレージ等、上述のような分散データベースは、例えばメタデータストレージを分散して格納する上述の分散オブジェクトストレージシステムのコントローラノード用の複数のスケーラ等の複数のシャードストア20に存在する。
【0043】
図示するように、キー12の順序付けられた大域的範囲14をアルファベットの範囲[a,z]として模式的に示し、
図1の実施形態のように、本実施形態の記述を簡潔にすべく、アルファベット一文字のデータオブジェクト識別子により特に簡単な表現形式でキーに言及する。しかし、代替的な、より現実的な実施形態によれば、キー12の順序付けられた大域的範囲14が適当な英数字範囲、例えば多文字英数字データオブジェクト識別子の形式のキーの場合は[a,z[を含んでいてよいことは明らかであり、キー12の順序付けられた大域的範囲14は、アルファベット順に順序付けることができ、標準的なリクエストにおいて、例えばクラウドストレージサービスのユーザーにより選択されたコンテナに格納されたアルファベット順の最初の50個のデータオブジェクトへのリンクを含むウェブページを表すようなアルファベット順に順序付けられたデータオブジェクトの部分集合の検索に用いられる場合が多い。しかし、データベースの全てのキーを含むのに適した他の任意の適当に順序付けられた閉または開端範囲も可能であることは明らかである。多文字英数字キーの場合、範囲を例えば、空文字列から始まって正無限大まで開端である右側開端範囲を意味する[“、+inf[のように表すことができ、これは実際にはデータベースシステムの環境内で実現可能なキー12の最大値を意味する。例えば対応する順序付けアルゴリズムにより所定の順序付け関係をキーに持たせることが可能な限り、大域的範囲は、例えば自身の最小および/または最大許容可能キー値により画定することができ、または当該範囲の一方または両側が開端である場合(データベースにより頻繁におよび/または最小の待ち時間で実行する必要がある標準的なリクエストにおいてキーが提示される仕方に好適に対応する)は単にデータベースのキー同士の順序付けられた関係を確立する所定のアルゴリズムにより画定することができる。これは従って、キーが、完全な順序関係が定義された集合の要素であることを意味する。他の適当な実施形態は例えば、英数字範囲、例えば10進範囲、16進範囲、2進範囲等の数値範囲、適当な順序付けアルゴリズムが定義可能である限り、そのような範囲の任意の適当な組合せをも含んでいてよい。
【0044】
図1に示すように、これらの複数のシャードストア20が提供される。各々のシャードストアはシャードストア識別子22を含んでいる。図示するように、第1のシャードストア20はシャードストア識別子20.1を含み、第2のシャードストア20はシャードストア識別子20.2を含んでいる。これらのシャードストア20は、1個以上の適当な高性能ストレージデバイス、例えばSSDまたは他の任意の適当な形式または組合せのストレージデバイス格納された適当なデータ構造、多くの場合はデータベース構造へのアクセスを行うコンピュータ装置である。一般に、シャードストア20の各々が、例えば格納されたデータの量がコンピュータ装置に存在する全てのストレージデバイス例えば上述のようにコントローラノードまたはスケーラで利用できる全てのSSDの最大容量に達した場合に到達される記憶容量制限により制限されていることは明らかである。しかし、記憶容量がそのような複数のコンピュータ装置で共有されてスケーリングされている実施形態においても、同様に結局は記憶容量制限に達してそのような共有アクセスに関する性能低下がもはや受容不可能になる。好適には、シャードストアは、局所的で高スループットのデータバスを介して自身のストレージデバイスへの高性能で低レベルのアクセスを許し、1秒当たり最大レベルお入出力動作を可能にする。
【0045】
図1に更に示すように、複数のシャード30が提供される。各シャード30は、局所的部分範囲40内の少なくとも1個のキー12が指すデータ11を求めるリクエスト13を扱う。これは、各シャード30が、キー12が局所的部分範囲40にあるデータベース10のデータ11の部分集合の読み出しおよび格納リクエストを扱うことを意味する。同図示するように、シャードストア識別子20.1が付されたシャードストア20に格納されたシャード30の局所的部分範囲40を[a,d)と表現する。当該局所的部分範囲40は従って、aから始まりzまで含む全てのアルファベット順に順序付けられたキーを含む大域的範囲14[a,z]のaから始まりdを除く全てのアルファベット順に順序付けられたキーを含む順序付けられた部分範囲を含んでいる。シャードストア識別子20.2が付されたシャードストア20に格納されたシャード30の局所的部分範囲40を[d,g)および[i,n)と表現する。この局所的部分範囲40は従って、各々dから始まってgを除く、且つ各々aから始まってzを除く全てのアルファベット順に順序付けられたキーを含む順序付けられた大域的範囲14[a,z]のiから始まってnを除く全てのアルファベット順に順序付けられたキーを含む順序付けられた部分範囲を含んでいる。シャード30の局所的部分範囲同士の共通部分がないこと、およびシャード30の全ての局所的部分範囲が隣接していることは明らかであって、データベース10に格納されている全てのキー12を特定のシャード30の局所的部分範囲40に割り当てることができることを意味する。これは従って、簡潔のため
図1には示していないが、他のシャード30が、識別子20.1および20.2が付されたシャードストア20のシャード30に覆われていない順序付けられた大域的範囲14の全ての部分範囲を覆う局所的部分範囲を含んでいる筈であることを意味する。図示するように、シャードストア20のシャード30は、単一のシャード30が単一のシャードストア20を越えて延在しないように提供される。これは一般に、大多数のシャード20がこれら1個以上のシャード30を格納するが、いくつかのシャードストア20がシャード30を含まない可能性もある。これは例えば、現時点では記憶容量が未だ使用されていないシステムで1個以上のシャードストア20が利用できる場合、または代替的に1個以上のシャードストア20が依然としてシステムで利用できるが、近い将来システムから切り離される定になっている場合である。
【0046】
図1に示すように、各々のシャードストア20は局所的部分範囲集合42を含んでいる。当該局所的部分範囲集合42は、自身の対応するシャードストア20に格納されたシャード30の1個以上の局所的部分範囲40を含んでいる。図示するように、シャードストア識別子20.1が付されたシャードストア20の局所的部分範囲集合42は従って、自身の単一シャード30の局所的部分範囲40[a,d)を含んでいる。シャードストア識別子20.2が付されたシャードストア20の局所的部分範囲集合42は、自身の両方のシャード30の両方の局所的部分範囲40[d,f)および[I,n)を含んでいる。図示する例が例示目的に過ぎず、任意の適当な個数のシャード30を含む任意の適当な個数のシャードストア20が用意されていてよく、従って対応する局所的部分範囲集合42が、自身に格納された適当な個数の局所的部分範囲40を含んでいてよいことは明らかである。同図に示すように、各々のシャード30は、例えばアルファベットのデータオブジェクト識別子であるキー12、および例えば当該データオブジェクトの冗長に符号化されたサブブロックが格納された分散ストレージデバイスのストレージノードのストレージノード識別子のリストを渡す当該データオブジェクトに関するメタデータである相関付けられたデータ11を含むキー値ストアまたは別の適当なデータベース構造を含んでいる。これにより、シャードストア20.1に格納されたシャード30は従って、例えばa、c等、自身の局所的部分範囲40[a,d)内のキー12を含むデータベース10の部分集合を含んでいる。好適には、キー12およびそれらと相関付けられたデータ11の当該部分集合は、順序付けられたリスト、シーケンス、1個のノードが2個以上の子ノードを有することができる二分探索木の一般化である例えばB木等の木データ構造、またはクライアントアプリケーション1からのリクエスト13に応答して連続的なキー12およびそれらの対応するデータ11をシャード30から適当に選択する他の適当な構造の形式で、これらのシャード30に格納されるかまたはそこから効率的に検索することができる。
【0047】
図1に示すように、全てのシャードストア30は、好適にはデータセンターで利用可能な高速ネットワークである適当なネットワーク3に接続可能である。しかし、データベースが複数の地理的に分散したデータセンターに跨って分散している場合があるため、当該ネットワーク3もまた、これらの異なるデータセンター間の外部ネットワークリンク、例えば適当なインターネット接続を含んでいてよい。更に詳細に図示するように、クライアントアプリケーション1は、例えばクラウドストレージシステムのウェブベースのユーザーインターフェースにアクセスしているユーザーの適当なAPIインターフェースまたはブラウザであって、同様に例えばインターネット接続等の適当なネットワーク接続2により、当該ネットワーク3に接続されている。当該クライアントアプリケーション1が、一般に1個以上のキー12が指すデータ11の分散データベースにリクエストを発行する必要がある機能性を提供する限り任意の適当なアプリケーションまたはシステムの任意の適当なレベルのモジュールであってよいことは明らかである。
【0048】
図1に示すように、そのようなリクエスト13‘get(‘f’)’が、例えばキー‘f’のデータ11の検索リクエストを含んでいるが、他の適当なリクエスト、例えばデータベース10の1個以上のキー12が指すデータ11を作成、更新、削除、一覧表示する等のリクエストが発行されてもよいことは明らかである。図示するように、キー‘f’のデータ11の当該検索リクエスト13は、クライアントアプリケーション1によりシャードストア20.1に渡される。
図3を参照しながら以下により詳細に述べるように、クライアントアプリケーション1は、どのシャードストアにリクエストを送信するかを選択するのに適したルータを用いてもよいが、動的にスケーラブルである大規模分散データベースでは、そのようなシステムは既に陳腐化している恐れがあり、当該システムの信頼性が高い大域的状態を評価することに伴う待ち時間はもはや受容できないであろう。従って、
図1の特に簡単な実施形態によれば、単にリクエスト13を利用可能なシャードストア20の1個に対して発行するだけで、クライアントアプリケーション1が利用できるシャードストア30に関する局所的状態情報が存在しない時点でリクエストを開始することさえできる。
図1に示すように、検索リクエスト13を受信している当該所定シャードストア20はシャードストア識別子22として20.1を含み、これは
図2に示す方法のステップ102に対応する。次いでステップ104において、当該所定シャードストア20.1は、自身の局所的部分範囲集合42により、当該少なくとも1個のキー12が、当該所定シャードストア20.1に格納されたシャード30の局所的部分範囲40に存在するか否かを検証することになる。
図1に示すように、局所的部分範囲集合42は、リクエスト13のキーの‘f’を含まない1個の局所的部分範囲40[a,d)だけを含んでいる。これは従って、リクエスト13が、当該所定シャードストア20.1に格納されたシャード30の局所的部分範囲40に存在しない少なくとも1個のキー12に関係するため、
図2の方法がステップ108へ進むことを意味する。ステップ108において、シャードストア20.1は、当該所定シャードストア20.1の局所的部分範囲集合42を含むメッセージ60を返送する。本実施形態において、クライアントアプリケーション1は次いで、シャードストア20.1が、自身の局所的部分範囲集合内で定義された局所的部分範囲40[a,d)のキー12が指すデータ11を有するシャード30だけを含んでいるという事実を認識させられる。以下でより詳細に述べるように、メッセージ60および/または局所的部分範囲集合42が、局所的部分範囲40以外に追加的な情報を含んでいてよいことは明らかである。メッセージ60は、例えば“20.1[a:20.1:d:...:z]”のように表現できるため、“20.1:”はメッセージ60を送信するシャードストアのシャードストア識別子22を示し、“[a:20.1:d”は局所的部分範囲40[a,d)を示し、“:...:z]”は、シャードストア20.1が自身の局所的部分範囲集合42に利用可能な情報を有していない順序付けられた大域的範囲14の一部を示す。
図2により詳細に示すように、本実施形態によれば、ステップ110において、リクエスト13は次いで別のシャードストア20、例えばシャードストア20.2に渡されてよい。
図1に示すように、メッセージ60が渡され、従ってこれに応答してリクエスト13を別のシャードストアに対して発行する可能性が最も高いのはクライアントアプリケーション1であるが、代替的な実施形態によれば、以前にリクエストを受信した他の構成要素またはモジュールあるいはシャードストアもまた、別のシャードストア20に対するリクエスト13の発信者になり得ることは明らかであり、また以下でより詳細に述べるように、メッセージ60を例えば1個以上の他のシャードストア20、ルータ等、クライアントアプリケーション1以外のエンティティまたはモジュールへ送信できることも明らかである。
【0049】
図2のステップ110でシャードストア20.2にキー‘f’に対する検索リクエスト13が渡された場合、再びステップ104へ進み、自身の局所的部分範囲集合42により、当該キー12が当該所定シャードストア20.2に格納されたシャード30の局所的部分範囲40に存在するか否かを検証する。
図1に示すように、局所的部分範囲集合42は、2個の局所的部分範囲40[d,g)および[i,n)を含み、そのうち1個[d,g)が検索リクエスト13のキー‘f’を含んでいる。これは従って、
図2の方法がステップ106へ進んでシャードストア20.2が、例えば局所的部分範囲[d,g)のシャード30のシャードストア20.2に格納されたキー‘f’に関するデータ11を渡すことにより、リクエスト13を実行して、例えばクライアントアプリケーション1に、あるいは他の任意の適当なエンティティまたはモジュールに対して、例えばキー‘g’の形式のデータオブジェクト識別子により識別されるデータオブジェクトの冗長に符号化された分割ブロックを検索すべくストレージノードの識別子を渡すことを意味する。
【0050】
図3に、
図1と同様であるが追加的にシャードルータを含む実施形態を模式的に示し、
図4に、
図3の実施形態を動作させる方法の一実施形態を模式的に示す。例えばデータベース10、シャード30、シャードストア20等に関係する同様の要素は同一の参照符号で示しており、
図1に関して上で述べた詳細な説明は
図4の動作方法の説明に必要な程度だけ詳細に繰り返す。
図3に示すように、同一の例示的データベース10に、aから始まってzを含む全てのアルファベット順に順序付けられたキーを含む順序付けられた大域的範囲14[a,z]が用意されていて、同一のシャードストア20が、キー12が
図1と同一の各局所的部分範囲40に存在するデータベース10のデータ11の部分集合を求める読み出しおよび格納リクエストを扱う同一のシャード30を格納している。従って、これらのシャードストア20が
図1に関して上で述べたものと同一の局所的部分範囲集合42を含んでいることは明らかである。しかし、ここではクライアントアプリケーション1は、例えばインターネット等の適当なネットワーク接続2によりシャードルータ50に接続されている。当該シャードルータ50は、適当なネットワーク接続3によりシャードストア20に接続可能であり、例えば分散オブジェクトストアのメタデータを分散的に格納する上述の分散オブジェクトストレージデバイスの複数のコントローラノード用の1個以上のスケーラで動作する適当なモジュールとして実装することができる。示すように、ここではシャードルータ50が、
図1に関して上で述べたように検索リクエスト‘get(‘f)’の形式でクライアントアプリケーション1により発行された少なくとも1個のキー12が指すデータ11を求めるリクエスト13を扱う。示すように、当該リクエスト13は、クライアントアプリケーション1によりシャードルータ50に渡されるが、一般に他の任意の適当なアプリケーションまたはモジュールでも可能であることは明らかである。
【0051】
図3に示すように、シャードルータ50には大域的部分範囲集合52が提供される。‘a:20.1:g:...:i:20.2:n:...:z’と表現された当該大域的部分範囲集合52は、順序付けられた大域的範囲14の大域的部分範囲54をシャードストア識別子22と相関付ける。これにより、局所的部分範囲集合に関して上述したのと同様に、この表現は、順序付けられた大域的範囲14‘[a,z]’の大域的部分範囲54‘[a,g)’とシャードストア識別子22‘20.1’との間の相互関係を示す。これは同様に、順序付けられた大域的範囲14‘[a,z]’の大域的部分範囲54‘[i,m)’とシャードストア識別子22‘20.2’ との間の相互関係を示す。‘g:...:n’は、大域的部分範囲54についてシャードルータ50が利用できる情報が存在しないことを示す。当該大域的部分範囲54は例えば、シャードルータ50に格納されたまたはシャードルータ50に渡された以前の情報の結果であってよいが、以下により詳細に述べるように、
図3に模式的に示すように、システムの状態に関して現時点では陳腐化している。キー‘f’のデータ11を求めるクライアントアプリケーション1からのリクエスト13‘get(‘f’)’が
図4のステップ202でシャードルータ50に渡されるため、シャードルータ50は、
図4のステップ204に対応して、当該キー12‘f’を含む大域的部分範囲54と相関付けられたシャードストア識別子22を決定する。
図3に示すケースでは、これは従って、大域的部分範囲54[a,g)が表現‘[a:20.1:g’から導かれるシャードストア識別子20.1と相関付けられていて、シャードルータ50が、当該リクエスト13‘20.1:get(‘f’)’を当該相関付けられたシャードストア識別子20.1の当該所定シャードストア20に提供することを意味する。当該所定シャードストア20.1は次いでステップ206において、自身の局所的部分範囲集合42により、当該キー12‘f’が当該所定シャードストア20に格納されたシャード30の局所的部分範囲40に存在する否かを検証する。キー‘f’が当該所定シャードストア20.1の局所的部分範囲集合42の唯一の局所的部分範囲40[a,d)に存在しないため、本方法はステップ210へ進んで所定シャードストア20.1が、自身の局所的部分範囲集合42を含むメッセージ60をシャードルータ50に返送する。例えば以下により詳細に述べるように、メッセージ60および/または局所的部分範囲集合42は、局所的部分範囲40以外に追加的に情報を含んでいてよい。ステップ212において、シャードルータ50は次いで、所定シャードストア20のシャードストア識別子22を、当該メッセージ60の局所的部分範囲集合42の局所的部分範囲40に対応する大域的部分範囲54と相関付けることにより、当該メッセージ60に基づいて自身の大域的部分範囲集合52を更新する。図示するように、例えば‘[a20.1:d:...:z]’と表現できるシャードストア20.1の局所的部分範囲集合42から、シャードルータ50の大域的部分範囲集合52の陳腐化した情報に以前提供されていたようにシャードストア20.1が部分範囲[d:g)のシャード30を含んでいないことが明らかなため、
図3における大域的部分範囲集合52は次いで‘[a:20.1:g:...:i:20.2:n:...:z]’から‘[a:20.1:d:...:g:...:i:20.2:n:...:z]’に変更される。
【0052】
図4に更に示すように、本実施形態によれば、ステップ214において、リクエスト13は次いで別のシャードストア20、例えばシャードストア20.2に渡されてよい。
図3に示すように、メッセージ60が渡され、従ってこれに応答してクエスト13を別のシャードストア20に対して発行する可能性が最も高いのはシャードルータ50であるが、代替的な実施形態によれば、シャードルータ50から以前にリクエスト13を受信した他の構成要素またはモジュールあるいはシャードストア20.1もまた、別のシャードストア20に対するリクエスト13の発信者になり得ることは明らかであり、また、メッセージ60を、例えば1個以上の他のシャードストア20、クライアントアプリケーション1等、シャードルータ50以外のエンティティまたはモジュールへ送信できることも明らかである。
【0053】
図4のステップ214でシャードストア20.2にキー‘f’に対する検索リクエスト13が渡された場合、再びステップ206へ進み、自身の局所的部分範囲集合42により、当該キー12が当該所定シャードストア20.2に格納されたシャード30の局所的部分範囲40に存在するか否かを検証する。
図3に示すように、局所的部分範囲集合42は、2個の局所的部分範囲40[d,g)および[i,n)を含み、そのうち1個すなわち[d,g)が検索リクエスト13のキー‘f’を含んでいる。これは従って、
図4の方法がステップ208へ進んでシャードストア20.2が、例えば局所的部分範囲[d,g)のシャード30のシャードストア20.2に格納されたキー‘f’に関するデータ11を渡すことにより、リクエスト13を実行して、例えばシャードルータ50またはクライアントアプリケーション1に、あるいは他の任意の適当なエンティティまたはモジュールに対して、例えばキー‘g’の形式でデータオブジェクト識別子により識別されるデータオブジェクトの冗長に符号化された分割ブロックを検索すべくストレージノードの識別子を渡すことを意味する。任意選択により、
図4により詳細に示すように、身の局所的部分範囲集合42にキーを含んでいるシャードストア20.2について、上で述べたステップ210および212と同様のステップ216および218を実行することもできる。これは、この場合も、ステップ216において、シャードストア20.2が、自身の局所的部分範囲集合42を含むメッセージ60をシャードルータ50に返送することを意味する。ステップ218において、シャードルータ50は次いで、当該メッセージ60に基づいて所定シャードストア20のシャードストア識別子22を、当該メッセージ60の局所的部分範囲集合42の局所的部分範囲40に対応する大域的部分範囲54と相関付けることにより、自身の大域的部分範囲集合52を更新する。上述のように以前に‘[a:20.1:d:...:g:...i:20.2:n:...:z]’に変更されたグローバルな部分範囲集合52は従って、例えば‘[a:...:d:20.2:g:...:i:20.2:n...:z]’と表現されたシャードストア20.2の局所的部分範囲集合42から、シャードストア20.2が、シャードルータ50の大域的部分範囲集合52で利用できる最新の情報が存在しない部分範囲[d:g)に対するシャード30を含んでいることが明らかであるため、‘[a:20.1:d:20.2:g:...:i:20.2:n:...:z]’に更に変更される。
【0054】
一般に、所定シャードストア20の局所的部分範囲集合42を含むメッセージ60に応答してシャードルータ50の大域的部分範囲集合52を更新する処理は、
−大域的部分範囲集合52から、メッセージ60の局所的部分範囲40として局所的部分範囲集合42に存在しない当該所定シャードストア20のシャードストア識別子22と相関付けられた大域的部分範囲54があればこれを除去するステップと、
−大域的部分範囲集合52に、メッセージ60の局所的部分範囲集合42の局所的部分範囲40を、当該所定シャードストア20のシャードストア識別子22と相関付けられた大域的部分範囲54として追加するステップとを含んでいる。特定の実施形態によれば、このような除去および追加を、例えば既存の大域的部分範囲54がメッセージの受信された局所的部分範囲40と重なる場合にこれらを更新する1個の更新動作として組み合わせ可能であること、またはこのような除去および追加を、例えば受信された局所的部分範囲と同一であることが検知された大域的部分範囲54について既存の大域的部分範囲54を修正しない動作として実行可能であること、あるいはこのような除去および追加を、メッセージ60の局所的部分範囲集合42に関して必要な場合に大域的部分範囲集合52を効率的に更新する他の任意の適当な動作として実装可能であることは明らかである。
【0055】
図5に、移動動作80の模式的表現を示す。データベース10の左側の表現は移動動作80を行う前の自身の状態を示し、右側は同一データベース10の移動動作80の後の状態を示す。
図5に示すように、移動動作80の実行中に、シャードストア20.1に部分範囲[a,g)を有するシャード30の順序付けられた部分集合が移動させられる。移動シャード72と称される当該順序付けられた部分集合はまたフリンジ72とも称され、所定シャードストア20.1から別のシャードストア20.2への移動部分範囲70またはフリンジ部分範囲70と称される部分範囲[d,g)内の全てのキー12が指すデータ11を含んでいる。当該移動動作80は例えば、各々のシャード30が自身の部分範囲40内のキーが指すデータ11を受信する際に動的に成長するにつれて、異なるシャードストア20の中の記憶容量をリバランシングすべく実行可能である。しかし
図5に示すように、当該移動動作は、移動部分範囲70および対応する移動シャード72が、シャードに格納されたシャード30の順序付けられた部分集合はストア20である状況を想定しており、あるシャードストアの全てのシャード30を別のシャードストアへ移動させることも可能であるため、移動シャード72は当該シャード30と同一であり、且つ移動部分範囲70は当該シャード30の部分範囲40と同一である。
図5に示すように、移動動作を行う前は、所定シャードストア20.1の局所的部分範囲集合42は局所的部分範囲40[a,g)を含み、別のシャードのストア20.2の局所的部分範囲集合42は局所的部分範囲40[i,n)を含んでいる。更に図示するように、移動動作80の後で、移動部分範囲70[d,g)はもはや、所定シャードストア20.1の局所的部分範囲集合42からの局所的部分範囲40としては存在しない。局所的部分範囲集合42は現時点で局所的部分範囲40[a,d)を含んでいる。以下により詳細に述べように、移動部分範囲70[d,g)は現時点で、所定シャードストア20.1の局所的部分範囲集合42に含まれる外部部分範囲集合46に追加されている外部部分範囲44[d,g)として追加されている。同図に示すように、外部部分範囲44[d,g)は、移動シャード72の移動先である別のシャードストア20.2のシャードストア識別子22‘20.2’と相関付けられている。また、移動部分範囲70[d,g)を有する移動シャード72の所定シャードストア20.1から別のシャードストア20.2への移動動作80の結果、移動部分範囲70[d,g)が局所的部分範囲40として別のシャードストア20の局所的部分範囲集合42に追加される。移動動作80の実行中、移動動作80に関与する所定シャードストア20および別のシャードストア20の局所的部分範囲集合42だけが移動部分範囲70に基づいて更新される。これは特に、移動動作に関与するシャードストアだけが、同期化メッセージが増大し応答性および利用可能性が低下する他のシャードストアまたは中央管理サービスとの更なる同期化を必要とせずに自身の局所的状態を更新するため、例えば利用可能なシャードストア間でより記憶容量を効率的に再分散すべく移動動作の自動実行を生起させる動的シャーディングが可能な大規模分散データベースシステムの環境において有益である。上述の方法によれば、リクエストを扱い続けるには移動動作に関与するシャードストアの局所的部分範囲だけを更新すれば充分であることが明らかである。陳腐化した情報があれば、当該リクエストと関連性があるシャードストアの局所的部分範囲集合の局所的部分範囲と同期化される。従って、同期化オーバーヘッドが抑制され、実際のリクエストを扱うために必要なものに最適化される一方、例えば上述の移動動作のように、受容できない待ち時間が生じることなくシステムの最新の大域的状態を得るのが困難な大規模分散データベース環境においても、任意の分散リバランシング動作を扱うのに充分堅牢である。
【0056】
図5に示すように、所定シャードストア20.1の局所的部分範囲集合42は、移動動作の後の状態において、外部部分範囲集合46を更に含んでいる。当該外部部分範囲集合46は、自身の各シャードストア識別子22“20.2”と相関付けられた他のシャードストア20.2に格納されたシャード30の外部部分範囲44“[d,g)”を含んでいる。外部部分範囲集合46が1個のシャードストア識別子22だけと相関付けられた1個の外部部分範囲44だけを含むものとして図示しているが、代替的な実施形態によれば、外部部分範囲集合46が、例えば複数の以前の移動動作の結果として、または他のシャードストア20のシャード30または局所的部分範囲40に関する情報を所定シャードストア20.1が収集することができた他の任意の適当な仕方で収集された任意の適当な個数の対応するシャードストア識別子22と相関付けられた任意の適当な個数の外部部分範囲44を含んでいてよいことは明らかである。当該外部部分範囲集合46は従って、シャードストア20の局所的部分範囲集合の局所的部分範囲40にもはや存在しないキーを求めるリクエスト13がシャードストア20へ送信された場合に、別のシャードストア20への効率的なルーティングを可能にする。そのような最適化された方法の一例を
図6に示すが、これは追加ステップ220、222を除いて
図4に示すものと同様である。既に上で説明したステップは同一参照番号で識別され、これらの追加ステップに関して必要な場合に限り繰り返し説明する。
図6に示すように、
図5のシャードストア20.1の移動動作後の状態において、シャードストア20が、自身が格納するシャードの局所的部分範囲40のいずれにも存在しないキー12を求めるリクエスト、例えば局所的部分範囲集合の局所的部分範囲40[a,d)に存在しないキー‘f’を求めるリクエストを扱う場合、本方法はステップ202、204および206からステップ210へ進み、上述のようにシャードストア20.1が局所的部分範囲集合42を含むメッセージ60を返送する。ここで当該局所的部分範囲集合42が外部部分範囲44‘[d,g)’を有する外部部分範囲集合46を含んでいることは明らかである。新たなステップ220において、例えばシャードルータ50は、リクエスト13のキー12が当該局所的部分範囲集合42の外部部分範囲集合46の所定の外部部分範囲44に含まれているか否かを検証する。これは、キー‘f’を求めるリクエストのケースではキー‘f’が外部部分範囲44‘[d,g)’に存在するため成立する。外部部分範囲44は、
図5に示すようと相関付けられたシャードストア識別子22として“20.2”を有している。ステップ222において、当該シャードストア識別子‘20.2’を用いて、ステップ214で続いてリクエスト13を渡すのに用いる別のシャードストア20を選択する。
【0057】
この状況において任意選択により、リクエストのキー12が当該所定シャードストア20の局所的部分範囲40に存在しない場合、シャードルータ50が、自身の大域的部分範囲集合52を更新すべくメッセージ60の局所的部分範囲集合42の局所的部分範囲40を用いることに加え、別のシャードストア20のシャードストア識別子22をメッセージ60の外部部分範囲集合46の所定の外部部分範囲44に対応する大域的部分範囲54と相関付けることにより、自身の大域的部分範囲集合52をも更に更新することは有益であろう。この場合、
図3で説明したものと同じ例を参照するに、これは、ステップ212において外部部分範囲44‘[d:20.2:g’も考慮に入れられるため、大域的部分範囲集合52もまた’[a:20.1:g:...:i:20.2:n:...:z]’から‘[a:20.1:d:20.2:g:...:i:20.2:n:...:z]’に更新されることを意味する。このような更新は後述するように堅牢な仕方で実行することができる。その理由は、リクエストが当該別のシャードストア20.2へルーティングされたときに、当該リクエストが自身の局所的部分範囲集合に関して検証され、当該リクエストが正しくないかまたは陳腐化している場合、大域的部分範囲集合の更なる更新がなされるためである。しかし、当該リクエストが正しければ、シャードルータ50に到達しているシャードストア20.1の当該外部部分範囲44のキーに対する全てのリクエストは既により最適に別のシャードストア20.2へルーティングされているであろう。上で述べたのと同様に、局所的部分範囲集合42の
図5の表現は模式的に過ぎず、任意の適当な表を用いてよい。移動動作の後の20.1の局所的部分範囲集合は例えば、大域的部分範囲集合について上で述べたのと同様に‘[a:20.1:d:20.2:g:...:z]’と表現することができ、ここに‘[a:20.1:d’は所定シャードストア20.1のシャードストア識別子を含むため局所的部分範囲[a,d)を表し、‘[d:20.2:g’は別のシャードストア20.2のシャードストア識別子と相関付けられた外部部分範囲[d,g)を表し、‘[g:...:n’は、順序付けられた大域的範囲の当該部分範囲のシャードストア20.1で利用できる情報が存在しないことを示す。
【0058】
特に所定シャードストア20.1および別のシャードストア20.2が例えば
図5に関して上で述べた移動動作80に関与する状況で、システムの堅牢性を更に向上させるべく、各々のシャードストア20は、局所的部分範囲集合42の2個のバージョン、すなわち公開および非公開バージョンを含んでいる。公開局所的部分範囲集合42PUは上述のように、リクエスト13を扱い且つメッセージ60を送信するために外部に露出されたバージョンである。非公開局所的部分範囲集合42PRは、以下により詳細に述べるように、シャードストア20以外の他の構成要素からはアクセスできないようになっている。さもなければ、シャードストアの公開局所的部分範囲集合42PUおよび非公開局所的部分範囲集合42PRの構造および内容の両方が上述のように、一般に自身の対応するシャードストア20に格納されたシャード30の1個以上の局所的部分範囲40を含み、任意選択により1個以上の外部部分範囲44を含む外部部分範囲集合46をも含む局所的部分範囲集合42に類似している。
図7に、
図5に関して説明したものと同様の移動動作80の実行中における両方のシャードストア20.1および20.2の公開局所的部分範囲集合42PUおよび非公開局所的部分範囲集合42PRを模式的に示し、移動部分範囲70[d,g)を有する移動シャード72が所定シャードストア20.1から別のシャードストア20.2へ移動される。同図に示すように、移動動作80の実行中に、第1のステップ302において、所定シャードストア20.1が、移動部分範囲70‘[d:20.2:g’に基づいて自身の公開局所的部分範囲集合42PUを‘20.1PU−>[a:20.1:g:...:z]’から‘20.1PU−>[a:20.1:d:20.2:g:...:z]’に更新し、これは従って、移動部分範囲が局所的部分範囲40として除去されて、外部部分範囲44として追加されることを意味する。次いで、ステップ304において、所定シャードストア20.1が別のシャードストア20.2への移動シャード72の送信を開始し、別のシャード20.2は、通信が首尾よく確立できたならば、所定シャードストア20.1から移動シャード72の受信を開始することができる。移動シャード72が正しく受信された場合、別のシャードストア20.2はステップ304において、自身の公開局所的部分範囲集合42PUおよび非公開局所的部分範囲集合42PRの両方を移動部分範囲70に基づいて‘20.2PU−>[a:...:i:20.2:n:...:z]’から‘20.2PU−>[a:...:d:20.2:g:...i:20.2:n:...:z]’に更新し、これは従って、移動部分範囲70が局所的部分範囲40として追加されることを意味する。また、別のシャードストア20.2は次いで移動肯定応答メッセージ74を所定シャードストア20に送信する。所定シャードストア20.2がステップ306において前記移動肯定応答メッセージ74を別のシャードストア20から受信した場合、所定シャードストア20.1はまた、以前に公開バージョンを更新したのと同様の仕方で、自身の非公開局所的部分範囲集合42PRを‘20.1PU−>[a:20.1:g:...:z]’から‘20.1PU−>[a:20.1:d:20.2:g:...:z」’に更新する。また、所定シャードストア20.1はまた、移動シャード72を削除することにより、記憶容量を安全な仕方で解放する。
【0059】
この設定により、問題が生じ得る移動動作のあらゆるステージで堅牢性が向上する。システムを不整合な状態に置いたままにすることなく、移動シャードの送信、移動シャードの受信、肯定応答等がカバーされる。これは、たとえ移動動作が失敗してもデータベースの2個以上のシャードにデータが存在しないようにすることを意味する。その理由は、同一キーによるデータベースへの二重エントリが生じ、分散データベース環境において未検知のまま残されて当該キーのデータに対する不整合な更新がなされる恐れがあるためである。従って、移動動作80が開始されたならば直ちに、所定シャードストア20.1の公開局所的部分範囲集合42PUに対する更新は、当該シャードストア20.1により移動部分範囲におけるキーを求めるリクエストがもはや扱われないことを保証する。また、別のシャードストア20.2の局所的部分範囲集合42PUおよび42PRの更新は、別のシャードストア20.2がそのようなリクエストの扱いを開始するのは移動シャード72が正しく受信される場合に限ることを保証する。更に、所定シャードストア20.1の非公開局所的部分範囲集合42PRだけを更新することで、移動動作80中に何らかの異常が生じても、外部の情報を一切必要とせずに自身の局所的状態を検証することにより当該シャードストア20.1により検知可能であることが保証される。これにより、所定シャードストア20.1は、移動動作80を実行してから所定時間後に、自身の公開局所的部分範囲集合42PUが非公開局所的部分範囲集合42PRと異なることを検知した場合、当該シャードストア20.1は、移動動作80のいずれかのステージの実行中における障害の発生を疑うことができる。好適には、所定シャードストア20は次いで、移動シャード72を別のシャードストア20.2へ再送信する。例えば移動動作に関与する両方のシャードストア間でのネットワーク接続障害、または関与するシャードストアのうち1個が一時的に利用不可能である等、移動シャード72の送信または受信に問題があったとしても、当該問題は、移動シャード72を送信する時点ではもはや存在せず、従って更なる移動シャードは首尾よく移動シャード72を受信し、自身の局所的部分範囲集合を更新して、移動肯定応答メッセージ74の送信へ進む。
【0060】
しかし、単に移動シャード72が別のシャードはストア20.2で既に首尾よく受信された当該移動の肯定応答メッセージ74の送信または受信だけが問題である場合、好適には再送信をより効率的に扱うことができる。別のシャードストア20.2がこの状況を検知することが可能であるのは、当該別のシャードストア20.2に対して、自身の公開局所的部分範囲集合42PUに既に存在する移動部分範囲70を有する所定シャードストア20.1により移動シャード72が提供されている場合、例えば、以前に当該移動シャード72を正しく受信したが、その後で移動肯定応答メッセージ74が所定シャードストア20.1に到達しなかった結果、自身の公開局所的部分範囲集合42PUが既に‘20.2PU−>[a:...:d:20.2:g:...i:20.2:n:...:z]’に変更されているにも拘わらず、移動部分範囲70‘d:20.2:g’が再び提示されている場合である。この場合、別のシャードストア20.2は好適には、移動シャード72を受信しなくても移動肯定応答メッセージ74を所定シャードストア20に送信する。これは例えば、移動動作中に移動シャードを送信する場合に、移動シャードに関する情報を先行メッセージ、ヘッダ、適当な識別子、または他の任意の適当な形式で渡すことにより、別のシャードストア20.2が当該移動シャード72を確認した後で移動シャード72を送受信する通信処理の開始を中断または防止できるようにすることで行える。
【0061】
図8に示すように、リバランシング動作に関与するデータが利用不可能な期間および程度を軽減しながら、複数のシャードストア20を跨るデータベース10の自動化された効率的なリバランシングを整合性を保って実行可能にすべく、ステップ402においてシャード30の少なくとも1個の順序付けられた部分集合を移動させる移動ジョブ82が渡されたならば、当該移動ジョブ82に関連付けられたシャードの順序付けられた部分集合のサイズが移動サイズ閾値90を上回るか否かがステップ404において最初に確認される。当該移動ジョブ82に関連付けられたシャードの順序付けられた部分集合が移動サイズ閾値90を上回らない場合、本方法はステップ406へ進み、上で述べたのと同様に移動ジョブは移動動作80として扱われる。移動ジョブ82が、ステップ408に示すように移動サイズ閾値90を上回るサイズのシャードの順序付けられた部分集合に関連付けられている場合、各々の移動動作80の移動シャード72のサイズが移動サイズ閾値90以下であるように、前記移動ジョブ82に基づいて複数の移動動作80が生起する。しかし、特定の効率的な実装によれば、事前のサイズ計算を一切必要とせずに、移動ジョブ82全体が扱われるまで、例えば10MBの移動サイズ閾値90である所定のフリンジサイズの1個以上の移動シャード72またはフリンジ72を生成することにより任意の移動ジョブ82を常に扱うことができる。移動ジョブ82は一般に、複数の移動動作80により、移動ジョブキー範囲、すなわち局所的部分範囲[a,d)を有するシャード30の順序付けられた範囲[b,d)におけるキーの順序付けられた部分集合の移動データ、またはキー12の移動ジョブ量、例えば100000個のキーを含むシャード30の最後の10000個のキーの順序付けられた部分集合、あるいはシャード30の順序付けられた部分集合の移動ジョブサイズ、例えば5GBよりも大きい所定シャードストアのシャードの任意の適当な順序付けられた部分集合、を移動させるまで、シャード30の順序付けられた部分集合を所定シャードストア20から別のシャードストア20へ移動させる任意の適当なリクエストであってよい。これにより、データの利用不可能性を個々の移動動作に必要な転送時間に限定しながら、分散データベースシステムの動的なリバランシングの実行中に、整合性を保って大規模および/または頻繁な移動ジョブを実行することができる。移動ジョブが例えばデータベース10に含まれているかまたは接続されたバランサまたは別の適当なシステムあるいは適当なモジュールの制御下にあれば、移動サイズ閾値90を例えば10MBに設定する場合に、例えばシャードの5GBの順序付けられた部分集合を移動させる大規模な移動ジョブを発行する際に、結果的に生じる10MBの移動動作は、関与する両方のシャードストアの局所的状態情報を更新することにより堅牢且つ効率的に扱われるため、当該バランサは当該動作の全ての詳細な実行を追跡する必要が無い。代替的な実施形態によれば、移動サイズ閾値90を、所定個数のキー、所定幅のキー範囲等として定義できるとは明らかである。
【0062】
例えば上述の移動動作の結果、多数の小型シャード30が増大するのを防止すべく、好適には分散データベースの動的なリバランシングの実行中に、所定シャード30に対して、当該所定シャード30の局所的部分範囲40に隣接する局所的部分範囲40を有する同一シャードストア20で別のシャード30が利用可能であることが検知された場合。隣接しているとは、例えば
図9に示すように、自身の範囲の最上限または最下限値を境界として隣の範囲と共有する局所的部分範囲が、共通の境界に接触しているかまたは共有していることを意味する。局所的部分範囲[d,e)を有する所定シャード30は例えば、シャードストア識別子20.2が付されたシャードストア20で受信された移動ジョブの実行中に生じる移動シャードである。別のシャード[e,j)は、両方の範囲に接する範囲制限‘e’の形式で共通の境界を共有しているため、当該所定シャードに隣接することは明らかである。これはまた、‘20.2−>[a:...:d:20.2:e:20.2:j:...:z]’で表されるように、局所的部分範囲集合42の状態から明らかである。マージ動作84の実行中に、当該所定シャード30[d,e)が別のシャード30[e,j)とマージされてマージ済みシャード30[d,j)が形成され、所定シャード30および別のシャード30の両方の隣接する局所的部分範囲40’d:20.2:e:20.2:jを、マージ済みシャード30のマージ済み局所的部分範囲40“d:20.2:j”にマージすることにより、局所的部分範囲集合42が更新される。マージ動作を回数を特定のレベルに制限するために、例えばマージ動作を、好適には移動サイズ閾値90よりも大きいマージサイズ閾値よりも小さいサイズの所定シャードに限定して、複数の小さい移動シャードを生成する複数の移動動作の結果生じて移動ジョブの後でこれらの移動シャードが再びマージされるようにすることができる。
【0063】
上で挙げた例は単一のキーを含むリクエストの場合であるが、上述のシステムおよび方法が、複数のキーが関わるリクエストを1回のシャード検索で済ます割合を最大化する際に特に有益であることは明らかである。上で既に説明したように、そのようなリクエストは一般に、例えば、ユーザーにより頻繁に出されるリクエストの一つが、例えば特定のクラウドストレージサービスの所定のユーザーアカウントの特定のフォルダに以前にアップロードされたファイルの一覧を示している適当なコンテナの内容を順次閲覧するための順序付けられたリストの提供を求めるものである場合に、例えば大規模分散ストレージシステムの環境で生じる。このように標準的なリクエストに応答して、ユーザーに対して、例えばアルファベット順にソートされたファイル名のリストがブラウザ上で、選択されたファイルを検索するリンクと共に提示される。そのような大規模分散ストレージシステムにおいて、例えば格納された全ての内容のメタデータバランスの良い分散を実現するためにどのハッシング機能を選択すべきであるか等を事前に評価するのは困難であり、最適化されたハッシング法を選択する際に、複数キーの順序付けられたリストに対してデータを求めるリクエストが発行されたとき、そのような順序付けられたリスト内の後続キーの当該シャードは異なるシャードに割り当てられる場合が多いという事実に基づき、各キーが格納されたシャードを決定するために個々のキーを問い合わせる必要が生じる場合が多い。性能を向上させるべく、上述の実施形態では、複数の順序付けられたキーを求めるリクエストが受信された場合、単一のシャード30の順序付けられた部分集合を検索するリクエストが結果的に生じる可能性が増すことを保証する。また、各シャード自身が大域的キー範囲の順序付けられた部分集合を形成するため、個々のキーについて、どのシャードが自身のデータを保持しているかを確定する必要は無くなるが、その理由は、例えばリクエストの最も低いキーについて当該リクエストの順序付けられた部分集合内の全ての後続キーが、自身の局所的部分範囲の制限に達するまで当該同一シャードに存在すると判定されたならば、当該キーの順序付けられた部分集合が指すデータの検索を続けるためには、どのシャードが隣接するかを確認するだけでよいからである。
【0064】
上述の例では主に、キーのソートされた部分集合と相関付けられた下限および上限により画定されるアルファベット順にソートされたキーの範囲に言及しているが、一般にデータベースに対するリクエストの大きな割合で必要とされるキーの順序関係に密接に関係する限り、他の任意の適当な順序関係を選択してもよいことは明らかである。
【0065】
上述の方法およびシステムは一般に、例えば適当なサーバまたは汎用コンピュータ等の適当なコンピュータシステムのプロセッサにより実行された場合に本方法を実行すべく適合されたソフトウェアコードを含むコンピュータプログラムとして充分に実装可能であることは明らかである。
【0066】
本発明について特定の実施形態を参照しながら記述してきたが、当業者には本発明が上述の例示的な実施形態の詳細事項に限定されないこと、および本発明がその範囲から逸脱することなく各種の変更および変型を加えて実施できることは明らかであろう。本実施形態は従って、あらゆる点において例示的であって限定的ではないものと考えるべきであり、従って本発明の趣旨は上述の説明ではなく添付の請求項により示されており、請求項の等価物の意味および範囲に含まれるあらゆる変更は従って当該範囲に含まれるものとする。換言すれば、基本的原理の範囲内に含まれ且つ基本的属性が本特許出願において権利請求される一切の変更、変型または等価物を包含するものと考えられる。更に、本特許出願の読者には、「含んでいる」または「含む」という語句が他の要素またはステップを除外しないこと、「1個の」または「一つの」という語句が複数個を除外しないこと、および1個のコンピュータシステム、1個のプロセッサ、または別の1個の統合装置が、請求項に記載された複数の手段の機能を満たし得ることが理解されよう。請求項内のどの参照符号も、対象とする各請求項を限定するものと解釈してはならない。「第1」、「第2」、「第3」、「a」、「b」、「c」等の用語は、本明細書の記述または請求項において用いられた場合、類似要素またはステップを区別するために導入されたものであって、必ずしも連続的または時系列的順序を規定している訳ではない。同様に、「上部」、「底部」、「上に」、「下に」等の用語は説明目的で導入されたものであって、必ずしも相対的な位置を規定している訳ではない。このように用いられている用語は適当な条件の下で交換可能であって、本発明の実施形態は本発明に従い、上述のもの(複数も)とは異なる順序または方向で動作可能であることを理解されたい。