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

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

▶ アンプリデータ エヌブイの特許一覧

特許6198210コンピュータ実装された動的シャーディング方法
<>
  • 特許6198210-コンピュータ実装された動的シャーディング方法 図000002
  • 特許6198210-コンピュータ実装された動的シャーディング方法 図000003
  • 特許6198210-コンピュータ実装された動的シャーディング方法 図000004
  • 特許6198210-コンピュータ実装された動的シャーディング方法 図000005
  • 特許6198210-コンピュータ実装された動的シャーディング方法 図000006
  • 特許6198210-コンピュータ実装された動的シャーディング方法 図000007
  • 特許6198210-コンピュータ実装された動的シャーディング方法 図000008
  • 特許6198210-コンピュータ実装された動的シャーディング方法 図000009
  • 特許6198210-コンピュータ実装された動的シャーディング方法 図000010
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6198210
(24)【登録日】2017年9月1日
(45)【発行日】2017年9月20日
(54)【発明の名称】コンピュータ実装された動的シャーディング方法
(51)【国際特許分類】
   G06F 12/00 20060101AFI20170911BHJP
【FI】
   G06F12/00 512
   G06F12/00 545A
【請求項の数】14
【外国語出願】
【全頁数】30
(21)【出願番号】特願2015-178972(P2015-178972)
(22)【出願日】2015年9月10日
(65)【公開番号】特開2016-62609(P2016-62609A)
(43)【公開日】2016年4月25日
【審査請求日】2015年11月18日
(31)【優先権主張番号】14185304.4
(32)【優先日】2014年9月18日
(33)【優先権主張国】EP
(73)【特許権者】
【識別番号】515250026
【氏名又は名称】アンプリデータ エヌブイ
(74)【代理人】
【識別番号】110002572
【氏名又は名称】特許業務法人平木国際特許事務所
(72)【発明者】
【氏名】カール レネ ダルアン
(72)【発明者】
【氏名】フレデリク デ スフレイヴェル
(72)【発明者】
【氏名】ヨッヘン マールス
(72)【発明者】
【氏名】ロマン レイモンド アグネス スルートメーカース
(72)【発明者】
【氏名】ニコラス トランズ
(72)【発明者】
【氏名】ヨハン ドムス
【審査官】 田中 幸雄
(56)【参考文献】
【文献】 特開2013−30165(JP,A)
【文献】 近藤直樹ほか,複数分散インデックス手法の実装・比較のための共通フレームワークの実現,第4回データ工学と情報マネジメントに関するフォーラム論文集 (第10回日本データベース学会年次大会) [online],日本,電子情報通信学会データ工学研究専門委員会 日本データベース学会 情報処理学会データベースシステム研究会,2012年 7月13日,<URL:http://db-event.jpn.org/deim2012/proceedings/final-pdf/c2-2.pdf>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
(57)【特許請求の範囲】
【請求項1】
順序付けられた大域的範囲(14)に含まれるキー(12)により識別可能なデータ(11)を含むデータベース(10)の動的シャーディングを行うコンピュータ実装された方法であって、
−各々がシャードストア識別子(22)を含み且つ各々が記憶容量制限により制限されている複数のシャードストア(20)を提供するステップと、
−各シャード(30)が局所的部分範囲(40)内で少なくとも1個のキー(12)が指すデータを求めるリクエスト(13)を扱うべく構成され、当該局所的部分範囲(40)が前記順序付けられた大域的範囲(14)の順序付けられた部分範囲を含む複数のシャード(30)を提供するステップと、
−単一のシャード(30)が単一のシャードストア(20)を越えて延在しないよう前記シャードストア(20)に前記複数のシャード(30)を提供するステップと、
−前記シャードストア(20)の各々に1個の局所的部分範囲集合(42)を、各々の局所的部分範囲集合(42)が自身の対応するシャードストア(20)に格納された前記複数のシャード(30)の前記1個以上の局所的部分範囲(40)を含むように提供するステップと、
−前記複数のシャードストア(20)に接続可能であって少なくとも1個のキー(12)が指すデータ(11)を求めるリクエストを扱うべく適合されたシャードルータ(50)を提供するステップと、
−前記順序付けられた大域的範囲(14)の大域的部分範囲(54)をシャードストア識別子(22)と関連付けるべく適合された大域的部分範囲集合(52)を前記シャードルータ(50)に提供するステップと、
−少なくとも1個のキー(12)が指すデータ(11)を求めるリクエスト(13)を扱う際に、
−当該リクエストを前記シャードルータ(50)に提供するステップと、
−前記シャードルータ(50)が、前記リクエスト(13)の少なくとも1個のキー(12)を含む大域的部分範囲(54)と関連付けられたシャードストア識別子(22)を判定するステップと、
−前記シャードルータ(50)が、当該関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)に前記リクエストを渡すステップと、
−当該シャードストア(20)が、自身の局所的部分範囲集合(42)により、当該少なくとも1個のキー(12)が当該シャードストア(20)に格納されたシャード(30)の局所的部分範囲(40)に存在するか否かを検証するステップと、
−少なくとも1個のキー(12)が、当該シャードストア(20)に格納された前記シャード(30)の前記1個以上の局所的部分範囲(40)に存在しない場合、
−当該シャードストア(20)の前記局所的部分範囲集合(42)を含むメッセージ(60)を返送するステップと、
−前記シャードルータ(50)が、当該シャードストア(20)の前記シャードストア識別子(22)を、前記メッセージ(60)の前記局所的部分範囲集合(42)の局所的部分範囲(40)に対応する大域的部分範囲(54)と関連付けることにより、前記メッセージ(60)に基づいて自身の大域的部分範囲集合(52)を更新するステップとを含む方法。
【請求項2】
前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)が前記メッセージ(60)を返送する場合、前記リクエスト(13)が次いで別のシャードストア(20)に渡される、請求項1に記載の方法。
【請求項3】
前記リクエスト(13)を扱う前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)の前記局所的部分範囲集合(42)が、自身の各シャードストア識別子(22)と関連付けられた他のシャードストア(20)に格納されたシャード(30)の1個以上の外部部分範囲(44)を含む外部部分範囲集合(46)を更に含み、更に、
前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)により前記リクエスト(13)を扱う際に、前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)に格納されたシャード(30)の前記1個以上の局所的部分範囲(40)に少なくとも1個のキー(12)が存在しない場合、
−前記局所的部分範囲集合(42)を含む前記メッセージ(60)を返送するステップと、
−前記リクエスト(13)の少なくとも1個のキー(12)が当該局所的部分範囲集合(42)の前記外部部分範囲集合(46)の所定の外部部分範囲(44)に含まれているか否かを検証するステップと、
−前記リクエスト(13)を次いで、当該外部部分範囲(44)と関連付けられた前記シャードストア識別子(22)を有する前記別のシャードストア(20)に提供するステップとを含む、請求項1〜のいずれか1項に記載の方法。
【請求項4】
前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)に格納された前記シャード(30)の前記1個以上の局所的部分範囲(40)に少なくとも1個のキー(12)が存在しない場合、
−前記シャードルータ(50)が更に、前記別のシャードストア(20)の前記シャードストア識別子(22)を、前記メッセージ(60)の前記外部部分範囲集合(46)の前記所定の外部部分範囲(44)に対応する大域的部分範囲(54)と関連付けることにより、前記メッセージ(60)に基づいて自身の大域的部分範囲集合(52)を更新するステップを含む、請求項に記載の方法。
【請求項5】
移動部分範囲(70)内の全てのキー(12)が指すデータ(11)を含む移動シャード(72)の、前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)から別のシャードストア(20)への移動動作(80)の結果、前記移動部分範囲(70)が前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)の前記局所的部分範囲集合(42)から除去されて、前記別のシャードストア(20)の前記シャードストア識別子(22)と関連付けられた外部部分範囲(44)として前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)の前記外部部分範囲集合(46)に追加される、請求項またはに記載の方法。
【請求項6】
移動部分範囲(70)内の全てのキー(12)が指すデータ(11)を含む移動シャード(72)の、前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)から別のシャードストア(20)への前記移動動作(80)の結果、前記移動部分範囲(70)が局所的部分範囲(40)として前記別のシャードストア(20)の前記局所的部分範囲集合(42)に追加される、請求項に記載の方法。
【請求項7】
移動動作(80)の実行中に、前記移動動作(80)に関与する前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)および/または前記別のシャードストア(20)の前記局所的部分範囲集合(42)の前記局所的部分範囲集合(42)だけが前記移動部分範囲(70)に基づいて更新される、請求項に記載の方法。
【請求項8】
前記移動動作(80)に関与する前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)および前記別のシャードストア(20)が、公開局所的部分範囲集合(42PU)および非公開局所的部分範囲集合(42PR)を含み、そのような移動動作(80)の実行中に、
−前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)が前記移動部分範囲(70)に基づいて自身の公開局所的部分範囲集合(42PU)を更新するステップと、
−前記関連付けられたシャードストア識別子(22)によって識別される前記シャードスト(20)が前記移動シャード(72)を前記別のシャードストア(20)へ送信するステップと、
−前記別のシャードストア(20)が前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)から前記移動シャード(72)を受信するステップと、
−前記移動シャード(72)が正しく受信された場合、前記別のシャードストア(20)が、
−自身の公開局所的部分範囲集合(42PU)および自身の非公開局所的部分範囲集合(42PR)の両方を前記移動部分範囲(70)に基づいて更新するステップと、
−前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)に移動肯定応答メッセージ(74)を送信するステップと、
−前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)が前記別のシャードストア(20)から前記移動肯定応答メッセージ(74)を受信した場合、前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)が自身の非公開局所的部分範囲集合(42PR)を更新し、前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)が前記移動シャード(72)を削除するステップと含む、請求項のいずれか1項に記載の方法。
【請求項9】
前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)が、移動動作(80)を実行してから所定時間後に、自身の公開局所的部分範囲集合(42PU)が、自身の非公開局所的部分範囲集合(42PR)とは異なることを検知した場合、前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)が前記移動シャード(72)を前記別のシャードストア(20)へ再送信する、請求項に記載の方法。
【請求項10】
前記別のシャードストア(20)に対して、自身の公開局所的部分範囲集合(42PU)に既に存在する前記移動部分範囲(70)が前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)により前記移動シャード(72)が提供されている場合、前記別のシャードストア(20)が、前記移動シャード(72)を受信することなく前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)に対して移動肯定応答メッセージ(74)を送信する、請求項に記載の方法。
【請求項11】
前記移動シャード(72)が、前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)のシャード(30)の少なくとも1個の順序付けられた部分集合を含むように生成される、請求項〜10のいずれか1項に記載の方法。
【請求項12】
サイズが移動サイズ閾値(90)を上回るシャード(30)の少なくとも1個の順序付けられた部分集合を移動させる移動ジョブ(82)が提供された場合、前記移動動作(80)の各々の前記移動シャード(72)のサイズが前記移動サイズ閾値(90)以下であるように、複数の移動動作(80)が前記移動ジョブ(82)に基づいて生成され、前記移動ジョブ(82)が、前記複数の移動動作(80)により、
−移動ジョブキー範囲、
−キー(12)の移動ジョブ量、および/または
−前記シャード(30)の前記順序付けられた部分集合の移動ジョブサイズの移動が完了するまでシャード(30)の順序付けられた部分集合を前記関連付けられたシャードストア識別子(22)によって識別される前記シャードストア(20)から別のシャードストア(20)へ移動させるリクエストを含む、請求項〜1のいずれか1項に記載の方法。
【請求項13】
所定シャード(30)について、前記所定シャード(30)の前記局所的部分範囲(40)に隣接する局所的部分範囲(40)を有する同一シャードストア(20)で別のシャード(30)が利用可能であることが検知された場合、当該所定シャード(30)が前記別のシャード(30)にマージされてマージ済みシャード(30)を形成すると共に、前記局所的部分範囲集合(42)が、前記所定シャード(30)の隣接する局所的部分範囲(40)および前記別のシャード(30)の両方を、マージ済みシャード(30)のマージ済み局所的部分範囲(40)にマージすることにより更新される、請求項1〜1のいずれか1項に記載の方法。
【請求項14】
順序付けられた大域的範囲(14)に含まれるキー(12)により識別可能なデータ(11)を含むデータベース(10)の動的シャーディングを、コンピュータに実行させるためのプログラムであって、
−各々がシャードストア識別子(22)を含み且つ各々が記憶容量制限により制限されている複数のシャードストア(20)を提供するステップと、
−各シャード(30)が局所的部分範囲(40)内で少なくとも1個のキー(12)が指すデータを求めるリクエスト(13)を扱うべく構成され、当該局所的部分範囲(40)が前記順序付けられた大域的範囲(14)の順序付けられた部分範囲を含む複数のシャード(30)を提供するステップと、
−単一のシャード(30)が単一のシャードストア(20)を越えて延在しないよう前記シャードストア(20)に前記複数のシャード(30)を提供するステップと、
−前記シャードストア(20)の各々に1個の局所的部分範囲集合(42)を、各々の局所的部分範囲集合(42)が自身の対応するシャードストア(20)に格納された前記複数のシャード(30)の前記1個以上の局所的部分範囲(40)を含むように提供するステップと
前記順序付けられた大域的範囲(14)の大域的部分範囲(54)をシャードストア識別子(22)と関連付けるべく適合された大域的部分範囲集合(52)を、前記複数のシャードストア(20)に接続可能であって少なくとも1個のキー(12)が指すデータ(11)を求めるリクエストを扱うべく適合されたシャードルータ(50)に提供するステップと、
−少なくとも1個のキー(12)が指すデータ(11)を求めるリクエスト(13)を扱う際に、
前記シャードルータ(50)に、当該リクエスト(13)の少なくとも1個のキー(12)を含む大域的部分範囲(54)と関連付けられたシャードストア識別子(22)を判定させるために、当該リクエストを前記シャードルータ(50)に提供するステップと
−前記関連付けられたシャードストア識別子(22)によって識別され、前記シャードルータ(50)によって前記リクエストが渡された、前記シャードストア(20)が、自身の局所的部分範囲集合(42)により、当該少なくとも1個のキー(12)が当該シャードストア(20)に格納されたシャード(30)の局所的部分範囲(40)に存在するか否かを検証するステップと、
−少なくとも1個のキー(12)が、当該シャードストア(20)に格納された前記シャード(30)の前記1個以上の局所的部分範囲(40)に存在しない場合、
−当該シャードストア(20)の前記局所的部分範囲集合(42)を含むメッセージ(60)を、前記シャードルータ(50)に、当該シャードストア(20)の前記シャードストア識別子(22)を、前記メッセージ(60)の前記局所的部分範囲集合(42)の局所的部分範囲(40)に対応する大域的部分範囲(54)と関連付けさせることにより、前記メッセージ(60)に基づいて自身の大域的部分範囲集合(52)を更新させるために、返送するステップとをコンピュータに実行させるためのプログラム
【発明の詳細な説明】
【技術分野】
【0001】
本発明は一般に、順序付けられた大域的範囲に含まれるキーにより識別可能なデータを含むデータベースの動的シャーディングを行うコンピュータ実装された方法に関する。
【背景技術】
【0002】
データベースシャードとは、データベースの水平方向の区画のことである。そのような個々の区画の各々をシャードまたはデータベースシャードと称する。水平分割とは、データベースの行の異なる部分集合が別々の水平方向の区画に保持されるようなデータベースの設計原理である。従ってそのような水平方向の区画がシャードを形成する。データベースが水平方向に複数のシャードに分割されている場合、複数のシャードを、例えばデータベースサーバである異なるシャードストアに配置することができるため、スケーラビリティの観点から潜在的な利点が得られ、従って、単一のデータベースサーバの性能および記憶容量の制限を超えてデータベースを拡張することができる。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】米国特許出願公開第2014/0108421号明細書
【特許文献2】国際公開第2013/147785号パンフレット
【特許文献3】米国特許出願公開第2012/0271795号明細書
【特許文献4】米国特許出願公開第2012/0254175号明細書
【特許文献5】国際公開第2012/068184号パンフレット
【特許文献6】欧州特許第2469411号明細書
【特許文献7】欧州特許第2672387号明細書
【発明の概要】
【発明が解決しようとする課題】
【0004】
データベースをシャーディングする各種の方法を用いてこのようなスケーリングを満たすことができ、シャーディングをより容易にすべく異なるシャードストアに跨ってシャーディングおよび負荷バランシングを自動化する分割データベースアーキテクチャが出現している。これらのアーキテクチャは典型的には、キーに基づくハッシュ分割または範囲分割を用いて、データベースを格納している分散コンピュータシステムのシャードストアにデータを割り当てる。キーに基づくハッシュの例として、例えば(特許文献1)に記述されており、キーのモジュラス形式のハッシュまたは洗練されたハッシュが計算され、各シャードストアに対して分散のバランスが良いと思われるこれらの計算されたハッシュの特定の範囲が割り当てられる。このような方式における第1の問題は、大規模なデータベースシステムにおいて、キーに基づいてこれらのハッシュを計算するに膨大な計算能力および時間を必要とし、従ってこれらのキーが指すデータを求めるリクエストを扱う際に待ち時間が増大することである。また、複雑なハッシュ化機構を用いる場合であっても、特にキーおよび当該キーに関連付けられたデータを事前に高い信頼性で評価できない大規模分散データベースの場合、異なるデータストアの間でバランスの良い分散を保証することは困難である。
【0005】
更なる問題として、例えば(特許文献1)に記述されているように、分散動作の割合が高い分散データベースシステムの性能低下である。そのような分散動作の実行中に、例えば単一の顧客の注文履歴のリスト等、複数のキーが指すデータを求めるリクエストを実行するために複数のシャードストアにアクセスしなければならない。分散動作の割合を減らして、1個のシャードの読出し/書込み動作の割合を増やすために、(特許文献1)は、単調なキー範囲を、補助的なハッシング方法によりレコードまたは行が分散された複数のシャードストアと相関付けるシャード制御レコードの使用を提案している。しかし、この方式では、図3に示すように特定の顧客IDと相関付けられたデータを扱う際に、1個のシャードの読出し/書込み動作が増大し、また、シャード制御レコードは当該メタデータを個々のキーレベルで格納する必要無しにキー範囲に関連付けられたシャードリストを提供するが、データを検索する必要があるリストの全てのキーについて、シャードリストのどのシャードストアにアクセスするかを決定するために補助ハッシュを計算する必要が依然としてある。また、単調キー、例えば顧客IDを用いることで、例えばユーザーによる検索および/または選択のために顧客の順序付けられたリストを作成する必要がある標準的なアプリケーションレベルの状況で性能が低下してしまう。例えばアルファベット順にソートされた顧客リストを順にめくっていくユーザーインターフェースがユーザーに提示されるような標準的なケースでは、アルファベット順にソートされたリストの隣接する顧客の単調な顧客idが必ずしも同一の顧客id範囲に存在するとは限らず、たとえ同一範囲に存在する場合であっても、それらがシャードリスト内の同一シャードストアに格納されている保証がないため、シャード制御レコードに対するアクセスリクエストの個数が膨大になるのは明らかである。また、(特許文献1)の方式では、システムの全てのシャードストアにアクセス可能な中央拠点で常時最新のシャード制御レコードを必要とするため、障害が一箇所に集中し、特に多数のシャードストアが含まれる大規模分散データベースシステムにおいて、そのようなシステムのスケーラビリティおよび応答性に対する制約となる。
【0006】
データベースをシャーディングする更なる方法が(特許文献2)により知られており、複製オブジェクトストレージシステム用の索引がオブジェクトを、ストレージノード間で分散させるために用いたものと同一のハッシュに基づくシャーディング方法によりシャーディングし、次いでこれらの索引シャードをシステム内の全てのストレージノード間で分散させる。ここではまた、異なるストレージノードに格納された全ての索引シャードを同期させておくことが必要であるため待ち時間が長くなり、そのようなシステムのスケーラビリティが制約されてしまう。また、索引がハッシュに基づくシャードを生成するため、例えばフォルダ、グループ、ラベル等の選択されたコンテナに格納されたデータオブジェクトのアルファベット順にソートされたリストを一覧表示するような標準動作を実行する際に複数の異なるシャードストアにアクセスする必要がある分散動作の割合が高くなってしまう。この現象は更に、シャーディングされた索引に対してなされたリクエストおよびデータオブジェクト自体に関するリクエストの両方のレベルで顕著である。
【0007】
データベースをシャーディングする更なる方法が(特許文献3)により知られており、協調サービスがキーの全範囲を、当該キーの全範囲の一部であるキーの局所的部分範囲に各々が責任を負う複数のノードと相関付けるリクエストの分散を管理する。各々のノードのキーの局所的部分範囲は、ノードの個数およびデータベーステーブル内の行またはキーの個数に応じて選択されている。このようなシステムでは、ノード上の全てのキーの局所的部分範囲が互いに、且つ協調サービスと同期していることが必要とされるため、スケーラビリティが制約される。また、キーの全範囲用のデータベースにおけるキーの分散について一切の知識が利用できない場合、選択されたキーの局所的部分範囲に起因してノード間でのデータの分散のバランスが失われるリスクが高い。
【0008】
データベースをシャーディングする更なる方法が(特許文献4)により知られており、当該データベースが、順序付けられた大域的範囲に含まれるキーにより識別可能なデータを含んでいる。チャンクとも称する複数のシャードが用意されていて、各シャードは、局所的部分範囲で少なくとも1個のキーが指すデータを求めるリクエストを扱うべく構成されていて、当該局所的部分範囲は、前記順序付けられた大域的範囲の順序付けられた部分範囲を含み、例えばキーの最小値とキーの最大値との間の範囲で定義される。正しいシャードにリクエストをルーティングするルータプロセスが、格納する構成サーバからの情報、および各シャードに関する情報、例えば最大および最小キー値、および当該シャードが格納されているシャードストアにアクセスする。構成サーバの当該情報が、各シャードストアでの実際の状況と常時同期している必要があるため、待ち時間が長くなり、スケーラビリティが制約されることは明らかである。システムをリバランシングする際の柔軟性を向上させるべく、各シャードの最大サイズが例えば200MBに制限されていて、シャードが当該最大サイズに達したならば2個の新規のシャードに分割されて、各々が分割されたシャードの局所的部分範囲のある割合を含むようにする。これにより、システムの各シャードストアで多数の小さいシャードが利用可能であり、単にこれらの小さいシャードを自身のシャードストアから、負荷が小さい別のシャードストアへ移動させることによりリバランシングを行うことができる。しかし、これを行うには、構成サーバが、シャードの個数が多く、新規のシャードが頻繁に生成され、およびシャードストア間でシャードが頻繁に再配置されることに起因して頻繁に生じる更新と常時同期していることが必要であるため、リクエストが実行可能になる前に構成サーバにより最新のコンフィギュレーション情報でルータを更新しなければならず、システムのスケーラビリティが制約されて待ち時間が長くなる。また、シャードのサイズが小さいほど、キーの順序付けられた部分集合、例えばコンテナ内のデータオブジェクトのアルファベット順に順序付けられたリスト、フォルダ内のファイル、テーブル内の顧客等に関するデータを求めて発行される標準的なリクエストに起因して複数のシャードストアに跨って分散された複数のシャードにアクセスする必要が生じ、そのため単一のシャード動作の割合が減少し、それに応じて性能低下が生じる恐れが増大する。
【0009】
動的にスケーラブルな冗長分散ストレージシステムが更に(特許文献5)に開示されている。同文献は、複製、例えばRAIDを用いるか、または誤り訂正符号すなわちECC、例えば消去符号を用いて一定レベルの冗長性を実現するストレージシステムを開示している。当該ストレージシステムは、ファイル識別子およびデータブロックを、ファイルおよびデータブロックを格納するストレージデバイスと相関付けるファイルマネージャコントローラおよびストレージマネージャコントローラを含んでいる。当該ファイルマネージャコントローラは、分散ハッシュテーブルを用いて実装することができ、これらは例えば、本明細書の図2Cに示すようにファイルマネージャが責任を負う一意なファイル識別子の値の範囲を相関付けるエントリを含むハッシュテーブルリストとして実装されている。図示するように、各ファイルマネージャは、円形のキーの全範囲の一部である自身のキー値の局所的部分範囲を認識している必要がある。また、各ファイルマネージャは少なくとも、自身の局所的部分範囲に先行する局所的部分範囲を管理するファイルマネージャ、および自身の局所的部分範囲に後続する部分範囲を管理するファイルマネージャに関する情報を認識していなければならない。分散ハッシュテーブルの分散的特性に起因して、リストの作成には時間を要し、その間にノードの障害または分散ハッシュテーブルのリバランシングが発生するかもしれないため、ノードが利用できる当該ハッシュテーブルリストが使用時に完全に正確であるとは限らない点に注意されたい。本システムは、たとえ情報が陳腐化していても、陳腐化した情報はともかく所望のノードにより近い範囲のノードに導いてくれるため、1個以上の中間ホップを経て最終的に所望のノードにアクセスできるとの仮定に依存している。しかし、大規模分散データベースシステムではこの仮定は必ずしも真ではなく、例えば、隣接ノードおよび/またはそれらの対応する局所的部分範囲の情報が陳腐化している場合、取得不能なデータまたは受容できない待ち時間が生じる恐れがある。依然として互いを隣接ノードと確認する2個の陳腐化したノードの間で、リクエストが行きつ戻りつする状況を想像するのは難しくない。また、ハッシュに基づくシャーディングでは、各キー、例えばファイル識別子に対して適切なハッシュを生成する必要があるため、上述のように標準的なリクエストを実行する、例えばコンテナ内のデータオブジェクトの、フォルダ内のファイルの、テーブル内の顧客等のアルファベット順に順序付けられたリストを作成する際に単一シャード動作の割合が減少してしまう。この性能低下は、(特許文献5)のシステムではシステムが一定レベルのリバランシングの柔軟性を持たせるために、1個はファイルメタデータの管理に責任を負うファイルマネージャ用、1個はストレージデバイスの管理に責任を負うストレージマネージャ用の2個の分散ハッシュテーブルシステムを用いるため、更に顕著である。
【0010】
従って、上述の従来技術の短所を克服すると共に、キーの順序付けられた部分集合に関するデータが得られる標準的なリクエストを扱う際の性能向上を保証する堅牢且つ簡単にスケーラビリティに保証する、改良された、コンピュータに実装されたデータベースの動的シャーディング方法に対するニーズが依然としてある。
【課題を解決するための手段】
【0011】
本発明の第1の態様によれば、順序付けられた大域的範囲に含まれるキーにより識別可能なデータを含むデータベースの動的シャーディングを行うコンピュータ実装された方法を提供し、本方法は、
−各々がシャードストア識別子を含み且つ各々が記憶容量制限により制限されている複数のシャードストアを提供するステップと、
−各シャードが局所的部分範囲内で少なくとも1個のキーが指すデータを求めるリクエストを扱うべく構成され、当該局所的部分範囲が前記順序付けられた大域的範囲の順序付けられた部分範囲を含む複数のシャードを提供するステップと、
−単一のシャードが単一のシャードストアを越えて延在しないようシャードストアに複数のシャードを提供するステップと、
−シャードストアの各々に1個の局所的部分範囲集合を、各々の局所的部分範囲集合が自身の対応するシャードストアに格納されたシャードの1個以上の局所的部分範囲を含むように提供するステップと、
−少なくとも1個のキーが指すデータを求める前記リクエストを扱う際に、
−当該リクエストを所定シャードストアに提供するステップと、
−当該所定シャードストアが、自身の局所的部分範囲集合により、当該少なくとも1個のキーが、当該所定シャードストアに格納されたシャードの局所的部分範囲に存在するか否かを検証するステップと、
−少なくとも1個のキーが当該所定シャードストアに格納されたシャードの局所的部分範囲に存在しない場合、当該所定シャードストアの局所的部分範囲集合を含むメッセージを返送するステップとを含んでいる。
【0012】
これにより、各シャードストアは自身の局所的部分範囲集合を認識するだけでよいため、大規模なデータベース環境においても堅牢な動作を保証することができる。これにより、そのような情報を全てのシャードストアに跨るシステム全体で、および/または中央管理アプリケーションと同期させる必要があるシステムに存在する一切の待ち時間が回避される。シャードストアは、自身の局所的部分範囲のいずれにも存在しないキーを含むリクエストへの応答として、当該局所的部分範囲集合を含むメッセージを返送することにより、自身が格納する部分範囲に関する最新のフィードバックを要求元に対し、当該要求元に関係する時だけ、動的に提供する。また、順序付けられたキーの部分範囲内のキーを格納しているシャードを用いることで、キーが自身の局所的部分範囲集合の局所的部分範囲に存在するか否かを確認するだけでよいため、リクエストの1個以上キーを扱うことが可能か否かをシャードストアが確認する複雑さが軽減される。これらの局所的部分範囲が順序付けられた部分範囲であるため、この確認は、単にキーが部分範囲の境界間に存在するか否か、例えばそのような順序付けられた部分範囲の最下限よりも大きいかまたは最上限よりも小さいか確認するだけで実行できる。この確認を実行するためにキーのハッシングその他一切の変換を実行する必要がない。
【0013】
順序付けられた大域的範囲の順序付けられた部分範囲内を求めるリクエストを扱うべく構成されたシャードを用いることにより、キーの順序付けられた部分集合に関するデータを求める標準的なリクエストを効率的に扱うことが可能である。そのようなキーの順序付けられた部分集合を生成する際に問い合わせを必要とするシャードの個数が最小限に、最適な場合は当該キーの部分集合を含む単一のシャードに、またいかなる場合でも高々当該キーの順序付けられた部分集合全体にわたる部分範囲に関するシャードに抑えられることは明らかである。これは例えば、分散オブジェクトストレージシステム環境において、より高水準の階層的グループの1個以上の名称の後に続くオブジェクトの名称で形成される、一意なオブジェクト識別子により順序付けられたキーが渡されることを意味する。これにより、そのようなデータを求める標準的なリクエストがアルファベット順にソートされたリスト形式のデータオブジェクトを順次調べる必要がある場合、当該リクエストは、表示すべき第1のキーを含むキーの部分範囲を有するシャードにアクセスして、例えば当該シャードから所定個数の後続キーが指すデータを含む当該シャードのアルファベット順に順序付けられた部分集合の検索を継続することにより、扱うことができる。
【0014】
更なる実施形態によれば、当該所定シャードストアが前記メッセージを返送する場合、当該リクエストは次いで別のシャードストアに渡される。
【0015】
これにより、シャードストア同士または中央管理プロセスとの広範な同期化を必要としない、データベースの動的シャーディングを行う堅牢、簡単且つ高度にスケーラブルな方法が実現される。各シャードストアは自身に格納されたシャードに存在するキーに関するリクエストを効率的に扱うことができ、局所的部分範囲集合にキーが存在しない旨を要求元に効率的に通知することにより、当該リクエストの当該部分も同様に効率的に扱われるように別のシャードストアにカスケードできるようにする。これにより、シャードの極めて動的な、分散リバランシングが生じる大規模分散処理システムであっても、各リクエストを受けたシャードストアは効率的に、且つ自身の局所的部分範囲集合の形式で最新の局所的情報に基づいて、リクエストを扱うことが可能か否かを判断し、可能でなければ要求元に自身の現在の局所的状態の最新情報を渡すことが可能になる。
【0016】
更なる実施形態によれば、本方法は更に、
−前記複数のシャードストアに接続可能であって少なくとも1個のキーが指すデータを求めるリクエストを扱うべく適合されたシャードルータを提供するステップと、
−順序付けられた大域的範囲の大域的部分範囲をシャードストア識別子と相関付けるべく適合された大域的部分範囲集合を前記シャードルータに提供するステップと、
−少なくとも1個のキーが指すデータを求めるリクエストを扱う際に、
−当該リクエストをシャードルータに提供するステップと、
−シャードルータが、リクエストの少なくとも1個のキーを含む大域的部分範囲と相関付けられたシャードストア識別子を判定するステップと、
−シャードルータが、当該相関付けられたシャードストア識別子の所定シャードストアに当該リクエストを渡すステップと、
−当該所定シャードストアが、自身の局所的部分範囲集合により、当該少なくとも1個のキーが当該所定シャードストアに格納されたシャードの局所的部分範囲に存在するか否かを検証するステップと、
−少なくとも1個のキーが、当該所定シャードストアに格納されたシャードの1個以上の局所的部分範囲に存在しない場合、
−当該所定シャードストアの局所的部分範囲集合を含むメッセージを返送するステップと、
−シャードルータが、所定シャードストアのシャードストア識別子を、前記メッセージの局所的部分範囲集合の局所的部分範囲に対応する大域的部分範囲と相関付けることにより、前記メッセージに基づいて自身の大域的部分範囲集合を更新するステップとを含んでいる。
【0017】
これにより、局所的部分範囲集合を含むメッセージにより大域的部分範囲集合に対して実行される更新が、データベースシステムに渡される実際のリクエストに含まれるキーの部分範囲の更新に焦点を合わせているため、大域的部分範囲集合が動的且つ効率的に更新される。ルータはこれにより、一から始める場合であっても、データを求めるリクエストを扱いながら動的に自身の大域的部分範囲集合を生成することができるため、不要な同期化オーバーヘッドおよび待ち時間が生じることなく、任意のシャードストア内のシャードに対する分散された局所的変更に高い信頼性を以て対処するのに充分な堅牢性を依然として維持しながら、自身のルーティング効率を系統的に向上させることができる。
【0018】
更なる実施形態によれば、リクエストを扱う所定シャードストアの局所的部分範囲集合は更に、自身の各シャードストア識別子と相関付けられた他のシャードストアに格納されたシャードの1個以上の外部部分範囲を含む外部部分範囲集合を含み、本方法は更に、
所定シャードストアによりリクエストを扱う際に、当該所定シャードストアに格納されたシャードの1個以上の局所的部分範囲に少なくとも1個のキーが存在しない場合、
−局所的部分範囲集合を含むメッセージを返送するステップと、
−当該リクエストの少なくとも1個のキーが当該局所的部分範囲集合の外部部分範囲集合の所定の外部部分範囲に含まれているか否かを検証するステップと、
−当該リクエストを次いで、当該外部部分範囲と相関付けられたシャードストア識別子を有する別のシャードストアに提供するステップとを含んでいる。
【0019】
これにより、大規模分散データベース環境における堅牢性を犠牲にすることなく、ルーティング効率が更に最適化される。要求元がシャードストアに対し、例えば、要求元が当該シャードストアに格納されたシャードに関する陳腐化した情報に基づいてリクエストを発行した等により、当該シャードストアの局所的部分範囲集合にもはや存在しないキーを求めるリクエストを送信した場合、これは、リバランシング動作の間にシャードのデータの少なくとも一部が別のシャードへ移動した結果である可能性が比較的高い。他のシャードストアの部分範囲に関する情報を外部部分範囲の形式で格納することで、当該特定のシャードストア自身に格納されたシャードの局所的部分範囲に関する情報を要求元に提供すべく用いるものと同一のメッセージ送信機構により、特定のシャードストアにより当該情報を要求元に提供する簡単な方法が得られる。他のシャードストアに格納されたシャードに関する当該情報は従って、リクエストに関連するシャードを含むと思われる当該別のシャードストアへの効率的なルーティングを実現することができる。
【0020】
更なる実施形態によれば、本方法は更に、当該所定シャードストアに格納されたシャードの1個以上の局所的部分範囲に少なくとも1個のキーが存在しない場合、
−シャードルータが更に、別のシャードストアのシャードストア識別子を、前記メッセージの外部部分範囲集合の所定の外部部分範囲に対応する大域的部分範囲を相関付けることにより、前記メッセージに基づいて自身の大域的部分範囲集合を更新するステップを含んでいる。
【0021】
これにより、大域的部分範囲集合もまた外部部分範囲により、リクエストを取扱う間に、効率的且つ動的に更新されるため、ルーティング効率が更に向上する。外部部分範囲に基づく大域的部分範囲集合の更新の後、当該外部部分範囲と相関付けられたシャードストアに当該リクエストをルーティングした後で当該更新が検証され、自身の局所的部分範囲集合にキーが存在しない場合に、大域的部分範囲集合を更新する更なるメッセージが生成されることは明らかである。
【0022】
更なる実施形態によれば、移動部分範囲内の全てのキーが指すデータを含む移動シャードの、所定シャードストアから別のシャードストアへの移動動作の結果、移動部分範囲が所定シャードストアの局所的部分範囲集合から除去されて、別のシャードストアのシャードストア識別子と相関付けられた外部部分範囲として所定シャードストアの外部部分範囲集合に追加される。
【0023】
これにより、移動動作から生じた情報は、ルーティング動作の効率を向上させるべく、移動動作が開始されたシャードストアで依然として利用可能である。
【0024】
更なる実施形態によれば、移動部分範囲内の全てのキーが指すデータを含む移動シャードの、所定シャードストアから別のシャードストアへの前記移動動作の結果、移動部分範囲が局所的部分範囲として別のシャードストアの局所的部分範囲集合に追加される。
【0025】
これにより、移動動作から生じた情報は、そのような分散環境において整合性が保証できるように移動動作が設定されたシャードストアで利用可能になる。
【0026】
更なる実施形態によれば、移動動作の実行中に、移動動作に関与する所定シャードストアおよび/または別のシャードストアの局所的部分範囲集合だけが移動部分範囲に基づいて更新される。
【0027】
これにより、リバランシング動作の結果、移動動作に関与するシャードストアに対する局所的更新しか行われないため、同期化オーバーヘッドおよび待ち時間が減少する。
【0028】
更なる実施形態によれば、移動動作に関与する所定シャードストアおよび別のシャードストアは、公開局所的部分範囲集合および非公開局所的部分範囲集合を含み、本方法は更に、そのような移動動作の実行中に、
−所定シャードストアが移動部分範囲に基づいて自身の公開局所的部分範囲集合を更新するステップと、
−所定シャードストアが移動シャードを別のシャードストアへ送信するステップと、
−別のシャードストアが所定シャードストアから移動シャードを受信するステップと、
−移動シャードが正しく受信された場合、別のシャードストアが、
−自身の公開局所的部分範囲集合および自身の非公開局所的部分範囲集合の両方を移動部分範囲に基づいて更新するステップと、
−所定シャードストアに移動肯定応答メッセージを送信するステップと、
−所定シャードストアが別のシャードストアから前記移動肯定応答メッセージを受信した場合、所定シャードストアが自身の非公開局所的部分範囲集合を更新し、所定シャードストアが移動シャードを削除するステップと含んでいる。
【0029】
これにより、結果的に頻繁な移動動作が生じる自動化された動的なリバランシング動作を伴う大規模分散データベースにおいても、最高度の利用可能性および整合性を保証する、実装が簡単、堅牢且つ効率的な移動動作が実現される。
【0030】
更なる実施形態によれば、所定シャードストアが、移動動作を実行してから所定時間後に、自身の公開局所的部分範囲集合が、自身の非公開局所的部分範囲集合とは異なることを検知した場合、所定シャードストアは移動シャードを別のシャードストアへ再送信する。
【0031】
これにより、例えばネットワーク障害により、または移動動作に関与するシャードストアが一時的に利用できないために、移動動作が中断された場合であっても、整合性を保証する効率的な機構が提供される。シャードストアは、ネットワークまたは他のシャードストアの動作状態に関する状態情報を認識している必要がなく、移動動作の再試行が必要であるか否かを評価するために自身の公開局所的部分範囲集合および自身の非公開局所的部分範囲集合の形式で局所的情報に依存することができる。
【0032】
更なる実施形態によれば、別のシャードストアに対して、自身の公開局所的部分範囲集合に既に存在する移動部分範囲を有する所定シャードストアにより移動シャードが提供されている場合、別のシャードストアは、移動シャードを受信することなく所定シャードストアに対して移動肯定応答メッセージを送信する。
【0033】
これにより、特に、移動動作の目的地である別のシャードストアが移動シャードを正しく受信したが、後続の移動肯定応答メッセージが所定シャードストアに到達しなかった状況で、効率的なリバランシング動作が保証される。所定シャードストアが次いで移動動作を再試行した場合、別のシャードストアは、正常な移動動作の実行中と同一の機構を有する所定シャードストアに対して移動シャードの存在を確認するが、同一の移動動作を反復的な取扱いに一切の不要なリソースを消費することはない。
【0034】
更なる実施形態によれば、移動シャードは、所定シャードストアのシャードの少なくとも一部を含むように生成される。
【0035】
更なる実施形態によれば、移動動作の各々の移動シャードのサイズが所定の移動サイズ閾値以下であるように、複数の移動動作が移動ジョブに基づいて生成され、当該移動ジョブは、当該複数の移動動作により、
−移動ジョブキー範囲、
−キーの移動ジョブ量、および/または
−データの移動ジョブサイズ
の移動が完了すまで全てのデータを所定シャードストアから別のシャードストアへ移動させるリクエストを含んでいる。
【0036】
更なる実施形態によれば、所定シャードについて、当該所定シャードの局所的部分範囲に隣接する局所的部分範囲を有する同一シャードストアで別のシャードが利用可能であることが検知された場合、当該所定シャードは当該別のシャードにマージされてマージ済みシャードを形成すると共に、局所的部分範囲集合が、所定シャードの隣接する局所的部分範囲および別のシャードの両方を、マージ済みシャードのマージ済み局所的部分範囲にマージすることにより更新される。好適には、所定シャードのサイズはマージするサイズ閾値を超えない。好適には、マージサイズ閾値は移動サイズ閾値よりも大きい。
【0037】
これにより、大規模分散データベースにおいても、移動動作中における堅牢性および利用可能性を最適化すべく多数の小さい移動シャードを伴うリバランシング動作を、シャードストアに局所的に格納されたシャードに関する知識だけを必要とする仕方で、シャードを動的に成長させる自動メカニズムと組み合せることにより、単一のシャード動作の割合が改善し、これに応じて性能向上が実現できる。
【0038】
本発明の第2の態様によれば、プロセッサにより実行された場合に本発明の第1の態様による方法を実行すべく適合されたソフトウェアコードを含むコンピュータプログラムが提供される。
【0039】
本発明の第3の態様によれば、本発明の第2の態様によるコンピュータプログラムを含む計算機可読記憶媒体が提供される。
【図面の簡単な説明】
【0040】
図1】本発明によるデータベースの動的シャーディングを行うコンピュータ実装された方法を実装するのに適したシステムの一実施形態を模式的に示す。
図2図1のシステムを動作させる方法の一実施形態を模式的に示す。
図3図1の実施形態を代替する、シャードルータを含む一実施形態を模式的に示す。
図4図3のシステムを動作させる方法の一実施形態を模式的に示す。
図5】移動動作の模式的表現を示す。
図6図3のシステムを動作させる方法の代替的な実施形態を模式的に示す。
図7】移動動作中における局所的部分範囲集合の公開および非公開バージョンを含む代替的な実施形態を模式的に示す。
図8】シャードストアを跨るデータベースの自動化された効率的なリバランシングを模式的に示す。
図9】マージ動作の模式的表現を示す。
【発明を実施するための形態】
【実施例】
【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」等の用語は、本明細書の記述または請求項において用いられた場合、類似要素またはステップを区別するために導入されたものであって、必ずしも連続的または時系列的順序を規定している訳ではない。同様に、「上部」、「底部」、「上に」、「下に」等の用語は説明目的で導入されたものであって、必ずしも相対的な位置を規定している訳ではない。このように用いられている用語は適当な条件の下で交換可能であって、本発明の実施形態は本発明に従い、上述のもの(複数も)とは異なる順序または方向で動作可能であることを理解されたい。
【符号の説明】
【0067】
1 クライアントアプリケーション
2 ネットワーク接続
3 ネットワーク
10 データベース
11 データ
12 キー
13 検索リクエスト
14 大域的範囲
20、20.1、20.2 シャードストア
22 シャードストア識別子
30 シャード
40 局所的部分範囲
42 局所的部分範囲集合
42PU 公開局所的部分範囲集合
42PR 非公開局所的部分範囲集合
44 外部部分範囲
46 外部部分範囲集合
50 シャードルータ
52 大域的部分範囲集合
54 大域的部分範囲
60 メッセージ
70 移動部分範囲
72 移動シャード
74 移動肯定応答メッセージ
80 移動動作
302 第1のステップ
306 ステップ
図1
図2
図3
図4
図5
図6
図7
図8
図9