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

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

▶ エアメトゥル,インコーポレーテッドの特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-06-19
(54)【発明の名称】データの分割、処理、および保護
(51)【国際特許分類】
   G06F 16/182 20190101AFI20230612BHJP
【FI】
G06F16/182
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2022569552
(86)(22)【出願日】2021-05-12
(85)【翻訳文提出日】2022-11-30
(86)【国際出願番号】 US2021031965
(87)【国際公開番号】W WO2021231554
(87)【国際公開日】2021-11-18
(31)【優先権主張番号】63/023,791
(32)【優先日】2020-05-12
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVASCRIPT
(71)【出願人】
【識別番号】522444483
【氏名又は名称】エアメトゥル,インコーポレーテッド
(74)【代理人】
【識別番号】100118913
【弁理士】
【氏名又は名称】上田 邦生
(74)【代理人】
【識別番号】100142789
【弁理士】
【氏名又は名称】柳 順一郎
(74)【代理人】
【識別番号】100201466
【弁理士】
【氏名又は名称】竹内 邦彦
(72)【発明者】
【氏名】ステファンズ, ドンポール
(72)【発明者】
【氏名】コーエン, ネイル
(57)【要約】
ストレージクラスタ内のデータオブジェクトを管理する技術であって、データオブジェクトを該データオブジェクト内の境界において複数の部分に分割することを含む。この技術は、さらに、データオブジェクトの部分を、個別に処理可能なユニットを提供するセグメントに変換することと、そこに格納するために、ストレージクラスタの複数のコンピューティングノードにセグメントを分配することとを含む。
【選択図】図2
【特許請求の範囲】
【請求項1】
データオブジェクトを、該データオブジェクト内の境界において複数の部分に分割し、前記境界が、前記データオブジェクトの種類に関連する該データオブジェクトの処理可能なユニット間のセパレータを提供することと、
前記データオブジェクトの種類と同じ種類の処理可能なユニットを個別に提供するセグメントに前記部分を変換することと、
前記セグメントを、そこに格納するために、ストレージクラスタの複数のコンピューティングノードに分配することとを含むデータオブジェクトの管理方法。
【請求項2】
前記部分を前記セグメントに変換することが、一組の前記部分のメタデータを追加または変更することを含む請求項1に記載の方法。
【請求項3】
前記メタデータを追加または変更することが、前記データオブジェクトのヘッダメタデータを特定することと、該ヘッダメタデータまたはその変更版を一組の前記部分の各々に追加することとを含む請求項2に記載の方法。
【請求項4】
前記データオブジェクトが、列名を特定するヘッダを有するCSV(comma-separated values)ファイルであり、
前記メタデータを追加または変更することが、前記CSVファイルのヘッダを特定することと、該ヘッダを一組の前記部分の各々に追加することとを含む請求項2に記載の方法。
【請求項5】
前記メタデータを追加または変更することが、前記部分の1つにおいてフッタメタデータを特定することと、該フッタメタデータまたはその変更版を一組の前記部分の各々に追加することとを含む請求項2に記載の方法。
【請求項6】
前記データオブジェクトが、複数の行グループとフッタとを含むParquetファイルであり、
前記データオブジェクトを分割することが、一組の前記部分の各々に前記行グループの各組を提供することを含み、
前記メタデータを追加または変更することが、一組の前記部分の各々に前記フッタまたはその変更版を追加することを含む請求項2に記載の方法。
【請求項7】
前記メタデータを追加または変更することが、前記セグメントの組の各々にヘッダを追加することをさらに含み、
該ヘッダが、Parquetファイルを指定する符号を含み、
前記フッタまたはその変更版を一組の前記部分の各々に追加することが、(i)それぞれの前記部分の前記行グループの組を記述するが他の前記部分の前記行グループを記述しないフッタメタデータを追加し、(ii)該フッタメタデータの長さを追加し、(iii)前記Parquetファイルを指定する符号を追加することを含む請求項6に記載の方法。
【請求項8】
前記データオブジェクトが、複数のフレームを含むビデオファイルまたはストリームであり、
前記データオブジェクトを分割することが、(i)前記ビデオファイルまたは前記ストリーム内のiフレームを特定することと、(ii)現在のセグメントの終了を、特定された前記iフレームの1フレーム前にあるフレームと定義することと、(iii)次のセグメントの開始を、特定された前記iフレームと定義することとを含む請求項1に記載の方法。
【請求項9】
前記データオブジェクトを分割する前に、該データオブジェクトの一組の領域を読み取り、該一組の領域に基づいて前記データオブジェクトのタイプを識別することをさらに含み、
前記データオブジェクトを分割することが、識別された前記タイプの前記データオブジェクトの処理可能なユニットを分離するために用いられるセパレータを前記データオブジェクトから検索することを含む請求項1に記載の方法。
【請求項10】
前記ストレージクラスタによって、分配された処理タスクを実行することをさらに含み、
分配された該処理タスクが、前記ストレージクラスタの複数のそれぞれのコンピューティングノードによって、そこに格納されたそれぞれの前記セグメントまたは該セグメントの組に対して独立して実行される請求項1に記載の方法。
【請求項11】
前記データオブジェクトのセグメントと、各該セグメントが格納されている前記ストレージクラスタ内の位置とを関連付けるオブジェクトメタデータを格納することをさらに含む請求項10に記載の方法。
【請求項12】
前記オブジェクトメタデータを格納することが、前記データオブジェクトのバイト範囲と前記データオブジェクトの前記セグメントとの間の関連付けを格納することを含む請求項11に記載の方法。
【請求項13】
分配された前記処理タスクを実行することが、前記オブジェクトメタデータへのアクセスに基づいて、前記処理タスクにより要求されるデータを含む前記セグメントのサブセットを特定することと、前記セグメントのサブセットを格納する前記コンピューティングノードに前記処理タスクを指示し、前記セグメントのサブセットの一部である前記セグメントを格納しない前記コンピューティングノードには指示しないこととを含む請求項12に記載の方法。
【請求項14】
ゲートウェイによって、複数の前記コンピューティングノードから前記処理タスクの出力を受信することと、該出力を結合して出力データを生成することとをさらに含む請求項11に記載の方法。
【請求項15】
前記複数のコンピューティングノードから受信した出力が、ある順序で受信され、前記出力を結合することが、受信した順序で前記出力を提供することを含む請求項14に記載の方法。
【請求項16】
前記ゲートウェイによって複数の前記コンピューティングノードから受信した前記出力は、複数のRDMA(リモートダイレクトメモリアクセス)送信によって到来する請求項15に記載の方法。
【請求項17】
前記データオブジェクトがデータレコードを含み、
前記処理タスクが集計クエリを定義し、該集計クエリの結果として1kB未満の出力データを返す請求項11に記載の方法。
【請求項18】
K個の前記セグメントから生成された修復データのM個の要素を使用して、前記コンピューティングノード間に分配されたK個の前記セグメントを保護することをさらに含み、M個の前記要素の各々が、K個の前記セグメントから選択された前記セグメントのそれぞれのグループ化から計算された前記修復データを格納する複数の範囲を有する請求項1に記載の方法。
【請求項19】
前記修復データのM個の前記要素を生成することをさらに含み、該生成することが、K個の前記セグメントを論理的に配列することと、
一組のK個の前記セグメントの各i番目の最短のセグメントについて、
前記修復データの範囲がまだ計算されていない、前記i番目の最短のセグメントの未処理範囲を特定することと、
最短のセグメントとしてそれまでに識別されていないK-i番目の他のセグメントを識別することと、
前記i番目の最短のセグメントの未処理の範囲と一致する前記K-i番目の他のセグメントの対応する範囲を特定することと、
M個の前記要素の各々のi番目の範囲を、前記i番目の最短のセグメントの未処理の範囲と、前記K-i番目の他のセグメントの対応する範囲とに基づいて計算することとを含む請求項18に記載の方法。
【請求項20】
前記生成することが、さらに、
前記修復データの範囲がまだ計算されていない、最後のセグメントの未処理の範囲を特定することと、
M個の前記要素のそれぞれの最後の範囲を、前記最後のセグメントの未処理の範囲のそれぞれのレプリカとして提供することとを含む請求項19に記載の方法。
【請求項21】
前記部分を前記セグメントに変換することが、第1の部分と第2の部分との間の境界に隣接する第1の部分から第2の部分へデータの領域を複製することを含む請求項1に記載の方法。
【請求項22】
前記部分を前記セグメントに変換することが、第1の部分の最初の領域を、一組の他の部分のそれぞれの最初の領域に複製するすることを含む請求項1に記載の方法。
【請求項23】
ヘッダを使用しない前記データオブジェクトの処理を指定する処理要求を受信することと、
該処理要求に応答して、前記第1の部分の最初の領域を処理するが、一組の前記他の部分のそれぞれの最初の領域は無視することを含む請求項22に記載の方法。
【請求項24】
前記データオブジェクトを複数の前記部分に分割するときに、より高速な処理を可能にする前記データオブジェクトの前記部分における特徴を特定することと、前記部分が特定された特徴を含むことを示すために、前記部分に関連するメタデータを更新することとをさらに含む請求項1に記載の方法。
【請求項25】
メモリに結合された一組の処理ユニットを含む制御回路を備え、
該制御回路が、
データオブジェクトを、該データオブジェクト内の境界において複数の部分に分割し、前記境界が、前記データオブジェクトのタイプに従って、前記データオブジェクトの処理可能なユニット間のセパレータを提供し、
前記データオブジェクトのタイプと同じタイプの処理可能なユニットを個々に提供するセグメントに前記部分を変換し、
前記セグメントを、そこに格納するために、ストレージクラスタの複数のコンピューティングノードに分配するように構成されかつ配置されたコンピュータ化された装置。
【請求項26】
コンピュータ化された装置の制御回路によって実行されると、該コンピュータ化された装置にデータオブジェクトを管理する方法を実行させる命令を有する一組の非一時的なコンピュータ読み取り可能な媒体を含むコンピュータプログラム製品であって、
前記方法が、
データオブジェクトを、該データオブジェクト内の境界において複数の部分に分割し、前記境界が、前記データオブジェクトのタイプに従って、前記データオブジェクトの処理可能なユニット間にセパレータを提供することと、
前記データオブジェクトのタイプと同じタイプの処理可能なユニットを個々に提供するセグメントに前記部分を変換することと、
前記セグメントを、そこに格納するために、ストレージクラスタの複数のコンピューティングノードに分配することとを含むコンピュータプログラム製品。
【請求項27】
データオブジェクトを管理する方法であって、
前記データオブジェクトを複数のセグメントに分割することと、
該セグメントをストレージクラスタの複数のコンピューティングノードに分配することと、
前記ストレージクラスタによって分配された処理タスクを実行することであって、分配された前記処理タスクが、前記ストレージクラスタの複数のそれぞれの前記コンピューティングノードによって、そこに格納されたそれぞれの前記セグメントまたは該セグメントの組に対して独立して実行されることとを含む方法。
【請求項28】
前記データオブジェクトのオブジェクトメタデータを格納することをさらに含み、前記オブジェクトメタデータが、前記セグメントを前記データオブジェクトのそれぞれの部分と関連付ける請求項27に記載の方法。
【請求項29】
分配された前記処理タスクを実行することが、
前記データオブジェクトの前記オブジェクトメタデータにアクセスし、前記データオブジェクトの前記セグメントを格納する前記コンピューティングノードをそこから特定することと、
特定された前記コンピューティングノードに、それぞれの前記セグメントに対して前記処理タスクを実行するように指示することとを含む請求項28に記載の方法。
【請求項30】
前記オブジェクトメタデータを格納することが、前記データオブジェクトのバイト範囲と前記データオブジェクトの前記セグメントとの間の関連付けを格納することを含む請求項28に記載の方法。
【請求項31】
分配された前記処理タスクを実行することが、
前記オブジェクトメタデータへのアクセスに基づいて、前記処理タスクによって必要とされるデータを含む前記セグメントのサブセットを特定することと、
前記セグメントのサブセットを記憶する前記コンピューティングノードに前記処理タスクを指示し、前記セグメントのサブセットの一部である前記セグメントを格納しない前記コンピューティングノードには前記処理タスクを指示しないこととを含む請求項28に記載の方法。
【請求項32】
データセグメントを分割することが、別個のレコードまたは領域の間の前記データオブジェクト内の境界を識別することを含み、
一組の前記セグメントに対してセグメントメタデータを作成することであって、該セグメントメタデータが、各前記セグメントを前記データオブジェクトと同じタイプの独立に処理可能なユニットに変換するコンテンツを含むことと、
各前記セグメントを前記コンピューティングノード間で分配するときに、各前記セグメントにおいて前記セグメントメタデータを提供することとを含む請求項27に記載の方法。
【請求項33】
前記セグメントメタデータを作成することが、
前記データオブジェクトのヘッダを特定することと、
一組の前記セグメントの各々において前記ヘッダまたはその変更版を提供することとを含む請求項32に記載の方法。
【請求項34】
前記データオブジェクトが、CSV(comma-separated values)ファイルであり、
前記ヘッダまたはその変更版を提供することが、一組の前記セグメントのそれぞれの先頭に前記ヘッダを提供することを含む請求項33に記載の方法。
【請求項35】
前記セグメントメタデータを作成することが、
前記データオブジェクトのフッタを特定することと、
一組の前記セグメントの各々において、前記フッタまたはその変更版を提供することとを含む請求項32に記載の方法。
【請求項36】
前記データオブジェクトが複数の行グループを含むParquetファイルであり、
前記データオブジェクトを分割することが、一組の前記セグメントの各々においてそれぞれの前記行グループの組を提供することを含み、前記セグメントメタデータを作成することが、
一組の前記セグメントの各々において前記フッタを記憶することであって、該フッタが、(i)それぞれの前記セグメントにおける一組の前記行グループを記述し、他の前記セグメントにおける前記行グループを記述しないフッタメタデータと、(ii)該フッタメタデータの長さと、(iii)前記Parquetファイルを指定する符号とを含む請求項35に記載の方法。
【請求項37】
前記セグメントメタデータを作成することが、前記セグメントの組の各々について、前記セグメントの開始時にヘッダとして符号を提供することをさらに含む請求項36に記載の方法。
【請求項38】
前記セグメントの組の各々におけるそれぞれの前記行グループの組を提供することが、前記セグメントの組の各々において単一の前記行グループを提供することを含む請求項36に記載の方法。
【請求項39】
ゲートウェイによって、複数の前記コンピューティングノードから前記処理タスクの出力を受信することと、出力データを生成するために前記出力を結合することとをさらに含む請求項27に記載の方法。
【請求項40】
複数の前記コンピューティングノードから受信した出力が、ある順序で受信され、前記出力を結合することが、受信された順序で前記出力を提供する請求項39に記載の方法。
【請求項41】
受信された順序で前記出力を提供することが、複数の前記コンピューティングノードの異なるものからの前記出力をインターリーブ方式で前記出力データに挿入することを含む請求項40に記載の方法。
【請求項42】
複数の前記コンピューティングノードから前記ゲートウェイによって受信された前記出力が、複数のRDMA(リモート・ダイレクト・メモリ・アクセス)送信によって到来する請求項39に記載の方法。
【請求項43】
前記データオブジェクトがデータレコードを含み、前記処理タスクが、集計クエリの結果として1kB未満の前記出力データを返す集計クエリを定義する請求項39に記載の方法。
【請求項44】
データオブジェクトを管理する方法であって、
前記データオブジェクトを複数のセグメントに分割することであって、該セグメントの少なくともいくつかが互いに異なる長さを有することと、
前記セグメントをストレージクラスタの複数のコンピューティングノードに分配することと、
K個の前記セグメントから生成された修復データのM個の要素を使用して、K個の前記セグメントを保護することであって、M個の前記要素の各々が、K個の前記セグメントから選択された前記セグメントのそれぞれのグループ化から計算された前記修復データを格納する複数の範囲を有することとを含む方法。
【請求項45】
M個の前記要素のそれぞれの第1の範囲が、K個の前記セグメントの全てのKから計算され、
M個の前記要素の第2の範囲が、K個の前記セグメントの内のK-1個から計算され、
M個の前記要素の第3の範囲が、K個の前記セグメントの内のK-2個から計算される請求項44に記載の方法。
【請求項46】
M個の前記要素の第4の範囲が、K個の前記セグメントの内の単一のものだけに基づく請求項45に記載の方法。
【請求項47】
修復データのM個の前記要素を生成することをさらに含み、
該生成することが、
K個の前記セグメントを論理的に整列させることと、
K個の前記セグメントの内の最短のセグメントおよびK-1個の他のセグメントを識別するステップと、
前記K-1個の他のセグメントにおいて前記最短のセグメントと整列する対応する範囲を特定することと、
前記最短のセグメントと、前記K-1個の他のセグメントの対応する範囲とに基づいて、M個の前記要素のそれぞれの第1の範囲を計算することとを含む請求項44に記載の方法。
【請求項48】
修復データのM個の前記要素を生成することをさらに含み、
該生成することが、K個の前記セグメントを論理的に整列することと、
K個の前記セグメントの組の各i番目の最短セグメントに対して、
前記修復データの範囲がまだ計算されていない、前記i番目の最短のセグメントの未処理範囲を特定することと、
前記最短のセグメントとして以前に識別されなかったK-i個の他のセグメントを特定することと、
前記i番目の最短のセグメントの未処理の範囲と一致する、前記K-i個の他のセグメントの対応する範囲を特定することと、
M個の前記要素の各々のi番目の範囲を、前記i番目の最短のセグメントの未処理の範囲と、前記K-i個の他のセグメントの対応する範囲とに基づいて計算することとを含む請求項44に記載の方法であって、
【請求項49】
前記生成することが、さらに、
最後のセグメントの、まだ前記修復データの範囲が計算されていない未処理範囲を特定することと、
M個の前記要素のそれぞれの最後の範囲を、前記最後のセグメントの未処理範囲のそれぞれのレプリカとして提供することとを含む請求項48に記載の方法。
【請求項50】
K個の前記セグメントが、前記データオブジェクトのデータを含む第1の修復グループを形成し、前記データオブジェクトを分割するときに形成される前記複数のセグメントが、それぞれがK個以下の前記セグメントを含む一組の追加の修復グループを含む請求項44に記載の方法。
【請求項51】
前記ストレージクラスタの複数の前記コンピューティングノードに前記セグメントを分配することが、異なるそれぞれの前記修復グループの複数の前記セグメントを前記ストレージクラスタの単一の前記コンピューティングノードに分配することを含む請求項50に記載の方法。
【請求項52】
前記ストレージクラスタの複数の前記コンピューティングノードに前記セグメントを分配することが、前記ストレージクラスタの単一の前記コンピューティングノードに単一の前記修復グループの2つの前記セグメントを分配しないことを含む請求項50に記載の方法。
【請求項53】
(i)前記データオブジェクトのサイズ、(ii)前記コンピューティングノードによって効率的に処理できる所望の最大セグメントサイズ、(iii)前記セグメントの数K、および(iv)前記修復グループの数Rに基づいて、前記セグメントの目標最小サイズを確立することをさらに含む請求項50に記載の方法。
【請求項54】
前記データオブジェクトを分割することが、
前記セグメントの開始点を定義することと、
目標最小サイズに達した後に、開始点から前方にスキャンして、前記データオブジェクトの第1の境界として前記セグメントの終了点を特定することと、
前記開始点から始まり前記終了点で終わる前記データオブジェクトの部分に基づいて前記セグメントの範囲を定義することとを含む請求項44に記載の方法。
【請求項55】
前記第1の境界が、
データベースレコードの終了点、
ログファイルまたはCSVファイルにおいて区切られた改行、
Parquetファイルにおける行グループの終端、または、
ビデオファイルまたはストリームのiフレームの直前に先行するフレームの内の1つに対応する請求項54に記載の方法。
【発明の詳細な説明】
【関連出願への相互参照】
【0001】
本出願は、2020年5月12日に出願された米国仮出願第63/023,791号の利益を主張し、その内容および教示は、参照によりその全体が本明細書に組み込まれる。
【背景技術】
【0002】
データ処理および保護は、安価なプロセッサおよび記憶媒体の利用可能性の増加とともに、変革的な変化を遂げてきた。ユーザは現在、データをローカルに処理および格納するか、またはネットワークを介して接続されたサーバ、コンピューティングクラスタまたはクラウドにデータを格納するかの選択肢を有する。さらに、クラウドコンピューティングの選択肢には、パブリッククラウドとプライベートクラウドとの両方が含まれる。
【0003】
ビッグデータの時代が到来し、ユーザは、これまで以上に大量のデータオブジェクトを格納し、処理することを望んでいる。例えば、表形式データ、ツリーベースのデータ、およびオーディオおよび/またはビデオデータが、ギガバイトレンジまたはそれ以上のサイズに達することは、珍しくない。このような大きなデータオブジェクトを処理、保護、および格納することは、独自の課題を提起する。
【0004】
一般的なアプローチは、大きなオブジェクトを別々の部分に分割し、その部分をそれぞれのコンピュータに格納することである。プログラムは、オブジェクト内のバイト境界を識別し、等しいサイズまたはそれに近いサイズの部分を生成することによって、オブジェクトを分割することができる。データオブジェクトが一旦分散して格納された後にデータ処理を行うために、コンピュータは、元のオブジェクトの特定の部分または部分のグループを集め、集められた部分に対して所望の処理タスクを実行し、結果を生成することができる。
【発明の概要】
【0005】
残念ながら、上述した分散型アプローチは非効率的である場合がある。例えば、大きなデータオブジェクトを等しいまたはほぼ等しい部分に分割することは、構造的特徴を無視することになり、異なるデータ部分間またはデータ部分中に依存性を導入することになる。簡単な例として、何行もの表形式データを含むデータオブジェクトを想定する。このオブジェクトを分割して同じ大きさの部分を作ることは、行を途中で切断することを意味する。そのため、切断された行へのアクセスに関する後続のクエリは、データオブジェクトの2つの部分、すなわち、1つは行の先頭を格納し、1つは行の末尾を格納する2つの部分にアクセスする必要がある場合がある。これら2つの部分は、典型的には、ネットワーク上の異なるコンピュータに格納されることがある。
【0006】
上記の例を続けると、さらに、(切断された行の両方の部分を含む)両方の部分を要求者またはいくつかの他のノードに転送し、そこで部分が再組み立てされ、クエリを実行する必要がある場合がある。これらの行為は、ネットワークを介したデータの大きな複製を伴うので、大きな非効率をもたらす。
【0007】
上記に加えて、上述したアプローチは、コンテンツに気づかない場合がある。例えば、データオブジェクトの分割された部分は、全体としてデータオブジェクトとの関連性を失う可能性がある。表形式のデータでは、フィールド名が欠落する場合(例えば、行データのみが格納される場合)がある。このように、分散オブジェクトから意味のあるデータを抽出するためには、異なるコンピュータに多くのネットワークアクセスを行い、所望の処理タスクを完了するのに必要な全てのピースを収集することが必要になる場合がある。必要なのは、大きなデータオブジェクトを扱う、より効率的な方法である。
【0008】
この必要性に少なくとも部分的に対処するために、ストレージクラスタにおいてデータオブジェクトを管理するための改良された技術は、データオブジェクトをデータオブジェクト内の境界において複数の部分に分割することを含む。この技術は、データオブジェクトの部分を、個別に処理可能なユニットを提供するセグメントに変換することと、そこに格納するために、ストレージクラスタの複数のコンピューティングノードの間でセグメントを分配させることとをさらに含む。
【0009】
有利には、セグメントを個別に処理可能な単位として提供することは、データオブジェクトに対する処理タスクの実行に関連する作業負荷を、データオブジェクトのセグメントをローカルに格納するコンピューティングノードに効率的にプッシュダウンできることを意味する。したがって、この技術は、各コンピューティングノードが、そこに格納されたデータオブジェクトの1以上のセグメントのみに対して処理タスクを実行する、真の並列処理を可能にする。また、従来の方式と比較して、ネットワークトラフィックを大幅に減少させることができる。例えば、コンピューティングノードのローカルなストレージへの高速接続は、全体的な効率を大幅に向上させる。さらに、セグメントの独立性は、処理タスクを完了するためにコンピューティングノード間の通信(依存関係の解消など)をほとんど必要としないことを意味する。
【0010】
特定の実施形態は、データオブジェクトを管理する方法に向けられている。
本方法は、データオブジェクトをデータオブジェクト内の境界において複数の部分に分割することを含み、境界は、データオブジェクトのタイプに従ってデータオブジェクトの処理可能なユニット間のセパレータを提供する。本方法はさらに、部分を、データオブジェクトのタイプと同じタイプの個別に処理可能なユニットを提供するセグメントに変換することと、そこに格納するために、セグメントをストレージクラスタの複数のコンピューティングノードの間で分配することとを含む。
【0011】
他の実施形態は、データオブジェクトを管理する方法に向けられている。この方法は、データオブジェクトを複数のセグメントに分割することと、セグメントをストレージクラスタの複数のコンピューティングノードの間で分配することと、ストレージクラスタによって分散処理タスクを実行することとを含む。分散処理タスクは、ストレージクラスタの複数の各コンピューティングノードによって、そこに格納された各セグメントまたはセグメントセットに対して独立に実行される。
【0012】
さらに他の実施形態は、データオブジェクトを管理する方法に向けられている。本方法は、データオブジェクトを複数のセグメントに分割することを含み、セグメントの少なくともいくつかは、互いに異なる長さを有する。本方法はさらに、セグメントをストレージクラスタの複数のコンピューティングノードに分配することと、K個のセグメントから生成された修復データのM個の要素を使用してK個のセグメントを保護することとを含み、M個の要素の各々は、K個のセグメントから選択されたセグメントのそれぞれのグループ化から計算された修復データを格納する複数の範囲を有している。
【0013】
追加の実施形態は、上述した方法のいずれかなどのデータオブジェクトを管理する方法を実行するように構築および配置されたコンピュータ化された装置に向けられている。さらに他の実施形態は、コンピュータプログラム製品に向けられている。コンピュータプログラム製品は、コンピュータ化された装置の制御回路上において実行されると、コンピュータ化された装置に、上述した方法のいずれかのようなデータオブジェクトを管理する方法を実行させる命令を格納する。
【0014】
前述の概要は、読者が本明細書に提示された例示的な特徴を容易に把握するのを助けるために例示目的で提示されているが、この概要は、必須の要素を規定すること、または本明細書の実施形態を何らかの方法で制限することを意図していない。上述した特徴は、技術的に意味をなす任意の方法で組み合わせることができ、そのような組み合せが明示的に特定されるかどうかにかかわらず、全てのそのような組み合せが本明細書に開示されることを意図していることを理解されたい。
【図面の簡単な説明】
【0015】
上記および他の特徴および利点は、同様の参照符号が異なる図を通して同じまたは同様の部分を指している添付図面に示されるような特定の実施形態の以下の説明から明らかになるであろう。
図1】改良された技術の実施形態が実践され得る例示的な環境のブロック図である。
図2図1のゲートウェイ装置の例示的な特徴をさらに詳細に示すブロック図である。
図3A】表形式データを含むデータオブジェクトを分割するための例示的な配置を示すブロック図である。
図3B】表形式データを含むデータオブジェクトを分割するための例示的な配置を示すブロック図である。
図4A】Parquetファイルを含むデータオブジェクトを分割するための例示的な配置を示すブロック図である。
図4B】Parquetファイルを含むデータオブジェクトを分割するための例示的な配置を示すブロック図である。
図5A】ビデオデータを含むデータオブジェクトを分割するための例示的な配置を示すブロック図である。
図5B】ビデオデータを含むデータオブジェクトを分割するための例示的な配置を示すブロック図である。
図6図1の環境において分散処理タスクを実行するための例示的な配置を示すブロック図である。
図7】データオブジェクトの複数のセグメントをサイズが小さくなる順に配置する例を示すブロック図である。
図8図7に示されたセグメントを消失訂正符号化するための配置例を示すブロック図である。
図9】データオブジェクトから生成されたセグメントから形成された複数の修復グループを示すブロック図である。
図10】セグメントの所望の目標サイズを決定する方法の一例を示すフローチャートである。
図11図1および図6の環境において使用され得る例示的なコンピューティングノードのブロック図である。
図12】一実施形態に従うデータオブジェクトを管理する例示的な方法を示すフローチャートである。
図13】別の実施形態に従うデータオブジェクトを管理する例示的な方法を示すフローチャートである。
図14】さらに別の実施形態に従うデータオブジェクトを管理する例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【0016】
改良された技術の実施形態を以下に説明する。このような実施形態は、特定の特徴および原理を説明するために例示的に提供されるが、限定することを意図していないことを理解されたい。
【0017】
ストレージクラスタにおいてデータオブジェクトを管理するための改良された技術は、データオブジェクトをデータオブジェクト内の境界において複数の部分に分割することを含む。本技術は、データオブジェクトの部分を、個別に処理可能なユニットを提供するセグメントに変換することと、その中に格納するために、ストレージクラスタの複数のコンピューティングノードにセグメントを分配することとをさらに含む。
【0018】
この出願は、複数の実施形態を開示する。1つの実施形態は、ストレージクラスタにおいて分配されたストレージのためにデータオブジェクトを複数の部分に分割することに向けられている。別の実施形態は、ストレージクラスタによる分散処理タスクの実行に向けられている。さらに別の実施形態は、ストレージクラスタに格納されたデータオブジェクトのデータを保護することに向けられている。これらの実施形態は、以下の例で示し、説明するように、単一のシステムのそれぞれの態様として実現されてもよい。
あるいは、実施形態のうちの任意の1つをサポートする実装が他の実施形態もサポートする必要がないように、実施形態は独立して実施されてもよい。
【0019】
図1は、改良された技術の実施形態が実践され得る例示的な環境100を示す。図示されるように、ゲートウェイ110は、ネットワーク140を介してストレージクラスタ130の複数のコンピューティングノード120にアクセスし、ストレージクラスタ130とクライアント/ユーザとの間のインターフェースとして機能するように構成される。ネットワーク140は、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、インターネット、またはコンピュータ間のデジタル通信をサポートする任意の他のタイプのネットワークまたはネットワークの組み合せを含んでもよい。ゲートウェイ110は、コンピュータまたは他の演算装置(例えば、サーバ、ワークステーション、タブレット、スマートフォン、パーソナルデータアシスタント、ゲーム機、セットトップボックス等)であってよく、それ自身のネットワークインターフェース、プロセッサ、およびメモリを備えていてもよい。いくつかの例では、ゲートウェイ110は、ストレージクラスタ130のコンピューティングノード120として提供されてもよい。ストレージクラスタ130が数百以上のような多数のノード120を含んでいてもよいという理解のもと、複数のコンピューティングノード120(本明細書では「ノード」とも言う。)120-1から120-Nが示されている。各ノード120は、プログラムを実行するための1つまたは複数のプロセッサおよびメモリ、並びに1つ以上のネットワークインターフェース(例えば、ネットワークインターフェースカード)、および1つ以上のソリッドステートドライブ(SSD)、磁気ディスクドライブ、および/または同様のもののような永続的ストレージを含んでいる。ストレージクラスタ130のノード120は、ネットワーク140を介して、または専用ネットワーク(例えば、別のローカルエリアネットワーク;図示せず)を介して、または他の手段によって相互接続されていてもよい。本明細書の目的のために、ストレージクラスタ130の内部の任意のネットワークは、ネットワーク140の一部であると見なされる。
【0020】
好ましくは、各ノード120は、そのそれぞれの永続的なストレージへの1つ以上の高速接続を有する。例えば、ノード120とそのストレージ装置(例えば、SSD)との間の接続は、ネットワーク140を介したノード間の接続を1桁以上上回る帯域幅を有していてもよい。
【0021】
一例では、ストレージクラスタ130は、オブジェクトストアとして構成され、これは、AWS(Amazon Web Services)S3(シンプルストレージサービス)、Microsoft Azure Data Lake、および/またはGoogle Cloud Storageなどの市販のクラウドベースのオブジェクトストアと互換性があってもよい。特定の例においては、ストレージクラスタ130は、S3互換のオブジェクトストアとして構成される。この目的のために、各ノード120は、ノード120がオブジェクトストアのメンバーとして参加することを可能にするAPI(アプリケーションプログラムインターフェース)122を含んでいてもよい。
【0022】
クラスタ130は、ノード120がネットワーク接続されている、建物の一室または複数の部屋を占めるデータセンタに実装されてもよい。他の実装は、複数の建物にまたがっていてもよく、メトロクラスタの配置が実現可能である。
【0023】
他の例では、ストレージクラスタ130は、例えば、そこに提供される物理的な装置または仮想的な装置を使用するクラウドサービス150内に実装されてもよい。例えば、ストレージクラスタ130の全体は、完全にクラウドサービス150内に配置されてもよい。
【0024】
さらに別の例として、クラウドサービス150は、データの一次リポジトリとして機能し、ストレージクラスタ130は、クラウドサービス150のキャッシュとして機能してもよい。したがって、ストレージクラスタ130は、一般的にアクセスされるデータを格納し得るが、典型的には、クラウドサービス150から利用可能な全てのデータを格納するわけではない。
【0025】
実装は、個人、小規模な組織、および/または企業に適しており、SaaS(Software as a Service)モデルに従って、または他のモデルに従って提供されてもよい。実施形態は、100メガバイトまたはそれ以上の範囲のサイズを有し得る大きなデータオブジェクトを管理するのに特に適している。この特徴は、実施形態は、データレイクを含むものなどのビッグデータアプリケーションによく適合する。しかし、実施形態は、任意の特定のユーザ、サービスモデル、データサイズ、またはアプリケーションに限定されないことを理解されたい。
【0026】
例示的な動作において、ゲートウェイ110(ストレージクラスタ130の一部であっても、ストレージクラスタ130から分離されていてもよい。)は、ストレージクラスタ130によって、管理されるべき1つまたは複数のデータオブジェクト160にアクセスする。データオブジェクト160は、クラウドサービス150に、例えば、バケットまたはブロブ内に存在してもよく、または、1つ以上の別個のソースによって提供されてもよい。例えば、データオブジェクト160は、データオブジェクト160をデータログまたは進行中の活動の他の記録として生成し得る産業または科学的プロセスなどのリアルタイムの活動によって生成されてもよい。データオブジェクト160は、ファイル、ストリーム、メモリ範囲として、または他の任意の方法によって提供されてもよい。
【0027】
データオブジェクト160は、特定のオブジェクトタイプに従って構造化されてもよい。例えば、データオブジェクト160は、CSV(カンマ区切り値)またはログファイルなどの表形式オブジェクトとして、JSON(JavaScript Object Notation)またはXML(extensible markup language)文書などのツリーベースのオブジェクトとして、Apache Parquetファイルなどの列指向オブジェクトとして、ビデオファイルまたはストリームとして、オーディオファイルまたはストリームとして、または画像のコレクションとして提供されてもよい。特定のタイプのデータが特に示され、および/または説明されているが、実施形態は、あらゆるタイプのデータを包含することを意図しており、図示され、および/または説明されたものは、動作原理を説明するために使用される具体例を提供するに過ぎないことを理解すべきである。
【0028】
データオブジェクト160の管理を開始するために、ゲートウェイ110は、データオブジェクトをスキャン、例えば、データオブジェクトの先頭から開始して前方に進行してもよい。通常、ゲートウェイ110は、オブジェクトに最初にアクセスするとき、データオブジェクトのタイプを記憶しておらず、オブジェクト160のタイプを識別するために、オブジェクトの初期スキャンを実行してもよい。スキャンは、データオブジェクトの一連の領域、典型的にはオブジェクトの先頭をサンプリングし、特定のオブジェクトタイプに固有のシーケンスまたは文字を検索することを含んでもよい。例えば、CSVファイルおよびログファイルは、典型的には、レコードの終了を示すために改行文字を使用し、隣接するフィールドを分離するためにカンマ、スペース、または他の文字を使用することができる。いくつかのデータオブジェクトは、オブジェクトのタイプを直接的に識別するヘッダを含むことがある。例えば、Parquetファイルは、いわゆる「マジックナンバー」を指定する4バイトのヘッダで始まり、このヘッダで、Parquetファイルとしてファイルを識別するコード「PAR1」が提供される。ほとんどのファイルタイプは、それほど苦労せずに識別できるような明確な表示を提供する。しかし、中には識別が困難なものもある。そのような容易に識別できないタイプを認識したい場合には、機械学習または他のタイプの人工知能を含む、より高度なアルゴリズムが適用されてもよい。
【0029】
ゲートウェイ110がデータオブジェクト160のタイプを識別すると、ゲートウェイ110は、データオブジェクト160の複数の部分への分割を開始することを進行してもよい。例えば、ゲートウェイ110は、データオブジェクトの隣接する処理可能なユニット間のセパレータを提供するデータオブジェクトにおける境界を検索してもよい。境界の正確な性質は、あるオブジェクトタイプと別のオブジェクトタイプとで異なっていてもよい。例えば、CSVファイルは、境界を識別するために改行文字を使用してもよく、一方、ビデオファイルまたはストリームは、Iフレーム(intra-coded pictures)を使用してもよい。いくつかのオブジェクトタイプは、埋め込まれたメタデータを使用して境界を特定する。例えば、Parquetファイルは、隣接する行グループ間の境界を識別するフッタを含んでいる。
【0030】
データオブジェクトの「処理可能なユニット」は、他の処理可能なユニットに対する依存性をほとんど含まないという意味で、独立した処理に従うことができる領域である。したがって、データオブジェクトを処理可能な複数のユニットに分割することは、ストレージクラスタ130のノード120による効率的な並列処理を促進する。
【0031】
分割は、分割された部分の独立した処理を促進する最初のステップであるが、最適な性能のためには必ずしも十分ではない。例えば、分割された部分は、データオブジェクト160の他の部分への依存性を保持する原因となる特定のメタデータ(例えば、ヘッダ、フッタ、または他のコンテンツ)を欠いている場合がある。したがって、ゲートウェイ110は、好ましくは、分割された部分をセグメント170に変換する追加のステップを実行する。一例において、変換されたセグメント170は、データオブジェクト160と同じタイプの完全な自己完結型オブジェクトであるかのように処理することができる。
【0032】
セグメント170は、それらが作成された部分と類似しているが、他の部分への依存性を低減または排除するように変更される。例えば、CSVファイルの最初の部分がヘッダを含み、後続の部分が含まない場合には、ゲートウェイ110は、最初の部分のヘッダを後続の部分から形成されるセグメント170の各々に複製してもよい。このようにして、各セグメント170は、それ自身のヘッダを有し、独立したCSVファイルであるかのように処理することができる。他のオブジェクトタイプについても対応する変更を行うことができ、その変更の詳細はオブジェクトタイプに依存する。様々な例が以下に提供される。
【0033】
このようにセグメント170がデータオブジェクト160と同じタイプの、独立して処理可能なユニットとして形成されると、ゲートウェイ110はセグメント170をストレージクラスタ130の種々のノード120に分配してもよく、これらのノード120はセグメントを、そこに、例えば、各ノード120にローカルに接続された永続的なストレージに格納する。セグメントの位置を追跡するために、ゲートウェイ110は、オブジェクトメタデータ(オブジェクトMD)112を更新してもよい。
【0034】
図1の拡大図に示すように、オブジェクトメタデータ112は、ストレージクラスタ130の動作を容易にするオブジェクト固有の情報を含む。このようなオブジェクトメタデータ112は、以下の要素を含んでもよい。例えば、
- ObjID:オブジェクト識別子であり、ストレージクラスタ130のネームスペース内で一意であることが好ましい。
- ObjType:CSV、JSON、XML、Parquetなどのようなデータオブジェクト160の決定されたタイプである。
- SegID:オブジェクトの一部から生成されたセグメント170の識別子である。ストレージクラスタ130のネームスペース内で一意であることが好ましい。
- ByteRng:現在のセグメントに含まれるデータオブジェクト160のバイト範囲である。開始バイト位置と終了バイト位置とを指定する一対の値として(または、開始バイト位置と長さとして)表現されてもよい。
- RowRng:現在のセグメントに含まれるデータオブジェクト160の行範囲である。表形式データおよび行で提供される他のタイプのデータに関連する。
- Features:セグメントにおいて検出された、後の処理に関連する可能性のある特徴である。セグメント単位で提供されてもよい。
単一レベルの構造として示されているが、オブジェクトメタデータ112は、階層構造を含む任意の適切な方法で配置されてもよい。また、オブジェクトメタデータ112の範囲は、提供された例に限定されない。実際、オブジェクトメタデータ112は、ストレージクラスタ130の動作またはそこで実行され得る処理タスクを容易にする任意の情報を格納してもよい。
【0035】
いくつかの例において、オブジェクトメタデータ112は、信頼性を向上するために冗長的に格納される。例えば、オブジェクトメタデータ112は、例えば、マルチウェイミラーおよび/または他のRAID(Redundant Array of Independent Disks)または消失訂正符号化技術を使用して、ストレージクラスタ130の複数のノード120に格納されてもよい。また、本明細書においてゲートウェイ110に帰着する活動は、任意の数のコンピュータによって実行されてもよく、そのようなコンピュータは、ストレージクラスタ130のノード120を含んでいてもよい。例えば、ストレージクラスタ130の特定のノードは、ロードバランサとして指定されてもよく、セグメント170がクラスタのノード間で分配されるときに、ノード120の作業負荷を考慮に入れてもよい。
【0036】
図1にさらに示されるように、コンピューティングノード120は、各ノード120によって格納されたセグメント170を記述するセグメントメタデータ(SMD)124を記憶してもよい。セグメントメタデータ124の例は、以下の要素を含んでもよい。
- SegID:コンピューティングノード120に記憶されているセグメントの一意の識別子である。
- HMD:コンピューティングノード120に格納されたセグメントの一部を形成するヘッダメタデータである。現在のセグメントの独立した処理を促進するために、現在のセグメントと共に含まれる、同じオブジェクトから派生した別のセグメントに元々あるヘッダメタデータの複製であってもよい。
- FMD:コンピューティングノード120に格納されるセグメントの一部を形成するフッタメタデータである。現在のセグメントの独立した処理を促進するために、現在のセグメントと共に含まれる、同じオブジェクトから派生した別のセグメントに元々あるフッタメタデータの複製であってもよい。
- Loc:ノード120が現在のセグメントにアクセスする場所である。ディスクドライブおよび論理ブロックアドレス(LBA)、ボリューム、ファイル、集合などの好適な方法、またはノード120がそのデータにアドレス指定する際に使用する他の任意の方法で表現される。
【0037】
オブジェクトメタデータ112と同様に、セグメントメタデータ124も、信頼性を向上するために冗長に格納されてもよい。いくつかの例において、ノード120は、メタデータが記述するセグメント170とともに、セグメントメタデータ124を格納してもよい。例えば、セグメントAのためのセグメントメタデータはセグメントAとともに格納されてもよい。同様に、セグメントBのためのセグメントメタデータは、セグメントBとともに格納されてもよい。したがって、セグメントメタデータ124は、セグメント170自体が保護されるのと同じ方法で保護されてもよい。セグメント保護の種々の例は、本明細書において以下に説明される。
【0038】
図2は、ゲートウェイ110の例示的な特徴をさらに詳細に示している。この例では、ゲートウェイ110が示された機能自体を実行することを想定している。先に述べたように、機能の一部は、クラスタ130のコンピューティングノード120を含む他のコンピュータによって実行されてもよい。
【0039】
図示のように、ゲートウェイ110は、タイプ検出器210と、分割器220と、変換器230と、分配器240とを備える。タイプ検出器210は、データオブジェクト160の一連の領域を、例えば、オブジェクトの先頭においてバイトをサンプリングすることによって読み取り、サンプリングに基づいてデータオブジェクト160のオブジェクトタイプを識別する機能を実行する。タイプ検出器210は、決定されたオブジェクトタイプを分割器220および変換器230に通知してもよい。
【0040】
分割器220は、データオブジェクト160を複数の部分250に分割する機能を実行する。部分250は、データオブジェクト160のそれぞれ処理可能なユニットを含み、データオブジェクト内の境界252によって定義される。分割器220の境界検出器222は、データオブジェクト160をスキャンして境界252、すなわち処理可能なユニット間のセパレータを探し、データオブジェクト160に対する境界252の位置を(例えば、バイト位置に基づいて)記録する。先に述べたように、境界252の性質は、データオブジェクト160のオブジェクトタイプに依存し、これは、好ましくは、タイプ検出器210の動作に基づいて既知である。
【0041】
Parquetファイルを分割するときなどのいくつかの例では、境界検出器222は、データオブジェクト160内の全ての境界252を識別し、各対の境界の間に新たな部分250を定義してもよい。全ての境界を検出することは、境界252が、大きくなりがちな(例えば、メガバイトの範囲の)行グループに基づいている、Parquetファイルに対してうまく機能する。しかし、行グループが異常に小さいことが判明した場合には、複数の行グループが単一の部分250内に含まれるように、境界がスキップされてもよい。CSVファイルを分割するときなどの他の例では、境界検出器222は、そうすると望ましくないほど多数の小部分250を生成することになるので、データオブジェクト160の全ての単一の境界をマークしない。
そのような場合には、境界検出器222は、現在の部分250をスキャンするとき、部分250のスキャンされたサイズがある所望の目標サイズを超えるまで、境界252の検出を開始するのを待ってもよい。スキャンが目標サイズを過ぎると、境界検出器222は境界の検出を開始してもよく、好ましくは、目標サイズを越えてオブジェクトが含む最初の境界を識別する。したがって、現在の部分は終了し、新しい部分が最初に検出された境界において開始されてもよい。
【0042】
境界検出器222が境界252を探してオブジェクト160をスキャンするとき、特徴検出器224は、後の処理に関連する有用な情報を提供し得る追加の特徴についてオブジェクトをスキャンしてもよい。特定のコンテンツが存在すること、または存在しないことが事前に分かっている場合には、特定の処理タスクがより速く実行されることが知られている。特定の例として、CSVファイルの特定のクエリは、データ内に引用符がないことが事前に分かっていれば、より迅速に実行される。したがって、特徴検出器224は、引用符の存在または不在についてCSVファイルをチェックし、それに応じてオブジェクトメタデータ112(「Features」)を更新することができる。
【0043】
データオブジェクト160の部分250が境界252に基づいて識別された状態で、変換器230は、部分250をそれぞれのセグメント170に変換する。例えば、変換器230は、ある部分で見つかったメタデータを1つ以上の他の部分に追加することによって、そのような部分が独立した処理により適合するように、すなわち部分250間の依存性を取り除くことによって、部分250の少なくともいくつかを変更する。変更の性質は、タイプ検出器210の動作に基づいて既知であるオブジェクトタイプに依存する。変換器230の動作の結果は、データオブジェクトの個別に処理可能なユニットを提供するセグメント170である。例えば、セグメント170の各々は、データオブジェクト160と同じオブジェクトタイプとして与えられる。従って、セグメント170は、データオブジェクトが処理されるのと同じ方法で処理され得るが、主な違いは、セグメント170がはるかに小さく、より容易に扱えることである。
【0044】
次に、分配器240は、セグメント170をストレージクラスタ130の選択されたノード120に格納するために、当該ノードに分配する。このとき、ゲートウェイ110は、セグメント170が送られる場所、例えば、特定のノード120の識別子を記録するために、オブジェクトメタデータ112を更新する。このように、説明した方法において、データオブジェクト160は、分割され、変換され、ストレージクラスタ130の複数のノード120に分配される。
【0045】
図3Aおよび図3Bは、CSVファイルなどの表形式データを含むデータオブジェクト160aを分割および変換するための例示的な配置を示す図である。図3Aは、分割の結果例を示し、図3Bは、変換の結果例を示す。
【0046】
図3Aに示すように、データオブジェクト160aは、第1行310と、2から8とラベル付けされた追加の行(列1参照)とを有する。データオブジェクト160aは、4つの列を有する。各行は、CSVにおける行の区切りとして機能する<改行>文字で終わっている。
【0047】
データオブジェクト160aを分割するとき、分割器220は、データオブジェクト160aの部分350の最小サイズを定義する目標サイズ320を適用してもよい。例えば、分割器220は、目標サイズ320に対応するデータオブジェクト160aに沿った位置(点線で示す)を特定し、特定した位置に続く第1の境界においてデータオブジェクト160aを分割してもよい。図示の例では、分割器220は、目標サイズ320に続く第1の境界252として、6行目の末尾の改行文字を検出し、この位置でオブジェクト160aを分割する。その結果、オブジェクト160aの最初の6行は、第1の部分350aを形成し、次の2行は、第2の部分350bの最初の2行を形成する。分割器220がオブジェクト160aをスキャンし続けると、追加の行が第2の部分350bに追加され得る。
【0048】
分割器220が行の境界でオブジェクト160aをうまく分離(したがって、同じ行の異なる部分が異なる部分350に割り当てられることを回避)したとしても、分割の結果が依然として非効率的である場合がある。例えば、オブジェクト160aの最初の行310がヘッダ行(例えば、列名を示すテキストを含む行)である場合、第2の部分350bはそのヘッダを欠き、その後の処理が損なわれるかもしれない。例えば、ヘッダは、特定のクエリまたは他のアクティビティに応答するために必要とされる場合がある。しかしながら、この欠落は、変換器230によって対処されてもよい。
【0049】
図3Bは、変換器230によってなされた変更の結果の例を示す。ここで、部分350a,350bは、現在、それぞれセグメント370a,370bとして与えられている。セグメント370bは、第1のセグメント370aに見られる第1の行310の複製である第1の行310aの挿入によって変更された。第1の行310aの追加により、第2の部分370bは、独立した処理可能なユニットに効果的に変換される。セグメント370bにおいて行われた変更は、オブジェクト160aに対して生成された他のセグメント370において繰り返されてもよく、それによって、全てのセグメント370が、第1のセグメント370aのものと同じ第1の行310を有するように形成されることを理解されたい。このように、全てのそのようなセグメント370は、独立して処理可能であるように形成される。
【0050】
CSVファイルによっては、ヘッダ行を使用せず、第1行310がテキストベースのフィールド名ではなく、データを含むことがあることに留意されたい。そのような場合には、最初のセグメント370aの最初の行310のオブジェクト160aの他のセグメント370への複製は、単に冗長なデータを広げるだけかもしれない。しかしながら、そのような場合は、容易に処理することができる。例えば、クエリまたは(例えば、ストレージクラスタのクライアントから到来する)他の処理タスクは、オブジェクト160aによって表されるCSVファイルがヘッダを含むかどうかを特定してもよい。もし含む場合には、ヘッダを複製することが適切であったため、変更を行う必要はない。しかし、タスクがCSVファイルにヘッダが含まれていないことを特定した場合には、複製は不要であったことが判明する。このような場合には、CSVファイルに対して分散処理タスクを実行するノード120は、セグメント370のうち最初のセグメント370a以外の全てのセグメントの最初の行を無視するように指示するだけでよい。セグメント370のサイズと比較して典型的には無視できるサイズの最初の行310を複製した結果として、失われるものは少ないであろう。
【0051】
図4Aおよび図4Bは、Parquetファイルのような列ベースのデータを含むデータオブジェクト160bを分割および変換するための例示的な配置を示す。図4Aは、分割および変換前の例示的なParquetファイル構造を示し、図4Bは、分割および変換後の例示的な結果を示す。
【0052】
図4Aに見られるように、Parquetファイル160bは、上述したように、4バイトの「マジックナンバー」(「PAR1」)で始まり、終了する。ファイル160bは、さらに、複数の行グループ410(1からN、ここで、「N」は任意の正の整数)、およびフッタ420を含む。行グループ410は、典型的にはそれぞれメガバイトオーダーの大きな構造体である。フッタ420は、ファイル160b内の行グループ410の位置(例えば、バイト位置)を提供する行グループメタデータを含む、ファイルメタデータを含む。また、フッタ420は、「ファイルメタデータの長さ」を符号化する4バイトのデータ要素を含む。
【0053】
オブジェクトを前方にスキャンしながら境界252を直接検出することができるCSVの例とは異なり、行グループ410間の境界は、フッタ420を読むことによってのみ容易に検出することができる。これは、分割器220が、典型的には、フッタ420に到達する前にファイル160a全体を通過させ、その後、遡及的に分割を行うことを意味する。分割は、一般に、Parquetファイル160bの各部分260が単一の行グループ410を含むように、全ての行グループ境界において実行される。行グループ410がコンテンツに基づいてサイズが変化する可能性があることを考慮すると、2つ以上の行グループ410を単一の部分260に配置することが時折、価値があることがある。これは、設計上の好みの問題である。
【0054】
図4Bに示すように、図4AのParquetファイル160bは、N個の異なるセグメント470(470-1から470-N)として与えられており、各セグメントは単一の行グループを含んでいる。例えば、セグメント470-1は行グループ1を含み、セグメント470-2は行グループ2を含み、行グループNを含むセグメント470-Nまで、同様である。
【0055】
変換器230によって実装され得る図4Bに示される変更は、各行グループを自己完結型のParquetファイルとして与える。例えば、セグメント470-1から470-Nの各々は、先頭および末尾にマジックナンバー「PAR1」を含む。また、セグメント470-1から470-Nの各々は、フッタ420の変更版であってもよい、変更されたフッタを含む。各セグメント470のフッタは、その行グループメタデータがそのセグメントに含まれる行グループ(または複数の行グループ)のみに限定され、そのセグメントに含まれない行グループの行グループメタデータを除外するように作成されている。また、各セグメントにおけるファイルメタデータの実際の長さを反映するために、「ファイルメタデータの長さ」が、各セグメントに提供されている。したがって、各セグメント470-1から470-Nは、それ自体を、任意のParquetファイルと同様に独立した処理に従う完全なParquetファイルとして提供する。
【0056】
いくつかの例では、追加のセグメント470-(N+l)が、Parquetファイル160bの最終セグメントとして提供されてもよい。セグメント470-(N+l)は、行グループを含まず、むしろ、ファイル160bの元々のフッタ420の一部の持続版、すなわち、「ファイルメタデータ(全行グループ用)」および「ファイルメタデータの長さ」を提供する。このセグメントは、参照のために提供され、特定の処理タスクを高速化するために有用であるが、自己完結型のParquetファイルとして扱われることは意図していない。また、クエリを実行する際のデータのソースとして使用することも意図していない。
【0057】
図5Aおよび図5Bは、ビデオファイルまたはストリームなどのビデオデータを含むデータオブジェクト160cを分割および変換するための例示的な配置を示す。図5Aは、分割および変換前のビデオフレームの例示的なシーケンスを示し、図5Bは、分割および変換後の例示的な結果を示す。
【0058】
図5Aに見られるように、データオブジェクト160cは、フレーム510のシーケンスを含み、描かれている例では、フレーム510は、1つ以上のIフレーム(例えば、510-1および510c)、1つ以上のPフレーム(例えば、510-2,510-3,510a,510dおよび510e)、および1つ以上のBフレーム(例えば、510b)を含んでいる。周知のように、Iフレームは、完全な画像を含むビデオフレームであり、完全性のために他のフレームに依存しない。対照的に、PフレームおよびBフレームは、不完全であり、完全性のために他のフレームに依存する。Pフレームは通常、前のフレームを参照するが、Bフレームは前方または後方を参照することができる。典型的には、Iフレームは、PフレームまたはBフレームよりも大きく、格納および送信にコストがかかるので、Iフレームは、PフレームまたはBフレームよりもはるかに少ない頻度で現れる。
【0059】
オブジェクト160cにおけるビデオデータの分割は、オブジェクト160a(図3Aおよび図3B)におけるCSVデータの分割とよく似た動作をする。例えば、分割器220は、目標サイズ320と等しいかまたはそれよりわずかに大きいサイズを有する部分250を生成することを目的としてもよい。分割器220は、目標サイズを通過した後に生じるデータオブジェクト内の最初の境界252を見つけようとする。ビデオデータにおける境界を検出するために、分割器220は、以前または以後のフレームへの参照を必要としないため、自然な境界を提供するIフレームを識別するように構成されてもよい。図示された例では、分割器220は、目標サイズ320を超える次の境界をIフレーム510cとして識別する。
【0060】
しかし、Iフレーム510cの直前のビデオを分割すると、Bフレーム510bがIフレーム510cを参照し、したがって、それなしでは描写できないので、問題が生じる。分割器220がBフレーム510bの直後のビデオを分割しようとすると、Bフレーム510bを含むセグメントにおいてビデオにギャップが現れる。したがって、そのセグメントは、別のセグメントに依存することになるため、不完全なものとなる。
【0061】
図5Bは、例示的な解決策を示す。ここでは、これまで処理されたオブジェクト160cは、2つのセグメント570a,570bとして描写される。依存性を解決するために、セグメント570aには、Iフレーム510cの複製510ccが提供される。複製510ccは、Bフレーム510bからの必要な参照を提供し、セグメント570aを描写する際に落とされたビデオフレームを回避する。一方、セグメント570bは、Iフレーム510cをその最初のフレームとして保持し、したがって、セグメント570bを開始するための独立した基準線を提供する。後続のフレーム、例えば、フレーム510d,510eは、完全性のためにIフレーム510cに依存してもよいが、後続のフレームはいずれも、Iフレーム510cよりも前の任意のフレームを参照しない。したがって、セグメント570a,570bの各々は、独立した個別処理可能なユニットとして与えられ、完全性のために他のセグメントに依存しない。
【0062】
図6は、追加の実施形態に従う分散処理を実行するための例示的な配置を示す。描かれた配置は、図1の環境100または他の環境において実装されてもよい。以下の説明は、上述の特徴が即座の実施形態の部分を形成するように、環境100における実装を想定している。他の例では、図6の配置は、異なる特徴を有する他の環境において実装されてもよい。したがって、上述した特徴は、例示的な例としてみなされるべきであるが、具体的に示されない限り必要なものとしてみなされるべきではない。
【0063】
図6に示すように、ゲートウェイ110は、分散処理を行う際のその役割をサポートするコンポーネントを備える。これらは、上述したオブジェクトメタデータ112に加えて、タスク要求器610、ディスパッチャ620、出力受信器630、および出力集計器640を備える。
【0064】
例示的な動作では、タスク要求器610は、指定されたデータオブジェクト160(またはオブジェクト160の組)に対して処理タスクを実行するための要求650を発する。様々なタイプのタスクが企図される。これらは、例えば、(例えば、表形式またはツリーベースのデータオブジェクトのための)指定されたデータの読み取りおよび/またはクエリを含んでもよい。クエリのタイプは、SQL(Simple Query Language)クエリ、キー値ルックアップ、noSQLクエリなどを含んでいてもよい。ビデオデータオブジェクトのタスクは、指定されたグラフィックコンテンツ(例えば、顔、ナンバープレート、地理的特徴など)の検索のような、分散ビデオ処理タスクを含んでいてもよい。音声データオブジェクトのタスクは、話し言葉、音声特性(例えば、トーン、アクセント、ピッチなど)、特定の音などの検索を含んでいてもよい。基本的に、複数のノード120の間で分割することが可能であり、潜在的に大量のデータへのアクセスを伴う任意のタスクは、図6の配置における処理のための良い候補である。
【0065】
要求650が発せられると、ディスパッチャ620は、要求されたタスクのコンポーネントをそれぞれのノード120に分配することを開始する。例えば、ディスパッチャ620は、オブジェクトメタデータ112をチェックして、指定されたデータオブジェクト160(またはオブジェクトの組)のセグメント170と、ストレージクラスタ130内のそれぞれの位置とを識別する。図示された簡略化された例では、オブジェクトメタデータ112は、データオブジェクト160を構成する3つのセグメント170(例えば、S1、S2、およびS3)(典型的な結果は、数十または数百のセグメントを含み得る)およびそれぞれのセグメント170を格納する3つのコンピューティングノード120-1,120-2,120-3を識別する。
【0066】
次に、ディスパッチャ620は、識別されたノード120-1,120-2,120-3にそれぞれ、要求650-1,650-2,650-3を送信する。要求650-1,650-2,650-3は、要求650と類似または同一であってもよく、例えば、要求650において指定されるのと同じクエリまたは他のタスクを提供してもよい。しかしながら、そのような要求650-1,650-2,650-3は、互いに同一である必要はない。例えば、いくつかの要求は、他の要求において送信されたものとは異なるセグメント固有のメタデータ(例えば、オブジェクトメタデータ112に格納されている)を含んでいてもよく、これは、特定のノード上の処理タスクを導くために使用されてもよい。
【0067】
特定されたノード120-1,120-2,120-3は、それぞれ、要求650-1,650-2,650-3を受信し、これらのノードの各々は、そのそれぞれのセグメント上で要求タスクの実行を開始する。例えば、ノード120-1は、セグメントS1上でタスクを実行し、ノード120-2は、セグメントS2上でタスクを実行し、ノード120-3は、セグメントS3上でタスクを実行する。一例では、各ノード120は、他のノード120に連絡する必要なく、それぞれのセグメント170上でそれぞれのタスクを独立に実行する。例えば、ノード120-1は、S2またはS3へのアクセスを必要とせず、S1のみにアクセスすることにより、その作業を完了する。他のノードについても同様である。
【0068】
ノード120-1,120-2,120-3がそれぞれの作業を実行すると、それらのノードは、ノード120-1からの出力660-1、ノード120-2からの出力660-2、およびノード120-3からの出力660-3として示される、それぞれの出力660を生成する。参加ノードは、それぞれの出力660をゲートウェイ110に送り返し、ゲートウェイ110は出力を出力受信器630において収集する。
【0069】
図6の下部付近の拡大図に示すように、出力受信器630は、任意の順序で参加ノード120から出力660を受信してもよい。第1のシナリオにおいて、ノード120-1,120-2,120-3は、出力を送り返す前に、それぞれのタスクが完了するのを待つように構成される。この場合には、特定のノードからの出力660は、全て一度に到着し、異なるノードからの出力は、それぞれの完了時間に基づいて、異なる時間に到着してもよい。出力データ662は、この第1のシナリオによる結果例を示す。ここでは、ノード120-2からの出力660-2が最初に到着し、したがって出力データ662に最初に現れ、次に(ノード120-1からの)出力660-1が続き、次に(ノード120-3からの)最後に到着する出力660-3が現れる。出力660は、このように出力データ662においてインターリーブされる。
【0070】
第2のシナリオにおいて、ノード120-1,120-2,120-3は、そのようなインクリメントが利用可能になったときに直ちにというように、段階的に出力を返すように構成される。この第2のシナリオでは、各参加ノードは、複数の送信においてその出力660を返すことができ、それは時間的に広がってもよい。出力データ664は、このシナリオに従った例示的な結果を示す。ここで、出力データ664は、6つの異なるバッチ(660-1a,660-1b,660-2a,660-2b,660-3a,660-3b)、すなわち、ノード120-1,120-2,120-3のそれぞれからの2つの出力のバッチを含むことがわかる。バッチは、受け取った順序で出力データ664に現れ、したがって、第1のシナリオで見られたよりも細かい粒度でインターリーブされてもよい。
【0071】
もちろん、ゲートウェイ110は、任意の所望の方法で出力660をソートしてもよく、ストレージクラスタ130の任意のノード120が、このタスクを実行するために呼び出されてもよい。いくつかの例では、影響を受けるノードとゲートウェイ110の両方が、出力660をソートすることに参加してもよい。例えば、ノードの各々は、結果660-1,660-2,660-3の各々がソートされた順序で個別に到着するように、そのそれぞれの出力をソートしてもよい。その後、ゲートウェイ110は、例えば、返された結果のソートされたセットの間でソートするために出力集計器640を用いることによって、作業を完了させてもよい。
【0072】
ソートには時間がかかり、多くの処理タスクは、ソートされた出力よりも速度を高く評価する。高速動作をさらに促進するために、コンピューティングノード120は、いくつかの例において、出力660をゲートウェイ110に返すときにRDMA(リモートダイレクトメモリアクセス)を用いてもよい。
【0073】
いくつかの処理タスクについて、ディスパッチャ620は、処理要求を全ての関係するノードに(すなわち、対象データオブジェクトのセグメントを格納する全てのノードに)送信してもよい。他の例では、ディスパッチャ620は、例えば、先験的なセグメントコンテンツ、セグメントのバイト範囲、または他の要因の知識に基づいて、要求が送信されるノードを制限してもよい。このように関与するノードの数を制限することは、ネットワーク140(図1)上のトラフィックを減少させ、効率をさらに向上するのに役立つ。
【0074】
いくつかの処理タスクは、集計を含むことができる。例えば、クエリは、レコード自体ではなく、指定された基準を満たすレコードのカウントを要求することができる。クエリは、平均値、最大値、最小値、または他の何らかの集計値を要求することもできる。ノード120は、特定の集計関数(例えば、カウント、合計、最大、最小など)を自ら実行することができるが、個々のノード120は、通常、複数のノードにわたる出力を集計することはない。むしろ、この機能は、データ集計器640によって実行されてもよい。例えば、集計器640は、各々がそれぞれのセグメントに関するその処理から得られた部分的な集計結果を提供する、複数のノードからカウントを受信してもよい。集計器640は、次に、応答するノードからのカウントを合計して、データオブジェクト160全体についての集計された合計を生成してもよい。データオブジェクトの集計された平均を生成するために、例えば、集計器640は、カウントと合計の両方を提供するように各参加ノードに指示してもよい。次に、返された全てのカウントを合計して集計カウントを生成し、全ての総計を合計して集計総計を生成し、次に、集計総計を集計カウントで除算して所望の集計平均を生成してもよい。集計関数の他のタイプは、同様の方法で実行されてもよい。
【0075】
図6の配置は、帯域幅の点で非常に低いコストで集計クエリを実行することができることを理解されたい。各参加ノードは、ローカル集計を計算し、その結果のみを返すので、集計クエリは、非常に大きなデータセットにわたって実行され、通常は1キロバイト未満であり、しばしば数バイト程度に小さいこともある非常に小さな出力660を生成することができる。
【0076】
ゲートウェイ110は、タスク要求650の発信者、影響を受けるノードへの要求のディスパッチャ、およびノードからの出力660のコレクタとして示され説明されてきたが、これらの機能は、代替的に他のコンピュータによって、または複数のコンピュータによって実行されてもよい。実際、それらは、ストレージクラスタ130の1つまたは複数のノード120によって実行されてもよい。従って、示された例は、限定的ではなく例示的であることが意図されている。
【0077】
図7および図8は、追加の実施形態に従ってセグメント170のデータ保護を実行するための例示的な配置を示す。図6および図7の描かれた配置は、図1および/または図6の環境100、あるいは上記に例示されたものとは異なる環境において実装されてもよい。
【0078】
図7は、単一のデータオブジェクト160から生成された複数のセグメント170を、セグメント170を縦に配置して示している。必須ではないが、セグメント170は、この場合、最も早く作成されたセグメント(オブジェクトの始まりに最も近い)が上に現れ、縦方向に隣接するセグメント170がデータオブジェクト160の隣接部分に対応するように、順番に配置されてもよい。データオブジェクト160から9つよりも多くのセグメント170が生成されているかもしれないことを理解した上で、9つのセグメント170が示されている。一例では、図示された9つのセグメント170は、データオブジェクトから(例えば、分割器220および変換器230によって;図2)生成される最初の9つのセグメントである。
【0079】
注目すべきは、セグメント170が異なるそれぞれの長さを有することである。したがって、図の右上に示すように、セグメント170を長さの順に、例えば、最長から最短にランク付けすることが可能である。
【0080】
図8は、ランク付けされた同じセグメント170を拡大した図である。ここでは、種々の形態のパリティ情報を提供する修復データのM=3個の要素810を生成するために、9つのセグメント(K=9)に対してK+M回の消去コード処理が(例えば、ゲートウェイ110によって)実行される。K個のセグメントは、M個の修復要素とともに、全体として合計12個の要素を含む修復グループ802を構成する。
【0081】
図示された修復グループ802は、データ損失を経験する前に、最大M個の要素に損傷を与えることを許容にする。損傷した要素は、データセグメント170および/または修復要素810を含む修復グループ802の任意の要素であってもよく、任意の組み合せであってもよい。完全な回復および修復は、M個の全ての要素よりも大きい要素が損傷されない限り達成され得る。K=9およびM=3の選択は、他の要因の中でも、所望のデータ保護レベルに基づいて、変化させることができることを理解すべきである。実施例においては、修復要素810は、全く新しいと思われる計算上効率的な手順800を使用して生成される。
【0082】
以前の消去符号化スキームは、全てのK個のデータ要素が等しい長さを有することを必要とする場合がある。データ要素が不均等な長さを有する場合、長さを等しくするためにゼロパディングが使用され得る。次に、パリティ計算が、全てのK個のデータ要素の全長を使用して実行され、K個のデータ要素と同じ長さを有するM個のパリティ要素を生成する。
【0083】
通常の消失訂正符号化アプローチと対照的に、手順800は、不等長を有するデータ要素から修復要素を生成する。ゼロパディングは必要ない。一例において、手順800は、セグメント170、すなわち、K=9のデータ要素を論理的に整列させることによって進行する。例えば、セグメント170は、図示されるように、それぞれの上端において整列されてもよい。あるいは、セグメント170は、それぞれの下端(図示せず)において整列されてもよく、あるいは、他の何らかの既知の方法で整列されてもよい。任意のセグメント170の実際の移動が要求されないので、そのような整列は、物理的というよりも論理的であることに留意されたい。また、セグメント170の図示された順位は、物理的というよりも論理的であると理解されるべきである。
【0084】
セグメント270が論理的に整列された状態で、手順800は、最短のセグメント170(「1」とラベル付けされている)を特定し、対応する範囲(Rng1)を特定することによって進行する。Rng1は、セグメント1と整列し、同じサイズおよび限界を有する。セグメント1が最短のセグメントであり、セグメント170が論理的に整列しているので、K個のセグメント170(セグメント1から9)の全てがRng1内にデータを有する。セグメント1から9にわたるRng1データを使用して、手順は、M個の修復要素810のそれぞれに対して1組ずつ、M組の修復データを計算し、Rng1の位置においてそれぞれの修復要素810に修復データを配置する。Rng1の修復データは、このように完全であり、そのような修復データは、K個全てのセグメント170に基づいている。修復データの本明細書における計算は、従来のK+M回の消失訂正符号化において使用されるものと同様であってよく、その詳細は、実施形態にとって重要ではなく、これ以上説明されないことを理解されたい。
【0085】
次に、手順800は、追加の範囲に対して同様の方法で継続する。例えば、Rng2は、セグメント1を越えて延びるセグメント2の部分、すなわち、修復データがまだ計算されていないセグメント2の部分に対応する。セグメント1にはRng2のデータがないため、Rng2の修復データは、セグメント2~9の対応する部分のみ(すなわち、合計K-1個のセグメント)を使用して計算することができる。上記と同様に、手順は、M個の修復要素810のそれぞれに対して1組ずつ、M組の修復データを計算し、修復データをそれぞれの修復要素810に、今回はRng2の位置に配置する。このようにして、Rng2に対する修復データが完成するが、かかる修復データは、K-1個のセグメント170のみに基づいている。
【0086】
手順800は、範囲Rng3からRng8の各々についてこの方法で継続することができ、各範囲の修復データの計算は、直前の範囲の計算よりも1つ少ないセグメントを含む。したがって、Rng3の計算にはK-2個のセグメントが含まれ、Rng4の計算にはK-3個のセグメントが含まれ、Rng8の計算にはK-7個のセグメント、すなわち、セグメント8,9のみが含まれるようになる。なお、Rng9は1つのセグメント(セグメント9)しか交差しないので、Rng9の計算は不要である。Rng9に対する修復データを計算するのではなく、手順800は、代わりに、影響を受けるデータ、すなわち、Rng9内のセグメント9の部分のレプリカ(複製)を格納する。Rng9データの別個の複製は、修復要素810の各々のRng9の位置に提供されてもよい。
【0087】
消失訂正符号化手順800は、典型的には、従来の消失訂正符号化よりも計算が高速である。M個の修復要素810の修復データを計算するためにK個全てのデータ要素を必要とする代わりに、手順800は、最短のデータ要素のみに対してK個のデータ要素を必要とする。次に短いデータ要素ごとに、手順800は、1つ少ないデータ要素を必要とし、最終的には2つのデータ要素のみを必要とし、したがって、計算の複雑さおよび実行時間を低減する。
【0088】
オブジェクト160から生成されるようなセグメント170は、消失訂正符号化手順800を使用して保護されてもよいことを理解されたい。例えば、セグメント170をクラスタ130に格納するためにコンピューティングノード120に分配するとき、ゲートウェイ110(またはいくつかの他のコンピュータ)は、低減された計算コストで修復要素810を生成するために手順800を実行してもよい。手順800は、一度にK個のセグメント170で動作し、それぞれについてM個の修復要素を生成し、K+M個の要素の各組についてそれぞれの修復グループ802を形成する。
【0089】
図9は、特定のデータオブジェクト160xを保護するために使用され得る、複数の修復グループ802の例示的な配置を示す。図示されるように、修復グループ802-1,802-2、および修復グループ802-Rまでは、例えば、消去符号化手順802を使用して、データオブジェクト160xのデータ保護を行う。第1の修復グループ802-1は、データオブジェクト160xから生成されるK個のセグメント170の第1のグループを含みかつ保護し、第2の修復グループ802-2は、同じデータオブジェクト160xから生成されるK個のセグメント170の第2のグループを含みかつ保護するというように、最後のセグメント170グループを保護する第Rの修復グループ802-Rまで続く。修復グループ802-Rは、K個より少ないセグメントを含むことに留意されたい。例えば、データオブジェクト160xは、7つのセグメントのみを生成した後に終了(データを使い果たす)してもよい。修復グループ802を構成するセグメント170は、列(列1から列9)に配置され、各列がK個の要素のそれぞれの1つに対応することが分かる。
【0090】
消失訂正符号化は、データ配置にある種の制約を設けることができることを理解されたい。例えば、同じ修復グループ802に属する2つのセグメント170は、通常、同じディスクドライブ(例えば、SSD、磁気ディスクドライブなど)に格納されるべきではなく、そうすることは、消失訂正符号化の冗長性を損ない、セグメントがデータ損失の増加リスクにさらされることになるからである。同様の理由で、同じ修復グループ802に属する2つのセグメント170は、通常、同じコンピューティングノード120に格納されるべきではなく、そうすることは、例えば、コンピューティングノード120の故障の場合に、冗長性を低下させることになるからである。しかしながら、これらのルールは、通常、異なる修復グループ802には適用されない。例えば、2つのセグメントが同じ修復グループ802に属さない限り、異なる修復グループ802に属するセグメント170を同じコンピューティングノード120に格納しても、冗長性の実質的損失は生じない。例えば、単一のコンピューティングノード120が、所定のデータオブジェクト160(同じデータオブジェクトのR個のセグメントの合計)を保護するR個の修復グループの各々から1つのセグメント170を格納することが許されてもよい。
【0091】
消失訂正符号化は、データを保護するための1つの方法であり、他の方法は複製であることをさらに理解されたい。一例では、データオブジェクト160およびそれらに関連する修復データおよび/またはレプリカは、オブジェクトストアのバケットに存在し、データ保護スキームは、バケット単位で適用される。データ保護に複製を使用するバケットは、したがって、そこに含まれる全てのオブジェクト160を含むそのコンテンツの全てを保護するために複製を使用することになる。同様に、データ保護に消失訂正符号化を用いるバケットは、その全てのコンテンツに消失訂正符号化を用いる。消失訂正符号化パラメータK,Mも、バケット単位で選択および適用されてもよい。したがって、図9の配置は、オブジェクト160xを含むバケットがこれらの設定を使用するので、K=9およびM=3の消失訂正符号化を使用してもよく、したがって、バケットの全てのコンテンツにグローバルに適用される。
【0092】
図10は、データオブジェクト160およびそのセグメント170を管理する際に使用される種々の量を決定するための例示的な方法1000を示す。方法1000は、消失訂正符号化を用いたデータ保護を想定しており、セグメント170の所望の目標サイズ320(図3)、およびデータオブジェクト160の保護に使用する修復グループ802の数R(図9)を決定するために使用されてもよい。方法1000は、例えば、ゲートウェイ110、ストレージクラスタ130のノード120、またはクラスタ130に接続可能な他のコンピュータによって実行されてもよい。方法1000の開始時に、データオブジェクト160のサイズと(K+M回の消失訂正符号化において使用される)数Kが予め分かっているものとする。
【0093】
1010において、方法1000は、ノード120によって効率的に処理されることができるセグメント170の最大サイズSMAXを確立する。最大サイズは、ノード120のハードウェア仕様(例えば、クロック速度、コアの数、メモリの量など)、ならびに処理タスクに対する予想されるレイテンシおよびユーザの期待などの実用的な考慮事項に基づいてもよい。SMAXの典型的な範囲は、例えば、数100キロバイトと数メガバイトの間であってもよい。
【0094】
1012において、本方法は、列あたりの平均バイト数BCを計算する。一例において、BCの値は、データオブジェクト160のサイズ「ObjectSize」と、データオブジェクト160を保護するために使用されるK+M回の消失訂正符号化において使用される数Kとに基づいてもよい。例えば、BC=ObjectSize/Kである。図9に戻って参照すると、BCは、図示された列における列ごとのデータの平均量を表すことが分かる。
【0095】
1014において、方法1000は、例えば、BCをSMAXで除算し、最も近い自然数に切り上げることによって、修復グループの数Rを計算する。より具体的には、修復グループの数は、R=BC/SMAXとして計算され、切り上げられればよい。
【0096】
1016において、本方法は、目標セグメントサイズ320をSTAR=BC/Rとして計算する。結果として得られる量STARは、例えば、データオブジェクト160を分割するときに境界252の検索を開始する場所を決定する際に、分割器220に提供されてもよい。
【0097】
1018において、方法1000は、少なくともSTARと同じ大きさの部分250を生成する方法でデータオブジェクト160を分割するように、例えば、STARを越えて次の境界252まで延びる部分250を生成するように分割器220に指示する。
【0098】
このように、方法1000は、特定のデータオブジェクト160に対して使用されるべき目標セグメントサイズ320および修復グループの数Rを確立するための有用なガイドラインを提供する。これらの量の実際の選択は、管理者の裁量を含んでいてもよく、説明されたもの以外の他の要因によって操作されることがある。したがって、方法1000は、必須ではなく、助言的であることを意図している。
【0099】
図11は、例示的なコンピューティングノード120をさらに詳細に示している。コンピューティングノード120は、ストレージクラスタ130のコンピューティングノード120-1,120-2,120-3を代表するものであることを意図している。また、図1のゲートウェイ110を代表するものであることが意図されている。
【0100】
図示されているように、コンピューティングノード120は、1つまたは複数のネットワークインターフェースカード(NIC)1110などの1つまたは複数の通信インターフェース、1つまたは複数の処理チップおよび/またはアセンブリなどの一組のプロセッサ1120、ソフトウェアを実行するための揮発性メモリなどのメモリ1130、および1つまたは複数の固体ディスク(SSD)、磁気ディスクドライブなどの永続的ストレージ1140を備えている。一組のプロセッサ1120およびメモリ1130は、共に制御回路を形成し、本明細書に記載されるような種々の方法および機能を実行するように構成されかつ配置される。また、メモリ1130は、図1および図2に示されるような種々のソフトウェア構成を含み、これらは実行可能な命令の形態で実現される。実行可能な命令が一組のプロセッサ1120によって実行されると、一組のプロセッサ1120は、ソフトウェア構成の動作を実行する。一例では、1つ以上の一組のプロセッサ1120は、1以上のネットワークカード1110に常駐していてもよく、これにより、ネットワーク140上の高速通信を促進し、帯域幅および効率を向上することができる。
【0101】
図12図13および図14は、環境100に関連して実施され得る例示的な方法1200,1300,1400を示し、上述の特徴のいくつかの要約を提供する。方法1200,1300,1400は、例えば、図1および図2に関連して説明したソフトウェア構成によって典型的に実行される。方法1200,1300,1400の様々な動作は、任意の適切な方法で順序付けられてもよい。したがって、動作が図示されたものとは異なる順序で実行される実施形態が構築されてもよく、それは、いくつかの動作を同時に実行することを含んでもよい。
【0102】
図12は、データオブジェクトを管理する例示的な方法1200を示す。1210において、データオブジェクト160は、データオブジェクト160内の境界252において複数の部分250に分割される(図2参照)。境界252は、データオブジェクトのタイプ(例えば、CSV、JSON、XML、Parquet、ビデオなど)に従って、データオブジェクト160の処理可能なユニット250の間のセパレータを提供する。1220において、部分250は、データオブジェクト160のタイプと同じタイプの個別に処理可能なユニットを提供するセグメント170に変換される。例えば、データおよび/またはメタデータは、1つの部分250から他の部分に複製されてもよく、セグメント170間およびセグメント間の依存性を低減または除去するために、他の変更がなされてもよい。1230において、セグメント170は、そこに格納するために、ストレージクラスタ130の複数のコンピューティングノード120の間に分配される。
【0103】
図13は、データオブジェクトを管理する例示的な方法1300を示す。1310において、データオブジェクト160は、例えば、分割器220(図2)の動作によって、複数のセグメント170に分割される。1320において、セグメント170は、ストレージクラスタ130の複数のコンピューティングノード120の間に分配される。1330において、分配された処理タスクが、ストレージクラスタ130によって実行される。分配された処理タスクは、ストレージクラスタ130の複数のそれぞれのコンピューティングノード120によって、そこに格納されたそれぞれのセグメント170またはセグメント170の組に対して独立に実行される。
【0104】
図14は、データオブジェクトを管理する例示的な方法1400を示す。1410において、データオブジェクト160は、複数のセグメント170に分割され、セグメント170の少なくともいくつかは、互いに異なる長さを有する(図7および図8を参照)。1420において、セグメント170は、ストレージクラスタ130の複数のコンピューティングノード120に分配される。1430において、セグメント170のK個は、K個のセグメントから生成された修復データのM個の要素810を用いて保護され、M個の要素810の各々は、K個のセグメントから選択されたセグメントのそれぞれのグループ化(例えば、K個のセグメントを有する1つのグループ化、K-1個のセグメントを有する1つのグループ化等々)から計算された修復データを格納する複数の範囲(例えば、Rng1,Rng2等)を有する。
【0105】
ストレージクラスタ130においてデータオブジェクト160を管理するための改良された技術は、データオブジェクト160を、データオブジェクト160内の境界252において複数の部分250に分割することを含む。本技術は、データオブジェクト160の部分250を、個別に処理可能なユニットを提供するセグメント170に変換することと、そこに格納するために、セグメント170をストレージクラスタ130の複数のコンピューティングノード120に分配することとをさらに含む。
【0106】
特定の実施形態を説明してきたが、多数の代替的な実施形態または変形を行うことができる。さらに、特徴は、本明細書の特定の実施形態を参照して示され、説明されてきたが、そのような特徴は、開示された実施形態およびその変形例のいずれにも含まれてもよく、本明細書では、そのような特徴が含まれている。したがって、任意の実施形態に関連して開示された特徴は、任意の他の実施形態に含まれることが理解される。
【0107】
さらに、改良またはその一部は、(図12において媒体1250として例示的に示された)磁気ディスク、磁気テープ、コンパクトディスク、DVD、光ディスク、フラッシュドライブ、ソリッドステートドライブ、SD(Secure Digital)チップまたはデバイス、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などの1以上の非一過性のコンピュータ読取り可能な記憶媒体を含むコンピュータプログラム製品として具現化されてもよい。任意の数のコンピュータ読み取り可能な媒体が使用されてもよい。媒体は、1つ以上のコンピュータまたは他のプロセッサ上で実行されると、本明細書に記載された1以上の処理を実行する命令で符号化されてもよい。そのような媒体は、製造物または機械とみなされてもよく、1つの機械から別の機械に転送可能であってもよい。
【0108】
本書全体で使用されているように、語句「備える」、「含む」および「有する」は、開放的な方法で何かの特定の項目、ステップ、要素、または側面を規定することを意図している。また、本明細書で使用される場合、特に反対の記述がない限り、「組」という語句は、1つ以上の何かを意味する。これは、フレーズ「組」の後に単数または複数のオブジェクトが続くかどうか、および単数または複数の動詞が接続されるかどうかに関係ない。また、「一組の」要素は、存在する全ての要素よりも少ない数を表すことができる。したがって、その組の一部ではない同種の要素がさらに存在してもよい。
さらに、「第1」、「第2」、「第3」などの序数表現は、本明細書では識別のための形容詞として使用されてもよい。具体的に示されない限り、これらの序数表現は、任意の順序または配列を意味することを意図していない。したがって、例えば、「第2の」イベントは、「第1のイベント」の前または後に行われてもよく、あるいは、第1のイベントが発生することなく行われてもよい。さらに、特定の要素、特徴、または動作を「第1の」そのような要素、特徴、または動作であると本明細書で特定することは、「第2の」または他のそのような要素、特徴、または動作も存在しなければならないことを要求すると解釈すべきではない。むしろ、「第1」の項目が唯一のものであってもよい。また、特に断りのない限り、「~に基づく」は非排他的であることを意図している。したがって、「に基づく」は、特に断りのない限り、「にのみ基づく」ではなく、「に少なくとも部分的に基づく」を意味すると解釈されるべきである。特定の実施形態が本明細書に開示されているが、これらは例示としてのみ提供され、限定的に解釈されるべきではないと理解される。
【0109】
したがって、当業者は、以下の請求項の範囲から逸脱することなく、本明細書に開示された実施形態に対して形態および詳細における種々の変更を行うことができることを理解するであろう。
図1
図2
図3A
図3B
図4A
図4B
図5A
図5B
図6
図7
図8
図9
図10
図11
図12
図13
図14
【国際調査報告】