(57)【要約】【課題】ＫＶ＿ＳＳＤの特性に適合した、相異なるオブジェクト（以下、ＯＢと略）を効率的に格納する高信頼性のデータストレージシステムを提供する。【解決手段】キーバリューペアの複数のＯＢを格納する複数のデータストレージデバイス（以下、ＤＳＤと略）と、複数のＯＢの各々のＯＢサイズに基づいて、データの複製方式及び消去コーディング方式を含む相異なるデータ信頼性方式を適用する仮想ストレージレイヤを含む。複数のＯＢは、各々、第１サイズと第１サイズより大きい第２サイズを有する第１ＯＢと第２ＯＢを含み、仮想ストレージレイヤは、第１ＯＢを小型ＯＢに分類してデータ複製方式を適用し、複数のＤＳＤの中の何れか単数又は複数に亘って格納し、一方、第２ＯＢを巨大ＯＢに分類し、同一サイズの１つ又はそれ以上のチャンクに分割して消去コーディング方式を適用して複数のＤＳＤに亘って単数又は複数のチャンクを分散して格納する。【選択図】図１
2019128960.tif 000002
【特許請求の範囲】
【請求項１】
データストレージシステムであって、
キーバリューペアの複数のオブジェクトを格納する複数のデータストレージデバイスと、
前記複数のオブジェクトの各々のオブジェクトサイズに基づいて、データ複製方式及び消去コーディング方式を含む相異なるデータ信頼性方式を適用する仮想ストレージレイヤと、を包含し、
前記複数のオブジェクトは、第１サイズを有する第１オブジェクト及び前記第１サイズより大きい第２サイズを有する第２オブジェクトを包含し、
前記仮想ストレージレイヤは、前記第１オブジェクトを小型オブジェクトとして分類して前記データ複製方式を適用し、前記小型オブジェクトを前記複数のデータストレージデバイスの何れか１つ又はそれ以上に亘って格納し、
前記仮想ストレージレイヤは、前記第２オブジェクトを巨大オブジェクトとして分類して前記巨大オブジェクトを同一サイズの１つ又はそれ以上のチャンクに分割し、前記消去コーディング方式を適用して前記複数のデータストレージデバイスに亘って前記１つ又はそれ以上のチャンクを分散して格納する、ことを特徴とするデータストレージシステム。
【請求項２】
前記仮想ストレージレイヤは、スプリット優先方式により前記複数のデータストレージデバイスに亘って前記巨大オブジェクトの前記１つ又はそれ以上のチャンクを格納し、
前記スプリット優先方式は、前記仮想ストレージレイヤが、前記巨大オブジェクトの前記１つ又はそれ以上のチャンクの或る一部（ｓｏｍｅ）を前記複数のストレージデバイスの何れか１つに格納し、前記巨大オブジェクトの前記１つ又はそれ以上のチャンクのうち、他の一部（ｏｔｈｅｒｓ）を前記複数のストレージデバイスのうち、別の１つ（ａｎｏｔｈｅｒ）に格納する方式である、ことを特徴とする請求項１に記載のデータストレージシステム。
【請求項３】
前記仮想ストレージレイヤは、バンド優先方式により前記複数のデータストレージデバイスに亘って前記巨大オブジェクトの前記１つ又はそれ以上のチャンクを格納し、
前記バンド優先方式は、前記仮想ストレージレイヤが、前記複数のデータストレージデバイスに、前記巨大オブジェクトの前記１つ又はそれ以上のチャンクが全て格納されるまで、前記巨大オブジェクトの１つのチャンクを前記複数のデータストレージデバイスの各々に格納する方式である、ことを特徴とする請求項１に記載のデータストレージシステム。
【請求項４】
前記仮想ストレージレイヤは、第３サイズを有する第３オブジェクトを大型オブジェクトとして更に分類し、前記大型オブジェクトを同一サイズの１つ又はそれ以上のチャンクに分割し、前記消去コーディング方式を適用し、前記分割した１つ又はそれ以上のチャンクを前記複数のデータストレージデバイスに亘って分散して格納し、
前記第３サイズは、前記第１サイズより大きく、前記第２サイズより小さく、前記大型オブジェクトは、１つのバンドのみ、即ち、１つのスプリット内には１つのチャンクのみを包含する、ことを特徴とする請求項１に記載のデータストレージシステム。
【請求項５】
前記仮想ストレージレイヤは、第４サイズを有する第４オブジェクトを中型オブジェクトとしてさらに分類し、
前記第４サイズは、前記第１サイズより大きく、前記第３サイズより小さく、
前記仮想ストレージレイヤは、前記データ複製方式及び前記消去コーディング方式の何れか１つを適用する、ことを特徴とする請求項４に記載のデータストレージシステム。
【請求項６】
前記複数のオブジェクトの各々は、ユーザキーを使用して識別され、
前記仮想ストレージレイヤは、前記巨大オブジェクトに対するバンド識別子及び前記ユーザキーを含む内部キーを生成し、
前記バンド識別子は、複数のバンドの中で各々のバンドを識別するために使用され、前記複数のバンドのうち、前記バンドの各々は、前記複数のデータストレージデバイスに亘って分散された前記１つ又はそれ以上のチャンクのうちの何れか１つのチャンクを包含する、ことを特徴とする請求項１に記載のデータストレージシステム。
【請求項７】
前記仮想ストレージレイヤは、前記１つ又はそれ以上のチャンクのうち１番目のチャンクをリード又はライトするために前記ユーザキーのハッシュバリューを使用して前記複数のデータストレージデバイスの中でスタートデータストレージデバイスを識別する、ことを特徴とする請求項６に記載のデータストレージシステム。
【請求項８】
前記複数のデータストレージデバイスは、前記巨大オブジェクトに関連されたパリティチャンクを格納する、１つ又はそれ以上の専用パリティデータストレージデバイスを包含する、ことを特徴とする請求項１に記載のデータストレージシステム。
【請求項９】
前記複数のデータストレージデバイスは、グループの特徴をサポートし、前記仮想ストレージレイヤは、前記巨大オブジェクトをリードするとき、前記複数のデータストレージデバイスに向かって前記バンド識別子を任意データのビットに設定して放送する、ことを特徴とする請求項６に記載のデータストレージシステム。
【請求項１０】
前記複数のデータストレージデバイスをグループの特徴をサポートせずに、前記仮想ストレージレイヤは、前記巨大オブジェクトをリードするとき、前記複数のデータストレージデバイスに向かって前記バンド識別子をユニークなバンド識別子に設定して放送する、ことを特徴とする請求項６に記載のデータストレージシステム。
【請求項１１】
前記複数のデータストレージデバイスの各々は、キーバリュー・ソリッドステートドライブ（ＫＶ＿ＳＳＤ：  ｋｅｙ−ｖａｌｕｅ  ｓｏｌｉｄ−ｓｔａｔｅ  ｄｒｉｖｅ）である、ことを特徴とする請求項１に記載のデータストレージシステム。
【請求項１２】
キーバリューペアのオブジェクトにアクセスする方法であって、
キーバリューペアの複数のオブジェクトを受信するステップと、
ここで、前記複数のオブジェクトは、第１サイズを有する第１オブジェクト及び前記第１サイズより大きい第２サイズを有する第２オブジェクトを包含し、
前記第１オブジェクトを小型オブジェクトとして分類するステップと、
前記小型オブジェクトにデータ複製方式を適用するステップと、
前記小型オブジェクトを複数のデータストレージデバイスの何れか１つ又はそれ以上に亘って格納するステップと、
前記第２オブジェクトを巨大オブジェクトとして分類するステップと、
前記巨大オブジェクトを同一サイズの１つ又はそれ以上のチャンクに分割するステップと、
前記巨大オブジェクトに消去コーディング方式を適用するステップと、
前記１つ又はそれ以上のチャンクを前記複数のデータストレージデバイスに亘って分散して格納するステップと、を包含する、ことを特徴とする方法。
【請求項１３】
前記オブジェクトへのライト（書込み）要請を受信するステップと、
前記オブジェクトが前記巨大オブジェクトであるか否かを判別するステップと、
前記巨大オブジェクトに対するチャンクサイズ及びチャンクの個数を判別するステップと、
前記チャンクサイズ及び前記チャンクの個数をベースに、前記巨大オブジェクトの前記１つ又はそれ以上のチャンクを前記複数のデータストレージデバイスにライトするステップを、さらに包含する、ことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記１つ又はそれ以上のチャンクのうち前記複数のデータストレージデバイスの各々に対して１つのチャンクを含むスライスを生成し、前記スライスに含まれた前記１つ又はそれ以上のチャンクの各々に対して、バンド識別子が添付されたユーザキーを使用して内部キーを生成するステップと、
消去コーディングを使用して、前記スライスと対応する前記１つ又はそれ以上のチャンク、及び１つ又はそれ以上のパリティチャンクを含むバンドを生成するステップと、
スプリット優先方式及びバンド優先方式を含む分散方式の何れかに基づいて、前記バンドを格納するべき複数のデータストレージデバイスを決定するステップと、
前記内部キーを有する前記バンドに、前記１つ又はそれ以上のチャンクをライトするステップと、をさらに包含する、ことを特徴とする請求項１３に記載の方法。
【請求項１５】
前記オブジェクトに対するライト（書込み）要請を受信するステップと、
前記オブジェクトが前記小型オブジェクトであるか否かを判別するステップと、
スプリット優先方式及びバンド優先方式を含む分散方式の何れかに基づいて、前記小型オブジェクトの前記１つ又はそれ以上のチャンクを格納するべき前記複数のデータストレージデバイスの部分集合を決定するステップと、
前記小型オブジェクトの前記１つ又はそれ以上のチャンクを前記複数のデータストレージデバイスのうちの前記部分集合にライトするステップと、をさらに包含する、ことを特徴とする請求項１２に記載の方法。
【請求項１６】
前記ユーザキーを含む前記オブジェクトに対するリード（読出し）要請を受信するステップと、
前記複数のデータストレージデバイスがグループの特徴をサポートしているかを判別するステップと、
前記複数のデータストレージデバイスに向かって前記内部キーと共に前記リード要請を放送するステップと、をさらに包含する、ことを特徴とする請求項１４に記載の方法。
【請求項１７】
前記グループの特徴がサポートされている場合、前記内部キーの前記バンド識別子は、任意データのビットに設定される、ことを特徴とする請求項１６に記載の方法。
【請求項１８】
前記グループの特徴がサポートされない場合、前記の内部キーの前記バンド識別子はユニークなバンド識別子に設定される、ことを特徴とする請求項１６に記載の方法。
【請求項１９】
前記複数のデータストレージデバイスの各々から少なくとも１つのチャンクを受信するステップと、
前記消去コーディング方式を使用して、前記複数のデータストレージデバイスから受信された少なくとも１つのチャンクからスライスを再構成するステップと、をさらに包含する、ことを特徴とする請求項１６に記載の方法。
【請求項２０】
前記複数のデータストレージデバイスの各々は、キーバリュー・ソリッドステートドライブ（ＫＶ＿ＳＳＤ：  ｋｅｙ−ｖａｌｕｅ  ｓｏｌｉｄ−ｓｔａｔｅ  ｄｒｉｖｅ）である、ことを特徴とする請求項１２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データストレージシステムに関するものであり、さらに詳細にはデータストレージシステムにおいて特に大型キーバリューオブジェクトにアクセスする方法に関する。
【背景技術】
【０００２】
データの信頼性は、データストレージシステムの核心的な要件である。従来のブロックデバイスを使用するデータの信頼性は、消去コーディング（ｅｒａｓｕｒｅ  ｃｏｄｉｎｇ）及びＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）のような多様なデータ複製（ｒｅｐｌｉｃａｔｉｏｎ）技術を使用して具現又は研究されている。  ＲＡＩＤは、データストレージデバイスのセット上にデータを分散（ｓｐｒｅａｄ）（又は、複製（ｒｅｐｌｉｃａｔｅ））して、特定のドライブの永久的なデータの損失を防止する。  ＲＡＩＤは大きく２つのカテゴリに分類される。即ち、データの完全なミラーイメージ（ｍｉｒｒｏｒ  ｉｍａｇｅ）が第２ドライブで維持されるカテゴリと、又は、パリティブロックがデータブロックに追加されているのでフェイル（ｆａｉｌ）状況でフェイルされたデータブロックを回復できるカテゴリと、である。
消去コーディングは、高レベルのフェイルを容認できる強力なデータ保護及び回復を提供する複雑なアルゴリズムを使用してパリティ（ｐａｒｉｔｙ）に類似した一連（ｂｕｎｃｈ）のブロックを追加する。例えば、消去コーディングは、物理的ドライブを仮想化して複数の物理的ドライブに亘り分散されて速い復元を達成できる仮想ドライブを生成できる。  ＲＡＩＤを使用したデータの複製は、大型オブジェクトを複製するためには余りにも高価につき、消去コーディングは、小型オブジェクトに対してはストレージ空間の浪費を招きかねない。
【０００３】
キーバリュー・ソリッドステートドライブ（ＫＶ＿ＳＳＤ：ｋｅｙ−ｖａｌｕｅ  ｓｏｌｉｄ−ｓｔａｔｅ  ｄｒｉｖｅ）は、ＨＤＤ（ｈａｒｄ  ｄｉｓｋ  ｄｒｉｖｅｓ）及びＳＳＤ（ｓｏｌｉｄ−ｓｔａｔｅ  ｄｒｉｖｅｓ）などの従来のブロックデバイスと比較して、相異なるインタフェース及びセマンティクス（ｓｅｍａｎｔｉｃｓ）を有する新しいタイプのストレージである。ＫＶ＿ＳＳＤは、キーバリューペアのデータバリューを直接的に格納できる。ＫＶ＿ＳＳＤに格納されたデータバリューは、アプリケーション及びデータの特性に応じて、巨大にも小型にもなり得る。従って、パフォーマンスの隘路及び空間の制約なしに、異なるサイズを有するオブジェクトを効率的に格納する効率的なデータの信頼性モデルが必要である。
【先行技術文献】
【特許文献】
【０００４】
特許文献１：米国登録特許第９４１７９６３Ｂ２号公報
特許文献２：米国登録特許第９５９４６３３Ｂ２号公報
特許文献３：米国登録特許第９６３９２６８Ｂ２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従って本発明の目的は、従来のメモリタイプとは異なるインタフェース及びセマンティクス（ｓｅｍａｎｔｉｃｓ）を有するＫＶ＿ＳＳＤの特性に適合するように、パフォーマンスの隘路及び空間の制約なしに、異なるオブジェクトを効率的に格納する信頼性の高いモデルを具現するデータストレージシステムを提供する、ことにある。
【課題を解決するための手段】
【０００６】
一実施例によると、データストレージシステムは、キーバリューペアの複数のオブジェクトを格納する複数のデータストレージデバイスと、前記複数のオブジェクトの各々のオブジェクトサイズに基づいて、データの複製方式及び消去コーディング方式を含む相異なるデータ信頼性方式を適用する仮想ストレージレイヤと、を含み、前記複数のオブジェクトは、第１サイズを有する第１オブジェクト及び前記第１サイズよりも大きい第２サイズを有する第２オブジェクトを含み、前記仮想ストレージレイヤは、前記第１オブジェクトを小型オブジェクトとして分類して前記データ複製方式を適用し、前記小型オブジェクトを前記複数のデータストレージデバイスの中の何れか１つ、又はそれ以上に亘って格納し、前記仮想ストレージレイヤは、前記第２オブジェクトを巨大オブジェクトとして分類して前記巨大オブジェクトを同一サイズの１つ又はそれ以上のチャンクに分割し、前記消去コーディング方式を適用して前記複数のデータストレージデバイスに亘って前記１つ又はそれ以上のチャンクを分散して格納する。
【０００７】
他の実施例によると、キーバリューペアのオブジェクトにアクセスする方法は、キーバリューペアの複数のオブジェクトを受信するステップと、ここで、前記複数のオブジェクトは、第１サイズを有する第１オブジェクト及び前記第１サイズよりも大きい第２サイズを有する第２オブジェクトを包含し、前記第１オブジェクトを小型オブジェクトとして分類するステップと、前記小型オブジェクトにデータ複製方式を適用するステップと、前記小型オブジェクトを複数のデータストレージデバイスの何れか１つ又はそれ以上に亘って格納するステップと、前記第２オブジェクトを巨大オブジェクトとして分類するステップと、前記巨大オブジェクトを同一サイズの１つ又はそれ以上のチャンクに分割するステップと、前記巨大オブジェクトに消去コーディング方式を適用するステップと、前記１つ又はそれ以上のチャンクを前記複数のデータストレージデバイスに亘って分散（ｄｉｓｔｒｉｂｕｔｅｄｌｙ）して格納するステップと、を包含する。
【０００８】
イベントの具現及び組み合わせの多様な新しい記述を含む前述された、そして、他の適切な特徴は、添付された図面を参照し、さらに詳細に説明され、特許請求の範囲において示されるであろう。本文で記載された特定のシステム及び方法は、記述のためだけに図示され、本発明はこれに制限されない。本文に記載された理論及び特徴は、本発明の思想から逸脱せずに、多様な実施例に具現されうることが当業者によって理解されるはずである。
【発明の効果】
【０００９】
オブジェクトのサイズを判別して、小型オブジェクトにはデータ複製方式を、大型オブジェクトにはチャンク分割の上、消去コーディング方式を適用するので、異なるサイズを有する複数のオブジェクトを効率的に管理・格納できる。
【図面の簡単な説明】
【００１０】
本発明の詳細な仕様の一部として含まれた添付された図面は、今回の好ましい実施例を図解し、上述の概括的記述及び以下に提供される好ましい実施例の詳細な記述と共に、ここに記述された本発明の原理の説明と教示に資するであろう。
【００１１】
【図１】図１は、一実施例による例示的なデータストレージデバイスに格納されたオブジェクトの概念図を示す。
【図２】図２は、一実施例によるユーザキーを含む例示的な内部キーを示す。
【図３】図３は、一実施例による、グループの特徴を使用するオブジェクトの回収の実施例を示す。
【図４】図４は、一実施例による、グループの特徴なきオブジェクト回収の実施例を示す。
【図５】図５は、一実施例による専用パリティデバイスのない消去コーディングの実施例を示す。
【図６】図６は、一実施例による１つ又はそれ以上の専用パリティデバイスを使用した消去コーディングの実施例を示す。
【図７】図７は、一実施例による、パリティ装置なしで、１つ又はそれ以上のデータストレージデバイスを通した小型オブジェクトの例示的な複製方式を示す。
【図８】図８は、一実施例によるオブジェクトをライト（ｗｒｉｔｅ）する（書込む）例示的なフローチャートを示す。
【図９】図９は、一実施例によるオブジェクトをライトする例示的なフローチャートの一部のサブプロセスを示す。
【図１０】図１０は、一実施例によるオブジェクトをリード（ｒｅａｄ）する（読出す）例示的なフローチャートを示す。
【図１１】図１１は、一実施例によるオブジェクトをリードする例示的なフローチャートの一部のサブプロセスを示す。
【図１２】図１２は、一実施例によるオブジェクトをリードする例示的なフローチャートの別の一部のサブプロセスを示す。
【００１２】
図面の全体に亘って図面の簡潔性のために、図面は必ずしも実寸に合わせて描かれず、類似の構造又は機能の要素は、一般的に類似の参照番号により表示される。図面は、本文に記載された多様な実施例の記述を容易にすることのみ意図される。図面は、本文に開示された教示の全ての思想を記述せず、特許請求の範囲を制限しない。
【発明を実施するための形態】
【００１３】
本文に記載された特徴及び教示の各々は、他の特徴及び教示と共に、又は個別に使用されて、相異なるサイズを有するオブジェクトを効率的に格納するデータストレージシステム及びデータストレージシステムにオブジェクトを格納する方法を提供できる。多様な付加的な特徴及び教示を個別に、又は組み合わせて使用する代表的な実施例は、添付された図面を参照して、さらに詳細に記述される。この詳細な記述は、単に当業者に本発明の思想を実施できるように教示するためのものであり、特許請求の範囲を制限する意図はない。従って、詳細な説明で上記に開示された特徴の組み合わせは、最も広い意味で、本発明を実施するのに必須ではない可能性があり、単に本発明の格別に代表的な実施例を記述するために教示される。
【００１４】
以下の説明では、単純に説明の便宜のために、特定の命名法が本発明の全体的な理解を助けるために使用される。しかし、このような特定の記述が本開示の教示を具現するのに必須でないことは、当業者には明白であろう。
【００１５】
本文の詳細な説明の一部は、コンピュータメモリ内のデータビットに対する演算のアルゴリズム及びシンボリックな表現の形で提供される。このようなアルゴリズミックな説明及び表現は、データ処理技術分野における当業者が自分の研究内容を同じ技術分野における他の当業者に効果的に伝達するために使用される。アルゴリズムは、本文では、しかし一般的にも、意図した結果を導出する一貫性のある一連のステップとして表現される。ステップは、物理量を物理的に操作しなければならないステップである。一般的に、しかし必須ではないが、このような物理量は、格納され、放送（一斉通知、ｂｒｏａｄｃａｓｔ）され、組み合わせられ、比較され、異なるように変形されうる電気又は磁気信号の形態を有する。主に、共通的に普通に使用されているとの理由により、このような信号をビット、バリュー、要素、シンボル、特徴、用語、数字などで示されるのが便利であることが度々実証されている。
【００１６】
しかし、これら及び類似の用語は全て、適切な物理量と関連されるべきであり、斯かる物理量に適用される便利なラベルに過ぎない。以下の説明で、明らかにするように、特に別な意味と言及されない限り、詳細な説明の全般にわたって、「処理（ｐｒｏｃｅｓｓｉｎｇ）」、「計算（ｃｏｍｐｕｔｉｎｇ）」、「演算（ｃａｌｃｕｌａｔｉｎｇ）」、「決定（ｄｅｔｅｒｍｉｎｉｎｇ）」、  「表示（ｄｉｓｐｌａｙｉｎｇ）」などのような用語を使用する説明は、コンピュータシステム又はコンピュータシステムのレジスタ及びメモリ内で物理的（電子的）量として表現されたデータを、コンピュータシステムのメモリ、レジスタ又は他の情報ストレージ内において物理量として類似に表現される相異なるデータに変形して放送する類似の電子コンピューティングデバイス、放送又は表示デバイスの動作及び処理を示す。
【００１７】
さらに、代表的な実施例及び従属請求項における多様な特徴は、本発明の有用な実施例を追加的に提供するために、必ずしも特定的ではなく且つ明示的に列挙されていない方式で組み合わされる。
全てのバリューの範囲、又は、エンティティ（ｅｎｔｉｔｙ）のグループの指称（表示、ｉｎｄｉｃａｔｉｏｎ）は、本来の開示目的のために、同時に、請求される構成要件（Ｓｕｂｊｅｃｔ＿ｍａｔｔｅｒ）を制限する目的のために、全ての可能な中間値又は中間オブジェクトを開示している、ことをここに明記する。図面に示された構成要素の形状及び寸法（ｄｉｍｅｎｓｉｏｎ）は、単に本発明が具現される方式の理解を助けるために設計されており、実施例で図示された寸法及び形状に本発明を含む限定する意図はない、こともここに明記する。
【００１８】
本発明の開示は、大型キーバリューオブジェクトをデータストレージシステムに格納するデータストレージシステム及び方法を記述する。本発明のデータストレージシステムは、１つ又はそれ以上のデータストレージデバイスに高い信頼性を有するデータを格納できる。特に、本発明のデータストレージシステムは、オブジェクトを、そのサイズに基づき異なる形で格納して、コスト及びストレージ空間を減らし、高い信頼性を達成できる。大型オブジェクトと関連されたデータは、小型のピース（ｓｍａｌｌ  ｐｉｅｃｅｓ）に分割（ｓｐｌｉｔ）されることができ、１つ又はそれ以上のデータストレージデバイスに格納されることができる。ここで、データストレージデバイスに格納されたデータがキーバリューペア（ｋｅｙ−ｖａｌｕｅ＿ｐａｉｒ）と関連されたデータアレイの場合、データストレージデバイスは、キーバリュー・ソリッドステートドライブに（ＫＶ＿ＳＳＤｓ：  ｋｅｙ−ｖａｌｕｅ  ｓｏｌｉｄ  ｓｔａｔｅ  ｄｒｉｖｅｓ）と称され得る。
【００１９】
オブジェクト（例えば、キーバリューペアのバリュー）は、複数の同じサイズのチャンク（ｃｈｕｎｋｓ）、即ち複数のピースに（ｍｕｌｔｉｐｌｅ  ｐｉｅｃｅｓ）に分割（ｓｐｌｉｔ）されることができる。チャンクのサイズは、ランタイム中に動的にオブジェクト単位で決定されることができる。その大きさに応じて、オブジェクトは、相異なる個数及びサイズのチャンクを包含できる。
【００２０】
グループ（ｇｒｏｕｐ）は、目標データの信頼性（ｔａｒｇｅｔ  ｄａｔａ  ｒｅｌｉａｂｉｌｉｔｙ）を具現するためのデータストレージデバイスのセットとして定義される。グループは、ボックス（例えば、シャーシ（ｃｈａｓｓｉｓ）又はラック（ｒａｃｋ））内の又はボックスを介した１つ又はそれ以上のデータストレージデバイスを含むことができ、階層的又は非階層的に構造化されることができる。
【００２１】
本発明のデータストレージシステムは、１つ又はそれ以上のデータストレージデバイスのグループ化を管理し、全体的に単一の仮想ストレージユニットとしてユーザアプリケーションに対してグループを提供する仮想ストレージレイヤを含む。仮想ストレージレイヤは、１つ又はそれ以上のデータストレージデバイスを制御する複数のドライバを管理するために使用されることができる。仮想ストレージレイヤが管理するデータストレージデバイスの個数は、信頼性の目標（ｒｅｌｉａｂｉｌｉｔｙ  ｔａｒｇｅｔ）に基づいて構成されることができる。
消去コーディング（ｅｒａｓｕｒｅ  ｃｏｄｉｎｇ）に対し、データストレージデバイスの全体の個数は、Ｐ個のフェイルを容認するためには、データデバイス（Ｄ）とパリティデバイス（Ｐ）の合計であり得る。
複製（ｒｅｐｌｉｃａｔｉｏｎ）に対し、Ｐ個のフェイルを容認するデータストレージデバイスの全体の個数は、Ｐ＋１であり得る。データストレージデバイスのストレージ容量は、消去コーディング又は複製においてほぼ類似になる可能性がある。仮想ストレージのストレージ容量は、グループ内の全データストレージデバイスのデータストレージ空間の合計によって決定されることができる。
【００２２】
一実施例によると、仮想ストレージレイヤは、１つ又はそれ以上のデータストレージデバイスのグループをステートレス方式（ｓｔａｔｅｌｅｓｓ  ｍａｎｎｅｒ）で管理できる。つまり、仮想ストレージレイヤは、オブジェクトとデータストレージデバイスとの間の如何なるマッピング情報もキー情報も維持しないし、且つ維持する必要がない。ただし、仮想ストレージレイヤは、オブジェクトの個数、利用可能なストレージ容量、及び／又はそれらと類似した種類の、１つ又はそれ以上のデータストレージデバイスにおいて必須のメタデータを、ランタイムで動的にキャッシュ且つ維持できる。
【００２３】
ＫＶ＿ＳＳＤのようなデータストレージデバイスは、オブジェクト及び処理可能なオブジェクトに対するオペレーションに対する具現に特有の制限を有する。データストレージシステムの仮想ストレージレイヤは、各データストレージデバイスがサポート可能な最小バリュー及び最大バリューのサイズを認識できており、最小バリュー及び最大バリューのサイズを決定できる。
【００２４】
例えば、ＶＭＩＮｉが第ｉ番目のＫＶ＿ＳＳＤの最小バリューのサイズである場合、仮想ストレージの最小バリューサイズ（ＶＭＩＮ＿ＶＳ）は、グループ内の個々のＫＶ＿ＳＳＤの全ての最小バリューのサイズの中の最大バリューによって定義されることができる。
【数１】
2019128960.tif 000003
同様に、ＶＭＡＸｉが第ｉ番目のＫＶ＿ＳＳＤの最大バリューのサイズである場合、仮想ストレージの最大バリューのサイズ（ＶＭＡＸ＿ＶＳ）は、グループ内の個々のＫＶ＿ＳＳＤの全ての最大バリューのサイズの中の最小バリューによって定義されることができる。
【数２】
2019128960.tif 000004
一実施例で、ＲＳ（Ｒｅｅｄ−Ｓｏｌｏｍｏｎ）コードのようなＭＤＳ（ｍａｘｉｍｕｍ  ｄｉｓｔａｎｃｅ  ｓｅｐａｒａｂｌｅ）アルゴリズムが、消去コーディング（ｅｒａｓｕｒｅ  ｃｏｄｉｎｇ）のために使用されることができる。
【００２５】
本発明の一実施例によると、本発明のシステム及び方法は、オブジェクトのサイズに基づいて複製及び消去コーディングの両方を活用する（ｌｅｖｅｒａｇｅ）ハイブリッド型データ信頼性メカニズム（ｈｙｂｒｉｄ  ｄａｔａ  ｒｅｌｉａｂｉｌｉｔｙ  ｍｅｃｈａｎｉｓｍ）を提供する。データの複製（ｒｅｐｌｉｃａｔｉｏｎ）は、小型のオブジェクト（ｓｍａｌｌ  ｏｂｊｅｃｔｓ）に対して速く、計算負荷が軽い可能性がある。ただし、データの複製は、消去コーディングと比較するとき、大型オブジェクト（ｌａｒｇｅ  ｏｂｊｅｃｔｓ）に対して、より多くのストレージ空間を消費し得る。消去コーディングは、大型オブジェクトに対して、データの複製よりもストレージ空間の消費が通常、少ないが、複数のデータストレージデバイスに影響を及ぼしながら、このような大型オブジェクトを復元できる。
しかし、複数のデータストレージデバイスから複数のチャンクを必要とするので、消去コーディングは、一般的に、重い計算を伴って、小型のオブジェクトを復元するのに多くの時間が消費されることができる。これは、データの消去コーディングを遂行した後に、データを複製する非階層的な方式である。代わりに、本発明のシステム及び方法は、オブジェクトのサイズに基づいて、データの複製と消去コーディングとの間の選択について柔軟な決定を提供する。言い換えると、本発明のシステム及び方法は、データの信頼性判断、つまり、オブジェクトのサイズだけでなく、オブジェクトを格納するための全体空間のオーバヘッドに基づいて、ランタイムでのデータ複製又は消去コーディングの何れを適用するべきかを決定できる。
【００２６】
一実施例によると、本発明のシステム及び方法では、オブジェクトがアップデートされる際に、リード・モディファイ・ライトのオーバヘッド（ｒｅａｄ−ｍｏｄｉｆｙ−ｗｒｉｔｅ  ｏｖｅｒｈｅａｄ）を伴わない。ブロックデバイスに対する従来の消去コーディング又はデータの複製は、部分的アップデートが存在するときでも、多くのオーバヘッドを伴う。もしデータの小さな部分がアップデートされる場合でも、消去コーディングに対するブロックの全てがリードされてアップデートされなければならないし、アップデート後にパリティブロックは、再演算され、データストレージデバイスに再書込み（ライトバック）されなければならない。言い換えると、１つのブロックが多重のオブジェクトで共有されることができるので、オブジェクトのアップデートは、一連のリード・モディファイ・ライトのプロセスを必要とする。
対照的に、本発明のシステム及び方法は、オブジェクト及びその特性、例えば、サイズに基づく信頼性を提供できる。オブジェクトがアップデートされる場合、リード・モディファイ・ライトのオーバヘッドが発生することなしに、アップデートされたオブジェクトだけがオーバライト（上書き、ｏｖｅｒ−ｗｒｉｔｅ）を必要とする。
【００２７】
本発明の一実施例によると、本発明のシステム及び方法は、統合フレームワーク（ｕｎｉｆｉｅｄ  ｆｒａｍｅｗｏｒｋ）の元に広範囲なオブジェクトのサイズをサポートする。オブジェクトがデータストレージデバイスのストレージ容量の限界を超えて、非常に大きな（又は巨大な）場合には、データストレージデバイスは、オブジェクトを全体として格納できない可能性がある。この場合、オブジェクトは、小型のピース（ｐｉｅｃｅ）（以下、チャンク（ｃｈｕｎｋ）と称される。）に分割される必要がある。本発明の開示は、データストレージデバイスの容量に基づいて、オブジェクトがチャンクに分割され、分割されたチャンクから復元（ｒｅｂｕｉｌｄ）する方法を論議する。例えば、本発明のシステム及び方法は、以下でより詳細に論議されるように、データストレージデバイスのグループ特徴サポート（ｇｒｏｕｐ  ｆｅａｔｕｒｅ  ｓｕｐｐｏｒｔ）に基づいて多様な分割及び復元メカニズムを提供する。
【００２８】
本発明のシステム及び方法は、固定されたブロックに基づかないオブジェクトの信頼性を提供する。データの複製及び消去コーディングは、オブジェクトのサイズに基づいてオブジェクトを分岐する（ｂｉｆｕｒｃａｔｅ）ことにより、シングルディスクグループに対するオブジェクトの目標信頼性（ｔａｒｇｅｔ  ｒｅｌｉａｂｉｌｉｔｙ）を具現するようにミックスして組み合わされる。このような方法は、階層的構造（つまり、消去コーディングされたオブジェクトに対する複製）を含む従来のデータの信頼性技法とは異なる。本発明のシステム及び方法は、スペース（空間）の効率性を一次的関心事として有し、性能は、特定のオブジェクトに適した信頼性のメカニズムを決定するための二次的要素である。オブジェクトのストレージは、ステートレス（ｓｔａｔｅｌｅｓｓ）である。複製又は消去コーディングの何れか１つのために、追加の情報が格納される必要はない。オブジェクトのサイズと無関係にアップデートについてリード・モディファイ・ライトのオーバヘッドが要求されない。
【００２９】
本文で、オブジェクトは、入力及び出力（Ｉ／Ｏ：ｉｎｐｕｔ  ａｎｄ  ｏｕｔｐｕｔ）オペレーションの間において固定されたバリュー（ｆｉｘｅｄ  ｖａｌｕｅ）を有する静的データ（ｓｔａｔｉｃ  ｄａｔａ）を示す。オブジェクトは、キーバリューペアのキーと関連されることができる。このような場合、オブジェクトは、キーバリューペアのバリューに対応する。オブジェクトは、同じサイズの複数のチャンクに分割されることができ、チャンクのサイズは、ランタイム中において動的にオブジェクト単位ベースに決定されることができる。各オブジェクトは、一つ又はそれ以上のデータストレージデバイスに格納されるとき、相異なる個数及び相異なるサイズのチャンクを包含できる。
【００３０】
データの信頼性なしに、１つ又はそれ以上のデータストレージデバイス（例えば、ＫＶ＿ＳＳＤ）に亘って一度に全て格納されるオブジェクトのデータのチャンクの最小セットは、本文でスライス（ｓｌｉｃｅ）と称する。例えば、スライスは、１つ又はそれ以上のデータストレージデバイスに分割して格納されたオブジェクトの複数個のチャンクと対応する。データの信頼性（例えば、複製又は消去コーディング）を具現するオブジェクトのデータのチャンクの最小セットは、「バンド（ｂａｎｄ）」と称する。バンド内のチャンクの個数は、パリティチャンクのためスライスのチャンクの個数よりも多い可能性がある。グループ内の１つ又はそれ以上のデータストレージデバイスの中の１つのデータストレージデバイスに格納されたオブジェクトのチャンクのセットはスプリット（ｓｐｌｉｔ）と称されることができる。
【００３１】
スライスは、データの複製（つまり、原本の（ｏｒｉｇｉｎａｌ）オブジェクトの複製されたコピー）に対しては、（目標オブジェクトの）１つのチャンクのみを包含できる。一方、スライスは、消去コーディングに対しては、目標オブジェクトを含むＤ個のチャンクを包含できる。一方、バンドは、データ複製に対しては、Ｐ個の複製チャンク及び１つの原本チャンクを含むことができる一方、消去コーディングに対しては、Ｐ個のパリティチャンク及びＤ個のデータチャンクを含むことができる。スライス又はバンドの個数は、スプリット内のチャンクの総数に対応する。
スプリットサイズ（つまり、１つのデータデバイスに格納されたチャンクの個数）及びバンドサイズ（つまり、１つ又はそれ以上のデータストレージデバイスに格納された、１つのオブジェクトに含まれるデータチャンク及びパリティチャンクの個数の合計）は、原本のオブジェクト及びチャンクのサイズに応じて可変されることができる。例えば、スプリットサイズは、データの複製に対しては原本のサイズであり得るが、スプリットサイズは、消去コーディングに対してはバンド当たりチャンク個数で全チャンク個数を除算して得られるサイズである。
【００３２】
図１は、一実施例による、例示的なデータストレージシステムに格納されたオブジェクトの概念図を示す。オブジェクト１１０は、複数のチャンクに分割されることができる。例えば、オブジェクト１１０は、３Ｓ個のチャンク（Ｃｈｕｎｋ＿１〜Ｃｈｕｎｋ＿３Ｓ）に分けられる（但し、Ｓは自然数）。チャンクの総数３Ｓは、例示的なものであり、オブジェクト１１０のチャンクの総数は、相異なる数であり得、オブジェクト１１０は、３の倍数個に分割されなくてもよい。オブジェクト１１０は、以下で詳細に説明されるように、非常に大きな（ｖｅｒｙ  ｌａｒｇｅ）、即ち巨大な（ｈｕｇｅ）オブジェクトとして分類されることができる。分割（ｓｐｌｉｔ）されたチャンクは、１つ又はそれ以上のデータストレージデバイスに亘る仮想ストレージ内に分散（ｄｉｔｒｉｂｕｔｅ）されることができる。本発明の実施例で、仮想ストレージ空間は、Ｄ個のデータストレージデバイス（Ｄｉｓｋ＿１〜Ｄｉｓｋ＿Ｄ）及びＰ個のパリティデバイス（Ｄｉｓｋ＿Ｄ＋１〜Ｄｉｓｋ＿Ｄ＋Ｐ）を含む。本発明の実施例で、Ｓ及びＤは同一である。
【００３３】
一実施例によると、データストレージシステムの仮想ストレージレイヤは、スプリット第１（優先）方式（スプリット優先分散）、又はバンド第１（優先）方式（バンド優先分散）の何れかによりチャンクを分散させることができる。
スプリット第１方式では、仮想ストレージレイヤは、仮想ストレージ１２０において、チャンク（Ｃｈｕｎｋ＿１、Ｃｈｕｎｋ＿２、Ｃｈｕｎｋ＿３）を第１データストレージデバイス（Ｄｉｓｋ＿１）に格納し、チャンク（Ｃｈｕｎｋ＿４、  Ｃｈｕｎｋ＿５、Ｃｈｕｎｋ＿６）を第２データストレージデバイス（Ｄｉｓｋ＿２）に格納し、同様にチャンク（Ｃｈｕｎｋ＿３Ｄ−２、Ｃｈｕｎｋ＿３Ｄ−１、Ｃｈｕｎｋ＿３Ｄ）を、第Ｄデータストエージデバイス（Ｄｉｓｋ＿Ｄ）に格納する。バンド１５０は、チャンク（Ｃｈｕｎｋ＿１、Ｃｈｕｎｋ＿４、．．．、Ｃｈｕｎｋ＿３Ｄ−２）及びパリティチャンク（Ｐａｒｉｔｙ＿１〜Ｐａｒｉｔｙ＿Ｐ）を含む。
バンド優先方式では、仮想ストレージレイヤは、仮想ストレージ１２１において、チャンク（Ｃｈｕｎｋ＿１〜Ｃｈｕｎｋ＿Ｄ）をデータストレージデバイス（Ｄｉｓｋ＿１〜Ｄｉｓｋ＿Ｄ）に各々格納し、チャンク（Ｃｈｕｎｋ＿Ｄ＋１〜Ｃｈｕｎｋ＿２Ｄ）をデータストレージデバイス（Ｄｉｓｋ＿１〜Ｄｉｓｋ＿Ｄ）に各々格納し、同様にチャンク（Ｃｈｕｎｋ＿２Ｄ＋１〜Ｃｈｕｎｋ＿３Ｄ）をデータストレージデバイス（Ｄｉｓｋ＿１〜Ｄｉｓｋ＿Ｄ）に各々格納する。スプリット１５１は、データのチャンク（Ｃｈｕｎｋ＿１、Ｃｈｕｎｋ＿Ｄ＋１、Ｃｈｕｎｋ＿２Ｄ＋１）を含む。パリティチャンク（Ｐａｒｉｔｙ＿１〜Ｐａｒｉｔｙ＿Ｐ）はパリティディスク（Ｄｉｓｋ＿Ｄ＋１〜Ｄｉｓｋ＿Ｄ＋Ｐ）に格納される。
本実施形態では、説明の便宜のために、仮想ストレージ１２０及び仮想ストレージ１２１の両方が、バンド優先方式でパリティチャンクを格納する場合が示されるが、パリティチャンクの格納は、本発明の思想から逸脱せずにスプリット優先方式で遂行されうることが理解されるであろう。
【００３４】
Ｉ／Ｏオペレーションは、どのようなチャンク分散方式が使用されているかに関係なしに、バンド優先方式で実行されることができる。このような場合で、チャンク（Ｃｈｕｎｋ＿１、Ｃｈｕｎｋ＿４、．．．、Ｐａｒｉｔｙ＿Ｐ）に対するＩ／Ｏオペレーションは、スプリット優先方式でも並列にアクセスされる。
【００３５】
一実施例によると、消去コーディングは、オブジェクトのサイズに基づいてオブジェクトに適用される。サイズ（ＳＺＯｉ）を有する第ｉ番目のオブジェクト（Ｏｉ）に対し、デバイス当たりチャンクの数、即ち、スプリット（ＮＣＯｉ）は、下の数学式３によって定義される。複製に対し、デバイス当たりチャンクの個数は１であり得る（つまり、ＮＣＯｉ＝１）。
【数３】
2019128960.tif 000005
【００３６】
デバイス当たりチャンクの数（ＮＣＯｉ）は、最大チャンクサイズ（ＶＭＡＸＶＳ）が使用されている場合には、データディスクに（つまり、Ｄｉｓｋ＿１〜Ｄｉｓｋ＿Ｄとして参照されたデータストレージデバイス）に亘って、オブジェクト（Ｏｉ）を格納するためのスプリット当たりのチャンクの最小の個数である。オブジェクトのサイズがデータストレージデバイスの割り当て又は整列の単位で整列されない場合、バンド内のオブジェクトのために割り当てられた追加の空間が０（ｚｅｒｏｓ）でパディング（ｐａｄｄｅｄ）されることができる。
【００３７】
最大のチャンクサイズが使用される場合は、多すぎるパディングを使用して、ストレージ空間が浪費になる傾向がある。従って、オブジェクト（Ｏｉ）の実際のチャンクサイズは数学式４によって、より厳密に決定される。ＳＺｍｅｔａは、追加のメタデータがチャンク当たりデータと共に格納される場合のメタデータのサイズである。データストレージデバイスがグループの特徴をサポートしている場合、グループ識別子（ｇｒｏｕｐ＿ＩＤ：ｇｒｏｕｐ＿ｉｄｅｎｔｉｆｉｅｒ）及びチャンクの総数のような、一部のメタデータが、各チャンクに格納されることができる。データストレージデバイスがグループの特徴をサポートしていない場合、格納されるメタデータはない（つまり、ＳＺｍｅｔａ  ＝  ０）。複製に対し、実際のチャンクサイズは、その原本のオブジェクトのサイズと同一であり得る（つまり、ＣＯｉ  ＝  ＳＺＯｉ）。
【数４】
2019128960.tif 000006
【００３８】
数学式４によるＣＯｉは、ＶＭＩＮＶＳとＶＭＡＸＶＳとの間の範囲にあるが、ＶＭＡＸＶＳに近いチャンクサイズを決定する。数学式４によって決定されたチャンクサイズは、Ｉ／Ｏ帯域幅を最大化しながら、Ｉ／Ｏオペレーションの回数を最小化できる。各データストレージデバイスが、格納するデータの総量（つまり、スプリットサイズ）は、数学式５によって定義される。
【数５】
2019128960.tif 000007
最終的に、データストレージデバイスに亘って一度にライト（書込み）されるデータの全体の総量、即ち、バンドサイズは、数学式６によって定義される。複製についてＤは１と同じである。
【数６】
2019128960.tif 000008
【００３９】
前述されたように、データストレージデバイスは、データストレージデバイスが、格納できるオブジェクトのサイズに対する制限を有する。一部のデータストレージデバイスは、非常に大きな大型オブジェクト又は非常に小さい小型のオブジェクトをサポートできない可能性がある。相異なるサイズを有するオブジェクトの信頼性の高い効率的な格納を達成するために、本発明のデータストレージシステムは、格納されるオブジェクトのサイズに基づいて、相異なるデータの信頼性の方式を適用できる。一実施例によれば、本発明のデータストレージシステムの仮想ストレージレイヤは、オブジェクトのサイズに基づいてオブジェクトを４つのタイプに、即ち、巨大（ｈｕｇｅ）、大型（ｌａｒｇｅ）、中型（ｍｅｄｉｕｍ）、及び小型（ｓｍａｌｌ）に分類する。
オブジェクトを格納するのに複数のバンドが使用される場合、オブジェクトが巨大であるものに分類される。オブジェクトを格納するのに１つのバンドがほぼ全体的に使用される場合、オブジェクトが大型であるものに分類される。オブジェクトを格納するのにバンドの小さな部分（ｓｍａｌｌ  ｆｒａｃｔｉｏｎ）が使用される場合、オブジェクトが小型であるものに分類される。最後に、オブジェクトが小型又は大型に分類できる場合、オブジェクトが中型であるものに分類される。従って、相異なるサイズを有するチャンクが同じ仮想ストレージだけでなく、仮想ストレージを形成する個々のデータストレージデバイスに共存できる。
【００４０】
オブジェクトに対する複製の空間オーバヘッドが、オブジェクトの消去コーディングの空間オーバヘッドよりも小さい場合、オブジェクトは、小型であるものに分類される。この場合、読み取り（リード）に対して、より良いパフォーマンスが提供され、複雑な消去コーディング方式よりもアップデートの管理が容易であるので、複製方式の選択が適切である。この選択は、アプリケーションのメタデータが小さくなる傾向がある状況では合理的である。一実施例で、サイズＳＺＯｉを有する小型オブジェクト（Ｏｉ）は、数学式７を満足する。
【数７】
2019128960.tif 000009
【００４１】
オブジェクトに対する消去コーディングの空間オーバヘッドがオブジェクトに対するデータ複製の空間オーバヘッドよりも小さい場合、オブジェクトは、大型のものに分類される。この場合に、より小さな空間を有するので、消去コーディング方式の選択が適切である。特に、大型のオブジェクトは、数学式８を満足する。
【数８】
2019128960.tif 000010
大型のオブジェクトは、図１と類似した構成になれるが、１つのバンドだけ、即ち、１つのスプリット内には１つのチャンクだけ包含できる。
【００４２】
オブジェクトがスプリット内で１つ以上のチャンクを含む場合、オブジェクトは巨大なものに分類される。この場合、消去コーディングが適切である。特に、巨大オブジェクトは、数学式９を満足する。
【数９】
2019128960.tif 000011
巨大オブジェクトは、図１と類似するように構成されることができるが、スプリット内に複数のチャンク又は複数のバンドを包含できる。
【００４３】
小型又は大型の何れにも分類されることができないオブジェクトのサイズの範囲が存在できる。即ち、数学式１０を満足するオブジェクトは、中型のものに分類される。
【数１０】
2019128960.tif 000012
このような場合には、データの複製又は消去コーディングの中の何れか１つが使用されることができる。性能がより重要であり、オブジェクトが頻繁にアップデートされる場合、データ複製がよりよい選択であり得る。この場合、中型のオブジェクトは、小型のものに分類されることができる。空間効率性がより重要な場合には、消去コーディングが使用されることができる。このような場合、中型のオブジェクトは、大型のものに分類されることができる。
【００４４】
仮想ストレージレイヤは、オブジェクトを格納し、スプリットデータチャンクを使用してオブジェクトを再建して巨大オブジェクトを回収するために、巨大オブジェクトを小型データチャンクに分割（ｓｐｌｉｔ）する必要があり得る。このため、ユーザ（例えば、ホストコンピュータ上で駆動するするユーザアプリケーション）キーから生成された内部キー（ｉｎｔｅｒｎａｌ  ｋｅｙ）が、仮想ストレージレイヤをステートレスにするのに使用されることができる。
一実施例によると、仮想ストレージレイヤは、チャンクを分配する内部使用のために、デバイスによりサポートされたキー空間（ｄｅｖｉｃｅ−ｓｕｐｐｏｒｔｅｄ  ｋｅｙ  ｓｐａｃｅ）中の数バイトを保留し、キー空間の残りの部分をユーザに開放する。この場合、ユーザ特定のオブジェクトキーは、オブジェクトの１つ又はそれ以上の分割されたチャンクのための内部キーのグループを代表する。
【００４５】
図２は、一実施形態による、ユーザのキーを含む例示的な内部キーを示している。内部キー２００は、第１部分のユーザキー２０１及び第２部分のバンド識別子（ＩＤ；  ｉｄｅｎｔｉｆｉｅｒ）２０２を含む。内部キー２００は、対応するオブジェクトに対するチャンクの部分又はチャンクの全グループを識別するために使用されることができる。この場合で、オブジェクトは、キーバリューペアのキーとしての内部キー２００を含むキーバリューペアのバリューに対応する。現在の実施例で、仮想ストレージレイヤ及び／又はデータデバイスでサポートする最大キーの長さ（ｍａｘｉｍｕｍ  ｋｅｙ  ｌｅｎｇｔｈ）はＬであり、グループの特定（ｇｒｏｕｐ  ｓｐｅｃｉｆｉｃａｔｉｏｎ）のために予約されたバイトの個数はＧである。仮想ストレージレイヤは、ユーザが、使用できる最大キー長さがＬ−Ｇであることを通知する。
【００４６】
小型又は大型オブジェクトに対し、ＧバイトのバンドＩＤ（２０２）は、基本的に（ｂｙ＿ｄｅｆａｕｌｔ）０でパディングできる。巨大オブジェクトに対し、仮想ストレージレイヤは、オブジェクトのバンドの個数を計算できる。個々のバンドは、内部キー２０１を使用して識別されることができる。バンドはスプリット優先又はバンド優先方式に応じて１つずつオブジェクトを格納するために割り当てられた１つ又はそれ以上のデータストレージデバイスに書込みされることができる。
【００４７】
一実施例によると、データストレージデバイスは、グループの特徴（ｇｒｏｕｐ  ｆｅａｔｕｒｅ）をサポートできる。仮想ストレージレイヤは、ユーザキー２０１に基づいて、グループを特定することにより、データストレージデバイスに格納されたスプリットを識別できる。この場合で、追加のメタデータが要求されない可能性がある（ＳＺ＿ｍｅｔａ  ＝  ０）。仮想ストレージレイヤは、「ｄｏ＿ｎｏｔ＿ｃａｒｅ」ビット（任意（ａｒｂｉｔｒａｒｙ）データのビット、例えば、０ｘＦＦ）で満たされたバンドＩＤ（２０２）及びユーザキー２０１を、全てのデータストレージデバイスに通知することで、オブジェクトに対する全てのチャンクを回収できる。
バンドＩＤが「ｄｏ＿ｎｏｔ＿ｃａｒｅ」である場合、バンドＩＤフィールドは無視される。データストレージデバイスがグループの特徴を効率的に具現することが仮定されることができる。例えば、トライ木構造（ｔｒｉｅ  ｓｔｒｕｃｔｕｒｅ）は、ユーザキー２０１の与えられた所定の接頭部（ｐｒｅｆｉｘ）を有するオブジェクトを容易に識別できる一方で、ハッシュテーブルは、メタデータフィールドが固定されている場合にのみ、ユーザキーを使用してハッシュバケットからオブジェクトを発見できる。仮想ストレージレイヤは、デバイスごとにバンドＩＤ２０２に基づいて、返されたオブジェクトチャンクを昇順（ａｓｃｅｎｄｉｎｇ  ｏｒｄｅｒ）に整列させて、バンド及びオブジェクトを再構成して、ユーザキー２０１と共にオブジェクトを返す。
【００４８】
図３は、一実施例による、グループの特徴を使用するオブジェクトの回収の例を示す。オブジェクトを格納するように割り当てられたデータストレージデバイス（つまり、Ｄｉｓｋ＿１〜Ｄｉｓｋ＿Ｄ及びＤｉｓｋ＿Ｄ＋１〜Ｄｉｓｋ＿Ｐ）の各々は、グループの特徴（ｇｒｏｕｐ  ｆｅａｔｕｒｅ）をサポートする。この場合で、バンドＩＤ（３０２）は、バンドＩＤ（３０２）を無視するように「ｄｏ＿ｎｏｔ＿ｃａｒｅ」と設定される。仮想ストレージレイヤは、ユーザキー３０１を使用してバンド３５０に属するチャンク（つまり、データのチャンク１、２、．．．、Ｄと、パリティチャンク１〜Ｐ）を収集し、バンド３５０からのチャンク（Ｃｈｕｎｋ＿１〜Ｃｈｕｎｋ＿Ｄ）を含む第１スライスを再構成する。
その後で、仮想ストレージレイヤは、残りのチャンクを収集し、残りのスライスを順番に再構成する。全てのスライスが構成された場合、仮想ストレージレイヤは、スライスからのデータのチャンク（Ｃｈｕｎｋ＿１〜３Ｄ）を含むオブジェクト３１０を再構成する。消去コーディングの場合で、仮想ストレージレイヤは、パリティチャンク（ｐａｒｉｔｙ  ｃｈｕｎｋ  １〜Ｐ）からパリティブロックをさらに再構成する。現在の実施例で、チャンクを分割することについてバンド優先方式を示しているが、本発明の思想から逸脱せずに、スプリット優先方式がチャンク分割及びオブジェクト回収に適用できることが理解されるであろう。
【００４９】
図４は、一実施例による、グループの特徴がないオブジェクトの回収の例を示す。この場合で、オブジェクトを格納するために割り当てられたデータストレージデバイスがグループの特徴をサポートしていないので、仮想ストレージレイヤは、大型又は巨大オブジェクトに追加のメタデータを添付する（つまり、ＳＺ＿ｍｅｔａ≠０）。各チャンクは、１バイトの長さを有するバンドＩＤ４０２によって識別されることができる。現在の実施例では、バンドの個数が１バイトの長さに適合できるように、３つのバンド（Ｂａｎｄ＿１、Ｂａｎｄ＿２、Ｂａｎｄ＿３）が存在することができる。
仮想ストレージレイヤは、バンドＩＤ４０２を使用して１つずつスライスを構成できる。まず、仮想ストレージレイヤは、バンドＩＤが０（ＢＩＤ  ＝  ０）であるバンド０と共にユーザキー４０１を、全てのデータストレージデバイスに放送する。仮想ストレージレイヤは、全てのデータストレージデバイスからバンド０（Ｂａｎｄ＿０）に対するチャンクを受信し、受信されたチャンクの中のバンド０（Ｂａｎｄ＿０）に属するチャンクからバンド情報を回収する。受信されたバンドの情報をベースに、仮想ストレージレイヤは、バンドの数を認知して、オブジェクトを回収する。オブジェクトが大型の場合は、１つのバンドのみが存在できるので、仮想ストレージレイヤは、そのバンド内のチャンクからオブジェクト全体を再構成できる。
巨大オブジェクトに対しては１つより多くのチャンクが存在するので、仮想ストレージレイヤは、複数のバンド（例えば、Ｂａｎｄ＿１とＢａｎｄ＿２）を１つずつ回収することを必要とする。この場合で、仮想ストレージレイヤは、全てのチャンクが回収されるまで、バンドＩＤを調節する（例えば、ＢＩＤ  ＝  １又はＢＩＤ  ＝  ２）ことにより、回収要請を放送する。仮想ストレージレイヤが、全てのスライスを構成した場合、仮想ストレージレイヤは、オブジェクト４１０を再構成できる。小型オブジェクトは、デバイスがグループの特徴をサポートしているか否かに無関係に、メタデータを有していない可能性がある。チャンクサイズをチェックすることで、仮想ストレージレイヤは、数学式７及び数学式１０を使用して、オブジェクト４１０が小型であるか否かを決定できる。
【００５０】
巨大オブジェクトを１つ又はそれ以上のデータストレージデバイスに書込むために、巨大オブジェクトは、同じサイズのＮＣＯｉ  ×  Ｄ個のチャンクに（つまり、ＮＣｏｉ個のスライス）に分割されることができる。最後のデータチャンク（例えば、図５でオブジェクト５１０ａのデータ４ａ（Ｄａｔａ＿４ａ）及びオブジェクト５１０ｂのデータ４ｂ（Ｄａｔａ＿４ｂ））は、配列の要求を考慮して、０（ｚｅｒｏ）にパディングされることができ、Ｐ個のパリティチャンクはスライス当たりＤ個のデータのチャンクから生成されることができる。
【００５１】
図５は、一実施例による、専用のパリティデバイスがない消去コーディングの例を示す。図６は、一実施例による、１つ又はそれ以上の専用パリティデバイスを使用した消去コーディングの例を示す。各バンド当たりＤ個のデータチャンク及びＰ個のパリティチャンクを含む（Ｄ＋Ｐ）個のチャンクの全体は、１つ又はそれ以上のデータストレージデバイスに分散されてＮＣＯｉ個のバンドの全てが書込みされる。パリティチャンクは、Ｄ＋Ｐ個のデバイスの一部（例えば、図５でＳＳＤ４乃至ＳＳＤ６）に分散して格納されるか、又はＰ個の専用デバイス（例えば、図６のＳＳＤ５及びＳＳＤ６）に格納されることができる。
主データストレージデバイスは、データストレージデバイス上でバンドＩＤなしでユーザキーのハッシュバリュー（以下、「Ｈａｓｈ（ｕｓｅｒ＿ｋｅｙ）」（ハッシュ（ユーザキー））と称される）を使用して選択されることができる。（Ｄ＋Ｐ）個のデバイスの全部又は一部は、図５の実施例で選択されることができ、Ｄ個のデバイスは、図６の実施例で選択されることができる。スタートデバイスは、専用のパリティデバイスがない場合、Ｈａｓｈ（ｕｓｅｒ＿ｋｅｙ）％（Ｄ＋Ｐ）によって決定でき、又は、専用のパリティデバイスが存在する場合、Ｈａｓｈ（ｕｓｅｒ  ｋｅｙ）％Ｄによって決定できる。
後続のチャンクは、次のデバイス（例えば、（Ｈａｓｈ（ｕｓｅｒ＿ｋｅｙ）＋  １）％（Ｄ＋Ｐ）、（Ｈａｓｈ（ｕｓｅｒ  ｋｅｙ）＋２）％（Ｄ＋Ｐ）、．．．、（Ｈａｓｈ（ｕｓｅｒ  ｋｅｙ）＋  Ｄ  ＋  Ｐ−１）％（Ｄ＋Ｐ）、又は、（Ｈａｓｈ（ｕｓｅｒ＿ｋｅｙ）＋  １）％Ｄ、（Ｈａｓｈ（ｕｓｅｒ＿ｋｅｙ）＋２）％Ｄ、．．．、（Ｈａｓｈ（ｕｓｅｒ＿ｋｅｙ）＋  Ｄ−  １）％Ｄ）の順に順次的に書込みされることができる。このようなオペレーションは、バンド当たり動作であり、仮想ストレージレイヤは、オブジェクトのチャンクを書込むために、全てのＮＣＯｉ個のバンドに対して、このような手順を繰り返す。ユーザキーのハッシュバリューは、各オブジェクト当たり一度計算されることを必要とする。
【００５２】
データストレージデバイスがグループの特徴をサポートしていない場合、チャンクは、図４に図示されたように、バンドの全体の個数及びバンドＩＤに対する追加のメタデータを含む。バンドの個数は、数学式３によって決定されることができる。バンドのチャンクは、メタデータとして（ｂａｎｄ  ＩＤ、ＮＣＯｉ）のペアを包含できる。
【００５３】
図５を参照すると、仮想ストレージレイヤは、オブジェクト５１０ａのデータチャンク（Ｄａｔａ＿１ａ〜Ｄａｔａ＿４ａ）及びパリティチャンク（Ｐａｒｉｔｙ＿１ａとＰａｒｉｔｙ＿２ａ）を、データストレージデバイス（ＳＳＤ１〜ＳＳＤ６）を通して格納する。仮想ストレージレイヤは、他のオブジェクト５１０ｂのデータチャンク（Ｄａｔａ＿１ｂ〜Ｄａｔａ＿４ｂ）及びパッリティチャンク（Ｐａｒｉｔｙ＿１ｂとＰａｒｉｔｙ＿２ｂ）をデータストレージデバイス（ＳＳＤ１〜ＳＳＤ６）を通して格納する。スタートデバイス（例えば、オブジェクト５１０ａに対するＳＳＤ１及びオブジェクト５１０ｂに対するＳＳＤ６）は、前述されたように、ユーザキーのハッシュバリューによって決定されることができる。専用パリティデバイスがないので、仮想ストレージレイヤは、データチャンク及びパリティチャンクを区別せずに、データのチャンク及びパリティチャンクをデータストレージデバイス（ＳＳＤ１〜ＳＳＤ６）に分散できる。現在の実施例で、ＳＳＤ４及びＳＳＤ６は、データチャンク及びパリティチャンクを全て含む。
【００５４】
図６を参照すると、仮想ストレージレイヤは、オブジェクト６１０ａのデータチャンク（Ｄａｔａ＿１ａ〜Ｄａｔａ＿４ａ）及びパリティチャンク（Ｐａｒｉｔｙ＿１ａとＰａｒｉｔｙ＿２ａ）を、データストレージデバイス（ＳＳＤ１〜ＳＳＤ６）を通して格納する。同様に、仮想ストレージレイヤは、オブジェクト６１０ｂのデータチャンク（Ｄａｔａ＿１ｂ〜Ｄａｔａ＿４ｂ）及びパリティチャンクに（Ｐａｒｉｔｙ＿１ｂ及びＰａｒｉｔｙ＿２ｂ）をデータストレージデバイス（ＳＳＤ１〜ＳＳＤ６）に亘って格納する。ＳＳＤ５及びＳＳＤ６はパリティデバイスに割り当てられたので、ＳＳＤ５及びＳＳＤ６はパリティチャンクだけを含む。
【００５５】
大型のオブジェクトを１つ又はそれ以上のデータストレージデバイスに書込むために、大型のオブジェクトは、同じサイズのＮＣＯｉ×Ｄ個のチャンクに分割されることができる。大型オブジェクトは、オブジェクトに対して１つのバンド（つまり、ＮＣＯｉ  ＝  １）であり得る点だけを除けば、巨大オブジェクトと同じように管理される。
【００５６】
小型のオブジェクトを格納するために、該オブジェクトに対して（Ｐ＋１）個の複製オブジェクトが生成されることができる。パディングを含む整列を考慮すると、複製オブジェクトは（Ｐ＋１）個のデバイスに分散されることができる。主デバイスは、（Ｄ＋Ｐ）デバイス上で（但し、Ｄ＝１）、ユーザキーのハッシュバリューを使用して選択されることができる。Ｐ個の複製オブジェクトは、ストレージの組織、性能などのような多様な要因をベースに決定論的に選択されることができる。たとえば、複製オブジェクトは（Ｈａｓｈ（ｋｅｙ）＋  １）％（Ｄ＋Ｐ）、（Ｈａｓｈ（ｋｅｙ）＋２）％（Ｄ＋Ｐ）、．．．、（Ｈａｓｈ（ｋｅｙ）＋  Ｐ）％（Ｄ＋Ｐ）、又は、専用のパリティデバイスの有無と関係なしに、相異なるノード、又はラックに単純に格納されることができる。専用パリティデバイス又はノードが存在する場合、複製オブジェクトは（Ｈａｓｈ（ｋｅｙ）＋  １）％Ｄ、（Ｈａｓｈ（ｋｅｙ）＋２）％Ｄ、．．．、（Ｈａｓｈ（ｋｅｙ）＋  Ｐ）％Ｄに格納されることができる。デバイスの容量と関係なしに、小型のオブジェクトは、メタデータを包含しない。
【００５７】
図７は、一実施例による、パリティデバイスなしで、１つ又はそれ以上のデータストレージデバイスに亘る小型オブジェクトの例示的な複製方式を示す。仮想ストレージレイヤは、データストレージデバイス（ＳＳＤ１、ＳＳＤ２、ＳＳＤ３）を通して小型オブジェクト７１０ａ（Ｏｂｊｅｃｔ＿１）を格納できる。仮想ストレージレイヤは、小型オブジェクト７１０ｂ（Ｏｂｊｅｃｔ＿２）チャンクをデータストレージデバイス（ＳＳＤ３、ＳＳＤ４、及びＳＳＤ５）に亘って格納できる。小型オブジェクト（７１０ａ、７１０ｂ）は、より小さなデータチャンクに分割されない。オブジェクト（７１０ａ、７１０ｂ）を格納するためのスタートデバイスは、対応するユーザキーのハッシュバリューによって決定できる。現在の実施例で、オブジェクト７１０ａに対するスタートデバイスはＳＳＤ１であり、オブジェクト７１０ｂに対するスタートデバイスはＳＳＤ３である。現在の実施例で、オブジェクト（７１０ａ、７１０ｂ）の各々に対する複製オブジェクトの全体の個数は３である（つまり、Ｐ  ＝  ２）。
【００５８】
図８は、一実施例による、オブジェクトを書込む例示的なフローチャートを示す。データストレージシステムの仮想ストレージレイヤは、オブジェクトを書込むためのライト（ｗｒｉｔｅ）要請を受信する（８０１）。ユーザ（又はホストコンピュータ上で駆動するユーザアプリケーション）から受信されたライト（ｗｒｉｔｅ）要請は、ユーザのキーを含むことができる。仮想ストレージレイヤは、オブジェクトが巨大又は大型か否かを、例えば、数学式８及び数学式９を使用して判別する（８０２）。大型又は巨大オブジェクトに対し、仮想ストレージレイヤはスプリット当たり、そしてバンド当たりチャンクサイズ及びチャンクの個数を、例えば、数学式３及び数学式４を使用して決定し（８１１）、データストレージデバイスに亘って１つ又はそれ以上のバンドにデータを書込み（８１２）、ライト（ｗｒｉｔｅ）の手順を完了する（８１５）。
【００５９】
仮想ストレージレイヤが、オブジェクトは大型でも巨大でもないと判断した場合、仮想ストレージレイヤは、オブジェクトが小型であるかを、例えば、数学式７を使用して判別する（８０３）。小型オブジェクトに対し、仮想ストレージレイヤは、分散ポリシー（ｄｉｓｔｒｉｂｕｔｉｏｎ  ｐｏｌｉｃｙ）に基づいて、原本のデータ及び複製データを含むデータを格納するための１つ又はそれ以上のストレージデバイスを決定し（８１３）、バンドの１つ又はそれ以上のデバイスに亘ってデータを書込み（８１４）、ライト（ｗｒｉｔｅ）手順を完了する（８１５）。例えば、仮想ストレージレイヤがバンド優先ポリシー（複数のデータストレージデバイスに亘ってデータを分散すること）を使用できる。仮想ストレージレイヤは、ユーザのキーのハッシュバリューを使用してスタートデバイスを決定できる。
【００６０】
仮想ストレージレイヤが、オブジェクトは巨大でも大型でも小型でもないと判断した場合、仮想ストレージレイヤは、オブジェクトを中型のものとして処理し（８０４）、分散ポリシーに基づいて、原本のデータ及び複製データを含むデータを格納するための１つ又はそれ以上のデータストレージデバイスを決定し（８１３）、バンドの１つ又はそれ以上のデバイスにデータを書込み（８１４）、ライト（ｗｒｉｔｅ）手順を完了する（８１５）。
【００６１】
データストレージデバイスを通した１つ又はそれ以上のバンドへのデータ書込みの手順（８１２）は、幾つかのサブプロセス（ｓｕｂ−ｐｒｏｃｅｓｓｅｓ）を含むことができる。
図９を参照すると、まず、仮想ストレージレイヤは、書込みのためのスライスが存在するかを判別する（８２０）。書込みのためのスライスが存在しない場合、仮想ストレージレイヤは、エラーログを格納し、オペレーションを終了し、オブジェクトを書込むための要請を放送したホストコンピュータ上で動作するユーザアプリケーション及び／又はホストコンピュータのオペレーティングシステムに知らせる。書込みのためのスライスが存在する場合、仮想ストレージレイヤは、オブジェクトのスライスを作成し、スライスのチャンクに対する内部キーを生成する（８２１）。
仮想ストレージレイヤは、これが書込みのための最後のスライスであるかをチェックする（８２２）。最後のスライスに対し、仮想ストレージレイヤは、スライスがバンドを一杯埋めることができない場合、データのチャンクにパディング（ｐａｄｄｉｎｇｓ）を追加し、消去コーディングアルゴリズムを使用して、バンドに対するＰ個のパリティチャンクを計算する（８２４）。最後のスライス以外の他のスライスに対して、仮想ストレージレイヤはパディング手順８２３を省略している。仮想ストレージレイヤは、分散ポリシーに基づいて、データ及びパリティチャンクに対するデバイスをさらに決定する（８２５）。例えば、分散ポリシーは、スプリット優先又はバンド優先ポリシーの何れか１つであり得る。仮想ストレージレイヤは、８２１で生成された内部キーと共にバンド内のデータ及びパリティチャンクを１つ又はそれ以上のストレージデバイスに書込む（８２６）。
【００６２】
仮想ストレージレイヤは、ユーザキー及びバリューサイズなどのオブジェクトのメタデータを維持していないので、仮想ストレージレイヤはリード（ｒｅａｄ）するべきオブジェクトが小型であるか、大型であるか、又は巨大であるかを認識できない。従って、仮想ストレージレイヤは、オブジェクトのユーザキーを使用して、仮想ストレージの全てのデータストレージデバイス（例えば、（Ｄ＋Ｐ）個のデータストレージデバイス）にリード要請を放送し、オブジェクトのサイズの分類に基づいてオブジェクトを再構成する適切な方法を決定する。データストレージデバイスによってサポートされるグループの特徴に応じて、仮想ストレージレイヤは、リード及びライトのオペレーションを異なる方式で処理できる。
【００６３】
巨大オブジェクトは、データストレージデバイスによるグループの特徴のサポートに基づいて相異なる方法でリードされることができる。仮想ストレージのデータストレージデバイスがグループの特徴をサポートしている場合は、仮想ストレージレイヤは、ＢＩＤ  ＝「ｄｏ＿ｎｏｔ＿ｃａｒｅ」と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、放送に応答したエラーがない場合は、（Ｄ＋Ｐ）個のデータストレージデバイスの各々は、そのスプリットのＮＣＯｉ個のチャンクを返す。以後に、仮想ストレージレイヤは、受信されたチャンクを、それらのバンドＩＤ当たりＮＣＯｉ個のバンドの全体に分類し、バンドＩＤの昇順にバンドを整列させる。
仮想ストレージレイヤが各バンド当たり同一サイズのＤ個のチャンクを受信している限り、仮想ストレージレイヤは、バンドを再構成できる。バンドに対して受信されたチャンクの全体の個数が、データストレージデバイスの個数（Ｄ）よりも小さいか、又はチャンクのサイズが同じでない場合は、エラーが発生する。このエラーは、全てのデータストレージデバイスが「ＮＯＴ＿ＥＸＩＳＴ」（不存在）エラーを返す場合という不在オブジェクトのリード（ａ  ｒｅａｄ  ｏｆ  ｎｏｎ−ｅｘｉｓｔｉｎｇ  ｏｂｊｅｃｔ）、又は復旧できないエラー（ｕｎｒｅｃｏｖｅｒａｂｌｅ  ｅｒｒｏｒ）によって発生されることができる。仮想ストレージレイヤは、バンドを１つずつ再構成し、その後に、バンドからオブジェクトを再構成する。
【００６４】
仮想ストレージのデータストレージデバイスがグループの特徴をサポートしていない場合、仮想ストレージレイヤは巨大オブジェクトをリードするために、ＢＩＤ  ＝  ０と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、（Ｄ＋Ｐ）個のデータストレージデバイスの各々は、第１バンド（Ｂａｎｄ＿０）から１つのチャンクを返す。仮想ストレージレイヤは、受信されたチャンクの一部と共に格納されたメタデータをチェックすることで、オブジェクトに対するバンドの個数を識別できる。仮想ストレージレイヤは、以後に、バンドＩＤの昇順で１つずつ全てのバンドを再構成して、バンドを使用してオブジェクトを再構成する。幾つかの実施例で、仮想ストレージレイヤは、残りのバンドの全てを非同期的に要請することで、グループのサポートされている場合と同様に、オブジェクトを再構成できる。
【００６５】
大型のオブジェクトのリードの手順は、バンドが単一である点を除けば、巨大オブジェクトのリードの手順と同様である。データストレージデバイスがグループの特徴をサポートしている場合は、仮想ストレージレイヤは、ＢＩＤ  ＝  「ｄｏ＿ｎｏｔ＿ｃａｒｅ」と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、（Ｄ＋Ｐ）のデータストレージデバイスの各々は、そのスプリットの１つのチャンクを返す。
仮想ストレージレイヤが同一サイズのＤ個のチャンクを受信している限り、仮想ストレージレイヤは、バンド、即ちオブジェクトを再構成できる。バンドに対して受信されたチャンクの全体の個数が、データチャンクの数（Ｄ）よりも小さいか、又はチャンクのサイズが同じでない場合は、エラーが発生する。このエラーは、全てのデータストレージデバイスが「ＮＯＴ−ＥＸＩＳＴ」（不存在）エラーを返す場合という不在オブジェクト（ｎｏｎ−ｅｘｉｓｔｉｎｇ  ｏｂｊｅｃｔ）のリード、又は復旧できないエラー（ｕｎｒｅｃｏｖｅｒａｂｌｅ  ｅｒｒｏｒ）によって発生されることができる。
【００６６】
仮想ストレージのデータストレージデバイスがグループの特徴をサポートしていない場合、仮想ストレージレイヤは大型オブジェクトをリードするために、ＢＩＤ  ＝  ０と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、（Ｄ＋Ｐ）個のデータストレージデバイスの各々は、バンド（ＢＩＤ  ＝  ０）で、１つのチャンクを返す。仮想ストレージレイヤは、受信されたチャンクと共に格納されたメタデータをチェックすることにより、大型のオブジェクトに対して１つのバンドのみが存在することを識別し、バンドを再構成することで、オブジェクトを再構成できる。
【００６７】
小型オブジェクトのリードの手順は、複製に依存するという点を除けば、大型オブジェクトのリードの手順と同様である。データストレージデバイスがグループの特徴をサポートする場合、仮想ストレージレイヤはＢＩＤ  ＝「ｄｏ＿ｎｏｔ＿ｃａｒｅ」と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、（Ｄ＋Ｐ）のデータストレージデバイスの各々は、応答を返す。オブジェクトが小型であるので、幾つかのデータストレージデバイスは、「ＮＯＴ＿ＥＸＩＳＴ」のエラーを返すことができる一方で、他のデータストレージデバイスは、チャンクを返す。仮想ストレージレイヤは、１つ又はそれ以上のデータストレージデバイスから受信されたチャンクを使用して、オブジェクトを再構成できる有効なチャンクを受信する。全てのデータストレージデバイスが「ＮＯＴ＿ＥＸＩＳＴ」エラーを返す場合、リード要請によって識別されるオブジェクトは、不在オブジェクトであるか、又は復旧できないエラーが発生することができる。
【００６８】
仮想ストレージのデータストレージデバイスがグループの特徴を提供していない場合、仮想ストレージレイヤは小型オブジェクトをリードするために、ＢＩＤ  ＝  ０と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、（Ｄ＋Ｐ）のデータストレージデバイスの各々は、応答を返す。仮想ストレージレイヤは、任意のデータストレージデバイスから受信された、幾つかの有効なチャンクを使用して、オブジェクトが小型であるかを識別できる。小型オブジェクトは、追加のメタデータを維持しない。
【００６９】
図１０は、一実施例による、オブジェクトをリードする例示的なフローチャートを示す。仮想ストレージレイヤは、オブジェクトへのリード要請を受信する（９０１）。ユーザ（又はホストコンピュータ上で動作するユーザアプリケーション）から受信されたリード要請は、ユーザのキーを含むことができる。仮想ストレージレイヤは、オブジェクトの１つ又はそれ以上のチャンクを格納する、１つ又はそれ以上のデータストレージデバイスによってグループの特徴がサポートされるかを判別する（９０２）。グループの特徴がサポートされている場合、仮想ストレージレイヤは、ＢＩＤ  ＝  「ｄｏ＿ｎｏｔ＿ｃａｒｅ」を有する内部キーと共にリード要請を全てのデータデバイスに放送し（９０３）、そうでない場合は、ＢＩＤ  ＝  ０を全てのデータストレージデバイスに設定する（９０４）。仮想ストレージレイヤは、データストレージデバイスの何れか１つからチャンクを受信する（９０５）。受信されたチャンクにエラーがない場合（９０６）、仮想ストレージレイヤは、グループの特徴がサポートされているかを判別し（９０７）、グループの特徴がサポートされていない場合、チャンクのメタデータを回収する（９０８）、グループの特徴がサポートされている場合、仮想ストレージレイヤは、オブジェクトのサイズを判別し続ける。
【００７０】
仮想ストレージレイヤが、オブジェクトが巨大又は大型であると判断した場合（９０９）、仮想ストレージレイヤは、全体のオブジェクトが再構成されたかをさらにチェックし（９１０）、１つ又はそれ以上のデータストレージデバイスから受信されたチャンクを使用して、全体のオブジェクトが再構成されるまでスライスを１つずつ再構成し続けて（９１２）、リードの手順を完了する（９１３）。小型オブジェクトに対しては、仮想ストレージレイヤは、１つ又はそれ以上のデータストレージデバイスから受信されたチャンクを使用してオブジェクトを再構成する（９１１）。
【００７１】
小型オブジェクトを再構成する手順（９１１）は、幾つかのサブプロセスを含むことができる。
図１１を参照すると、仮想ストレージレイヤは、受信されたチャンクが小型であるかを、まずチェックする（９２１）。仮想ストレージレイヤは、小型オブジェクトに対する小型チャンクを予想するが、大きなチャンクを受信した場合、仮想ストレージレイヤは、エラーを発生する（９２４）。仮想ストレージレイヤが、受信されたチャンクが有効であると判断した場合（９２２）、仮想ストレージレイヤは、受信されたチャンクを使用して、小型のオブジェクトを再構成し（９２３）、そうでない場合には、仮想ストレージレイヤは、他のデータストレージデバイスからチャンクを受信する（９２５）。
【００７２】
スライスを再構成する手順（９１２）は、幾つかのサブプロセスを含むことができる。
図１２を参照すると、仮想ストレージレイヤは、スライスを再構成するＤ個のチャンクが全て受信されたかをチェックする（９３１）。もしそうなら、仮想ストレージレイヤには、Ｄ個のチャンクと共に消去コーディングアルゴリズムを使用してスライスを再構成する（９３５）。もしそうでない場合、仮想ストレージレイヤは、現在のバンドの全てのチャンクが受信されたかをチェックする（９３２）。バンドの全てのチャンクが受信された場合、受信されたチャンクのうち少なくとも１つが有効でないことが有り得るので、仮想ストレージレイヤは、エラーを生成する（９３６）。受信されるチャンクがさらに存在する場合、仮想ストレージレイヤは、他のデータストレージデバイスからのそれらを受信し続けて（９３３）、スライスを再構成する全てのＤ個のチャンクを受信するまで手順を繰り返す。受信されたチャンクが大型オブジェクトのものでも、巨大オブジェクトのものでもない場合（たとえば、チャンクが小型オブジェクトのものである場合）、仮想ストレージレイヤは、エラーを発生する（９３６）。
【００７３】
一実施例によると、データストレージシステムは、キーバリューのペアの複数のオブジェクトを格納する複数のデータストレージデバイスと、前記複数のオブジェクトの各々のオブジェクトサイズに基づいて消去コーディング方式及びデータ複製方式を含む相異なるデータ信頼性方式を適用する仮想ストレージレイヤを含む。前記複数のオブジェクトは、第１サイズを有する第１オブジェクト及び前記第１のサイズよりも大きい第２サイズを有する第２オブジェクトを含む。
前記仮想ストレージレイヤは、前記第１オブジェクトを小型オブジェクトとして分類して前記データ複製方式を適用し、前記小型オブジェクトを前記複数のデータストレージデバイスの何れか１つ又はそれ以上に亘って格納する。
前記仮想ストレージレイヤは、前記第２オブジェクトを巨大オブジェクトとして分類して前記巨大オブジェクトを同一サイズの１つ又はそれ以上のチャンクに分割し、前記消去コーディング方式を適用して前記１つ又はそれ以上のチャンクを前記複数のデータストレージデバイスに亘って分散して格納する。
【００７４】
前記分散方式は、前記仮想ストレージレイヤが前記巨大オブジェクトの前記１つ又はそれ以上のチャンクを前記複数のデータストレージデバイスの各々に宛てて分割（ｓｐｌｉｔ）し、前記複数のデータストレージデバイスに亘って前記データストレージデバイスの各々に前記分割した１つ又はそれ以上のチャンクを格納するスプリット優先分散方式である場合がある。
【００７５】
前記分散方式は、上述のスプリット優先分散と異なり、前記仮想ストレージレイヤが前記巨大ブジェクトの前記１つ又はそれ以上のチャンクが、前記１つ又はそれ以上のデータストレージデバイスに全て格納されるまで、前記複数のデータストレージデバイスの各々に、前記巨大オブジェクトの１つのチャンクを格納するバンド優先分散方式である場合がある。
【００７６】
前記仮想ストレージレイヤは、第３サイズを有する第３オブジェクトを大型オブジェクトとしてさらに分類でき、前記大型オブジェクトを同一サイズの１つ又はそれ以上のチャンクに分割し、前記消去コーディング方式を適用して、前記複数のデータストレージデバイスに亘って前記分割した１つ又はそれ以上のチャンクを分散して格納する。前記第３サイズは、前記第１サイズより大きく、前記第２サイズより小さい。前記大型オブジェクトは、１つのバンドだけ、即ち、１つのスプリット内には１つのチャンクだけを含む。
【００７７】
前記仮想ストレージレイヤは、第４サイズを有する第４オブジェクトを中型オブジェクトとしてさらに分類できる。前記第４サイズは、前記第１サイズより大きく、前記第３サイズより小さい。前記仮想ストレージレイヤは、前記データ複製方式及び前記消去コーディング方式の何れか１つを適用する。
【００７８】
前記のオブジェクトの各々は、ユーザキーを使用して識別されることができる。前記仮想ストレージレイヤは、前記巨大オブジェクトに対するバンド識別子及び前記ユーザキーを含む内部キーを生成できる。前記バンド識別子は、複数のバンドの中で各々のバンドを識別するために使用される。前記複数のバンドの各々は、前記複数のデータストレージデバイスに亘って分散された１つ以上のチャンクのうちの何れか１つのチャンクを含む。
【００７９】
前記の仮想ストレージレイヤは、前記ユーザキーのハッシュバリューを使用して前記複数のデータストレージデバイスのうち前記１つ又はそれ以上のチャンクの１番目のチャンクをライトするか、又はリードするためのスタートデータストレージデバイスを識別できる。
【００８０】
前記複数のデータストレージデバイスは、前記巨大オブジェクトに関連されたパリティチャンクを格納する、１つ又はそれ以上の専用パリティデータストレージデバイスを包含できる。
【００８１】
前記複数のデータストレージデバイスは、グループの特徴をサポートでき、前記仮想ストレージレイヤは、前記巨大オブジェクトをリードするとき、前記バンド識別子を任意データのビットに設定して、前記複数のデータストレージデバイスに向かって放送できる。
【００８２】
前記複数のデータストレージデバイスは、グループの特徴をサポートしていない可能性があり、その場合、前記仮想ストレージレイヤは、前記巨大オブジェクトをリードするとき、前記バンド識別子をユニークな（固有の、ｕｎｉｑｕｅ）バンド識別子に設定して前記複数のデータストレージデバイスに向かって放送できる。
【００８３】
前記複数のデータストレージデバイスの各々は、キーバリュー・ソリッドステートドライブ（ＫＶ＿ＳＳＤ：ｋｅｙ−ｖａｌｕｅ  ｓｏｌｉｄ−ｓｔａｔｅ  ｄｒｉｖｅ）であり得る。
【００８４】
他の実施例によると、キーバリューペアのオブジェクトにアクセスする方法は、キーバリューペアの複数のオブジェクトを受信するステップと、ここで、前記複数のオブジェクトは、第１サイズを有する第１オブジェクト及び前記第１サイズより大きい第２サイズを有する第２オブジェクトを包含し、前記第１オブジェクトを小型オブジェクトとして分類するステップと、前記小型オブジェクトにデータ複製方式を適用するステップと、前記小型オブジェクトを複数のデータストレージデバイスの何れれか１つ又はそれ以上に亘って格納するステップと、前記第２オブジェクトを巨大オブジェクトとして分類するステップと、前記巨大オブジェクトを同一サイズの１つ又はそれ以上のチャンクに分割するステップと、前記巨大オブジェクトに消去コーディング方式を適用するステップと、前記複数のデータストレージデバイスに亘って前記１つ又はそれ以上のチャンクを分散して格納するステップと、を包含する。
【００８５】
前記の方法は、前記オブジェクトへのライト（書込み）要請を受信するステップと、前記オブジェクトが前記巨大オブジェクトであるか否かを判別するステップと、前記巨大オブジェクトに対するチャンクサイズ及びチャンクの個数を判別するステップと、前記チャンクサイズ及び前記チャンク個数に基づいて、前記複数のデータストレージデバイスに、前記巨大オブジェクトの前記１つ又はそれ以上のチャンクをライトするステップと、をさらに包含できる。
【００８６】
前記方法は、前記１つ又はそれ以上のチャンクのうち前記複数のデータストレージデバイスの各々に対して１つのチャンクを含むスライスを生成し、前記スライスに含まれた前記１つ又はそれ以上のチャンクの各々に対して、バンド識別子が添付されたユーザキーを使用して内部キーを生成するステップと、前記消去コーディング方式を使用して、前記スライスと対応する前記１つ又はそれ以上のチャンク、及び１つ又はそれ以上のパリティチャンクを含むバンドを生成するステップと、スプリット優先方式及びバンド優先方式を含む分散方式の何れかに基づいて、前記バンドを格納する前記複数のデータストレージデバイスを判別するステップと、及び前記内部キーと共に前記のバンドに、前記１つ又はそれ以上のチャンクをライトするステップと、をさらに包含できる。
【００８７】
前記方法は、前記オブジェクトへのライト（書込み）要請を受信するステップと、前記オブジェクトが前記小型オブジェクトであるか否かを判別するステップと、スプリット優先方式及びバンド優先方式を含む分散方式の何れかに基づいて、前記複数のデータストレージデバイスのうち前記小型オブジェクトの前記１つ又はそれ以上のチャンクを格納するべき部分集合を決定するステップと、前記複数のデータストレージデバイスの前記部分集合に前記小型オブジェクトの前記１つ又はそれ以上のチャンクをライトするステップと、をさらに包含できる。
【００８８】
前記の方法は、前記ユーザキーを含む前記オブジェクトへのリード（読出し）要請を受信するステップと、前記複数のデータストレージデバイスがグループの特徴をサポートしているかを判別するステップと、前記内部キーと共に前記リード要請を前記複数のデータストレージデバイスに向かって放送するステップと、をさらに包含できる。
【００８９】
前記のグループの特徴がサポートされている場合、前記内部キーの前記バンド識別子は、任意データのビットに設定されることができる。
【００９０】
前記のグループの特徴がサポートされていない場合、前記の内部キーの前記バンド識別子はユニークなバンド識別子に設定されることができる。
【００９１】
前記方法は、前記複数のデータストレージデバイスの各々から少なくとも１つのチャンクを受信するステップと、前記消去コーディング方式を使用して前記複数のデータストレージデバイスから受信された前記少なくとも１つのチャンクからスライスを再構成するステップと、をさらに包含できる。
【００９２】
前記複数のデータストレージデバイスの各々は、キーバリュー・ソリッドステートドライブ（ＫＶ＿ＳＳＤ：  ｋｅｙ−ｖａｌｕｅ  ｓｏｌｉｄ−ｓｔａｔｅ  ｄｒｉｖｅ）であり得る。
【００９３】
前述した例示的な実施例は、相異なるサイズを有するオブジェクトを効率的に格納できるデータストレージシステム及びデータストレージシステムにオブジェクトを格納する方法を具現する多様な実施例を説明するためのものである。記載された例示的な実施例からの多様な変形は、当業者によって容易に行われることができる。本発明の技術的思想から意図された事項は、以下の特許請求の範囲で記載される。
【産業上の利用可能性】
【００９４】
本発明は、パフォーマンスの制限や空間の制約なしに、相異なるサイズを有するオブジェクトを効率的に格納する、高い信頼性を有するデータストレージシステムに有用である。
【符号の説明】
【００９５】
１１０，３１０，４１０，５１０，６１０，７１０      オブジェクト
１２０、１２１，３２１      仮想ストレージ
１５１      スプリット
２００      内部キー
２０１，３０１，４０１      ユーザキー
２０２，４０２      バンド識別子
３０２      バンド識別子（＝‘ｄｏ＿ｎｏｔ＿ｃａｒｅ’の場合）
３５０      バンド
【図１】
2019128960.tif 000013
【図２】
2019128960.tif 000014
【図３】
2019128960.tif 000015
【図４】
2019128960.tif 000016
【図５】
2019128960.tif 000017
【図６】
2019128960.tif 000018
【図７】
2019128960.tif 000019
【図８】
2019128960.tif 000020
【図９】
2019128960.tif 000021
【図１０】
2019128960.tif 000022
【図１１】
2019128960.tif 000023
【図１２】
2019128960.tif 000024