IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 三星電子株式会社の特許一覧

特許7140688データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法
<>
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図1
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図2
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図3
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図4
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図5
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図6
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図7
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図8
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図9
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図10
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図11
  • 特許-データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-09-12
(45)【発行日】2022-09-21
(54)【発明の名称】データストレージシステム及びキーバリューペアのオブジェクトにアクセスする方法
(51)【国際特許分類】
   G06F 13/10 20060101AFI20220913BHJP
   G06F 3/08 20060101ALI20220913BHJP
   G06F 3/06 20060101ALI20220913BHJP
   G06F 11/10 20060101ALI20220913BHJP
【FI】
G06F13/10 340A
G06F3/08 H
G06F3/06 305C
G06F3/06 301Z
G06F3/06 304F
G06F11/10 680
【請求項の数】 18
(21)【出願番号】P 2019007690
(22)【出願日】2019-01-21
(65)【公開番号】P2019128960
(43)【公開日】2019-08-01
【審査請求日】2022-01-17
(31)【優先権主張番号】15/876028
(32)【優先日】2018-01-19
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/635311
(32)【優先日】2018-02-26
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】15/967302
(32)【優先日】2018-04-30
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】390019839
【氏名又は名称】三星電子株式会社
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
【住所又は居所原語表記】129,Samsung-ro,Yeongtong-gu,Suwon-si,Gyeonggi-do,Republic of Korea
(74)【代理人】
【識別番号】110000051
【氏名又は名称】弁理士法人共生国際特許事務所
(72)【発明者】
【氏名】奇 亮 ソク
【審査官】局 成矢
(56)【参考文献】
【文献】特表2015-519674(JP,A)
【文献】米国特許出願公開第2015/0149870(US,A1)
【文献】米国特許第08504535(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 13/10
G06F 3/08
G06F 3/06
G06F 11/10
(57)【特許請求の範囲】
【請求項1】
データストレージシステムであって、
キーバリューペアの複数のオブジェクトを格納する複数のデータストレージデバイスと、
前記複数のデータストレージデバイスを制御するためのデバイスドライバを管理し、前記複数のオブジェクトの各々のオブジェクトサイズに基づいて、データ複製方式及び消去コーディング方式を含む相異なるデータ信頼性方式を適用する仮想ストレージレイヤと、を包含し、
前記複数のオブジェクトは、第1サイズを有する第1オブジェクト及び前記第1サイズより大きい第2サイズを有する第2オブジェクトを包含し、
前記仮想ストレージレイヤは、前記第1オブジェクトを小型オブジェクトとして分類して前記データ複製方式を適用し、前記小型オブジェクトを前記複数のデータストレージデバイスの何れか1つ又はそれ以上に亘って格納し、
前記仮想ストレージレイヤは、前記第2オブジェクトを巨大オブジェクトとして分類して前記巨大オブジェクトを同一サイズの1つ又はそれ以上のチャンクに分割し、前記消去コーディング方式を適用して前記複数のデータストレージデバイスに亘って前記1つ又はそれ以上のチャンクを分散して格納し、
前記仮想ストレージレイヤは、前記複数のオブジェクトの各々のオブジェクトのサイズによる分類に基づいて前記複数のデータストレージデバイス間で1つ又は複数のデータストレージデバイスをグループ化することにより、ホストコンピュータ上で実行されるアプリケーションに仮想記憶ユニットを提供し、
前記複数のオブジェクトの各々は、ユーザキーを使用して識別され、
前記仮想ストレージレイヤは、前記巨大オブジェクトに対するバンド識別子及び前記ユーザキーを含む内部キーを生成し、
前記バンド識別子は、複数のバンドの中で各々のバンドを識別するために使用され、前記複数のバンドのうち、前記バンドの各々は、前記複数のデータストレージデバイスに亘って分散された前記1つ又はそれ以上のチャンクのうちの何れか1つのチャンクを包含することを特徴とするデータストレージシステム。
【請求項2】
前記分散の方式は、前記仮想ストレージレイヤが、前記巨大オブジェクトの前記1つ又はそれ以上のチャンクを分割し、記複数のデータストレージデバイスに亘って順次データストレージデバイス単位で格納するスプリット優先分散の方式であることを特徴とする請求項1に記載のデータストレージシステム。
【請求項3】
前記分散の方式は、前記仮想ストレージレイヤが、前記複数のデータストレージデバイスに前記巨大オブジェクトの前記1つ又はそれ以上のチャンクが全て格納されるまで、前記複数のデータストレージデバイスのそれぞれ、前記巨大オブジェクトの前記1つ又はそれ以上のチャンクの中の1つのチャンクを順次格納するバンド優先分散の方式であることを特徴とする請求項1に記載のデータストレージシステム。
【請求項4】
前記仮想ストレージレイヤは、第3サイズを有する第3オブジェクトを大型オブジェクトとして更に分類し、前記大型オブジェクトを同一サイズの1つ又はそれ以上のチャンクに分割し、前記消去コーディング方式を適用し、前記分割した1つ又はそれ以上のチャンクを前記複数のデータストレージデバイスに亘って分散して格納し、
前記第3サイズは、前記第1サイズより大きく、前記第2サイズより小さく、前記大型オブジェクトは、1つのバンドのみ、即ち、1つのスプリット内には1つのチャンクのみを包含する、ことを特徴とする請求項1に記載のデータストレージシステム。
【請求項5】
前記仮想ストレージレイヤは、第4サイズを有する第4オブジェクトを中型オブジェクトとしてさらに分類し、
前記第4サイズは、前記第1サイズより大きく、前記第3サイズより小さく、
前記仮想ストレージレイヤは、前記データ複製方式及び前記消去コーディング方式の何れか1つを適用する、ことを特徴とする請求項4に記載のデータストレージシステム。
【請求項6】
前記仮想ストレージレイヤは、前記1つ又はそれ以上のチャンクのうち1番目のチャンクをリード又はライトするために前記ユーザキーのハッシュバリューを使用して前記複数のデータストレージデバイスの中でスタートデータストレージデバイスを識別する、ことを特徴とする請求項に記載のデータストレージシステム。
【請求項7】
前記複数のデータストレージデバイスは、前記巨大オブジェクトに関連されたパリティチャンクを格納する、1つ又はそれ以上の専用パリティデータストレージデバイスを包含する、ことを特徴とする請求項1に記載のデータストレージシステム。
【請求項8】
前記複数のデータストレージデバイスは、グループの特徴をサポートし、前記仮想ストレージレイヤは、前記巨大オブジェクトをリードするとき、前記複数のデータストレージデバイスに向かって前記バンド識別子を任意データのビットに設定して放送する、ことを特徴とする請求項に記載のデータストレージシステム。
【請求項9】
前記複数のデータストレージデバイスをグループの特徴をサポートせずに、前記仮想ストレージレイヤは、前記巨大オブジェクトをリードするとき、前記複数のデータストレージデバイスに向かって前記バンド識別子をユニークなバンド識別子に設定して放送する、ことを特徴とする請求項に記載のデータストレージシステム。
【請求項10】
前記複数のデータストレージデバイスの各々は、キーバリュー・ソリッドステートドライブ(KV_SSD: key-value solid-state drive)である、ことを特徴とする請求項1に記載のデータストレージシステム。
【請求項11】
キーバリューペアのオブジェクトにアクセスする方法であって、
キーバリューペアの複数のオブジェクトを受信するステップと、
ここで、前記複数のオブジェクトは、第1サイズを有する第1オブジェクト及び前記第1サイズより大きい第2サイズを有する第2オブジェクトを包含し、
前記第1オブジェクトを小型オブジェクトとして分類するステップと、
前記小型オブジェクトにデータ複製方式を適用するステップと、
前記小型オブジェクトを複数のデータストレージデバイスの何れか1つ又はそれ以上に亘って格納するステップと、
前記第2オブジェクトを巨大オブジェクトとして分類するステップと、
前記巨大オブジェクトを同一サイズの1つ又はそれ以上のチャンクに分割するステップと、
前記巨大オブジェクトに消去コーディング方式を適用するステップと、
前記1つ又はそれ以上のチャンクを前記複数のデータストレージデバイスに亘って分散して格納するステップと、を包含し、
前記複数のオブジェクトの各々は、ユーザキーを使用して識別され、
前記オブジェクトに対するライト(書込み)要請を受信するステップと、
前記オブジェクトが前記巨大オブジェクトであるか否かを判別するステップと、
前記巨大オブジェクトに対するチャンクサイズ及びチャンクの個数を判別するステップと、
前記チャンクサイズ及び前記チャンクの個数をベースに、前記巨大オブジェクトの前記1つ又はそれ以上のチャンクを前記複数のデータストレージデバイスにライトするステップを、さらに包含する、ことを特徴とする方法。
【請求項12】
前記1つ又はそれ以上のチャンクのうち前記複数のデータストレージデバイスの各々に対して1つのチャンクを含むスライスを生成し、前記スライスに含まれた前記1つ又はそれ以上のチャンクの各々に対して、バンド識別子が添付された前記ユーザキーを使用して内部キーを生成するステップと、
消去コーディングを使用して、前記スライス対応する前記1つ又はそれ以上のチャンク、及び1つ又はそれ以上のパリティチャンクを含むバンドを生成するステップと、
スプリット優先方式及びバンド優先方式を含む分散方式の何れかに基づいて、前記バンドを格納するべき複数のデータストレージデバイスを決定するステップと、
前記内部キーを有する前記バンドに、前記1つ又はそれ以上のチャンクをライトするステップと、をさらに包含する、ことを特徴とする請求項11に記載の方法。
【請求項13】
記オブジェクトが前記小型オブジェクトであるか否かを判別するステップと、
スプリット優先方式及びバンド優先方式を含む分散方式の何れかに基づいて、前記小型オブジェクトの前記1つ又はそれ以上のチャンクを格納するべき前記複数のデータストレージデバイスの部分集合を決定するステップと、
前記小型オブジェクトの前記1つ又はそれ以上のチャンクを前記複数のデータストレージデバイスのうちの前記部分集合にライトするステップと、をさらに包含する、ことを特徴とする請求項11に記載の方法。
【請求項14】
前記ユーザキーを含む前記オブジェクトに対するリード(読出し)要請を受信するステップと、
前記複数のデータストレージデバイスがグループの特徴をサポートしているかを判別するステップと、
前記複数のデータストレージデバイスに向かって前記内部キーと共に前記リード要請を放送するステップと、をさらに包含する、ことを特徴とする請求項12に記載の方法。
【請求項15】
前記グループの特徴がサポートされている場合、前記内部キーの前記バンド識別子は、任意データのビットに設定される、ことを特徴とする請求項14に記載の方法。
【請求項16】
前記グループの特徴がサポートされない場合、前記の内部キーの前記バンド識別子はユニークなバンド識別子に設定される、ことを特徴とする請求項14に記載の方法。
【請求項17】
前記複数のデータストレージデバイスの各々から少なくとも1つのチャンクを受信するステップと、
前記消去コーディング方式を使用して、前記複数のデータストレージデバイスから受信された少なくとも1つのチャンクからスライスを再構成するステップと、をさらに包含する、ことを特徴とする請求項14に記載の方法。
【請求項18】
前記複数のデータストレージデバイスの各々は、キーバリュー・ソリッドステートドライブ(KV_SSD: key-value solid-state drive)である、ことを特徴とする請求項11に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データストレージシステムに関するものであり、さらに詳細にはデータストレージシステムにおいて特に大型キーバリューオブジェクトにアクセスする方法に関する。
【背景技術】
【0002】
データの信頼性は、データストレージシステムの核心的な要件である。従来のブロックデバイスを使用するデータの信頼性は、消去コーディング(erasure coding)及びRAID(Redundant Array of Independent Disks)のような多様なデータ複製(replication)技術を使用して具現又は研究されている。 RAIDは、データストレージデバイスのセット上にデータを分散(spread)(又は、複製(replicate))して、特定のドライブの永久的なデータの損失を防止する。 RAIDは大きく2つのカテゴリに分類される。即ち、データの完全なミラーイメージ(mirror image)が第2ドライブで維持されるカテゴリと、又は、パリティブロックがデータブロックに追加されているのでフェイル(fail)状況でフェイルされたデータブロックを回復できるカテゴリと、である。
消去コーディングは、高レベルのフェイルを容認できる強力なデータ保護及び回復を提供する複雑なアルゴリズムを使用してパリティ(parity)に類似した一連(bunch)のブロックを追加する。例えば、消去コーディングは、物理的ドライブを仮想化して複数の物理的ドライブに亘り分散されて速い復元を達成できる仮想ドライブを生成できる。 RAIDを使用したデータの複製は、大型オブジェクトを複製するためには余りにも高価につき、消去コーディングは、小型オブジェクトに対してはストレージ空間の浪費を招きかねない。
【0003】
キーバリュー・ソリッドステートドライブ(KV_SSD:key-value solid-state drive)は、HDD(hard disk drives)及びSSD(solid-state drives)などの従来のブロックデバイスと比較して、相異なるインタフェース及びセマンティクス(semantics)を有する新しいタイプのストレージである。KV_SSDは、キーバリューペアのデータバリューを直接的に格納できる。KV_SSDに格納されたデータバリューは、アプリケーション及びデータの特性に応じて、巨大にも小型にもなり得る。従って、パフォーマンスの隘路及び空間の制約なしに、異なるサイズを有するオブジェクトを効率的に格納する効率的なデータの信頼性モデルが必要である。
【先行技術文献】
【特許文献】
【0004】
特許文献1:米国登録特許第9417963B2号公報
特許文献2:米国登録特許第9594633B2号公報
特許文献3:米国登録特許第9639268B2号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
従って本発明の目的は、従来のメモリタイプとは異なるインタフェース及びセマンティクス(semantics)を有するKV_SSDの特性に適合するように、パフォーマンスの隘路及び空間の制約なしに、異なるオブジェクトを効率的に格納する信頼性の高いモデルを具現するデータストレージシステムを提供する、ことにある。
【課題を解決するための手段】
【0006】
一実施例によると、データストレージシステムは、キーバリューペアの複数のオブジェクトを格納する複数のデータストレージデバイスと、前記複数のデータストレージデバイスを制御するためのデバイスドライバを管理し、前記複数のオブジェクトの各々のオブジェクトサイズに基づいて、データ複製方式及び消去コーディング方式を含む相異なるデータ信頼性方式を適用する仮想ストレージレイヤと、を包含し、前記複数のオブジェクトは、第1サイズを有する第1オブジェクト及び前記第1サイズより大きい第2サイズを有する第2オブジェクトを包含し、前記仮想ストレージレイヤは、前記第1オブジェクトを小型オブジェクトとして分類して前記データ複製方式を適用し、前記小型オブジェクトを前記複数のデータストレージデバイスの何れか1つ又はそれ以上に亘って格納し、前記仮想ストレージレイヤは、前記第2オブジェクトを巨大オブジェクトとして分類して前記巨大オブジェクトを同一サイズの1つ又はそれ以上のチャンクに分割し、前記消去コーディング方式を適用して前記複数のデータストレージデバイスに亘って前記1つ又はそれ以上のチャンクを分散して格納し、前記仮想ストレージレイヤは、複数のオブジェクトの分類に基づいて複数のデータストレージデバイス間で1つ又は複数のデータストレージデバイスをグループ化することにより、ホストコンピュータ上で実行されるアプリケーションに仮想記憶ユニットを提供する
【0007】
他の実施例によると、キーバリューペアのオブジェクトにアクセスする方法は、キーバリューペアの複数のオブジェクトを受信するステップと、ここで、前記複数のオブジェクトは、第1サイズを有する第1オブジェクト及び前記第1サイズよりも大きい第2サイズを有する第2オブジェクトを包含し、前記第1オブジェクトを小型オブジェクトとして分類するステップと、前記小型オブジェクトにデータ複製方式を適用するステップと、前記小型オブジェクトを複数のデータストレージデバイスの何れか1つ又はそれ以上に亘って格納するステップと、前記第2オブジェクトを巨大オブジェクトとして分類するステップと、前記巨大オブジェクトを同一サイズの1つ又はそれ以上のチャンクに分割するステップと、前記巨大オブジェクトに消去コーディング方式を適用するステップと、前記1つ又はそれ以上のチャンクを前記複数のデータストレージデバイスに亘って分散(distributedly)して格納するステップと、を包含する。
【0008】
イベントの具現及び組み合わせの多様な新しい記述を含む前述された、そして、他の適切な特徴は、添付された図面を参照し、さらに詳細に説明され、特許請求の範囲において示されるであろう。本文で記載された特定のシステム及び方法は、記述のためだけに図示され、本発明はこれに制限されない。本文に記載された理論及び特徴は、本発明の思想から逸脱せずに、多様な実施例に具現されうることが当業者によって理解されるはずである。
【発明の効果】
【0009】
オブジェクトのサイズを判別して、小型オブジェクトにはデータ複製方式を、大型オブジェクトにはチャンク分割の上、消去コーディング方式を適用するので、異なるサイズを有する複数のオブジェクトを効率的に管理・格納できる。
【図面の簡単な説明】
【0010】
本発明の詳細な仕様の一部として含まれた添付された図面は、今回の好ましい実施例を図解し、上述の概括的記述及び以下に提供される好ましい実施例の詳細な記述と共に、ここに記述された本発明の原理の説明と教示に資するであろう。
【0011】
図1図1は、一実施例による例示的なデータストレージデバイスに格納されたオブジェクトの概念図を示す。
図2図2は、一実施例によるユーザキーを含む例示的な内部キーを示す。
図3図3は、一実施例による、グループの特徴を使用するオブジェクトの回収の実施例を示す。
図4図4は、一実施例による、グループの特徴なきオブジェクト回収の実施例を示す。
図5図5は、一実施例による専用パリティデバイスのない消去コーディングの実施例を示す。
図6図6は、一実施例による1つ又はそれ以上の専用パリティデバイスを使用した消去コーディングの実施例を示す。
図7図7は、一実施例による、パリティ装置なしで、1つ又はそれ以上のデータストレージデバイスを通した小型オブジェクトの例示的な複製方式を示す。
図8図8は、一実施例によるオブジェクトをライト(write)する(書込む)例示的なフローチャートを示す。
図9図9は、一実施例によるオブジェクトをライトする例示的なフローチャートの一部のサブプロセスを示す。
図10図10は、一実施例によるオブジェクトをリード(read)する(読出す)例示的なフローチャートを示す。
図11図11は、一実施例によるオブジェクトをリードする例示的なフローチャートの一部のサブプロセスを示す。
図12図12は、一実施例によるオブジェクトをリードする例示的なフローチャートの別の一部のサブプロセスを示す。
【0012】
図面の全体に亘って図面の簡潔性のために、図面は必ずしも実寸に合わせて描かれず、類似の構造又は機能の要素は、一般的に類似の参照番号により表示される。図面は、本文に記載された多様な実施例の記述を容易にすることのみ意図される。図面は、本文に開示された教示の全ての思想を記述せず、特許請求の範囲を制限しない。
【発明を実施するための形態】
【0013】
本文に記載された特徴及び教示の各々は、他の特徴及び教示と共に、又は個別に使用されて、相異なるサイズを有するオブジェクトを効率的に格納するデータストレージシステム及びデータストレージシステムにオブジェクトを格納する方法を提供できる。多様な付加的な特徴及び教示を個別に、又は組み合わせて使用する代表的な実施例は、添付された図面を参照して、さらに詳細に記述される。この詳細な記述は、単に当業者に本発明の思想を実施できるように教示するためのものであり、特許請求の範囲を制限する意図はない。従って、詳細な説明で上記に開示された特徴の組み合わせは、最も広い意味で、本発明を実施するのに必須ではない可能性があり、単に本発明の格別に代表的な実施例を記述するために教示される。
【0014】
以下の説明では、単純に説明の便宜のために、特定の命名法が本発明の全体的な理解を助けるために使用される。しかし、このような特定の記述が本開示の教示を具現するのに必須でないことは、当業者には明白であろう。
【0015】
本文の詳細な説明の一部は、コンピュータメモリ内のデータビットに対する演算のアルゴリズム及びシンボリックな表現の形で提供される。このようなアルゴリズミックな説明及び表現は、データ処理技術分野における当業者が自分の研究内容を同じ技術分野における他の当業者に効果的に伝達するために使用される。アルゴリズムは、本文では、しかし一般的にも、意図した結果を導出する一貫性のある一連のステップとして表現される。ステップは、物理量を物理的に操作しなければならないステップである。一般的に、しかし必須ではないが、このような物理量は、格納され、放送(一斉通知、broadcast)され、組み合わせられ、比較され、異なるように変形されうる電気又は磁気信号の形態を有する。主に、共通的に普通に使用されているとの理由により、このような信号をビット、バリュー、要素、シンボル、特徴、用語、数字などで示されるのが便利であることが度々実証されている。
【0016】
しかし、これら及び類似の用語は全て、適切な物理量と関連されるべきであり、斯かる物理量に適用される便利なラベルに過ぎない。以下の説明で、明らかにするように、特に別な意味と言及されない限り、詳細な説明の全般にわたって、「処理(processing)」、「計算(computing)」、「演算(calculating)」、「決定(determining)」、 「表示(displaying)」などのような用語を使用する説明は、コンピュータシステム又はコンピュータシステムのレジスタ及びメモリ内で物理的(電子的)量として表現されたデータを、コンピュータシステムのメモリ、レジスタ又は他の情報ストレージ内において物理量として類似に表現される相異なるデータに変形して放送する類似の電子コンピューティングデバイス、放送又は表示デバイスの動作及び処理を示す。
【0017】
さらに、代表的な実施例及び従属請求項における多様な特徴は、本発明の有用な実施例を追加的に提供するために、必ずしも特定的ではなく且つ明示的に列挙されていない方式で組み合わされる。
全てのバリューの範囲、又は、エンティティ(entity)のグループの指称(表示、indication)は、本来の開示目的のために、同時に、請求される構成要件(Subject_matter)を制限する目的のために、全ての可能な中間値又は中間オブジェクトを開示している、ことをここに明記する。図面に示された構成要素の形状及び寸法(dimension)は、単に本発明が具現される方式の理解を助けるために設計されており、実施例で図示された寸法及び形状に本発明を含む限定する意図はない、こともここに明記する。
【0018】
本発明の開示は、大型キーバリューオブジェクトをデータストレージシステムに格納するデータストレージシステム及び方法を記述する。本発明のデータストレージシステムは、1つ又はそれ以上のデータストレージデバイスに高い信頼性を有するデータを格納できる。特に、本発明のデータストレージシステムは、オブジェクトを、そのサイズに基づき異なる形で格納して、コスト及びストレージ空間を減らし、高い信頼性を達成できる。大型オブジェクトと関連されたデータは、小型のピース(small pieces)に分割(split)されることができ、1つ又はそれ以上のデータストレージデバイスに格納されることができる。ここで、データストレージデバイスに格納されたデータがキーバリューペア(key-value_pair)と関連されたデータアレイの場合、データストレージデバイスは、キーバリュー・ソリッドステートドライブに(KV_SSDs: key-value solid state drives)と称され得る。
【0019】
オブジェクト(例えば、キーバリューペアのバリュー)は、複数の同じサイズのチャンク(chunks)、即ち複数のピースに(multiple pieces)に分割(split)されることができる。チャンクのサイズは、ランタイム中に動的にオブジェクト単位で決定されることができる。その大きさに応じて、オブジェクトは、相異なる個数及びサイズのチャンクを包含できる。
【0020】
グループ(group)は、目標データの信頼性(target data reliability)を具現するためのデータストレージデバイスのセットとして定義される。グループは、ボックス(例えば、シャーシ(chassis)又はラック(rack))内の又はボックスを介した1つ又はそれ以上のデータストレージデバイスを含むことができ、階層的又は非階層的に構造化されることができる。
【0021】
本発明のデータストレージシステムは、1つ又はそれ以上のデータストレージデバイスのグループ化を管理し、全体的に単一の仮想ストレージユニットとしてユーザアプリケーションに対してグループを提供する仮想ストレージレイヤを含む。仮想ストレージレイヤは、1つ又はそれ以上のデータストレージデバイスを制御する複数のドライバを管理するために使用されることができる。仮想ストレージレイヤが管理するデータストレージデバイスの個数は、信頼性の目標(reliability target)に基づいて構成されることができる。
消去コーディング(erasure coding)に対し、データストレージデバイスの全体の個数は、P個のフェイルを容認するためには、データデバイス(D)とパリティデバイス(P)の合計であり得る。
複製(replication)に対し、P個のフェイルを容認するデータストレージデバイスの全体の個数は、P+1であり得る。データストレージデバイスのストレージ容量は、消去コーディング又は複製においてほぼ類似になる可能性がある。仮想ストレージのストレージ容量は、グループ内の全データストレージデバイスのデータストレージ空間の合計によって決定されることができる。
【0022】
一実施例によると、仮想ストレージレイヤは、1つ又はそれ以上のデータストレージデバイスのグループをステートレス方式(stateless manner)で管理できる。つまり、仮想ストレージレイヤは、オブジェクトとデータストレージデバイスとの間の如何なるマッピング情報もキー情報も維持しないし、且つ維持する必要がない。ただし、仮想ストレージレイヤは、オブジェクトの個数、利用可能なストレージ容量、及び/又はそれらと類似した種類の、1つ又はそれ以上のデータストレージデバイスにおいて必須のメタデータを、ランタイムで動的にキャッシュ且つ維持できる。
【0023】
KV_SSDのようなデータストレージデバイスは、オブジェクト及び処理可能なオブジェクトに対するオペレーションに対する具現に特有の制限を有する。データストレージシステムの仮想ストレージレイヤは、各データストレージデバイスがサポート可能な最小バリュー及び最大バリューのサイズを認識できており、最小バリュー及び最大バリューのサイズを決定できる。
【0024】
例えば、VMINが第i番目のKV_SSDの最小バリューのサイズである場合、仮想ストレージの最小バリューサイズ(VMIN_VS)は、グループ内の個々のKV_SSDの全ての最小バリューのサイズの中の最大バリューによって定義されることができる。
【数1】
同様に、VMAXが第i番目のKV_SSDの最大バリューのサイズである場合、仮想ストレージの最大バリューのサイズ(VMAX_VS)は、グループ内の個々のKV_SSDの全ての最大バリューのサイズの中の最小バリューによって定義されることができる。
【数2】
一実施例で、RS(Reed-Solomon)コードのようなMDS(maximum distance separable)アルゴリズムが、消去コーディング(erasure coding)のために使用されることができる。
【0025】
本発明の一実施例によると、本発明のシステム及び方法は、オブジェクトのサイズに基づいて複製及び消去コーディングの両方を活用する(leverage)ハイブリッド型データ信頼性メカニズム(hybrid data reliability mechanism)を提供する。データの複製(replication)は、小型のオブジェクト(small objects)に対して速く、計算負荷が軽い可能性がある。ただし、データの複製は、消去コーディングと比較するとき、大型オブジェクト(large objects)に対して、より多くのストレージ空間を消費し得る。消去コーディングは、大型オブジェクトに対して、データの複製よりもストレージ空間の消費が通常、少ないが、複数のデータストレージデバイスに影響を及ぼしながら、このような大型オブジェクトを復元できる。
しかし、複数のデータストレージデバイスから複数のチャンクを必要とするので、消去コーディングは、一般的に、重い計算を伴って、小型のオブジェクトを復元するのに多くの時間が消費されることができる。これは、データの消去コーディングを遂行した後に、データを複製する非階層的な方式である。代わりに、本発明のシステム及び方法は、オブジェクトのサイズに基づいて、データの複製と消去コーディングとの間の選択について柔軟な決定を提供する。言い換えると、本発明のシステム及び方法は、データの信頼性判断、つまり、オブジェクトのサイズだけでなく、オブジェクトを格納するための全体空間のオーバヘッドに基づいて、ランタイムでのデータ複製又は消去コーディングの何れを適用するべきかを決定できる。
【0026】
一実施例によると、本発明のシステム及び方法では、オブジェクトがアップデートされる際に、リード・モディファイ・ライトのオーバヘッド(read-modify-write overhead)を伴わない。ブロックデバイスに対する従来の消去コーディング又はデータの複製は、部分的アップデートが存在するときでも、多くのオーバヘッドを伴う。もしデータの小さな部分がアップデートされる場合でも、消去コーディングに対するブロックの全てがリードされてアップデートされなければならないし、アップデート後にパリティブロックは、再演算され、データストレージデバイスに再書込み(ライトバック)されなければならない。言い換えると、1つのブロックが多重のオブジェクトで共有されることができるので、オブジェクトのアップデートは、一連のリード・モディファイ・ライトのプロセスを必要とする。
対照的に、本発明のシステム及び方法は、オブジェクト及びその特性、例えば、サイズに基づく信頼性を提供できる。オブジェクトがアップデートされる場合、リード・モディファイ・ライトのオーバヘッドが発生することなしに、アップデートされたオブジェクトだけがオーバライト(上書き、over-write)を必要とする。
【0027】
本発明の一実施例によると、本発明のシステム及び方法は、統合フレームワーク(unified framework)の元に広範囲なオブジェクトのサイズをサポートする。オブジェクトがデータストレージデバイスのストレージ容量の限界を超えて、非常に大きな(又は巨大な)場合には、データストレージデバイスは、オブジェクトを全体として格納できない可能性がある。この場合、オブジェクトは、小型のピース(piece)(以下、チャンク(chunk)と称される。)に分割される必要がある。本発明の開示は、データストレージデバイスの容量に基づいて、オブジェクトがチャンクに分割され、分割されたチャンクから復元(rebuild)する方法を論議する。例えば、本発明のシステム及び方法は、以下でより詳細に論議されるように、データストレージデバイスのグループ特徴サポート(group feature support)に基づいて多様な分割及び復元メカニズムを提供する。
【0028】
本発明のシステム及び方法は、固定されたブロックに基づかないオブジェクトの信頼性を提供する。データの複製及び消去コーディングは、オブジェクトのサイズに基づいてオブジェクトを分岐する(bifurcate)ことにより、シングルディスクグループに対するオブジェクトの目標信頼性(target reliability)を具現するようにミックスして組み合わされる。このような方法は、階層的構造(つまり、消去コーディングされたオブジェクトに対する複製)を含む従来のデータの信頼性技法とは異なる。本発明のシステム及び方法は、スペース(空間)の効率性を一次的関心事として有し、性能は、特定のオブジェクトに適した信頼性のメカニズムを決定するための二次的要素である。オブジェクトのストレージは、ステートレス(stateless)である。複製又は消去コーディングの何れか1つのために、追加の情報が格納される必要はない。オブジェクトのサイズと無関係にアップデートについてリード・モディファイ・ライトのオーバヘッドが要求されない。
【0029】
本文で、オブジェクトは、入力及び出力(I/O:input and output)オペレーションの間において固定されたバリュー(fixed value)を有する静的データ(static data)を示す。オブジェクトは、キーバリューペアのキーと関連されることができる。このような場合、オブジェクトは、キーバリューペアのバリューに対応する。オブジェクトは、同じサイズの複数のチャンクに分割されることができ、チャンクのサイズは、ランタイム中において動的にオブジェクト単位ベースに決定されることができる。各オブジェクトは、一つ又はそれ以上のデータストレージデバイスに格納されるとき、相異なる個数及び相異なるサイズのチャンクを包含できる。
【0030】
データの信頼性なしに、1つ又はそれ以上のデータストレージデバイス(例えば、KV_SSD)に亘って一度に全て格納されるオブジェクトのデータのチャンクの最小セットは、本文でスライス(slice)と称する。例えば、スライスは、1つ又はそれ以上のデータストレージデバイスに分割して格納されたオブジェクトの複数個のチャンクと対応する。データの信頼性(例えば、複製又は消去コーディング)を具現するオブジェクトのデータのチャンクの最小セットは、「バンド(band)」と称する。バンド内のチャンクの個数は、パリティチャンクのためスライスのチャンクの個数よりも多い可能性がある。グループ内の1つ又はそれ以上のデータストレージデバイスの中の1つのデータストレージデバイスに格納されたオブジェクトのチャンクのセットはスプリット(split)と称されることができる。
【0031】
スライスは、データの複製(つまり、原本の(original)オブジェクトの複製されたコピー)に対しては、(目標オブジェクトの)1つのチャンクのみを包含できる。一方、スライスは、消去コーディングに対しては、目標オブジェクトを含むD個のチャンクを包含できる。一方、バンドは、データ複製に対しては、P個の複製チャンク及び1つの原本チャンクを含むことができる一方、消去コーディングに対しては、P個のパリティチャンク及びD個のデータチャンクを含むことができる。スライス又はバンドの個数は、スプリット内のチャンクの総数に対応する。
スプリットサイズ(つまり、1つのデータデバイスに格納されたチャンクの個数)及びバンドサイズ(つまり、1つ又はそれ以上のデータストレージデバイスに格納された、1つのオブジェクトに含まれるデータチャンク及びパリティチャンクの個数の合計)は、原本のオブジェクト及びチャンクのサイズに応じて可変されることができる。例えば、スプリットサイズは、データの複製に対しては原本のサイズであり得るが、スプリットサイズは、消去コーディングに対してはバンド当たりチャンク個数で全チャンク個数を除算して得られるサイズである。
【0032】
図1は、一実施例による、例示的なデータストレージシステムに格納されたオブジェクトの概念図を示す。オブジェクト110は、複数のチャンクに分割されることができる。例えば、オブジェクト110は、3S個のチャンク(Chunk_1~Chunk_3S)に分けられる(但し、Sは自然数)。チャンクの総数3Sは、例示的なものであり、オブジェクト110のチャンクの総数は、相異なる数であり得、オブジェクト110は、3の倍数個に分割されなくてもよい。オブジェクト110は、以下で詳細に説明されるように、非常に大きな(very large)、即ち巨大な(huge)オブジェクトとして分類されることができる。分割(split)されたチャンクは、1つ又はそれ以上のデータストレージデバイスに亘る仮想ストレージ内に分散(ditribute)されることができる。本発明の実施例で、仮想ストレージ空間は、D個のデータストレージデバイス(Disk_1~Disk_D)及びP個のパリティデバイス(Disk_D+1~Disk_D+P)を含む。本発明の実施例で、S及びDは同一である。
【0033】
一実施例によると、データストレージシステムの仮想ストレージレイヤは、スプリット第1(優先)方式(スプリット優先分散)、又はバンド第1(優先)方式(バンド優先分散)の何れかによりチャンクを分散させることができる。
スプリット第1方式では、仮想ストレージレイヤは、仮想ストレージ120において、チャンク(Chunk_1、Chunk_2、Chunk_3)を第1データストレージデバイス(Disk_1)に格納し、チャンク(Chunk_4、 Chunk_5、Chunk_6)を第2データストレージデバイス(Disk_2)に格納し、同様にチャンク(Chunk_3D-2、Chunk_3D-1、Chunk_3D)を、第Dデータストエージデバイス(Disk_D)に格納する。バンド150は、チャンク(Chunk_1、Chunk_4、...、Chunk_3D-2)及びパリティチャンク(Parity_1~Parity_P)を含む。
バンド優先方式では、仮想ストレージレイヤは、仮想ストレージ121において、チャンク(Chunk_1~Chunk_D)をデータストレージデバイス(Disk_1~Disk_D)に各々格納し、チャンク(Chunk_D+1~Chunk_2D)をデータストレージデバイス(Disk_1~Disk_D)に各々格納し、同様にチャンク(Chunk_2D+1~Chunk_3D)をデータストレージデバイス(Disk_1~Disk_D)に各々格納する。スプリット151は、データのチャンク(Chunk_1、Chunk_D+1、Chunk_2D+1)を含む。パリティチャンク(Parity_1~Parity_P)はパリティディスク(Disk_D+1~Disk_D+P)に格納される。
本実施形態では、説明の便宜のために、仮想ストレージ120及び仮想ストレージ121の両方が、バンド優先方式でパリティチャンクを格納する場合が示されるが、パリティチャンクの格納は、本発明の思想から逸脱せずにスプリット優先方式で遂行されうることが理解されるであろう。
【0034】
I/Oオペレーションは、どのようなチャンク分散方式が使用されているかに関係なしに、バンド優先方式で実行されることができる。このような場合で、チャンク(Chunk_1、Chunk_4、...、Parity_P)に対するI/Oオペレーションは、スプリット優先方式でも並列にアクセスされる。
【0035】
一実施例によると、消去コーディングは、オブジェクトのサイズに基づいてオブジェクトに適用される。サイズ(SZOi)を有する第i番目のオブジェクト(O)に対し、デバイス当たりチャンクの数、即ち、スプリット(NCOi)は、下の数学式3によって定義される。複製に対し、デバイス当たりチャンクの個数は1であり得る(つまり、NCOi=1)。
【数3】
【0036】
デバイス当たりチャンクの数(NCOi)は、最大チャンクサイズ(VMAXVS)が使用されている場合には、データディスクに(つまり、Disk_1~Disk_Dとして参照されたデータストレージデバイス)に亘って、オブジェクト(O)を格納するためのスプリット当たりのチャンクの最小の個数である。オブジェクトのサイズがデータストレージデバイスの割り当て又は整列の単位で整列されない場合、バンド内のオブジェクトのために割り当てられた追加の空間が0(zeros)でパディング(padded)されることができる。
【0037】
最大のチャンクサイズが使用される場合は、多すぎるパディングを使用して、ストレージ空間が浪費になる傾向がある。従って、オブジェクト(O)の実際のチャンクサイズは数学式4によって、より厳密に決定される。SZmetaは、追加のメタデータがチャンク当たりデータと共に格納される場合のメタデータのサイズである。データストレージデバイスがグループの特徴をサポートしている場合、グループ識別子(group_ID:group_identifier)及びチャンクの総数のような、一部のメタデータが、各チャンクに格納されることができる。データストレージデバイスがグループの特徴をサポートしていない場合、格納されるメタデータはない(つまり、SZmeta = 0)。複製に対し、実際のチャンクサイズは、その原本のオブジェクトのサイズと同一であり得る(つまり、COi = SZOi)。
【数4】
【0038】
数学式4によるCOiは、VMINVSとVMAXVSとの間の範囲にあるが、VMAXVSに近いチャンクサイズを決定する。数学式4によって決定されたチャンクサイズは、I/O帯域幅を最大化しながら、I/Oオペレーションの回数を最小化できる。各データストレージデバイスが、格納するデータの総量(つまり、スプリットサイズ)は、数学式5によって定義される。
【数5】
最終的に、データストレージデバイスに亘って一度にライト(書込み)されるデータの全体の総量、即ち、バンドサイズは、数学式6によって定義される。複製についてDは1と同じである。
【数6】
【0039】
前述されたように、データストレージデバイスは、データストレージデバイスが、格納できるオブジェクトのサイズに対する制限を有する。一部のデータストレージデバイスは、非常に大きな大型オブジェクト又は非常に小さい小型のオブジェクトをサポートできない可能性がある。相異なるサイズを有するオブジェクトの信頼性の高い効率的な格納を達成するために、本発明のデータストレージシステムは、格納されるオブジェクトのサイズに基づいて、相異なるデータの信頼性の方式を適用できる。一実施例によれば、本発明のデータストレージシステムの仮想ストレージレイヤは、オブジェクトのサイズに基づいてオブジェクトを4つのタイプに、即ち、巨大(huge)、大型(large)、中型(medium)、及び小型(small)に分類する。
オブジェクトを格納するのに複数のバンドが使用される場合、オブジェクトが巨大であるものに分類される。オブジェクトを格納するのに1つのバンドがほぼ全体的に使用される場合、オブジェクトが大型であるものに分類される。オブジェクトを格納するのにバンドの小さな部分(small fraction)が使用される場合、オブジェクトが小型であるものに分類される。最後に、オブジェクトが小型又は大型に分類できる場合、オブジェクトが中型であるものに分類される。従って、相異なるサイズを有するチャンクが同じ仮想ストレージだけでなく、仮想ストレージを形成する個々のデータストレージデバイスに共存できる。
【0040】
オブジェクトに対する複製の空間オーバヘッドが、オブジェクトの消去コーディングの空間オーバヘッドよりも小さい場合、オブジェクトは、小型であるものに分類される。この場合、読み取り(リード)に対して、より良いパフォーマンスが提供され、複雑な消去コーディング方式よりもアップデートの管理が容易であるので、複製方式の選択が適切である。この選択は、アプリケーションのメタデータが小さくなる傾向がある状況では合理的である。一実施例で、サイズSZOiを有する小型オブジェクト(O)は、数学式7を満足する。
【数7】
【0041】
オブジェクトに対する消去コーディングの空間オーバヘッドがオブジェクトに対するデータ複製の空間オーバヘッドよりも小さい場合、オブジェクトは、大型のものに分類される。この場合に、より小さな空間を有するので、消去コーディング方式の選択が適切である。特に、大型のオブジェクトは、数学式8を満足する。
【数8】
大型のオブジェクトは、図1と類似した構成になれるが、1つのバンドだけ、即ち、1つのスプリット内には1つのチャンクだけ包含できる。
【0042】
オブジェクトがスプリット内で1つ以上のチャンクを含む場合、オブジェクトは巨大なものに分類される。この場合、消去コーディングが適切である。特に、巨大オブジェクトは、数学式9を満足する。
【数9】
巨大オブジェクトは、図1と類似するように構成されることができるが、スプリット内に複数のチャンク又は複数のバンドを包含できる。
【0043】
小型又は大型の何れにも分類されることができないオブジェクトのサイズの範囲が存在できる。即ち、数学式10を満足するオブジェクトは、中型のものに分類される。
【数10】
このような場合には、データの複製又は消去コーディングの中の何れか1つが使用されることができる。性能がより重要であり、オブジェクトが頻繁にアップデートされる場合、データ複製がよりよい選択であり得る。この場合、中型のオブジェクトは、小型のものに分類されることができる。空間効率性がより重要な場合には、消去コーディングが使用されることができる。このような場合、中型のオブジェクトは、大型のものに分類されることができる。
【0044】
仮想ストレージレイヤは、オブジェクトを格納し、スプリットデータチャンクを使用してオブジェクトを再建して巨大オブジェクトを回収するために、巨大オブジェクトを小型データチャンクに分割(split)する必要があり得る。このため、ユーザ(例えば、ホストコンピュータ上で駆動するするユーザアプリケーション)キーから生成された内部キー(internal key)が、仮想ストレージレイヤをステートレスにするのに使用されることができる。
一実施例によると、仮想ストレージレイヤは、チャンクを分配する内部使用のために、デバイスによりサポートされたキー空間(device-supported key space)中の数バイトを保留し、キー空間の残りの部分をユーザに開放する。この場合、ユーザ特定のオブジェクトキーは、オブジェクトの1つ又はそれ以上の分割されたチャンクのための内部キーのグループを代表する。
【0045】
図2は、一実施形態による、ユーザのキーを含む例示的な内部キーを示している。内部キー200は、第1部分のユーザキー201及び第2部分のバンド識別子(ID; identifier)202を含む。内部キー200は、対応するオブジェクトに対するチャンクの部分又はチャンクの全グループを識別するために使用されることができる。この場合で、オブジェクトは、キーバリューペアのキーとしての内部キー200を含むキーバリューペアのバリューに対応する。現在の実施例で、仮想ストレージレイヤ及び/又はデータデバイスでサポートする最大キーの長さ(maximum key length)はLであり、グループの特定(group specification)のために予約されたバイトの個数はGである。仮想ストレージレイヤは、ユーザが、使用できる最大キー長さがL-Gであることを通知する。
【0046】
小型又は大型オブジェクトに対し、GバイトのバンドID(202)は、基本的に(by_default)0でパディングできる。巨大オブジェクトに対し、仮想ストレージレイヤは、オブジェクトのバンドの個数を計算できる。個々のバンドは、内部キー201を使用して識別されることができる。バンドはスプリット優先又はバンド優先方式に応じて1つずつオブジェクトを格納するために割り当てられた1つ又はそれ以上のデータストレージデバイスに書込みされることができる。
【0047】
一実施例によると、データストレージデバイスは、グループの特徴(group feature)をサポートできる。仮想ストレージレイヤは、ユーザキー201に基づいて、グループを特定することにより、データストレージデバイスに格納されたスプリットを識別できる。この場合で、追加のメタデータが要求されない可能性がある(SZ_meta = 0)。仮想ストレージレイヤは、「do_not_care」ビット(任意(arbitrary)データのビット、例えば、0xFF)で満たされたバンドID(202)及びユーザキー201を、全てのデータストレージデバイスに通知することで、オブジェクトに対する全てのチャンクを回収できる。
バンドIDが「do_not_care」である場合、バンドIDフィールドは無視される。データストレージデバイスがグループの特徴を効率的に具現することが仮定されることができる。例えば、トライ木構造(trie structure)は、ユーザキー201の与えられた所定の接頭部(prefix)を有するオブジェクトを容易に識別できる一方で、ハッシュテーブルは、メタデータフィールドが固定されている場合にのみ、ユーザキーを使用してハッシュバケットからオブジェクトを発見できる。仮想ストレージレイヤは、デバイスごとにバンドID202に基づいて、返されたオブジェクトチャンクを昇順(ascending order)に整列させて、バンド及びオブジェクトを再構成して、ユーザキー201と共にオブジェクトを返す。
【0048】
図3は、一実施例による、グループの特徴を使用するオブジェクトの回収の例を示す。オブジェクトを格納するように割り当てられたデータストレージデバイス(つまり、Disk_1~Disk_D及びDisk_D+1~Disk_P)の各々は、グループの特徴(group feature)をサポートする。この場合で、バンドID(302)は、バンドID(302)を無視するように「do_not_care」と設定される。仮想ストレージレイヤは、ユーザキー301を使用してバンド350に属するチャンク(つまり、データのチャンク1、2、...、Dと、パリティチャンク1~P)を収集し、バンド350からのチャンク(Chunk_1~Chunk_D)を含む第1スライスを再構成する。
その後で、仮想ストレージレイヤは、残りのチャンクを収集し、残りのスライスを順番に再構成する。全てのスライスが構成された場合、仮想ストレージレイヤは、スライスからのデータのチャンク(Chunk_1~3D)を含むオブジェクト310を再構成する。消去コーディングの場合で、仮想ストレージレイヤは、パリティチャンク(parity chunk 1~P)からパリティブロックをさらに再構成する。現在の実施例で、チャンクを分割することについてバンド優先方式を示しているが、本発明の思想から逸脱せずに、スプリット優先方式がチャンク分割及びオブジェクト回収に適用できることが理解されるであろう。
【0049】
図4は、一実施例による、グループの特徴がないオブジェクトの回収の例を示す。この場合で、オブジェクトを格納するために割り当てられたデータストレージデバイスがグループの特徴をサポートしていないので、仮想ストレージレイヤは、大型又は巨大オブジェクトに追加のメタデータを添付する(つまり、SZ_meta≠0)。各チャンクは、1バイトの長さを有するバンドID402によって識別されることができる。現在の実施例では、バンドの個数が1バイトの長さに適合できるように、3つのバンド(Band_1、Band_2、Band_3)が存在することができる。
仮想ストレージレイヤは、バンドID402を使用して1つずつスライスを構成できる。まず、仮想ストレージレイヤは、バンドIDが0(BID = 0)であるバンド0と共にユーザキー401を、全てのデータストレージデバイスに放送する。仮想ストレージレイヤは、全てのデータストレージデバイスからバンド0(Band_0)に対するチャンクを受信し、受信されたチャンクの中のバンド0(Band_0)に属するチャンクからバンド情報を回収する。受信されたバンドの情報をベースに、仮想ストレージレイヤは、バンドの数を認知して、オブジェクトを回収する。オブジェクトが大型の場合は、1つのバンドのみが存在できるので、仮想ストレージレイヤは、そのバンド内のチャンクからオブジェクト全体を再構成できる。
巨大オブジェクトに対しては1つより多くのチャンクが存在するので、仮想ストレージレイヤは、複数のバンド(例えば、Band_1とBand_2)を1つずつ回収することを必要とする。この場合で、仮想ストレージレイヤは、全てのチャンクが回収されるまで、バンドIDを調節する(例えば、BID = 1又はBID = 2)ことにより、回収要請を放送する。仮想ストレージレイヤが、全てのスライスを構成した場合、仮想ストレージレイヤは、オブジェクト410を再構成できる。小型オブジェクトは、デバイスがグループの特徴をサポートしているか否かに無関係に、メタデータを有していない可能性がある。チャンクサイズをチェックすることで、仮想ストレージレイヤは、数学式7及び数学式10を使用して、オブジェクト410が小型であるか否かを決定できる。
【0050】
巨大オブジェクトを1つ又はそれ以上のデータストレージデバイスに書込むために、巨大オブジェクトは、同じサイズのNCOi × D個のチャンクに(つまり、NCoi個のスライス)に分割されることができる。最後のデータチャンク(例えば、図5でオブジェクト510aのデータ4a(Data_4a)及びオブジェクト510bのデータ4b(Data_4b))は、配列の要求を考慮して、0(zero)にパディングされることができ、P個のパリティチャンクはスライス当たりD個のデータのチャンクから生成されることができる。
【0051】
図5は、一実施例による、専用のパリティデバイスがない消去コーディングの例を示す。図6は、一実施例による、1つ又はそれ以上の専用パリティデバイスを使用した消去コーディングの例を示す。各バンド当たりD個のデータチャンク及びP個のパリティチャンクを含む(D+P)個のチャンクの全体は、1つ又はそれ以上のデータストレージデバイスに分散されてNCOi個のバンドの全てが書込みされる。パリティチャンクは、D+P個のデバイスの一部(例えば、図5でSSD4乃至SSD6)に分散して格納されるか、又はP個の専用デバイス(例えば、図6のSSD5及びSSD6)に格納されることができる。
主データストレージデバイスは、データストレージデバイス上でバンドIDなしでユーザキーのハッシュバリュー(以下、「Hash(user_key)」(ハッシュ(ユーザキー))と称される)を使用して選択されることができる。(D+P)個のデバイスの全部又は一部は、図5の実施例で選択されることができ、D個のデバイスは、図6の実施例で選択されることができる。スタートデバイスは、専用のパリティデバイスがない場合、Hash(user_key)%(D+P)によって決定でき、又は、専用のパリティデバイスが存在する場合、Hash(user key)%Dによって決定できる。
後続のチャンクは、次のデバイス(例えば、(Hash(user_key)+ 1)%(D+P)、(Hash(user key)+2)%(D+P)、...、(Hash(user key)+ D + P-1)%(D+P)、又は、(Hash(user_key)+ 1)%D、(Hash(user_key)+2)%D、...、(Hash(user_key)+ D- 1)%D)の順に順次的に書込みされることができる。このようなオペレーションは、バンド当たり動作であり、仮想ストレージレイヤは、オブジェクトのチャンクを書込むために、全てのNCOi個のバンドに対して、このような手順を繰り返す。ユーザキーのハッシュバリューは、各オブジェクト当たり一度計算されることを必要とする。
【0052】
データストレージデバイスがグループの特徴をサポートしていない場合、チャンクは、図4に図示されたように、バンドの全体の個数及びバンドIDに対する追加のメタデータを含む。バンドの個数は、数学式3によって決定されることができる。バンドのチャンクは、メタデータとして(band ID、NCOi)のペアを包含できる。
【0053】
図5を参照すると、仮想ストレージレイヤは、オブジェクト510aのデータチャンク(Data_1a~Data_4a)及びパリティチャンク(Parity_1aとParity_2a)を、データストレージデバイス(SSD1~SSD6)を通して格納する。仮想ストレージレイヤは、他のオブジェクト510bのデータチャンク(Data_1b~Data_4b)及びパッリティチャンク(Parity_1bとParity_2b)をデータストレージデバイス(SSD1~SSD6)を通して格納する。スタートデバイス(例えば、オブジェクト510aに対するSSD1及びオブジェクト510bに対するSSD6)は、前述されたように、ユーザキーのハッシュバリューによって決定されることができる。専用パリティデバイスがないので、仮想ストレージレイヤは、データチャンク及びパリティチャンクを区別せずに、データのチャンク及びパリティチャンクをデータストレージデバイス(SSD1~SSD6)に分散できる。現在の実施例で、SSD4及びSSD6は、データチャンク及びパリティチャンクを全て含む。
【0054】
図6を参照すると、仮想ストレージレイヤは、オブジェクト610aのデータチャンク(Data_1a~Data_4a)及びパリティチャンク(Parity_1aとParity_2a)を、データストレージデバイス(SSD1~SSD6)を通して格納する。同様に、仮想ストレージレイヤは、オブジェクト610bのデータチャンク(Data_1b~Data_4b)及びパリティチャンクに(Parity_1b及びParity_2b)をデータストレージデバイス(SSD1~SSD6)に亘って格納する。SSD5及びSSD6はパリティデバイスに割り当てられたので、SSD5及びSSD6はパリティチャンクだけを含む。
【0055】
大型のオブジェクトを1つ又はそれ以上のデータストレージデバイスに書込むために、大型のオブジェクトは、同じサイズのNCOi×D個のチャンクに分割されることができる。大型オブジェクトは、オブジェクトに対して1つのバンド(つまり、NCOi = 1)であり得る点だけを除けば、巨大オブジェクトと同じように管理される。
【0056】
小型のオブジェクトを格納するために、該オブジェクトに対して(P+1)個の複製オブジェクトが生成されることができる。パディングを含む整列を考慮すると、複製オブジェクトは(P+1)個のデバイスに分散されることができる。主デバイスは、(D+P)デバイス上で(但し、D=1)、ユーザキーのハッシュバリューを使用して選択されることができる。P個の複製オブジェクトは、ストレージの組織、性能などのような多様な要因をベースに決定論的に選択されることができる。たとえば、複製オブジェクトは(Hash(key)+ 1)%(D+P)、(Hash(key)+2)%(D+P)、...、(Hash(key)+ P)%(D+P)、又は、専用のパリティデバイスの有無と関係なしに、相異なるノード、又はラックに単純に格納されることができる。専用パリティデバイス又はノードが存在する場合、複製オブジェクトは(Hash(key)+ 1)%D、(Hash(key)+2)%D、...、(Hash(key)+ P)%Dに格納されることができる。デバイスの容量と関係なしに、小型のオブジェクトは、メタデータを包含しない。
【0057】
図7は、一実施例による、パリティデバイスなしで、1つ又はそれ以上のデータストレージデバイスに亘る小型オブジェクトの例示的な複製方式を示す。仮想ストレージレイヤは、データストレージデバイス(SSD1、SSD2、SSD3)を通して小型オブジェクト710a(Object_1)を格納できる。仮想ストレージレイヤは、小型オブジェクト710b(Object_2)チャンクをデータストレージデバイス(SSD3、SSD4、及びSSD5)に亘って格納できる。小型オブジェクト(710a、710b)は、より小さなデータチャンクに分割されない。オブジェクト(710a、710b)を格納するためのスタートデバイスは、対応するユーザキーのハッシュバリューによって決定できる。現在の実施例で、オブジェクト710aに対するスタートデバイスはSSD1であり、オブジェクト710bに対するスタートデバイスはSSD3である。現在の実施例で、オブジェクト(710a、710b)の各々に対する複製オブジェクトの全体の個数は3である(つまり、P = 2)。
【0058】
図8は、一実施例による、オブジェクトを書込む例示的なフローチャートを示す。データストレージシステムの仮想ストレージレイヤは、オブジェクトを書込むためのライト(write)要請を受信する(801)。ユーザ(又はホストコンピュータ上で駆動するユーザアプリケーション)から受信されたライト(write)要請は、ユーザのキーを含むことができる。仮想ストレージレイヤは、オブジェクトが巨大又は大型か否かを、例えば、数学式8及び数学式9を使用して判別する(802)。大型又は巨大オブジェクトに対し、仮想ストレージレイヤはスプリット当たり、そしてバンド当たりチャンクサイズ及びチャンクの個数を、例えば、数学式3及び数学式4を使用して決定し(811)、データストレージデバイスに亘って1つ又はそれ以上のバンドにデータを書込み(812)、ライト(write)の手順を完了する(815)。
【0059】
仮想ストレージレイヤが、オブジェクトは大型でも巨大でもないと判断した場合、仮想ストレージレイヤは、オブジェクトが小型であるかを、例えば、数学式7を使用して判別する(803)。小型オブジェクトに対し、仮想ストレージレイヤは、分散ポリシー(distribution policy)に基づいて、原本のデータ及び複製データを含むデータを格納するための1つ又はそれ以上のストレージデバイスを決定し(813)、バンドの1つ又はそれ以上のデバイスに亘ってデータを書込み(814)、ライト(write)手順を完了する(815)。例えば、仮想ストレージレイヤがバンド優先ポリシー(複数のデータストレージデバイスに亘ってデータを分散すること)を使用できる。仮想ストレージレイヤは、ユーザのキーのハッシュバリューを使用してスタートデバイスを決定できる。
【0060】
仮想ストレージレイヤが、オブジェクトは巨大でも大型でも小型でもないと判断した場合、仮想ストレージレイヤは、オブジェクトを中型のものとして処理し(804)、分散ポリシーに基づいて、原本のデータ及び複製データを含むデータを格納するための1つ又はそれ以上のデータストレージデバイスを決定し(813)、バンドの1つ又はそれ以上のデバイスにデータを書込み(814)、ライト(write)手順を完了する(815)。
【0061】
データストレージデバイスを通した1つ又はそれ以上のバンドへのデータ書込みの手順(812)は、幾つかのサブプロセス(sub-processes)を含むことができる。
図9を参照すると、まず、仮想ストレージレイヤは、書込みのためのスライスが存在するかを判別する(820)。書込みのためのスライスが存在しない場合、仮想ストレージレイヤは、エラーログを格納し、オペレーションを終了し、オブジェクトを書込むための要請を放送したホストコンピュータ上で動作するユーザアプリケーション及び/又はホストコンピュータのオペレーティングシステムに知らせる。書込みのためのスライスが存在する場合、仮想ストレージレイヤは、オブジェクトのスライスを作成し、スライスのチャンクに対する内部キーを生成する(821)。
仮想ストレージレイヤは、これが書込みのための最後のスライスであるかをチェックする(822)。最後のスライスに対し、仮想ストレージレイヤは、スライスがバンドを一杯埋めることができない場合、データのチャンクにパディング(paddings)を追加し、消去コーディングアルゴリズムを使用して、バンドに対するP個のパリティチャンクを計算する(824)。最後のスライス以外の他のスライスに対して、仮想ストレージレイヤはパディング手順823を省略している。仮想ストレージレイヤは、分散ポリシーに基づいて、データ及びパリティチャンクに対するデバイスをさらに決定する(825)。例えば、分散ポリシーは、スプリット優先又はバンド優先ポリシーの何れか1つであり得る。仮想ストレージレイヤは、821で生成された内部キーと共にバンド内のデータ及びパリティチャンクを1つ又はそれ以上のストレージデバイスに書込む(826)。
【0062】
仮想ストレージレイヤは、ユーザキー及びバリューサイズなどのオブジェクトのメタデータを維持していないので、仮想ストレージレイヤはリード(read)するべきオブジェクトが小型であるか、大型であるか、又は巨大であるかを認識できない。従って、仮想ストレージレイヤは、オブジェクトのユーザキーを使用して、仮想ストレージの全てのデータストレージデバイス(例えば、(D+P)個のデータストレージデバイス)にリード要請を放送し、オブジェクトのサイズの分類に基づいてオブジェクトを再構成する適切な方法を決定する。データストレージデバイスによってサポートされるグループの特徴に応じて、仮想ストレージレイヤは、リード及びライトのオペレーションを異なる方式で処理できる。
【0063】
巨大オブジェクトは、データストレージデバイスによるグループの特徴のサポートに基づいて相異なる方法でリードされることができる。仮想ストレージのデータストレージデバイスがグループの特徴をサポートしている場合は、仮想ストレージレイヤは、BID =「do_not_care」と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、放送に応答したエラーがない場合は、(D+P)個のデータストレージデバイスの各々は、そのスプリットのNCOi個のチャンクを返す。以後に、仮想ストレージレイヤは、受信されたチャンクを、それらのバンドID当たりNCOi個のバンドの全体に分類し、バンドIDの昇順にバンドを整列させる。
仮想ストレージレイヤが各バンド当たり同一サイズのD個のチャンクを受信している限り、仮想ストレージレイヤは、バンドを再構成できる。バンドに対して受信されたチャンクの全体の個数が、データストレージデバイスの個数(D)よりも小さいか、又はチャンクのサイズが同じでない場合は、エラーが発生する。このエラーは、全てのデータストレージデバイスが「NOT_EXIST」(不存在)エラーを返す場合という不在オブジェクトのリード(a read of non-existing object)、又は復旧できないエラー(unrecoverable error)によって発生されることができる。仮想ストレージレイヤは、バンドを1つずつ再構成し、その後に、バンドからオブジェクトを再構成する。
【0064】
仮想ストレージのデータストレージデバイスがグループの特徴をサポートしていない場合、仮想ストレージレイヤは巨大オブジェクトをリードするために、BID = 0と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、(D+P)個のデータストレージデバイスの各々は、第1バンド(Band_0)から1つのチャンクを返す。仮想ストレージレイヤは、受信されたチャンクの一部と共に格納されたメタデータをチェックすることで、オブジェクトに対するバンドの個数を識別できる。仮想ストレージレイヤは、以後に、バンドIDの昇順で1つずつ全てのバンドを再構成して、バンドを使用してオブジェクトを再構成する。幾つかの実施例で、仮想ストレージレイヤは、残りのバンドの全てを非同期的に要請することで、グループのサポートされている場合と同様に、オブジェクトを再構成できる。
【0065】
大型のオブジェクトのリードの手順は、バンドが単一である点を除けば、巨大オブジェクトのリードの手順と同様である。データストレージデバイスがグループの特徴をサポートしている場合は、仮想ストレージレイヤは、BID = 「do_not_care」と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、(D+P)のデータストレージデバイスの各々は、そのスプリットの1つのチャンクを返す。
仮想ストレージレイヤが同一サイズのD個のチャンクを受信している限り、仮想ストレージレイヤは、バンド、即ちオブジェクトを再構成できる。バンドに対して受信されたチャンクの全体の個数が、データチャンクの数(D)よりも小さいか、又はチャンクのサイズが同じでない場合は、エラーが発生する。このエラーは、全てのデータストレージデバイスが「NOT-EXIST」(不存在)エラーを返す場合という不在オブジェクト(non-existing object)のリード、又は復旧できないエラー(unrecoverable error)によって発生されることができる。
【0066】
仮想ストレージのデータストレージデバイスがグループの特徴をサポートしていない場合、仮想ストレージレイヤは大型オブジェクトをリードするために、BID = 0と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、(D+P)個のデータストレージデバイスの各々は、バンド(BID = 0)で、1つのチャンクを返す。仮想ストレージレイヤは、受信されたチャンクと共に格納されたメタデータをチェックすることにより、大型のオブジェクトに対して1つのバンドのみが存在することを識別し、バンドを再構成することで、オブジェクトを再構成できる。
【0067】
小型オブジェクトのリードの手順は、複製に依存するという点を除けば、大型オブジェクトのリードの手順と同様である。データストレージデバイスがグループの特徴をサポートする場合、仮想ストレージレイヤはBID =「do_not_care」と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、(D+P)のデータストレージデバイスの各々は、応答を返す。オブジェクトが小型であるので、幾つかのデータストレージデバイスは、「NOT_EXIST」のエラーを返すことができる一方で、他のデータストレージデバイスは、チャンクを返す。仮想ストレージレイヤは、1つ又はそれ以上のデータストレージデバイスから受信されたチャンクを使用して、オブジェクトを再構成できる有効なチャンクを受信する。全てのデータストレージデバイスが「NOT_EXIST」エラーを返す場合、リード要請によって識別されるオブジェクトは、不在オブジェクトであるか、又は復旧できないエラーが発生することができる。
【0068】
仮想ストレージのデータストレージデバイスがグループの特徴を提供していない場合、仮想ストレージレイヤは小型オブジェクトをリードするために、BID = 0と共にユーザキーを全てのデータストレージデバイスに放送する。それに応答して、(D+P)のデータストレージデバイスの各々は、応答を返す。仮想ストレージレイヤは、任意のデータストレージデバイスから受信された、幾つかの有効なチャンクを使用して、オブジェクトが小型であるかを識別できる。小型オブジェクトは、追加のメタデータを維持しない。
【0069】
図10は、一実施例による、オブジェクトをリードする例示的なフローチャートを示す。仮想ストレージレイヤは、オブジェクトへのリード要請を受信する(901)。ユーザ(又はホストコンピュータ上で動作するユーザアプリケーション)から受信されたリード要請は、ユーザのキーを含むことができる。仮想ストレージレイヤは、オブジェクトの1つ又はそれ以上のチャンクを格納する、1つ又はそれ以上のデータストレージデバイスによってグループの特徴がサポートされるかを判別する(902)。グループの特徴がサポートされている場合、仮想ストレージレイヤは、BID = 「do_not_care」を有する内部キーと共にリード要請を全てのデータデバイスに放送し(903)、そうでない場合は、BID = 0を全てのデータストレージデバイスに設定する(904)。仮想ストレージレイヤは、データストレージデバイスの何れか1つからチャンクを受信する(905)。受信されたチャンクにエラーがない場合(906)、仮想ストレージレイヤは、グループの特徴がサポートされているかを判別し(907)、グループの特徴がサポートされていない場合、チャンクのメタデータを回収する(908)、グループの特徴がサポートされている場合、仮想ストレージレイヤは、オブジェクトのサイズを判別し続ける。
【0070】
仮想ストレージレイヤが、オブジェクトが巨大又は大型であると判断した場合(909)、仮想ストレージレイヤは、全体のオブジェクトが再構成されたかをさらにチェックし(910)、1つ又はそれ以上のデータストレージデバイスから受信されたチャンクを使用して、全体のオブジェクトが再構成されるまでスライスを1つずつ再構成し続けて(912)、リードの手順を完了する(913)。小型オブジェクトに対しては、仮想ストレージレイヤは、1つ又はそれ以上のデータストレージデバイスから受信されたチャンクを使用してオブジェクトを再構成する(911)。
【0071】
小型オブジェクトを再構成する手順(911)は、幾つかのサブプロセスを含むことができる。
図11を参照すると、仮想ストレージレイヤは、受信されたチャンクが小型であるかを、まずチェックする(921)。仮想ストレージレイヤは、小型オブジェクトに対する小型チャンクを予想するが、大きなチャンクを受信した場合、仮想ストレージレイヤは、エラーを発生する(924)。仮想ストレージレイヤが、受信されたチャンクが有効であると判断した場合(922)、仮想ストレージレイヤは、受信されたチャンクを使用して、小型のオブジェクトを再構成し(923)、そうでない場合には、仮想ストレージレイヤは、他のデータストレージデバイスからチャンクを受信する(925)。
【0072】
スライスを再構成する手順(912)は、幾つかのサブプロセスを含むことができる。
図12を参照すると、仮想ストレージレイヤは、スライスを再構成するD個のチャンクが全て受信されたかをチェックする(931)。もしそうなら、仮想ストレージレイヤには、D個のチャンクと共に消去コーディングアルゴリズムを使用してスライスを再構成する(935)。もしそうでない場合、仮想ストレージレイヤは、現在のバンドの全てのチャンクが受信されたかをチェックする(932)。バンドの全てのチャンクが受信された場合、受信されたチャンクのうち少なくとも1つが有効でないことが有り得るので、仮想ストレージレイヤは、エラーを生成する(936)。受信されるチャンクがさらに存在する場合、仮想ストレージレイヤは、他のデータストレージデバイスからのそれらを受信し続けて(933)、スライスを再構成する全てのD個のチャンクを受信するまで手順を繰り返す。受信されたチャンクが大型オブジェクトのものでも、巨大オブジェクトのものでもない場合(たとえば、チャンクが小型オブジェクトのものである場合)、仮想ストレージレイヤは、エラーを発生する(936)。
【0073】
一実施例によると、データストレージシステムは、キーバリューのペアの複数のオブジェクトを格納する複数のデータストレージデバイスと、前記複数のオブジェクトの各々のオブジェクトサイズに基づいて消去コーディング方式及びデータ複製方式を含む相異なるデータ信頼性方式を適用する仮想ストレージレイヤを含む。前記複数のオブジェクトは、第1サイズを有する第1オブジェクト及び前記第1のサイズよりも大きい第2サイズを有する第2オブジェクトを含む。
前記仮想ストレージレイヤは、前記第1オブジェクトを小型オブジェクトとして分類して前記データ複製方式を適用し、前記小型オブジェクトを前記複数のデータストレージデバイスの何れか1つ又はそれ以上に亘って格納する。
前記仮想ストレージレイヤは、前記第2オブジェクトを巨大オブジェクトとして分類して前記巨大オブジェクトを同一サイズの1つ又はそれ以上のチャンクに分割し、前記消去コーディング方式を適用して前記1つ又はそれ以上のチャンクを前記複数のデータストレージデバイスに亘って分散して格納する。
【0074】
前記分散方式は、前記仮想ストレージレイヤが前記巨大オブジェクトの前記1つ又はそれ以上のチャンクを前記複数のデータストレージデバイスの各々に宛てて分割(split)し、前記複数のデータストレージデバイスに亘って前記データストレージデバイスの各々に前記分割した1つ又はそれ以上のチャンクを格納するスプリット優先分散方式である場合がある。
【0075】
前記分散方式は、上述のスプリット優先分散と異なり、前記仮想ストレージレイヤが前記巨大ブジェクトの前記1つ又はそれ以上のチャンクが、前記1つ又はそれ以上のデータストレージデバイスに全て格納されるまで、前記複数のデータストレージデバイスの各々に、前記巨大オブジェクトの1つのチャンクを格納するバンド優先分散方式である場合がある。
【0076】
前記仮想ストレージレイヤは、第3サイズを有する第3オブジェクトを大型オブジェクトとしてさらに分類でき、前記大型オブジェクトを同一サイズの1つ又はそれ以上のチャンクに分割し、前記消去コーディング方式を適用して、前記複数のデータストレージデバイスに亘って前記分割した1つ又はそれ以上のチャンクを分散して格納する。前記第3サイズは、前記第1サイズより大きく、前記第2サイズより小さい。前記大型オブジェクトは、1つのバンドだけ、即ち、1つのスプリット内には1つのチャンクだけを含む。
【0077】
前記仮想ストレージレイヤは、第4サイズを有する第4オブジェクトを中型オブジェクトとしてさらに分類できる。前記第4サイズは、前記第1サイズより大きく、前記第3サイズより小さい。前記仮想ストレージレイヤは、前記データ複製方式及び前記消去コーディング方式の何れか1つを適用する。
【0078】
前記のオブジェクトの各々は、ユーザキーを使用して識別されることができる。前記仮想ストレージレイヤは、前記巨大オブジェクトに対するバンド識別子及び前記ユーザキーを含む内部キーを生成できる。前記バンド識別子は、複数のバンドの中で各々のバンドを識別するために使用される。前記複数のバンドの各々は、前記複数のデータストレージデバイスに亘って分散された1つ以上のチャンクのうちの何れか1つのチャンクを含む。
【0079】
前記の仮想ストレージレイヤは、前記ユーザキーのハッシュバリューを使用して前記複数のデータストレージデバイスのうち前記1つ又はそれ以上のチャンクの1番目のチャンクをライトするか、又はリードするためのスタートデータストレージデバイスを識別できる。
【0080】
前記複数のデータストレージデバイスは、前記巨大オブジェクトに関連されたパリティチャンクを格納する、1つ又はそれ以上の専用パリティデータストレージデバイスを包含できる。
【0081】
前記複数のデータストレージデバイスは、グループの特徴をサポートでき、前記仮想ストレージレイヤは、前記巨大オブジェクトをリードするとき、前記バンド識別子を任意データのビットに設定して、前記複数のデータストレージデバイスに向かって放送できる。
【0082】
前記複数のデータストレージデバイスは、グループの特徴をサポートしていない可能性があり、その場合、前記仮想ストレージレイヤは、前記巨大オブジェクトをリードするとき、前記バンド識別子をユニークな(固有の、unique)バンド識別子に設定して前記複数のデータストレージデバイスに向かって放送できる。
【0083】
前記複数のデータストレージデバイスの各々は、キーバリュー・ソリッドステートドライブ(KV_SSD:key-value solid-state drive)であり得る。
【0084】
他の実施例によると、キーバリューペアのオブジェクトにアクセスする方法は、キーバリューペアの複数のオブジェクトを受信するステップと、ここで、前記複数のオブジェクトは、第1サイズを有する第1オブジェクト及び前記第1サイズより大きい第2サイズを有する第2オブジェクトを包含し、前記第1オブジェクトを小型オブジェクトとして分類するステップと、前記小型オブジェクトにデータ複製方式を適用するステップと、前記小型オブジェクトを複数のデータストレージデバイスの何れれか1つ又はそれ以上に亘って格納するステップと、前記第2オブジェクトを巨大オブジェクトとして分類するステップと、前記巨大オブジェクトを同一サイズの1つ又はそれ以上のチャンクに分割するステップと、前記巨大オブジェクトに消去コーディング方式を適用するステップと、前記複数のデータストレージデバイスに亘って前記1つ又はそれ以上のチャンクを分散して格納するステップと、を包含する。
【0085】
前記の方法は、前記オブジェクトへのライト(書込み)要請を受信するステップと、前記オブジェクトが前記巨大オブジェクトであるか否かを判別するステップと、前記巨大オブジェクトに対するチャンクサイズ及びチャンクの個数を判別するステップと、前記チャンクサイズ及び前記チャンク個数に基づいて、前記複数のデータストレージデバイスに、前記巨大オブジェクトの前記1つ又はそれ以上のチャンクをライトするステップと、をさらに包含できる。
【0086】
前記方法は、前記1つ又はそれ以上のチャンクのうち前記複数のデータストレージデバイスの各々に対して1つのチャンクを含むスライスを生成し、前記スライスに含まれた前記1つ又はそれ以上のチャンクの各々に対して、バンド識別子が添付されたユーザキーを使用して内部キーを生成するステップと、前記消去コーディング方式を使用して、前記スライスと対応する前記1つ又はそれ以上のチャンク、及び1つ又はそれ以上のパリティチャンクを含むバンドを生成するステップと、スプリット優先方式及びバンド優先方式を含む分散方式の何れかに基づいて、前記バンドを格納する前記複数のデータストレージデバイスを判別するステップと、及び前記内部キーと共に前記のバンドに、前記1つ又はそれ以上のチャンクをライトするステップと、をさらに包含できる。
【0087】
前記方法は、前記オブジェクトへのライト(書込み)要請を受信するステップと、前記オブジェクトが前記小型オブジェクトであるか否かを判別するステップと、スプリット優先方式及びバンド優先方式を含む分散方式の何れかに基づいて、前記複数のデータストレージデバイスのうち前記小型オブジェクトの前記1つ又はそれ以上のチャンクを格納するべき部分集合を決定するステップと、前記複数のデータストレージデバイスの前記部分集合に前記小型オブジェクトの前記1つ又はそれ以上のチャンクをライトするステップと、をさらに包含できる。
【0088】
前記の方法は、前記ユーザキーを含む前記オブジェクトへのリード(読出し)要請を受信するステップと、前記複数のデータストレージデバイスがグループの特徴をサポートしているかを判別するステップと、前記内部キーと共に前記リード要請を前記複数のデータストレージデバイスに向かって放送するステップと、をさらに包含できる。
【0089】
前記のグループの特徴がサポートされている場合、前記内部キーの前記バンド識別子は、任意データのビットに設定されることができる。
【0090】
前記のグループの特徴がサポートされていない場合、前記の内部キーの前記バンド識別子はユニークなバンド識別子に設定されることができる。
【0091】
前記方法は、前記複数のデータストレージデバイスの各々から少なくとも1つのチャンクを受信するステップと、前記消去コーディング方式を使用して前記複数のデータストレージデバイスから受信された前記少なくとも1つのチャンクからスライスを再構成するステップと、をさらに包含できる。
【0092】
前記複数のデータストレージデバイスの各々は、キーバリュー・ソリッドステートドライブ(KV_SSD: key-value solid-state drive)であり得る。
【0093】
前述した例示的な実施例は、相異なるサイズを有するオブジェクトを効率的に格納できるデータストレージシステム及びデータストレージシステムにオブジェクトを格納する方法を具現する多様な実施例を説明するためのものである。記載された例示的な実施例からの多様な変形は、当業者によって容易に行われることができる。本発明の技術的思想から意図された事項は、以下の特許請求の範囲で記載される。
【産業上の利用可能性】
【0094】
本発明は、パフォーマンスの制限や空間の制約なしに、相異なるサイズを有するオブジェクトを効率的に格納する、高い信頼性を有するデータストレージシステムに有用である。
【符号の説明】
【0095】
110,310,410,510,610,710 オブジェクト
120、121,321 仮想ストレージ
151 スプリット
200 内部キー
201,301,401 ユーザキー
202,402 バンド識別子
302 バンド識別子(=‘do_not_care’の場合)
350 バンド
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12