図1は、分散コンピューティング・システム10の実施形態の概略ブロック図であり、分散コンピューティング・システム10は、ユーザ・デバイス12またはユーザ・デバイス14あるいはその両方、散在ストレージおよび/またはタスク(DST)処理ユニット16、散在ストレージおよび/またはタスク・ネットワーク(DSTN)管理ユニット18、DST整合性処理ユニット20、ならびに散在ストレージおよび/またはタスク・ネットワーク(DSTN)モジュール22を含む。分散コンピューティング・システム10のコンポーネントは、ネットワーク24を介して結合され、ネットワーク24は、1つまたは複数の無線または有線あるいはその両方の通信システム、1つまたは複数の私用イントラネット・システムまたは公衆インターネット・システムあるいはその両方、あるいは1つまたは複数のローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)あるいはその両方、あるいはこれらの組合せを含み得る。
DSTNモジュール22は、複数の散在ストレージおよび/またはタスク(DST)実行ユニット36を含み、これらのユニットは、地理的に異なる場所(たとえば、1つはシカゴ、1つはミルウォーキーなど)に配置され得る。DST実行ユニットのそれぞれは、分散エラー符号化データを記憶すること、または分散様式でデータに対して1つまたは複数のタスクを実行すること、あるいはその両方を行うように動作可能である。タスクは、単純な機能(たとえば、数学関数、論理関数、識別機能、発見機能、検索エンジン機能、置換機能など)、複雑な機能(たとえば、圧縮、人間またはコンピュータあるいはその両方の言語の翻訳、テキスト−音声変換、音声−テキスト変換など)、複数の単純または複雑なあるいはその両方の機能、1つまたは複数のアルゴリズム、1つまたは複数のアプリケーションなどであり得る。
ユーザ・デバイス12〜14、DST処理ユニット16、DSTN管理ユニット18、およびDST整合性処理ユニット20のそれぞれは、コンピューティング・コア26を含み、携帯型コンピューティング・デバイスまたは固定型コンピューティング・デバイスあるいはその両方であり得る。携帯型コンピューティング・デバイスは、ソーシャル・ネットワーキング・デバイス、ゲーミング・デバイス、携帯電話、スマートフォン、携帯情報端末、デジタル音楽プレーヤ、デジタル・ビデオ・プレーヤ、ラップトップ・コンピュータ、ハンドヘルド・コンピュータ、タブレット、ビデオ・ゲーム・コントローラ、またはコンピューティング・コアを含む任意の他の携帯型デバイス、あるいはそれらの組合せであり得る。固定型コンピューティング・デバイスは、パーソナル・コンピュータ(PC)、コンピュータ・サーバ、ケーブル・セットトップ・ボックス、衛星受信器、テレビ・セット、プリンタ、ファックス装置、家庭用娯楽機器、ビデオ・ゲーム機、または任意のタイプの家庭用もしくは業務用コンピューティング機器、あるいはそれらの組合せであり得る。ユーザ・デバイス12およびDST処理ユニット16は、DSTクライアント・モジュール34を含むように構成される。
インターフェースに関しては、各インターフェース30、32、および33が、ネットワーク24を介して間接的にまたは直接的にあるいはその両方で1つまたは複数の通信リンクをサポートするためのソフトウェアまたはハードウェアあるいはその両方を含む。たとえば、インターフェース30は、ユーザ・デバイス14とDST処理ユニット16との間の通信リンク(たとえば、有線、無線、直接、LANを介する、ネットワーク24を介するなど)をサポートする。別の例として、インターフェース32は、ユーザ・デバイス12とDSTNモジュール22との間ならびにDST処理ユニット16とDSTNモジュール22との間の通信リンク(たとえば、有線接続、無線接続、LAN接続、または任意の他のタイプのネットワーク24へ/からの接続、あるいはそれらの組合せ)をサポートする。さらに別の例として、インターフェース33は、ネットワーク24に対するDSTN管理ユニット18およびDST整合性処理ユニット20のそれぞれの通信リンクをサポートする。
分散コンピューティング・システム10は、散在ストレージ(DS)エラー符号化データの記憶および取出しをサポートすること、受け取られたデータに対する分散タスク処理をサポートすること、または記憶されたデータに対する分散タスク処理をサポートすること、あるいはそれらの組合せを行うように動作可能である。一般に、またDSエラー符号化データの記憶および取出しに関して、分散コンピューティング・システム10は、3つの主要な動作、すなわち、記憶管理、データ記憶および取出し、(その例については図20〜図26を参照して論じる)、ならびにデータ記憶整合性検証をサポートする。これら3つの主要機能により、データが符号化され、物理的に異なる位置に分散されて記憶され、信頼できるセキュアな様式で後で取り出されることが可能である。そのようなシステムは、個別のストレージ・デバイスの障害またはネットワーク機器の障害あるいはその両方に起因し得るかなりの数の障害に対して、(たとえば、ピラー幅(pillar width)マイナス復号閾値マイナス1以上であり得る障害レベルまで)耐性があり、データの損失がなく、冗長またはバックアップ・コピーの必要がない。さらに、そのシステムは、データ損失なしに無期限にデータを記憶することを可能にし、セキュアな(たとえば、システムが、データのハッキングの試みに対してかなりの耐性がある)様式で記憶する。
第2の主要機能(すなわち、分散データ記憶および取出し)は、ユーザ・デバイス12〜14で開始し終了する。たとえば、第2のタイプのユーザ・デバイス14が、DSTNモジュール22に記憶するデータ40を有する場合、ユーザ・デバイス14は、そのインターフェース30を介してデータ40をDST処理ユニット16に送る。インターフェース30は、従来のオペレーティング・システム(OS)ファイル・システム・インターフェース(たとえば、ネットワーク・ファイル・システム(NFS)、フラッシュ・ファイル・システム(FFS)、ディスク・ファイル・システム(DFS)、ファイル転送プロトコル(FTP)、ウェブベースの分散オーサリングおよびバージョン管理(WebDAV)など)、またはブロック・メモリ・インターフェース(たとえば、スモール・コンピュータ・システム・インターフェース(SCSI)、インターネット・スモール・コンピュータ・システム・インターフェース(iSCSI)など)、あるいはその両方を模倣するように機能する。加えて、インターフェース30は、ユーザ識別コード(ID)をデータ40に取り付けることができる。
記憶管理をサポートするために、DSTN管理ユニット18はDS管理サービスを実行する。1つのそのようなDS管理サービスは、DSTN管理ユニット18が、ユーザ・デバイス12〜14について個々に、またはユーザ・デバイスのグループの一部として、分散データ記憶パラメータ(たとえば、格納域(vault)作成、分散記憶パラメータ、セキュリティ・パラメータ、課金情報、ユーザ・プロファイル情報など)を確立することを含む。たとえば、DSTN管理ユニット18は、ユーザ・デバイス、デバイスのグループ、またはパブリック・アクセスのためのDSTNモジュール22のメモリ内の格納域(たとえば仮想メモリ・ブロック)の作成を調整し、格納域に対する散在ストレージ(DS)エラー符号化パラメータを格納域ごとに確立する。DSTN管理ユニット18は、分散コンピューティング・システム10のためのレジストリ情報を更新することによって、複数の格納域の格納域ごとのDSエラー符号化パラメータの記憶を推進することができる。この推進は、更新されたレジストリ情報を、DSTNモジュール22、ユーザ・デバイス12、DST処理ユニット16、およびDST整合性処理ユニット20のうちの1つまたは複数に記憶することを含む。
DSエラー符号化パラメータ(たとえば、すなわち散在ストレージ・エラー・コード化パラメータ)は、データ・セグメント化情報(たとえば、いくつのセグメント・データ(たとえば、ファイル、ファイルのグループ、データ・ブロックなど)として分割されるか)、セグメント・セキュリティ情報(たとえば、セグメントごとの暗号化、圧縮、整合性チェックサムなど)、エラー・コード化情報(たとえば、ピラー幅、復号閾値、読取り閾値、書込み閾値など)、スライス化情報(たとえば、各データ・セグメントについて作り出されることになる符号化されたデータ・スライスの数)、およびスライス・セキュリティ情報(たとえば、符号化データ・スライスごとの暗号化、圧縮、整合性チェックサムなど)を含む。
DSTN管理ユニット18は、ユーザ・プロファイル情報(たとえばアクセス制御リスト(ACL))を作り出し、ローカル・メモリ内またはDSTNモジュール22のメモリ内、あるいはその両方に記憶する。ユーザ・プロファイル情報は、認証情報、許可、またはセキュリティ・パラメータ、あるいはそれらの組合せを含む。セキュリティ・パラメータは、暗号化/解読方式、1つまたは複数の暗号化鍵、鍵生成方式、またはデータ符号化/復号方式、あるいはそれらの組合せを含むことができる。
DSTN管理ユニット18は、特定のユーザ、ユーザ・グループ、格納域アクセス、パブリック格納域アクセスなどに対する課金情報を作り出す。たとえば、DSTN管理ユニット18は、プライベート格納域またはパブリック格納域あるいはその両方にユーザがアクセスした回数を追跡し、それがアクセスごとの課金情報を生成するために使用され得る。別の例では、DSTN管理ユニット18は、ユーザ・デバイスまたはユーザ・グループあるいはその両方によって記憶または取出しあるいはその両方が行われたデータの量を追跡し、それがデータ量ごとの課金情報を生成するために使用され得る。
別のDS管理サービスは、DSTN管理ユニット18がネットワーク動作、ネットワーク管理、またはネットワーク保守、あるいはそれらの組合せを実行することを含む。ネットワーク動作は、ユーザ・データ割り振り要求(たとえば、読取り要求または書込み要求あるいはその両方)を認証すること、格納域の作成を管理すること、ユーザ・デバイスに対する認証証明を確立すること、分散コンピューティング・システム10のコンポーネント(たとえば、ユーザ・デバイス、DST実行ユニット、またはDST処理ユニット、あるいはそれらの組合せ)を追加/削除すること、またはDST実行ユニット36に対する認証証明を確立すること、あるいはそれらの組合せを含む。ネットワーク管理は、デバイスまたはユニットあるいはその両方の障害を監視すること、格納域情報を保持すること、デバイスまたはユニットあるいはその両方のアクティブ化ステータスを決定すること、デバイスまたはユニットあるいはその両方のロードを決定すること、またはシステム10のパフォーマンス・レベルに影響する任意の他のシステム・レベル動作を決定すること、あるいはそれらの組合せを含む。ネットワーク保守は、システム10のデバイスまたはユニットあるいはその両方の交換、アップグレード、修理、または拡張、あるいはそれらの組合せを推進することを含む。
分散コンピューティング・システム10内のデータ記憶整合性検証をサポートするために、DST整合性処理ユニット20は、「不良」または欠損の符号化されたデータ・スライスの再構築を実行する。高レベルでは、DST整合性処理ユニット20は、DSTNモジュール22から、符号化されたデータ・スライス、または符号化されたデータ・スライスのスライス名、あるいはその両方を取り出す/リストに挙げることを定期的に試みることによって再構築を実行する。取り出された符号化スライスについて、それらは、データ破損、古いバージョンなどに起因するエラーがあるかどうかがチェックされる。スライスがエラーを含む場合、それは「不良」スライスとしてフラグが立てられる。受け取られずまたはリストに挙げられない、あるいはその両方の符号化されたデータ・スライスについては、欠損スライスとしてフラグが立てられる。不良スライスまたは欠損スライスあるいはその両方は、その後、再構築されたスライスを作成するために良好なスライスとみなされる他の取り出された符号化データ・スライスを使用して再構築される。再構築されたスライスは、DSTNモジュール22のメモリに記憶される。DST整合性処理ユニット20は、図示されるように別個のユニットであってよく、DSTNモジュール22に含まれてもよく、DST処理ユニット16に含まれてもよく、またはDST実行ユニット36間に分散されてもよく、あるいはそれらの組合せであってもよいことに留意されたい。
受け取られたデータに対する分散タスク処理をサポートするために、分散コンピューティング・システム10は、2つの主要な動作、すなわち、DST(散在ストレージおよび/またはタスク処理)管理、ならびに受け取られたデータに対するDST実行(その例については図3〜図19を参照して論じる)を有する。DST管理の記憶部分に関して、DSTN管理ユニット18は先に説明されたように機能する。DST管理のタスク処理に関して、DSTN管理ユニット18は分散タスク処理(DTP)管理サービスを実行する。1つのそのようなDTP管理サービスは、DSTN管理ユニット18が、ユーザ・デバイス12〜14について個々に、またはユーザ・デバイスのグループの一部として、DTPパラメータ(たとえば、ユーザ格納域関連情報、課金情報、ユーザ・タスク情報など)を確立することを含む。
別のDTP管理サービスは、DSTN管理ユニット18が、DTPネットワーク動作、(上述されたのと本質的に同じ)ネットワーク管理、または(上述されたのと本質的に同じ)ネットワーク保守、あるいはそれらの組合せを実行することを含む。ネットワーク動作は、以下に限定されないが、ユーザ・タスク処理要求(たとえば、有効な要求、有効なユーザなど)を認証すること、結果または部分的結果あるいはその両方を認証すること、ユーザ・デバイスに対するDTP認証証明を確立すること、分散コンピューティング・システムのコンポーネント(たとえば、ユーザ・デバイス、DST実行ユニット、またはDST処理ユニット、あるいはそれらの組合せ)を追加/削除すること、またはDST実行ユニットに対するDTP認証証明を確立すること、あるいはそれらの組合せを含む。
記憶されたデータに対する分散タスク処理をサポートするために、分散コンピューティング・システム10は、2つの主要な動作、すなわち、DST(散在ストレージおよび/またはタスク)管理、ならびに記憶されたデータに対するDST実行を有する。記憶されたデータに対するDST実行に関して、第2のタイプのユーザ・デバイス14が、DSTNモジュール22によって実行されるタスク要求38を有する場合、ユーザ・デバイス14は、そのインターフェース30を介してタスク要求38をDST処理ユニット16に送る。記憶されたデータに対するDST実行の例については、図27〜図39を参照してより詳細に論じる。DST管理に関して、それは、受け取られたデータに対する分散タスク処理をサポートするためのDST管理と実質的に同様である。
図2は、コンピューティング・コア26の実施形態の概略ブロック図であり、コンピューティング・コア26は、処理モジュール50、メモリ・コントローラ52、メイン・メモリ54、ビデオ・グラフィック処理ユニット55、入力/出力(IO)コントローラ56、周辺コンポーネント相互接続(PCI)インターフェース58、IOインターフェース・モジュール60、少なくとも1つのIOデバイス・インターフェース・モジュール62、読出し専用メモリ(ROM)基本入出力システム(BIOS)64、および1つまたは複数のメモリ・インターフェース・モジュールを含む。1つまたは複数のメモリ・インターフェース・モジュールは、ユニバーサル・シリアル・バス(USB)インターフェース・モジュール66、ホスト・バス・アダプタ(HBA)インターフェース・モジュール68、ネットワーク・インターフェース・モジュール70、フラッシュ・インターフェース・モジュール72、ハード・ドライブ・インターフェース・モジュール74、およびDSTNインターフェース・モジュール76のうちの1つまたは複数を含む。
DSTNインターフェース・モジュール76は、従来のオペレーティング・システム(OS)ファイル・システム・インターフェース(たとえば、ネットワーク・ファイル・システム(NFS)、フラッシュ・ファイル・システム(FFS)、ディスク・ファイル・システム(DFS)、ファイル転送プロトコル(FTP)、ウェブベースの分散オーサリングおよびバージョン管理(WebDAV)など)、またはブロック・メモリ・インターフェース(たとえば、スモール・コンピュータ・システム・インターフェース(SCSI)、インターネット・スモール・コンピュータ・システム・インターフェース(iSCSI)など)、あるいはその両方を模倣するように機能する。DSTNインターフェース・モジュール76またはネットワークインターフェース・モジュール70あるいはその両方は、図1のユーザ・デバイス14のインターフェース30として機能することができる。さらに、IOデバイス・インターフェース・モジュール62またはメモリ・インターフェース・モジュールあるいはその両方は、集合的または個別にIOポートと呼ばれ得ることに留意されたい。
図3は、散在ストレージおよびタスク処理動作を実行する分散コンピューティング・システムの例の図である。分散コンピューティング・システムは、(図1のユーザ・デバイス14またはDST処理ユニット16あるいはその両方の中にあり得る)DST(散在ストレージおよび/またはタスク)クライアント・モジュール34、ネットワーク24、(図1のDSTNモジュール22の少なくとも部分を形成する)図1の2つ以上のDST実行ユニット36を含む複数のDST実行ユニット1〜n、DST管理モジュール(図示せず)、ならびにDST整合性検証モジュール(図示せず)を含む。DSTクライアント・モジュール34は、アウトバウンドDST処理部80およびインバウンドDST処理部82を含む。DST実行ユニット1〜nのそれぞれは、コントローラ86、処理モジュール84、メモリ88、DT(分散タスク)実行モジュール90、およびDSTクライアント・モジュール34を含む。
動作の例として、DSTクライアント・モジュール34は、データ92、およびデータ92に対して実行されるべき1つまたは複数のタスク94を受け取る。データ92は、任意のサイズおよび任意のコンテンツを有してよく、サイズ(たとえば数テラバイトより大きい)、コンテンツ(たとえばセキュア・データなど)、またはタスク(たとえばMIPS集約)、あるいはそれらの組合せに応じて、データに対するタスクの分散処理が望ましい。たとえば、データ92は、1つもしくは複数のデジタル書籍、会社の電子メールのコピー、大規模なインターネット検索、ビデオ・セキュリティ・ファイル、1つもしくは複数の娯楽ビデオ・ファイル(たとえば、テレビ番組、映画など)、データ・ファイル、または任意の他の大量の(たとえば数テラバイトより大きい)データ、あるいはそれらの組合せであり得る。
DSTクライアント・モジュール34内で、アウトバウンドDST処理部80がデータ92およびタスク94を受け取る。アウトバウンドDST処理部80は、データ92を処理してスライス・グルーピング96を作成する。そのような処理の例として、アウトバウンドDST処理部80は、データ92をパーティション化して複数のデータ・パーティションにする。各データ・パーティションについて、アウトバウンドDST処理部80は、データ・パーティションを散在ストレージ(DS)エラー符号化して符号化されたデータ・スライスを作成し、符号化されたデータ・スライスをグループ化してスライス・グルーピング96にする。加えて、アウトバウンドDST処理部80は、タスク94をパーティション化して部分的タスク98にする。ここで、部分的タスク98の数は、スライス・グルーピング96の数に対応し得る。
次いで、アウトバウンドDST処理部80は、スライス・グルーピング96および部分的タスク98を、ネットワーク24を介して図1のDSTNモジュール22のDST実行ユニット1〜nに送る。たとえば、アウトバウンドDST処理部80は、スライス・グループ1および部分的タスク1をDST実行ユニット1に送る。別の例として、アウトバウンドDST処理部80は、スライス・グループ#nおよび部分的タスク#nをDST実行ユニット#nに送る。
各DST実行ユニットは、そのスライス・グループ96に対してその部分的タスク98を実行して部分的結果102を作成する。たとえば、DST実行ユニット#1は、スライス・グループ#1に対して部分的タスク#1を実行して結果として部分的結果#1を作成する。より具体的な例として、スライス・グループ#1は、デジタル書籍のシリーズのデータ・パーティションに対応し、部分的タスク#1は、特定のフレーズを求めて検索し、どこでフレーズが発見されたかを記録し、フレーズのカウントを確定することに対応する。このより具体的な例では、部分的結果#1は、どこでフレーズが発見されたかに関する情報を含み、またフレーズのカウントを含む。
それぞれの部分的結果102の生成が完了すると、DST実行ユニットは、ネットワーク24を介して、それらの部分的結果102を、DSTクライアント・モジュール34のインバウンドDST処理部82に送る。インバウンドDST処理部82は、受け取った部分的結果102を処理して結果104を作成する。上記の段落の具体的な例を続けると、インバウンドDST処理部82は、DST実行ユニット36のそれぞれからのフレーズのカウントを組み合わせて、合計フレーズ・カウントを作成する。加えて、インバウンドDST処理部82は、それぞれのデータ・パーティション内の各DST実行ユニット36からの「どこでフレーズが発見されたか」情報を組み合わせて、デジタル書籍のシリーズについての「どこでフレーズが発見されたか」情報を作成する。
動作の別の例では、DSTクライアント・モジュール34は、DST実行ユニット36のメモリ(たとえば、DSTNモジュールのメモリ)内の記憶されたデータの取出しを要求する。この例では、タスク94は、DSTNモジュールのメモリに記憶されたデータを取り出すことである。したがって、アウトバウンドDST処理部80は、タスク94を複数の部分的タスク98に変換し、部分的タスク98をそれぞれのDST実行ユニット1〜nに送る。
記憶されたデータを取り出す部分的タスク98に応答して、DST実行ユニット36は、対応する符号化されたデータ・スライス100を識別し、それらを取り出す。たとえば、DST実行ユニット#1は、部分的タスク#1を受け取り、それに応答して取り出されるスライス#1を取り出す。DST実行ユニット36は、それぞれの取り出されたスライス100をネットワーク24を介してインバウンドDST処理部82に送る。
インバウンドDST処理部82は、取り出されたスライス100をデータ92に変換する。たとえば、インバウンドDST処理部82は、取り出されたスライス100をグルーピング解除して、データ・パーティションごとの符号化されたスライスを作成する。次いで、インバウンドDST処理部82は、データ・パーティションごとの符号化されたスライスをDSエラー復号(DS error decode)して、データ・パーティションを作成する。インバウンドDST処理部82は、データ・パーティションをパーティション解除してデータ92を再捕捉する。
図4は、図1のDSTNモジュール22(たとえば、複数のn個のDST実行ユニット36)にネットワーク24を介して結合された図1のDSTクライアント・モジュール34のアウトバウンド散在ストレージおよび/またはタスク(DST)処理部80の実施形態の概略ブロック図である。アウトバウンドDST処理部80は、データ・パーティション化モジュール110、散在ストレージ(DS)エラー符号化モジュール112、グルーピング選択モジュール114、制御モジュール116、および分散タスク制御モジュール118を含む。
動作の例として、データ・パーティション化モジュール110は、データ92をパーティション化して複数のデータ・パーティション120にする。パーティションの数およびパーティションのサイズは、データ92(たとえば、そのサイズ、そのコンテンツなど)、実行される対応するタスク94(たとえば、単純な、複雑な、単一のステップ、複数のステップなど)、DS符号化パラメータ(たとえば、ピラー幅、復号閾値、書込み閾値、セグメント・セキュリティ・パラメータ、スライス・セキュリティ・パラメータなど)、DST実行ユニット36の性能(たとえば、処理リソース、処理リソースの可用性など)、または、ユーザ、システム管理者、もしくは他のオペレータ(人間もしくは自動)によって行われ得る入力、あるいはそれらの組合せに基づいて、制御160を介して制御モジュール116によって選択することができる。たとえば、データ・パーティション化モジュール110は、データ92(たとえば、100テラバイト)をパーティション化して、各々のサイズが1ギガバイトの100,000個のデータ・セグメントにする。あるいは、データ・パーティション化モジュール110は、データ・セグメントのいくつかが異なるサイズ、同じサイズ、またはそれらの組合せである複数のデータ・セグメントになるように、データ92をパーティション化する。
DSエラー符号化モジュール112は、直列様式または並列様式あるいはその組合せでデータ・パーティション120を受け取る。各データ・パーティション120について、DSエラー符号化モジュール112は、制御モジュール116からの制御情報160に従って、データ・パーティション120をDSエラー符号化(DS error encode)して、符号化されたデータ・スライス122を作成する。DSエラー符号化は、データ・パーティションをデータ・セグメントにセグメント化すること、セグメント・セキュリティ処理(たとえば、暗号化、圧縮、ウォーターマーキング、整合性チェック(たとえばCRC)など)、エラー符号化、スライス化、またはスライス単位セキュリティ処理(たとえば暗号化、圧縮、ウォーターマーキング、整合性チェック(たとえばCRC)など)、あるいはそれらの組合せを含む。制御情報160は、所与のデータ・パーティションについてDSエラー符号化のどのステップがアクティブであるかを示し、アクティブなステップについては、そのステップに対するパラメータを示す。たとえば、制御情報160は、エラー符号化がアクティブであることを示し、エラー符号化パラメータ(たとえば、ピラー幅、復号閾値、書込み閾値、読取り閾値、エラー符号化のタイプなど)を含む。
グルーピング選択モジュール114は、データ・パーティションの符号化されたスライス122を、1セットのスライス・グルーピング96にグループ化する。スライス・グルーピングの数は、特定のタスク94について識別されたDST実行ユニット36の数に対応する。たとえば、5つのDST実行ユニット36が特定のタスク94について識別された場合、グループ選択モジュールは、データ・パーティションの符号化されたスライス122をグループ化して5つのスライス・グルーピング96にする。グルーピング選択モジュール114は、スライス・グルーピング96をネットワーク24を介して対応するDST実行ユニット36に出力する。
分散タスク制御モジュール118は、タスク94を受け取り、タスク94を部分的タスク98のセットに変換する。たとえば、分散タスク制御モジュール118は、データ(たとえば書籍のシリーズ)内のどこでフレーズが出現するか、およびデータ内のフレーズの使用の総数を見出すためのタスクを受け取る。この例では、分散タスク制御モジュール118は、各DST実行ユニット36についてタスク94を複製して部分的タスク98を作成する。別の例では、分散タスク制御モジュール118は、データ内のどこで第1のフレーズが出現するか、データ内のどこで第2のフレーズが出現するか、およびデータ内の各フレーズの使用の総数を見出すためのタスクを受け取る。この例では、分散タスク制御モジュール118は、第1のフレーズを見つけ出しカウントするための第1のセットの部分的タスク98、および第2のフレーズを見つけ出しカウントするための第2のセットの部分的タスクを生成する。分散タスク制御モジュール118は、各DST実行ユニット36に、それぞれの第1または第2あるいはその両方の部分的タスク98を送る。
図5は、ステップ126から開始するアウトバウンド散在ストレージおよびタスク(DST)処理のための方法の例の論理図であり、ステップ126では、DSTクライアント・モジュールがデータおよび1つまたは複数の対応するタスクを受け取る。方法はステップ128に続き、このステップでは、DSTクライアント・モジュールが、1つまたは複数のデータ・パーティションについてのタスクをサポートするためのDSTユニットの数を決定する。たとえば、DSTクライアント・モジュールは、データのサイズ、要求されたタスク、データのコンテンツ、所定の数(たとえば、ユーザに指示された数、システム管理者に決定された数など)、使用可能なDSTユニット、DSTユニットの性能、またはデータの分散タスク処理に関する任意の他の因子、あるいはそれらの組合せに基づいて、タスクをサポートするためのDSTユニットの数を決定することができる。DSTクライアント・モジュールは、各データ・パーティションに対して同じDSTユニットを選択してもよく、各データ・パーティションに対して異なるDSTユニットを選択してもよく、またはそれらの組合せを選択してもよい。
方法はステップ130に続き、このステップでは、DSTクライアント・モジュールが、分散タスク処理のために選択されたDSTの数に基づいて、データの処理パラメータを決定する。処理パラメータは、データ・パーティション化情報、DS符号化パラメータ、またはスライス・グルーピング情報、あるいはそれらの組合せを含む。データ・パーティション化情報は、データ・パーティションの数、各データ・パーティションのサイズ、またはデータ・パーティションの編成(たとえば、パーティション内のデータ・ブロックの数、データ・ブロックのサイズ、およびデータ・ブロックの配列)、あるいはそれらの組合せを含む。DS符号化パラメータは、セグメント化情報、セグメント・セキュリティ情報、エラー符号化情報(たとえば、ピラー幅、復号閾値、書込み閾値、読取り閾値、生成行列のうちの1つまたは複数を含む散在ストレージ・エラー符号化機能パラメータ)、スライス化情報、またはスライス単位セキュリティ情報、あるいはそれらの組合せを含む。スライス・グルーピング情報は、選択されたDSTユニットに対して符号化されたデータ・スライスをどのようにグループにするかに関する情報を含む。具体的な例として、DSTクライアント・モジュールが、タスクをサポートするために5つのDSTユニットが必要とされると決定した場合、それは、エラー符号化パラメータが5のピラー幅および3の復号閾値を含むと決定する。
方法はステップ132に続き、このステップでは、DSTクライアント・モジュールが、選択されたDSTユニットおよびデータ処理パラメータに基づいてタスク・パーティション化情報(たとえば、どのようにタスクをパーティション化するか)を決定する。データ処理パラメータは、処理パラメータおよびDSTユニット性能情報を含む。DSTユニット性能情報は、DT(分散タスク)実行ユニットの数、各DT実行ユニットの実行性能(たとえば、MIPS性能、処理リソース(たとえば、マイクロプロセッサ、CPU、デジタル・シグナル・プロセッサ、コプロセッサ、マイクロコントローラ、算術論理回路、または他のアナログまたはデジタルあるいはその両方の処理回路、あるいはそれらの組合せの量および性能))、処理リソースの可用性、メモリ情報(たとえば、タイプ、サイズ、可用性など)、または1つもしくは複数のタスクの実行に関する任意の情報、あるいはそれらの組合せを含む。
方法はステップ134に続き、このステップでは、DSTクライアント・モジュールが、処理パラメータに従ってデータを処理してスライス・グルーピングを作成する。方法はステップ136に続き、このステップでは、DSTクライアント・モジュールが、タスク・パーティション化情報に基づいてタスクをパーティション化して部分的タスクのセットを作成する。方法はステップ138に続き、このステップでは、DSTクライアント・モジュールが、スライス・グルーピングおよび対応する部分的タスクをそれぞれのDSTユニットに送る。
図6は、アウトバウンド散在ストレージおよびタスク(DST)処理部の散在ストレージ(DS)エラー符号化モジュール112の実施形態の概略ブロック図である。DSエラー符号化モジュール112は、セグメント処理モジュール142、セグメント・セキュリティ処理モジュール144、エラー符号化モジュール146、スライス化モジュール148、およびスライス単位セキュリティ処理モジュール150を含む。これらのモジュールのそれぞれは制御モジュール116に結合されて、それから制御情報160を受け取る。
動作の例として、セグメント処理モジュール142は、データ・パーティション化モジュールからデータ・パーティション120を受け取り、制御モジュール116から制御情報160としてセグメント化情報を受け取る。セグメント化情報は、セグメント処理モジュール142がデータ・パーティション120をどのようにセグメント化するかを示す。たとえば、セグメント化情報は、エラー符号化方式の復号閾値に基づいていくつの行にデータをセグメント化するかを示し、データ・パーティション120内のデータ・ブロックの数およびサイズに基づいていくつの列にデータをセグメント化するかを示し、また、いくつの列をデータ・セグメント152に含めるかを示す。セグメント処理モジュール142は、セグメント化情報に従ってデータ120をセグメント化してデータ・セグメント152にする。
セグメント・セキュリティ処理モジュール144は、制御モジュール116によって有効にされたとき、制御モジュール116から制御情報160として受け取ったセグメント・セキュリティ情報に基づいて、データ・セグメント152をセキュアにする。セグメント・セキュリティ情報は、データ圧縮、暗号化、ウォーターマーキング、整合性チェック(たとえば周期的冗長検査(CRC)など)、または任意の他のタイプのデジタル・セキュリティ、あるいはそれらの組合せを含む。たとえば、セグメント・セキュリティ処理モジュール144は、有効にされると、データ・セグメント152を圧縮し、圧縮されたデータ・セグメントを暗号化し、暗号化されたデータ・セグメントに対するCRC値を生成して、セキュアなデータ・セグメント154を作成することができる。セグメント・セキュリティ処理モジュール144が有効にされない場合、それは、データ・セグメント152をエラー符号化モジュール146に渡し、またはバイパスされてデータ・セグメント152がエラー符号化モジュール146に提供される。
エラー符号化モジュール146は、制御モジュール116から制御情報160として受け取ったエラー訂正符号化パラメータに従って、セキュア・データ・セグメント154を符号化する。エラー訂正符号化パラメータ(たとえば、散在ストレージ・エラー・コード化パラメータとも呼ばれる)は、エラー訂正符号化方式(たとえば、順方向エラー訂正アルゴリズム、リードソロモンベースのアルゴリズム、オンライン・コード化アルゴリズム、情報伝播アルゴリズムなど)、ピラー幅、復号閾値、読取り閾値、書込み閾値などを識別することを含む。たとえば、エラー訂正符号化パラメータは、特定のエラー訂正符号化方式を識別し、5のピラー幅を指定し、3の復号閾値を指定する。これらのパラメータから、エラー符号化モジュール146は、データ・セグメント154を符号化して、符号化されたデータ・セグメント156を作成する。
スライス化モジュール148は、制御情報160として受け取ったエラー訂正符号化パラメータのピラー幅に従って、符号化されたデータ・セグメント156をスライス化する。たとえば、ピラー幅が5である場合、スライス化モジュール148は、符号化されたデータ・セグメント156をスライス化して、5つの符号化されたデータ・スライスのセットにする。したがって、所与のデータ・パーティションに対する複数の符号化されたデータ・セグメント156について、スライス化モジュールは、複数のセットの符号化されたデータ・スライス158を出力する。
スライス単位セキュリティ処理モジュール150は、制御モジュール116によって有効にされたとき、制御モジュール116から制御情報160として受け取ったスライス・セキュリティ情報に基づいて、各符号化されたデータ・スライス158をセキュアにする。スライス・セキュリティ情報は、データ圧縮、暗号化、ウォーターマーキング、整合性チェック(たとえば、CRCなど)、または任意の他のタイプのデジタル・セキュリティ、あるいはそれらの組合せを含む。たとえば、スライス単位セキュリティ処理モジュール150は、有効にされると、符号化されたデータ・スライス158を圧縮し、圧縮された符号化データ・スライスを暗号化し、暗号化された符号化データ・スライスに対するCRC値を生成して、セキュアな符号化データ・スライス122を作成する。スライス単位セキュリティ処理モジュール150が有効にされない場合、それは符号化されたデータ・スライス158を通過させ、またはバイパスされて、符号化されたデータ・スライス158がDSエラー符号化モジュール112の出力になる。制御モジュール116が省略されてもよく、各モジュールがそれ自体のパラメータを記憶することに留意されたい。
図7は、散在ストレージ(DS)エラー符号化モジュールのセグメント処理の例の図である。この例では、セグメント処理モジュール142は、45個のデータ・ブロック(たとえば、d1〜d45)を含むデータ・パーティション120を受け取り、制御モジュールからセグメント化情報(すなわち制御情報160)を受け取り、制御情報160に従ってデータ・パーティション120をセグメント化してデータ・セグメント152を作成する。各データ・ブロックは、他のデータ・ブロックと同じサイズまたは異なるサイズであり得る。加えて、各データ・ブロックのサイズは、数バイトから数メガバイトのデータであってよい。前述のように、セグメント化情報は、データ・パーティションをいくつの行にセグメント化するか、データ・パーティションをいくつの列にセグメント化するか、およびデータ・セグメントにいくつの列を含めるかを示す。
この例では、エラー符号化方式の復号閾値は3であり、データ・パーティションを分割する行の数は3である。各行の列の数は15に設定され、これはデータ・ブロックの数およびサイズに基づく。データ・パーティションのデータ・ブロックは行および列に順に配列される(すなわち、第1の行は最初の15個のデータ・ブロックを含み、第2の行は次の15個のデータ・ブロックを含み、第3の行は最後の15個のデータ・ブロックを含む)。
データ・ブロックが望ましい順に配列された状態で、それらはセグメント化情報に基づいてデータ・セグメントに分割される。この例では、データ・パーティションは8つのデータ・セグメントに分割され、最初の7つは3行で2列を含み、最後は3行で1列を含む。8個のデータ・セグメントの第1の行は、最初の15個のデータ・ブロックの順序になり、8個のデータ・セグメントの第2の行は、次の15個のデータ・ブロックの順序になり、8個のデータ・セグメントの第3の行は、最後の15個のデータ・ブロックの順序になることに留意されたい。データ・ブロックの数、データ・ブロックのセグメントへのグループ化、およびデータ・ブロックのサイズは、望ましい分散タスク処理機能に対応して異なり得ることに留意されたい。
図8は、図7のデータ・セグメントを処理する分散エラー符号化のエラー符号化およびスライス化処理の例の図である。この例では、データ・セグメント1は、3つの行を含み、各行は、符号化のための1つのワードとして扱われる。したがって、データ・セグメント1は、符号化のための3つのワード、すなわち、データ・ブロックd1およびd2を含むワード1、データ・ブロックd16およびd17を含むワード2、ならびにデータ・ブロックd31およびd32を含むワード3を含む。データ・セグメント2〜7のそれぞれは3つのワードを含み、各ワードは2つのデータ・ブロックを含む。データ・セグメント8は3つのワードを含み、各ワードは単一のデータ・ブロック(たとえば、d15、d30、およびd45)を含む。
動作において、エラー符号化モジュール146およびスライス化モジュール148は、制御情報160としてのエラー訂正符号化パラメータに従って、各データ・セグメントを符号化されたデータ・スライスのセットに変換する。より具体的には、エラー訂正符号化パラメータが、ユニティ行列(unity matrix)リードソロモンベースの符号化アルゴリズム、5つのピラー、および3の復号閾値を示すとき、データ・セグメントに対する符号化されたデータ・スライスのセットの最初の3つの符号化されたデータ・スライスが、データ・セグメントの対応するワードと実質的に同様である。たとえば、ユニティ行列リードソロモンベースの符号化アルゴリズムがデータ・セグメント1に適用されると、(たとえばデータ・セグメント1に対応する)符号化されたデータ・スライスの第1のセットの第1の符号化されたデータ・スライスのコンテンツ(DS1_d1&2)は、第1のワードのコンテンツ(たとえばd1&d2)と実質的に同様であり、符号化されたデータ・スライスの第1のセットの第2の符号化されたデータ・スライスのコンテンツ(DS1_d16&17)は、第2のワードのコンテンツ(たとえばd16&d17)と実質的に同様であり、符号化されたデータ・スライスの第1のセットの第3の符号化されたデータ・スライスのコンテンツ(DS1_d31&32)は、第3のワードのコンテンツ(たとえばd31&d32)と実質的に同様である。
符号化されたデータ・スライスの第1のセットの第4および第5の符号化されたデータ・スライスのコンテンツ(たとえばES1_1およびES1_2)は、第1のデータ・セグメントの第1〜第3のワードに基づくエラー訂正データを含む。このような符号化およびスライス化方式を用いて、5つの符号化されたデータ・スライスのうちの任意の3つを取り出すことにより、データ・セグメントを正確に再構成することが可能になる。
データ・セグメント2〜7の符号化およびスライスは、データ・セグメント1の符号化されたデータ・スライスのセットと同様の符号化されたデータ・スライスのセットを生じさせる。たとえば、符号化されたデータ・スライスの第2のセットの第1の符号化されたデータ・スライスのコンテンツ(DS2_d3&4)は、第1のワードのコンテンツ(たとえばd3&d4)と実質的に同様であり、符号化されたデータ・スライスの第2のセットの第2の符号化されたデータ・スライスのコンテンツ(DS2_d18&19)は、第2のワードのコンテンツ(たとえばd18&d19)と実質的に同様であり、符号化されたデータ・スライスの第2のセットの第3の符号化されたデータ・スライスのコンテンツ(DS2_d33&34)は、第3のワードのコンテンツ(たとえばd33&d34)と実質的に同様である。符号化されたデータ・スライスの第2のセットの第4および第5の符号化されたデータ・スライスのコンテンツ(たとえばES1_1およびES1_2)は、第2のデータ・セグメントの第1〜第3のワードに基づくエラー訂正データを含む。
図9は、制御モジュールからの制御情報160としてのグループ選択情報に従うアウトバウンド散在ストレージおよびタスク(DST)処理のグルーピング選択処理の例の図である。データ・パーティション122の符号化されたスライスは、制御情報160に従ってグループ化されてスライス・グルーピング96が作成される。この例では、グルーピング選択モジュール114は、符号化されたデータ・スライスを5つのスライス・グルーピング(たとえば、散在ストレージおよびタスク・ネットワーク(DSTN)モジュールの各DST実行ユニットに対して1つ)に編成する。具体的な例として、グルーピング選択モジュール114は、DST実行ユニット#1に対する第1のスライス・グルーピングを作成し、このグルーピングは、符号化されたスライスのセットのそれぞれの第1の符号化されたスライスを含む。したがって、第1のDST実行ユニットは、データ・ブロック1〜15に対応する符号化されたデータ・スライス(たとえば、連続したデータの符号化されたデータ・スライス)を受け取る。
グルーピング選択モジュール114はまた、DST実行ユニット#2に対する第2のスライス・グルーピングを作成し、このグルーピングは、符号化されたスライスのセットのそれぞれの第2の符号化されたスライスを含む。したがって、第2のDST実行ユニットは、データ・ブロック16〜30に対応する符号化されたデータ・スライスを受け取る。グルーピング選択モジュール114はさらに、DST実行ユニット#3に対する第3のスライス・グルーピングを作成し、このグルーピングは、符号化されたスライスのセットのそれぞれの第3の符号化されたスライスを含む。したがって、第3のDST実行ユニットは、データ・ブロック31〜45に対応する符号化されたデータ・スライスを受け取る。
グルーピング選択モジュール114は、DST実行ユニット#4に対する第4のスライス・グルーピングを作成し、このグルーピングは、符号化されたスライスのセットのそれぞれの第4の符号化されたスライスを含む。したがって、第4のDST実行ユニットは、第1のエラー符号化情報に対応する符号化されたデータ・スライス(たとえば、エラー・コード化(EC)データの符号化されたデータ・スライス)を受け取る。グルーピング選択モジュール114はさらに、DST実行ユニット#5に対する第5のスライス・グルーピングを作成し、このグルーピングは、符号化されたスライスのセットのそれぞれの第5の符号化されたスライスを含む。したがって、第5のDST実行ユニットは、第2のエラー符号化情報に対応する符号化されたデータ・スライスを受け取る。
図10は、上述の図を詳しく説明する、データ92をスライス・グループに変換する例の図である。図示されるように、データ92は、パーティション化機能164に従って複数のデータ・パーティション(1〜x、ここでxは4より大きい整数)にパーティション化される。各データ・パーティション(またはデータのチャンクセット)は、先に論じられたように、符号化およびグループ化機能166によって符号化されスライス・グルーピングにグループ化される。所与のデータ・パーティションに関して、スライス・グルーピングが散在ストレージおよびタスク(DST)実行ユニットに送られる。データ・パーティションごとに、DST実行ユニットへのスライス・グルーピングの順序付けが変わり得る。
たとえば、データ・パーティション#1のスライス・グルーピングは、第1のDST実行部が、第1のデータ・パーティションの第1の連続データ・チャンクに対応する、符号化されたデータ・スライスのセットのそれぞれの第1の符号化されたデータ・スライスを受け取り(たとえば図9参照)、第2のDST実行部が、第1のデータ・パーティションの第2の連続データ・チャンクに対応する、符号化されたデータ・スライスのセットのそれぞれの第2の符号化されたデータ・スライスを受け取るように、DST実行ユニットに送られる。
第2のデータ・パーティションに関して、スライス・グルーピングは、第1のデータ・パーティションに関して行われたのと異なる順序でDST実行ユニットに送られ得る。たとえば、第2のデータ・パーティションの第1のスライス・グルーピング(たとえばスライス・グループ2_1)は第2のDST実行ユニットに送られ、第2のデータ・パーティションの第2のスライス・グルーピング(たとえばスライス・グループ2_2)は第3のDST実行ユニットに送られ、第2のデータ・パーティションの第3のスライス・グルーピング(たとえばスライス・グループ2_3)は第4のDST実行ユニットに送られ、第2のデータ・パーティションの第4のスライス・グルーピング(たとえば、第1のエラー・コード化情報を含むスライス・グループ2_4)は第5のDST実行ユニットに送られ、第2のデータ・パーティションの第5のスライス・グルーピング(たとえば、第2のエラー・コード化情報を含むスライス・グループ2_5)は第1のDST実行ユニットに送られる。
スライス・グルーピングをDST実行ユニットのセットに送るパターンは、データ・パーティションごとに、予測パターンまたはランダム・パターンあるいはその組合せで変わり得る。加えて、データ・パーティションごとに、DST実行ユニットのセットが変更され得る。たとえば、第1のデータ・パーティションについてDST実行ユニット1〜5が使用され、第2のデータ・パーティションについてDST実行ユニット6〜10が使用され、第3のデータ・パーティションについてDST実行ユニット3〜7が使用されるなどにしてもよい。また、図示されているように、データ・パーティションのスライス・グルーピングと共に、タスクが、DST実行ユニットに送られる部分的タスクに分割される。
図11は、DST(散在ストレージおよび/またはタスク)実行ユニットの実施形態の概略ブロック図であり、DST実行ユニットは、インターフェース169、コントローラ86、メモリ88、1つまたは複数のDT(分散タスク)実行モジュール90、およびDSTクライアント・モジュール34を含む。メモリ88は、かなりの数の符号化されたデータ・スライス(たとえば、数千から数億のスライス)を記憶するために十分なサイズがあり、1つもしくは複数のハード・ドライブまたは1つもしくは複数のソリッドステート・メモリ・デバイス(たとえば、フラッシュ・メモリ、DRAMなど)あるいはその両方を含み得る。
スライス・グループを記憶する例において、DST実行モジュールは、インターフェース169を介してスライス・グルーピング96(たとえばスライス・グループ#1)を受け取る。スライス・グルーピング96は、パーティションごとに、連続データの符号化されたデータ・スライスまたはエラー・コード化(EC)データの符号化されたデータ・スライスを含む。スライス・グループ#1について、DST実行モジュールは、パーティション#1および#x(ならびに場合によっては3とxの間の他のパーティション)の連続データの符号化されたデータ・スライスを受け取り、また、パーティション#2および#3(ならびに場合によっては3とxの間の他のパーティション)のECデータの符号化されたデータ・スライスを受け取る。連続データの符号化されたデータ・スライス、およびエラー・コード化(EC)データの符号化されたデータ・スライスの例については、図9を参照して論じられている。メモリ88は、それがコントローラ86から受け取ったメモリ制御情報174に従って、スライス・グルーピング96の符号化されたデータ・スライスを記憶する。
コントローラ86(たとえば、処理モジュール、CPUなど)は、メモリ制御情報174を生成し、その生成は、部分的タスク98、および分散コンピューティング情報(たとえば、ユーザ情報(たとえば、ユーザID、分散コンピューティング許可、データアクセス許可など)、格納域情報(たとえば、ユーザに割り当てられた仮想メモリ、ユーザ・グループ、タスク処理のための一時記憶など)、タスク妥当性確認情報など)に基づく。たとえば、コントローラ86は、分散コンピューティング情報を考慮して部分的タスク98を解釈して、要求元がタスク98を実行することを承認されるか、データにアクセスすることを承認されるか、またはこの特定のデータに対してタスクを実行することを承認されるか、あるいはそれらの組合せを決定する。要求元が承認された場合、コントローラ86は、タスク98または別の入力あるいはその両方に基づいて、スライス・グルーピング96の符号化されたデータ・スライスが一時的に記憶されるべきかあるいは永続的に記憶されるべきかを決定する。上記に基づいて、コントローラ86は、スライス・グルーピング96の符号化されたデータ・スライスをメモリ88に書き込むため、およびスライス・グルーピング96が一時的に記憶されるかあるいは永続的に記憶されるかを示すためにメモリ制御情報174を生成する。
スライス・グルーピング96がメモリ88に記憶されて、コントローラ86は部分的タスク98の実行を推進する。一例では、コントローラ86は、DT実行モジュール90の性能を考慮して部分的タスク98を解釈する。そうした性能は、MIPS性能、処理リソース(たとえば、マイクロプロセッサ、CPU、デジタル・シグナル・プロセッサ、コプロセッサ、マイクロコントローラ、算術論理回路、または任意の他のアナログまたはデジタルあるいはその両方の処理回路、あるいはそれらの組合せの量および性能)、処理リソースの可用性などのうちの1つまたは複数を含む。コントローラ86は、DT実行モジュール90が十分な性能を有すると決定した場合、タスク制御情報176を生成する。
タスク制御情報176は、包括的命令(たとえば、記憶されたスライス・グルーピングに対してタスクを実行する)または一連の操作コードであり得る。前者の例では、DT実行モジュール90が、望ましいタスク98を実行するように特に構成された(固定またはプログラムされた)コプロセッサ機能を含む。後者の例では、DT実行モジュール90が、特定のタスク98に対応するアルゴリズムをコントローラが記憶する汎用プロセッサ・トポロジを含む。この例では、コントローラ86は、アルゴリズムの操作コード(たとえば、アセンブリ言語、プログラミング言語のソース・コード、オブジェクトコードなど)を実行のためにDT実行モジュール90に提供する。
タスク98の性質に応じて、DT実行モジュール90は、メモリ88にまたはDT実行モジュール90内のキャッシュ・メモリ(図示せず)に記憶される、中間の部分的結果102を生成することができる。いずれの場合も、DT実行モジュール90が部分的タスク98の実行を完了したとき、それが1つまたは複数の部分的結果102を出力する。その部分的結果102もメモリ88に記憶され得る。
コントローラ86が、DT実行モジュール90の性能が部分的タスク98をサポートできるかどうかを解釈しているとき、コントローラ86が、DT実行モジュール90がタスク98を十分にサポートできない(たとえば、適切なリソースを持っていない、十分な使用可能なリソースを持っていない、使用可能なリソースが遅すぎるなど)と決定した場合、それは、部分的タスク98が完全にオフロードされるべきかそれとも部分的にオフロードされるべきかを決定する。
コントローラ86が、部分的タスク98が完全にオフロードされるべきと決定した場合、それは、DST制御情報178を生成し、DSTクライアント・モジュール34に提供する。DST制御情報178は、部分的タスク98、スライス・グルーピング96に関するメモリ・ストレージ情報、および分散命令を含む。分散命令は、部分的タスク98をサブ部分的タスク172に分割し、スライス・グルーピング96をサブ・スライス・グルーピング170に分割し、他のDST実行ユニットを識別するように、DSTクライアント・モジュール34に命令する。DSTクライアント・モジュール34は、図3〜図10のDSTクライアント・モジュール34と同様に機能して、分散命令に従ってサブ部分的タスク172およびサブ・スライス・グルーピング170を生成する。
DSTクライアント・モジュール34は、タスクがオフロードされた先のDST実行ユニットからインターフェース169を介してDSTフィードバック168(たとえばサブ部分的結果)を受け取る。DSTクライアント・モジュール34は、サブ部分的結果をDST実行ユニットに提供し、DST実行ユニットが、サブ部分的結果を処理して部分的結果102を生成する。
コントローラ86が、部分的タスク98が部分的にオフロードされるべきと決定した場合、それは、タスク98またはスライス・グルーピング96あるいはその両方のどの部分がローカルに処理されるべきか、およびどの部分がオフロードされるべきかを決定する。ローカルに処理されている部分については、コントローラ86は、先に論じられたようにタスク制御情報176を生成する。オフロードされている部分については、コントローラ86は、先に論じられたようにDST制御情報178を生成する。
DSTクライアント・モジュール34が、タスクの一部分がオフロードされた先のDST実行ユニットからDSTフィードバック168(たとえばサブ部分的結果)を受け取ると、それは、サブ部分的結果をDT実行モジュール90に提供する。DT実行モジュール90は、そのサブ部分的結果を、それが作り出したサブ部分的結果と共に処理して、部分的結果102を作成する。
さらに、メモリ88はDT実行モジュール90が部分的結果102または結果104あるいはその両方をメモリ88に記憶する場合、記憶されたスライス100、記憶された結果104、部分的結果102のうちの1つまたは複数を取り出すために利用され得る。たとえば、部分的タスク98が取出し要求を含むとき、コントローラ86は、メモリ制御174をメモリ88に出力して、スライス100または結果104あるいはその両方の取出しを推進する。
図12は、散在ストレージおよびタスク(DST)実行ユニットの動作の例の概略ブロック図であり、DSTユニットは、符号化されたデータ・スライスを記憶し、それに対するタスクを実行する。スライス・グルーピング1のパーティション1の符号化されたデータ・スライスを記憶するために、コントローラ86は、メモリ制御情報174として書込みコマンドを生成して、符号化されたスライスがメモリ88内の(たとえば、一時的または永続的な)望ましい位置に記憶されるようにする。
符号化されたスライスが記憶されると、コントローラ86は、タスク制御情報176を分散タスク(DT)実行モジュール90に提供する。タスク制御情報176に従ってタスクを実行する第1のステップとして、DT実行モジュール90がメモリ88から符号化されたスライスを取り出す。次いで、DT実行モジュール90は、データ・パーティションの連続データ・ブロックを再構成する。この例で示されるように、データ・パーティション1の再構成された連続データ・ブロックは、データ・ブロック1〜15(たとえばd1〜d15)を含む。
連続データ・ブロックが再構成されると、DT実行モジュール90は再構成された連続データ・ブロックに対してタスクを実行する。たとえば、タスクは、再構成された連続データ・ブロックを特定のワードもしくはフレーズを求めて検索すること、再構成された連続データ・ブロックにおいてどこで特定のワードもしくはフレーズが出現したかを識別すること、または再構成された連続データ・ブロックにおける特定のワードもしくはフレーズの出現をカウントすること、あるいはそれらの組合せであり得る。DST実行ユニットは、スライス・グルーピング1における他のパーティションの符号化されたデータ・スライスについて同様の方法を続ける。前述のユニティ行列エラー符号化方式を使用すると、連続データの符号化されたデータ・スライスが破損していないならば、それらの復号がデータを抽出する比較的簡単なプロセスであることに留意されたい。
しかしながら、連続データの符号化されたデータ・スライスが破損(または欠損)している場合、それは、破損した符号化されたデータ・スライスの符号化されたデータ・スライスのセットの他の符号化されたデータ・スライスを記憶している他のDST実行ユニットにアクセスすることによって再構築され得る。この例では、破損した符号化されたデータ・スライスを有するDST実行ユニットが、他のDST実行ユニットからセット内の(連続データおよびエラー・コード化データの)少なくとも3つの符号化されたデータ・スライスを取り出す(前述のように、たとえば、ピラー幅が5であり、復号閾値が3である)。DST実行ユニットは、取り出されたデータ・スライスをDSエラー符号化パラメータを使用して復号して、対応するデータ・セグメントを再捕捉する。次いで、DST実行ユニットは、DSエラー符号化パラメータを使用してデータ・セグメントを再符号化して、破損した符号化されたデータ・スライスを再構築する。符号化されたデータ・スライスが再構築されると、DST実行ユニットは前述されたように機能する。
図13は、ネットワーク24を介して散在ストレージおよびタスク・ネットワーク(DSTN)モジュールのDST実行ユニットに結合されたDSTクライアント・モジュールのインバウンド散在ストレージおよび/またはタスク(DST)処理部82の実施形態の概略ブロック図である。インバウンドDST処理部82は、グルーピング解除モジュール180、DS(散在ストレージ)エラー復号モジュール182、データ・パーティション解除モジュール184、制御モジュール186、および分散タスク制御モジュール188を含む。制御モジュール186または分散タスク制御モジュール188あるいはその両方は、アウトバウンドDST処理部の対応するモジュールと別個のモジュールであってもよく、あるいは同じモジュールであってもよいことに留意されたい。
動作の例として、DST実行ユニットは、部分的結果102を作成するために対応するスライス・グルーピングに対する対応する部分的タスクの実行を完了している。インバウンドDST処理部82は、分散タスク制御モジュール188を介して部分的結果102を受け取る。次いで、インバウンドDST処理部82は、部分的結果102を処理して最終結果または結果104を作成する。たとえば、タスクが、データ内の特定のワードまたはフレーズを見つけ出すことであった場合、部分的結果102は、データの所定の部分のそれぞれにおける対応するDST実行ユニットが特定のワードまたはフレーズを見つけ出した場所を示す。分散タスク制御モジュール188は、データの対応する部分に対する個々の部分的結果102を組み合わせて、データ全体としての最終結果104にする。
動作の別の例では、インバウンドDST処理部82は、DST実行ユニット(すなわちDSTNモジュール)から、記憶されたデータを取り出している。この例では、DST実行ユニットは、データ取出し要求に対応する符号化されたデータ・スライス100を出力する。グルーピング解除モジュール180は、取り出されたスライス100を受け取り、それらをグループ解除して、データ・パーティションごとの符号化されたデータ・スライス122を作成する。DSエラー復号モジュール182は、DSエラー符号化パラメータに従ってデータ・パーティションごとの符号化されたデータ・スライス122を復号して、データ・パーティション120を作成する。
データ・パーティション解除モジュール184は、データ・パーティション120を組み合わせてデータ92にする。制御モジュール186は、モジュールのそれぞれに対する制御信号190を使用して、取出しスライス100のデータ92への変換を制御する。たとえば、制御モジュール186は、グルーピング解除情報をグルーピング解除モジュール180に提供し、DSエラー符号化パラメータをDSエラー復号モジュール182に提供し、パーティション解除情報をデータ・パーティション解除モジュール184に提供する。
図14は、インバウンドDST処理に関する散在ストレージおよびタスク(DST)クライアント・モジュールによって実行可能な方法の例の論理図である。方法はステップ194から開始し、このステップでは、DSTクライアント・モジュールが部分的結果を受け取る。方法はステップ196に続き、このステップでは、DSTクライアント・モジュールは、部分的結果に対応するタスクを取り出す。たとえば、部分的結果は、要求されたタスクに関係する要求エンティティを識別するヘッダ情報を含む。
方法はステップ198に続き、このステップでは、DSTクライアント・モジュールがタスクに基づいて結果処理情報を決定する。たとえば、タスクがデータ内の特定のワードまたはフレーズを識別することであった場合、結果処理情報は、データの対応する部分についての部分的結果を集約して最終結果を作成することを示すことになる。別の例として、タスクがデータ内の特定のワードまたはフレーズの出現をカウントすることであった場合、情報を処理する結果は、最終結果を作成するために部分的結果を足し合わせることを示すことになる。方法はステップ200に続き、このステップでは、DSTクライアント・モジュールが結果処理情報に従って部分的結果を処理して、最終結果または結果を作成する。
図15は、DSTクライアント・モジュールのインバウンド散在ストレージおよびタスク(DST)処理部のグルーピング解除選択処理の例の図である。一般に、これは、図9のアウトバウンドDST処理部のグルーピング・モジュールの逆プロセスである。したがって、各データ・パーティション(たとえば、パーティション#1)について、グルーピング解除モジュールが、DST実行ユニット(EU)(たとえばDST1〜5)からの対応するスライス・グルーピングを取り出す。
図示されるように、DST実行ユニット#1は、第1のスライス・グルーピングを提供し、第1のスライス・グルーピングは、符号化されたスライスのセットのそれぞれの第1の符号化されたスライス(たとえば、データ・ブロック1〜15の連続データの符号化されたデータ・スライス)を含み、DST実行ユニット#2は、第2のスライス・グルーピングを提供し、第2のスライス・グルーピングは、符号化されたスライスのセットのそれぞれの第2の符号化されたスライス(たとえば、データ・ブロック16〜30の連続データの符号化されたデータ・スライス)を含み、DST実行ユニット#3は、第3のスライス・グルーピングを提供し、第3のスライス・グルーピングは、符号化されたスライスのセットのそれぞれの第3の符号化されたスライス(たとえば、データ・ブロック31〜45の連続データの符号化されたデータ・スライス)を含み、DST実行ユニット#4は、第4のスライス・グルーピングを提供し、第4のスライス・グルーピングは、符号化されたスライスのセットのそれぞれの第4の符号化されたスライス(たとえば、エラー・コード化(EC)データの第1の符号化されたデータ・スライス)を含み、DST実行ユニット#5は、第5のスライス・グルーピングを提供し、第5のスライス・グルーピングは、符号化されたスライスのセットのそれぞれの第5の符号化されたスライス(たとえば、エラー・コード化(EC)データの第1の符号化されたデータ・スライス)を含む。
グルーピング解除モジュールは、例で示されるように制御信号190によって制御されるグルーピング解除選択器180を使用してスライス・グルーピング(たとえば、受け取られたスライス100)をグループ解除して、複数のセットの符号化されたデータ・スライス(たとえば、スライスのセットになるパーティションに対する取り出されたスライス122)を作成する。各セットは、データ・パーティションのデータ・セグメントに対応している。
図16は、インバウンド散在ストレージおよびタスク(DST)処理部の散在ストレージ(DS)エラー復号モジュール182の実施形態の概略ブロック図である。DSエラー復号モジュール182は、逆スライス単位セキュリティ処理モジュール202、スライス解除モジュール204、エラー復号モジュール206、逆セグメント・セキュリティ・モジュール208、セグメント解除処理モジュール210、および制御モジュール186を含む。
動作の例として、逆スライス単位セキュリティ処理モジュール202は、制御モジュール186によって有効にされたとき、制御モジュール186から受け取られた制御情報190として受け取られたスライス・セキュリティ解除情報(たとえば、図6を参照して論じられたスライス・セキュリティ情報の相補情報(compliment))に基づいて、各符号化されたデータ・スライス122を非セキュアにする。スライス・セキュリティ情報は、データ圧縮解除、解読、ウォーターマーク解除、整合性チェック(たとえばCRC検証など)、または任意の他のタイプのデジタル・セキュリティ、あるいはそれらの組合せを含む。たとえば、逆スライス単位セキュリティ処理モジュール202は、有効にされると、各符号化されたデータ・スライス122の整合性情報(たとえばCRC値)を検証し、各検証された符号化データ・スライスを解読し、各解読された符号化データ・スライスを圧縮解除して、スライス符号化データ158を作成する。逆スライス単位セキュリティ処理モジュール202が有効にされない場合、それは、符号化データ・スライス122をスライス化された符号化データ158として渡し、またはバイパスされて、取り出された符号化データ・スライス122がスライス化された符号化データ158として提供される。
スライス解除モジュール204は、制御モジュール186から制御情報190として受け取ったエラー訂正符号化パラメータのピラー幅に従って、スライス化された符号化データ158をスライス解除して、符号化されたデータ・セグメント156にする。たとえば、ピラー幅が5である場合、スライス解除モジュール204は、5つの符号化されたデータ・スライスからなるセットをスライス解除して、符号化されたデータ・セグメント156にする。エラー復号モジュール206は、制御モジュール186から制御情報190として受け取ったエラー訂正復号パラメータに従って、符号化されたデータ・セグメント156を復号してセキュアなデータ・セグメント154を作成する。エラー訂正復号パラメータは、エラー訂正符号化方式(たとえば、順方向エラー訂正アルゴリズム、リードソロモンベースのアルゴリズム、情報伝播アルゴリズムなど)、ピラー幅、復号閾値、読取り閾値、書込み閾値などを識別することを含む。たとえば、エラー訂正復号パラメータは、特定のエラー訂正符号化方式を識別し、5のピラー幅を指定し、3の復号閾値を指定する。
逆セグメント・セキュリティ処理モジュール208は、制御モジュール186によって有効にされたとき、制御モジュール186から制御情報190として受け取ったセグメント・セキュリティ情報に基づいて、セキュアにされたデータ・セグメント154を非セキュアにする。セグメント・セキュリティ情報は、データ圧縮解除、解読、ウォーターマーク解除、整合性チェック(たとえば、CRCなど)検証、または任意の他のタイプのデジタル・セキュリティ、あるいはそれらの組合せを含む。たとえば、逆セグメント・セキュリティ処理モジュール208は、有効にされると、各セキュアなデータ・セグメント154の整合性情報(たとえばCRC値)を検証し、各検証されたセキュアなデータ・セグメントを解読し、各解読されたセキュアなデータ・セグメントを圧縮解除して、データ・セグメント152を作成する。逆セグメント・セキュリティ処理モジュール208が有効にされない場合、それは、復号されたデータ・セグメント154をデータ・セグメント152として渡すか、またはバイパスされる。
セグメント解除処理モジュール210は、データ・セグメント152を受け取り、制御モジュール186から制御情報190としてセグメント解除情報を受け取る。セグメント解除情報は、セグメント解除処理モジュール210がどのようにデータ・セグメント152をセグメント解除してデータ・パーティション120にするかを示す。たとえば、セグメント解除情報は、データ・パーティション120を得るためにデータ・セグメントの行および列がどのように再配列されるかを示す。
図17は、分散エラー復号モジュールのスライス解除およびエラー復号処理の例の図である。スライス解除モジュール204は、制御情報190に従って各データ・セグメントについて少なくとも復号閾値数の符号化されたデータ・スライス158を受け取り、符号化されたデータ156を提供する。この例では、復号閾値は3である。したがって、符号化されたデータ・スライス158の各セットは、データ・セグメントごとに3つの符号化されたデータ・スライスを有するように示されている。スライス解除モジュール204は、データ・セグメントごとに3つの符号化されたデータ・スライスを受け取ることができる。なぜならば、関連した散在ストレージおよびタスク(DST)クライアント・モジュールが、セグメントごとに3つのみの符号化されたデータ・スライスの取出しを要求したか、または取り出された符号化データ・スライスのうち3つをデータ・セグメントごとに選択したためである。図示されているように、図8を参照して先に論じられたユニティ行列符号化に基づき、符号化されたデータ・スライスは、データをベースにした符号化データ・スライス(たとえばDS1_d1&d2)、またはエラー・コードをベースにした符号化データ・スライス(たとえばES3_1)であり得る。
エラー復号モジュール206は、制御情報190のエラー訂正復号パラメータに従って、各データ・セグメントの符号化されたデータ156を復号して、セキュアにされたセグメント154を作成する。この例では、データ・セグメント1は、3行を有し、各行が符号化のために1つのワードとして扱われる。したがって、データ・セグメント1は、3つのワードを含み、ワード1はデータ・ブロックd1およびd2を含み、ワード2はデータ・ブロックd16およびd17を含み、ワード3はデータ・ブロックd31およびd32を含む。データ・セグメント2〜7のそれぞれが3つのワードを含み、各ワードが2つのデータ・ブロックを含む。データ・セグメント8は3つのワードを含み、各ワードは単一のデータ・ブロック(たとえば、d15、d30、およびd45)を含む。
図18は、インバウンド散在ストレージおよびタスク(DST)処理のセグメント解除処理の例の図である。この例では、セグメント解除処理モジュール210は、データ・セグメント152(たとえば1〜8)を受け取り、制御情報190のセグメント解除情報に従ってデータ・セグメントのデータ・ブロックを行および列に再配列して、データ・パーティション120を作成する。行の数は、復号閾値(たとえば、この具体的な例では3)に基づき、列の数は、データ・ブロックの数およびサイズに基づくことに留意されたい。
セグメント解除モジュール210は、データ・ブロックの行および列をデータ・パーティション120に変換する。各データ・ブロックは、他のデータ・ブロックと同じサイズであっても異なるサイズであってもよいことに留意されたい。加えて、各データ・ブロックはサイズが数バイトから数メガバイトのデータであり得る。
図19は、インバウンド散在ストレージおよびタスク(DST)処理部におけるスライス・グループをデータ92に変換する例の図である。図示されるように、データ92は、複数のデータ・パーティション(1〜x、ここでxは4より大きい整数)から再構成される。各データ・パーティション(または、データのチャンク・セット)は、先に論じられたように、グルーピング解除および復号機能212ならびにパーティション解除機能214を使用してスライス・グルーピングから復号され再グループ化される。所与のデータ・パーティションについて、スライス・グルーピング(たとえば、少なくともデータ・セグメントごとの復号閾値の符号化されたデータ・スライス)がDST実行ユニットから受け取られる。図10を参照して論じられてように、データ・パーティションごとに、DST実行ユニットから受け取られるスライス・グルーピングの順序付けが異なり得る。
図20は、分散コンピューティング・システム内の散在ストレージまたは取出しあるいはその両方の例の図である。分散コンピューティング・システムは、複数の散在ストレージおよび/またはタスク(DST)処理クライアント・モジュール34(1つが図示される)を含み、このモジュールは、ネットワーク24を介して、散在ストレージおよび/またはタスク処理ネットワーク(DSTN)モジュールあるいは複数のDSTNモジュールに結合される。DSTクライアント・モジュール34は、アウトバウンドDST処理部80およびインバウンドDST処理部82を含む。DSTNモジュールは、複数のDST実行ユニットを含む。各DST実行ユニットは、コントローラ86、メモリ88、1つまたは複数の分散タスク(DT)実行モジュール90、およびDSTクライアント・モジュール34を含む。
データ記憶の例において、DSTクライアント・モジュール34が、DSTNモジュールに記憶したいデータ92を有する。データ92は、ファイル(たとえば、ビデオ、オーディオ、テキスト、グラフィックスなど)、データ・オブジェクト、データ・ブロック、ファイルに対する更新、データ・ブロックに対する更新などであり得る。この例では、アウトバウンドDST処理モジュール80は、図21〜図23を参照してさらに説明されるように、データ92を符号化されたデータ・スライス216に変換する。アウトバウンドDST処理モジュール80は、図24を参照してさらに説明されるように、記憶のためにネットワーク24を介してDST実行ユニットに送る。
データ取出しの例において、DSTクライアント・モジュール34は、所望のデータ92を求めて取出し要求をDST実行ユニットに発行する。取出し要求は、所望のデータの符号化されたデータ・スライスを記憶する各DST実行ユニットに宛てる、アドレス復号閾値数のDST実行ユニットに宛てる、アドレス読取り閾値数のDST実行ユニットに宛てる、または他のいくつかの数のDST実行ユニットに宛てることができる。要求に応答して、各宛先のDST実行ユニットは、所望のデータのその符号化されたデータ・スライス100を取り出し、それらをネットワーク24を介してインバウンドDST処理部82に送る。
各データ・セグメントについて、インバウンドDST処理部82は、少なくとも復号閾値数の符号化されたデータ・スライス100を受け取り、それらの符号化されたデータ・スライス100をデータ・セグメントに変換する。インバウンドDST処理部82は、データ・セグメントを集約して取り出されたデータ92を作成する。
図21は、ネットワーク24を介して散在ストレージおよびタスク・ネットワーク(DSTN)モジュール(たとえば、複数のDST実行ユニット)に結合されたDSTクライアント・モジュールのアウトバウンド散在ストレージおよび/またはタスク(DST)処理部80の実施形態の概略ブロック図である。アウトバウンドDST処理部80は、データ・パーティション化モジュール110、散在ストレージ(DS)エラー符号化モジュール112、グルーピング選択モジュール114、制御モジュール116、および分散タスク制御モジュール118を含む。
動作の例として、データ・パーティション化モジュール110は、データ92がDSエラー符号化モジュール112に直接提供されるようにバイパスされる。制御モジュール116は、バイパス220のメッセージをデータ・パーティション化モジュール110に出力することによって、データ・パーティション化モジュール110のバイパスを調整する。
DSエラー符号化モジュール112は、直列様式または並列様式あるいはその組合せでデータ92を受け取る。DSエラー符号化モジュール112は、制御モジュール116からの制御情報160に従って、データをDSエラー符号化して、符号化されたデータ・スライス218を作成する。DSエラー符号化は、データ92をデータ・セグメントにセグメント化すること、セグメント・セキュリティ処理(たとえば、暗号化、圧縮、ウォーターマーキング、整合性チェック(たとえばCRCなど))、エラー符号化、スライス化、またはスライス単位セキュリティ処理(たとえば、暗号化、圧縮、ウォーターマーキング、整合性チェック(たとえばCRCなど))、あるいはそれらの組合せを含む。制御情報160は、データ92についてDSエラー符号化のどのステップがアクティブであるかを示し、アクティブなステップについては、そのステップに対するパラメータを示す。たとえば、制御情報160は、エラー符号化がアクティブであることを示し、エラー符号化パラメータ(たとえば、ピラー幅、復号閾値、書込み閾値、読取り閾値、エラー符号化のタイプなど)を含む。
グルーピング選択モジュール114は、データ・セグメントの符号化されたスライス218を、スライスのピラー216にグループ化する。ピラーの数は、DSエラー符号化パラメータのピラー幅に対応する。この例では、分散タスク制御モジュール118が記憶要求を推進する。
図22は、図21の例に関する散在ストレージ(DS)エラー符号化モジュール112の例の概略ブロック図である。DSエラー符号化モジュール112は、セグメント処理モジュール142、セグメント・セキュリティ処理モジュール144、エラー符号化モジュール146、スライス化モジュール148、およびスライス単位セキュリティ処理モジュール150を含む。これらのモジュールのそれぞれは、制御モジュール116に結合されて、それから制御情報160を受け取る。
動作の例として、セグメント処理モジュール142は、データ92を受け取り、また制御モジュール116から制御情報160としてセグメント化情報を受け取る。セグメント化情報は、セグメント処理モジュールがデータをどのようにセグメント化するかを示す。たとえば、セグメント化情報は、各データ・セグメントのサイズを示す。セグメント処理モジュール142は、セグメント化情報に従ってデータ92をセグメント化してデータ・セグメント152にする。
セグメント・セキュリティ処理モジュール144は、制御モジュール116によって有効にされたとき、制御モジュール116から制御情報160として受け取ったセグメント・セキュリティ情報に基づいて、データ・セグメント152をセキュアにする。セグメント・セキュリティ情報は、データ圧縮、暗号化、ウォーターマーキング、整合性チェック(たとえばCRCなど)、または任意の他のタイプのデジタル・セキュリティ、あるいはそれらの組合せを含む。たとえば、セグメント・セキュリティ処理モジュール144は、有効にされると、データ・セグメント152を圧縮し、圧縮されたデータ・セグメントを暗号化し、暗号化されたデータ・セグメントに対するCRC値を生成して、セキュアなデータ・セグメントを作成することができる。セグメント・セキュリティ処理モジュール144が有効にされない場合、それは、データ・セグメント152をエラー符号化モジュール146に渡し、またはバイパスされてデータ・セグメント152がエラー符号化モジュール146に提供される。
エラー符号化モジュール146は、制御モジュール116から制御情報160として受け取ったエラー訂正符号化パラメータに従って、セキュアなデータ・セグメントを符号化する。エラー訂正符号化パラメータは、エラー訂正符号化方式(たとえば、順方向エラー訂正アルゴリズム、リードソロモンベースのアルゴリズム、情報伝播アルゴリズムなど)、ピラー幅、復号閾値、読取り閾値、書込み閾値などを識別することを含む。たとえば、エラー訂正符号化パラメータは、特定のエラー訂正符号化方式を識別し、5のピラー幅を指定し、3の復号閾値を指定する。これらのパラメータから、エラー符号化モジュール146は、データ・セグメントを符号化して、符号化されたデータ・セグメントを作成する。
スライス化モジュール148は、エラー訂正符号化パラメータのピラー幅に従って、符号化されたデータ・セグメントをスライス化する。たとえば、ピラー幅が5である場合、スライス化モジュールは、符号化されたデータ・セグメントをスライス化して、5つの符号化されたデータ・スライスのセットにする。したがって、複数のデータ・セグメントについて、スライス化モジュール148は、説明されたように符号化およびスライス化機能222において示されるように複数のセットの符号化されたデータ・スライスを出力する。
スライス単位セキュリティ処理モジュール150は、制御モジュール116によって有効にされたとき、制御モジュール116から制御情報160として受け取ったスライス・セキュリティ情報に基づいて、各符号化されたデータ・スライスをセキュアにする。スライス・セキュリティ情報は、データ圧縮、暗号化、ウォーターマーキング、整合性チェック(たとえばCRCなど)、または任意の他のタイプのデジタル・セキュリティ、あるいはそれらの組合せを含む。たとえば、スライス単位セキュリティ処理モジュール150は、有効にされると、符号化されたデータ・スライスを圧縮し、圧縮された符号化データ・スライスを暗号化し、暗号化された符号化データ・スライスに対するCRC値を生成して、セキュアな符号化データ・スライス微調整を作成することができる。スライス単位セキュリティ処理モジュール150が有効にされない場合、それは符号化されたデータ・スライスを通過させ、またはバイパスされて、符号化されたデータ・スライス218がDSエラー符号化モジュール112の出力になる。
図23は、散在ストレージおよびタスク・ネットワーク(DSTN)モジュールのメモリへの記憶のために、符号化、スライス化、およびピラーグループ化機能224を利用して、データ92をピラースライス・グループに変換する例の図である。先に論じられたように、データ92は符号化されスライス化されて、複数のセットの符号化されたデータ・スライスにされ、データ・セグメントごとに1つのセットとなる。グルーピング選択モジュールは、符号化されたデータ・スライスをデータ・スライスのピラーに編成する。この例では、DSエラー符号化パラメータは、5のピラー幅および3の復号閾値を含む。したがって、各データ・セグメントについて、5つの符号化されたデータ・スライスが作り出される。
グルーピング選択モジュールは、それらのセットのそれぞれの第1の符号化されたデータ・スライスを取り入れて第1のピラーを形成し、第1のピラーは第1のDST実行ユニットに送られ得る。同様に、グルーピング選択モジュールは、セットの第2のスライスから第2のピラーを作り出し、セットの第3のスライスから第3のピラーを作り出し、セットの第4のスライスから第4のピラーを作り出し、セットの第5のスライスから第5のピラーを作り出す。
図24は、散在ストレージおよび/またはタスク(DST)実行ユニットの実施形態の概略ブロック図であり、DST実行ユニットは、インターフェース169、コントローラ86、メモリ88、1つまたは複数の分散タスク(DT)実行モジュール90、およびDSTクライアント・モジュール34を含む。コンピューティング・コア26は、1つまたは複数のDT実行モジュール90およびDSTクライアント・モジュール34を実装するために利用され得る。メモリ88は、かなりの数の符号化されたデータ・スライス(たとえば、数千から数億のスライス)を記憶するために十分なサイズがあり、1つもしくは複数のハード・ドライブまたは1つもしくは複数のソリッドステート・メモリ・デバイス(たとえば、フラッシュ・メモリ、DRAMなど)あるいはその両方を含み得る。
スライスのピラー216を記憶する例において、DST実行ユニットは、インターフェース169を介してスライスのピラー216(たとえば、ピラー#1スライス)を受け取る。メモリ88は、それがコントローラ86から受け取ったメモリ制御情報174に従って、スライスのピラーの符号化されたデータ・スライス216を記憶する。コントローラ86(たとえば、処理モジュール、CPUなど)は、散在ストレージ情報(たとえば、ユーザ情報(たとえば、ユーザID、散在ストレージ許可、データ・アクセス許可など)、格納域情報(たとえば、ユーザに割り当てられた仮想メモリ、ユーザ・グループなど)など)に基づいて、メモリ制御情報174を生成する。同様に、スライスを取り出すとき、DST実行ユニットは、インターフェース169を介してスライス取出し要求を受け取る。メモリ88は、それがコントローラ86から受け取ったメモリ制御情報174に従って、スライスを取り出す。メモリ88は、インターフェース169を介して要求エンティティにスライス100を出力する。
図25は、分散エラー符号化データ92を取り出すためのインバウンド散在ストレージおよび/またはタスク(DST)処理部82の動作の例の概略ブロック図である。インバウンドDST処理部82は、グルーピング解除モジュール180、散在ストレージ(DS)エラー復号モジュール182、データ・パーティション解除モジュール184、制御モジュール186、および分散タスク制御モジュール188を含む。制御モジュール186または分散タスク制御モジュール188あるいはその両方は、アウトバウンドDST処理部の対応するモジュールと別個のモジュールであってもよく、あるいは同じモジュールであってもよいことに留意されたい。
動作の例として、インバウンドDST処理部82は、DST実行ユニット(すなわちDSTNモジュール)から、記憶されたデータ92を取り出している。この例では、DST実行ユニットは、分散タスク制御モジュール188からのデータ取出し要求に対応する符号化されたデータ・スライスを出力する。グルーピング解除モジュール180は、スライスのピラー100を受け取り、制御モジュール186からの制御情報190に従ってそれらをグループ解除して、セットの符号化されたデータ・スライス218を作成する。DSエラー復号モジュール182は、制御モジュール186から制御情報190として受信したDSエラー符号化パラメータに従って、各セットの符号化されたデータ・スライス218を復号してデータ・セグメントを作成し、データ・セグメントは、取り出されたデータ92に集約される。データ・パーティション解除モジュール184は、この動作モードでは、制御モジュール186からの制御情報190のバイパス信号226を用いてバイパスされる。
図26は、インバウンド散在ストレージおよびタスク(DST)処理部の散在ストレージ(DS)エラー復号モジュール182の実施形態の概略ブロック図である。DSエラー復号モジュール182は、逆スライス単位セキュリティ処理モジュール202、スライス解除モジュール204、エラー復号モジュール206、逆セグメント・セキュリティ・モジュール208、およびセグメント解除処理モジュール210を含む。分散エラー復号モジュール182は、スライス解除および復号機能228を利用して、データ・セグメントごとの符号化されたスライス218をスライス解除および復号して、複数のデータ・セグメントを作成し、これらのデータ・セグメントはセグメント解除機能230を利用してセグメント解除されて、データ92が復元される。
動作の例として、逆スライス単位セキュリティ処理モジュール202は、制御モジュール186によって制御情報190を介して有効にされたとき、制御モジュール186から制御情報190として受け取ったスライス・セキュリティ解除情報(たとえば、図6を参照して論じられたスライス・セキュリティ情報の相補情報)に基づいて、各符号化されたデータ・スライス218を非セキュアにする。スライス・セキュリティ解除情報は、データ圧縮解除、解読、ウォーターマーク解除、整合性チェック(たとえばCRC検証など)、または任意の他のタイプのデジタル・セキュリティ、あるいはそれらの組合せを含む。たとえば、逆スライス単位セキュリティ処理モジュール202は、有効にされると、各符号化されたデータ・スライス218の整合性情報(たとえばCRC値)を検証し、各検証された符号化データ・スライスを解読し、各解読された符号化データ・スライスを圧縮解除して、スライス符号化データを作成する。逆スライス単位セキュリティ処理モジュール202が有効にされない場合、それは、符号化データ・スライス218をスライス化された符号化データとして渡し、またはバイパスされて、取り出された符号化データ・スライス218がスライス化された符号化データとして提供される。
スライス解除モジュール204は、制御モジュール186からの制御情報190として受け取ったエラー訂正符号化パラメータのピラー幅に従って、スライス化された符号化データをスライス解除して、符号化されたデータ・セグメントにする。たとえば、ピラー幅が5である場合、スライス解除モジュールは、5つの符号化されたデータ・スライスからなるセットをスライス解除して、符号化されたデータ・セグメントにする。あるいは、符号化されたデータ・セグメントは、(たとえば、復号閾値が3のとき)3つだけの符号化されたデータ・スライスを含むことができる。
エラー復号モジュール206は、制御モジュール186から制御情報190として受け取ったエラー訂正復号パラメータに従って、符号化されたデータ・セグメントを復号してセキュアなデータ・セグメントを作成する。エラー訂正復号パラメータは、エラー訂正符号化方式(たとえば、順方向エラー訂正アルゴリズム、リードソロモンベースのアルゴリズム、情報伝播アルゴリズムなど)、ピラー幅、復号閾値、読取り閾値、書込み閾値などを識別することを含む。たとえば、エラー訂正復号パラメータは、特定のエラー訂正符号化方式を識別し、5のピラー幅を指定し、3の復号閾値を指定する。
逆セグメント・セキュリティ処理モジュール208は、制御モジュール186によって有効にされたとき、制御モジュール186から制御情報190として受け取ったセグメント・セキュリティ情報に基づいて、セキュアにされたデータ・セグメントを非セキュアにする。セグメント・セキュリティ情報は、データ圧縮解除、解読、ウォーターマーク解除、整合性チェック(たとえば、CRCなど)検証、または任意の他のタイプのデジタル・セキュリティ、あるいはそれらの組合せを含む。たとえば、逆セグメント・セキュリティ処理モジュールは、有効にされると、各セキュアなデータ・セグメントの整合性情報(たとえばCRC値)を検証し、各検証されたセキュアなデータ・セグメントを解読し、各解読されたセキュアなデータ・セグメントを圧縮解除して、データ・セグメント152を作成する。逆セグメント・セキュリティ処理モジュール208が有効にされない場合、それは、復号されたデータ・セグメント152をデータ・セグメントとして渡すか、またはバイパスされる。セグメント解除処理モジュール210は、制御モジュール186からの制御情報190に従って、データ・セグメント152をデータ92に集約する。
図27は、複数の散在ストレージおよびタスク(DST)実行ユニット(#1〜#n、ここで、たとえばnは3以上の整数である)を含む散在ストレージおよびタスク処理ネットワーク(DSTN)モジュールの例の概略ブロック図である。DST実行ユニットのそれぞれは、DSTクライアント・モジュール34、コントローラ86、1つまたは複数のDT(分散タスク)実行モジュール90、およびメモリ88を含む。
この例では、DSTNモジュールは、DST実行ユニットのメモリに、複数のDS(散在ストレージ)符号化データ(たとえば1〜n、ここでnは2以上の整数である)を記憶し、また、複数のDS符号化タスク・コード(たとえば1〜k、ここでkは2以上の整数である)を記憶する。DS符号化データは、図3〜図19を参照して説明された1つまたは複数の例に従って符号化される(たとえば、スライス・グルーピングに編成される)、あるいは図20〜図26を参照して説明された1つまたは複数の例に従って符号化される(たとえば、ピラーグループに編成される)ことが可能である。DS符号化データへ符号化されたデータは、任意のサイズまたは任意のコンテンツあるいはその両方を有してよい。たとえば、データは、1つもしくは複数のデジタル書籍、会社の電子メールのコピー、大規模なインターネット検索、ビデオ・セキュリティ・ファイル、1つもしくは複数の娯楽ビデオ・ファイル(たとえば、テレビ番組、映画など)、データ・ファイル、または任意の他の大量の(たとえば数テラバイトより大きい)データ、あるいはそれらの組合せであり得る。
DS符号化タスク・コードへ符号化されたタスクは、単純な機能(たとえば、数学関数、論理関数、識別機能、発見機能、検索エンジン機能、置換機能など)、複雑な機能(たとえば、圧縮、人間またはコンピュータあるいはその両方の言語の翻訳、テキスト−音声変換、音声−テキスト変換など)、複数の単純または複雑なあるいはその両方の機能、1つまたは複数のアルゴリズム、1つまたは複数のアプリケーションなどであり得る。タスクは、DS符号化されたタスク・コードへ、図3〜図19を参照して説明された1つまたは複数の例に従って符号化される(たとえば、スライス・グルーピングに編成される)、あるいは図20〜図26を参照して説明された1つまたは複数の例に従って符号化される(たとえば、ピラーグループに編成される)ことが可能である。
動作の例として、ユーザ・デバイスまたはDST処理ユニットのDSTクライアント・モジュールが、DST要求をDSTNモジュールへ発行する。DST要求は、記憶されたデータまたはその部分を取り出す要求を含むこと、DST要求に含まれたデータを記憶する要求を含むこと、記憶されたデータに対して1つまたは複数のタスクを実行する要求を含むこと、DST要求に含まれたデータに対して1つまたは複数のタスクを実行する要求を含むことなどができる。DST要求が、データを記憶するまたはデータを取り出す要求を含む場合、クライアント・モジュールまたはDSTNモジュールあるいはその両方は、図3〜図19(たとえばスライス・グルーピング)または図20〜図26(たとえばピラーグルーピング)あるいはその両方の1つまたは複数を参照して先に論じられたように要求を処理する。DST要求が、DST要求に含まれたデータに対して1つまたは複数のタスクを実行する要求を含む場合、DSTクライアント・モジュールまたはDSTNモジュールあるいはその両方は、図3〜図19の1つまたは複数を参照して先に論じられたようにDST要求を処理する。
DST要求が、記憶されたデータに対して1つまたは複数のタスクを実行する要求を含む場合、DSTクライアント・モジュールまたはDSTNモジュールあるいはその両方は、図28〜図39の1つまたは複数を参照して後述されるようにDST要求を処理する。一般に、DSTクライアント・モジュールは、データを識別するとともに、識別したデータに対してDSTNモジュールが実行すべき1つまたは複数のタスクを識別する。DST要求は、タスクの1回限りの実行、またはタスクの継続的実行を求める場合がある。後者の例として、会社が日常的な電子メールを作成する場合、DTS要求が、不適切なコンテンツに関して日常的に新しい電子メールを検索し、発見した場合、そのコンテンツ、電子メール送信者、電子メール受信者、電子メール・ルーティング情報を記録し、識別した電子メールを人事部に通知することができる。
図28は、記憶されたデータに対してタスクを実行する分散コンピューティング・システムの例の概略ブロック図である。この例では、2つの散在ストレージおよびタスク(DST)クライアント・モジュール1〜2が示されており、1つ目は、ユーザ・デバイスに関連付けられてよく、2つ目は、DST処理ユニット、または高優先度のユーザ・デバイス(たとえば、高優先許可ユーザ、システム管理者など)に関連付けられてよい。各DSTクライアント・モジュールは、記憶されたデータのリスト234、およびタスク・コードのリスト236を含む。記憶されたデータのリスト234は、情報を識別するデータの1つまたは複数のエントリを含み、各エントリは、DSTNモジュール22に記憶されたデータを識別する。情報を識別するデータ(たとえばデータID)は、データ・ファイル名、データ・ファイル・ディレクトリ項目、データのDSTNアドレス情報、データ・オブジェクト識別子などのうちの1つまたは複数を含む。タスクのリスト236は、情報を識別するタスク・コードの1つまたは複数のエントリを含み、各エントリは、DSTNモジュール22に記憶されたタスク・コードを識別する。情報を識別するタスク・コード(たとえばタスクID)は、タスク・ファイル名、タスク・ファイル・ディレクトリ項目、タスクのDSTNアドレス情報、タスクを識別する他のタイプの識別子などのうちの1つまたは複数を含む。
図示されるように、データのリスト234およびタスクのリスト236のそれぞれは、第1のDSTクライアント・モジュールについてのエントリの数が、第2のDSTクライアント・モジュールの対応するリストのそれよりも小さい。これは、第1のDSTクライアント・モジュールに関連付けられたユーザ・デバイスが、第2のDSTクライアント・モジュールに関連付けられたデバイスよりも分散コンピューティング・システムにおける特権が少ないために生じることがある。あるいは、これは、第1のDSTクライアント・モジュールに関連付けられたユーザ・デバイスが、第2のDSTクライアント・モジュールに関連付けられたデバイスよりも少ないユーザにサービスし、それに応じて分散コンピューティング・システムによって制約されるために生じることがある。さらに別の可能性として、これは、分散コンピューティング・システムによる制約により生じるのではなく、単に、第1のDSTクライアント・モジュールに関連付けられたユーザ・デバイスのオペレータが、第2のDSTクライアント・モジュールに関連付けられたデバイスのオペレータよりも少ないデータまたは少ないタスクあるいはその両方を選択しているために生じることがある。
動作の例として、第1のDSTクライアント・モジュールは、1つまたは複数のデータ・エントリ238および1つまたは複数のタスク240を、そのそれぞれのリストから選択する(たとえば、選択されたデータIDおよび選択されたタスクID)。第1のDSTクライアント・モジュールは、その選択をタスク分散モジュール232に送る。タスク分散モジュール232は、分散コンピューティング・システムのスタンドアロン・デバイス内、第1のDSTクライアント・モジュールを含むユーザ・デバイス内、またはDSTNモジュール22内にあってよい。
タスク分散モジュールの位置に拘わらず、それは、選択されたタスクID240および選択されたデータID238からDST割り振り情報242を生成する。DST割り振り情報242は、データ・パーティション化情報、タスク実行情報、または中間結果情報、あるいはそれらの組合せを含む。タスク分散モジュール232は、DST割り振り情報242をDSTNモジュール22に送る。DST割り振り情報の1つまたは複数の例については、図29〜図39の1つまたは複数を参照して論じられることに留意されたい。
DSTNモジュール22は、DST割り振り情報242を解釈して、記憶されたDS符号化データ(たとえばDSエラー符号化データ2)を識別し、記憶されたDSエラー符号化タスク・コード(たとえばDSエラー符号化タスク・コード1)を識別する。加えて、DSTNモジュール22は、DST割り振り情報242を解釈して、データがどのようにパーティション化されるか、およびタスクがどのようにパーティション化されるかを決定する。DSTNモジュール22はまた、選択されたDSエラー符号化データ238がピラーグルーピングからスライス・グルーピングに変換される必要があるかどうかを決定する。必要がある場合、DSTNモジュール22は、選択されたDSエラー符号化データをスライス・グルーピングに変換し、ピラーグルーピングDSエラー符号化データを上書きすることによって、またはスライス・グルーピングDSエラー符号化データをDSTNモジュール22のメモリ内の異なる位置に記憶する(すなわち、ピラーグルーピングDSエラー符号化データを上書きしない)ことによって、スライス・グルーピングDSエラー符号化データを記憶する。
DSTNモジュール22は、DST割り振り情報242に示されているように、データおよびタスクをパーティション化し、それらのパーティションを、DSTNモジュール22の選択されたDST実行ユニットに送る。選択されたDST実行ユニットのそれぞれは、そのスライス・グルーピングに対してその部分的タスクを実行して部分的結果を作成する。DSTNモジュール22は、選択されたDST実行ユニットから部分的結果を収集し、それらを結果情報244としてタスク分散モジュールに提供する。結果情報244は、収集された部分的結果、DST割り振り情報242に従って部分的結果を処理することでDSTNモジュール22によって作成される1つまたは複数の最終結果、あるいはDST割り振り情報242に従って部分的結果を処理することでDSTNモジュール22によって作成される1つまたは複数の中間結果であり得る。
タスク分散モジュール232は、結果情報244を受け取り、それからの1つまたは複数の最終結果104を第1のDSTクライアント・モジュールに提供する。最終結果104は、結果情報244、または結果情報244のタスク分散モジュールの処理の結果とすることができる。
第1のDSTクライアント・モジュールの選択されたタスクを処理するのと同時に、分散コンピューティング・システムは、第2のDSTクライアント・モジュールの選択されたデータに対する第2のDSTクライアント・モジュールの選択されたタスクを処理することができる。あるいは、分散コンピューティング・システムは、第2のDSTクライアント・モジュールの要求を、第1のDSTクライアント・モジュールの要求の後または前に処理してもよい。DSTクライアント・モジュール要求の順序付けまたは並列処理あるいはその両方に拘わらず、第2のDSTクライアント・モジュールは、その選択されたデータ238および選択されたタスク240をタスク分散モジュール232に提供する。タスク分散モジュール232が分散コンピューティング・システムの別個のデバイスまたはDSTNモジュール内である場合、第1および第2のDSTクライアント・モジュールに結合されたタスク分散モジュール232は同じモジュールとすることができる。タスク分散モジュール232は、それが第1のDSTクライアント・モジュールの要求を処理したのと同様の様式で第2のDSTクライアント・モジュールの要求を処理する。
図29は、図28の例を推進するタスク分散モジュール232の実施形態の概略ブロック図である。タスク分散モジュール232は、DSTクライアント・モジュールから受け取った選択されたデータおよび選択されたタスクについて散在ストレージおよびタスク(DST)割り振り情報242を生成するために使用する複数のテーブルを含む。テーブルは、データ記憶情報248、タスク記憶情報250、分散タスク(DT)実行モジュール情報252、および、タスク⇔サブ・タスク・マッピング情報246を含む。
データ記憶情報テーブル248は、データ識別(ID)フィールド260、データ・サイズ・フィールド262、アドレス情報フィールド264、散在ストレージ(DS)情報266を含み、さらに、データに関する他の情報、それをどのように記憶するか、またはそれをどのように処理するか、あるいはそれらの組合せを含むことができる。たとえば、DS符号化データ#1は、データID:1、データ・サイズ:AA(たとえば、数テラバイト以上のバイト・サイズ)、アドレス情報:Addr_1_AA、ならびにDSパラメータ:3/5;SEG_1;およびSLC_1を有する。この例では、アドレス情報は、他のアドレスをどのように計算するかに関するデータおよび情報の第1の記憶ワード(たとえば1つまたは複数のバイト)の仮想アドレスに対応する仮想アドレス、データの記憶ワードの仮想アドレスの範囲、データの記憶ワードの第1の記憶ワードもしくは複数の記憶ワードの物理アドレス、データの符号化されたデータ・スライスのスライス名のリストなどであり得る。DSパラメータは、エラー符号化方式のアイデンティティ、復号閾値/ピラー幅(たとえば、第1のデータ・エントリについて3/5)、セグメント・セキュリティ情報(たとえば、SEG_1)、スライス単位セキュリティ情報(たとえば、SLC_1)、またはデータがどのようにデータ・スライスに符号化されたかに関する任意の他の情報、あるいはそれらの組合せを含むことができる。
タスク記憶情報テーブル250は、タスク識別(ID)フィールド268、タスク・サイズ・フィールド270、アドレス情報フィールド272、散在ストレージ(DS)情報274を含み、さらに、タスクに関する他の情報、それをどのように記憶するか、またはデータを処理するためにそれをどのように使用できるか、あるいはそれらの組合せを含むことができる。たとえば、DS符号化タスク#2は、タスクID:2、タスク・サイズ:XY、アドレス情報:Addr_2_XY、ならびにDSパラメータ:3/5;SEG_2;およびSLC_2を有する。この例では、アドレス情報は、他のアドレスをどのように計算するかに関するタスクおよび情報の第1の記憶ワード(たとえば1つまたは複数のバイト)の仮想アドレスに対応する仮想アドレス、タスクの記憶ワードの仮想アドレスの範囲、タスクの記憶ワードの第1の記憶ワードもしくは複数の記憶ワードの物理アドレス、タスク・コードの符号化されたスライスのスライス名のリストなどであり得る。DSパラメータは、エラー符号化方式の識別子、復号閾値/ピラー幅(たとえば、第1のデータ・エントリについて3/5)、セグメント・セキュリティ情報(たとえば、SEG_2)、スライス単位セキュリティ情報(たとえば、SLC_2)、またはタスクがどのように符号化タスク・スライスに符号化されたかに関する任意の他の情報、あるいはそれらの組合せを含むことができる。セグメントまたはスライス単位セキュリティ情報あるいはその両方は、暗号化のタイプ(有効な場合)、圧縮のタイプ(有効な場合)、ウォーターマーキング情報(有効な場合)、または整合性チェック方式(有効な場合)、あるいはそれらの組合せを含むことに留意されたい。
タスク⇔サブ・タスク・マッピング情報テーブル246は、タスク・フィールド256およびサブ・タスク・フィールド258を含む。タスク・フィールド256は、散在ストレージおよびタスク・ネットワーク(DSTN)モジュールのメモリに記憶されたタスクを識別し、対応するサブ・タスク・フィールド258は、タスクがサブ・タスクを含むかどうかを示し、さらに含む場合は、サブ・タスクのいくつが順序付けられているか、およびサブ・タスクのいずれかが順序付けられているかを示す。この例では、タスク⇔サブ・タスク・マッピング情報テーブル246は、DSTNモジュールのメモリに記憶された各タスク(たとえば、タスク1〜タスクk)についてのエントリを含む。特に、この例は、タスク1が7つのサブ・タスクを含み、タスク2がサブ・タスクを含まず、タスクkがr個のサブ・タスク(ここでrは2以上の整数)を含むことを示している。
DT実行モジュールテーブル252は、DST実行ユニットIDフィールド276、DT実行モジュールIDフィールド278、およびDT実行モジュール性能フィールド280を含む。DST実行ユニットIDフィールド276は、DSTNモジュール内のDSTユニットのアイデンティティを含む。DT実行モジュールIDフィールド278は、各DSTユニット内の各DT実行ユニットのアイデンティティを含む。たとえば、DSTユニット1は、3つのDT実行モジュール(たとえば、1_1、1_2、および1_3)を含む。DT実行性能フィールド280は、対応するDT実行ユニットの性能のアイデンティティを含む。たとえば、DT実行モジュール1_1は、性能Xを含み、Xは、MIPS性能、処理リソース(たとえば、マイクロプロセッサ、CPU、デジタル・シグナル・プロセッサ、コプロセッサ、マイクロコントローラ、算術論理回路、または任意の他のアナログまたはデジタルあるいはその両方の処理回路、あるいはそれらの組合せの量および性能)、処理リソースの可用性、メモリ情報(たとえば、タイプ、サイズ、可用性など)、または1つもしくは複数のタスクの実行に関する任意の情報、あるいはそれらの組合せのうちの1つまたは複数を含む。
これらのテーブルから、タスク分散モジュール232は、DST割り振り情報242を生成し、DST割り振り情報242は、データがどこに記憶されるか、データをどのようにパーティション化するか、タスクがどこに記憶されるか、タスクをどのようにパーティション化するか、どのDT実行ユニットがどのデータ・パーティションに対してどの部分的タスクを実行するべきか、中間結果がどこにどのように記憶されるべきかなどを示す。複数のタスクが同じデータまたは異なるデータに対して実行されている場合、タスク分散モジュールは、そのような情報を考慮に入れてDST割り振り情報を生成する。
図30は、タスク・フロー318として記憶されたデータに対してタスクを実行する分散コンピューティング・システムの具体例の図である。この例では、選択されたデータ92は、データ2であり、選択されたタスクは、タスク1、2および3である。タスク1は、ある言語から別の言語(たとえば、人間言語またはコンピュータ言語)へのデータの翻訳を解析することに対応し、タスク2は、データ内の特定のワードまたはフレーズあるいはその両方を見つけ出すことに対応し、タスク3は、翻訳されたデータ内の特定の翻訳されたワードまたはフレーズあるいはその両方を見つけ出すことに対応する。
この例では、タスク1は、7個のサブ・タスクを含み、タスク1_1は、非ワード(non-word)を識別すること(順序付けなし)、タスク1_2は、固有のワードを識別すること(順序付けなし)、タスク1_3は、翻訳すること(順序付けなし)、タスク1_4は、逆翻訳すること(タスク1_3の後に順序付けられる)、タスク1_5は、エラーを識別するために比較すること(タスク1_4の後に順序付けられる)、タスク1_6は、非ワード翻訳エラーを決定すること(タスク1_5および1_1の後に順序付けられる)、タスク1_7は、正しい翻訳を決定すること(1_5および1_2の後に順序付けられる)である。サブ・タスクはさらに、それらが、順序付けタスク(すなわち、他のタスクの結果に依存する)であるか、それとも順序なし(すなわち、他のタスクの結果から独立している)であるかを示す。タスク2はサブ・タスクを含まず、タスク3は2つのサブ・タスクを含み、タスク3_1は翻訳することであり、タスク3_2は翻訳されたデータ内で特定のワードまたはフレーズを見つけ出すことである。
一般に、それら3つのタスクが、翻訳精度、翻訳エラー、翻訳不整合、データ内の特定のワードまたはフレーズの出現、および翻訳されたデータ内の特定のワードまたはフレーズの出現に関するデータを分析するために、まとめて選択される。図示のように、データ92は、翻訳されたデータ282へ翻訳306され、特定のワードまたはフレーズあるいはその両方300について分析されて特定のワードまたはフレーズあるいはその両方のリスト286を作成し、非ワード302(たとえば参照辞書にない)について分析されて非ワードのリスト290を作成し、データ92に含まれる固有のワード316について(すなわち、いくつの異なるワードがデータに含まれているか)分析されて固有のワードのリスト298が作成される。これらの各タスクは互いに独立しており、したがって所望に応じて並列に処理され得る。
翻訳されたデータ282は、特定の翻訳されたワードまたはフレーズ304について分析されて(たとえばサブ・タスク3_2)、特定の翻訳されたワードまたはフレーズのリストを作成する。翻訳されたデータ282は、元のデータの言語に逆翻訳308されて(たとえばサブ・タスク1_4)、再翻訳されたデータ284を作成する。これら2つのタスクは、翻訳タスク(たとえばタスク1_3)に依存しており、したがって翻訳タスクの後に順序付けられる必要があり、それはパイプライン順序または直列順序であり得る。次いで、再翻訳されたデータ284は、(一方向または他方向あるいはその両方で)適切に翻訳されなかったワードまたはフレーズあるいはその両方を見つけ出すために元のデータ92と比較310されて、誤って翻訳されたワード294のリストを作成する。したがって、比較タスク(たとえばサブ・タスク1_5)310は、翻訳306および再翻訳タスク308(たとえばサブ・タスク1_3および1_4)の後に順序付けられる。
誤って翻訳されたワードのリスト294は、ワードが非ワードであるために適切に翻訳されなかったワードを識別するために非ワードのリスト290と比較312されて、非ワードによるエラーのリスト292を作成する。加えて、誤って翻訳されたワードのリスト294は、適切に翻訳された固有のワードを識別するために固有のワードのリスト298と比較314されて、正しく翻訳されたワードのリスト296を作成する。この比較は、適切に翻訳されなかった固有のワードを識別して、適切に翻訳されなかった固有のワードのリストを作成することもできる。ワード(たとえば、特定のワードまたはフレーズあるいはその両方、非ワード、固有のワード、翻訳されたワードまたはフレーズあるいはその両方など)の各リストは、ワードまたはフレーズあるいはその両方、それが何回使用されるか、データ内でそれが使用されるか、またはワードまたはフレーズあるいはその両方に関する要求された任意の他の情報、あるいはそれらの組合せを含み得ることに留意されたい。
図31は、図30の例のためのデータおよびタスク・コードを記憶する散在ストレージおよびタスク処理ネットワーク(DSTN)モジュールの例の概略ブロック図である。図示されるように、DS符号化データ2は、符号化されたデータ・スライスとしてDST実行ユニット1〜5のメモリを横切って記憶され(たとえば、メモリ88に記憶され)、(タスク1の)DS符号化タスク・コード1、およびDS符号化タスク3は、符号化されたタスク・スライスとしてDST実行ユニット1〜5のメモリを横切って記憶され、(タスク2の)DS符号化タスク・コード2は、符号化されたタスク・スライスとしてDST実行ユニット3〜7のメモリを横切って記憶される。図29のデータ記憶情報テーブルおよびタスク記憶情報テーブルに示されるように、各データ/タスクは、それらの復号閾値/ピラー幅に関して3/5のDSパラメータを有し、したがって5つのDST実行ユニットのメモリにまたがっている。
図32は、図30の例のための散在ストレージおよびタスク(DST)割り振り情報242の例の図である。DST割り振り情報242は、データ・パーティション化情報320、タスク実行情報322、および中間結果情報324を含む。データ・パーティション化情報320は、データ識別子(ID)、データを分割するパーティションの数、各データ・パーティションについてのアドレス情報、および、DS符号化データがピラーグルーピングからスライス・グルーピングに変換されるべきかどうかを含む。タスク実行情報322は、タスク識別フィールド326、タスク順序付けフィールド328、データ・パーティション・フィールドID330、およびデータ・パーティションごとの分散タスク処理に使用するDT実行モジュールのセット332を有する、表形式情報を含む。中間結果情報324は、IDフィールド334、対応する中間結果を処理するために割り当てられたDST実行ユニットのID336、スクラッチ・パッド・ストレージ・フィールド338、および中間結果ストレージ・フィールド340を有する、表形式情報を含む。
タスク1〜3がデータ2に対して分散されて実行される図30の例に引き続き、データ・パーティション化情報はデータ2のIDを含む。加えて、タスク分散モジュールは、DS符号化データ2が、分散コンピューティングに対して適切なフォーマットである(たとえば、スライス・グルーピングとして記憶されている)かどうかを決定する。そうでない場合、タスク分散モジュールは、DS符号化データ2のフォーマットがピラーグルーピング・フォーマットからスライス・グルーピング・フォーマットに変更される必要があることを示し、変更がDSTNモジュールによって行われることになる。加えて、タスク分散モジュールは、データを分割するパーティションの数(たとえば、2_1〜2_z)、および各パーティションについてのアドレス情報を決定する。
タスク分散モジュールは、実行されるべき各サブ・タスクに対するタスク実行情報部におけるエントリを生成する。たとえば、タスク1_1(たとえば、データ上の非ワードを識別する)は、タスク順序付けを持たず(すなわち、他のサブ・タスクの結果から独立し)、DT実行モジュール1_1、2_1、3_1、4_1、および5_1によってデータ・パーティション2_1〜2_zに対して実行されることになる。たとえば、DT実行モジュール1_1、2_1、3_1、4_1、および5_1は、データ・パーティション2_1〜2_zにおいて非ワードを検索して、タスク1_1中間結果(R1−1、すなわち非ワードのリスト)を作成する。タスク1_2(たとえば、固有のワード識別する)は、タスク1_1と同様のタスク実行情報を有し、タスク1_2中間結果(R1−2、すなわち固有のワードのリスト)を作成する。
タスク1_3(たとえば、翻訳する)は、順序付けられていない(すなわち独立した)タスク実行情報を含み、DT実行モジュール1_1、2_1、3_1、4_1、および5_1にデータ・パーティション2_1〜2_4を翻訳させ、DT実行モジュール1_2、2_2、3_2、4_2、および5_2にデータ・パーティション2_5〜2_zを翻訳させて、タスク1_3中間結果(R1−3、すなわち翻訳されたデータ)を作成する。この例では、データ・パーティションがグループ化され、異なるセットのDT実行モジュールが、各データ・パーティション・グループに対して分散サブ・タスク(またはタスク)を実行し、それにより、さらなる並列処理が可能になる。
タスク1_4(たとえば、逆翻訳する)は、タスク1_3の後に順序付けられ、タスク1_3の中間結果(たとえばR1−3_1)(たとえば翻訳されたデータ)に対して実行されることになる。DT実行モジュール1_1、2_1、3_1、4_1、および5_1は、タスク1_3中間結果パーティションR1−3_1〜R1−3_4を逆翻訳するように割り振られ、DT実行モジュール1_2、2_2、6_1、7_1、および7_2は、タスク1_3中間結果パーティションR1−3_5〜R1−3_zを逆翻訳するように割り振られて、タスク1_4中間結果(R1−4、すなわち逆翻訳されたデータ)を作成する。
タスク1_5(たとえば、データと翻訳されたデータを比較して翻訳エラーを識別する)は、タスク1_4の後に順序付けられ、タスク1_4の中間結果(R4−1)およびデータに対して実行されることになる。DT実行モジュール1_1、2_1、3_1、4_1、および5_1は、データ・パーティション(2_1〜2_z)をタスク1_4中間結果パーティションR1−4_1〜R1−4_zのパーティションと比較して、タスク1_5中間結果(R1−5、すなわち誤って翻訳されたワードのリスト)を作成するように割り振られる。
タスク1_6(たとえば、非ワード翻訳エラーを決定する)は、タスク1_1および1_5の後に順序付けられ、タスク1_1および1_5の中間結果(R1−1およびR1−5)に対して実行されることになる。DT実行モジュール1_1、2_1、3_1、4_1、および5_1は、タスク1_1中間結果(R1−1_1〜R1−1_z)のパーティションをタスク1_5中間結果パーティション(R1−5_1〜R1−5_z)のパーティションと比較して、タスク1_6中間結果(R1−6、すなわち非ワードによる翻訳エラーのリスト)を作成するように割り振られる。
タスク1_7(たとえば、正しく翻訳されたワードを決定する)は、タスク1_2および1_5の後に順序付けられ、タスク1_2および1_5の中間結果(R1−1およびR1−5)に対して実行されることになる。DT実行モジュール1_2、2_2、3_2、4_2、および5_2は、タスク1_2中間結果(R1−2_1〜R1−2_z)のパーティションをタスク1_5中間結果パーティション(R1−5_1〜R1−5_z)のパーティションと比較して、タスク1_7中間結果(R1−7、すなわち正しく翻訳されたワードのリスト)を作成するように割り振られる。
タスク2(たとえば、特定のワードまたはフレーズあるいはその両方を見つけ出す)は、タスク順序付けを持たず(すなわち、他のサブ・タスクの結果から独立し)、DT実行モジュール3_1、4_1、5_1、6_1、および7_1によってデータ・パーティション2_1〜2_zに対して実行されることになる。たとえば、DT実行モジュール3_1、4_1、5_1、6_1、および7_1は、データ・パーティション2_1〜2_zにおいて特定のワードまたはフレーズあるいはその両方を検索して、タスク2中間結果(R2、すなわち特定のワードまたはフレーズあるいはその両方のリスト)を作成する。
タスク3_2(たとえば、特定の翻訳されたワードまたはフレーズあるいはその両方を見つけ出す)は、タスク1_3(たとえば、翻訳する)の後に順序付けられ、DT実行モジュール1_2、2_2、3_2、4_2、および5_2によってパーティションR1−3_1〜R1−3_zに対して実行されることになる。たとえば、DT実行モジュール1_2、2_2、3_2、4_2、および5_2は、翻訳されたデータのパーティション(R1−3_1〜R1−3_z)において特定の翻訳されたワードまたはフレーズあるいはその両方を検索して、タスク3_2中間結果(R3−2、すなわち特定の翻訳されたワードまたはフレーズあるいはその両方のリスト)を作成する。
各タスクについて、中間結果情報は、どのDSTユニットがタスクの実行の監督を担っているかを示し、必要な場合、割り振られたDT実行ユニットのセットによって生成された部分的結果の処理を示す。加えて、中間結果情報は、タスクのためのスクラッチパッド・メモリ、および対応する中間結果がどこに記憶されるべきかを示す。たとえば、中間結果R1−1(タスク1_1の中間結果)に関して、DSTユニット1は、タスク1_1の実行の監督を担い、DST実行ユニット1〜5のメモリに記憶される符号化中間結果スライスとして中間結果のストレージを調整する。一般に、スクラッチ・パッドは、非DS符号化中間結果の記憶向けであり、中間結果ストレージは、DS符号化中間結果の記憶向けである。
図33〜図38は、図30の例を実行する散在ストレージおよびタスク・ネットワーク(DSTN)モジュールの概略ブロック図である。図33では、DSTNモジュールが、データ92にアクセスし、散在ストレージおよびタスク・ネットワーク(DST)割り振り情報に従って複数のパーティション1〜zにパーティション化する。各データ・パーティションについて、DSTNは、DST割り振り情報に従ってタスク(たとえば、データ・パーティション内の非ワード(すなわち参照辞書にない)を識別する)を実行するために、そのDT(分散タスク)実行モジュール90のセットを識別する。データ・パーティションごとに、DT実行モジュール90のセットは、同じ、異なる、またはその組合せであり得る(たとえば、いくつかのデータ・パーティションが同じセットを使用する一方、他のデータ・パーティションは異なるセットを使用する)。
第1のデータ・パーティションについて、第1のセットのDT実行モジュール(たとえば、図32のDST割り振り情報における1_1、2_1、3_1、4_1、および5_1)が、タスク1_1を実行して、第1のデータ・パーティションで見つけ出された非ワードの第1の部分的結果102を作成する。第2のセットのDT実行モジュール(たとえば、図32のDST割り振り情報における1_1、2_1、3_1、4_1、および5_1)が、タスク1_1を実行して、第2のデータ・パーティションで見つけ出された非ワードの第2の部分的結果102を作成する。(DST割り振り情報におけるような)DT実行モジュールのセットがデータに対してタスク1_1を行い、これは、DT実行モジュールの「z」セットが「第z」のデータ・パーティションに対してタスク1_1を実行して「第z」のデータ・パーティションで見つけ出された非ワードの「第z」の部分的結果102を作成するまで行われる。
図32のDST割り振り情報に示されるように、DST実行ユニット1は、第1〜「第z」の部分的結果を処理して、データ内で見つけ出された非ワードのリストである第1の中間結果(R1−1)を作成するように割り当てられる。たとえば、各セットのDT実行モジュール90は、(DST割り振りで識別されるまたはDST実行ユニット1により決定され得る)DST実行ユニット1のスクラッチパッド・メモリにそれぞれの部分的結果を記憶する。DST実行1の処理モジュールは、第1〜「第z」の部分的結果を集約して第1の中間結果(たとえばR1_1)を作成するように従事する。処理モジュールは、スクラッチパッド・メモリまたはDST実行ユニット1のメモリの別の部分に、非DSエラー符号化データとして第1の中間結果を記憶する。
DST実行ユニット1は、そのDSTクライアント・モジュールを、第1の中間結果(たとえば非ワードのリスト)をスライス・グルーピング・ベースでDSエラー符号化することに従事させる。符号化を開始するために、DSTクライアント・モジュールは、非ワードのリストがパーティション化するのに十分なサイズ(たとえば、テラバイトより大きい)かどうかを決定する。はいの場合、それは、第1の中間結果(R1−1)をパーティション化して複数のパーティション(たとえば、R1−1_1〜R1−1_m)にする。第1の中間結果がパーティション化するのに十分なサイズでない場合、それはパーティション化されない。
第1の中間結果の各パーティションに対してまたは第1の中間結果に対して、DSTクライアント・モジュールは、データのDSエラー符号化パラメータ(たとえば、3/5の復号閾値/ピラー幅比を含むデータ2のDSパラメータ)を使用してスライス・グルーピングを作成する。スライス・グルーピングは、中間結果メモリ(たとえば、DST実行ユニット1〜5のメモリにおける割り振られたメモリ)に記憶される。
図34では、DSTNモジュールは、データ92に対してタスク1_2(たとえば、固有のワードを見つけ出す)を実行している。開始するために、DSTNモジュールは、データ92にアクセスし、DST割り振り情報に従ってそれを複数のパーティション1〜zにパーティション化し、あるいは、パーティション化が同じ場合はタスク1_1のデータ・パーティションを使用することができる。各データ・パーティションについて、DSTNは、DST割り振り情報に従ってタスク1_2を実行するために、そのDT実行モジュールのセットを識別する。データ・パーティションごとに、DT実行モジュールのセットは、同じ、異なる、またはその組合せであり得る。データ・パーティションに対して、割り振られたセットのDT実行モジュールは、タスク1_2を実行してデータ・パーティションで見つけ出された固有のワードの部分的結果(たとえば、第1〜「第z」)を作成する。
図32のDST割り振り情報に示されるように、DST実行ユニット1は、タスク1_2の第1〜「第z」の部分的結果102を処理して、データ92内で見つけ出された固有のワードのリストである第2の中間結果(R1−2)を作成するように割り当てられる。DST実行1の処理モジュールは、固有のワードの第1〜「第z」の部分的結果を集約して第2の中間結果を作成するように従事する。処理モジュールは、スクラッチパッド・メモリ、またはDST実行ユニット1のメモリの別の部分に、非DSエラー符号化データとして第2の中間結果を記憶する。
DST実行ユニット1は、そのDSTクライアント・モジュールを、第2の中間結果(たとえば非ワードのリスト)をスライス・グルーピング・ベースでDSエラー符号化することに従事させる。符号化を開始するために、DSTクライアント・モジュールは、固有のワードのリストがパーティション化するのに十分なサイズ(たとえば、テラバイトより大きい)かどうかを決定する。はいの場合、それは、第2の中間結果(R1−2)をパーティション化して複数のパーティション(たとえば、R1−2_1〜R1−2_m)にする。第2の中間結果がパーティション化するのに十分なサイズでない場合、それはパーティション化されない。
第2の中間結果の各パーティションに対してまたは第2の中間結果に対して、DSTクライアント・モジュールは、データのDSエラー符号化パラメータ(たとえば、3/5の復号閾値/ピラー幅比を含むデータ2のDSパラメータ)を使用してスライス・グルーピングを作成する。スライス・グルーピングは、中間結果メモリ(たとえば、DST実行ユニット1〜5のメモリにおける割り振られたメモリ)に記憶される。
図35では、DSTNモジュールは、データ92に対してタスク1_3(たとえば、翻訳する)を実行している。開始するために、DSTNモジュールは、データ92にアクセスし、DST割り振り情報に従ってそれを複数のパーティション1〜zにパーティション化し、あるいは、パーティション化が同じ場合はタスク1_1のデータ・パーティションを使用することができる。各データ・パーティションについて、DSTNは、DST割り振り情報に従ってタスク1_3を実行するために、そのDT実行モジュールのセットを識別する(たとえば、DT実行モジュール1_1、2_1、3_1、4_1、および5_1は、データ・パーティション2_1〜2_4を翻訳し、DT実行モジュール1_2、2_2、3_2、4_2、および5_2は、データ・パーティション2_5〜2_zを翻訳する)。データ・パーティションに対して、割り振られたセットのDT実行モジュール90は、翻訳されたデータの部分的結果102(たとえば、第1〜「第z」)を作成する。
図32のDST割り振り情報に示されるように、DST実行ユニット2は、タスク1_3の第1〜「第z」の部分的結果を処理して、翻訳されたデータである第3の中間結果(R1−3)を作成するように割り当てられる。DST実行2の処理モジュールは、翻訳されたデータの第1〜「第z」の部分的結果を集約して第3の中間結果を作成するように従事する。処理モジュールは、スクラッチパッド・メモリ、またはDST実行ユニット2のメモリの別の部分に、非DSエラー符号化データとして第3の中間結果を記憶する。
DST実行ユニット2は、そのDSTクライアント・モジュールを、第3の中間結果(たとえば翻訳されたデータ)をスライス・グルーピング・ベースでDSエラー符号化することに従事させる。符号化を開始するために、DSTクライアント・モジュールは、第3の中間結果(R1−3)をパーティション化して複数のパーティション(たとえば、R1−3_1〜R1−3_y)にする。第3の中間結果の各パーティションに対して、DSTクライアント・モジュールは、データのDSエラー符号化パラメータ(たとえば、3/5の復号閾値/ピラー幅比を含むデータ2のDSパラメータ)を使用してスライス・グルーピングを作成する。スライス・グルーピングは、中間結果メモリ(たとえば、DST割り振り情報においてDST実行ユニット2〜6のメモリにおける割り振られたメモリ)に記憶される。
図35にさらに示されるように、DSTNモジュールは、第3の中間結果の翻訳されたデータに対してタスク1_4(たとえば、再翻訳する)を実行している。開始するために、DSTNモジュールは、(スクラッチパッド・メモリまたは中間結果メモリにおける)翻訳されたデータにアクセスし(それを復号し)、DST割り振り情報に従ってそれを複数のパーティションにパーティション化する。第3の中間結果の各パーティションについて、DSTNは、DST割り振り情報に従ってタスク1_4を実行するために、そのDT実行モジュール90のセットを識別する(たとえば、DT実行モジュール1_1、2_1、3_1、4_1、および5_1は、パーティションR1−3_1〜R1−3_4を逆翻訳するように割り振られ、DT実行モジュール1_2、2_2、6_1、7_1、および7_2は、パーティションR1−3_5〜R1−3_zを逆翻訳するように割り振られる)。データ・パーティションに対して、割り振られたセットのDT実行モジュールは、タスク1_4を実行して、再翻訳されたデータの部分的結果102(たとえば、第1〜「第z」)を作成する。
図32のDST割り振り情報に示されるように、DST実行ユニット3は、タスク1_4の第1〜「第z」の部分的結果を処理して、再翻訳されたデータである第4の中間結果(R1−4)を作成するように割り当てられる。DST実行3の処理モジュールは、翻訳されたデータの第1〜「第z」の部分的結果を集約して第4の中間結果を作成するように従事する。処理モジュールは、スクラッチパッド・メモリ、またはDST実行ユニット3のメモリの別の部分に、非DSエラー符号化データとして第4の中間結果を記憶する。
DST実行ユニット3は、そのDSTクライアント・モジュールを、第4の中間結果(たとえば再翻訳されたデータ)をスライス・グルーピング・ベースでDSエラー符号化することに従事させる。符号化を開始するために、DSTクライアント・モジュールは、第4の中間結果(R1−4)をパーティション化して複数のパーティション(たとえば、R1−4_1〜R1−4_z)にする。第4の中間結果の各パーティションに対して、DSTクライアント・モジュールは、データのDSエラー符号化パラメータ(たとえば、3/5の復号閾値/ピラー幅比を含むデータ2のDSパラメータ)を使用してスライス・グルーピングを作成する。スライス・グルーピングは、中間結果メモリ(たとえば、DST割り振り情報においてDST実行ユニット3〜7のメモリにおける割り振られたメモリ)に記憶される。
図36では、散在ストレージおよびタスク・ネットワーク(DSTN)モジュールは、図35のデータ92および再翻訳されたデータに対してタスク1_5(たとえば、比較する)を実行している。開始するために、DSTNモジュールは、データ92にアクセスし、DST割り振り情報に従ってそれを複数のパーティションにパーティション化し、あるいは、パーティション化が同じ場合はタスク1_1のデータ・パーティションを使用することができる。DSTNモジュールはまた、スクラッチパッド・メモリまたは中間結果メモリにおける再翻訳されたデータにアクセスし、それを復号し、DST割り振り情報に従ってそれを複数のパーティションにパーティション化する。再翻訳されたデータのパーティションの数は、データのパーティションの数に対応する。
パーティションの各ペア(たとえば、データ・パーティション1および再翻訳されたデータ・パーティション1)について、DSTNは、DST割り振り情報に従ってタスク1_5を実行するために、そのDT実行モジュール90のセットを識別する(たとえば、DT実行モジュール1_1、2_1、3_1、4_1、および5_1)。パーティションの各ペアに対して、割り振られたセットのDT実行モジュールは、タスク1_5を実行して、誤って翻訳されたワードまたはフレーズあるいはその両方のリストの部分的結果102(たとえば、第1〜「第z」)を作成する。
図32のDST割り振り情報に示されるように、DST実行ユニット1は、タスク1_5の第1〜「第z」の部分的結果を処理して、誤って翻訳されたワードまたはフレーズあるいはその両方のリストである第5の中間結果(R1−5)を作成するように割り当てられる。特に、DST実行1の処理モジュールは、誤って翻訳されたワードまたはフレーズあるいはその両方のリストの第1〜「第z」の部分的結果を集約して第5の中間結果を作成するように従事する。処理モジュールは、スクラッチパッド・メモリ、またはDST実行ユニット1のメモリの別の部分に、非DSエラー符号化データとして第5の中間結果を記憶する。
DST実行ユニット1は、そのDSTクライアント・モジュールを、第5の中間結果をスライス・グルーピング・ベースでDSエラー符号化することに従事させる。符号化を開始するために、DSTクライアント・モジュールは、第5の中間結果(R1−5)をパーティション化して複数のパーティション(たとえば、R1−5_1〜R1−5_z)にする。第5の中間結果の各パーティションに対して、DSTクライアント・モジュールは、データのDSエラー符号化パラメータ(たとえば、3/5の復号閾値/ピラー幅比を含むデータ2のDSパラメータ)を使用してスライス・グルーピングを作成する。スライス・グルーピングは、中間結果メモリ(たとえば、DST割り振り情報においてDST実行ユニット1〜5のメモリにおける割り振られたメモリ)に記憶される。
図36にさらに示されるように、DSTNモジュールは、誤って翻訳されたワードまたはフレーズあるいはその両方のリスト(たとえば、第5の中間結果R1−5)、および非ワードのリスト(たとえば、第1の中間結果R1−1)に対して、タスク1_6(たとえば、非ワードによる翻訳エラー)を実行している。開始するために、DSTNモジュールは、リストにアクセスし、それらを対応する数のパーティションにパーティション化する。
パーティションの各ペア(たとえば、パーティションR1−1_1およびパーティションR1−5_1)について、DSTNは、DST割り振り情報に従ってタスク1_6を実行するために、そのDT実行モジュール90のセットを識別する(たとえば、DT実行モジュール1_1、2_1、3_1、4_1、および5_1)。パーティションの各ペアに対して、割り振られたセットのDT実行モジュールは、タスク1_6を実行して、誤って翻訳されたワードまたはフレーズあるいはその両方のリストの部分的結果102(たとえば、第1〜「第z」)を作成する。
図32のDST割り振り情報に示されるように、DST実行ユニット2は、タスク1_6の第1〜「第z」の部分的結果を処理して、非ワードのため誤って翻訳されたワードまたはフレーズあるいはその両方のリストである第6の中間結果(R1−6)を作成するように割り当てられる。特に、DST実行2の処理モジュールは、非ワードのため誤って翻訳されたワードまたはフレーズあるいはその両方のリストの第1〜「第z」の部分的結果を集約して第6の中間結果を作成するように従事する。処理モジュールは、スクラッチパッド・メモリ、またはDST実行ユニット2のメモリの別の部分に、非DSエラー符号化データとして第6の中間結果を記憶する。
DST実行ユニット2は、そのDSTクライアント・モジュールを、第6の中間結果をスライス・グルーピング・ベースでDSエラー符号化することに従事させる。符号化を開始するために、DSTクライアント・モジュールは、第6の中間結果(R1−6)をパーティション化して複数のパーティション(たとえば、R1−6_1〜R1−6_z)にする。第6の中間結果の各パーティションに対して、DSTクライアント・モジュールは、データのDSエラー符号化パラメータ(たとえば、3/5の復号閾値/ピラー幅比を含むデータ2のDSパラメータ)を使用してスライス・グルーピングを作成する。スライス・グルーピングは、中間結果メモリ(たとえば、DST割り振り情報においてDST実行ユニット2〜6のメモリにおける割り振られたメモリ)に記憶される。
図36にさらに示されるように、DSTNモジュールは、誤って翻訳されたワードまたはフレーズあるいはその両方のリスト(たとえば、第5の中間結果R1−5)、および固有のワードのリスト(たとえば、第2の中間結果R1−2)に対して、タスク1_7(たとえば、正しく翻訳されたワードまたはフレーズあるいはその両方)を実行している。開始するために、DSTNモジュールは、リストにアクセスし、それらを対応する数のパーティションにパーティション化する。
パーティションの各ペア(たとえば、パーティションR1−2_1およびパーティションR1−5_1)について、DSTNは、DST割り振り情報に従ってタスク1_7を実行するために、そのDT実行モジュール90のセットを識別する(たとえば、DT実行モジュール1_2、2_2、3_2、4_2、および5_2)。パーティションの各ペアに対して、割り振られたセットのDT実行モジュールは、タスク1_7を実行して、正しく翻訳されたワードまたはフレーズあるいはその両方のリストの部分的結果102(たとえば、第1〜「第z」)を作成する。
図32のDST割り振り情報に示されるように、DST実行ユニット3は、タスク1_7の第1〜「第z」の部分的結果を処理して、正しく翻訳されたワードまたはフレーズあるいはその両方のリストである第7の中間結果(R1−7)を作成するように割り当てられる。特に、DST実行3の処理モジュールは、正しく翻訳されたワードまたはフレーズあるいはその両方のリストの第1〜「第z」の部分的結果を集約して第7の中間結果を作成するように従事する。処理モジュールは、スクラッチパッド・メモリ、またはDST実行ユニット3のメモリの別の部分に、非DSエラー符号化データとして第7の中間結果を記憶する。
DST実行ユニット3は、そのDSTクライアント・モジュールを、第7の中間結果をスライス・グルーピング・ベースでDSエラー符号化することに従事させる。符号化を開始するために、DSTクライアント・モジュールは、第7の中間結果(R1−7)をパーティション化して複数のパーティション(たとえば、R1−7_1〜R1−7_z)にする。第7の中間結果の各パーティションに対して、DSTクライアント・モジュールは、データのDSエラー符号化パラメータ(たとえば、3/5の復号閾値/ピラー幅比を含むデータ2のDSパラメータ)を使用してスライス・グルーピングを作成する。スライス・グルーピングは、中間結果メモリ(たとえば、DST割り振り情報においてDST実行ユニット3〜7のメモリにおける割り振られたメモリ)に記憶される。
図37では、散在ストレージおよびタスク・ネットワーク(DSTN)モジュールは、データ92に対してタスク2(たとえば、特定のワードまたはフレーズあるいはその両方を見つけ出す)を行っている。開始するために、DSTNモジュールは、データにアクセスし、DST割り振り情報に従ってそれを複数のパーティション1〜zにパーティション化し、あるいは、パーティション化が同じ場合はタスク1_1のデータ・パーティションを使用することができる。各データ・パーティションについて、DSTNは、DST割り振り情報に従ってタスク2を実行するために、そのDT実行モジュールのセットを識別する。データ・パーティションごとに、DT実行モジュールのセットは、同じ、異なる、またはその組合せであり得る。データ・パーティションに対して、割り振られたセットのDT実行モジュールは、タスク2を実行して、データ・パーティションで見つけ出された特定のワードまたはフレーズあるいはその両方の部分的結果102(たとえば、第1〜第z)を作成する。
図32のDST割り振り情報に示されるように、DST実行ユニット7は、タスク2の第1〜「第z」の部分的結果を処理して、データ内で見つけ出された特定のワードまたはフレーズあるいはその両方のリストであるタスク2中間結果(R2)を作成するように割り当てられる。DST実行7の処理モジュールは、特定のワードまたはフレーズあるいはその両方の第1〜「第z」の部分的結果を集約してタスク2中間結果を作成するように従事する。処理モジュールは、スクラッチパッド・メモリ、またはDST実行ユニット7のメモリの別の部分に、非DSエラー符号化データとしてタスク2中間結果を記憶する。
DST実行ユニット7は、そのDSTクライアント・モジュールを、タスク2中間結果をスライス・グルーピング・ベースでDSエラー符号化することに従事させる。符号化を開始するために、DSTクライアント・モジュールは、特定のワードまたはフレーズあるいはその両方のリストがパーティション化するのに十分なサイズ(たとえば、テラバイトより大きい)かどうかを決定する。はいの場合、それは、タスク2中間結果(R2)をパーティション化して複数のパーティション(たとえば、R2_1〜R2_m)にする。タスク2中間結果がパーティション化するのに十分なサイズでない場合、それはパーティション化されない。
タスク2中間結果の各パーティションに対してまたはタスク2中間結果に対して、DSTクライアント・モジュールは、データのDSエラー符号化パラメータ(たとえば、3/5の復号閾値/ピラー幅比を含むデータ2のDSパラメータ)を使用してスライス・グルーピングを作成する。スライス・グルーピングは、中間結果メモリ(たとえば、DST実行ユニット1〜4および7のメモリにおける割り振られたメモリ)に記憶される。
図38では、散在ストレージおよびタスク・ネットワーク(DSTN)モジュールは、翻訳されたデータ(R1−3)に対してタスク3(たとえば、特定の翻訳されたワードまたはフレーズあるいはその両方を見つけ出す)を実行している。開始するために、DSTNモジュールは、(スクラッチパッド・メモリまたは中間結果メモリにおける)翻訳されたデータにアクセスし(それを復号し)、DST割り振り情報に従ってそれを複数のパーティションにパーティション化する。各パーティションについて、DSTNは、DST割り振り情報に従ってタスク3を実行するために、そのDT実行モジュールのセットを識別する。データ・パーティションごとに、DT実行モジュールのセットは、同じ、異なる、またはその組合せであり得る。データ・パーティションに対して、割り振られたセットのDT実行モジュール90は、タスク3を実行して、データ・パーティションで見つけ出された特定の翻訳されたワードまたはフレーズあるいはその両方の部分的結果102(たとえば、第1〜「第z」)を作成する。
図32のDST割り振り情報に示されるように、DST実行ユニット5は、タスク3の第1〜「第z」の部分的結果を処理して、翻訳されたデータ内で見つけ出された特定のワードまたはフレーズあるいはその両方のリストであるタスク3中間結果(R3)を作成するように割り当てられる。特に、DST実行5の処理モジュールは、特定の翻訳されたワードまたはフレーズあるいはその両方の第1〜「第z」の部分的結果を集約してタスク3中間結果を作成するように従事する。処理モジュールは、スクラッチパッド・メモリ、またはDST実行ユニット7のメモリの別の部分に、非DSエラー符号化データとしてタスク3中間結果を記憶する。
DST実行ユニット5は、そのDSTクライアント・モジュールを、タスク3中間結果をスライス・グルーピング・ベースでDSエラー符号化することに従事させる。符号化を開始するために、DSTクライアント・モジュールは、特定の翻訳されたワードまたはフレーズあるいはその両方のリストがパーティション化するのに十分なサイズ(たとえば、テラバイトより大きい)かどうかを決定する。はいの場合、それは、タスク3中間結果(R3)をパーティション化して複数のパーティション(たとえば、R3_1〜R3_m)にする。タスク3中間結果がパーティション化するのに十分なサイズでない場合、それはパーティション化されない。
タスク3中間結果の各パーティションに対してまたはタスク3中間結果に対して、DSTクライアント・モジュールは、データのDSエラー符号化パラメータ(たとえば、3/5の復号閾値/ピラー幅比を含むデータ2のDSパラメータ)を使用してスライス・グルーピングを作成する。スライス・グルーピングは、中間結果メモリ(たとえば、DST実行ユニット1〜4、5、および7のメモリにおける割り振られたメモリ)に記憶される。
図39は、図30の例のための結果情報を最終結果104として組み合わせる例の図である。この例では、結果情報は、データ内で見つけ出された特定のワードまたはフレーズあるいはその両方のリスト(タスク2中間結果)、データ内で見つけ出された特定の翻訳されたワードまたはフレーズあるいはその両方のリスト(タスク3中間結果)、データ内で見つけ出された非ワードのリスト(タスク1の第1の中間結果R1−1)、データ内で見つけ出された固有のワードのリスト(タスク1の第2の中間結果R1−2)、非ワードによる翻訳エラーのリスト(タスク1の第6の中間結果R1−6)、および正しく翻訳されたワードまたはフレーズあるいはその両方のリスト(タスク1の第7の中間結果R1−7)を含む。タスク分散モジュールは、結果情報を結果104として要求元DSTクライアント・モジュールに提供する。
図40は、散在ストレージ・ネットワーク(DSN)の実施形態の概略ブロック図であり、散在ストレージ・ネットワーク(DSN)は、図1の散在ストレージおよびタスク(DST)クライアント・モジュール34、図1のネットワーク24、ならびに記憶世代1〜5を含む複数の記憶世代を含む。DSTクライアント・モジュール34は、確定関数モジュール350を含む。確定関数モジュール350は、図3の処理モジュール84を利用して実装され得る。各記憶世代は、DST実行(EX)ユニット1〜nのセットを含む。各DST実行ユニットは、図1のDST実行ユニット36を利用して実装され得る。
DSNは、複数の記憶世代から多世代記憶されたデータを取り出すように機能する。多世代記憶されたデータを取り出す動作の例において、DSTクライアント・モジュール34は、データ・オブジェクトに関連付けられたアクセス要求352を受け取る。アクセス要求352は、データ・オブジェクト名(たとえば、foo)、要求タイプ・インジケータ(たとえば、読取り、書込み、削除、更新、リスト、すなわち取出し要求)、および要求エンティティ識別子(ID)のうちの1つまたは複数を含む。アクセス要求352を受け取ると、DSTクライアント・モジュール34は、アクセス要求352に関連付けられた格納域識別子(ID)を入手する。その入手することは、データ・オブジェクト名を使用して探索を実行すること、および、アクセス要求と格納域IDとの間の関連(たとえば、要求エンティティIDと格納域IDの関係)を識別することのうちの少なくとも一方を含む。たとえば、DSTクライアント・モジュール34は、格納域IDを探索するために要求エンティティIDを使用してシステム・レジストリ情報にアクセスする。
格納域IDを入手すると、DSTクライアント・モジュール34は、データ・オブジェクト名に基づいて、メタデータ・アドレス情報を取り出すための第1の取出し要求を生成し、第1の取出し要求は、DSNの読取り要求フォーマットに従ってフォーマットされる(たとえば、スライス読取り要求354)。その生成することは、少なくとも復号閾値数のメタデータ・アドレス情報スライスを取り出すための第1レベル読取り要求(たとえば取出し要求1)のセットを生成する。ここで、メタデータ・アドレス情報は、DSN内のメタデータの記憶に関するアドレス情報(たとえば記憶世代識別子)を含んでおり、メタデータ・アドレス情報は、散在ストレージ・エラー符号化されて、メタデータ・アドレス情報スライスのセットを作成しており、復号閾値数のメタデータ・アドレス情報スライスは、メタデータ・アドレス情報を復元するために必要とされる、メタデータ・アドレス情報スライスのセットのうちの最少数のメタデータ・アドレス情報スライスを表す。その生成することはさらに、アクセス要求352に基づいて複数の記憶世代のうちから記憶世代を識別することを含む。たとえば、確定関数モジュール350は、アクセス要求352のデータ・オブジェクト名に対して確定関数を実行して、第1レベル読取り要求のセットに関連付けられたDSNアドレスの少なくとも部分を作成する(たとえば、複数の世代のうちの固定された世代、すなわち世代4を識別する)。確定関数は、ハッシュベースのメッセージ認証コード、ハッシュ関数、マスク生成関数、およびスポンジ関数のうちの少なくとも1つを含む。確定関数モジュール350の動作については図41を参照してより詳細に論じられる。
第1の取出し要求の第1レベル読取り要求のセットを生成すると、DSTクライアント・モジュール34は、ネットワーク24を介して、取出し要求1を記憶世代4(たとえば、データ・オブジェクト名に関連付けられた識別された固定世代)のDST実行ユニットに送り、取出し応答1を含むスライス読取り応答356を受け取り、スライス読取り応答356から少なくとも復号閾値数のメタデータ・アドレス情報スライスを抽出する。少なくとも復号閾値数のメタデータ・アドレス情報スライスを作成すると、DSTクライアント・モジュール34は、少なくとも復号閾値数のメタデータ・アドレス情報スライスを散在ストレージ・エラー復号して、メタデータ・アドレス情報を復元する。メタデータ・アドレス情報を復元すると、DSTクライアント・モジュール34は、メタデータの記憶に関するアドレス情報を抽出する。たとえば、DSTクライアント・モジュール34は、メタデータの記憶に関するアドレス情報を抽出して、記憶世代2を識別する(たとえば、メタデータが記憶世代2に前もって記憶されている)。
メタデータ・アドレス情報を取り出すと、DSTクライアント・モジュール34は、取り出されたメタデータ・アドレス情報に基づいて、(たとえばデータ・オブジェクトの)メタデータを取り出すための第2の取出し要求を生成し、第2の取出し要求は、DSNの読取り要求フォーマットに従ってフォーマットされる。メタデータは、DSN内のデータ・オブジェクトの符号化されたデータ・スライスの複数のセットの記憶に関するアドレス情報(たとえば、データ・オブジェクトのソース名、データ・オブジェクトのスライス名の複数のセット、データ・オブジェクトの記憶に関連付けられた仮想DSNアドレス)、データ・サイズ・インジケータ、データ・タイプ・インジケータ、データ優先度インジケータ、データ所有者識別子、データ受信者識別子、データのアクセス制御リスト、タイムスタンプ、データ・オブジェクト名、格納域識別子、ディレクトリのDSNアドレス、散在階層インデックスのインデックス・ノードのDSNアドレス、世代ポインタDSNアドレス(たとえば、第1レベル読取り要求のセットに関連付けられたDSNアドレス)、およびデータ・オブジェクトに関連付けられた任意の他の情報のうちの1つまたは複数を含む。
第2の取出し要求を生成することは、メタデータ・アドレス情報に基づいて、少なくとも復号閾値数(たとえば、メタデータ・アドレス情報スライスの復号閾値数と同じまたは異なる復号閾値数)のメタデータ・スライスを取り出すための第2レベル読取り要求(たとえば取出し要求2)のセットを生成することを含むここで、メタデータは、DSN内のデータ・オブジェクトの符号化されたデータ・スライスの複数のセットの記憶に関するアドレス情報を含んでおり、メタデータは、散在ストレージ・エラー符号化されて、メタデータ・スライスのセットを作成しており、復号閾値数のメタデータ・スライスは、メタデータを復元するために必要とされるメタデータ・スライスのセットのうちの最少数のメタデータ・スライスを表す。
第2の取出し要求の第2レベル要求のセットを生成すると、DSTクライアント・モジュール34は、ネットワーク24を介して、取出し要求2を(たとえばメタデータ・アドレス情報によって示されるように)記憶世代2のDST実行ユニットに送り、取出し応答2を含むさらなるスライス読取り応答356を受け取り、当該さらなるスライス読取り応答356から、少なくとも復号閾値数のメタデータ・スライスを抽出する。少なくとも復号閾値数のメタデータ・スライスを作成すると、DSTクライアント・モジュール34は、少なくとも復号閾値数のメタデータ・スライスを散在ストレージ・エラー復号して、取り出されたメタデータとしてメタデータを復元する。
メタデータを復元すると、DSTクライアント・モジュール34は、取り出されたメタデータに基づいて、データ・オブジェクト名に関連付けられたデータ・オブジェクトの少なくとも部分を取り出すための第3の取出し要求を生成し、第3の取出し要求は、DSNの読取り要求フォーマットに従ってフォーマットされる。第3の取出し要求を生成することは、取り出されたメタデータに基づいて、少なくとも復号閾値数(たとえば、メタデータ・アドレス情報およびメタデータに関連付けられた復号閾値数と同じまたは異なる復号閾値数)の符号化されたデータ・スライスを取り出すための第3レベル読取り要求(たとえば取出し要求3)の少なくとも1つのセットを生成することを含む。ここで、データ・オブジェクトは、散在ストレージ・エラー符号化されて、対応する記憶世代に記憶された符号化データ・スライスの複数のセットを作成しており、復号閾値数の符号化されたデータ・スライスは、データ・オブジェクトの上記部分を復元するために必要とされる符号化されたデータ・スライスの複数のセットのうち1つのセットのうちの最少数の符号化されたデータ・スライスを表す。
第3レベル読取り要求の少なくとも1つのセットを生成すると、DSTクライアント・モジュール34は、ネットワーク24を介して、取出し要求3を(たとえばメタデータによって示されるように)記憶世代5のDST実行ユニットに送り、取出し応答3を含むさらに他のスライス読取り応答356を受け取り、当該さらに他のスライス読取り応答356から、少なくとも復号閾値数の符号化されたデータ・スライスを抽出する。符号化されたデータ・スライスの各セットについて、少なくとも復号閾値数の符号化されたデータ・スライスを作成すると、DSTクライアント・モジュール34は、符号化されたデータ・スライスの各セットについて、少なくとも復号閾値数の符号化されたデータ・スライスを散在ストレージ・エラー復号して、復元されたデータ・オブジェクトとしてデータ・オブジェクトを復元する。データ・オブジェクトを復元すると、DSTクライアント・モジュール34は、復元されたデータ・オブジェクトを含むアクセス応答358を発行する。
図41は、データを取り出すために使用される図40の確定関数モジュール350の実施形態を示す概略ブロック図である。図40を参照して論じられた多世代記憶されたデータを取り出す動作のさらに他の例として、確定関数モジュール350が、アクセス要求352のデータ・オブジェクト名に対して確定関数を実行して、世代ポインタ・ソース名情報360を含むデジタル値を作成する。たとえば、確定関数モジュール350は、fooのデータ・オブジェクト名に対してマスク生成関数を実行してデジタル値を作成する。確定関数を実行すると、確定関数モジュール350(たとえば、あるいは以下では任意の他の処理モジュール)が、デジタル値の第1の部分を、DSNの読取り要求フォーマットの世代識別子として使用し、デジタル値の第2の部分を、DSNの読取り要求フォーマットのオブジェクト識別子として使用する。たとえば、確定関数モジュール350は、第1の部分を世代識別子(ID)4として、第2の部分をオブジェクトID 5E8として使用する。
世代IDおよびオブジェクトIDを識別すると、確定関数モジュール350は、データ・オブジェクトに関連付けられた格納域識別子を決定することによって、第1の取出し要求を生成する。たとえば、確定関数モジュール350は、要求エンティティの識別子を利用してシステム・レジストリ探索を実行して、格納域IDである457を識別する。格納域IDを識別すると、確定関数モジュール350は、DSNの読取り要求フォーマットの格納域識別子フィールドにおいて格納域識別子を使用する。たとえば、確定関数モジュール350は、格納域IDである457、世代ID 4、およびオブジェクトIDである5E8を含むように、ソース名fooメタデータ世代ポインタ(source name for a foo metadata generation pointer)362を生成し、fooメタデータ世代ポインタ362を含むように第1の取出し要求を生成する。
第1の取出し要求を生成すると、確定関数モジュール350は、第1の取出し要求を記憶世代4に送ることによってDSNにアクセスし、fooの世代ポインタ364のメタデータ・アドレス情報スライスを受け取り、受け取られたメタデータ・アドレス情報スライスを復号してメタデータ・アドレス情報366を再現する。メタデータ・アドレス情報366は、fooメタデータオブジェクト番号CA9、およびfooメタデータ世代ID 2を含む。
メタデータ・アドレス情報366を再現すると、確定関数モジュール350は、メタデータ・アドレス情報366から世代識別子(たとえば世代2)およびオブジェクト識別子(たとえばCA9)を抽出することによって、第2の取出し要求を生成する。次に、確定関数モジュール350は、データ・オブジェクトに関連付けられた格納域識別子を決定する。格納域IDを決定すると、確定関数モジュール350は、DSNの読取り要求フォーマットの世代識別子フィールドにおいて世代識別子(たとえば2)を使用し、DSNの読取り要求フォーマットのオブジェクト識別子フィールドにおいてオブジェクト識別子(たとえばCA9)を使用し、DSNの読取り要求フォーマットの格納域識別子フィールドにおいて格納域識別子(たとえば457)を使用することよって、第2の取出し要求のソース名fooメタデータ368を生成する。
第2の取出し要求を生成すると、確定関数モジュール350は、第2の取出し要求を記憶世代2に送ることによってDSNにアクセスし、fooメタデータオブジェクト370のメタデータ・スライスを受け取り、受け取られたメタデータ・スライスを復号して(たとえばfooについての)メタデータ372を再現する。fooのメタデータ372は、ソース名fooデータ・オブジェクト374を含む。
fooのメタデータ372を再現すると、確定関数モジュール350は、ソース名fooデータ・オブジェクト374のフィールド(たとえば、格納域ID 457、世代ID 5、オブジェクトID B93)を使用することによって第3の取出し要求を生成する。第3の取出し要求を生成すると、確定関数モジュール350は、第3の取出し要求を記憶世代5に送ることによってDSNにアクセスし、記憶されたfooデータ・オブジェクト376の符号化されたデータ・スライスを受け取り、受け取られた符号化データ・スライスを散在ストレージ・エラー復号してデータ・オブジェクトfooを再現する。
図42は、多世代記憶されたデータを取り出す例を示すフローチャートである。特に、図1〜図39、図40〜図41、さらに図42と関連して説明される1つまたは複数の機能および特徴と共に用いる方法が提示される。
方法はステップ380から開始し、このステップでは、散在ストレージ・ネットワーク(DSN)の1つまたは複数のコンピューティング・デバイスのうちのコンピューティング・デバイスの処理モジュールが、取り出すデータ・オブジェクトのデータ・オブジェクト名に対して確定関数を実行して、デジタル値を作成する。デジタル値を作成すると、処理モジュールは、デジタル値の第1の部分を、第1の取出し要求に関するDSNの読取り要求フォーマットの世代識別子(ID)として使用し、デジタル値の第2の部分を、第1の取出し要求に関するDSNの読取り要求フォーマットのオブジェクト識別子として使用する。
方法はステップ382に続き、このステップでは、処理モジュールは、データ・オブジェクトに関連付けられた格納域識別子を決定する。たとえば、処理モジュールは、要求エンティティIDを利用して、システム・レジストリ探索を実行して格納域IDを作成する。別の例として、処理モジュールは、データ・オブジェクト名を利用し、ディレクトリ探索を実行して格納域IDを作成する。格納域IDを作成すると、処理モジュールは、第1の取出し要求に関するDSNの読取り要求フォーマットの格納域識別子フィールドにおいて格納域識別子を使用する。
方法はステップ384に続き、このステップでは、処理モジュールは、データ・オブジェクト名に基づいて、メタデータ・アドレス情報を取り出すための第1の取出し要求を生成し、第1の取出し要求は、DSNの読取り要求フォーマットに従ってフォーマットされる(たとえば、第1の取出し要求は、メタデータ・アドレス情報に関連付けられたDSNアドレスに対応する格納域ID、世代ID、およびオブジェクトIDを含む)。第1の取出し要求を生成することは、少なくとも復号閾値数のメタデータ・アドレス情報スライスを取り出すための第1レベル読取り要求のセットを生成することを含む。ここで、メタデータ・アドレス情報は、DSN内のメタデータの記憶に関するアドレス情報を含んでおり、メタデータ・アドレス情報は、散在ストレージ・エラー符号化されて、メタデータ・アドレス情報スライスのセットを作成しており、復号閾値数のメタデータ・アドレス情報スライスは、メタデータ・アドレス情報を復元するために必要とされる、メタデータ・アドレス情報スライスのセットのうちの最少数のメタデータ・アドレス情報スライスを表す。
方法はステップ386に続き、このステップでは、処理モジュールは、少なくとも復号閾値数のメタデータ・アドレス情報スライスを復号して、メタデータ・アドレス情報を復元する。たとえば、処理モジュールは、第1レベル読取り要求をDSNのストレージ・ユニットに送り、少なくとも復号閾値数のメタデータ・アドレス情報スライスを受け取り、少なくとも復号閾値数のメタデータ・アドレス情報スライスを散在ストレージ・エラー復号して、取り出されたメタデータ・アドレス情報を作成する。
方法はステップ388に続き、このステップでは、処理モジュールは、メタデータ・アドレス情報から世代識別子およびオブジェクト識別子を抽出する。オブジェクトIDおよび世代IDを抽出すると、処理モジュールは、第2の取出し要求に関するDSNの読取り要求フォーマットの世代識別子フィールドにおいて世代識別子を使用し、第2の取出し要求に関するDSNの読取り要求フォーマットのオブジェクト識別子フィールドにおいてオブジェクト識別子を使用する。処理モジュールはさらに、データ・オブジェクトに(たとえばメタデータに)関連付けられた格納域識別子を決定し、第2の取出し要求に関するDSNの読取り要求フォーマットの格納域識別子フィールドにおいて格納域識別子を使用することができる。
方法はステップ390に続き、このステップでは、処理モジュールは、取り出されたメタデータ・アドレス情報に基づいて、メタデータを取り出すための第2の取出し要求を生成し、第2の取出し要求は、DSNの読取り要求フォーマットに従ってフォーマットされる(たとえば、第2の取出し要求は、メタデータに関連付けられたDSNアドレスに対応するメタデータの格納域ID、メタデータの世代ID、およびメタデータのオブジェクトIDを含む)。第2の取出し要求を生成することは、メタデータ・アドレス情報に基づいて、少なくとも復号閾値数のメタデータ・スライスを取り出すための第2レベル読取り要求のセットを生成する。ここで、メタデータは、DSN内のデータ・オブジェクトの符号化されたデータ・スライスの複数のセットの記憶に関するアドレス情報を含んでおり、メタデータは、散在ストレージ・エラー符号化されて、メタデータ・スライスのセットを作成しており、復号閾値数のメタデータ・スライスは、メタデータを復元するために必要とされるメタデータ・スライスのセットのうちの最少数のメタデータ・スライスを表す。
方法はステップ392に続き、このステップでは、処理モジュールは、少なくとも復号閾値数のメタデータ・スライスを復号して、メタデータを復元する。たとえば、処理モジュールは、第2レベル読取り要求をDSNのストレージ・ユニットに送り、少なくとも復号閾値数のメタデータ・スライスを受け取り、少なくとも復号閾値数のメタデータ・スライスを散在ストレージ・エラー復号して、取り出されたメタデータを作成する。
方法はステップ394に続き、このステップでは、処理モジュールは、取り出されたメタデータに基づいて(たとえば、データ・オブジェクトの符号化されたデータ・スライスの複数のセットの記憶に関するアドレス情報を使用して)、データ・オブジェクト名に関連付けられたデータ・オブジェクトの少なくとも部分を取り出すための第3の取出し要求を生成し、第3の取出し要求は、DSNの読取り要求フォーマットに従ってフォーマットされる。その生成することは、処理モジュールが、メタデータに基づいて、少なくとも復号閾値数の符号化されたデータ・スライスを取り出すための第3レベル読取り要求の少なくとも1つのセットを生成することを含む。ここで、データ・オブジェクトは、散在ストレージ・エラー符号化されて、符号化されたデータ・スライスの複数のセットを作成しており、復号閾値数の符号化されたデータ・スライスは、データ・オブジェクトの上記部分を復元するために必要とされる符号化されたデータ・スライスの複数のセットのうち1つのセットのうちの最少数の符号化されたデータ・スライスを表す。たとえば、処理モジュールは、第3レベル読取り要求をDSNのストレージ・ユニットに送り、符号化されたデータ・スライスの複数のセットの各セットについて、少なくとも復号閾値数の符号化されたデータ・スライスを受け取り、少なくとも復号閾値数の符号化されたデータ・スライスのそれぞれを散在ストレージ・エラー復号して、取り出されたデータ・オブジェクトを作成する。
処理モジュールと関連して上述された方法は、散在ストレージ・ネットワークの他のモジュール、または他のデバイスによって代わりに実行され得る。加えて、動作命令を記憶する少なくとも1つのメモリ部(たとえばコンピュータ可読記憶媒体)が、散在ストレージ・ネットワーク(DSN)の1つまたは複数のコンピューティング・デバイスの1つまたは複数の処理モジュールによって実行されたとき、上述された任意またはすべての方法ステップを1つまたは複数のコンピューティング・デバイスに実行させることができる。
図43は、散在ストレージ・ネットワーク(DSN)の別の実施形態の概略ブロック図であり、散在ストレージ・ネットワーク(DSN)は、2つ以上の散在ストレージおよびタスク(DST)クライアント・モジュール1〜2、図1のネットワーク24、ならびにDST実行(EX)ユニット・セット400を含む。DST実行ユニット・セット400は、DST実行ユニット1〜nのセットを含む。各DST実行ユニットは、図1のDST実行ユニット36を利用して実装され得る。各DSTクライアント・モジュールは、図1のDSTクライアント・モジュール34を利用して実装され得る。
DSNは、DST実行ユニット・セット400にデータ・オブジェクトを記憶し、DST実行ユニット・セットへのデータ・オブジェクトの記憶の確認を提供するように機能する。データ・オブジェクトを記憶する動作の例において、DSTクライアント・モジュール1は、データ・オブジェクトおよびそのデータ・オブジェクトのオブジェクト名を含むデータ・オブジェクト記憶要求401を受け取る。DSTクライアント・モジュール1は、DST実行ユニット・セット400へのデータ・オブジェクトの記憶を推進する。たとえば、DSTクライアント・モジュール1は、データ・オブジェクトを散在ストレージ・エラー符号化して、符号化されたデータ・スライスの複数のセットを作成し、符号化されたデータ・スライスの複数のセットに対応するようにスライス名の複数のセットを生成し、符号化されたデータ・スライスの複数のセットおよびスライス名の複数のセットを含む1つまたは複数のセットのスライス書込み要求402を生成し、ネットワーク24を介して、1つまたは複数のセットのスライス書込み要求402をDST実行ユニット1〜nのセットに送る。
DST実行ユニット・セットへのデータ・オブジェクトの記憶を推進すると、DSTクライアント・モジュール1が、K個の固有の確定関数をオブジェクト名に適用して、K個の確定値(deterministic value)1〜Kを作成し、各確定値は1〜Mの範囲にわたり、Mはバケットの数を示す。各DST実行ユニットは、バケット・マッピング方式(bucket mapping scheme)に従って、1〜Mの確定範囲値の一部に関連付けられる。たとえば、各DST実行ユニットは、バケット・マッピング方式が均一な分布を含む場合にM/nのバケットに関連付けられる。たとえば、DST実行ユニット1が、確定範囲値1〜Mの最初のn分の1の量に関係付けられ、DST実行ユニット2が、確定範囲値1〜Mの次の量に関連付けられるなどである。
各確定値1〜Kについて、DSTクライアント・モジュール1は、確定値およびバケット・マッピング方式に基づいて、DST実行ユニットのセットのうちの対応するDST実行ユニットを識別する。各確定値について対応するDST実行ユニットを識別すると、DSTクライアント・モジュール1は、識別された対応するDST実行ユニットに従ってDST実行ユニットの少なくともいくつかへバケット更新要求1〜Kを発行する。各バケット要求は、範囲1〜Mの対応する確定値を含む。
DST実行ユニット(たとえばKまたはK未満)は、バケット更新要求1〜Kを受け取り、ローカルに記憶されたバケットの値を更新し、バケットに関連付けられた確定値に対応するバケット更新要求を受け取っているアクティブ状態を示す。たとえば、DST実行ユニット2は、M=100万のバケットおよびn=10のDST実行ユニットである(たとえば、各DST実行ユニットが100,000個のバケットにマッピングされる)とき、バケット更新要求1を受け取って150,000の確定値に関連付けられたバケットを更新する。
データ・オブジェクトの記憶の確認を提供する動作の例において、DSTクライアント・モジュール2は、データ・オブジェクト記憶確認要求404を受け取り、データ・オブジェクト記憶確認要求404は、データ・オブジェクトのオブジェクト名を含んでいる。DSTクライアント・モジュール2は、受け取られたオブジェクト名にK個の固有の確定関数を適用して、K個の確定値1〜Kを作成する。各確定値について、DSTクライアント・モジュール2は、バケット・マッピング方式に従って対応するDST実行ユニットを識別する。
各対応するDST実行ユニットを識別すると、DSTクライアント・モジュール2は、ネットワーク24を介して、バケット状態要求1〜Kを対応するDST実行ユニットに送り、バケット状態要求1〜Kは、確定値1〜Kを含んでいる。DSTクライアント・モジュール2は、DST実行ユニットからバケット状態応答1〜Kを受け取り、各バケット状態応答は、バケットの状態(たとえば、アクティブ、非アクティブ)を示す。
バケット状態応答を受け取ると、DSTクライアント・モジュール2は、受け取られたバケット状態応答に基づいて、データ・オブジェクトがDST実行ユニット・セットに記憶されているかどうかを決定する。具体的な例として、DSTクライアント・モジュール2は、アクティブ状態を示す受け取られたバケット状態応答の数が高い閾値レベル以上であるときに、データ・オブジェクトが記憶されている可能性があることを示す。たとえば、DSTクライアント・モジュール2は、K個すべての応答がアクティブ状態を示し、高い閾値レベルがKであるとき、データ・オブジェクトが記憶されている可能性があることを示す。別の具体的な例として、DSTクライアント・モジュール2は、非アクティブ状態を示す受け取られたバケット状態応答の数が低い閾値レベル以上であるとき、データ・オブジェクトが記憶されていないことを示す。たとえば、DSTクライアント・モジュール2は、K個の応答の1つのみが非アクティブ状態を示し、低い閾値レベルが1であるとき、データ・オブジェクトが記憶されていないことを示す。データ・オブジェクトが記憶されているかどうかを決定すると、DSTクライアント・モジュール2は、可能な記憶の標識または非記憶の標識を含むデータ・オブジェクト記憶確認応答406を出力する。
図44は、データ・オブジェクトの記憶を確認する例を示すフローチャートである。データが記憶されるときに、方法はステップ410から開始または継続し、このステップでは、(たとえば、散在ストレージおよびタスク(DST)クライアント・モジュールの)処理モジュールが、データ・オブジェクトおよびそのデータ・オブジェクトのオブジェクト名を含むデータ・オブジェクト記憶要求を受け取る。方法はステップ412に続き、このステップでは、処理モジュールは、散在ストレージ・エラー・符号化機能を使用してストレージ・ユニットのセットにデータ・オブジェクトを記憶することを推進する。方法はステップ414に続き、このステップでは、処理モジュールは、K個の固有の確定関数をオブジェクト名に適用してK個の確定値を作成する。各確定値は、1〜Mの範囲内にある。
各確定値について、方法はステップ416に続き、このステップでは、処理モジュールは、確定値に基づいて、ストレージ・ユニットのセットのうちの対応するストレージ・ユニットを識別する。たとえば、処理モジュールは、バケット・マッピング方式を利用して、各確定値に関連付けられた各ストレージ・ユニットを識別する。方法はステップ418に続き、このステップでは、処理モジュールは、バケット更新要求を対応するストレージ・ユニットに送り、バケット更新要求は確定値を含んでいる。方法はステップ420に続き、このステップでは、各ストレージ・ユニットが、バケットに関連付けられた確定値を含むバケット更新要求を受け取ったときにバケットの状態値を(たとえばアクティブに)更新する。
データの記憶を確認するときに、方法はステップ422に続き、このステップでは、処理モジュールが、データ・オブジェクト記憶確認要求を受け取る。データ・オブジェクト記憶確認要求は、データ・オブジェクトのオブジェクト名である。方法はステップ424に続き、このステップでは、処理モジュールは、K個の固有の確定関数をオブジェクト名に適用してK個の確定値1〜Kを作成する。
各確定値について、方法はステップ426に続き、このステップでは、処理モジュールは、確定値およびバケット・マッピング方式に基づいて、ストレージ・ユニットのセットのうちの対応するストレージ・ユニットを識別する。方法はステップ428に続き、このステップでは、処理モジュールは、確定値を含むバケット状態要求を、対応するストレージ・ユニットに送る。
方法はステップ430に続き、このステップでは、処理モジュールは、ストレージ・ユニットの少なくともいくつかからバケット状態応答を受け取り、各バケット状態応答はバケットの状態値を示す。方法はステップ432に続き、このステップでは、処理モジュールは、受け取られたバケット状態応答に基づいて、データ・オブジェクトの記憶の標識を生成する。
図45および図46は、散在ストレージ・ネットワーク(DSN)の別の実施形態の概略ブロック図であり、散在ストレージ・ネットワーク(DSN)は、図1の散在ストレージおよびタスク(DST)処理ユニット16、広域ネットワーク440、ならびにDST実行(EX)ユニット・セット442を含む。広域ネットワーク440は、図1のネットワーク24の広域部分を利用して実装され得る。DST実行ユニット・セット442は、DST実行ユニット1〜nのセットを含む。少なくとも1つのDST実行ユニットが、図1のDSTクライアント・モジュール34を含む。各DST実行ユニットは、図1のDST実行ユニット36を利用して実装され得る。以下では、各DST実行ユニットは、複数のストレージ・ユニットまたはセットのストレージ・ユニットあるいはその両方のうちのストレージ・ユニットと交換可能に称され得る。DST実行ユニットの少なくとも2つ以上は、ローカル・エリア・ネットワーク444によって動作可能に結合される。ローカル・エリア・ネットワーク444は、ネットワーク24のローカル・エリア・ネットワーク部分を利用して実装され得る。
DSNは、DST実行ユニット・セット442内に記憶されたデータに対するアクセスを提供するために反復ストレージ・ユニット・アクセス・プロセスを委任するように機能する。反復ストレージ・ユニット・アクセス・プロセスは、(たとえば、DST処理ユニット16、DSTクライアント・モジュール34の)1つまたは複数の処理モジュールが、1つまたは複数のデータ記憶アドレス決定ステップを実行して、アドレス情報を利用してデータに対するアクセスを可能にするように、データに関するアドレス情報を作成することを含む。
1つまたは複数のデータ記憶アドレス決定ステップは、アドレス情報を作成するために、データに関連付けられた情報を利用してアドレス情報構造に反復してアクセスすることを含む。アドレス情報構造は、DSNディレクトリ(たとえばフラット・リスト)、確定関数の利用(たとえば、データに関連付けられた情報に対して確定関数を実行してアドレス情報の少なくとも部分を作成する)、および散在階層インデックス(たとえばインデックス・ツリー)のうちの少なくとも1つを含む。分散アーティクル・インデックス(dispersed article index)は、複数のレベルを利用するツリー・インデックス構造を含み、この構造において、トップ・レベルが検索用のインデックスへのエントリのためのルート・ノードを含み、また、ツリーの他のノードを指すインデックス・キー参照を含むインデックス・ノードを含む一連の中間レベル(たとえば、データに関連付けられた情報としてインデックス・キーを利用して反復して検索される)、および、各葉ノードが、データ・ストレージに関連付けられたDSNアドレスと検索インデックス・キーの関連付けを含む、最も低いレベルの葉ノードを含む。たとえば、データに関連付けられた散在階層インデックスは、DST実行ユニット・セット442内の複数のインデックス・ノードとして記憶され、各インデックス・ノードは散在ストレージ・エラー符号化されて、DST実行ユニット1〜nのセットに記憶されるインデックス・スライスのセットを作成する。したがって、DST処理ユニット16およびDSTクライアント・モジュール34のうちの1つまたは複数が、DST実行ユニット・セット442から記憶されたインデックス・スライスにアクセスすることにより、インデックス・ノードのうちの1つまたは複数にアクセスする。たとえば、DSTクライアント・モジュール34は、DST実行ユニット1〜nのセットから5つのインデックス・ノード・オブジェクトを反復して復元することによって分散アーティクル・インデックスの5つのインデックス・ノードにアクセスして、最終的に、データの復元を可能にするためにデータに関連付けられたDSNアドレスを作成する。
図45は、反復ストレージ・ユニット・アクセス・プロセスの委任の動作の例のステップを示し、ここで、DST処理ユニット16は、データにアクセスするための要求エンティティからのDSNアクセス要求446を受け取る。そのアクセスすることは、データを記憶すること、データを取り出すこと、データをリストすること、およびデータを削除することのうちの少なくとも1つを含む。DSNアクセス要求446は、1つまたは複数の検索基準を有するデータに関するアドレス情報(たとえばインデックス・キー)を求める要求であって、反復ストレージ・ユニット・アクセス・プロセスが、1つまたは複数の検索基準に基づいてデータを識別するためにインデックス・ツリーを全探索するように実行される、要求と、1つまたは複数の検索基準を有するデータを求める要求との少なくとも一方を含む。
DSNアクセス要求446を受け取ると、DST処理ユニット16は、DSNアクセス要求446が反復ストレージ・ユニット・アクセス・プロセスを必要とするかどうかを決定する。たとえば、DST処理ユニット16は、DSNアクセス要求446が検索基準を含むとき、DSNアクセス要求446が反復ストレージ・ユニット・アクセス・プロセスを必要とすることを示す。
DSNアクセス要求446が反復ストレージ・ユニット・アクセス・プロセスを必要とする場合、DST処理ユニット16は、DSNアクセス要求446に関連付けられたデータ・オブジェクトを記憶する複数のストレージ・ユニットの構成に基づいて、複数のストレージ・ユニットのうちのストレージ・ユニットがDST処理ユニット16(たとえばコンピューティング・デバイス)よりも良好に反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を実行できると決定する。たとえば、DST実行ユニット1が、LAN接続444を介して、複数のDST実行ユニットのうちの望ましい数(たとえば、復号閾値数マイナス1、ただし、符号化されたデータ・スライスのセットごとの復号閾値数が復元のために必要となる)の他のDST実行ユニットに結合されている場合、DST処理ユニット16が、DST処理ユニット16よりも良好にDST処理ユニット1が反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を実行できると決定すると、DST処理ユニット16は、DST処理ユニット16よりも良好にDST処理ユニット1がプロセスにおける反復記憶の少なくとも部分を実行できることを示す。
別の例として、DST処理ユニット16が、ローカル・エリア・ネットワーク(LAN)444接続を介して、DST実行ユニット1が、複数のDST実行ユニット(たとえばストレージ・ユニット)のうちの1つまたは複数の他のDST実行ユニットに結合されていると決定した場合、かつ、DST処理ユニット16が、(たとえば広域ネットワーク440を介する)広域ネットワーク(WAN)通信の低減が、反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分のより良好な実行を構成する(たとえば、広域ネットワーク440を介してよりもLAN444を介してインデックス・ツリーのインデックス・ノードにアクセスすることが効率的である)と決定した場合に、DST処理ユニット16は、DST処理ユニット16よりも良好にDST処理ユニット1が反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を実行できることを示す。WAN通信の低減は、WANトラフィックの低減、および反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を処理する待ち時間の低減の少なくとも一方を含む。
DST処理ユニット16よりも良好に反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を実行できるDST実行ユニット(たとえばDST実行ユニット1)を識別すると、DST処理ユニット16は、(たとえば、広域ネットワーク440を介して結合されたときに)広域ネットワーク440を介して、DSNアクセス要求446および制御コマンド448をストレージ・ユニット(たとえばDST実行ユニット1)に送り、制御コマンド448は、反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を実行するようにストレージ・ユニットに命令する。制御コマンド448は、反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を実行しながらアクセスするために複数のストレージ・ユニットのうちの復号閾値数のストレージ・ユニットを示す命令であって、復号閾値数のストレージ・ユニットのうちの少なくとも1つはWAN接続を介してストレージ・ユニットに結合されている、命令、反復ストレージ・ユニット・アクセス・プロセス(たとえば検索基準)を実行する命令、および(たとえばデータを含む)完了応答をDSNアクセス要求に提供する命令のうちの1つまたは複数を含む。
代わりにまたは加えて、DST処理ユニット16が、広域ネットワーク440を介して、DSNアクセス要求446および別の制御コマンド448を、複数のストレージ・ユニットの第2のサブセットのうちの1つまたは複数のストレージ・ユニットに送るが、これは、ストレージ・ユニットが、集合的応答を後で提供するための複数のストレージ・ユニットのサブセットを表すときに、処理モジュールが、DSNアクセス要求446および制御コマンド448をストレージ・ユニットに送る場合に行われる。たとえば、DST処理ユニット16は、DST実行ユニットnが、反復ストレージ・ユニット・アクセス・プロセスに必要とされるが、LAN444を介してDST実行ユニット1に動作可能に結合されていないとき、別の制御コマンド448をDST実行ユニットnに送る。
図46は、反復ストレージ・ユニット・アクセス・プロセスの委任の動作の例のさらなるステップを示し、ここで、DST処理ユニット16は、DST実行ユニット1から広域ネットワーク440を介して、DSNアクセス要求446に対する少なくとも部分応答452を受け取る。部分応答452は、復元されたデータを含む完了応答、データに関するアドレス情報、および、複数のストレージ・ユニットのサブセットの集合的応答を表すDST実行ユニット1からのグループ反復部分応答のうちの少なくとも1つを含む。たとえば、DSTクライアント・モジュール34は、LAN444を介して、スライス・アクセス450を実行して、データのアドレス情報を識別するために復号閾値数のDST実行ユニットから反復ストレージ・ユニット・アクセス・プロセスに従って各インデックス・ノードについて復号閾値数のインデックス・スライスを復元し、符号化されたデータ・スライスの各セットについて、復号閾値数のDST実行ユニットからデータの複数の符号化されたデータ・スライスの各セットについて少なくとも復号閾値数の符号化されたデータ・スライスを取り出し、取り出された復号閾値数の符号化されたデータ・スライスを散在ストレージ・エラー復号してデータを再現し、再現されたデータを含む部分応答452を広域ネットワーク440を介してDST処理ユニット16へ発行する。再現されたデータを受け取ると、DST処理ユニット16は、再現されたデータを含むDSNアクセス応答454を要求エンティティへ発行する。
代わりにまたは加えて、反復ストレージ・ユニット・アクセス・プロセスの反復ごとに、複数のストレージ・ユニットのサブセットの集合的応答を表すDST実行ユニット1からのグループ反復部分応答を受け取りながら、DST処理ユニット16は、複数のストレージ・ユニットの第2のサブセットの1つまたは複数のDST実行ユニットから反復部分応答(たとえば、DST実行ユニットnからの反復部分応答456)を受け取り、グループ反復部分応答456および反復部分応答452を処理して、反復応答を含むDSNアクセス応答454(たとえば復元されたデータ)を作成する
図47は、反復ストレージ・ユニット・アクセス・プロセスを委任する例を示すフローチャートである。特に、図1〜図39、図45〜図46、さらに図47と関連して説明される1つまたは複数の機能および特徴と共に用いる方法が提示される。方法はステップ460から開始し、このステップでは、散在ストレージ・ネットワーク(DSN)の1つまたは複数のコンピューティング・デバイスのうちのコンピューティング・デバイスの処理モジュールが、DSNアクセス要求が反復ストレージ・ユニット・アクセス・プロセスを必要とするかどうかを決定する。たとえば、処理モジュールは、取り出されるべきデータに対する検索基準を受け取るとき、DSNアクセス要求が反復ストレージ・ユニット・プロセスを必要とすることを示す。
DSNアクセス要求が反復ストレージ・ユニット・アクセス・プロセスを必要とする場合、方法はステップ462に続き、このステップでは、処理ユニットは、DSNアクセス要求に関連付けられたデータ・オブジェクトを記憶する複数のストレージ・ユニットの構成に基づいて、複数のストレージ・ユニットのうちのストレージ・ユニットがコンピューティング・デバイスよりも良好に反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を実行できると決定する。たとえば、ストレージ・ユニットが、LAN接続を介して、複数のストレージ・ユニットのうちの望ましい数の他のストレージ・ユニット(たとえば、合計で復号閾値数)に結合されている場合、処理モジュールは、ストレージ・ユニットが、(たとえば処理モジュールに関連付けられた)コンピューティング・デバイスよりも良好に反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を実行できることを示す。別の例として、処理モジュールが、ローカル・エリア・ネットワーク(LAN)接続を介して、ストレージ・ユニットが、複数のストレージ・ユニットのうちの1つまたは複数の他のストレージ・ユニットに結合されていると決定した場合、かつ、処理モジュールが、広域ネットワーク(WAN)通信の低減が、反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分のより良好な実行を構成すると決定した場合に、処理モジュールは、コンピューティング・デバイスよりも良好にストレージ・ユニットが反復ストレージ・ユニット・プロセスの少なくとも部分を実行できることを示す。
方法はステップ464に続き、このステップでは、処理モジュールは、DSNアクセス要求および制御コマンドをストレージ・ユニットに送り、制御コマンドは、反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を実行するようにストレージ・ユニットに命令する。制御コマンドは、反復ストレージ・ユニット・アクセス・プロセスの少なくとも部分を実行しながらアクセスするために複数のストレージ・ユニットのうちの復号閾値数のストレージ・ユニットを示す命令であって、復号閾値数のストレージ・ユニットのうちの少なくとも1つはWAN接続を介してストレージ・ユニットに結合されている、命令、反復ストレージ・ユニット・アクセス・プロセスを実行する命令、および完了応答をDSNアクセス要求に提供する命令のうちの1つまたは複数を含む。代わりにまたは加えて、処理モジュールが、DSNアクセス要求および別の制御コマンドを、複数のストレージ・ユニットの第2のサブセットのうちのストレージ・ユニットに送るが、これは、ストレージ・ユニットが、集合的応答(たとえば復元されたデータ)を後で提供するための複数のストレージ・ユニットのサブセットを表すときに、処理モジュールが、DSNアクセス要求および制御コマンドをストレージ・ユニットに送るときに行われる。
方法はステップ466に続き、このステップでは、処理モジュールは、ストレージ・ユニットから、DSNアクセス要求に対する少なくとも部分応答を受け取る。部分応答は、復元されたデータを含む完了応答、データに関するアドレス情報、および、複数のストレージ・ユニットのサブセットの集合的応答を表すストレージ・ユニットからのグループ反復部分応答のうちの少なくとも1つを含む。他の制御コマンドが利用されるとき、反復ストレージ・ユニット・アクセス・プロセスの反復ごとに、方法はステップ468に続き、このステップでは、複数のストレージ・ユニットのサブセットの集合的応答を表すストレージ・ユニットからのグループ反復部分応答を受け取りながら、処理モジュールは、複数のストレージ・ユニットの第2のサブセットのストレージ・ユニットから反復部分応答を受け取り、処理モジュールは、グループ反復部分応答および反復部分応答を処理して、反復応答(たとえば復元されたデータ)を作成する。
処理モジュールと関連して上述された方法は、散在ストレージ・ネットワークの他のモジュール、または他のデバイスによって代わりに実行され得る。加えて、動作命令を記憶する少なくとも1つのメモリ部(たとえばコンピュータ可読記憶媒体)が、散在ストレージ・ネットワーク(DSN)の1つまたは複数のコンピューティング・デバイスの1つまたは複数の処理モジュールによって実行されたとき、上述された任意またはすべての方法ステップを1つまたは複数のコンピューティング・デバイスに実行させることができる。
図48は、散在ストレージ・ネットワーク(DSN)の別の実施形態の概略ブロック図であり、散在ストレージ・ネットワーク(DSN)は、複数のユーザ・デバイス1〜U、複数の散在ストレージおよびタスク(DST)処理ユニット1〜100、図1のネットワーク24、ならびにDST実行(EX)ユニット・セット470を含む。DST実行ユニット・セット470は、DST実行ユニット1〜nのセットを含む。各DST実行ユニットは、図1のDST実行ユニット36を利用して実装され得る。各ユーザ・デバイスは、図1のユーザ・デバイス12および図1のユーザ・デバイス14のうちの少なくとも1つを利用して実装され得る。各DST処理ユニットは、図1のDST処理ユニット16を利用して実装され得る。
DSNは、DSNに記憶されたデータにアクセスするとき、複数のデータ・アクセス・リソース(たとえばDST処理ユニット)を利用するように機能する。複数のデータ・アクセス・リソースを利用する動作の例において、DST処理ユニットは、散在階層インデックスのインデックス・ノード・インデックス・キー範囲割当てを複数のDST処理ユニット1〜100に関連付ける命名関連情報478を更新するかどうかを決定する。その決定することは、分岐因子変更(たとえば、基準ノードより低いレベルのノードの数)の検出に基づいて更新を示すこと、使用可能なDST処理ユニットの数の変更を検出すること、および、1つまたは複数のDST処理ユニットのパフォーマンス情報を解釈することのうちの少なくとも1つを含む。
散在階層インデックスは、1つのルート・インデックス・ノード、1つまたは複数の親インデックス・ノード、および1つまたは複数のインデックス・ノードを含む。各ノード(たとえば、ルート・インデックス・ノード、親インデックス・ノード、インデックス・ノード)は、データ・オブジェクトを利用して実装することができ、関連付けられたインデックス・キー範囲の1つまたは複数のエントリ、他のノードへのポインタ、および散在ストレージ・ネットワーク(DSN)に記憶されたデータ・オブジェクトへのポインタを含む。そのようなポインタは、DST実行ユニット・セット内のノードまたはデータ・オブジェクトあるいはその両方の記憶位置に対応する仮想DSNアドレス(たとえばソース名)を含む。親インデックス・ノードは、親子関係を形成する子インデックス・ノードへのポインタを含む。ノードは、インデックスの共通レベルにおける兄弟レベル・ノードへのポインタを含んでもよい。各ノードは、散在ストレージ・エラー符号化されてノード・スライスのセットを作成し、ノード・スライスの各セットは、スライス・アクセス474を介してノードのDSNアドレスに対応する位置においてDSNのストレージ・ユニットのセットに記憶される。
散在階層インデックスは、1つまたは複数のインデックス属性に関連付けられた次元を含むように構築され維持され得る。インデックス属性は、レベルの最大数、(たとえば、最も高いレベルのルート・インデックス・ノードから最も低いレベルのインデックス・ノードへの)レベルの最少数、親子ノード関係における子ノードの最大数、親子ノード関係における子ノードの最少数、共通レベルにおける兄弟ノードの最大数、共通レベルにおける兄弟ノードの最少数、インデックス・ノードにおけるエントリの最大数、およびインデックス・ノードにおけるエントリの最少数のうちの1つまたは複数を含む。
散在階層インデックスは、DSNのDST実行ユニット・セットに記憶されたデータ・オブジェクトに関連付けられた記憶位置を突き止めるために利用され得る。たとえば、ルート・インデックス・ノードから開始して、散在階層インデックスは、最も低いレベルでインデックス・ノードのエントリ内でインデックス・キーに所望のインデックス・キーをマッチングすることによって検索され、インデックス・ノードのエントリは、所望のデータ・オブジェクトに対応する。検索は、ルート・インデックス・ノードと所望のデータ・オブジェクトに関連付けられた最も低いレベルのインデックス・ノードとの間のノードに関連付けられたインデックス・キー範囲と、所望のインデックス・キーを比較することによって、インデックスのより低い後続のレベルにアクセスすることを含むことができる。インデックス・ノードの最も低いレベルは、DSNに記憶されたデータ・オブジェクトに関連付けられたエントリを含む。
各DST処理ユニットは、インデックス・ノード・インデックス・キー範囲に関連付けられ、また、散在階層インデックスの任意のレベルに関連付けられ得る。たとえば、DST処理ユニット1は、最大2000のうちの0〜19のインデックス・ノード・インデックス・キー範囲に関連付けられ、DST処理ユニット2は、最大2000のうちの20〜39のインデックス・ノード・インデックス・キー範囲に関連付けられ、以下同様に続き、DST処理ユニット100は、最大2000のうちの1980〜1999のインデックス・ノード・インデックス・キー範囲に関連付けられ、上記の場合、ルート・ノード・レベルより1つ低いレベルでインデックス・キー範囲が最大の2000を含み、マッピング方式がインデックス・キー範囲の各部分の均一な分布を含む。
命名関連情報478を更新するとき、DST処理ユニットは、使用可能なDST処理ユニットの数を識別する。その識別することは、問合せを開始すること、問合せ応答を受け取ること、探索を実行すること、およびエラー・メッセージを解釈することのうちの少なくとも1つを含む。使用可能なDST処理ユニットの数を識別すると、DST処理ユニットは、散在階層インデックスの参照分岐因子を決定する。たとえば、DST処理ユニットは、ルート・ノードより1つ低いレベルの子ノードの数を分岐因子としてカウントする。
分岐因子を決定すると、DST処理ユニットは、散在階層インデックスに関連付けられたインデックス・キー・タイプを識別する。たとえば、DST処理ユニットは、分散粒子インデックスに関連付けられたメタデータ・ファイルにアクセスして、インデックス・キー・タイプを抽出する。インデックス・キー・タイプを識別すると、DST処理ユニットは、区分化方式(partitioning scheme)に従って、使用可能なDST処理ユニットの数に基づいて分岐因子を区分して、インデックス・ノード対DST処理ユニットのマッピングを作成する。たとえば、DST処理ユニットは、各DST処理ユニットにいくつのインデックス・ノードが関連付けられるべきか、および各DST処理ユニットにどのインデックス・ノードが関連付けられるべきかを示す。
分岐因子を区分すると、DST処理ユニットは、インデックス・ノード対DST処理ユニットのマッピングおよびインデックス・キー・タイプ基づいて、更新された命名関連情報478を生成する。たとえば、DST処理ユニットは、インデックス・ノードの分岐因子の数に関するインデックス・キー・タイプに従って連続したインデックス・キーにおけるブレークポイントを識別し、使用可能なDST処理ユニットのそれぞれにブレークポイントを関連付けて、更新された命名関連情報478を作成する。更新された命名関連情報478を生成すると、DST処理ユニットは、複数のDST処理ユニットおよび複数のユーザ・デバイスのうちの1つまたは複数への更新された命名関連情報478の分散を推進する。
命名関連を更新すると、DSNは、更新された命名関連情報478に従って、ユーザ・デバイスによるDST処理ユニットとのデータ・アクセス472を推進する。具体的な例として、ユーザ・デバイス3は、更新されたデータ関連情報478に従って、DST処理ユニット4のインデックス・ノード範囲に基づいてインデックス・キー62と関連したDST処理ユニット4を選択する。DST処理ユニットを選択すると、ユーザ・デバイス3は、選択されたDST処理ユニット4とデータ・アクセス472の交換をする(たとえば、データ・アクセス要求をDST処理ユニット4に送り、DST処理ユニット4からデータ・アクセス応答を受け取る)。DST処理ユニット4は、DST実行ユニット1〜nのセットとスライス・アクセス474(たとえばスライス・アクセス1〜n)の交換をして、データ・アクセス472を推進する。
図49は、データ・アクセス・リソースをインデックスに関連付ける例を示すフローチャートである。方法はステップ480から開始または継続し、このステップでは、(たとえば、散在ストレージおよびタスク(DST)処理ユニットの)処理モジュールが、散在階層インデックスのインデックス・ノード・インデックス・キー範囲割当てを複数のデータ・アクセス・リソース(たとえば複数のDST処理ユニット)に関連付ける命名関連情報を更新するかどうかを決定する。その決定することは、更新スケジュールを解釈すること、分岐因子変更を検出すること、使用可能なデータ・アクセス・リソースの数を検出すること、およびパフォーマンス情報を解釈することのうちの1つまたは複数に基づくことができる。
更新するとき、方法はステップ482に続き、このステップでは、処理モジュールは、使用可能なデータ・アクセス・リソースの数を識別する。その識別することは、エラー・メッセージを解釈すること、問合せを開始すること、問合せ応答を受け取ること、および探索を実行することのうちの少なくとも1つを含む。方法はステップ484に続き、このステップでは、処理モジュールは、散在階層インデックスの分岐因子を決定する。その決定することは、散在階層インデックスにアクセスすること、およびルート・ノード・レベルより少なくとも1つ低いレベルに関連付けられたインデックス・ノードの数をカウントすることのうちの少なくとも一方を含む。
方法はステップ486に続き、このステップでは、処理モジュールは、散在階層インデックスに関連付けられたインデックス・キー・タイプを識別する。たとえば、処理モジュールは、散在階層インデックスに関連付けられた共通インデックス情報にアクセスして、インデックス・キー・タイプを抽出する。方法はステップ488に続き、このステップでは、処理モジュールは、使用可能なデータ・アクセス・リソースの数に基づいて分岐因子を区分して、インデックス・ノード対データ・アクセス・リソースのマッピングを作成する。たとえば、処理モジュールは、使用可能なデータ・アクセス・リソースの数で分岐因子を分割して、インデックス・ノード対データ・アクセス・リソースのマッピングを作成する。
方法はステップ490に続き、このステップでは、処理モジュールは、インデックス・ノード対データ・アクセス・リソースのマッピングおよびインデックス・キー・タイプに基づいて、更新された命名関連情報を生成する。たとえば、処理モジュールは、データ・アクセス・リソースのマッピングおよびインデックス・キー・タイプに基づいて、データ・アクセス・リソースのそれぞれに関連付けられたインデックス・キー範囲を識別する。方法はステップ492に続き、このステップでは、処理モジュールは、更新された命名関連情報を利用してデータ・アクセスを推進する。たとえば、処理モジュールは、更新された命名関連情報をアクセス・デバイスおよびデータ・アクセス・リソースへ分散する。別の例として、アクセス・デバイスは、更新された命名関連情報を利用してデータ・アクセス・リソースにアクセスする。
図50は、散在ストレージ・ネットワーク(DSN)の別の実施形態の概略ブロック図であり、散在ストレージ・ネットワーク(DSN)は、複数のユーザ・デバイス1〜U、2つ以上の散在ストレージおよびタスク(DST)処理ユニット1〜2、図1のネットワーク24、ならびにDST実行ユニット・セット494を含む。DST実行ユニット・セット494は、DST実行ユニット1〜nのセットを含む。各DST実行ユニットは、図1のDST実行ユニット36を利用して実装され得る。各ユーザ・デバイスは、図1のユーザ・デバイス12および図1のユーザ・デバイス14のうちの少なくとも1つを利用して実装され得る。各DST処理ユニットは、図1のDST処理ユニット16を利用して実装され得る。
DSNは、符号化されたデータ・スライスのセットとしてDST実行ユニット・セット494に記憶されたデータへの複数のユーザ・デバイスのデータ・アクセス496を提供するように機能し、符号化されたデータ・スライスのセットの仮想DSNアドレスは、散在階層インデックスに保持されている。DSNはさらに、DST実行ユニット・セットに記憶された散在階層インデックスを更新するように機能する。散在階層インデックスを更新する動作の例において、DST処理ユニット1は、保留中の更新に従って散在階層インデックスのインデックス・ノードを更新することを決定する(たとえば、新しいエントリを識別する、変更されたエントリを識別する、削除するエントリを識別する)。インデックス・ノードを更新することを決定すると、DST処理ユニット1はインデックス・ノードの更新を開始する。たとえば、DST処理ユニット1は、インデックス・ノードを更新して、更新されたインデックス・ノードを作成し、更新されたインデックス・ノードを散在ストレージ・エラー符号化して、更新されたインデックス・ノード・スライスのセットを作り出し、ネットワーク24を介してDST実行ユニットのセットにスライス・アクセス要求1〜nを送って、更新されたインデックス・ノードに関連付けられた更新されたインデックス・ノード・スライスのセットの記憶を要求することにより、インデックス・ノード・アクセス498を送出し、更新されたインデックス・ノード・スライスのセットの記憶が成功したかどうかを示すスライス・アクセス応答1〜nとしてインデックス・ノード・アクセス498を受け取る。
インデックス・ノードの更新が成功しなかったとき(たとえば、DST処理ユニット1が、スライス・アクセス応答を解釈し、更新されたインデックス・ノードの書込みの不成功を示したとき)、DST処理ユニット1は、インデックス・ノードに関連付けられたタスク・キューのタスク・エントリを生成する。DST処理ユニット1は、更新されたインデックス・ノード、またはインデックス・ノードの一部分に対する更新、あるいはその両方を含むように、エントリを生成する。タスク・エントリを生成すると、DST処理ユニット1は、タスク・エントリをタスク・キューに記憶する。たとえば、DST処理ユニット1は、インデックス・ノードのソース名に対して確定関数を実行し、インクリメントを実行する(たとえば、エントリ・カウントを1だけ増分する)ことによって、タスク・エントリのDSNアドレスを生成し、ソース名を使用してタスク・エントリを記憶する。その記憶することは、タスク・エントリを散在ストレージ・エラー符号化して、タスク・スライスのセットを作成すること、タスク・エントリのDSNアドレスに基づいて、タスク・スライスのセットに対するタスク・スライス名のセットを生成すること、タスク・スライスのセットおよびタスク・スライス名のセットを含むスライス書込み要求1〜nのセットを含むように、タスク・キュー・アクセス500を生成すること、ならびにスライス書込み要求1〜nのセットをDST実行ユニット1〜nのセットに送ることを含む。
次いで、DST処理ユニット2はインデックス・ノードにアクセスする。インデックス・ノードにアクセスすると、DST処理ユニット2は、インデックス・ノードに関連付けられたタスク・キューが少なくとも1つのエントリを含んでいるかどうかを決定する。その決定することは、インデックス・ノードからのエントリ・カウントを解釈すること、およびタスク・キューの第1のエントリにアクセスを試みた結果を解釈することのうちの少なくとも一方を含む。
タスク・キューが少なくとも1つのエントリを含むとき、DST処理ユニット2は、少なくとも1つのエントリに従ってインデックス・ノードの更新を開始する。たとえば、DST処理ユニット2は、エントリの復元された更新インデックス・ノードまたはエントリの復元された更新によってインデックス・ノードを更新して、新しく更新されたインデックス・ノードを生成する。新しく更新されたインデックス・ノードを生成すると、DST処理ユニット2は、新しく更新されたインデックス・ノードをDST実行ユニットのセットに記憶しようと試みる(たとえば、スライス書込み要求を発行する、スライス書込み応答を受け取る)。新しく更新されたインデックス・ノードの更新が成功したとき、DST処理ユニット2は、インデックス・ノードに関連付けられたタスク・キューからその少なくとも1つのエントリを削除する。たとえば、DST処理ユニット2は、スライス削除要求をDST実行ユニットのセットへ発行し、スライス削除要求は、キューのエントリに関連付けられたスライス名のセットを含んでいる。
図51は、散在階層インデックスを更新する例を示すフローチャートである。方法はステップ502から開始または継続し、このステップでは、(たとえば、散在ストレージおよびタスク(DST)処理ユニットの)処理モジュールが、保留中の更新に従って散在階層インデックスのインデックス・ノードを更新することを決定する。方法はステップ504に続き、このステップでは、処理モジュールは、インデックス・ノードの更新を開始する。たとえば、処理モジュールは、更新されたインデックス・ノードを生成し、更新されたインデックス・ノードを符号化してインデックス・スライスのセットを作成し、インデックス・スライスのセットを含むスライス書込み要求をストレージ・ユニットのセットへ発行し、スライス書込み応答を受け取り、受け取られたスライス書込み応答に基づいて更新が成功したかどうかを決定する。たとえば、処理モジュールは、書込み閾値数の好ましいスライス書込み応答を受け取っていない場合、更新が不成功であることを示す。
インデックス・ノードの更新が成功していないとき、方法はステップ506に続き、このステップでは、処理モジュールは、インデックス・ノードに関連付けられたタスク・キューのタスク・エントリを生成する。たとえば、処理モジュールは、インデックス・ノードの保留中の更新を含むようにタスク・エントリを生成する。方法はステップ508に続き、このステップでは、処理モジュールは、タスク・エントリをタスク・キューに記憶する。たとえば、処理モジュールは、インデックス・ノードのDSNアドレスに基づいて、タスク・エントリに対するDSNアドレスを生成し、符号化されたタスク・スライスのセットを生成し、符号化されたタスク・スライスのセットとタスク・エントリに対するDSNアドレスから導出されたスライス名とを含むスライス書込み要求のセットを生成し、スライス書込み要求のセットをストレージ・ユニットのセットに送る。
方法はステップ510に続き、このステップでは、処理モジュールは次いで、インデックス・ノードにアクセスする。たとえば、処理モジュールは、インデックス・ノードのDSNアドレスを識別し、インデックス・ノードのDSNアドレスを利用してスライス読取り要求のセットをストレージ・ユニットのセットへ発行し、スライス読取り応答を受け取り、受け取られたスライス読取り応答のインデックス・ノード・スライスを復号して、インデックス・ノードを再現する。
方法はステップ512に続き、このステップでは、処理モジュールは、インデックス・ノードに関連付けられたタスク・キューが少なくとも1つのタスク・エントリを含むかどうかを決定する。たとえば、処理モジュールは、再現されたインデックス・ノードのエントリ・カウントを解釈し、カウントが0よりも大きいとき、インデックス・ノードが少なくとも1つのタスク・エントリを含んでいることを示す。別の例として、処理モジュールは、第1のタスク・エントリへのアクセスを開始し、第1のタスク・エントリを成功裏に復号したとき、少なくとも1つのタスク・エントリが含まれていることを示す。
インデックス・ノードに関連付けられたタスク・キューが少なくとも1つのタスク・エントリを含むとき、方法はステップ514に続き、このステップでは、処理モジュールは、インデックス・ノードの更新を開始する。たとえば、タスク・キューの各タスク・エントリについて、処理モジュールは、タスク・エントリに従ってインデックス・ノードの更新を推進する。たとえば、処理モジュールは、再現されたインデックス・ノードをタスク・エントリに従って変更し、変更されたインデックス・ノードを散在ストレージ・エラー符号化して、変更されたインデックス・スライスのセットを作成し、変更されたインデックス・スライスのセットをストレージ・ユニットのセットに送り、スライス書込み応答を受け取り、受け取られたスライス読取り応答を解釈して、インデックス・ノードの更新が成功したかどうかを決定する。
インデックス・ノードの更新が成功したとき、方法はステップ516に続き、このステップでは、処理モジュールは、その少なくとも1つのエントリをタスク・キューから削除する。たとえば、処理モジュールは、スライス削除要求のセットを、タスク・キューの各対応する成功裏に更新されたエントリに関連付けられたDSNアドレスへ発行する。
図52は、散在ストレージ・ネットワーク(DSN)の別の実施形態の概略ブロック図であり、散在ストレージ・ネットワーク(DSN)は、複数の記憶世代1〜G、図1の散在ストレージおよびタスク・ネットワーク(DSTN)管理ユニット18、ならびに図1のネットワーク24を含む。各記憶世代は、DST実行(EX)ユニット1〜nのセットを含む。各DST実行ユニットは、図1のDST実行ユニット36を利用して実装され得る。
DSNは、ソース・アドレス範囲に関連付けられた符号化されたデータ・スライスのセットとしてデータを記憶するように機能する。ソース・アドレス範囲は、符号化されたデータ・スライスのセットに関連付けられたスライス名の一部分を含む。各記憶世代は、動作の準備の2つの状態に関連付けられる。2つの状態は、アクティブと非アクティブである。記憶世代は、記憶世代がアクティブであるとき、符号化されたデータ・スライスのセットの記憶および取出しを行うために使用可能である。記憶世代は、記憶世代が非アクティブ(たとえば、休眠、未割当て状態)であるとき、符号化されたデータ・スライスのセットの記憶および取出しを行うために使用可能ではない。たとえば、時間t0で、記憶世代1はアクティブであり、記憶世代2〜Gは非アクティブである。
記憶世代がアクティブであるとき、記憶世代は、ソース・アドレス範囲の一部分に関連付けられている。ソース・アドレス範囲は、スライス名の範囲の一部分を含み、それにより、DSNが、関連付けられた記憶世代を利用することにより、スライス名のその範囲に関連付けられた符号化データ・スライスにアクセスするようにされる。スライス名は、ピラーインデックス(たとえば、情報伝播アルゴリズム(IDA)幅の1に対して1〜n)、格納域識別子、世代識別子、およびソース・フィールドを含む。ソース・フィールドは、記憶されるデータ・オブジェクトに関連付けられたオブジェクト番号を含むことができ、データ・オブジェクトの分割に基づくセグメント番号が、複数のデータ・セグメントを作成するために必要とされる。たとえば、時間t0における記憶世代1が、0〜9のソース・アドレス範囲全体に関連付けられ、それにより、ソース・アドレス範囲0〜9に関連付けられたすべての符号化されたデータ・スライスが、記憶世代1を利用してアクセスされるようになる。第1世代のデータが格納域Zに記憶されている間、記憶世代1のDST実行ユニット1は、P1−VZ−G1−S0からP1−VZ−G1−S9の範囲のスライス名を有する符号化されたデータ・スライスに関連付けられ、記憶世代1のDST実行ユニット2は、P2−VZ−G1−S0からP2−VZ−G1−S9の範囲のスライス名を有する符号化されたデータ・スライスに関連付けられるなどが行われる。
動作の例において、DSTN管理ユニット18は、第1の記憶世代を確立することを決定する。その決定することは、マネージャ入力を受け取ること、スケジュールを解釈すること、アクティブ化要求を受け取ること、構成情報を解釈すること、ストレージ・ユニットの新しいセットが使用可能であることを検出すること、および、追加の記憶容量が必要とされる(たとえば、他の記憶世代利用レベルが最大記憶世代利用閾値レベルと比べて好ましくない)ことを検出することのうちの1つまたは複数に基づくことができる。
第1の記憶世代を確立することを決定すると、DSTN管理ユニット18は、少なくとも1つの格納域がその記憶世代に関連付けられるように記憶パラメータを割り当てる。記憶パラメータは、格納域ID、およびIDAタイプ、およびIDA幅、書込み閾値数、読取り閾値数、再構築閾値数、および復号閾値数のうちの1つまたは複数を含む。その割り当てることは、マネージャ入力を受け取ること、システム・レジストリを解釈すること、DSNパフォーマンスを推定すること、およびDSNパフォーマンス目標レベルを解釈することのうちの1つまたは複数を含む。たとえば、DSTN管理ユニット18は、マネージャ入力に基づいて格納域IDであるZを含むように記憶パラメータを設定する。
記憶パラメータを割り当てると、DSTN管理ユニット18は、記憶世代についての世代番号およびソース・アドレス範囲対世代マップを決定する。たとえば、DSTN管理ユニット18は、第1の記憶世代を確立するときに世代1を決定する。別の例として、DSTN管理ユニット18は、マネージャ入力に基づいて、記憶世代1にマッピングされる0〜9のソース・アドレス範囲を決定する。
世代番号およびソース・アドレス範囲対世代マップを決定すると、DSTN管理ユニット18は、割当てメッセージを、記憶世代に関連付けられたDST実行ユニットのセットへ発行し、このメッセージは、世代番号、ソース・アドレス範囲、DST実行ユニットの識別子、および割り当てられた記憶パラメータの一部分のうちの1つまたは複数を含んでいる。たとえば、DSTN管理ユニット18は、ネットワーク24を介して割当てメッセージ1を記憶世代1のDST実行ユニット1〜nのセットに送って、格納域Zの世代1について0〜9のソース・アドレス範囲にDST実行ユニットのセットを関連付ける。新しい記憶世代を追加する方法が、図53を参照してより詳細に論じられる。
図53は、記憶世代アクティブ化方式に従って、図52のDSTN管理ユニット18によって時間t0〜t3にわたってアクティブ化される複数の記憶世代1〜4の概略ブロック図である。記憶世代のアクティブ化の動作の例において、DSTN管理ユニット18は、1つまたは複数の現行記憶世代に別の記憶世代を追加することを決定する。その決定することは、好ましくないストレージ使用レベルを検出すること、好ましくないレベルの入力/出力動作を検出すること、1つまたは複数の現行記憶世代に記憶された好ましくない数のメタデータ・オブジェクトを検出すること、マネージャ入力を受け取ること、スケジュールを解釈すること、アクティブ化要求を受け取ること、構成情報を解釈すること、ストレージ・ユニットの新しいセットが使用可能であることを検出すること、追加の記憶容量が必要とされることを検出することのうちの1つまたは複数に基づくことができる。
別の記憶世代を追加することを決定すると、DSTN管理ユニット18は、ソース・アドレス範囲対世代マップを入手する。その入手することは、DST実行ユニットから取り出すこと、ローカル・メモリから取り出すこと、およびシステム・レジストリから抽出することのうちの少なくとも1つを含む。ソース・アドレス範囲対世代マップを入手すると、DSTN管理ユニット18は、1つまたは複数の現行の記憶世代に世代を追加したときの世代の数を決定する。その決定することは、好ましくないストレージ使用のレベルを解釈すること、好ましくない入力/出力動作のレベルを解釈すること、および1つまたは複数の現行世代に記憶されたメタデータ・オブジェクトの数のレベルを解釈することのうちの1つまたは複数に基づくことができる。たとえば、DSTN管理ユニット18は、好ましくないストレージ使用のレベルが、最大閾値レベルより高くかつ臨界閾値レベルより低いときに、1つの新しい記憶世代を追加することを決定する。
世代の数を決定すると、DSTN管理ユニット18は、記憶世代の数、および確定的アドレス再割り振り方式(deterministic address reallocation scheme)に基づいて、ソース・アドレス範囲対世代マップを更新する。ここで、各記憶世代には、世代の数に従ってソース・アドレス範囲の等しい部分が割り当てられ、現行世代ごとに、ソース・アドレス範囲の現行の割当ての一部分が他の記憶世代に再割当てされる。たとえば、時間t1において、DSTN管理ユニット18は、ソース・アドレス範囲の一方の半分が記憶世代1に留まり、ソース・アドレス範囲の他方の半分がここで新しい記憶世代2に割り当てられるように、ソース・アドレス範囲対世代マップを更新する。別の例として、時間t2において、DSTN管理ユニットは、記憶世代1、2および新しい記憶世代3のそれぞれがソース・アドレス範囲の3分の1に関連付けられるように、ソース・アドレス範囲対世代マップを更新する。さらに別の例として、時間t3において、各記憶世代はソース・アドレス範囲の4分の1に関連付けられる。
ソース・アドレス範囲対世代マップを更新すると、DSTN管理ユニット18は、他の世代および1つまたは複数の現行世代のそれぞれへの更新されたソース・アドレス範囲対世代マップの分散を推進する。たとえば、DSTN管理ユニット18は、割当てメッセージ520を記憶世代へ発行し、割当てメッセージ520は、世代マップの更新されたソース・アドレス範囲を含んでいる。
更新されたソース・アドレス範囲対世代マップを分散すると、DSTN管理ユニット18は、更新されたソース・アドレス範囲対世代マップに従って、1つまたは複数の現行記憶世代のそれぞれから別の記憶世代へ、符号化された・データ・スライスを移行することを推進する。その推進することは、スライスの取出しおよび記憶を行うこと、他の各記憶世代に要求を送ってスライス読取り要求を発行すること、ならびに1つまたは複数の現行記憶世代のそれぞれへ要求を発行してスライス書込み要求を発行することのうちの少なくとも1つを含む。たとえば、時間t1において、記憶世代1に記憶されたスライスの半分が記憶世代2へ移行される。別の例として、時間t2において、記憶世代1に記憶されたスライスの3分の1が記憶世代3へ移行され、記憶世代2に記憶されたスライスの3分の1が記憶世代3へ移行される。さらに別の例として、時間t3において、記憶世代1に記憶されたスライスの4分の1が記憶世代4へ移行され、記憶世代2に記憶されたスライスの4分の1が記憶世代4へ移行され、記憶世代3に記憶されたスライスの4分の1が記憶世代4へ移行される。
図54は、記憶世代を散在ストレージ・ネットワーク(DSN)に追加する例を示すフローチャートである。方法はステップ522から開始または継続し、このステップでは、(たとえば、散在ストレージおよびタスク・ネットワーク(DSTN)管理ユニットの)処理モジュールが、別の記憶世代を1つまたは複数の現行記憶世代に追加することを決定する。その決定することは、好ましくないストレージ使用レベルを検出すること、好ましくないレベルの入力/出力動作を検出すること、1つまたは複数の現行世代に記憶された好ましくない数のメタデータ・オブジェクトを検出することのうちの1つまたは複数に基づくことができる。
方法はステップ524に続き、このステップでは、処理モジュールは、1つまたは複数の現行記憶世代に関連付けられたソース・アドレス範囲対世代マップを入手する。その入手することは、記憶世代から取り出すこと、システム・レジストリから抽出すること、問合せを開始すること、および問合せ応答を受け取ることのうちの少なくとも1つを含む。
方法はステップ526に続き、このステップでは、処理モジュールは、当該別の記憶世代を追加した結果の記憶世代の数を決定する。たとえば、処理モジュールは、ソース・アドレス範囲対世代マップからの現行世代の数と新しい世代の数を足して、世代の数Nを作成する。
方法はステップ528に続き、このステップでは、処理モジュールは、記憶世代の数、および確定的アドレス再割り振り方式に基づいて、ソース・アドレス範囲対世代マップを更新する。たとえば、処理モジュールは、確定的アドレス再割り振り方式をアドレス範囲に適用して、等しいサイズのアドレス範囲を提供する。たとえば、範囲全体をNで割って各世代についての部分を形成して、先行アドレス範囲の割当てのうちの等しいサイズの部分(たとえば、それぞれから1/N)が新しい世代に割り当てられるようにする。アドレス再割り振り方式は、連続したアドレス範囲を1つの可能な範囲として利用することをさらに含むことができる。
方法はステップ530に続き、このステップでは、処理モジュールは、更新されたソース・アドレス範囲対世代マップの各記憶世代への分散を推進する。たとえば、処理モジュールは、すべての世代へマップを発行し、将来の発行のためにマップをシステム・レジストリ情報に追加する。方法はステップ532に続き、このステップでは、処理モジュールは、更新されたソース・アドレス範囲対世代マップに従って、1つまたは複数の現行記憶世代のそれぞれから当該別の記憶世代へスライスを移行することを推進する。たとえば、処理モジュールは、移行要求を1つまたは複数の現行世代に送る。別の例として、処理モジュールは、移行要求を当該別の記憶世代に送り、移行要求は、移行されるスライスのアドレス範囲に関して1つまたは複数の現行記憶世代にスライス読取り要求を発行する命令を含んでいる。
図55は、散在ストレージ・ネットワーク(DSN)の別の実施形態の概略ブロック図であり、散在ストレージ・ネットワーク(DSN)は、図1のネットワーク24、ならびに散在ストレージおよびタスク(DST)実行(EX)ユニット・セット534を含む。DST実行ユニット・セット534は、DST実行ユニット1〜nのセットを含む。各DST実行ユニットは、図1のDST実行ユニット36を利用して実装され得る。DSNは、後で取り出すための重要情報を記憶するように機能する。重要情報は、ソフトウェア、セキュリティ資格証明、証明書チェーン、暗号化鍵、暗号化鍵シード、構成情報、動作パラメータ、アクセス制御リスト、システム・レジストリ情報、システム管理情報、およびDSNの動作に重要な任意の他の情報のうちの1つまたは複数を含む。
以前に記憶された重要情報を取り出す動作の例として、DST実行ユニット1は、重要情報を外部から取得することを決定する。その決定することは、以前にローカルに記憶された重要情報の欠損を検出すること、破損した重要情報を検出すること、および重要情報の必要性を識別することのうちの1つまたは複数に基づくことができる。たとえば、重要情報の必要性が識別され、その重要情報がDST実行ユニット1で使用可能でない(たとえば、全くローカルに記憶されていない)とき、DST実行ユニット1は、重要情報を外部から取得することを決定する。
重要情報を外部から取得することを決定すると、DST実行ユニット1は、重要情報に関連付けられた定足数の候補デバイスを識別する。ここで、定足数の候補デバイスは、重要情報の重複コピーを記憶し得るものである。その識別することは、システム・レジストリ情報を解釈すること、リストにアクセスすること、問合せを開始すること、問合せ応答を受け取ること、および取出し信頼性目標レベルを達成するための所望の候補デバイスの最少数を決定することのうちの少なくとも1つを含む。たとえば、DST実行ユニット1は、候補デバイスのリストがDST実行ユニットのセットを示すとき、DST実行ユニットのセットの他の各DST実行ユニットを定足数の候補デバイスとして識別する。
定足数の候補デバイスを識別すると、DST実行ユニット1は、重要情報の問合せのための定足数の候補デバイスからデバイスを選択する。その選択することは、デバイス・パフォーマンス・レベル、信頼インジケータのデバイス・レベル、デバイス応答履歴情報、事前決定、要求、デバイス可用性情報、および最少数の選択デバイスのうちの1つまたは複数に基づくことができる。たとえば、DST実行ユニット1は、DST実行ユニット2〜nを、各DST実行ユニットが最小信頼閾値レベルより高い信頼レベルに関連付けられているときに選択する。
デバイスを選択すると、DST実行ユニット1は、選択されたデバイスへ重要情報の問合せを発行する。たとえば、DST実行ユニット1は、ネットワーク24を介して重要情報要求536(たとえば重要情報要求2〜n)をDST実行ユニット2〜nへ発行する。DST実行ユニットのそれぞれが、受け取った重要情報要求536を認証および承認し、認証および承認が行われると、重要情報応答538をDST実行ユニット1へ発行する。
DST実行ユニット1は、選択されたデバイスの少なくともいくつかから重要情報応答538を受け取る。たとえば、DST実行ユニット1は重要情報応答2〜nを受け取る。重要情報応答538を受け取ると、DST実行ユニット1は、2つ以上の比べて好ましい(たとえば、受け取られた重要情報が実質的に同じ)受け取られた重要情報応答を識別する。
2つ以上の比べて好ましい受け取られた重要情報応答を識別すると、DST実行ユニット1は、2つ以上の比べて好ましい受け取られた重要情報応答の数を、最少閾値数と比較する。比較結果が好ましいとき(たとえば、数が最少閾値数より大きいとき)、DST実行ユニット1は、2つ以上の比べて好ましい受け取られた重要情報応答の重要情報が有効であることを示す。有効な重要情報を識別すると、DST実行ユニット1は有効な重要情報を利用する。有効な重要情報を利用したら、DST実行ユニット1は、有効な重要情報を即座に削除することができる。たとえば、DST実行ユニット1は、アクセス要求の処理が完了すると、アクセス制御リストを含む有効な重要情報を削除する。
図56は、重要情報を取得する例を示すフローチャートである。方法はステップ540から開始または継続し、このステップでは、(たとえば、散在ストレージおよびタスク(DST)実行ユニットの)処理モジュールが、重要情報を外部から取得することを決定する。その決定することは、重要情報の要求を受け取ること、破損したローカルに記憶された重要情報を検出すること、重要情報の欠損を検出すること、および重要情報の変更を検出することのうちの1つまたは複数に基づくことができる。
方法はステップ542に続き、このステップでは、処理モジュールは、候補デバイスを識別する。これらの各候補デバイスは重要情報のコピーを記憶し得る。その識別することは、関連したデバイス(たとえば他のDST実行ユニット)を識別すること、信頼されるデバイスを識別すること、リストを受け取ること、問合せを開始すること、および問合せ応答を受け取ることのうちの1つまたは複数を含む。方法はステップ544に続き、このステップでは、処理モジュールは、定足数の識別された候補デバイスを選択する。その選択することは、システム・レジストリから定足数を識別すること、最高パフォーマンスのデバイスを識別すること、重要情報に関連付けられたデバイスを識別すること、最も信頼されるデバイスを識別すること、および最も使用可能なデバイスを識別することを含む。
方法はステップ546に続き、このステップでは、処理モジュールは、重要情報要求を、選択された定足数の識別されたデバイスへ発行する。たとえば、処理モジュールは、重要情報の識別子を含むように重要情報要求を生成し、重要情報要求を、選択された定足数の識別されたデバイスに送る。方法はステップ548に続き、このステップでは、処理モジュールは、重要情報応答を受け取る。
方法はステップ550に続き、このステップでは、処理モジュールは、比べて好ましい重要情報応答を識別する。たとえば、処理モジュールは、2つの重要情報応答が実質的に同じであるとき、比べて好ましいものとして、これら2つの重要情報を示す。方法はステップ552に続き、このステップでは、処理モジュールは、比べて好ましい重要情報応答の数が最少閾値レベルと比べて好ましいとき、有効な復元重要情報を示す。たとえば、処理モジュールは、最少閾値レベルを入手し(たとえば、定足数のマジョリティの数として取り出して決定し)、上記数と閾値を比較し、上記数が最少閾値レベルより大きいときに有効であると示す。
方法はステップ554に続き、このステップでは、処理モジュールは、有効な復元重要情報を利用する。たとえば、処理モジュールは、有効な復元重要情報をローカル・メモリに記憶し、有効な復元重要情報を利用するさらなる処理を起動する。代わりにまたは加えて、処理モジュールは、さらなる処理が完了していて重要情報が削除されるべきと決定したとき、ローカルに記憶された有効な復元重要情報を削除する。
図57および図58は、散在ストレージ・ネットワーク(DSN)の別の実施形態の概略ブロック図であり、散在ストレージ・ネットワーク(DSN)は、2つ以上の散在ストレージおよびタスク(DST)クライアント・モジュールA、Bなど、図1のネットワーク24、ならびにDST実行(EX)ユニット・セット560を含む。DST実行ユニット・セット560は、情報伝播アルゴリズム(IDA)の伝播パラメータに従う数のDST実行ユニットを含む。たとえば、DST実行ユニット・セット560は、IDAが5であるとき、5つのDST実行ユニット1〜5を含む。各DST実行ユニットは、図1のDST実行ユニット36を利用して実装され得る。以下では、各DST実行ユニットはストレージ・ユニットと交換可能に称され、DST実行ユニットのセットはストレージ・ユニットのセットと交換可能に称され得る。各DSTクライアント・モジュールは、図1のDSTクライアント・モジュール34を利用して実装され得る。
DSNは、多段階記憶プロセスを利用して、DST実行ユニット1〜5のセットへのデータ・オブジェクトの実質的に同時の記憶から生じる書込み要求競合を解決するように機能する。特に、DSTクライアント・モジュールA、B、C、Dなどのそれぞれが、DST実行ユニット・セット560内にデータ・オブジェクトを記憶しながら、書込み要求競合を解決するように機能する。多段階記憶プロセスは、符号化データ・スライスのセットがストレージ・ユニットに送られ、ストレージ・ユニットが、受け取られた符号化データ・スライスの一時的ロッキングを提供する、書込み段階と、書込み閾値数のセットの符号化データ・スライスがストレージ・ユニットのセットによって受け取られている場合、ストレージ・ユニットによって受け取られた符号化データ・スライスが、取出しのために使用可能にされる(たとえばコミットされる)、コミット段階と、最終処理段階2とを含み、多段階記憶プロセス、および受け取られた符号化データ・スライスのロッキングが、記憶されたデータのその後の更新を可能にする。
図57は、書込み要求競合を解決する動作の例のステップを示し、ここで、DSTクライアント・モジュールAは、記憶されるべきリビジョンAのデータ・オブジェクトfooを含むデータ記憶要求fooを受け取る。記憶されるべきデータ・オブジェクトfooを受け取ると、DSTクライアント・モジュールAは、DSTクライアント・モジュールAに関連付けられたインターフェース、およびネットワーク24を介して、散在ストレージ・エラー符号化されたバージョンのデータ・オブジェクトfooの書込み要求をDSNのストレージ・ユニットへ発行する。データ・オブジェクトに関する(たとえば、DSTクライアント・モジュールB、C、Dなどからの)実質的に同時の書込み要求が、そうした書込み要求を含む。書込み要求の発行は、DSTクライアント・モジュールAがデータ・オブジェクトfooを散在ストレージ・エラー符号化して、複数のセットの符号化されたデータ・スライスを作成することを含む。複数のセットの符号化されたデータ・スライスを作成すると、DSTクライアント・モジュールAは、データ・オブジェクトfooに対応する複数のセットのスライス名を生成する。複数のセットのスライス名を作成すると、DSTクライアント・モジュールAは、複数のセットの符号化されたデータ・スライスおよび複数のセットのスライス名を含む、1つまたは複数のセットのスライス書込み要求を生成する。たとえば、DSTクライアント・モジュールAはスライス書込み要求A1〜A5を生成する。1つまたは複数のセットのスライス書込み要求を生成すると、DSTクライアント・モジュールAは、ネットワーク24を介して、スライス書込み要求A1〜A5をDST実行ユニット1〜5のセットに送る。
実質的に同時に、少なくともDSTクライアント・モジュールBが、データ・オブジェクトfooのリビジョンB(たとえば、リビジョンAと比較して前または後のバージョン)を含む別のデータ記憶要求fooを受け取る。DSTクライアント・モジュールAによるスライス書込み要求の作成と同様のやり方で、DSTクライアント・モジュールBは、別の複数のセットの符号化されたデータ・スライスおよび別の複数のセットのスライス名を含む、別のセットのスライス書込み要求B1〜B5を生成し、当該別の複数のセットのスライス名は、スライス書込み要求A1〜A5に関連付けられた複数のセットのスライス名と実質的に同じである。スライス書込み要求B1〜B5のセットを作成すると、DSTクライアント・モジュールBは、ネットワーク24を介して、スライス書込み要求B1〜B5のセットをDST実行ユニット1〜5のセットに送る。
書込み競合が、スライス書込み要求A1〜A5のセットの書込みとスライス書込み要求B1〜B5のセットの書込みとの間で発生する可能性がある。スライス書込み要求を受け取る各DST実行ユニットは、スライス書込み要求AおよびBの第1のスライス書込み要求を受け取り、第1のスライス書込み要求を受け取った後にスライス書込み要求AおよびBの第2のスライス書込み要求を受け取る。ここで、第1のスライス書込み要求は、書込みのさらなるステップを可能にするためのロッキングおよび関連付けられたスライス名に関連付けられ、第2のスライス書込み要求は、競合エラーに関連付けられる。たとえば、DST実行ユニット1は、スライス書込み要求A1を第1のスライス書込み要求として受け取り、スライス書込み要求A1をロッキングに関連付け、スライス書込み要求A1がロッキングに既に関連付けられているとき、スライス書込み要求B1を第2のスライス書込み要求として受け取り、スライス書込み要求B1を競合エラーに関連付ける。
DSTクライアント・モジュールAの書込み段階およびDSTクライアント・モジュールBの書込み段階は、DSTクライアント・モジュールAまたはBのいずれかが、対応する書込み閾値数の符号化されたデータ・スライスがロックに関係付けられたという標識を受け取ると、コミット段階に進むことができる。多段階記憶プロセスの書込み段階中のロッキングのさらなる例では、DSTクライアント・モジュールAが、符号化されたデータ・スライス1、2、および3のロッキングに関連付けられる一方、DSTクライアント・モジュールBが、符号化されたデータ・スライス4および5のロッキングに関連付けられる。したがって、書込み競合により書込み閾値数の符号化されたデータ・スライスのロッキングをDSTクライアント・モジュールのいずれも達成していないとき、一時的膠着が発生している。
図58は、書込み要求競合を解決する動作の例のさらなるステップを示し、ここでは、書込み要求に応答して、DSTクライアント・モジュールAが、DST実行ユニットの少なくともいくつかから書込み応答(たとえばスライス書込み応答A1〜A5)を受け取り、各書込み応答は、ロック標識、または非ロック標識および競合情報を含んでいる。たとえば、DSTクライアント・モジュールAは、ロック標識を含むスライス書込み応答A1〜A3を受け取り、また、非ロック標識および競合情報を有するスライス書込み応答A4〜A5を受け取る。
競合情報は、ロック標識を受け取った第2のコンピューティング・デバイス(たとえばDSTクライアント・モジュールB)によって発行された散在ストレージ・エラー符号化されたバージョンのデータ・オブジェクトの第2の書込み要求(たとえばスライス書込み要求B4またはB5)のアイデンティティ、第2のコンピューティング・デバイス(たとえばDSTクライアント・モジュールB)のアイデンティティ、ロック標識を受け取らなかった第3のコンピューティング・デバイス(たとえばDSTクライアント・モジュールC)によって発行された散在ストレージ・エラー符号化されたバージョンのデータ・オブジェクトの第3の書込み要求のアイデンティティ、第3のコンピューティング・デバイス(たとえばDSTクライアント・モジュールC)のアイデンティティ、および、少なくともいくつかのストレージ・ユニットのうちの1つの書込み要求処理特性に関する情報のうちの1つまたは複数を含む。書込み要求処理特性に関する情報は、ロックの期間、種々の時間フレームにわたって生成された競合の数、種々の時間フレームにわたる固有の要求元の数、前のロックの期間、複数の書込み要求の受信に関連付けられたタイムスタンプ、複数の書込み要求の受信の順序付け、および要求エンティティ優先レベルのうちの1つまたは複数を含む。
書込み応答を受け取ると、DSTクライアント・モジュールAは、ロック標識を含む少なくとも書込み閾値数の書込み応答が受け取られているかどうかを決定する。たとえば、DSTクライアント・モジュールAは、ロック標識を含むスライス書込み応答A1〜A3(たとえば3つの応答)のみを受け取り、書込み閾値数が4である場合、ロック標識を含む少なくとも書込み閾値数の書込み応答よりも少ない書込み応答が受け取られたことを示す。
ロック標識を含む少なくとも書込み閾値数の書込み応答が受け取られていないとき、DSTクライアント・モジュールは、競合情報を処理して、当該書込み要求よりも高い優先度を有する実質的に同時の書込み要求のうちの1つまたは複数の他の書込み要求を識別する。具体的な例として、DSTクライアント・モジュールBは、1つまたは複数の他の書込み要求のそれぞれに応答して、当該書込み要求に関して受け取られたよりも多数のロック標識が受け取られたことを決定する(たとえば、DSTクライアント・モジュールAが3つのロック標識を受け取ったのに対して、DSTクライアント・モジュールBは2つのみのロック標識を受け取ったことに留意されたい)。別の具体的な例として、1つまたは複数の他の書込み要求のうちの1つに関して当該書込み要求に関して受け取られたのと等しい数のロック標識が受け取られた場合、DSTクライアント・モジュールは、1つまたは複数の他の書込み要求のうちの1つに応答して、当該書込み要求に関して受け取られたのと等しい数のロック標識が受け取られた(たとえば、タイ)と決定し、再試行タイブレーク・プロトコル(retry tie-breaking protocol)を実行する。
再試行タイブレーク・プロトコルは、DSTクライアント・モジュールが、1つまたは複数の他の書込み要求のうちの1つに優先権を与えることを含むが、これは、1つまたは複数の他の書込み要求のうちの1つに関連付けられた別のコンピューティング・デバイス(たとえば別のDSTクライアント・モジュール)が、このコンピューティング・デバイスよりも高いデバイス優先度を有するときである。たとえば、DSTクライアント・モジュールBは、別のシナリオでタイが発生したとき、DSTクライアント・モジュールAの要求に優先権を与える。あるいは、再試行タイブレーク・プロトコルは、DSTクライアント・モジュールが、コンピューティング・デバイスの書込み要求あるいは他のコンピューティング・デバイスの1つまたは複数の他の書込み要求に対してのロック標識を提供しなかったストレージ・ユニットの少なくともいくつかのストレージ・ユニットからの競合情報を解釈して、書込み要求と1つまたは複数の他の書込み要求との間の再試行優先度を決定することを含む。たとえば、DSTクライアント・モジュールは、DSTクライアント・モジュールの書込み要求が他のSTクライアント・モジュールの優先度より高いか低いかを決定する。
書込み要求よりも高い優先度を有する実質的に同時の書込み要求のうちの1つまたは複数の他の書込み要求を識別すると、DSTクライアント・モジュールAは、より高い優先度を有する1つまたは複数の他の書込み要求に基づいて、書込み要求再試行時間フレームを設定する。たとえば、DSTクライアント・モジュールAは、ロック状態が関連付けられたDSTクライアント・モジュールBの2つのスライス書込み要求が解放される時の推定(たとえば、ストレージ・ユニットにおけるタイムアウト、ストレージ・ユニットがDSTクライアント・モジュールBから不当な要求を受け取る)に基づいて、書込み要求再試行時間フレームを設定する。
書込み要求再試行時間フレームを設定すると、書込み要求再試行時間フレームの満了時に、DSTクライアント・モジュールAは、散在ストレージ・エラー符号化されたバージョンのデータ・オブジェクトの再試行書込み要求を発行する。たとえば、DSTクライアント・モジュールAが、再試行書込み要求を試みる間、DST実行ユニット1〜3に関連付けられた符号化データ・スライス1〜3に対するロックが満了しないと決定するとき、DSTクライアント・モジュールAは、ネットワーク24を介して、再試行スライス書込み要求A4およびA5をDST実行ユニット4および5へ発行する。別の例として、DSTクライアント・モジュールAが、再試行書込み要求を試みる間、符号化データ・スライス1〜3に対するロックがおそらく満了すると決定するとき、DSTクライアント・モジュールAは、ネットワーク24を介して、再試行スライス書込み要求A1〜A5を発行する。
再試行書込み要求を発行すると、DSTクライアント・モジュールAは、再試行書込み要求に応答して、ストレージ・ユニットの少なくともいくつかから再試行書込み応答を受け取り、各再試行書込み応答は、ロック標識、または非ロック標識および更新された競合情報を含んでいる。たとえば、DSTクライアント・モジュールAは、別のスライス書込み応答A4および別のスライス書込み応答A5を含む再試行書込み応答を受け取り、少なくとも1つのスライス書込み応答が、ロック標識を含んでいる。
再試行書込み応答を受け取ると、DSTクライアント・モジュールAは、ロック標識を含む少なくとも書込み閾値数の再試行書込み応答(たとえば、スライス書込み要求または再試行スライス書込み要求あるいはその両方に由来するスライス書込み応答)が、受け取られているかどうかを決定する。たとえば、DSTクライアント・モジュールAは、ロック状態を示すスライス書込み応答A1〜A5を受け取るとき、および少なくとももう1つのロック状態を示す他のスライス書込み応答A4〜A5を受け取るときに、書込み閾値数の再試行書込み応答が受け取られていることを示す。ロック標識を含む少なくとも再試行書込み閾値数の再試行書込み応答が受け取られている場合、DSTクライアント・モジュールAは、コミット・コマンドをストレージ・ユニットの少なくともいくつかに発行する。たとえば、DSTクライアント・モジュールAは、ネットワーク24を介して、DST実行ユニット・セット560の各DST実行ユニットへトランザクション・コミット要求を発行して、コミット段階を実行する。DST実行ユニットのセットによる書込み閾値数のトランザクション・コミット要求の受信の確認の後、DSTクライアント・モジュールAは、ネットワーク24を介して、DST実行ユニット・セット560のDST実行ユニットへトランザクション最終処理要求を発行して、最終処理段階を完了する。
図59は、書込み要求競合を解決する例を示す表である。特に、この表は、書込み要求競合を解決する動作の別の例のステップを表し、ここでは、4つのDST処理モジュールA〜Dが、図57〜58のストレージ・ユニット1〜5のセットへのデータ・オブジェクトの書込みについて競合している。表は、要求シークエンシング部562、ロック情報部564、および推定優先度部566を含む。要求シークエンシング部562は、ストレージ・ユニット・フィールド568、ロック元フィールド570、および要求の受信順序フィールド572を含む。ロック情報部564は、DST処理モジュールA〜Dのそれぞれに対する優先順序応答のフィールドを含む。推定優先度部566は、DST処理モジュールA〜Dのそれぞれによる自己ランキングおよび優先順序推定のフィールドを含む。
動作の例において、ストレージ・ユニット・フィールド568のエントリは、ストレージ・ユニット1〜5のうちの特定のストレージ・ユニットを示す。ロック元フィールド570は、対応するストレージ・ユニットによるロッキング選択を示す。たとえば、ストレージ・ユニット2は、DST処理モジュールBに対してロック標識を含む書込み応答を返す。要求の受信順序フィールド572のエントリは、対応するストレージ・ユニットによるDST処理モジュールから受け取られる書込み要求の順序付けを示す。たとえば、ストレージ・ユニット2は、最初にDST処理モジュールBからスライス書込み要求を受け取り、2番目にDST処理モジュールAからスライス書込み要求を受け取り、3番目にDST処理モジュールDからスライス書込み要求を受け取り、4番目にDST処理モジュールCからスライス書込み要求を受け取る。
書込み要求を受け取ると、各ストレージ・ユニットは、書込み応答を対応する要求元DST処理モジュールへ発行する。第1のスライス書込み要求を受け取ると、ストレージ・ユニットは、ロック標識を含む書込み応答(たとえば、その時点で、対応するDST処理モジュールがロックを所有し競合が存在しないことを示す)を発行する。たとえば、ストレージ・ユニット2は、DST処理モジュールBから第1のスライス書込み要求を受け取り、第1のスライス書込み応答をDST処理モジュールBへ発行して、DST処理モジュールBがロックを所有することを示す。第2のスライス書込み要求を受け取ると、ストレージ・ユニットは、非ロック標識および競合情報を含む第2のスライス書込み応答を発行する。たとえば、ストレージ・ユニット2は、DST処理モジュールAから第2のスライス書込み要求を受け取り、第2のスライス書込み応答をDST処理モジュールAへ発行する。ここで、第2のスライス書込み応答は、非ロック標識および競合情報を含んでおり、競合情報は、DST処理モジュールBがロックを所有し、DST処理モジュールAが第2のスライス書込み要求(たとえば第2の優先度)に関連付けられていることを示す。
スライス書込み応答を受け取る各DST処理モジュールは、ロック標識、非ロック標識、および競合情報のうちの1つまたは複数を解釈して、他のDST処理モジュールに対する優先順位を推定する。推定することは、競合情報を処理して、書込み要求よりも高い優先度を有する実質的に同時の書込み要求のうちの1つまたは複数の他の書込み要求を識別することを含む。たとえば、DST処理モジュールBは、1つまたは複数の他の書込み要求のそれぞれに応答して、DST処理モジュールBに関連付けられた書込み要求に関して受け取られたよりも大きな数のロック標識が受け取られた(たとえば、DST処理モジュールAおよびCの両方は2つのロックを受け取り、DST処理モジュールBは1つのみのロックを受け取った)ことを決定する。
別の例として、DST処理モジュールAおよびCの両方は、1つまたは複数の他の書込み要求のうちの1つに応答して、DST処理モジュールAおよびCに関連付けられた書込み要求に関して受け取られたのと等しい数のロック標識が受け取られた(たとえば、DST処理モジュールAおよびCの両方が2つのロックを受け取った)ことを決定する。等しい数のロック標識が受け取られると、DST処理モジュールAおよびCの両方が再試行タイブレーク・プロトコルを実行する。再試行タイブレーク・プロトコルは、1つまたは複数の他の書込み要求のうちの1つに優先権を与えることを含むが、そうするのは、1つまたは複数の他の書込み要求のうちの1つに関連付けられた別のコンピューティング・デバイスが、このコンピューティング・デバイスよりも高いデバイス優先度を有するときである。たとえば、DST処理モジュールCは、DST処理モジュールCへ発行されたスライス書込み応答に基づいて、DST処理モジュールAがより高い優先度を有すると推定し(たとえば、優先順序応答B、A、C、D)、第2の優先度レベルをDST処理モジュールCに関連付ける。同様の例において、DST処理モジュールAも、DST処理モジュールAがより高い優先度を有すると推定し、第1の優先度レベルをDST処理モジュールAに関連付ける。
DST処理モジュールAおよびCがそれぞれ2つのロックを所有し、DST処理モジュールBが優先順序応答に示されるようにDST処理モジュールDよりも高い優先度を有することを、ロック標識が示すとき、DST処理モジュールBは、DST処理モジュールBが5つのストレージ・ユニットから受け取った5つのスライス書込み応答を解釈して、ランクを3に推定する。DST処理モジュールAおよびCがそれぞれ2つのロックを所有し、DST処理モジュールBの優先順序がDST処理モジュールDの優先順序よりも常に高いことを、ロック標識が示すとき、DST処理モジュールBは、DST処理モジュールBが5つのストレージ・ユニットから受け取った5つの書込み応答を解釈して、ランクを4に推定する。
優先順位を推定すると、各DST処理モジュールは、より高い優先度を有する1つまたは複数の他の書込み要求に基づいて、書込み要求再試行時間フレームを設定し、書込み要求再試行時間フレームの満了時に、再試行書込み要求を1つまたは複数のストレージ・ユニットへ発行する。書込み要求再試行時間フレームの設定は、さらに競合情報の1つまたは複数の態様に基づいてもよい。たとえば、DST処理モジュールは、多段階書込みプロセスを処理する推定時間、推定ロック期間、ロック・タイムアウト期間、過去の競合レート、および過去の各再試行の成功の確率のうちの1つまたは複数に基づいて、書込み要求再試行時間フレームを設定する。たとえば、DST処理モジュールAは、第1の優先順位を推定するときに多段階書込みプロセスを実行するための推定時間と実質的に同じになるように関連の書込み要求再試行時間フレームを設定し、DST処理モジュールCは、第2の優先順位を推定するときに多段階書込みプロセスを実行するための推定書込み時間の2倍になるように関連の書込み要求再試行時間フレームを設定し、DST処理モジュールBは、第3の優先順位を推定するときに多段階書込みプロセスを実行するための推定書込み時間の3倍になるように関連の書込み要求再試行時間フレームを設定し、DST処理モジュールDは、第4の優先順位を推定するときに多段階書込みプロセスを実行するための推定書込み時間の4倍になるように関連の書込み要求再試行時間フレームを設定する。したがって、方法は、さらなる競合なしに逐次的な効率的な様式で、競合する書込み要求を効率的に処理するための、改善されたレベルのシステム動作を提供することができる。
図60は、実質的に同時の書込み要求から生じるデータ・オブジェクトに関する書込み要求競合を解決する例を示すフローチャートである。特に、図1〜図39、図57〜図59、さらに図60と関連して説明される1つまたは複数の機能および特徴と共に用いる方法が提示される。方法はステップ580から開始し、このステップでは、散在ストレージ・ネットワーク(DSN)の1つまたは複数のコンピューティング・デバイスのうちのコンピューティング・デバイス(たとえば散在ストレージおよびタスク処理モジュール)の処理モジュールが、データ・オブジェクトの散在ストレージ・エラー符号化バージョンの書込み要求をDSNのストレージ・ユニットへ発行する。たとえば、コンピューティング・デバイスは、データ・オブジェクトを散在ストレージ・エラー符号化して、複数のセットの符号化されたデータ・スライスを作成し、複数のセットの符号化されたデータ・スライスをDSNのストレージ・ユニットのセットに送る。
方法はステップ582に続き、このステップでは、コンピューティング・デバイスは、ストレージ・ユニットの少なくともいくつかから書込み応答を受け取り、各読取り応答は、ロック標識、または非ロック標識および競合情報を含んでいる。方法はステップ584に続き、このステップでは、コンピューティング・デバイスは、ロック標識を含む少なくとも書込み閾値数の書込み応答が受け取られているかどうかを決定する。
ロック標識を含む少なくとも書込み閾値数の書込み応答が受け取られていないとき、方法はステップ586に続き、このステップでは、コンピューティング・デバイスは、競合情報を処理して、書込み要求よりも高い優先度を有する実質的に同時の書込み要求のうちの1つまたは複数の他の書込み要求を識別する。たとえば、コンピューティング・デバイスは、1つまたは複数の他の書込み要求のそれぞれに応答して、当該書込み要求に関して受け取られたよりも多数のロック標識が受け取られたことを決定する。別の例として、コンピューティング・デバイスは、1つまたは複数の他の書込み要求のうちの1つに応答して、当該書込み要求に関して受け取られたのと等しい数のロック標識が受け取られたことを決定する。1つまたは複数の他の書込み要求のうちの1つに関して、当該書込み要求に関して受け取られたのと等しい数のロック標識が受け取られたとき、コンピューティング・デバイスは再試行タイブレーク・プロトコルを実行する。たとえば、コンピューティング・デバイスは、1つまたは複数の他の書込み要求のうちの1つに関連付けられた別のコンピューティング・デバイスがこのコンピューティング・デバイスよりも高いデバイス優先度を有するとき、1つまたは複数の他の書込み要求のうちの1つに優先権を与える。別の例として、コンピューティング・デバイスは、コンピューティング・デバイスの書込み要求あるいは他のコンピューティング・デバイスの1つまたは複数の他の書込み要求に対してのロック標識を提供しなかったストレージ・ユニットの少なくともいくつかのストレージ・ユニットからの競合情報を解釈して、書込み要求と1つまたは複数の他の書込み要求との間の再試行優先度を決定する。
方法はステップ588に続き、このステップでは、コンピューティング・デバイスは、より高い優先度を有する1つまたは複数の他の書込み要求に基づいて、書込み要求再試行時間フレームを設定する。書込み要求再試行時間フレームが満了すると、方法はステップ590に続き、このステップでは、コンピューティング・デバイスは、データ・オブジェクトの散在ストレージ・エラー符号化バージョンの再試行書込み要求を発行する。方法はステップ592に続き、このステップでは、コンピューティング・デバイスは、再試行書込み要求に応答して、ストレージ・ユニットの少なくともいくつかから再試行書込み応答を受け取り、各再試行書込み応答は、ロック標識、または非ロック標識および更新された競合情報を含んでいる。
方法はステップ594に続き、このステップでは、コンピューティング・デバイスは、ロック標識を含む少なくとも書込み閾値数の再試行書込み応答が受け取られているかどうかを(たとえば、書込み応答およびロック標識を含む再試行書込み応答の総数から)決定する。ロック標識を含む少なくとも再試行書込み閾値数の再試行書込み応答が受け取られているとき、方法はステップ596に続き、このステップでは、コンピューティング・デバイスは、コミット・コマンドをストレージ・ユニットの少なくともいくつかに発行する。
処理モジュールと関連して上述された方法は、散在ストレージ・ネットワークの他のモジュール、または他のデバイスによって代わりに実行され得る。加えて、動作命令を記憶する少なくとも1つのメモリ部(たとえばコンピュータ可読記憶媒体)が、散在ストレージ・ネットワーク(DSN)の1つまたは複数のコンピューティング・デバイスの1つまたは複数の処理モジュールによって実行されたとき、上述された任意またはすべての方法ステップを1つまたは複数のコンピューティング・デバイスに実行させることができる。
図61は、散在ストレージ・ネットワーク(DSN)の別の実施形態の概略ブロック図であり、散在ストレージ・ネットワーク(DSN)は、複数の散在ストレージおよびタスク(DST)クライアント・モジュール1〜D、図52の散在ストレージおよびタスク・ネットワーク(DSTN)管理ユニット18、図1のネットワーク24、ならびに図52の複数の記憶世代1〜Gを含む。DSNは、記憶世代の1つまたは複数に大量のデータ記憶を取り込み、データの取込みに従って記憶世代をアクティブ化するように機能する。たとえば、DSTクライアント・モジュール1は、取込みデータ1を受け取り、取込みデータを散在ストレージ・エラー符号化して、符号化されたデータ・スライスのセットを作成し、符号化されたデータ・スライスのセットを、前もってアクティブ化された記憶世代1に記憶する。
動作の例において、DSTN管理ユニット18は、各現在アクティブな記憶世代についてストレージ使用レベルを入手する。その入手することは、ストレージ使用レベル要求を発行すること、ストレージ使用レベル応答を受け取ること、エラー・メッセージを解釈すること、DSNログを解釈すること、散在階層インデックス内の記憶標識を解釈すること、および探索を実行することのうちの少なくとも1つを含む。
ストレージ使用レベルを入手すると、DSTN管理ユニット18は、現在アクティブな記憶世代のそれぞれについてデータ取込みレートを入手する。その入手することは、データ取込みレート要求を発行すること、データ取込みレート応答を受け取ること、DSNログを解釈すること、散在階層インデックス内の記憶標識を解釈すること、探索を実行すること、問合せを1つまたは複数のDSTクライアント・モジュールへ発行すること、少なくとも1つのDSTクライアント・モジュールから問合せ応答を受け取ること、および探索を実行することのうちの少なくとも1つを含む。
データ取込みレートを入手すると、DSTN管理ユニット18は、ストレージ使用レベルおよびデータ取込みレートに基づいて、1つまたは複数の他の記憶世代をアクティブ化するかどうかを決定する。たとえば、DSTN管理ユニット18は、ストレージ使用レベルが最大ストレージ使用閾値レベルよりも高いとき、追加の記憶世代をアクティブ化することを示す。別の例として、DSTN管理ユニット18は、データ取込みレートが最大データ取込み閾値レベルよりも高いとき、追加の記憶世代をアクティブ化することを示す。
1つまたは複数の他の記憶世代をアクティブ化するとき、DSTN管理ユニット18は、ストレージ使用レベル、データ取込みレート、および最大データ取込み閾値レベルのうちの1つまたは複数に基づいて、アクティブ化する記憶世代の数を決定する。たとえば、DSTN管理ユニット18は、データ取込みレートが最大データ取込み閾値レベルよりも高いとき、2つ以上の世代をアクティブ化することを決定する。別の例として、DSTN管理ユニット18は、最大データ取込みレート閾値レベルがどの記憶世代についても犠牲にされないように必要とされる世代の数を推定する。
アクティブ化する記憶世代の数を決定すると、DSTN管理ユニット18は、アクティブ化する記憶世代の数に従って、記憶世代を非アクティブ化するための割当てメッセージを発行する。割当てメッセージは、アクティブ化する標識、割り当てられたDSNアドレス範囲、および記憶のために割り振る記憶容量の量のうちの1つまたは複数を含む。たとえば、DSTN管理ユニット18は、ネットワーク24を介して割当てメッセージ2〜3を記憶世代2〜3へ発行してアクティブ化を開始する。
図62は、記憶世代をアクティブ化する例を示すフローチャートである。方法はステップ600から開始または継続し、このステップでは、(たとえば、散在ストレージおよびタスク・ネットワーク(DSTN)管理ユニットの)処理モジュールが、1つまたは複数の現行記憶世代のそれぞれについてストレージ使用レベルを入手する。その入手することは、問合せを開始すること、問合せ応答を受け取ること、探索を実行すること、およびシステム・アクティビティ・ログを解釈することのうちの少なくとも1つを含む。各現行記憶世代について、方法はステップ602に続き、このステップでは、処理モジュールはデータ取込みレートを入手する。その入手することは、問合せを開始すること、問合せ応答を受け取ること、探索を実行すること、およびシステム・アクティビティ・ログを解釈することのうちの少なくとも1つを含む。
方法はステップ604に続き、このステップでは、処理モジュールは、1つまたは複数の他の記憶世代をアクティブ化するかどうかを決定する。たとえば、処理モジュールは、ストレージ使用レベルの少なくとも1つが最大ストレージ使用閾値レベルよりも高いとき、およびデータ取込みレートが最大データ取込み閾値レベルよりも高いときにアクティブ化することを示す。
1つまたは複数の他の記憶世代をアクティブ化するとき、方法はステップ606に続き、このステップでは、処理モジュールは、アクティブ化する記憶世代の数を決定する。たとえば、処理モジュールは、1つまたは複数の他の記憶世代のそれぞれにおける1つまたは複数の現行記憶世代のそれぞれのデータ取込みレートが低いデータ取込み閾値レベルよりも低くなるように、必要とされる世代の数を推定する。
方法はステップ608に続き、このステップでは、処理モジュールは、アクティブ化する記憶世代の数に従って1つまたは複数の非アクティブ記憶世代のそれぞれへ割当てメッセージを発行する。たとえば、処理モジュールは、割り当てられたDSNアドレス範囲および割り振られる記憶容量の量を含むように割当てメッセージを生成し、割当てメッセージを1つまたは複数の他の記憶世代のストレージ・ユニットに送る。
本明細書で使用され得るように、用語「実質的に」および「およそ」は、その対応する用語または要素間の関係性あるいはその両方について業界で受け入れられる許容範囲を与える。そのような業界で受け入れられる許容範囲は、1パーセント未満から50パーセントの範囲に及び、成分値、集積回路プロセス変動、温度変動、立ち上がりおよび立ち下がり時間、または熱雑音、あるいはその組合せに対応するがこれらに限定されない。そのような要素間の関係性は、数パーセントの差から大規模な差に及ぶ。やはり本明細書で使用され得るように、用語「動作可能に結合された」、「結合された」または「結合」あるいはその組合せは、要素間の直接結合または介在要素を介する要素間の間接結合、あるいはその両方を含む(たとえば、要素は、コンポーネント、エレメント、回路、またはモジュール、あるいはその組合せを含むが、これらに限定されない)。ここで、間接結合については、介在要素は、信号の情報を変更しないが、その電流レベル、電圧レベル、または電力レベル、あるいはその組合せを調整し得る。さらに本明細書で使用され得るように、推論結合(inferred coupling)(すなわち、1つのエレメントが別のエレメントに推論によって結合される)は、「結合される」と同じように2つの要素の間の直接および間接結合を含む。さらに本明細書で使用され得るように、用語「動作可能」または「動作可能に結合された」は、要素が、アクティブにされたときに1つまたは複数のその対応する機能を実行するための電力接続、入力、出力などのうちの1つまたは複数を含むことを示し、さらに1つまたは複数の他の要素に推論結合することを含み得る。さらに本明細書で使用され得るように、用語「関連付けられた」は、別々の要素、または別の要素内に埋め込まれている要素、あるいはその両方の直接または間接あるいはその両方の結合を含む。本明細書で使用され得るように、用語「比較して好ましい」は、2つ以上の要素、信号などの間の比較が望ましい結果を与えることを示す。たとえば、望ましい関係が、信号1が信号2より大きな強度を有することである場合、信号1の強度が信号2の強度よりも大きいとき、または信号2の強度が信号1の強度よりも小さいときに、好ましい比較が達成され得る。
また本明細書で使用され得るように、用語「処理モジュール」、「処理回路」、または「処理ユニット」、あるいはその組合せは、単一処理デバイスまたは複数の処理デバイスであり得る。そのような処理デバイスは、マイクロプロセッサ、マイクロコントローラ、デジタル・シグナル・プロセッサ、マイクロコンピュータ、中央処理装置、フィールド・プログラマブル・ゲート・アレイ、プログラマブル論理デバイス、状態機械、論理回路、アナログ回路、デジタル回路、または回路のハード・コーディングまたは動作命令あるいはその両方に基づいて信号(アナログまたはデジタルあるいはその両方)を操作する任意のデバイス、あるいはその組合せであり得る。処理モジュール、モジュール、処理回路、または処理ユニット、あるいはその組合せは、メモリまたは集積メモリ要素あるいはその両方であり得る、あるいはそれらをさらに含み、それらは、単一のメモリ・デバイス、複数のメモリ・デバイス、または別の処理モジュール、モジュール、処理回路または処理ユニットあるいはその組合せの組み込み回路、あるいはその組合せであり得る。そのようなメモリ・デバイスは、読出し専用メモリ、ランダム・アクセス・メモリ、揮発性メモリ、不揮発性メモリ、スタティック・メモリ、ダイナミック・メモリ、フラッシュ・メモリ、キャッシュ・メモリ、またはデジタル情報を記憶する任意のデバイス、あるいはその組合せであり得る。処理モジュール、モジュール、処理回路、または処理ユニット、あるいはその組合せが、複数の処理デバイスを含む場合、処理デバイスは、中央に配置されてよく(たとえば、有線または無線あるいはその両方のバス構造を介して一緒に直接結合される)、あるいは分散して配置されてもよい(たとえば、ローカル・エリア・ネットワークまたは広域ネットワークあるいはその両方を介した間接結合によるクラウド・コンピューティング)ことに留意されたい。さらに、処理モジュール、モジュール、処理回路、または処理ユニット、あるいはその組合せが、状態機械、アナログ回路、デジタル回路、または論理回路、あるいはその組合せを介してその機能の1つまたは複数を実装する場合、対応する動作命令を記憶するメモリまたはメモリ要素あるいはその両方は、状態機械、アナログ回路、デジタル回路、または論理回路、あるいはその組合せを備える回路の内部あるいは外部に組み込まれ得ることに留意されたい。さらに、図の1つまたは複数に示されたステップまたは機能あるいはその両方の少なくともいくつかに対応するハード・コード命令または動作命令あるいはその両方を、メモリ要素が記憶し、処理モジュール、モジュール、処理回路、または処理ユニット、あるいはその組合せが実行することができることに留意されたい。そのようなメモリ・デバイスまたはメモリ要素は、製造品に含まれ得る。
本発明は、指定された機能およびそれらの関係の特性を示す方法ステップを用いて上記に説明されている。これらの機能的構成ブロックおよび方法ステップの範囲および順序は、本明細書では任意に説明の便宜のために定義されている。指定された機能および関係が適切に実施される限り、代替の範囲および順序が定義され得る。したがって、いずれのそのような代替の範囲または順序も、特許請求される発明の範囲および趣旨の範囲内にある。さらに、これらの機能構成ブロックの範囲は、任意に説明の便宜のために定義されている。特定の重要な機能が適切に実施される限り、代替の範囲が定義され得る。同様に、フロー図のブロックは、特定の重要な機能を示すために任意に本明細書では定義されている。使用できる限り、フロー図ブロックの範囲および順序は、別様に定義されてよく、依然として特定の重要な機能を実施し得る。したがって、機能構成ブロックおよびフロー図ブロックのそのような代替的定義は、特許請求される発明の範囲および趣旨の範囲内にある。当業者にはやはり認識されるように、本明細書における機能構成ブロック、および他の例示的ブロック、モジュール、およびコンポーネントは、例示されたように実装されてよく、あるいは、ディスクリート部品、特定用途向け集積回路、適切なソフトウェアなどを実行するプロセッサ、または任意のこれらの組合せによって実装されてもよい。
本発明はまた、少なくとも部分的に1つまたは複数の実施形態に関して説明されている。本発明の実施形態は、本明細書において、本発明、その態様、その特徴、その概念、またはその例、あるいはその組合せを示すために使用されている。本発明を具体化する装置、製造品、機械、またはプロセス、あるいはその組合せの物理的実施形態は、本明細書に論じられた実施形態の1つまたは複数を参照して説明されている態様、特徴、概念、例などの1つまたは複数を含むことができる。さらに、図ごとに、実施形態は、同じもしくは異なる参照番号を使用し得る同じまたは類似した名前の機能、ステップ、モジュールなどを含んでよく、したがって、それらの機能、ステップ、モジュールなどは、同じまたは類似の機能、ステップ、モジュールなどであってよく、あるいはそれらは異なってもよい。
上記に説明された図におけるトランジスタは電界効果トランジスタ(FET)として示されているが、当業者には理解されるように、トランジスタは、任意のタイプのトランジスタ構造を使用して実装されてもよく、それらのトランジスタ構造は、バイポーラ、金属酸化物半導体電界効果トランジスタ(MOSFET)、N型ウェル・トランジスタ、P型ウェル・トランジスタ、エンハンスメント・モード、デプレッション・モード、ゼロ電圧閾値(VT)トランジスタを含むが、これらに限定されない。
特に記述されていない限り、本明細書に提示された図面の任意の図における要素への、要素からの、または要素間の、あるいはその組合せの信号は、アナログまたはデジタル、連続時間または離散時間、およびシングルエンドまたは差動であり得る。たとえば、信号経路がシングルエンド経路として示されている場合に、それは差動信号経路も表す。同様に、信号経路が差動経路として示されている場合に、それはシングルエンド信号経路も表す。1つまたは複数の特定のアーキテクチャが本明細書に説明されているが、当業者には認識されるように、明示されていない1つまたは複数のデータ・バス、要素間の直接接続、または他の要素間の間接接続、あるいはその組合せを使用する他のアーキテクチャが同様に実装されてもよい。
用語「モジュール」は、本発明の様々な実施形態の説明で使用されている。モジュールは、本明細書に説明され得るような1つまたは複数の機能を実行するための処理モジュール、機能ブロック、ハードウェア、またはメモリに記憶されたソフトウェア、あるいはその組合せを含む。モジュールがハードウェアによって実装される場合、ハードウェアは、ソフトウェアまたはファームウェアあるいはその両方と独立してまたは関連してあるいはその両方で動作することができることに留意されたい。本明細書で使用される場合、モジュールは、1つまたは複数のサブ・モジュールを含むことができ、各サブ・モジュールは、1つまたは複数のモジュールであり得る。
本明細書では本発明の様々な機能および特徴の特定の組合せが明示的に説明されているが、これらの特徴および機能の他の組合せも同様に可能である。本発明は、本明細書に開示された特定の例によって限定されず、これらの他の組合せを明白に組み込んでいる。