(57)【要約】【課題】コンピュータに実装された動的シャーディング方法を提供する。【解決手段】少なくとも１個のキー（１２）が指すデータ（１１）のリクエスト（１３）を扱う際に、−リクエスト（１３）を所定シャードストア（２０）に提供するステップ、−当該所定シャードストア（２０）が、自身の局所的部分範囲集合（４２）により、当該少なくとも１個のキー（１２）が当該所定シャードストア（２０）に格納されたシャード（３０）の局所的部分範囲（４０）に存在するか否かを検証するステップ、および−少なくとも１個のキー（１２）が、当該所定シャードストア（２０）に格納されたシャード（３０）の局所的部分範囲（４０）に存在しない場合、当該所定シャードストア（２０）の局所的部分範囲集合（４２）を含むメッセージ（６０）を返送するステップ。【選択図】図２
2016062609.tif 000002
【特許請求の範囲】
【請求項１】
順序付けられた大域的範囲（１４）に含まれるキー（１２）により識別可能なデータ（１１）を含むデータベース（１０）の動的シャーディングを行うコンピュータ実装された方法であって、
−各々がシャードストア識別子（２２）を含み且つ各々が記憶容量制限により制限されている複数のシャードストア（２０）を提供するステップと、
−各シャード（３０）が局所的部分範囲（４０）内で少なくとも１個のキー（１２）が指すデータを求めるリクエスト（１３）を扱うべく構成され、当該局所的部分範囲（４０）が前記順序付けられた大域的範囲（１４）の順序付けられた部分範囲を含む複数のシャード（３０）を提供するステップと、
−単一のシャード（３０）が単一のシャードストア（２０）を越えて延在しないよう前記シャードストア（２０）に前記複数のシャード（３０）を提供するステップと、
−前記シャードストア（２０）の各々に１個の局所的部分範囲集合（４２）を、各々の局所的部分範囲集合（４２）が自身の対応するシャードストア（２０）に格納された前記複数のシャード（３０）の前記１個以上の局所的部分範囲（４０）を含むように提供するステップと、
−少なくとも１個のキー（１２）が指すデータ（１１）を求める前記リクエスト（１３）を扱う際に、
−当該リクエスト（１３）を所定シャードストア（２０）に提供するステップと、
−当該所定シャードストア（２０）が、自身の局所的部分範囲集合（４２）により、当該少なくとも１個のキー（１２）が、当該所定シャードストア（２０）に格納されたシャード（３０）の局所的部分範囲（４０）に存在するか否かを検証するステップと、
−少なくとも１個のキー（１２）が当該所定シャードストア（２０）に格納されたシャード（３０）の局所的部分範囲（４０）に存在しない場合、当該所定シャードストア（２０）の前記局所的部分範囲集合（４２）を含むメッセージ（６０）を返送するステップとを含む方法。
【請求項２】
当該所定シャードストア（２０）が前記メッセージ（６０）を返送する場合、前記リクエスト（１３）が次いで別のシャードストア（２０）に渡される、請求項１に記載の方法。
【請求項３】
−前記複数のシャードストア（２０）に接続可能であって少なくとも１個のキー（１２）が指すデータ（１１）を求めるリクエストを扱うべく適合されたシャードルータ（５０）を提供するステップと、
−前記順序付けられた大域的範囲（１４）の大域的部分範囲（５４）をシャードストア識別子（２２）と相関付けるべく適合された大域的部分範囲集合（５２）を前記シャードストア識別子（２２）に提供するステップと、
−少なくとも１個のキー（１２）が指すデータ（１１）を求めるリクエスト（１３）を扱う際に、
−当該リクエストを前記シャードルータ（５０）に提供するステップと、
−前記シャードルータ（５０）が、前記リクエスト（１３）の少なくとも１個のキー（１２）を含む大域的部分範囲（５４）と相関付けられたシャードストア識別子（２２）を判定するステップと、
−前記シャードルータ（５０）が、当該相関付けられたシャードストア識別子（２２）の前記所定シャードストア（２０）に前記リクエストを渡すステップと、
−当該所定シャードストア（２０）が、自身の局所的部分範囲集合（４２）により、当該少なくとも１個のキー（１２）が当該所定シャードストア（２０）に格納されたシャード（３０）の局所的部分範囲（４０）に存在するか否かを検証するステップと、
−少なくとも１個のキー（１２）が、当該所定シャードストア（２０）に格納された前記シャード（３０）の前記１個以上の局所的部分範囲（４０）に存在しない場合、
−当該所定シャードストア（２０）の前記局所的部分範囲集合（４２）を含む前記メッセージ（６０）を返送するステップと、
−前記シャードルータ（５０）が、前記所定シャードストア（２０）の前記シャードストア識別子（２２）を、前記メッセージ（６０）の前記局所的部分範囲集合（４２）の局所的部分範囲（４０）に対応する大域的部分範囲（５４）と相関付けることにより、前記メッセージ（６０）に基づいて自身の大域的部分範囲集合（５２）を更新するステップとを更に含む、請求項１または２に記載の方法。
【請求項４】
前記リクエスト（１３）を扱う前記所定シャードストア（２０）の前記局所的部分範囲集合（４２）が、自身の各シャードストア識別子（２２）と相関付けられた他のシャードストア（２０）に格納されたシャード（３０）の１個以上の外部部分範囲（４４）を含む外部部分範囲集合（４６）を更に含み、更に、
前記所定シャードストア（２０）により前記リクエスト（１３）を扱う際に、当該所定シャードストア（２０）に格納されたシャード（３０）の前記１個以上の局所的部分範囲（４０）に少なくとも１個のキー（１２）が存在しない場合、
−前記局所的部分範囲集合（４２）を含む前記メッセージ（６０）を返送するステップと、
−前記リクエスト（１３）の少なくとも１個のキー（１２）が当該局所的部分範囲集合（４２）の前記外部部分範囲集合（４６）の所定の外部部分範囲（４４）に含まれているか否かを検証するステップと、
−前記リクエスト（１３）を次いで、当該外部部分範囲（４４）と相関付けられた前記シャードストア識別子（２２）を有する前記別のシャードストア（２０）に提供するステップとを含む、請求項１〜３のいずれか１項に記載の方法。
【請求項５】
請求項４において請求項３に従う場合、当該所定シャードストア（２０）に格納された前記シャード（３０）の前記１個以上の局所的部分範囲（４０）に少なくとも１個のキー（１２）が存在しない場合、
−前記シャードルータ（５０）が更に、前記別のシャードストア（２０）の前記シャードストア識別子（２２）を、前記メッセージ（６０）の前記外部部分範囲集合（４６）の前記所定の外部部分範囲（４４）に対応する大域的部分範囲（５４）を相関付けることにより、前記メッセージ（６０）に基づいて自身の大域的部分範囲集合（５２）を更新するステップを含む、請求項４に記載の方法。
【請求項６】
移動部分範囲（７０）内の全てのキー（１２）が指すデータ（１１）を含む移動シャード（７２）の、前記所定シャードストア（２０）から別のシャードストア（２０）への移動動作（８０）の結果、前記移動部分範囲（７０）が前記所定シャードストア（２０）の前記局所的部分範囲集合（４２）から除去されて、前記別のシャードストア（２０）の前記シャードストア識別子（２２）と相関付けられた外部部分範囲（４４）として前記所定シャードストア（２０）の前記外部部分範囲集合（４６）に追加される、請求項４または５に記載の方法。
【請求項７】
移動部分範囲（７０）内の全てのキー（１２）が指すデータ（１１）を含む移動シャード（７２）の、前記所定シャードストア（２０）から別のシャードストア（２０）への前記移動動作（８０）の結果、前記移動部分範囲（７０）が局所的部分範囲（４０）として前記別のシャードストア（２０）の前記局所的部分範囲集合（４２）に追加される、請求項６に記載の方法。
【請求項８】
移動動作（８０）の実行中に、前記移動動作（８０）に関与する前記所定シャードストア（２０）および／または前記別のシャードストア（２０）の前記局所的部分範囲集合（４２）の前記局所的部分範囲集合（４２）だけが前記移動部分範囲（７０）に基づいて更新される、請求項７に記載の方法。
【請求項９】
前記移動動作（８０）に関与する前記所定シャードストア（２０）および前記別のシャードストア（２０）が、公開局所的部分範囲集合（４２ＰＵ）および非公開局所的部分範囲集合（４２ＰＲ）を含み、そのような移動動作（８０）の実行中に、
−前記所定シャードストア（２０）が前記移動部分範囲（７０）に基づいて自身の公開局所的部分範囲集合（４２ＰＵ）を更新するステップと、
−前記所定シャードスト（２０）が前記移動シャード（７２）を前記別のシャードストア（２０）へ送信するステップと、
−前記別のシャードストア（２０）が前記所定シャードストア（２０）から前記移動シャード（７２）を受信するステップと、
−前記移動シャード（７２）が正しく受信された場合、前記別のシャードストア（２０）が、
−自身の公開局所的部分範囲集合（４２ＰＵ）および自身の非公開局所的部分範囲集合（４２ＰＲ）の両方を前記移動部分範囲（７０）に基づいて更新するステップと、
−前記所定シャードストア（２０）に移動肯定応答メッセージ（７４）を送信するステップと、
−前記所定シャードストア（２０）が前記別のシャードストア（２０）から前記移動肯定応答メッセージ（７４）を受信した場合、前記所定シャードストア（２０）が自身の非公開局所的部分範囲集合（４２ＰＲ）を更新し、前記所定シャードストア（２０）が前記移動シャード（７２）を削除するステップと含む、請求項６〜８のいずれか１項に記載の方法。
【請求項１０】
前記所定シャードストア（２０）が、移動動作（８０）を実行してから所定時間後に、自身の公開局所的部分範囲集合（４２ＰＵ）が、自身の非公開局所的部分範囲集合（４２ＰＲ）とは異なることを検知した場合、前記所定シャードストア（２０）が前記移動シャード（７２）を前記別のシャードストア（２０）へ再送信する、請求項９に記載の方法。
【請求項１１】
前記別のシャードストア（２０）に対して、自身の公開局所的部分範囲集合（４２ＰＵ）に既に存在する前記移動部分範囲（７０）が前記所定シャードストア（２０）により前記移動シャード（７２）が提供されている場合、前記別のシャードストア（２０）が、前記移動シャード（７２）を受信することなく前記所定シャードストア（２０）に対して移動肯定応答メッセージ（７４）を送信する、請求項１０に記載の方法。
【請求項１２】
前記移動シャード（７２）が、前記所定シャードストア（２０）のシャード（３０）の少なくとも１個の順序付けられた部分集合を含むように生成される、請求項６〜１１に記載の方法。
【請求項１３】
サイズが移動サイズ閾値（９０）を上回るシャード（３０）の少なくとも１個の順序付けられた部分集合を移動させる移動ジョブ（８２）が提供された場合、前記移動動作（８０）の各々の前記移動シャード（７２）のサイズが前記移動サイズ閾値（９０）以下であるように、複数の移動動作（８０）が前記移動ジョブ（８２）に基づいて生成され、前記移動ジョブ（８２）が、前記複数の移動動作（８０）により、
−移動ジョブキー範囲、
−キー（１２）の移動ジョブ量、および／または
−前記シャード（３０）
の前記順序付けられた部分集合の移動ジョブサイズ
の移動が完了するまでシャード（３０）の順序付けられた部分集合を前記所定シャードストア（２０）から別のシャードストア（２０）へ移動させるリクエストを含む、請求項６〜１２のいずれか１項に記載の方法。
【請求項１４】
所定シャード（３０）について、前記所定シャード（３０）の前記局所的部分範囲（４０）に隣接する局所的部分範囲（４０）を有する同一シャードストア（２０）で別のシャード（３０）が利用可能であることが検知された場合、当該所定シャード（３０）が前記別のシャード（３０）にマージされてマージ済みシャード（３０）を形成すると共に、前記局所的部分範囲集合（４２）が、前記所定シャード（３０）の隣接する局所的部分範囲（４０）および前記別のシャード（３０）の両方を、マージ済みシャード（３０）のマージ済み局所的部分範囲（４０）にマージすることにより更新される、請求項１〜１３のいずれか１項に記載の方法。
【請求項１５】
プロセッサにより実行された場合に請求項１〜１４のいずれか１項に記載の方法を実行すべく適合されたソフトウェアコードを含むコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、順序付けられた大域的範囲に含まれるキーにより識別可能なデータを含むデータベースの動的シャーディングを行うコンピュータ実装された方法に関する。
【背景技術】
【０００２】
データベースシャードとは、データベースの水平方向の区画のことである。そのような個々の区画の各々をシャードまたはデータベースシャードと称する。水平分割とは、データベースの行の異なる部分集合が別々の水平方向の区画に保持されるようなデータベースの設計原理である。従ってそのような水平方向の区画がシャードを形成する。データベースが水平方向に複数のシャードに分割されている場合、複数のシャードを、例えばデータベースサーバである異なるシャードストアに配置することができるため、スケーラビリティの観点から潜在的な利点が得られ、従って、単一のデータベースサーバの性能および記憶容量の制限を超えてデータベースを拡張することができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１４／０１０８４２１号明細書
【特許文献２】国際公開第２０１３／１４７７８５号パンフレット
【特許文献３】米国特許出願公開第２０１２／０２７１７９５号明細書
【特許文献４】米国特許出願公開第２０１２／０２５４１７５号明細書
【特許文献５】国際公開第２０１２／０６８１８４号パンフレット
【特許文献６】欧州特許第２４６９４１１号明細書
【特許文献７】欧州特許第２６７２３８７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
データベースをシャーディングする各種の方法を用いてこのようなスケーリングを満たすことができ、シャーディングをより容易にすべく異なるシャードストアに跨ってシャーディングおよび負荷バランシングを自動化する分割データベースアーキテクチャが出現している。これらのアーキテクチャは典型的には、キーに基づくハッシュ分割または範囲分割を用いて、データベースを格納している分散コンピュータシステムのシャードストアにデータを割り当てる。キーに基づくハッシュの例として、例えば（特許文献１）に記述されており、キーのモジュラス形式のハッシュまたは洗練されたハッシュが計算され、各シャードストアに対して分散のバランスが良いと思われるこれらの計算されたハッシュの特定の範囲が割り当てられる。このような方式における第１の問題は、大規模なデータベースシステムにおいて、キーに基づいてこれらのハッシュを計算するに膨大な計算能力および時間を必要とし、従ってこれらのキーが指すデータを求めるリクエストを扱う際に待ち時間が増大することである。また、複雑なハッシュ化機構を用いる場合であっても、特にキーおよび当該キーに関連付けられたデータを事前に高い信頼性で評価できない大規模分散データベースの場合、異なるデータストアの間でバランスの良い分散を保証することは困難である。
【０００５】
更なる問題として、例えば（特許文献１）に記述されているように、分散動作の割合が高い分散データベースシステムの性能低下である。そのような分散動作の実行中に、例えば単一の顧客の注文履歴のリスト等、複数のキーが指すデータを求めるリクエストを実行するために複数のシャードストアにアクセスしなければならない。分散動作の割合を減らして、１個のシャードの読出し／書込み動作の割合を増やすために、（特許文献１）は、単調なキー範囲を、補助的なハッシング方法によりレコードまたは行が分散された複数のシャードストアと相関付けるシャード制御レコードの使用を提案している。しかし、この方式では、図３に示すように特定の顧客ＩＤと相関付けられたデータを扱う際に、１個のシャードの読出し／書込み動作が増大し、また、シャード制御レコードは当該メタデータを個々のキーレベルで格納する必要無しにキー範囲に関連付けられたシャードリストを提供するが、データを検索する必要があるリストの全てのキーについて、シャードリストのどのシャードストアにアクセスするかを決定するために補助ハッシュを計算する必要が依然としてある。また、単調キー、例えば顧客ＩＤを用いることで、例えばユーザーによる検索および／または選択のために顧客の順序付けられたリストを作成する必要がある標準的なアプリケーションレベルの状況で性能が低下してしまう。例えばアルファベット順にソートされた顧客リストを順にめくっていくユーザーインターフェースがユーザーに提示されるような標準的なケースでは、アルファベット順にソートされたリストの隣接する顧客の単調な顧客ｉｄが必ずしも同一の顧客ｉｄ範囲に存在するとは限らず、たとえ同一範囲に存在する場合であっても、それらがシャードリスト内の同一シャードストアに格納されている保証がないため、シャード制御レコードに対するアクセスリクエストの個数が膨大になるのは明らかである。また、（特許文献１）の方式では、システムの全てのシャードストアにアクセス可能な中央拠点で常時最新のシャード制御レコードを必要とするため、障害が一箇所に集中し、特に多数のシャードストアが含まれる大規模分散データベースシステムにおいて、そのようなシステムのスケーラビリティおよび応答性に対する制約となる。
【０００６】
データベースをシャーディングする更なる方法が（特許文献２）により知られており、複製オブジェクトストレージシステム用の索引がオブジェクトを、ストレージノード間で分散させるために用いたものと同一のハッシュに基づくシャーディング方法によりシャーディングし、次いでこれらの索引シャードをシステム内の全てのストレージノード間で分散させる。ここではまた、異なるストレージノードに格納された全ての索引シャードを同期させておくことが必要であるため待ち時間が長くなり、そのようなシステムのスケーラビリティが制約されてしまう。また、索引がハッシュに基づくシャードを生成するため、例えばフォルダ、グループ、ラベル等の選択されたコンテナに格納されたデータオブジェクトのアルファベット順にソートされたリストを一覧表示するような標準動作を実行する際に複数の異なるシャードストアにアクセスする必要がある分散動作の割合が高くなってしまう。この現象は更に、シャーディングされた索引に対してなされたリクエストおよびデータオブジェクト自体に関するリクエストの両方のレベルで顕著である。
【０００７】
データベースをシャーディングする更なる方法が（特許文献３）により知られており、協調サービスがキーの全範囲を、当該キーの全範囲の一部であるキーの局所的部分範囲に各々が責任を負う複数のノードと相関付けるリクエストの分散を管理する。各々のノードのキーの局所的部分範囲は、ノードの個数およびデータベーステーブル内の行またはキーの個数に応じて選択されている。このようなシステムでは、ノード上の全てのキーの局所的部分範囲が互いに、且つ協調サービスと同期していることが必要とされるため、スケーラビリティが制約される。また、キーの全範囲用のデータベースにおけるキーの分散について一切の知識が利用できない場合、選択されたキーの局所的部分範囲に起因してノード間でのデータの分散のバランスが失われるリスクが高い。
【０００８】
データベースをシャーディングする更なる方法が（特許文献４）により知られており、当該データベースが、順序付けられた大域的範囲に含まれるキーにより識別可能なデータを含んでいる。チャンクとも称する複数のシャードが用意されていて、各シャードは、局所的部分範囲で少なくとも１個のキーが指すデータを求めるリクエストを扱うべく構成されていて、当該局所的部分範囲は、前記順序付けられた大域的範囲の順序付けられた部分範囲を含み、例えばキーの最小値とキーの最大値との間の範囲で定義される。正しいシャードにリクエストをルーティングするルータプロセスが、格納する構成サーバからの情報、および各シャードに関する情報、例えば最大および最小キー値、および当該シャードが格納されているシャードストアにアクセスする。構成サーバの当該情報が、各シャードストアでの実際の状況と常時同期している必要があるため、待ち時間が長くなり、スケーラビリティが制約されることは明らかである。システムをリバランシングする際の柔軟性を向上させるべく、各シャードの最大サイズが例えば２００ＭＢに制限されていて、シャードが当該最大サイズに達したならば２個の新規のシャードに分割されて、各々が分割されたシャードの局所的部分範囲のある割合を含むようにする。これにより、システムの各シャードストアで多数の小さいシャードが利用可能であり、単にこれらの小さいシャードを自身のシャードストアから、負荷が小さい別のシャードストアへ移動させることによりリバランシングを行うことができる。しかし、これを行うには、構成サーバが、シャードの個数が多く、新規のシャードが頻繁に生成され、およびシャードストア間でシャードが頻繁に再配置されることに起因して頻繁に生じる更新と常時同期していることが必要であるため、リクエストが実行可能になる前に構成サーバにより最新のコンフィギュレーション情報でルータを更新しなければならず、システムのスケーラビリティが制約されて待ち時間が長くなる。また、シャードのサイズが小さいほど、キーの順序付けられた部分集合、例えばコンテナ内のデータオブジェクトのアルファベット順に順序付けられたリスト、フォルダ内のファイル、テーブル内の顧客等に関するデータを求めて発行される標準的なリクエストに起因して複数のシャードストアに跨って分散された複数のシャードにアクセスする必要が生じ、そのため単一のシャード動作の割合が減少し、それに応じて性能低下が生じる恐れが増大する。
【０００９】
動的にスケーラブルな冗長分散ストレージシステムが更に（特許文献５）に開示されている。同文献は、複製、例えばＲＡＩＤを用いるか、または誤り訂正符号すなわちＥＣＣ、例えば消去符号を用いて一定レベルの冗長性を実現するストレージシステムを開示している。当該ストレージシステムは、ファイル識別子およびデータブロックを、ファイルおよびデータブロックを格納するストレージデバイスと相関付けるファイルマネージャコントローラおよびストレージマネージャコントローラを含んでいる。当該ファイルマネージャコントローラは、分散ハッシュテーブルを用いて実装することができ、これらは例えば、本明細書の図２Ｃに示すようにファイルマネージャが責任を負う一意なファイル識別子の値の範囲を相関付けるエントリを含むハッシュテーブルリストとして実装されている。図示するように、各ファイルマネージャは、円形のキーの全範囲の一部である自身のキー値の局所的部分範囲を認識している必要がある。また、各ファイルマネージャは少なくとも、自身の局所的部分範囲に先行する局所的部分範囲を管理するファイルマネージャ、および自身の局所的部分範囲に後続する部分範囲を管理するファイルマネージャに関する情報を認識していなければならない。分散ハッシュテーブルの分散的特性に起因して、リストの作成には時間を要し、その間にノードの障害または分散ハッシュテーブルのリバランシングが発生するかもしれないため、ノードが利用できる当該ハッシュテーブルリストが使用時に完全に正確であるとは限らない点に注意されたい。本システムは、たとえ情報が陳腐化していても、陳腐化した情報はともかく所望のノードにより近い範囲のノードに導いてくれるため、１個以上の中間ホップを経て最終的に所望のノードにアクセスできるとの仮定に依存している。しかし、大規模分散データベースシステムではこの仮定は必ずしも真ではなく、例えば、隣接ノードおよび／またはそれらの対応する局所的部分範囲の情報が陳腐化している場合、取得不能なデータまたは受容できない待ち時間が生じる恐れがある。依然として互いを隣接ノードと確認する２個の陳腐化したノードの間で、リクエストが行きつ戻りつする状況を想像するのは難しくない。また、ハッシュに基づくシャーディングでは、各キー、例えばファイル識別子に対して適切なハッシュを生成する必要があるため、上述のように標準的なリクエストを実行する、例えばコンテナ内のデータオブジェクトの、フォルダ内のファイルの、テーブル内の顧客等のアルファベット順に順序付けられたリストを作成する際に単一シャード動作の割合が減少してしまう。この性能低下は、（特許文献５）のシステムではシステムが一定レベルのリバランシングの柔軟性を持たせるために、１個はファイルメタデータの管理に責任を負うファイルマネージャ用、１個はストレージデバイスの管理に責任を負うストレージマネージャ用の２個の分散ハッシュテーブルシステムを用いるため、更に顕著である。
【００１０】
従って、上述の従来技術の短所を克服すると共に、キーの順序付けられた部分集合に関するデータが得られる標準的なリクエストを扱う際の性能向上を保証する堅牢且つ簡単にスケーラビリティに保証する、改良された、コンピュータに実装されたデータベースの動的シャーディング方法に対するニーズが依然としてある。
【課題を解決するための手段】
【００１１】
本発明の第１の態様によれば、順序付けられた大域的範囲に含まれるキーにより識別可能なデータを含むデータベースの動的シャーディングを行うコンピュータ実装された方法を提供し、本方法は、
−各々がシャードストア識別子を含み且つ各々が記憶容量制限により制限されている複数のシャードストアを提供するステップと、
−各シャードが局所的部分範囲内で少なくとも１個のキーが指すデータを求めるリクエストを扱うべく構成され、当該局所的部分範囲が前記順序付けられた大域的範囲の順序付けられた部分範囲を含む複数のシャードを提供するステップと、
−単一のシャードが単一のシャードストアを越えて延在しないようシャードストアに複数のシャードを提供するステップと、
−シャードストアの各々に１個の局所的部分範囲集合を、各々の局所的部分範囲集合が自身の対応するシャードストアに格納されたシャードの１個以上の局所的部分範囲を含むように提供するステップと、
−少なくとも１個のキーが指すデータを求める前記リクエストを扱う際に、
−当該リクエストを所定シャードストアに提供するステップと、
−当該所定シャードストアが、自身の局所的部分範囲集合により、当該少なくとも１個のキーが、当該所定シャードストアに格納されたシャードの局所的部分範囲に存在するか否かを検証するステップと、
−少なくとも１個のキーが当該所定シャードストアに格納されたシャードの局所的部分範囲に存在しない場合、当該所定シャードストアの局所的部分範囲集合を含むメッセージを返送するステップとを含んでいる。
【００１２】
これにより、各シャードストアは自身の局所的部分範囲集合を認識するだけでよいため、大規模なデータベース環境においても堅牢な動作を保証することができる。これにより、そのような情報を全てのシャードストアに跨るシステム全体で、および／または中央管理アプリケーションと同期させる必要があるシステムに存在する一切の待ち時間が回避される。シャードストアは、自身の局所的部分範囲のいずれにも存在しないキーを含むリクエストへの応答として、当該局所的部分範囲集合を含むメッセージを返送することにより、自身が格納する部分範囲に関する最新のフィードバックを要求元に対し、当該要求元に関係する時だけ、動的に提供する。また、順序付けられたキーの部分範囲内のキーを格納しているシャードを用いることで、キーが自身の局所的部分範囲集合の局所的部分範囲に存在するか否かを確認するだけでよいため、リクエストの１個以上キーを扱うことが可能か否かをシャードストアが確認する複雑さが軽減される。これらの局所的部分範囲が順序付けられた部分範囲であるため、この確認は、単にキーが部分範囲の境界間に存在するか否か、例えばそのような順序付けられた部分範囲の最下限よりも大きいかまたは最上限よりも小さいか確認するだけで実行できる。この確認を実行するためにキーのハッシングその他一切の変換を実行する必要がない。
【００１３】
順序付けられた大域的範囲の順序付けられた部分範囲内を求めるリクエストを扱うべく構成されたシャードを用いることにより、キーの順序付けられた部分集合に関するデータを求める標準的なリクエストを効率的に扱うことが可能である。そのようなキーの順序付けられた部分集合を生成する際に問い合わせを必要とするシャードの個数が最小限に、最適な場合は当該キーの部分集合を含む単一のシャードに、またいかなる場合でも高々当該キーの順序付けられた部分集合全体にわたる部分範囲に関するシャードに抑えられることは明らかである。これは例えば、分散オブジェクトストレージシステム環境において、より高水準の階層的グループの１個以上の名称の後に続くオブジェクトの名称で形成される、一意なオブジェクト識別子により順序付けられたキーが渡されることを意味する。これにより、そのようなデータを求める標準的なリクエストがアルファベット順にソートされたリスト形式のデータオブジェクトを順次調べる必要がある場合、当該リクエストは、表示すべき第１のキーを含むキーの部分範囲を有するシャードにアクセスして、例えば当該シャードから所定個数の後続キーが指すデータを含む当該シャードのアルファベット順に順序付けられた部分集合の検索を継続することにより、扱うことができる。
【００１４】
更なる実施形態によれば、当該所定シャードストアが前記メッセージを返送する場合、当該リクエストは次いで別のシャードストアに渡される。
【００１５】
これにより、シャードストア同士または中央管理プロセスとの広範な同期化を必要としない、データベースの動的シャーディングを行う堅牢、簡単且つ高度にスケーラブルな方法が実現される。各シャードストアは自身に格納されたシャードに存在するキーに関するリクエストを効率的に扱うことができ、局所的部分範囲集合にキーが存在しない旨を要求元に効率的に通知することにより、当該リクエストの当該部分も同様に効率的に扱われるように別のシャードストアにカスケードできるようにする。これにより、シャードの極めて動的な、分散リバランシングが生じる大規模分散処理システムであっても、各リクエストを受けたシャードストアは効率的に、且つ自身の局所的部分範囲集合の形式で最新の局所的情報に基づいて、リクエストを扱うことが可能か否かを判断し、可能でなければ要求元に自身の現在の局所的状態の最新情報を渡すことが可能になる。
【００１６】
更なる実施形態によれば、本方法は更に、
−前記複数のシャードストアに接続可能であって少なくとも１個のキーが指すデータを求めるリクエストを扱うべく適合されたシャードルータを提供するステップと、
−順序付けられた大域的範囲の大域的部分範囲をシャードストア識別子と相関付けるべく適合された大域的部分範囲集合を前記シャードルータに提供するステップと、
−少なくとも１個のキーが指すデータを求めるリクエストを扱う際に、
−当該リクエストをシャードルータに提供するステップと、
−シャードルータが、リクエストの少なくとも１個のキーを含む大域的部分範囲と相関付けられたシャードストア識別子を判定するステップと、
−シャードルータが、当該相関付けられたシャードストア識別子の所定シャードストアに当該リクエストを渡すステップと、
−当該所定シャードストアが、自身の局所的部分範囲集合により、当該少なくとも１個のキーが当該所定シャードストアに格納されたシャードの局所的部分範囲に存在するか否かを検証するステップと、
−少なくとも１個のキーが、当該所定シャードストアに格納されたシャードの１個以上の局所的部分範囲に存在しない場合、
−当該所定シャードストアの局所的部分範囲集合を含むメッセージを返送するステップと、
−シャードルータが、所定シャードストアのシャードストア識別子を、前記メッセージの局所的部分範囲集合の局所的部分範囲に対応する大域的部分範囲と相関付けることにより、前記メッセージに基づいて自身の大域的部分範囲集合を更新するステップとを含んでいる。
【００１７】
これにより、局所的部分範囲集合を含むメッセージにより大域的部分範囲集合に対して実行される更新が、データベースシステムに渡される実際のリクエストに含まれるキーの部分範囲の更新に焦点を合わせているため、大域的部分範囲集合が動的且つ効率的に更新される。ルータはこれにより、一から始める場合であっても、データを求めるリクエストを扱いながら動的に自身の大域的部分範囲集合を生成することができるため、不要な同期化オーバーヘッドおよび待ち時間が生じることなく、任意のシャードストア内のシャードに対する分散された局所的変更に高い信頼性を以て対処するのに充分な堅牢性を依然として維持しながら、自身のルーティング効率を系統的に向上させることができる。
【００１８】
更なる実施形態によれば、リクエストを扱う所定シャードストアの局所的部分範囲集合は更に、自身の各シャードストア識別子と相関付けられた他のシャードストアに格納されたシャードの１個以上の外部部分範囲を含む外部部分範囲集合を含み、本方法は更に、
所定シャードストアによりリクエストを扱う際に、当該所定シャードストアに格納されたシャードの１個以上の局所的部分範囲に少なくとも１個のキーが存在しない場合、
−局所的部分範囲集合を含むメッセージを返送するステップと、
−当該リクエストの少なくとも１個のキーが当該局所的部分範囲集合の外部部分範囲集合の所定の外部部分範囲に含まれているか否かを検証するステップと、
−当該リクエストを次いで、当該外部部分範囲と相関付けられたシャードストア識別子を有する別のシャードストアに提供するステップとを含んでいる。
【００１９】
これにより、大規模分散データベース環境における堅牢性を犠牲にすることなく、ルーティング効率が更に最適化される。要求元がシャードストアに対し、例えば、要求元が当該シャードストアに格納されたシャードに関する陳腐化した情報に基づいてリクエストを発行した等により、当該シャードストアの局所的部分範囲集合にもはや存在しないキーを求めるリクエストを送信した場合、これは、リバランシング動作の間にシャードのデータの少なくとも一部が別のシャードへ移動した結果である可能性が比較的高い。他のシャードストアの部分範囲に関する情報を外部部分範囲の形式で格納することで、当該特定のシャードストア自身に格納されたシャードの局所的部分範囲に関する情報を要求元に提供すべく用いるものと同一のメッセージ送信機構により、特定のシャードストアにより当該情報を要求元に提供する簡単な方法が得られる。他のシャードストアに格納されたシャードに関する当該情報は従って、リクエストに関連するシャードを含むと思われる当該別のシャードストアへの効率的なルーティングを実現することができる。
【００２０】
更なる実施形態によれば、本方法は更に、当該所定シャードストアに格納されたシャードの１個以上の局所的部分範囲に少なくとも１個のキーが存在しない場合、
−シャードルータが更に、別のシャードストアのシャードストア識別子を、前記メッセージの外部部分範囲集合の所定の外部部分範囲に対応する大域的部分範囲を相関付けることにより、前記メッセージに基づいて自身の大域的部分範囲集合を更新するステップを含んでいる。
【００２１】
これにより、大域的部分範囲集合もまた外部部分範囲により、リクエストを取扱う間に、効率的且つ動的に更新されるため、ルーティング効率が更に向上する。外部部分範囲に基づく大域的部分範囲集合の更新の後、当該外部部分範囲と相関付けられたシャードストアに当該リクエストをルーティングした後で当該更新が検証され、自身の局所的部分範囲集合にキーが存在しない場合に、大域的部分範囲集合を更新する更なるメッセージが生成されることは明らかである。
【００２２】
更なる実施形態によれば、移動部分範囲内の全てのキーが指すデータを含む移動シャードの、所定シャードストアから別のシャードストアへの移動動作の結果、移動部分範囲が所定シャードストアの局所的部分範囲集合から除去されて、別のシャードストアのシャードストア識別子と相関付けられた外部部分範囲として所定シャードストアの外部部分範囲集合に追加される。
【００２３】
これにより、移動動作から生じた情報は、ルーティング動作の効率を向上させるべく、移動動作が開始されたシャードストアで依然として利用可能である。
【００２４】
更なる実施形態によれば、移動部分範囲内の全てのキーが指すデータを含む移動シャードの、所定シャードストアから別のシャードストアへの前記移動動作の結果、移動部分範囲が局所的部分範囲として別のシャードストアの局所的部分範囲集合に追加される。
【００２５】
これにより、移動動作から生じた情報は、そのような分散環境において整合性が保証できるように移動動作が設定されたシャードストアで利用可能になる。
【００２６】
更なる実施形態によれば、移動動作の実行中に、移動動作に関与する所定シャードストアおよび／または別のシャードストアの局所的部分範囲集合だけが移動部分範囲に基づいて更新される。
【００２７】
これにより、リバランシング動作の結果、移動動作に関与するシャードストアに対する局所的更新しか行われないため、同期化オーバーヘッドおよび待ち時間が減少する。
【００２８】
更なる実施形態によれば、移動動作に関与する所定シャードストアおよび別のシャードストアは、公開局所的部分範囲集合および非公開局所的部分範囲集合を含み、本方法は更に、そのような移動動作の実行中に、
−所定シャードストアが移動部分範囲に基づいて自身の公開局所的部分範囲集合を更新するステップと、
−所定シャードストアが移動シャードを別のシャードストアへ送信するステップと、
−別のシャードストアが所定シャードストアから移動シャードを受信するステップと、
−移動シャードが正しく受信された場合、別のシャードストアが、
−自身の公開局所的部分範囲集合および自身の非公開局所的部分範囲集合の両方を移動部分範囲に基づいて更新するステップと、
−所定シャードストアに移動肯定応答メッセージを送信するステップと、
−所定シャードストアが別のシャードストアから前記移動肯定応答メッセージを受信した場合、所定シャードストアが自身の非公開局所的部分範囲集合を更新し、所定シャードストアが移動シャードを削除するステップと含んでいる。
【００２９】
これにより、結果的に頻繁な移動動作が生じる自動化された動的なリバランシング動作を伴う大規模分散データベースにおいても、最高度の利用可能性および整合性を保証する、実装が簡単、堅牢且つ効率的な移動動作が実現される。
【００３０】
更なる実施形態によれば、所定シャードストアが、移動動作を実行してから所定時間後に、自身の公開局所的部分範囲集合が、自身の非公開局所的部分範囲集合とは異なることを検知した場合、所定シャードストアは移動シャードを別のシャードストアへ再送信する。
【００３１】
これにより、例えばネットワーク障害により、または移動動作に関与するシャードストアが一時的に利用できないために、移動動作が中断された場合であっても、整合性を保証する効率的な機構が提供される。シャードストアは、ネットワークまたは他のシャードストアの動作状態に関する状態情報を認識している必要がなく、移動動作の再試行が必要であるか否かを評価するために自身の公開局所的部分範囲集合および自身の非公開局所的部分範囲集合の形式で局所的情報に依存することができる。
【００３２】
更なる実施形態によれば、別のシャードストアに対して、自身の公開局所的部分範囲集合に既に存在する移動部分範囲を有する所定シャードストアにより移動シャードが提供されている場合、別のシャードストアは、移動シャードを受信することなく所定シャードストアに対して移動肯定応答メッセージを送信する。
【００３３】
これにより、特に、移動動作の目的地である別のシャードストアが移動シャードを正しく受信したが、後続の移動肯定応答メッセージが所定シャードストアに到達しなかった状況で、効率的なリバランシング動作が保証される。所定シャードストアが次いで移動動作を再試行した場合、別のシャードストアは、正常な移動動作の実行中と同一の機構を有する所定シャードストアに対して移動シャードの存在を確認するが、同一の移動動作を反復的な取扱いに一切の不要なリソースを消費することはない。
【００３４】
更なる実施形態によれば、移動シャードは、所定シャードストアのシャードの少なくとも一部を含むように生成される。
【００３５】
更なる実施形態によれば、移動動作の各々の移動シャードのサイズが所定の移動サイズ閾値以下であるように、複数の移動動作が移動ジョブに基づいて生成され、当該移動ジョブは、当該複数の移動動作により、
−移動ジョブキー範囲、
−キーの移動ジョブ量、および／または
−データの移動ジョブサイズ
の移動が完了すまで全てのデータを所定シャードストアから別のシャードストアへ移動させるリクエストを含んでいる。
【００３６】
更なる実施形態によれば、所定シャードについて、当該所定シャードの局所的部分範囲に隣接する局所的部分範囲を有する同一シャードストアで別のシャードが利用可能であることが検知された場合、当該所定シャードは当該別のシャードにマージされてマージ済みシャードを形成すると共に、局所的部分範囲集合が、所定シャードの隣接する局所的部分範囲および別のシャードの両方を、マージ済みシャードのマージ済み局所的部分範囲にマージすることにより更新される。好適には、所定シャードのサイズはマージするサイズ閾値を超えない。好適には、マージサイズ閾値は移動サイズ閾値よりも大きい。
【００３７】
これにより、大規模分散データベースにおいても、移動動作中における堅牢性および利用可能性を最適化すべく多数の小さい移動シャードを伴うリバランシング動作を、シャードストアに局所的に格納されたシャードに関する知識だけを必要とする仕方で、シャードを動的に成長させる自動メカニズムと組み合せることにより、単一のシャード動作の割合が改善し、これに応じて性能向上が実現できる。
【００３８】
本発明の第２の態様によれば、プロセッサにより実行された場合に本発明の第１の態様による方法を実行すべく適合されたソフトウェアコードを含むコンピュータプログラムが提供される。
【００３９】
本発明の第３の態様によれば、本発明の第２の態様によるコンピュータプログラムを含む計算機可読記憶媒体が提供される。
【図面の簡単な説明】
【００４０】
【図１】本発明によるデータベースの動的シャーディングを行うコンピュータ実装された方法を実装するのに適したシステムの一実施形態を模式的に示す。
【図２】図１のシステムを動作させる方法の一実施形態を模式的に示す。
【図３】図１の実施形態を代替する、シャードルータを含む一実施形態を模式的に示す。
【図４】図３のシステムを動作させる方法の一実施形態を模式的に示す。
【図５】移動動作の模式的表現を示す。
【図６】図３のシステムを動作させる方法の代替的な実施形態を模式的に示す。
【図７】移動動作中における局所的部分範囲集合の公開および非公開バージョンを含む代替的な実施形態を模式的に示す。
【発明を実施するための形態】
【実施例】
【００４１】
図１に、例えば図２を参照しながら説明するデータベース１０の動的シャーディングを行うコンピュータされた実装方法を実装するのに適したシステムを示す。データベース１０は、順序付けられた大域的範囲１４に含まれるキー１２により識別可能なデータ１１を含んでいる。データベースは、例えば（特許文献６）または（特許文献７）により公知の大規模分散オブジェクトストレージシステムのメタデータを格納している適切なキー値ストアであってよく、データオブジェクトの全てのキー１２に対して、例えば冗長に符号化されたサブブロックがデータオブジェクトの検索に利用可能なストレージノードに関するデータ１１が格納されている。このような大規模分散オブジェクトストレージシステムは、既存の境界を越えて成長するため、当該システムの性能および堅牢性を向上させるニーズが増している。そのようなデータベースを格納するために例えばフラッシュストレージデバイスを含む大容量の専用且つ高性能なストレージデバイスを用いたとしても、分散オブジェクトストレージシステムが成長した場合、そのメタデータのキー値ストアも成長し、最終的にはこれらのストレージデバイスの記憶容量限度に達し、待ち時間、スループット、信頼性、粒度等の観点から可能な限り性能を保持する仕方でメタデータを複数のそのようなストレージシステムに跨って分散させることが必要になる。待ち時間とは、メタデータストアに格納された特定のデータへのアクセスに要する時間であり、典型的にはミリ秒で表される。スループットとは、メタデータストアとの間でのデータの読み出しまたは書き込み可能な速度であり、通常は１秒当たりの入力／出力動作の回数すなわちＩＯＰＳ、および／またはメガバイト／秒すなわちＭＢ／ｓで表される。粒度とは、追加的な待ち時間が一切生じない単一ユニットとして効率的にアクセス可能なデータの最も大きい集合体のサイズを指す。また信頼性とは、１個以上の記憶またはネットワーク要素が一時的に利用不可能である等、分散ストレージシステムで一般的な障害に対処する能力を指す。キー値ストアが一般に高性能データベース構造をなしているが、データベースに対して代替的な実施形態、例えばカラム、グラフ、ドキュメント等に基づくデータ構造等、他のＮｏＳＱＬ機構、あるいは例えばテーブルに基づくデータ構造も可能であることは明らかである。また、以下で詳述するデータベース１０の動的シャーディングが大規模分散オブジェクトストレージシステム用のメタデータストア環境において有利であるが、他の適当な有利なデータベースアプリケーションであっても、特に例えばインターネット検索サービス索引等、堅牢且つ高性能な大規模分散データベースを必要とする環境で本方法の恩恵を得られことは明らかである。
【００４２】
しかし、本方法は、メタデータストアによりコントローラノードが、どのストレージ要素で特定のデータオブジェクトの冗長に符号化されたサブブロックを効率的に検索できるかを判定できるようにする、例えば（特許文献６）または（特許文献７）に開示された消去符号化に基づく分散オブジェクトストレージシステムのメタデータストアに特別に有利である。これらの文献に記述されている消去符号化分散オブジェクトストレージシステムによれば、クラスタリングモジュールが、コントローラノードに集中して存在するメタデータストレージから、特定のデータオブジェクトのサブブロックがどの特定のストレージ要素に格納されているかを効率的に確認することができる。また当該システムでは、どの符号化ポリシが用いられたかを復号化モジュールが効率的に確認することができる。更に、このようなメタデータストレージではまた、データオブジェクト毎に符号化ポリシを柔軟に決定することができ、これは分散オブジェクトストレージシステムに格納された全てのデータオブジェクトについて冗長ポリシを固定する必要が無く、各々の特定のデータオブジェクトに毎に個々に設定できることを意味する。メタデータストレージのまた更なる実施形態によれば、データオブジェクトに対して格納されたメタデータがデータオブジェクトの特性、例えばバージョン情報またはデータオブジェクトの状態を含む他の適切なエントリを含んでいてもよいことは明らかである。このようなシステムにおいて、コントローラノードは複数のストレージノードを管理することができ、これらのストレージノードは例えば、低速プロセッサを含み１０または１２個の３ＴＢ  ＳＡＴＡディスクドライヴを備えた１Ｕラックマウントサーバ筐体内で３６ＴＢの記憶容量を実現している。コントローラノードは例えば、バックエンドストレージノードへの高速接続を可能にする１０Ｇｂのイーサネットネットワークインターフェース（イーサネット：登録商標）を備えている。典型的には複数のストレージノード、例えば１０個以上のストレージノードを含む１個のラックにつき１個のコントローラノードが配置されている。これらのラックのいくつかのコントローラノードは次いで、コントローラノードの利用可能性が高いクラスタに組み込むことによりストレージノードへの完全に共有されたアクセスを許すと共に、例えば複数、例えば３個の異なるＳＳＤに跨る複製により適当なレベルの冗長性を有する高性能ソリッドステートドライブすなわちＳＳＤにおいて分散メタデータストレージへのアクセスを許すことにより、例えば（特許文献３）により公知のものと同様の多数決投票システムが可能になる。これにより、数百テラバイトからゼタバイトにわたるスケーラブルな記憶容量に大域的オブジェクト名前空間容量を提供する、複数ラックに跨る単一システムのスケーラビリティを実現することができる。いくつかの実施形態によれば、分散メタデータストレージをコントローラノード自身により、あるいは例えば、複数の当該コントローラノードにより共有的に利用可能な複数のスケーラの形式で実装できることは明らかである。一般に、例えば分散メタデータストレージ等、上述のような分散データベースは、例えばメタデー���ストレージを分散して格納する上述の分散オブジェクトストレージシステムのコントローラノード用の複数のスケーラ等の複数のシャードストア２０に存在する。
【００４３】
図示するように、キー１２の順序付けられた大域的範囲１４をアルファベットの範囲［ａ，ｚ］として模式的に示し、図１の実施形態のように、本実施形態の記述を簡潔にすべく、アルファベット一文字のデータオブジェクト識別子により特に簡単な表現形式でキーに言及する。しかし、代替的な、より現実的な実施形態によれば、キー１２の順序付けられた大域的範囲１４が適当な英数字範囲、例えば多文字英数字データオブジェクト識別子の形式のキーの場合は［ａ，ｚ［を含んでいてよいことは明らかであり、キー１２の順序付けられた大域的範囲１４は、アルファベット順に順序付けることができ、標準的なリクエストにおいて、例えばクラウドストレージサービスのユーザーにより選択されたコンテナに格納されたアルファベット順の最初の５０個のデータオブジェクトへのリンクを含むウェブページを表すようなアルファベット順に順序付けられたデータオブジェクトの部分集合の検索に用いられる場合が多い。しかし、データベースの全てのキーを含むのに適した他の任意の適当に順序付けられた閉または開端範囲も可能であることは明らかである。多文字英数字キーの場合、範囲を例えば、空文字列から始まって正無限大まで開端である右側開端範囲を意味する［“、＋ｉｎｆ［のように表すことができ、これは実際にはデータベースシステムの環境内で実現可能なキー１２の最大値を意味する。例えば対応する順序付けアルゴリズムにより所定の順序付け関係をキーに持たせることが可能な限り、大域的範囲は、例えば自身の最小および／または最大許容可能キー値により画定することができ、または当該範囲の一方または両側が開端である場合（データベースにより頻繁におよび／または最小の待ち時間で実行する必要がある標準的なリクエストにおいてキーが提示される仕方に好適に対応する）は単にデータベースのキー同士の順序付けられた関係を確立する所定のアルゴリズムにより画定することができる。これは従って、キーが、完全な順序関係が定義された集合の要素であることを意味する。他の適当な実施形態は例えば、英数字範囲、例えば１０進範囲、１６進範囲、２進範囲等の数値範囲、適当な順序付けアルゴリズムが定義可能である限り、そのような範囲の任意の適当な組合せをも含んでいてよい。
【００４４】
図１に示すように、これらの複数のシャードストア２０が提供される。各々のシャードストアはシャードストア識別子２２を含んでいる。図示するように、第１のシャードストア２０はシャードストア識別子２０．１を含み、第２のシャードストア２０はシャードストア識別子２０．２を含んでいる。これらのシャードストア２０は、１個以上の適当な高性能ストレージデバイス、例えばＳＳＤまたは他の任意の適当な形式または組合せのストレージデバイス格納された適当なデータ構造、多くの場合はデータベース構造へのアクセスを行うコンピュータ装置である。一般に、シャードストア２０の各々が、例えば格納されたデータの量がコンピュータ装置に存在する全てのストレージデバイス例えば上述のようにコントローラノードまたはスケーラで利用できる全てのＳＳＤの最大容量に達した場合に到達される記憶容量制限により制限されていることは明らかである。しかし、記憶容量がそのような複数のコンピュータ装置で共有されてスケーリングされている実施形態においても、同様に結局は記憶容量制限に達してそのような共有アクセスに関する性能低下がもはや受容不可能になる。好適には、シャードストアは、局所的で高スループットのデータバスを介して自身のストレージデバイスへの高性能で低レベルのアクセスを許し、１秒当たり最大レベルお入出力動作を可能にする。
【００４５】
図１に更に示すように、複数のシャード３０が提供される。各シャード３０は、局所的部分範囲４０内の少なくとも１個のキー１２が指すデータ１１を求めるリクエスト１３を扱う。これは、各シャード３０が、キー１２が局所的部分範囲４０にあるデータベース１０のデータ１１の部分集合の読み出しおよび格納リクエストを扱うことを意味する。同図示するように、シャードストア識別子２０．１が付されたシャードストア２０に格納されたシャード３０の局所的部分範囲４０を［ａ，ｄ）と表現する。当該局所的部分範囲４０は従って、ａから始まりｚまで含む全てのアルファベット順に順序付けられたキーを含む大域的範囲１４［ａ，ｚ］のａから始まりｄを除く全てのアルファベット順に順序付けられたキーを含む順序付けられた部分範囲を含んでいる。シャードストア識別子２０．２が付されたシャードストア２０に格納されたシャード３０の局所的部分範囲４０を［ｄ，ｇ）および［ｉ，ｎ）と表現する。この局所的部分範囲４０は従って、各々ｄから始まってｇを除く、且つ各々ａから始まってｚを除く全てのアルファベット順に順序付けられたキーを含む順序付けられた大域的範囲１４［ａ，ｚ］のｉから始まってｎを除く全てのアルファベット順に順序付けられたキーを含む順序付けられた部分範囲を含んでいる。シャード３０の局所的部分範囲同士の共通部分がないこと、およびシャード３０の全ての局所的部分範囲が隣接していることは明らかであって、データベース１０に格納されている全てのキー１２を特定のシャード３０の局所的部分範囲４０に割り当てることができることを意味する。これは従って、簡潔のため図１には示していないが、他のシャード３０が、識別子２０．１および２０．２が付されたシャードストア２０のシャード３０に覆われていない順序付けられた大域的範囲１４の全ての部分範囲を覆う局所的部分範囲を含んでいる筈であることを意味する。図示するように、シャードストア２０のシャード３０は、単一のシャード３０が単一のシャードストア２０を越えて延在しないように提供される。これは一般に、大多数のシャード２０がこれら１個以上のシャード３０を格納するが、いくつかのシャードストア２０がシャード３０を含まない可能性もある。これは例えば、現時点では記憶容量が未だ使用されていないシステムで１個以上のシャードストア２０が利用できる場合、または代替的に１個以上のシャードストア２０が依然としてシステムで利用できるが、近い将来システムから切り離される定になっている場合である。
【００４６】
図１に示すように、各々のシャードストア２０は局所的部分範囲集合４２を含んでいる。当該局所的部分範囲集合４２は、自身の対応するシャードストア２０に格納されたシャード３０の１個以上の局所的部分範囲４０を含んでいる。図示するように、シャードストア識別子２０．１が付されたシャードストア２０の局所的部分範囲集合４２は従って、自身の単一シャード３０の局所的部分範囲４０［ａ，ｄ）を含んでいる。シャードストア識別子２０．２が付されたシャードストア２０の局所的部分範囲集合４２は、自身の両方のシャード３０の両方の局所的部分範囲４０［ｄ，ｆ）および［Ｉ，ｎ）を含んでいる。図示する例が例示目的に過ぎず、任意の適当な個数のシャード３０を含む任意の適当な個数のシャードストア２０が用意されていてよく、従って対応する局所的部分範囲集合４２が、自身に格納された適当な個数の局所的部分範囲４０を含んでいてよいことは明らかである。同図に示すように、各々のシャード３０は、例えばアルファベットのデータオブジェクト識別子であるキー１２、および例えば当該データオブジェクトの冗長に符号化されたサブブロックが格納された分散ストレージデバイスのストレージノードのストレージノード識別子のリストを渡す当該データオブジェクトに関するメタデータである相関付けられたデータ１１を含むキー値ストアまたは別の適当なデータベース構造を含んでいる。これにより、シャードストア２０．１に格納されたシャード３０は従って、例えばａ、ｃ等、自身の局所的部分範囲４０［ａ，ｄ）内のキー１２を含むデータベース１０の部分集合を含んでいる。好適には、キー１２およびそれらと相関付けられたデータ１１の当該部分集合は、順序付けられたリスト、シーケンス、１個のノードが２個以上の子ノードを有することができる二分探索木の一般化である例えばＢ木等の木データ構造、またはクライアントアプリケーション１からのリクエスト１３に応答して連続的なキー１２およびそれらの対応するデータ１１をシャード３０から適当に選択する他の適当な構造の形式で、これらのシャード３０に格納されるかまたはそこから効率的に検索することができる。
【００４７】
図１に示すように、全てのシャードストア３０は、好適にはデータセンターで利用可能な高速ネットワークである適当なネットワーク３に接続可能である。しかし、データベースが複数の地理的に分散したデータセンターに跨って分散している場合があるため、当該ネットワーク３もまた、これらの異なるデータセンター間の外部ネットワークリンク、例えば適当なインターネット接続を含んでいてよい。更に詳細に図示するように、クライアントアプリケーション１は、例えばクラウドストレージシステムのウェブベースのユーザーインターフェースにアクセスしているユーザーの適当なＡＰＩインターフェースまたはブラウザであって、同様に例えばインターネット接続等の適当なネットワーク接続２により、当該ネットワーク３に接続されている。当該クライアントアプリケーション１が、一般に１個以上のキー１２が指すデータ１１の分散データベースにリクエストを発行する必要がある機能性を提供する限り任意の適当なアプリケーションまたはシステムの任意の適当なレベルのモジュールであってよいことは明らかである。
【００４８】
図１に示すように、そのようなリクエスト１３‘ｇｅｔ（‘ｆ’）’が、例えばキー‘ｆ’のデータ１１の検索リクエストを含んでいるが、他の適当なリクエスト、例えばデータベース１０の１個以上のキー１２が指すデータ１１を作成、更新、削除、一覧表示する等のリクエストが発行されてもよいことは明らかである。図示するように、キー‘ｆ’のデータ１１の当該検索リクエスト１３は、クライアントアプリケーション１によりシャードストア２０．１に渡される。図３を参照しながら以下により詳細に述べるように、クライアントアプリケーション１は、どのシャードストアにリクエストを送信するかを選択するのに適したルータを用いてもよいが、動的にスケーラブルである大規模分散データベースでは、そのようなシステムは既に陳腐化している恐れがあり、当該システムの信頼性が高い大域的状態を評価することに伴う待ち時間はもはや受容できないであろう。従って、図１の特に簡単な実施形態によれば、単にリクエスト１３を利用可能なシャードストア２０の１個に対して発行するだけで、クライアントアプリケーション１が利用できるシャードストア３０に関する局所的状態情報が存在しない時点でリクエストを開始することさえできる。図１に示すように、検索リクエスト１３を受信している当該所定シャードストア２０はシャードストア識別子２２として２０．１を含み、これは図２に示す方法のステップ１０２に対応する。次いでステップ１０４において、当該所定シャードストア２０．１は、自身の局所的部分範囲集合４２により、当該少なくとも１個のキー１２が、当該所定シャードストア２０．１に格納されたシャード３０の局所的部分範囲４０に存在するか否かを検証することになる。図１に示すように、局所的部分範囲集合４２は、リクエスト１３のキーの‘ｆ’を含まない１個の局所的部分範囲４０［ａ，ｄ）だけを含んでいる。これは従って、リクエスト１３が、当該所定シャードストア２０．１に格納されたシャード３０の局所的部分範囲４０に存在しない少なくとも１個のキー１２に関係するため、図２の方法がステップ１０８へ進むことを意味する。ステップ１０８において、シャードストア２０．１は、当該所定シャードストア２０．１の局所的部分範囲集合４２を含むメッセージ６０を返送する。本実施形態において、クライアントアプリケーション１は次いで、シャードストア２０．１が、自身の局所的部分範囲集合内で定義された局所的部分範囲４０［ａ，ｄ）のキー１２が指すデータ１１を有するシャード３０だけを含んでいるという事実を認識させられる。以下でより詳細に述べるように、メッセージ６０および／または局所的部分範囲集合４２が、局所的部分範囲４０以外に追加的な情報を含んでいてよいことは明らかである。メッセージ６０は、例えば“２０．１［ａ：２０．１：ｄ：．．．：ｚ］”のように表現できるため、“２０．１：”はメッセージ６０を送信するシャードストアのシャードストア識別子２２を示し、“［ａ：２０．１：ｄ”は局所的部分範囲４０［ａ，ｄ）を示し、“：．．．：ｚ］”は、シャードストア２０．１が自身の局所的部分範囲集合４２に利用可能な情報を有していない順序付けられた大域的範囲１４の一部を示す。図２により詳細に示すように、本実施形態によれば、ステップ１１０において、リクエスト１３は次いで別のシャードストア２０、例えばシャードストア２０．２に渡されてよい。図１に示すように、メッセージ６０が渡され、従ってこれに応答してリクエスト１３を別のシャードストアに対して発行する可能性が最も高いのはクライアントアプリケーション１であるが、代替的な実施形態によれば、以前にリクエストを受信した他の構成要素またはモジュールあるいはシャードストアもまた、別のシャードストア２０に対するリクエスト１３の発信者になり得ることは明らかであり、また以下でより詳細に述べるように、メッセージ６０を例えば１個以上の他のシャードストア２０、ルータ等、クライアントアプリケーション１以外のエンティティまたはモジュールへ送信できることも明らかである。
【００４９】
図２のステップ１１０でシャードストア２０．２にキー‘ｆ’に対する検索リクエスト１３が渡された場合、再びステップ１０４へ進み、自身の局所的部分範囲集合４２により、当該キー１２が当該所定シャードストア２０．２に格納されたシャード３０の局所的部分範囲４０に存在するか否かを検証する。図１に示すように、局所的部分範囲集合４２は、２個の局所的部分範囲４０［ｄ，ｇ）および［ｉ，ｎ）を含み、そのうち１個［ｄ，ｇ）が検索リクエスト１３のキー‘ｆ’を含んでいる。これは従って、図２の方法がステップ１０６へ進んでシャードストア２０．２が、例えば局所的部分範囲［ｄ，ｇ）のシャード３０のシャードストア２０．２に格納されたキー‘ｆ’に関するデータ１１を渡すことにより、リクエスト１３を実行して、例えばクライアントアプリケーション１に、あるいは他の任意の適当なエンティティまたはモジュールに対して、例えばキー‘ｇ’の形式のデータオブジェクト識別子により識別されるデータオブジェクトの冗長に符号化された分割ブロックを検索すべくストレージノードの識別子を渡すことを意味する。
【００５０】
図３に、図１と同様であるが追加的にシャードルータを含む実施形態を模式的に示し、図４に、図３の実施形態を動作させる方法の一実施形態を模式的に示す。例えばデータベース１０、シャード３０、シャードストア２０等に関係する同様の要素は同一の参照符号で示しており、図１に関して上で述べた詳細な説明は図４の動作方法の説明に必要な程度だけ詳細に繰り返す。図３に示すように、同一の例示的データベース１０に、ａから始まってｚを含む全てのアルファベット順に順序付けられたキーを含む順序付けられた大域的範囲１４［ａ，ｚ］が用意されていて、同一のシャードストア２０が、キー１２が図１と同一の各局所的部分範囲４０に存在するデータベース１０のデータ１１の部分集合を求める読み出しおよび格納リクエストを扱う同一のシャード３０を格納している。従って、これらのシャードストア２０が図１に関して上で述べたものと同一の局所的部分範囲集合４２を含んでいることは明らかである。しかし、ここではクライアントアプリケーション１は、例えばインターネット等の適当なネットワーク接続２によりシャードルータ５０に接続されている。当該シャードルータ５０は、適当なネットワーク接続３によりシャードストア２０に接続可能であり、例えば分散オブジェクトストアのメタデータを分散的に格納する上述の分散オブジェクトストレージデバイスの複数のコントローラノード用の１個以上のスケーラで動作する適当なモジュールとして実装することができる。示すように、ここではシャードルータ５０が、図１に関して上で述べたように検索リクエスト‘ｇｅｔ（‘ｆ）’の形式でクライアントアプリケーション１により発行された少なくとも１個のキー１２が指すデータ１１を求めるリクエスト１３を扱う。示すように、当該リクエスト１３は、クライアントアプリケーション１によりシャードルータ５０に渡されるが、一般に他の任意の適当なアプリケーションまたはモジュールでも可能であることは明らかである。
【００５１】
図３に示すように、シャードルータ５０には大域的部分範囲集合５２が提供される。‘ａ：２０．１：ｇ：．．．：ｉ：２０．２：ｎ：．．．：ｚ’と表現された当該大域的部分範囲集合５２は、順序付けられた大域的範囲１４の大域的部分範囲５４をシャードストア識別子２２と相関付ける。これにより、局所的部分範囲集合に関して上述したのと同様に、この表現は、順序付けられた大域的範囲１４‘［ａ，ｚ］’の大域的部分範囲５４‘［ａ，ｇ）’とシャードストア識別子２２‘２０．１’との間の相互関係を示す。これは同様に、順序付けられた大域的範囲１４‘［ａ，ｚ］’の大域的部分範囲５４‘［ｉ，ｍ）’とシャードストア識別子２２‘２０．２’ との間の相互関係を示す。‘ｇ：．．．：ｎ’は、大域的部分範囲５４についてシャードルータ５０が利用できる情報が存在しないことを示す。当該大域的部分範囲５４は例えば、シャードルータ５０に格納されたまたはシャードルータ５０に渡された以前の情報の結果であってよいが、以下により詳細に述べるように、図３に模式的に示すように、システムの状態に関して現時点では陳腐化している。キー‘ｆ’のデータ１１を求めるクライアントアプリケーション１からのリクエスト１３‘ｇｅｔ（‘ｆ’）’が図４のステップ２０２でシャードルータ５０に渡されるため、シャードルータ５０は、図４のステップ２０４に対応して、当該キー１２‘ｆ’を含む大域的部分範囲５４と相関付けられたシャードストア識別子２２を決定する。図３に示すケースでは、これは従って、大域的部分範囲５４［ａ，ｇ）が表現‘［ａ：２０．１：ｇ’から導かれるシャードストア識別子２０．１と相関付けられていて、シャードルータ５０が、当該リクエスト１３‘２０．１：ｇｅｔ（‘ｆ’）’を当該相関付けられたシャードストア識別子２０．１の当該所定シャードストア２０に提供することを意味する。当該所定シャードストア２０．１は次いでステップ２０６において、自身の局所的部分範囲集合４２により、当該キー１２‘ｆ’が当該所定シャードストア２０に格納されたシャード３０の局所的部分範囲４０に存在する否かを検証する。キー‘ｆ’が当該所定シャードストア２０．１の局所的部分範囲集合４２の唯一の局所的部分範囲４０［ａ，ｄ）に存在しないため、本方法はステップ２１０へ進んで所定シャードストア２０．１が、自身の局所的部分範囲集合４２を含むメッセージ６０をシャードルータ５０に返送する。例えば以下により詳細に述べるように、メッセージ６０および／または局所的部分範囲集合４２は、局所的部分範囲４０以外に追加的に情報を含んでいてよい。ステップ２１２において、シャードルータ５０は次いで、所定シャードストア２０のシャードストア識別子２２を、当該メッセージ６０の局所的部分範囲集合４２の局所的部分範囲４０に対応する大域的部分範囲５４と相関付けることにより、当該メッセージ６０に基づいて自身の大域的部分範囲集合５２を更新する。図示するように、例えば‘［ａ２０．１：ｄ：．．．：ｚ］’と表現できるシャードストア２０．１の局所的部分範囲集合４２から、シャードルータ５０の大域的部分範囲集合５２の陳腐化した情報に以前提供されていたようにシャードストア２０．１が部��範囲［ｄ：ｇ）のシャード３０を含んでいないことが明らかなため、図３における大域的部分範囲集合５２は次いで‘［ａ：２０．１：ｇ：．．．：ｉ：２０．２：ｎ：．．．：ｚ］’から‘［ａ：２０．１：ｄ：．．．：ｇ：．．．：ｉ：２０．２：ｎ：．．．：ｚ］’に変更される。
【００５２】
図４に更に示すように、本実施形態によれば、ステップ２１４において、リクエスト１３は次いで別のシャードストア２０、例えばシャードストア２０．２に渡されてよい。図３に示すように、メッセージ６０が渡され、従ってこれに応答してクエスト１３を別のシャードストア２０に対して発行する可能性が最も高いのはシャードルータ５０であるが、代替的な実施形態によれば、シャードルータ５０から以前にリクエスト１３を受信した他の構成要素またはモジュールあるいはシャードストア２０．１もまた、別のシャードストア２０に対するリクエスト１３の発信者になり得ることは明らかであり、また、メッセージ６０を、例えば１個以上の他のシャードストア２０、クライアントアプリケーション１等、シャードルータ５０以外のエンティティまたはモジュールへ送信できることも明らかである。
【００５３】
図４のステップ２１４でシャードストア２０．２にキー‘ｆ’に対する検索リクエスト１３が渡された場合、再びステップ２０６へ進み、自身の局所的部分範囲集合４２により、当該キー１２が当該所定シャードストア２０．２に格納されたシャード３０の局所的部分範囲４０に存在するか否かを検証する。図３に示すように、局所的部分範囲集合４２は、２個の局所的部分範囲４０［ｄ，ｇ）および［ｉ，ｎ）を含み、そのうち１個すなわち［ｄ，ｇ）が検索リクエスト１３のキー‘ｆ’を含んでいる。これは従って、図４の方法がステップ２０８へ進んでシャードストア２０．２が、例えば局所的部分範囲［ｄ，ｇ）のシャード３０のシャードストア２０．２に格納されたキー‘ｆ’に関するデータ１１を渡すことにより、リクエスト１３を実行して、例えばシャードルータ５０またはクライアントアプリケーション１に、あるいは他の任意の適当なエンティティまたはモジュールに対して、例えばキー‘ｇ’の形式でデータオブジェクト識別子により識別されるデータオブジェクトの冗長に符号化された分割ブロックを検索すべくストレージノードの識別子を渡すことを意味する。任意選択により、図４により詳細に示すように、身の局所的部分範囲集合４２にキーを含んでいるシャードストア２０．２について、上で述べたステップ２１０および２１２と同様のステップ２１６および２１８を実行することもできる。これは、この場合も、ステップ２１６において、シャードストア２０．２が、自身の局所的部分範囲集合４２を含むメッセージ６０をシャードルータ５０に返送することを意味する。ステップ２１８において、シャードルータ５０は次いで、当該メッセージ６０に基づいて所定シャードストア２０のシャードストア識別子２２を、当該メッセージ６０の局所的部分範囲集合４２の局所的部分範囲４０に対応する大域的部分範囲５４と相関付けることにより、自身の大域的部分範囲集合５２を更新する。上述のように以前に‘［ａ：２０．１：ｄ：．．．：ｇ：．．．ｉ：２０．２：ｎ：．．．：ｚ］’に変更されたグローバルな部分範囲集合５２は従って、例えば‘［ａ：．．．：ｄ：２０．２：ｇ：．．．：ｉ：２０．２：ｎ．．．：ｚ］’と表現されたシャードストア２０．２の局所的部分範囲集合４２から、シャードストア２０．２が、シャードルータ５０の大域的部分範囲集合５２で利用できる最新の情報が存在しない部分範囲［ｄ：ｇ）に対するシャード３０を含んでいることが明らかであるため、‘［ａ：２０．１：ｄ：２０．２：ｇ：．．．：ｉ：２０．２：ｎ：．．．：ｚ］’に更に変更される。
【００５４】
一般に、所定シャードストア２０の局所的部分範囲集合４２を含むメッセージ６０に応答してシャードルータ５０の大域的部分範囲集合５２を更新する処理は、
−大域的部分範囲集合５２から、メッセージ６０の局所的部分範囲４０として局所的部分範囲集合４２に存在しない当該所定シャードストア２０のシャードストア識別子２２と相関付けられた大域的部分範囲５４があればこれを除去するステップと、
−大域的部分範囲集合５２に、メッセージ６０の局所的部分範囲集合４２の局所的部分範囲４０を、当該所定シャードストア２０のシャードストア識別子２２と相関付けられた大域的部分範囲５４として追加するステップとを含んでいる。特定の実施形態によれば、このような除去および追加を、例えば既存の大域的部分範囲５４がメッセージの受信された局所的部分範囲４０と重なる場合にこれらを更新する１個の更新動作として組み合わせ可能であること、またはこのような除去および追加を、例えば受信された局所的部分範囲と同一であることが検知された大域的部分範囲５４について既存の大域的部分範囲５４を修正しない動作として実行可能であること、あるいはこのような除去および追加を、メッセージ６０の局所的部分範囲集合４２に関して必要な場合に大域的部分範囲集合５２を効率的に更新する他の任意の適当な動作として実装可能であることは明らかである。
【００５５】
図５に、移動動作８０の模式的表現を示す。データベース１０の左側の表現は移動動作８０を行う前の自身の状態を示し、右側は同一データベース１０の移動動作８０の後の状態を示す。図５に示すように、移動動作８０の実行中に、シャードストア２０．１に部分範囲［ａ，ｇ）を有するシャード３０の順序付けられた部分集合が移動させられる。移動シャード７２と称される当該順序付けられた部分集合はまたフリンジ７２とも称され、所定シャードストア２０．１から別のシャードストア２０．２への移動部分範囲７０またはフリンジ部分範囲７０と称される部分範囲［ｄ，ｇ）内の全てのキー１２が指すデータ１１を含んでいる。当該移動動作８０は例えば、各々のシャード３０が自身の部分範囲４０内のキーが指すデータ１１を受信する際に動的に成長するにつれて、異なるシャードストア２０の中の記憶容量をリバランシングすべく実行可能である。しかし図５に示すように、当該移動動作は、移動部分範囲７０および対応する移動シャード７２が、シャードに格納されたシャード３０の順序付けられた部分集合はストア２０である状況を想定しており、あるシャードストアの全てのシャード３０を別のシャードストアへ移動させることも可能であるため、移動シャード７２は当該シャード３０と同一であり、且つ移動部分範囲７０は当該シャード３０の部分範囲４０と同一である。図５に示すように、移動動作を行う前は、所定シャードストア２０．１の局所的部分範囲集合４２は局所的部分範囲４０［ａ，ｇ）を含み、別のシャードのストア２０．２の局所的部分範囲集合４２は局所的部分範囲４０［ｉ，ｎ）を含んでいる。更に図示するように、移動動作８０の後で、移動部分範囲７０［ｄ，ｇ）はもはや、所定シャードストア２０．１の局所的部分範囲集合４２からの局所的部分範囲４０としては存在しない。局所的部分範囲集合４２は現時点で局所的部分範囲４０［ａ，ｄ）を含んでいる。以下により詳細に述べように、移動部分範囲７０［ｄ，ｇ）は現時点で、所定シャードストア２０．１の局所的部分範囲集合４２に含まれる外部部分範囲集合４６に追加されている外部部分範囲４４［ｄ，ｇ）として追加されている。同図に示すように、外部部分範囲４４［ｄ，ｇ）は、移動シャード７２の移動先である別のシャードストア２０．２のシャードストア識別子２２‘２０．２’と相関付けられている。また、移動部分範囲７０［ｄ，ｇ）を有する移動シャード７２の所定シャードストア２０．１から別のシャードストア２０．２への移動動作８０の結果、移動部分範囲７０［ｄ，ｇ）が局所的部分範囲４０として別のシャードストア２０の局所的部分範囲集合４２に追加される。移動動作８０の実行中、移動動作８０に関与する所定シャードストア２０および別のシャードストア２０の局所的部分範囲集合４２だけが移動部分範囲７０に基づいて更新される。これは特に、移動動作に関与するシャードストアだけが、同期化メッセージが増大し応答性および利用可能性が低下する他のシャードストアまたは中央管理サービスとの更なる同期化を必要とせずに自身の局所的状態を更新するため、例えば利用可能なシャードストア間でより記憶容量を効率的に再分散すべく移動動作の自動実行を生起させる動的シャーディングが可能な大規模分散データベースシステムの環境において有益である。上述の方法によれば、リクエストを扱い続けるには移動動作に関与するシャードストアの局所的部分範囲だけを更新すれば充分であることが明らかである。陳腐化した情報があれば、当該リクエストと関連性があるシャードストアの局所的部分範囲集合の局所的部分範囲と同期化される。従って、同期化オーバーヘッドが抑制され、実際のリクエストを扱うために必要なものに最適化される一方、例えば上述の移動動作のように、受容できない待ち時間が生じることなくシステムの最新の大域的状態を得るのが困難な大規模分散データベース環境においても、任意の分散リバランシング動作を扱うのに充分堅牢である。
【００５６】
図５に示すように、所定シャードストア２０．１の局所的部分範囲集合４２は、移動動作の後の状態において、外部部分範囲集合４６を更に含んでいる。当該外部部分範囲集合４６は、自身の各シャードストア識別子２２“２０．２”と相関付けられた他のシャードストア２０．２に格納されたシャード３０の外部部分範囲４４“［ｄ，ｇ）”を含んでいる。外部部分範囲集合４６が１個のシャードストア識別子２２だけと相関付けられた１個の外部部分範囲４４だけを含むものとして図示しているが、代替的な実施形態によれば、外部部分範囲集合４６が、例えば複数の以前の移動動作の結果として、または他のシャードストア２０のシャード３０または局所的部分範囲４０に関する情報を所定シャードストア２０．１が収集することができた他の任意の適当な仕方で収集された任意の適当な個数の対応するシャードストア識別子２２と相関付けられた任意の適当な個数の外部部分範囲４４を含んでいてよいことは明らかである。当該外部部分範囲集合４６は従って、シャードストア２０の局所的部分範囲集合の局所的部分範囲４０にもはや存在しないキーを求めるリクエスト１３がシャードストア２０へ送信された場合に、別のシャードストア２０への効率的なルーティングを可能にする。そのような最適化された方法の一例を図６に示すが、これは追加ステップ２２０、２２２を除いて図４に示すものと同様である。既に上で説明したステップは同一参照番号で識別され、これらの追加ステップに関して必要な場合に限り繰り返し説明する。図６に示すように、図５のシャードストア２０．１の移動動作後の状態において、シャードストア２０が、自身が格納するシャードの局所的部分範囲４０のいずれにも存在しないキー１２を求めるリクエスト、例えば局所的部分範囲集合の局所的部分範囲４０［ａ，ｄ）に存在しないキー‘ｆ’を求めるリクエストを扱う場合、本方法はステップ２０２、２０４および２０６からステップ２１０へ進み、上述のようにシャードストア２０．１が局所的部分範囲集合４２を含むメッセージ６０を返送する。ここで当該局所的部分範囲集合４２が外部部分範囲４４‘［ｄ，ｇ）’を有する外部部分範囲集合４６を含んでいることは明らかである。新たなステップ２２０において、例えばシャードルータ５０は、リクエスト１３のキー１２が当該局所的部分範囲集合４２の外部部分範囲集合４６の所定の外部部分範囲４４に含まれているか否かを検証する。これは、キー‘ｆ’を求めるリクエストのケースではキー‘ｆ’が外部部分範囲４４‘［ｄ，ｇ）’に存在するため成立する。外部部分範囲４４は、図５に示すようと相関付けられたシャードストア識別子２２として“２０．２”を有している。ステップ２２２において、当該シャードストア識別子‘２０．２’を用いて、ステップ２１４で続いてリクエスト１３を渡すのに用いる別のシャードストア２０を選択する。
【００５７】
この状況において任意選択により、リクエストのキー１２が当該所定シャードストア２０の局所的部分範囲４０に存在しない場合、シャードルータ５０が、自身の大域的部分範囲集合５２を更新すべくメッセージ６０の局所的部分範囲集合４２の局所的部分範囲４０を用いることに加え、別のシャードストア２０のシャードストア識別子２２をメッセージ６０の外部部分範囲集合４６の所定の外部部分範囲４４に対応する大域的部分範囲５４と相関付けることにより、自身の大域的部分範囲集合５２をも更に更新することは有益であろう。この場合、図３で説明したものと同じ例を参照するに、これは、ステップ２１２において外部部分範囲４４‘［ｄ：２０．２：ｇ’も考慮に入れられるため、大域的部分範囲集合５２もまた’［ａ：２０．１：ｇ：．．．：ｉ：２０．２：ｎ：．．．：ｚ］’から‘［ａ：２０．１：ｄ：２０．２：ｇ：．．．：ｉ：２０．２：ｎ：．．．：ｚ］’に更新されることを意味する。このような更新は後述するように堅牢な仕方で実行することができる。その理由は、リクエストが当該別のシャードストア２０．２へルーティングされたときに、当該リクエストが自身の局所的部分範囲集合に関して検証され、当該リクエストが正しくないかまたは陳腐化している場合、大域的部分範囲集合の更なる更新がなされるためである。しかし、当該リクエストが正しければ、シャードルータ５０に到達しているシャードストア２０．１の当該外部部分範囲４４のキーに対する全てのリクエストは既により最適に別のシャードストア２０．２へルーティングされているであろう。上で述べたのと同様に、局所的部分範囲集合４２の図５の表現は模式的に過ぎず、任意の適当な表を用いてよい。移動動作の後の２０．１の局所的部分範囲集合は例えば、大域的部分範囲集合について上で述べたのと同様に‘［ａ：２０．１：ｄ：２０．２：ｇ：．．．：ｚ］’と表現することができ、ここに‘［ａ：２０．１：ｄ’は所定シャードストア２０．１のシャードストア識別子を含むため局所的部分範囲［ａ，ｄ）を表し、‘［ｄ：２０．２：ｇ’は別のシャードストア２０．２のシャードストア識別子と相関付けられた外部部分範囲［ｄ，ｇ）を表し、‘［ｇ：．．．：ｎ’は、順序付けられた大域的範囲の当該部分範囲のシャードストア２０．１で利用できる情報が存在しないことを示す。
【００５８】
特に所定シャードストア２０．１および別のシャードストア２０．２が例えば図５に関して上で述べた移動動作８０に関与する状況で、システムの堅牢性を更に向上させるべく、各々のシャードストア２０は、局所的部分範囲集合４２の２個のバージョン、すなわち公開および非公開バージョンを含んでいる。公開局所的部分範囲集合４２ＰＵは上述のように、リクエスト１３を扱い且つメッセージ６０を送信するために外部に露出されたバージョンである。非公開局所的部分範囲集合４２ＰＲは、以下により詳細に述べるように、シャードストア２０以外の他の構成要素からはアクセスできないようになっている。さもなければ、シャードストアの公開局所的部分範囲集合４２ＰＵおよび非公開局所的部分範囲集合４２ＰＲの構造および内容の両方が上述のように、一般に自身の対応するシャードストア２０に格納されたシャード３０の１個以上の局所的部分範囲４０を含み、任意選択により１個以上の外部部分範囲４４を含む外部部分範囲集合４６をも含む局所的部分範囲集合４２に類似している。図７に、図５に関して説明したものと同様の移動動作８０の実行中における両方のシャードストア２０．１および２０．２の公開局所的部分範囲集合４２ＰＵおよび非公開局所的部分範囲集合４２ＰＲを模式的に示し、移動部分範囲７０［ｄ，ｇ）を有する移動シャード７２が所定シャードストア２０．１から別のシャードストア２０．２へ移動される。同図に示すように、移動動作８０の実行中に、第１のステップ３０２において、所定シャードストア２０．１が、移動部分範囲７０‘［ｄ：２０．２：ｇ’に基づいて自身の公開局所的部分範囲集合４２ＰＵを‘２０．１ＰＵ−＞［ａ：２０．１：ｇ：．．．：ｚ］’から‘２０．１ＰＵ−＞［ａ：２０．１：ｄ：２０．２：ｇ：．．．：ｚ］’に更新し、これは従って、移動部分範囲が局所的部分範囲４０として除去されて、外部部分範囲４４として追加されることを意味する。次いで、ステップ３０４において、所定シャードストア２０．１が別のシャードストア２０．２への移動シャード７２の送信を開始し、別のシャード２０．２は、通信が首尾よく確立できたならば、所定シャードストア２０．１から移動シャード７２の受信を開始することができる。移動シャード７２が正しく受信された場合、別のシャードストア２０．２はステップ３０４において、自身の公開局所的部分範囲集合４２ＰＵおよび非公開局所的部分範囲集合４２ＰＲの両方を移動部分範囲７０に基づいて‘２０．２ＰＵ−＞［ａ：．．．：ｉ：２０．２：ｎ：．．．：ｚ］’から‘２０．２ＰＵ−＞［ａ：．．．：ｄ：２０．２：ｇ：．．．ｉ：２０．２：ｎ：．．．：ｚ］’に更新し、これは従って、移動部分範囲７０が局所的部分範囲４０として追加されることを意味する。また、別のシャードストア２０．２は次いで移動肯定応答メッセージ７４を所定シャードストア２０に送信する。所定シャードストア２０．２がステップ３０６において前記移動肯定応答メッセージ７４を別のシャードストア２０から受信した場合、所定シャードストア２０．１はまた、以前に公開バージョンを更新したのと同様の仕方で、自身の非公開局所的部分範囲集合４２ＰＲを‘２０．１ＰＵ−＞［ａ：２０．１：ｇ：．．．：ｚ］’から‘２０．１ＰＵ−＞［ａ：２０．１：ｄ：２０．２：ｇ：．．．：ｚ」’に更新する。また、所定シャードストア２０．１はまた、移動シャード７２を削除することにより、記憶容量を安全な仕方で解放する。
【００５９】
この設定により、問題が生じ得る移動動作のあらゆるステージで堅牢性が向上する。システムを不整合な状態に置いたままにすることなく、移動シャードの送信、移動シャードの受信、肯定応答等がカバーされる。これは、たとえ移動動作が失敗してもデータベースの２個以上のシャードにデータが存在しないようにすることを意味する。その理由は、同一キーによるデータベースへの二重エントリが生じ、分散データベース環境において未検知のまま残されて当該キーのデータに対する不整合な更新がなされる恐れがあるためである。従って、移動動作８０が開始されたならば直ちに、所定シャードストア２０．１の公開局所的部分範囲集合４２ＰＵに対する更新は、当該シャードストア２０．１により移動部分範囲におけるキーを求めるリクエストがもはや扱われないことを保証する。また、別のシャードストア２０．２の局所的部分範囲集合４２ＰＵおよび４２ＰＲの更新は、別のシャードストア２０．２がそのようなリクエストの扱いを開始するのは移動シャード７２が正しく受信される場合に限ることを保証する。更に、所定シャードストア２０．１の非公開局所的部分範囲集合４２ＰＲだけを更新することで、移動動作８０中に何らかの異常が生じても、外部の情報を一切必要とせずに自身の局所的状態を検証することにより当該シャードストア２０．１により検知可能であることが保証される。これにより、所定シャードストア２０．１は、移動動作８０を実行してから所定時間後に、自身の公開局所的部分範囲集合４２ＰＵが非公開局所的部分範囲集合４２ＰＲと異なることを検知した場合、当該シャードストア２０．１は、移動動作８０のいずれかのステージの実行中における障害の発生を疑うことができる。好適には、所定シャードストア２０は次いで、移動シャード７２を別のシャードストア２０．２へ再送信する。例えば移動動作に関与する両方のシャードストア間でのネットワーク接続障害、または関与するシャードストアのうち１個が一時的に利用不可能である等、移動シャード７２の送信または受信に問題があったとしても、当該問題は、移動シャード７２を送信する時点ではもはや存在せず、従って更なる移動シャードは首尾よく移動シャード７２を受信し、自身の局所的部分範囲集合を更新して、移動肯定応答メッセージ７４の送信へ進む。
【００６０】
しかし、単に移動シャード７２が別のシャードはストア２０．２で既に首尾よく受信された当該移動の肯定応答メッセージ７４の送信または受信だけが問題である場合、好適には再送信をより効率的に扱うことができる。別のシャードストア２０．２がこの状況を検知することが可能であるのは、当該別のシャードストア２０．２に対して、自身の公開局所的部分範囲集合４２ＰＵに既に存在する移動部分範囲７０を有する所定シャードストア２０．１により移動シャード７２が提供されている場合、例えば、以前に当該移動シャード７２を正しく受信したが、その後で移動肯定応答メッセージ７４が所定シャードストア２０．１に到達しなかった結果、自身の公開局所的部分範囲集合４２ＰＵが既に‘２０．２ＰＵ−＞［ａ：．．．：ｄ：２０．２：ｇ：．．．ｉ：２０．２：ｎ：．．．：ｚ］’に変更されているにも拘わらず、移動部分範囲７０‘ｄ：２０．２：ｇ’が再び提示されている場合である。この場合、別のシャードストア２０．２は好適には、移動シャード７２を受信しなくても移動肯定応答メッセージ７４を所定シャードストア２０に送信する。これは例えば、移動動作中に移動シャードを送信する場合に、移動シャードに関する情報を先行メッセージ、ヘッダ、適当な識別子、または他の任意の適当な形式で渡すことにより、別のシャードストア２０．２が当該移動シャード７２を確認した後で移動シャード７２を送受信する通信処理の開始を中断または防止できるようにすることで行える。
【００６１】
図８に示すように、リバランシング動作に関与するデータが利用不可能な期間および程度を軽減しながら、複数のシャードストア２０を跨るデータベース１０の自動化された効率的なリバランシングを整合性を保って実行可能にすべく、ステップ４０２においてシャード３０の少なくとも１個の順序付けられた部分集合を移動させる移動ジョブ８２が渡されたならば、当該移動ジョブ８２に関連付けられたシャードの順序付けられた部分集合のサイズが移動サイズ閾値９０を上回るか否かがステップ４０４において最初に確認される。当該移動ジョブ８２に関連付けられたシャードの順序付けられた部分集合が移動サイズ閾値９０を上回らない場合、本方法はステップ４０６へ進み、上で述べたのと同様に移動ジョブは移動動作８０として扱われる。移動ジョブ８２が、ステップ４０８に示すように移動サイズ閾値９０を上回るサイズのシャードの順序付けられた部分集合に関連付けられている場合、各々の移動動作８０の移動シャード７２のサイズが移動サイズ閾値９０以下であるように、前記移動ジョブ８２に基づいて複数の移動動作８０が生起する。しかし、特定の効率的な実装によれば、事前のサイズ計算を一切必要とせずに、移動ジョブ８２全体が扱われるまで、例えば１０ＭＢの移動サイズ閾値９０である所定のフリンジサイズの１個以上の移動シャード７２またはフリンジ７２を生成することにより任意の移動ジョブ８２を常に扱うことができる。移動ジョブ８２は一般に、複数の移動動作８０により、移動ジョブキー範囲、すなわち局所的部分範囲［ａ，ｄ）を有するシャード３０の順序付けられた範囲［ｂ，ｄ）におけるキーの順序付けられた部分集合の移動データ、またはキー１２の移動ジョブ量、例えば１０００００個のキーを含むシャード３０の最後の１００００個のキーの順序付けられた部分集合、あるいはシャード３０の順序付けられた部分集合の移動ジョブサイズ、例えば５ＧＢよりも大きい所定シャードストアのシャードの任意の適当な順序付けられた部分集合、を移動させるまで、シャード３０の順序付けられた部分集合を所定シャードストア２０から別のシャードストア２０へ移動させる任意の適当なリクエストであってよい。これにより、データの利用不可能性を個々の移動動作に必要な転送時間に限定しながら、分散データベースシステムの動的なリバランシングの実行中に、整合性を保って大規模および／または頻繁な移動ジョブを実行することができる。移動ジョブが例えばデータベース１０に含まれているかまたは接続されたバランサまたは別の適当なシステムあるいは適当なモジュールの制御下にあれば、移動サイズ閾値９０を例えば１０ＭＢに設定する場合に、例えばシャードの５ＧＢの順序付けられた部分集合を移動させる大規模な移動ジョブを発行する際に、結果的に生じる１０ＭＢの移動動作は、関与する両方のシャードストアの局所的状態情報を更新することにより堅牢且つ効率的に扱われるため、当該バランサは当該動作の全ての詳細な実行を追跡する必要が無い。代替的な実施形態によれば、移動サイズ閾値９０を、所定個数のキー、所定幅のキー範囲等として定義できるとは明らかである。
【００６２】
例えば上述の移動動作の結果、多数の小型シャード３０が増大するのを防止すべく、好適には分散データベースの動的なリバランシングの実行中に、所定シャード３０に対して、当該所定シャード３０の局所的部分範囲４０に隣接する局所的部分範囲４０を有する同一シャードストア２０で別のシャード３０が利用可能であることが検知された場合。隣接しているとは、例えば図９に示すように、自身の範囲の最上限または最下限値を境界として隣の範囲と共有する局所的部分範囲が、共通の境界に接触しているかまたは共有していることを意味する。局所的部分範囲［ｄ，ｅ）を有する所定シャード３０は例えば、シャードストア識別子２０．２が付されたシャードストア２０で受信された移動ジョブの実行中に生じる移動シャードである。別のシャード［ｅ，ｊ）は、両方の範囲に接する範囲制限‘ｅ’の形式で共通の境界を共有しているため、当該所定シャードに隣接することは明らかである。これはまた、‘２０．２−＞［ａ：．．．：ｄ：２０．２：ｅ：２０．２：ｊ：．．．：ｚ］’で表されるように、局所的部分範囲集合４２の状態から明らかである。マージ動作８４の実行中に、当該所定シャード３０［ｄ，ｅ）が別のシャード３０［ｅ，ｊ）とマージされてマージ済みシャード３０［ｄ，ｊ）が形成され、所定シャード３０および別のシャード３０の両方の隣接する局所的部分範囲４０’ｄ：２０．２：ｅ：２０．２：ｊを、マージ済みシャード３０のマージ済み局所的部分範囲４０“ｄ：２０．２：ｊ”にマージすることにより、局所的部分範囲集合４２が更新される。マージ動作を回数を特定のレベルに制限するために、例えばマージ動作を、好適には移動サイズ閾値９０よりも大きいマージサイズ閾値よりも小さいサイズの所定シャードに限定して、複数の小さい移動シャードを生成する複数の移動動作の結果生じて移動ジョブの後でこれらの移動シャードが再びマージされるようにすることができる。
【００６３】
上で挙げた例は単一のキーを含むリクエストの場合であるが、上述のシステムおよび方法が、複数のキーが関わるリクエストを１回のシャード検索で済ます割合を最大化する際に特に有益であることは明らかである。上で既に説明したように、そのようなリクエストは一般に、例えば、ユーザーにより頻繁に出されるリクエストの一つが、例えば特定のクラウドストレージサービスの所定のユーザーアカウントの特定のフォルダに以前にアップロードされたファイルの一覧を示している適当なコンテナの内容を順次閲覧するための順序付けられたリストの提供を求めるものである場合に、例えば大規模分散ストレージシステムの環境で生じる。このように標準的なリクエストに応答して、ユーザーに対して、例えばアルファベット順にソートされたファイル名のリストがブラウザ上で、選択されたファイルを検索するリンクと共に提示される。そのような大規模分散ストレージシステムにおいて、例えば格納された全ての内容のメタデータバランスの良い分散を実現するためにどのハッシング機能を選択すべきであるか等を事前に評価するのは困難であり、最適化されたハッシング法を選択する際に、複数キーの順序付けられたリストに対してデータを求めるリクエストが発行されたとき、そのような順序付けられたリスト内の後続キーの当該シャードは異なるシャードに割り当てられる場合が多いという事実に基づき、各キーが格納されたシャードを決定するために個々のキーを問い合わせる必要が生じる場合が多い。性能を向上させるべく、上述の実施形態では、複数の順序付けられたキーを求めるリクエストが受信された場合、単一のシャード３０の順序付けられた部分集合を検索するリクエストが結果的に生じる可能性が増すことを保証する。また、各シャード自身が大域的キー範囲の順序付けられた部分集合を形成するため、個々のキーについて、どのシャードが自身のデータを保持しているかを確定する必要は無くなるが、その理由は、例えばリクエストの最も低いキーについて当該リクエストの順序付けられた部分集合内の全ての後続キーが、自身の局所的部分範囲の制限に達するまで当該同一シャードに存在すると判定されたならば、当該キーの順序付けられた部分集合が指すデータの検索を続けるためには、どのシャードが隣接するかを確認するだけでよいからである。
【００６４】
上述の例では主に、キーのソートされた部分集合と相関付けられた下限および上限により画定されるアルファベット順にソートされたキーの範囲に言及しているが、一般にデータベースに対するリクエストの大きな割合で必要とされるキーの順序関係に密接に関係する限り、他の任意の適当な順序関係を選択してもよいことは明らかである。
【００６５】
上述の方法およびシステムは一般に、例えば適当なサーバまたは汎用コンピュータ等の適当なコンピュータシステムのプロセッサにより実行された場合に本方法を実行すべく適合されたソフトウェアコードを含むコンピュータプログラムとして充分に実装可能であることは明らかである。
【００６６】
本発明について特定の実施形態を参照しながら記述してきたが、当業者には本発明が上述の例示的な実施形態の詳細事項に限定されないこと、および本発明がその範囲から逸脱することなく各種の変更および変型を加えて実施できることは明らかであろう。本実施形態は従って、あらゆる点において例示的であって限定的ではないものと考えるべきであり、従って本発明の趣旨は上述の説明ではなく添付の請求項により示されており、請求項の等価物の意味および範囲に含まれるあらゆる変更は従って当該範囲に含まれるものとする。換言すれば、基本的原理の範囲内に含まれ且つ基本的属性が本特許出願において権利請求される一切の変更、変型または等価物を包含するものと考えられる。更に、本特許出願の読者には、「含んでいる」または「含む」という語句が他の要素またはステップを除外しないこと、「１個の」または「一つの」という語句が複数個を除外しないこと、および１個のコンピュータシステム、１個のプロセッサ、または別の１個の統合装置が、請求項に記載された複数の手段の機能を満たし得ることが理解されよう。請求項内のどの参照符号も、対象とする各請求項を限定するものと解釈してはならない。「第１」、「第２」、「第３」、「ａ」、「ｂ」、「ｃ」等の用語は、本明細書の記述または請求項において用いられた場合、類似要素またはステップを区別するために導入されたものであって、必ずしも連続的または時系列的順序を規定している訳ではない。同様に、「上部」、「底部」、「上に」、「下に」等の用語は説明目的で導入されたものであって、必ずしも相対的な位置を規定している訳ではない。このように用いられている用語は適当な条件の下で交換可能であって、本発明の実施形態は本発明に従い、上述のもの（複数も）とは異なる順序または方向で動作可能であることを理解されたい。
【符号の説明】
【００６７】
１  クライアントアプリケーション
２  ネットワーク接続
３  ネットワーク
１０  データベース
１１  データ
１２  キー
１３  検索リクエスト
１４  大域的範囲
２０、２０．１、２０．２  シャードストア
２２  シャードストア識別子
３０  シャード
４０  局所的部分範囲
４２  局所的部分範囲集合
４２ＰＵ  公開局所的部分範囲集合
４２ＰＲ  非公開局所的部分範囲集合
４４  外部部分範囲
４６  外部部分範囲集合
５０  シャードルータ
５２  大域的部分範囲集合
５４  大域的部分範囲
６０  メッセージ
７０  移動部分範囲
７２  移動シャード
７４  移動肯定応答メッセージ
８０  移動動作
３０２  第１のステップ
３０６  ステップ
【図１】
2016062609.tif 000003
【図２】
2016062609.tif 000004
【図３】
2016062609.tif 000005
【図４】
2016062609.tif 000006
【図５】
2016062609.tif 000007
【図６】
2016062609.tif 000008
【図７】
2016062609.tif 000009
【図８】
2016062609.tif 000010
【図９】
2016062609.tif 000011
【手続補正書】
【提出日】平成28年1月14日(2016.1.14)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００４０
【補正方法】変更
【補正の内容】
【００４０】
【図１】本発明によるデータベースの動的シャーディングを行うコンピュータ実装された方法を実装するのに適したシステムの一実施形態を模式的に示す。
【図２】図１のシステムを動作させる方法の一実施形態を模式的に示す。
【図３】図１の実施形態を代替する、シャードルータを含む一実施形態を模式的に示す。
【図４】図３のシステムを動作させる方法の一実施形態を模式的に示す。
【図５】移動動作の模式的表現を示す。
【図６】図３のシステムを動作させる方法の代替的な実施形態を模式的に示す。
【図７】移動動作中における局所的部分範囲集合の公開および非公開バージョンを含む代替的な実施形態を模式的に示す。
【図８】シャードストアを跨るデータベースの自動化された効率的なリバランシングを模式的に示す。
【図９】マージ動作の模式的表現を示す。
【外国語明細書】
2016062609000001.pdf