(57)【要約】本発明は、ある制約によって結び付けられた変数の集合を定める誤り訂正符号を用いたデータ記憶方法に関する。各変数はソースデータ及び冗長データの少なくとも一方に関連付けられる。本発明による方法は、前記符号の少なくとも１つのストッピングサイクルを構成する変数を見いだすステップ３１と、ストッピングサイクルを構成する各変数に異なる記憶媒体が割り当てられるような前記変数の割当て方式を決定するステップ３２と、前記割当て方式に従って、前記変数又は前記変数に関連付けられるデータを前記記憶媒体に分散させるステップ３３とを含む。【選択図】図３
2017505498.tif 000002
【特許請求の範囲】
【請求項１】
ある制約によって結び付けられた変数の集合を定める誤り訂正符号を用いたデータ記憶方法であって、各変数はソースデータ及び冗長データの少なくとも一方に関連付けられ、
前記符号の少なくとも１つのストッピングセットを構成する変数を見いだすステップ（３１）と、
ストッピングセットを構成する各変数に異なるストレージキャリアが割り当てられるような、前記変数を割り当てるための割当て方式を決定するステップ（３２）と、
前記割当て方式に従って、前記変数又は前記変数に関連付けられるデータを複数の前記ストレージキャリアに分散させるステップ（３３）と
を含むデータ記憶方法。
【請求項２】
前記誤り訂正符号が疎グラフ符号であり、前記誤り訂正符号の生成行列又はパリティ検査行列が疎行列である、請求項１に記載のデータ記憶方法。
【請求項３】
前記誤り訂正符号が組織的である、請求項１又は２に記載のデータ記憶方法。
【請求項４】
構造化行列と呼ばれる、少なくとも１つの所定のパターンの繰返しから構成される生成行列又はパリティ検査行列を決定する、前記誤り訂正符号を構築するための予備ステップ（３０）を含む請求項１〜３のいずれか一項に記載のデータ記憶方法。
【請求項５】
前記分散させるステップ（３３）は、所与の変数に関連付けられるデータを同じストレージキャリアに記憶するものである、請求項１〜４のいずれか一項に記載のデータ記憶方法。
【請求項６】
前記分散させるステップ（３３）は、同じ変数に関連付けられるデータを異なるストレージキャリアに記憶するものである、請求項１〜４のいずれか一項に記載のデータ記憶方法。
【請求項７】
前記ストレージキャリアは、
ハードディスクドライブと、
磁気テープと、
フラッシュメモリと
を含むグループに属するものである、請求項１〜６のいずれか一項に記載のデータ記憶方法。
【請求項８】
ある制約によって結び付けられた変数の集合を定める誤り訂正符号を用いるデータ記憶デバイスであって、各変数はソースデータ及び冗長データの少なくとも一方に関連付けられ、
前記符号の少なくとも１つのストッピングセットを構成する変数を見いだすモジュールと、
ストッピングセットを構成する各変数に異なるストレージキャリアが割り当てられるような、前記変数を割り当てるための割当て方式を決定するモジュールと、
前記割当て方式に従って、前記変数又は前記変数に関連付けられるデータを複数の前記ストレージキャリアに分散させるモジュールと
を備えたデータ記憶デバイス。
【請求項９】
複数のストレージキャリアに記憶されているデータの復号方法であって、
前記データは、
ある制約によって結び付けられた変数の集合を定める誤り訂正符号であって、各変数はソースデータ及び冗長データの少なくとも一方に関連付けられる、誤り訂正符号と、
前記符号の少なくとも１つのストッピングセットを構成する変数を見いだすステップと、
ストッピングセットを構成する各変数に異なるストレージキャリアが割り当てられるような、前記変数を割り当てるための割当て方式を決定するステップと、
前記割当て方式に従って、前記変数又は前記変数に関連付けられるデータを複数の前記ストレージキャリアに分散させるステップと
により、複数のストレージキャリアにあらかじめ記憶されており、
少なくとも１つの前記ストレージキャリアが故障したときに、
前記符号を表す連立方程式において、消失変数と呼ばれる、故障した前記少なくとも１つのストレージキャリアにあらかじめ記憶されていたデータに関連付けられた単一の変数を有する少なくとも１つの方程式を探索するステップ（１０１）と、
１以上の前記方程式を解くことにより、消失した１以上の変数に関連付けられたデータを再構築し、少なくとも１つの再構築されたデータを得るステップ（１０２）と、
前記少なくとも１つの再構築されたデータを考慮して前記連立方程式を更新するステップ（１０３）と
の少なくとも一回の反復を有する復号ステップ（１００）を含むデータの復号方法。
【請求項１０】
前記分散させるステップにおいて、所与の変数に割り当てられたソースデータ又は冗長データが同じストレージキャリアに記憶された場合に、前記復号方法において、記憶された第１のデータ集合についての前記復号ステップの際に行われる前記連立方程式内の方程式の求解の順序が記憶され、
少なくとも１つの、記憶された第２のデータ集合についての前記復号ステップの際に、前記復号方法において、前記求解の順序に従って前記連立方程式内の方程式が解かれる、請求項９に記載のデータの復号方法。
【請求項１１】
複数のストレージキャリアに記憶されているデータの復号デバイスであって、
前記データは、ある制約によって結び付けられた変数の集合を定める誤り訂正符号を用いるデータ記憶デバイスにより前記複数のストレージキャリアにあらかじめ記憶されており、各変数はソースデータ及び冗長データの少なくとも一方に関連付けられ、
前記データ記憶デバイスは、
前記符号の少なくとも１つのストッピングセットを構成する変数を見いだすモジュールと、
ストッピングセットを構成する各変数に異なるストレージキャリアが割り当てられるような、前記変数を割り当てるための割当て方式を決定するモジュールと、
前記割当て方式に従って、前記変数又は前記変数に関連付けられるデータを前記複数のストレージキャリアに分散させるモジュールと
を備え、
前記復号デバイスは、
前記符号を表す連立方程式において、消失変数と呼ばれる、故障した少なくとも１つの前記ストレージキャリアにあらかじめ記憶されていたデータに関連付けられた単一の変数を有する少なくとも１つの方程式を探索する探索モジュール（１２４）と、
１以上の前記方程式を解くことにより、消失した１以上の前記変数に関連付けられたデータを再構築し、少なくとも１つの再構築されたデータを提供する再構築モジュール（１２５）と、
少なくとも１つの再構築されたデータを考慮して前記連立方程式を更新する更新モジュール（１２６）と
を備えた復号モジュールを有するものであり、
前記探索モジュールと前記再構築モジュールと前記更新モジュールとは、前記少なくとも１つのストレージキャリアが故障したときに少なくとも一回動かされるものである、復号デバイス。
【請求項１２】
請求項１〜７のいずれか一項に記載のデータ記憶方法の各ステップか、請求項９又は１０に記載の記憶されているデータの復号方法の各ステップをコンピュータに実行させる命令を有するコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ記憶の分野に属する。
【０００２】
より具体的には、本発明は、複数のストレージキャリア間でデータを巧みに分散させるために、誤り訂正符号を用いて、より具体的にはグラフ符号を用いて、データを記憶するための手法に関する。
【０００３】
特に本発明は、疎グラフ符号（sparse graph code）を用いる。
【０００４】
本発明は特に、個人データ、企業データ等の記憶に用いられる。
【背景技術】
【０００５】
本明細書の以下の部分において、分散記憶を用いる集中管理ネットワーク（centralized networks with distributed storage、ＣＮＤＳ）の分野における既存の一組の問題及び課題を説明することを試みる。もちろん、本発明はこの特定の応用分野には限定されるものではなく、概ね同様であるか、又は類似した一組の問題及び課題に対処しなければならない任意の記憶手法を対象とするものである。
【０００６】
従来、ＣＮＤＳネットワークは、マスターサーバと、スレーブサーバを有する一以上のハードディスクドライブ群と、クライアントとにより構成される。マスターサーバは、クライアントからファイルを受信し、ファイルを分けて、スレーブサーバに送ることを担当する。スレーブサーバは、ファイルを符号化し、生成されたバイトを自らの裁量において複数のハードディスクドライブに分けることを担当する。あるハードディスクドライブが故障した場合、そのハードディスクドライブに関連付けられたスレーブサーバが、前もって計算されたパリティ値から、消えたデータをリカバリすることを担当する。マスターサーバは、記憶されたデータのクライアントによる読出しの際に、関係するスレーブサーバに要求を送り、データを集め、そのデータをクライアントに送る。
【０００７】
図１に、４つのクライアント１１〜１４と、５つのハードディスクドライブＤ１〜Ｄ５の集まりと、マスタータスク及びスレーブタスクを担当する唯一のサーバ１５とを有するＣＮＤＳネットワークの一例を示す。
【０００８】
記憶されたデータを、特にハードディスクドライブの故障又は障害（loss）から守るために、複製（異なるハードディスクドライブにファイルの複数のコピーを作る）が用いられなければならないか、又は、誤り訂正符号を用いてデータが符号化されなければならない。誤り訂正符号は、送信又は記憶の後に復号器が劣化を検出又は訂正できるようにするための符号である。このような誤り訂正符号は冗長性をもたらし、それにより、ハードディスクドライブの故障時に、消えたデータを再構築できるようにする。
【０００９】
図１の例に戻ると、第１の符号語の第１のソースデータ群（Ｄ１Ａ）が、例えば、ディスクドライブＤ１上に記憶され、第１の符号語の第２のソースデータ群（Ｄ２Ａ）がディスクドライブＤ２上に記憶され、第１の符号語の第３のソースデータ群（Ｄ３Ａ）がディスクドライブＤ３上に記憶され、第１の符号語の第４のソースデータ群（Ｄ４Ａ）がディスクドライブＤ４上に記憶され、第１の符号語の冗長データ群（ＰＡ）がディスクドライブＤ５上に記憶される。同じようにして、例えば、第２の符号語の第１のソースデータ群（Ｄ１Ｂ）が、例えば、ディスクドライブＤ１上に記憶され、第２の符号語の第２のソースデータ群（Ｄ２Ｂ）がディスクドライブＤ２上に記憶され、第２の符号語の第３のソースデータ群（Ｄ２Ｃ）がディスクドライブＤ３上に記憶され、第２の符号語の冗長データ群（ＰＢ）がディスクドライブＤ５上に記憶され、第２の符号語の第４のソースデータ群（Ｄ２Ｄ）がディスクドライブＤ４上に記憶される等である。
【００１０】
別の例では、Ｎ個のハードディスクドライブを有するネットワークを考える。そして、Ｎ−Ｍ個のハードディスクドライブがソースデータ（ユーザデータとも呼ばれる）を記憶し、Ｍ個のハードディスクドライブが冗長データ（パリティデータとも呼ばれる）を記憶する。誤り訂正符号がＭＤＳ符号である場合は、このシステムは、いかなるデータも失うことなく、Ｍ個の同時故障に耐えることができる。
【００１１】
ストレージネットワーク上でデータを割り当て、必要に応じて（符号化時に）冗長性も計算するためのプロトコルを組み合わせた、ＣＮＤＳネットワーク上でデータを記憶するために従来使用されている主なアルゴリズムは、ＲＡＩＤ（Redundant Array of Independent Disk drives）という用語によって規定される。情報技術において、ＲＡＩＤという言葉は、故障の許容度、若しくはセキュリティ、若しくは全体性能を高めるために、又はこれらの全ての要素の組み合わせを高めるために、幾つかのハードディスクドライブ間でデータを分散させるために使用される技術を示す。
【００１２】
ＲＡＩＤプロトコルは当初、小型で安価なものの、信頼性が低い幾つかのハードディスクドライブに基づいて、大容量、それゆえ高価なハードディスクドライブを構成するために提案された。
【００１３】
１つのネットワーク内で接続される複数のハードディスクドライブは、ＲＡＩＤレベルとして知られる、異なるＲＡＩＤアルゴリズムを使用することができる。これらのレベルはそれぞれ、以下の要素に応じて、ハードディスクドライブのネットワークの使用モードを構成する。
・性能：再構築時間の長さ及びサポートされる同時故障数の大きさ
・記憶コスト：記憶のために利用できるバイト数と、ネットワーク内の全バイト数との比
・ハードディスクドライブへのアクセス：ネットワーク上で故障がないときの書込み時間及び読出し時間の長さ
【００１４】
したがって、異なるＲＡＩＤネットワークの構成は、幾つかのパラメータ間の妥協から生じる。幾つかのパラメータとは、ハードディスクドライブ故障に対する保護と、ネットワーク上でのデータの読出し、書込み、再構築の速度と、最後に記憶コストとである。この技術に関する主な制約は、低い記憶コスト及び低い複雑度で、ハードディスクドライブの幾つかの同時故障に対処するために使用することができるＲＡＩＤレベルが存在しないことである。
【００１５】
主な技術的障害は、記憶されたデータを保護するために使用される誤り訂正符号に起因する。
【００１６】
実際、データストレージネットワークについて、これまで使用されている符号は、ＭＤＳ（maximum distance separable、最大距離分離）タイプの符号（又はＭＤＳ符号の組み合わせ）である。そのような符号は確定的（deterministic）である。したがって、各ＲＡＩＤレベルについて、使用される符号はＭＤＳ符号である。
【００１７】
しかし、そのようなＭＤＳタイプの誤り訂正符号は複雑であり、３つ以上の故障に対処するときに使用が難しい。誤り訂正符号を用いない方法より時間がかかるためである。さらに、このようなＭＤＳタイプの誤り訂正符号の使用は、計算を行うために必要とされる高性能の機器に起因して、はるかに高いコストを生じさせる。
【発明の概要】
【発明が解決しようとする課題】
【００１８】
本発明は、データ記憶方法の形式で、従来技術のこれら全ての欠点を有しない新規な方法を提案するものである。本方法は、制約によって結び付けられる変数の集合を定める誤り訂正符号を実現するものである。ここで、各変数はソースデータ及び冗長データの少なくとも一方に関連付けられる。
【課題を解決するための手段】
【００１９】
本発明によれば、本方法は、
符号の少なくとも１つのストッピングセットを構成する変数を見いだすステップと、
ストッピングセットを構成する各変数に異なるストレージキャリアが割り当てられるように、変数を割り当てるための方式を決定するステップと、
前記割当て方式に従って、変数又は該変数に関連付けられるデータをストレージキャリアに分散させるステップと
を含む。
【００２０】
ストッピングセットを構成する変数（又はこれらの変数によって保持される値、データ）を異なるストレージキャリアに分散させることにより、少なくとも１つのストレージキャリアの障害又は故障が発生したとしても、反復復号器を用いてソースデータをリカバリすることができる。したがって、復号の複雑さが緩和される。
【００２１】
より具体的には、ストッピングセットを構成する変数を見いだすことにより、ソースデータをリカバリできるようにするために同時に消失してはならない変数を特定することができる。そのため、ストッピングセットを構成する変数を異なるストレージキャリアに分散させることによって、ストレージキャリアの故障時に、ストッピングセットを構成する全ての変数が同時に消失したとした場合に生じる可能性があった復号器の行き詰まりを防ぐ。
【００２２】
ストッピングセット（停止集合, stopping set）の概念は当業者によく知られており、特に、Richardson及びUrbankeによる「Modern Coding Theory」に記載されている。定義によれば、ストッピングセットは、タナーグラフの形式の表現において、該ストッピングセットを構成する変数に接続される全ての制約ノード（パリティノードとも呼ばれる）が、該ストッピングセットを構成する変数に少なくとも２回接続されるような、変数集合の部分集合である。セットのサイズ（サイクル）は、このように接続される制約ノード及び変数の数によって定められる。
【００２３】
また、誤り訂正符号を、タナーグラフ、パリティ連立方程式、又は生成行列若しくはパリティ検査行列を有する行列式の形により同等に表す方法は、当業者に知られているということに留意されたい。特に、タナーグラフ又はパリティ連立方程式の形による表現は、一般的である。変数（ソースデータ及び冗長データの少なくとも一方）が従わなければならない組み合わせの集合が提示されるからである。生成行列を有する行列式の形での表現は、変数の中から選択されたソースデータから冗長データを求めるために使用することができる。
【００２４】
特に、ソースデータ又は冗長データはビット又はシンボルとすることができ、変数によって保持される値に対応させることができるということに留意されたい。
【００２５】
したがって、本発明によるデータ記憶方法は、ソースデータを含む少なくとも１つのベクトルを符号化し、ソースデータに誤り訂正符号を適用する際に、ソースデータ及び冗長データの少なくとも一方を含む、記憶されることになる少なくとも１つのベクトルを提供するステップを含みうる。そして、分散させるステップにて、複数のストレージキャリアに記憶されることになる１以上のベクトルに対して、関連する変数の値を割り当てることができる。
【００２６】
特に、本発明による誤り訂正符号は、ストレージキャリア（内）の消失タイプの誤りを訂正できるように設計される。
【００２７】
本発明の１つの特定の特徴によれば、誤り訂正符号は、生成行列又はパリティ検査行列が疎行列であるような疎グラフタイプの符号である。
【００２８】
言い換えると、このような符号は、０を多く含む生成行列又はパリティ検査行列によって表すことができる。これは、例えば、ＬＤＰＣ（low density parity check、低密度パリティ検査）タイプの符号、又はＬＤＰＣ符号から派生した符号である。
【００２９】
このようなグラフ符号は複雑度が低いため、データストレージにおいてこれまで使用されてきたＭＤＳ符号化手法よりも、データの符号化及び復号の複雑度が緩和される。
【００３０】
また、データを記憶するためにグラフ符号を使用することは自明ではないことに留意されたい。これらの符号は従来、確率的特性を有するため、むしろデータの再送が可能であるときに使用されるからである。これが、データ記憶に関する従来技術が主にＭＤＳ符号に関連する理由である。
【００３１】
本発明の別の特定の特徴によれば、本方法は、構造化行列（structured matrix）と呼ばれる、少なくとも１つの所定のパターンの繰返しから構成される生成行列又はパリティ検査行列を決定する、誤り訂正符号を構築するための予備ステップを含む。
【００３２】
行列のこのような巡回構造（cyclic structure）又は準巡回構造（擬巡回構造、擬似巡回構造、quasi-cyclic structure）により、短いサイクル、特に誤り訂正符号のストッピングセットを迅速に見いだすことができる。
【００３３】
特に、生成行列又はパリティ検査行列の形及びサイズの少なくとも一方を、利用可能なストレージキャリアの数と、許される変数消失又はストレージキャリアの故障の数との少なくとも一方を考慮して定めることができる。
【００３４】
したがって、生成行列又はパリティ検査行列の列の数は、ストレージキャリアの数、又はストレージキャリアの数の倍数に等しくなければならない。
【００３５】
本発明の１つの特定の特徴によれば、誤り訂正符号は組織符号（systematic code）である。
【００３６】
このため、符号化の結果として得られる、記憶されることになるベクトルは、ソースデータ及び冗長データの両方を保持する。したがって、記憶されるデータの一部（ソースデータに対応する部分）は、数学的演算を何ら実行することなく読み出すことができる。
【００３７】
この目的のために、恒等行列を有する生成行列を用いて符号が構築される。
【００３８】
第１の代替的実施形態によれば、分散させるステップでは、所与の変数に関連付けられるか又は割り当てられるソースデータ及び冗長データの少なくとも一方を、同じストレージキャリアに記憶する。
【００３９】
このようにして、記憶されることになる各ベクトルのソースデータ又は冗長データは、異なるストレージキャリア間に同じように分散され、それにより、復号時間が最適化される。
【００４０】
第２の代替的実施形態によれば、分散ステップでは、同じ変数に関連付けられるか又は割り当てられるソースデータ及び冗長データの少なくとも一方を、異なるストレージキャリアに記憶する。
【００４１】
このようにして、変数を分散させるステップは「ストライプ単位」で行われ、記憶されることになる第１のベクトルに対応する第１のストライプのための第１の割当て方式を決定し、その後、記憶されることになる第２のベクトルに対応する第２のストライプのための第２の割当て方式、記憶されることになる第３のベクトルに対応する第３のストライプのための第３の割当て方式などを決定する。有利なことに、本発明は、複数のストライプに対して、異なるストレージキャリア上で機能する同じ割当て方式を用いる。例えば、変数ｖ０、ｖ１、ｖ２は第１のストライプの場合に第１のストレージキャリアに記憶され、第２のストライプの場合に第２のストレージキャリアに記憶され、第３のストライプの場合に第３のストレージキャリアに記憶される。
【００４２】
特に、ストレージキャリアは、ハードディスクドライブと、磁気テープと、フラッシュメモリと、その他のものとを含むグループに属する。
【００４３】
特に、このようなストレージキャリアはネットワークで結ぶことができる。
【００４４】
このようなネットワークは、動的かつ柔軟なものとすることができる。ネットワークの変更があった場合、誤り訂正符号を構築するステップと、割り当てる（ストッピングセットを見いだし、割当て方式を決定し、変数を別々のストレージキャリアに分散させる）ステップとを再び行うことができる。利用可能なストレージキャリアの数が減った場合は、符号を構築するステップと、ストッピングセットを見いだすステップと、割当て方式を決定するステップとをやり直すことなく、割当て行列から一定の列を削除することによって、割当てを適応させることもできる。
【００４５】
１つの特定の特徴によれば、全てのストレージキャリアが同じサイズを有する。
【００４６】
別の実施形態では、本発明は、制約によって結び付けられる変数の集合を定める誤り訂正符号を用いてデータを記憶するデバイスに関する。各変数は、ソースデータ及び冗長データの少なくとも一方に関連付けられる。
【００４７】
本発明によれば、本デバイスは、
符号の少なくとも１つのストッピングセットを構成する変数を見いだすモジュールと、
ストッピングセットを構成する各変数に別々のストレージキャリアが割り当てられるような、変数を割り当てるための方式を決定するモジュールと、
その割当ての方式に従って、変数又は変数に関連付けられるデータを複数のストレージキャリアに分散させるモジュールと
を有する。
【００４８】
このようなデータストレージデバイスは、上記データ記憶方法の実施に特に適している。例えば、本デバイスは、ユーザデータの符号化と、生成された符号化済みのデータを自らの裁量において複数のストレージキャリアに分散させることとを担当する、ＣＮＤＳネットワークのサーバ（スレーブ又はマスター・スレーブ）に組み込まれる。
【００４９】
このようなデータストレージデバイスは、当然、本発明によるデータ記憶方法の異なる特徴を含んだものとすることができ、その特徴は組み合わせることができるか、又は単独で取り込むことができる。したがって、本データストレージデバイスの特徴及び利点は、データ記憶方法のものと同じである。そのため、それらの特徴及び利点は更に詳細に説明することはしない。
【００５０】
本発明はまた、複数のストレージキャリアに記憶されたデータを復号する方法に関する。このデータは、制約によって結び付けられる変数の集合を定める誤り訂正符号を用いるステップであって、各変数はソースデータ及び冗長データの少なくとも一方に関連付けられるものである、ステップと、符号の少なくとも１つのストッピングセットを構成する変数を見いだすステップと、ストッピングセットを構成する各変数に異なるストレージキャリアが割り当てられるような、変数の割当て方式を決定するステップと、既に説明したもの等の割当て方式に従って、変数又は変数に関連付けられるデータを複数のストレージキャリアに分散させるステップとによって、複数のストレージキャリアにあらかじめ記憶されている。
【００５１】
本発明によれば、この復号方法は、少なくとも１つのストレージキャリアが故障したときに、以下のステップの少なくとも一回の反復を含む復号ステップを実施する。
・符号を表す連立方程式において、消失変数と呼ばれる、故障した１以上のストレージキャリアにあらかじめ記憶されていたデータに関連付けられる単一の変数を示す少なくとも１つの方程式を探索するステップ
・１以上の方程式を解くことによって、消失した１以上の変数に関連付けられるデータを再構築し、少なくとも１つの再構築されたデータを提供するステップ
・少なくとも１つの再構築されたデータを考慮して、連立方程式を更新するステップ
【００５２】
したがって、本発明によれば、データストレージの分野において適用するための、反復的な復号を実現できるようになる。このような復号は、本分野において従来から使用されてきた復号手法よりも複雑度を緩和することができる。
【００５３】
特に、このような復号方法は、本明細書において上記で説明した記憶方法に従って記憶されたデータを復号することに適している。したがって、記憶されたデータを復号するための本方法の特徴及び利点は、データを記憶するための方法と同じである。
【００５４】
特に、分散させるステップにて、所与の変数に関連付けられるか、割り当てられるソースデータ又は冗長データを同じストレージキャリアに記憶する場合は、復号方法においては、記憶されている第１のデータ集合を復号するステップにて行われる連立方程式内の方程式を解く順序を記憶する。少なくとも１つの、記憶された第２のデータ集合を復号するステップにおいては、本復号方法は、この求解順序に従って連立方程式内の方程式を解く。
【００５５】
したがって、データを復号する際に、時間に関して著しい利益が得られる。
【００５６】
別の実施形態では、本発明は、複数のストレージキャリアに記憶されているデータを復号するためのデバイスに関する。このデータは、制約によって結び付けられる変数の集合を定める誤り訂正符号を用いて、データを記憶するためのデバイスによって複数のストレージキャリアにあらかじめ記憶されている。各変数はソースデータ及び冗長データの少なくとも一方に関連付けられる。そのデバイスは、前記符号の少なくとも１つのストッピングセットを構成する変数を見いだすモジュールと、ストッピングセットを構成する各変数に別々のストレージキャリアが割り当てられるような、変数を割り当てるための方式を決定するモジュールと、本明細書において上記で規定されたもの等の割当て方式に従って、変数又は変数に関連付けられるデータを複数のストレージキャリアに分散させるためのモジュールとを有する。
【００５７】
本発明によれば、復号デバイスは復号モジュールを有する。復号モジュールは以下を有する。
・符号を表す連立方程式において、消失変数と呼ばれる、故障した１以上のストレージキャリアにあらかじめ記憶されているデータに関連付けられる単一の変数を有する少なくとも１つの方程式を探索する探索モジュール
・１以上の方程式を解くことによって、消失した１以上の変数に関連付けられるデータを再構築し、少なくとも１つの再構築されたデータを提供する再構築モジュール
・少なくとも１つの再構築されたデータを考慮して、連立方程式を更新するモジュール
探索モジュールと再構築モジュールと更新モジュールとは、少なくとも１つのストレージキャリアが故障したときに、少なくとも一度反復する形で、少なくとも一度起動される。
【００５８】
記憶されたデータを復号するためのこのようなデバイスは、本明細書において上記で説明した、記憶されたデータを復号するための方法の実施に特に適している。例えば、そのデバイスは、記憶されたデータを読み出し、消失したデータを再構築することを担当するＣＮＤＳネットワーク内のサーバ（スレーブ又はマスター・スレーブサーバ）に組み込まれる。
【００５９】
記憶されたデータを復号するためのそのようなデバイスは、当然、本発明による記憶されたデータを復号するための方法の異なる特徴を含むことができ、それらの特徴は組み合わせることができるか、又は単独で取り込むことができる。したがって、記憶されたデータを復号するためのこのデバイスの特徴及び利点は、記憶されたデータを復号するための方法と同じである。それゆえ、それらの特徴及び利点は更に詳細には説明されない。
【００６０】
本発明はまた、１以上のコンピュータプログラムに関する。このコンピュータプログラムは、この１以上のプログラムがコンピュータにより実行されるときに、本明細書において上記で記載されたデータ記憶方法及び記憶されたデータを復号するための方法の少なくとも一方の各ステップを実行するための命令を有する。
【００６１】
本発明による方法は、種々の方法、特に有線の形式又はソフトウェアの形式で実施することができる。
【００６２】
本発明の他の特徴及び特性は、特定の実施形態及び添付の図面に関する以下の説明から更に明らかになる。
【図面の簡単な説明】
【００６３】
【図１．２．３】図１は、ＣＮＤＳネットワークの一例を示す図である。図２は、タナーグラフの概念を想起させる図である。図３は、本発明の少なくとも１つの実施形態による、データを記憶するための方法によって実施される主なステップを示す図である。
【図４Ａ．４Ｂ．７】図４Ａ及び図４Ｂは、ストッピングセットを構成する変数を異なるストレージキャリアに分散させる基本原理を示す図である。図７は、２つの変形形態による、記憶動作の最後において得られる、１０個のハードディスクドライブ上に記憶されることになる３つのベクトルのデータの分散を示す図である。
【図５Ａ．５Ｂ．６】図５Ａ及び図５Ｂは、ストッピングセットを構成する変数を１０個のハードディスクドライブに分散させる一例を示す図である。図６は、記憶動作の最後において得られる、１０個のハードディスクドライブに記憶されることになるベクトルのデータの分散を示す図である。
【図８．９】図８は、２つの変形形態による、記憶動作の最後において得られる、１０個のハードディスクドライブに記憶されることになる３つのベクトルのデータの分散を示す図である。図９は、８個のハードディスクドライブ上の割当て行列の別の例を提示する図である。
【図１０．１１．１２】図１０は、本発明の少なくとも１つの実施形態による、記憶されたデータを復号するための方法によって実施される主なステップを示す図である。図１１は、本発明の１つの特定の実施形態による、データストレージの手法を実施するストレージデバイスの簡略化された構造を示す図である。図１２は、本発明の１つの特定の実施形態による、記憶されたデータを復号するためのデバイスの簡略化された構造を示す図である。
【発明を実施するための形態】
【００６４】
［１  一般原理］
本発明の一般原理は、データストレージの用途において、特定のタイプの誤り訂正符号、すなわちグラフ符号、特に「疎」タイプのグラフ符号の使用に基づく。提案される方法は、グラフ符号の確定的挙動を得るために、特定の誤り訂正符号及びデータ割当てを関連付けるアルゴリズムによるものである。これにより、データストレージシステムのために低い複雑度の符号を使用できるようになる。
【００６５】
符号の確率的特性に起因して、データ記憶への適用ではなく、データ再送信が可能な適用に際して用いることのできるグラフ符号に関する本手法は、当業者にとって自明なものではないことに留意されたい。本発明に従って使用される符号の特定の構造は、この符号に関連付けられる変数の巧みな分散と組み合わせて、グラフ符号の確定的挙動を得ることを可能にする。したがって、本発明によれば、データを記憶するための符号化及び復号（反復的）の複雑度が低いグラフ符号を使用することができる。
【００６６】
特に、提案されるデータストレージモデルは、可変符号語サイズを有するブロック消失通信路（block erasure channel, ＢＬＥＣ）によってシミュレートすることができる。
【００６７】
「ｄ＿ｍａｘ」という表記は、最大のネットワーク保護、すなわち、ネットワークが対応することのできる消失ストレージキャリアの最大数を表す。このとき、消失モデルは以下の通りである。
・確率Ｐ１を有するストレージキャリアのロス
・確率Ｐ２＜Ｐ１を有する２つのストレージキャリアのロス
・．．．
・確率Ｐｄ＿ｍａｘ＜．．．＜Ｐ２＜Ｐ１を有するｄ＿ｍａｘ個のストレージキャリアのロス
・確率Ｐｄ＿ｍａｘ＋１＝０を有するｄ＿ｍａｘ＋１個のストレージキャリアのロス
【００６８】
全てのストレージキャリアが独立していると考えられる場合、Ｐ２＝（Ｐ１）２．．．、Ｐｄ＿ｍａｘ＝（Ｐ１）ｄ＿ｍａｘである。この場合、モデルは、簡略化され、ＢＥＣ（binary erasure channel, ２元消失通信路）に相当する。
【００６９】
提案されるデータストレージモデルは、Ｐ１＞Ｐ２＞．．．＞Ｐｄ＿ｍａｘを有する特定のＢＬＥＣ通信路に対応する。これは、あるデータキャリアの消失の確率が、ネットワークの残り（すなわち、全てのストレージキャリアの）の状態に依存すると見なされることを意味する。
【００７０】
さらに、Ｐｄ＿ｍａｘ＋Δ＝０である。ただし、ΔはΔ＞０であるような整数である。これは、ｄ＿ｍａｘ個よりも多くのストレージキャリアに記憶されるデータが同時に消失する可能性がないということを意味する。
【００７１】
データ記憶にあたり、再送は可能ではないことにも留意されたい。そのため、サイズがｄ＿ｍａｘである全ての故障に対する保護を確保する必要がある。さらに、ストレージコストの最小化にあたり、再構築が確保されなければならない。すなわち、冗長シンボルの数がｄ＿ｍａｘに向かう傾向がなければならない。
【００７２】
したがって、ストッピングセットを構成する変数（又はこれらの変数によって保持される値、データ）を複数のストレージキャリアに分散させることによって、ｄ＿ｍａｘ個のストレージキャリアに障害又は故障が起きたとしても、反復復号器を用いてソースデータをリカバリすることができる。したがって、復号が保証される。同時に、反復復号の複雑度が低いという恩恵が受けられる。
【００７３】
［２  グラフ符号に関する想起］
「疎」グラフ符号は、種々のファミリの誤り訂正符号を組み合わせたものである。これらの符号のうちの第１の種類は、ＬＤＰＣと呼ばれ、Robert Gallagerによって導入された。これらの符号の名称は、例えばＭＤＳ符号の場合とは異なり、使用される生成行列（又はパリティ検査行列）が多くの０を含み、必要となる演算の数が少ないためにパリティビットの計算の複雑度が低下するということに由来する。「グラフ符号（graph code）」という用語は、これらの符号のためにタナーが提案したグラフの形式、一般的に二部グラフの形式の表現に由来する。この表現は、ＬＤＰＣ符号から派生した種類に拡張されており、グラフ符号という用語は、今日、符号化及び復号の少なくとも一方の複雑度が低いこれらの数多くの符号をカバーするものである。
【００７４】
一例として、図２に、グラフの形で表現された誤り訂正符号を示す。グラフの左側にある円は、変数ｖ１〜ｖ５（ソースデータタイプ又は冗長データタイプとすることができる）に対応し、右側にある四角形は制約ｃ１〜ｃ３に対応する。
【００７５】
既に述べたように、このような符号は、連立方程式によって、又は生成行列若しくはパリティ検査行列によって同等に表すことができる。
【００７６】
したがって、図２に示す符号は、以下の連立方程式
【数１】
2017505498.tif 000003
の形式、又は以下のパリティ検査行列
【数２】
2017505498.tif 000004
の形式で表すこともできる。ただし、パリティ検査行列の列は、複数の変数ｖ１〜ｖ５を表し、パリティ検査行列の行は、変数ｖ１〜ｖ５が従わなければならない複数の制約ｃ１〜ｃ３を表す。
【００７７】
ＬＤＰＣ符号及びそれから派生した種類は、シャノン限界に達するか又は近づくことができる一方で、同時に、反復復号器、例えば、確率伝搬法（belief propagation）復号器タイプの使用により、符号化及び復号の低複雑度に適合する。
【００７８】
このような複雑度の低減は大きな欠点を有する。それは、グラフ符号が反復復号器を用いるＭＤＳ符号ではないということである。このことは、データ記憶の場合に、ネットワーク内のＸ個の故障したハードディスクドライブをサポートするためにＹ個の冗長ディスクドライブが必要となることを意味する。ただし、Ｙ＞Ｘである。
【００７９】
本発明は、データストレージシステムにおいてグラフ符号のＭＤＳ演算を得ながら、同時に反復復号器を維持するために、構造化された誤り訂正符号、データ割当ての使用を組み合わせた新規のアルゴリズムを提供するものである。
【００８０】
［３  データ記憶］
以下、図３を参照しながら、本発明によるデータ記憶方法により行われる主なステップを説明する。
【００８１】
この方法は、ある制約によって結び付けられ、それゆえグラフによって表すことのできる変数の集合を定める誤り訂正符号を実現することができる。特に、このようなグラフ符号は疎タイプである。
【００８２】
この方法は、必要に応じて、例えばストレージアルゴリズムが開始されるときに、符号を構築するための予備ステップ３０を実施することができる。
【００８３】
第１のステップ３１において、符号の少なくとも１つのストッピングセット（ＳＳ）を構成する変数が見いだされる。
【００８４】
第２のステップ３２において、ストッピングセットを構成する各変数に別々のストレージキャリアを割り当てるための変数割当て方式が決定される。
【００８５】
第３のステップ３３において、割当て方式に従って、変数（又はこれら変数に関連付けられるデータ）を複数のストレージキャリアに分散させる。そのため、ストッピングセットを構成する各変数（又はそれぞれの関連するデータ）は、別々のストレージキャリアに分散される。特に、ソースデータを符号化するステップは、分散ステップの前に行うことができる。このような符号化ステップにより、少なくとも１つのソースデータベクトルから、記憶されることになる符号化済みデータの少なくとも１つのベクトルの構築が可能となる。それゆえ、その割当て方式により、変数に関連する符号化済みデータを記憶することができる。
【００８６】
既に述べたように、グラフ符号は、反復復号器が使用される場合、非ＭＤＳ符号である。その主な理由は、これらのグラフ符号内に、短いサイクルに対応するストッピングセットが存在するためである。短いサイクルの問題は、起こり得ると考えられる唯一の誤りがデータの一部の消失である場合のデータ記憶との関連において、連立方程式によって表すことができる。あるサイクルの全ての要素が消失した場合、２以上の未知数を有する方程式の集まりが得られ、これにより復号を完了することができなくなる。
【００８７】
したがって、本発明によれば、短いサイクル、より具体的にはストッピングセットを構成する複数の変数を別々のストレージキャリアに分散させることが求められる。
【００８８】
したがって、本発明は、サイクルが容易に特定可能な、高度に構造化された符号（一般的に、このタイプの符号は多数のサイクルを有し、高性能な符号とであるとは見なされない）を使用し、ストッピングセットの全ての変数が同時に消失することのないように変数を巧みに割り当てることを提案する。
【００８９】
変数の概念は、符号の構成そのもののレベルにおいて設計されることを思い起こすことができる。したがって、誤り訂正符号は、変数が従わなければならない組み合わせの集合を定める。これらの変数は、記憶されることになるベクトルとも呼ばれる、符号語のソースデータ及び冗長データに対応する別々の値をとることができる。
【００９０】
特に、Ｎ個のハードディスクドライブを有するデータストレージネットワークを対象とし、全ユーザデータをＫ個のディスクドライブに分散させることができる場合、符号を構築するための構築ステップ３０は、ｎ＝αＮ、ｋ＝αＫというパラメータを有し、ｓ（Ｈ）＞２（Ｎ−Ｋ）である、構造化された符号を構築する。ただし、αは整数であり、ｓ（Ｈ）は、パリティ検査行列Ｈのストッピング距離すなわちストッピングセットの最小サイズである。ｓ（Ｈ）のサイズを有するストッピングセットは、最小ストッピングセットと呼ばれる。
【００９１】
条件ｓ（Ｈ）＞２（Ｎ−Ｋ）は、ストッピングセットを構成する変数に関連付けられるデータを、Ｎ−Ｋ個よりも多くのディスクドライブに分散させることを保証する。構造化された符号の使用は、ストッピングセットを構成する変数を見いだすステップの実施を容易にする。
【００９２】
以下、１０個のハードディスクドライブの集まりにデータを記憶し、２つのハードディスクドライブの故障をサポートする場合の本発明の実施態様の一例を説明する。
【００９３】
既に述べたように、選択される符号は、サイクルの迅速な決定を可能にするものでなければならない。この目的のために、準巡回タイプの構造が使用される。この構造は、全く同一の行列構造を無限に拡張することを可能にするものであることを思い起こすことができる。したがって、（約１００個の変数のオーダーの）所与の小さな構造でサイクルを決定することができる場合には、この構造を拡張することによって、同じサイクルが定期的に見つけられることになる。その際、反復復号が成し遂げられるのを妨げるストッピングセットを見いだすことができる。
【００９４】
例えば、本発明は、データを非常に迅速に符号化することができるＬＤＧＭ符号を使用する。この目的のために、誤り訂正符号を構築するステップの際に、１０行及び５０列を有するパリティ検査行列が構築される。これは、ハードディスクドライブのセクタごとに５バイトを記憶できることを意味する。
【００９５】
このようなパリティ検査行列Ｈは、以下のように、Ｉｄ１０×１０として表される、１０×１０のサイズを有する恒等行列と、列ごとに４つのパターン（１１，１０１，１００１，１０００１）の繰返しとによって構成される。
【数３】
2017505498.tif 000005
ただし、
【数４】
2017505498.tif 000006
である。
【００９６】
パリティ検査行列Ｈの列は、誤り訂正符号の変数ｖ０〜ｖ４９を表し、パリティ検査行列の行は、変数ｖ０〜ｖ４９が従わなければならない制約ｃ０〜ｃ９を表す。
【００９７】
例えば、以下のような式を定義することができる。
【数５】
2017505498.tif 000007
ただし、演算子「＋」は、「排他的論理和」演算子であり、ＸＯＲ演算子とも呼ばれる。
【００９８】
対応する生成行列Ｇは、５０行及び４０列を有する。
【数６】
2017505498.tif 000008
ただし、Ｐは、冗長データを計算するために使用される生成行列のパリティである。
【００９９】
したがって、Ｕ＝（ｕ０，ｕ１，ｕ２，．．．，ｕ３９）のようなソースデータを有するデータＵのベクトルを考える場合、Ｒ＝（ｒ０，ｒ１，ｒ２，．．．，ｒ４９）のような、ソースデータ及び冗長データを含む、記憶されることになるデータのベクトルＲは、以下のようにして得られる。
【数７】
2017505498.tif 000009
ただし、ｒ０〜ｒ３９はソースデータに対応し、ｒ４０〜ｒ４９は冗長データに対応する。
【０１００】
この例では、パリティ検査行列Ｈ及び生成行列Ｇはいずれも、行列Ｐを含むことに留意されたい。これは、データの符号化及び復号のために同じ行列を使用するＬＤＧＭ符号の特性である。
【０１０１】
このようにして誤り訂正符号が構築されると、この符号のストッピングセットを、Gerd Richterによる「Finding small stopping sets in the Tanner graphs of LDPC codes」、M. Hirotomo他による「A probabilistic algorithm for finding the minimum-size stopping sets of LDPC codes」、又はOrlitsky他による「Stopping set distribution of LDPC code ensembles」に記載のアルゴリズムを用いることによって特定することができる。
【０１０２】
特に、パリティ検査行列Ｈは高度に構造化されるため、短いサイクル、特にストッピングセットを容易に見いだすことができる。
【０１０３】
したがって、サイズが６のストッピングセットを構成する変数の集合、サイズが８のストッピングセットを構成する変数の集合等が特定される。そして、ストッピングセットの各変数を、別々のハードディスクドライブに分散させる。
【０１０４】
図４Ａ及び図４Ｂに、ストッピングセットを構成する変数を、ストッピングセットの全ての変数が同時に消えることが起こり得ない程度に多くのディスクドライブに分散させるアイデアのシンプルな説明を示す。
【０１０５】
この例では、斜線ノードはストッピングセットを表す。サイクルを構成するノードの数（すなわち、変数ノードの数及び制約ノードの数）によって定められるサイクルのサイズは６に等しい。ストッピングセットを構成する変数Ａ、Ｃ、Ｅが同時に消失した場合、復号器は、２つの未知数を有する３つの方程式を含む系を解かなければならないことになり、これらの未知数を求めることはできない。２つのディスクドライブのロスに対する保護が求められていることを考える場合には、このストッピングセットを構成する３つの変数Ａ、Ｃ、Ｅは、消失するという事態が起きないようにするために、３つの別々のディスクドライブＤ１、Ｄ２、Ｄ３に分散されることになる。
【０１０６】
パリティ検査行列Ｈが、
【数８】
2017505498.tif 000010
によって定義される上記の例に戻ると、複数の変数ｖ０〜ｖ４９を表すためにパリティ検査行列の列を利用し、変数が満たさなければならない複数の制約ｃ０〜ｃ９を表すためにパリティ検査行列の行を利用する場合、変数ｖ１０、ｖ１１及びｖ２０と、変数ｖ１０、ｖ２１及びｖ３０と、変数ｖ１１、ｖ１２及びｖ２１と、変数ｖ１１、ｖ２２及びｖ３１と、変数ｖ１２、ｖ１３及びｖ２２と、変数ｖ１２、ｖ２３及びｖ３２等を含む、サイズが６のストッピングセットが特定される。
【０１０７】
より具体的には、パリティ検査行列Ｈはサイズが４のサイクルを有しないことがわかる。また、パリティ検査行列Ｈ内の同じパターンに関連付けられる２つの変数（次数１の変数ｖ０〜ｖ９の場合の「１」、次数２の変数ｖ１０〜ｖ１９の場合の「１１」、次数２の変数ｖ２０〜ｖ２９の場合の「１０１」、次数２の変数ｖ３０〜ｖ３９の場合の「１００１」及び次数２の変数ｖ４０〜ｖ４９の場合の「１０００１」）は一般に、（３つの変数によって構成される）サイズが６のサイクルの一部を構成することに留意されたい。そのため、同じパターンに関連付けられる２つの変数を同じキャリアに記憶しないことにする。さらに、同じストレージキャリアに割り当てられた全ての変数が全ての行において２回以上関与しない場合には、上記で述べた点に従うことによって、２つのストレージキャリアの消失時に、サイズが６のサイクルになることがないということがわかる。
【０１０８】
そして、以下の規則に従うことによって、割当て方式を反復的に構築することができる。
【０１０９】
例えば、第１のディスクドライブＤ１の場合、以下の通りである。
ａ）  第１の次数１の変数、すなわち変数ｖ０が取り込まれる。
ｂ）  上記で選択された変数と同じ方程式において０を有する、パターン「１１」による第１の次数２の変数、すなわち変数ｖ１１が取り込まれる。
ｃ）  「フリーな（又は自由）（free）」方程式において非０を有する、パターン「１０１」による第１の次数２の変数、すなわち変数ｖ２３が取り込まれる。
ｄ）  「フリーな」方程式において非０を有する、パターン「１００１」による第１の次数２の変数、すなわち変数ｖ３４が取り込まれる。
ｅ）  パターン「１０００１」による第１の次数２の変数の選択に関する問題が確認される。既に定めた規則に従わないためである。そのため、ｄに関して行われた選択、すなわち、変数ｖ３４は除かれる。
ｆ）  「フリーな」方程式において非０を有する、パターン「１０００１」による第１の次数２の変数、すなわち変数ｖ４４が取り込まれる。
ｇ）  「フリーな」方程式において非０を有する、パターン「１００１」による第１の次数２の変数、すなわち、変数ｖ３６が取り込まれる。
【０１１０】
この方法は、別の変数に対してこのようにして継続され、その後、同じ原理が他のディスクドライブで用いられる。
【０１１１】
例えば、Gerd Richterによる上記文献「Finding small stopping sets in the Tanner graphs of LDPC codes」において提案されているような、既知のアルゴリズムを用いて、短いサイクルを決定することもできる。
【０１１２】
ストッピングセットが特定されると、各ストッピングセットの変数が別々のディスクドライブに分散される。
【０１１３】
図５Ａ及び図５Ｂは、本発明による、ディスクドライブごとに５バイトを用いて機能する、これらの変数を１０個のディスクドライブＤ１〜Ｄ１０間に分散させる一例を示す２つの同等の割当て方式を提示するものである。より具体的には、図５Ａは、全１０個のディスクドライブ間での変数の分散の結果を示す。そして、図５Ｂは、この結果が得られるような割当て行列を示す。例えば、変数ｖ０、ｖ１１、ｖ２３、ｖ４４及びｖ３６（又はこれらの変数によって保持される値）はディスクドライブＤ１に割り当てられ、変数ｖ２、ｖ１３、ｖ２５、ｖ４６及びｖ３８（又はこれらの変数によって保持される値）はディスクドライブＤ２に割り当てられ、変数ｖ４、ｖ１５、ｖ２７、ｖ４８及びｖ３０（又はこれらの変数によって保持される値）はディスクドライブＤ３に割り当てられ、変数ｖ６、ｖ１７、ｖ２９、ｖ４０及びｖ３２（又はこれらの変数によって保持される値）はディスクドライブＤ４に割り当てられ、変数ｖ８、ｖ１９、ｖ２１、ｖ４２及びｖ３４（又はこれらの変数によって保持される値）はディスクドライブＤ５に割り当てられ、変数ｖ１、ｖ１２、ｖ２４、ｖ４５及びｖ３７（又はこれらの変数によって保持される値）はディスクドライブＤ６に割り当てられ、変数ｖ３、ｖ１４、ｖ２６、ｖ４７及びｖ３９（又はこれらの変数によって保持される値）はディスクドライブＤ７に割り当てられ、変数ｖ５、ｖ１６、ｖ２８、ｖ４９及びｖ３１（又はこれらの変数によって保持される値）はディスクドライブＤ８に割り当てられ、変数ｖ７、ｖ１８、ｖ２０、ｖ４１及びｖ３３（又はこれらの変数によって保持される値）はディスクドライブＤ９に割り当てられ、変数ｖ９、ｖ１０、ｖ２２、ｖ４３及びｖ３５（又はこれらの変数によって保持される値）はディスクドライブＤ１０に割り当てられる。ディスクドライブ上の割当ての順序は重要でないことに留意されたい。言い換えると、変数ｖ０、ｖ１１、ｖ２３、ｖ４４及びｖ３６は、ディスクドライブＤ１にではなく、ディスクドライブＤ２に同じように割り当てることもできる。
【０１１４】
言い換えると、本発明に従って提案される割当てを用いて、各ディスクドライブが９個の異なる方程式にのみ関与する変数の集合を記憶するものとなるように変数を分散させる。これは、同じディスクドライブにある変数の集合が、パリティ検査行列のある一つの行に関与しないということを意味する。
【０１１５】
既に述べたように、パリティ検査行列は、高度に構造化されており、数多くの閉じた短いサイクルを有する。したがって、割当てにより、ストッピングセットに関与する変数が３つ以上のディスクドライブに記憶されるものとなるように、変数を分散させることができる。例えば、変数ｖ２６、ｖ４２、ｖ４８と、変数ｖ１４、ｖ２２、ｖ３２とは、これらの変数を記憶しているディスクドライブの故障時に、反復復号を妨げる可能性がある２つのサイクルを構成する。それゆえ、本発明によれば、これらの変数は、３つの異なるディスクドライブに分散される（１つ目のストッピングセットの場合はＤ７、Ｄ５及びＤ３、２つ目のストッピングセットの場合はＤ７、Ｄ１０及びＤ４）。本システムは２個の障害をサポートするように構築されるため、これらのストッピングセットを構成する３つの変数の同時消失は起こり得ないものと考えられる。
【０１１６】
それゆえ、この割当ては、サイズが２である（そして当然、サイズが１である）消失のたびにデータの再構築を保証する。
【０１１７】
以下、本発明の少なくとも１つの実施形態による、データを記憶するための方法を適用するデータストレージの一例を示す。
【０１１８】
既に述べたように、生成行列Ｇは、パリティ検査行列Ｈから得ることができる。この生成行列Ｇにより、ソースデータベクトルＵから、記憶されることになるデータのベクトルＲを得ることができる。
【０１１９】
例えば、本発明に従って構築される符号は組織的である。それゆえ、ソースデータベクトルＵの値は、記憶されることになるデータのベクトルＲにおいて同じように見いだされる。それゆえ、ベクトルＲはソースデータ及び冗長データを含む。
【０１２０】
例えば、以下のシンボルを有するソースデータベクトルＵ１を考える。
【数９】
2017505498.tif 000011
【０１２１】
このソースデータベクトルＵ１に生成行列Ｇを適用することにより、すなわち、ソースデータベクトルＵ１に誤り訂正符号を適用することで、以下のシンボルを有する、記憶されることになるデータのベクトルＲ１が得られる。
【数１０】
2017505498.tif 000012
【０１２２】
これらの値は、例えば、以下に提案するように、既に定めた変数ｖ０〜ｖ４９に適用することができる。
【０１２３】
【表１】
2017505498.tif 000013
【０１２４】
それゆえ、記憶されることになるデータのベクトルＲ１のシンボルは、変数ｖ１〜ｖ４９の場合に提案された割当て方式に従って、１０個のハードディスクドライブ上に記憶することができる。
【０１２５】
図６に、記憶処理の結果を示す。
【０１２６】
後続のソースデータベクトルについては、これまでの動作を繰り返すことができる。例えば、
【数１１】
2017505498.tif 000014
であるようなソースデータベクトルＵ２に生成行列Ｇを適用することによって、すなわち、ソースデータベクトルＵ２に誤り訂正符号を適用することによって、以下のシンボルを持つ、記憶されることになるデータのベクトルＲ２が得られる。
【数１２】
2017505498.tif 000015
【０１２７】
【数１３】
2017505498.tif 000016
であるような、ソースデータベクトルＵ３に生成行列Ｇを適用することによって、以下のシンボルを持つ、記憶されることになるデータのベクトルＲ３が得られる。
【数１４】
2017505498.tif 000017
【０１２８】
これらの値は、既に定められた変数ｖ０〜ｖ４９に適用することができる。
【０１２９】
例えば、上記で定められた変数ｖ０〜ｖ４９は、連続して以下の値をとることができる（各セルにつき、３つの数はそれぞれ、記憶されることになるベクトルＲ１のシンボルと、記憶されることになるベクトルＲ２のシンボルと、記憶されることになるベクトルＲ３のシンボルとに対応する）。
【０１３０】
【表２】
2017505498.tif 000018
【０１３１】
図７に示す第１の変形形態によれば、分散させるステップでは、所与の変数に割り当てられたソースデータ又は冗長データが同じストレージキャリアに記憶される。したがって、変数ｖ０に割り当てられた値２２３、３６及び８０は、ディスクドライブＤ１に記憶される。
【０１３２】
図８に示す第２の変形形態によれば、分散させるステップでは、所与の変数に割り当てられたソースデータ又は冗長データが別々のストレージキャリアに記憶される。
【０１３３】
したがって、変数ｖ０に割り当てられた値２２３、３６及び８０はそれぞれ、ディスクドライブＤ１、ディスクドライブＤ２及びディスクドライブＤ３に記憶される。
【０１３４】
この目的のために、ディスクドライブをストライプに細分することができ、各ストライプが、記憶されることになるベクトルに関連付けられるものとする。記憶されることになる第１のベクトルＲ１は、本明細書において上記で説明されたように記憶される。記憶されることになる第２のベクトルＲ２は、記憶されることになる第１のベクトルＲ１から１ディスクドライブだけシフトして、本明細書において上記で説明されたように記憶される。記憶されることになる第３のベクトルＲ３は、記憶されることになる第２のベクトルＲ２から１ディスクドライブだけシフトして、本明細書において上記で説明されたように記憶される。
【０１３５】
それゆえ、変数を分散させるステップは、「ストライプ単位」で実施され、第１のストライプのための第１の割当て方式が決定され、その後、第２のストライプのための第２の割当て方式が決定され、第３のストライプのための第３の割当て方式が決定されるなどである。図８に示した例によれば、１ハードディスクドライブだけシフトしながら同じ割当て方式が使用される。
【０１３６】
このようにして、冗長（パリティ）データは、ＲＡＩＤアルゴリズムのレベル５（「パリティストライピング」）において提案されるように別々のディスクドライブに分散される。
【０１３７】
単に例示であるが、図９に、２つのハードディスクドライブの故障をサポートする、変数を８個のディスクドライブＤ１〜Ｄ８に分散させる別の例を示す。
【０１３８】
この方式すなわち割当て行列は、下三角ＬＤＰＣ行列に対応し、図５Ｂに示した割当て行列の一定の列を削除することによって得られる。
【０１３９】
この例によれば、符号化及び復号の平均的な複雑度は、１バイトあたり６．２回のＸＯＲ演算になる。
【０１４０】
［４  データの復号］
以下、図１０を参照して、本発明によるデータ復号方法によって実施される主なステップを示す。これは、上記で説明したデータ記憶方法の一実施形態に従って記憶されたデータを復号できるようにするものである。
【０１４１】
本発明によれば、この復号方法は、１以上のストレージキャリアが消失したとしても、ソースデータをリカバリすることを可能にする。
【０１４２】
この目的のために、この種類の復号方法は、少なくとも１つのストレージキャリアが故障したときに、以下のステップの少なくとも一回の反復を含む復号ステップ１００を実施する。
・符号を表す連立方程式において、消失変数と呼ばれる、故障した１以上のストレージキャリアにあらかじめ記憶されているデータ（ソース及び冗長の少なくとも一方）に関連付けられている単一の変数を有する少なくとも１つの方程式を探索するステップ１０１。本ステップにより特に、容易に解くことができる、連立方程式における単一の未知数を有する式を特定することが可能となる。
・１以上の方程式を解くことにより、消失した１以上の変数に関連付けられるデータを再構築するステップ１０２。少なくとも１つの再構築データが得られる。
・少なくとも１つの再構築されたデータを考慮して連立方程式を更新するステップ１０３。本ステップにより特に、ステップ１０２において再構築されたデータに関連付けられる１以上の変数が関与する方程式を更新することができる。
【０１４３】
これらの探索するステップ１０１と、再構築するステップ１０２と、連立方程式を更新するステップ１０３とは、全ての変数が決定されるまで実施される。特に、更新するステップは、データが再構築されるときにはいつでも実施することができる。
【０１４４】
復号するステップ１００は、記憶された各ベクトルＲを復号するために、すなわち、ストライプ単位で実施される。
【０１４５】
より具体的には、２つのハードディスクドライブの故障をサポートする、図７に示したような１０個のハードディスクドライブの集まりに記憶されたデータを復号するための本発明の実施態様の一例を示す。
【０１４６】
ディスクドライブＤ１及びＤ２が故障したとする。したがって、ディスクドライブＤ３〜Ｄ１０のみが、ソースデータ（ユーザデータ）を再構築するために利用できる。
【０１４７】
上記で説明した復号ステップが第１のストライプに適用される。
【０１４８】
まず、符号を表す連立方程式において、第１の反復にて、消失変数と呼ばれる、故障した１以上のストレージキャリアに前もって記憶されていたデータに関連付けられる単一の変数を有する１以上の方程式の探索が行われる。本ステップにより特に、容易に解くことができる、連立方程式における単一の未知数を有する式を特定することができる。
【０１４９】
パリティ検査行列の第１行に対応する第１の方程式、すなわち、
【数１５】
2017505498.tif 000019
は、２つの未知数を含む。ディスクドライブＤ１及びＤ２に記憶されていた変数ｖ０及びｖ４６に関連付けられるデータが消失したからである。
【０１５０】
パリティ検査行列の第２行に対応する第２の方程式、すなわち、
【数１６】
2017505498.tif 000020
は、２つの未知数を含む。ディスクドライブＤ１及びＤ２に記憶されていた変数ｖ１１及びｖ３８に関連付けられるデータが消失したからである。
【０１５１】
これは以下の方程式の場合にも同じく当てはまる。
【数１７】
2017505498.tif 000021
【０１５２】
しかし、第８の方程式
【数１８】
2017505498.tif 000022
は、未知数を１つだけ含み、そのデータは変数ｖ２５に関連付けられている。
【０１５３】
したがって、その値は、第８の方程式を解くことによって求めることができる。
【数１９】
2017505498.tif 000023
【０１５４】
第９の方程式、すなわち、
【数２０】
2017505498.tif 000024
は２つの未知数を含む。
【０１５５】
これに対し、第１０の方程式
【数２１】
2017505498.tif 000025
は未知数を１つだけを含み、そのデータは変数ｖ３６に関連付けられている。
【０１５６】
したがって、第１０の方程式を解くことによって、その値を求めることができる。
【数２２】
2017505498.tif 000026
【０１５７】
そして、再構築された変数ｖ２５及びｖ３６の値を考慮して、連立方程式を更新することができる。このステップにより特に、変数ｖ２５及びｖ３６が関与する方程式を更新することができる。
【０１５８】
その後、符号を表す連立方程式において、第２の反復にて、単一の消失変数を有する１以上の方程式が探索される。
【０１５９】
第１の方程式は依然として２つの未知数を含む。これは、第２、第３、第４、第５及び第９の方程式にも当てはまる。
【０１６０】
これに対し、第６の方程式は単一の未知数を含み、そのデータは変数ｖ２３に関連付けられている。
【０１６１】
したがって、第６の方程式を解くことによって、その値を求めることができる。
【数２３】
2017505498.tif 000027
【０１６２】
同じようにして、第７の方程式は未知数を１つだけを含み、そのデータは変数ｖ４６に関連付けられている。第７の方程式を解くことによって、ｖ４６＝７４が得られる。
【０１６３】
その後、再構築された変数ｖ２３及びｖ４６の値を考慮して、連立方程式を更新することができる。
【０１６４】
同様の手順によって、第３の反復にて、ｖ０（ｖ０＝２２３）、ｖ１３（ｖ１３＝５６）、ｖ４４（ｖ４４＝４７）及びｖ３８（ｖ３８＝２３７）の値を求めることができる。その後、第４の反復にて、変数ｖ１１（ｖ１１＝１２０）及びｖ２（ｖ２＝６０）の値を求めることができる。
【０１６５】
このようにして連立方程式が解かれる。このことは、２つのハードディスクドライブが消失したとしても、第１の記憶されたベクトルに対応する第１のストライプを復号して、ソースデータを得ることができるということを意味する。
【０１６６】
上記で示したように、復号ステップ１００は、ストライプごとに実施することができる。
【０１６７】
図７に示した第１の変形形態に基づいて、所与の変数に割り当てられたソースデータ又は冗長データを同じストレージキャリアに記憶すべく、データの記憶時に行われる分散ステップを考慮する場合、復号方法は、第１のストライプを復号するステップ時に実施された連立方程式の方程式求解順序を記憶することができる。
【０１６８】
このようにして、第２のストライプ及び第３のストライプを復号するステップの際に、復号方法は、方程式の最適な求解順序がわかり、復号プロセスについて時間的に大きな利益が得られる。
【０１６９】
より具体的には、図７に示した例では、記憶されることになる第２のベクトルＲ２の値が、その方程式内の同じ位置に対応する、記憶されることになる第１のベクトルＲ１の値と同じディスクドライブに配置されるように、割当てが行われる。それゆえ、ここでも、パリティ検査行列Ｈ内に同じ未知数を有し、それゆえ、解かれることになる同じ連立方程式を有する。
【０１７０】
第１のストライプの場合に連立方程式が解かれた順序がわかっているため、第２のストライプについての連立方程式を解くために、この同じ方程式求解順序が適用される。
【０１７１】
したがって、第８の方程式（ｖ２５＝２１０）を解くことから開始し、その後、第１０の方程式（ｖ３６＝９６）、その後、第６の方程式（ｖ２３＝２４３）、その後、第７の方程式（ｖ４６＝１７８）、その後、第１の方程式（ｖ０＝３６）、その後、第４の方程式（ｖ１３＝２４５）、その後、第５の方程式（ｖ４４＝３７）、その後、第９の方程式（ｖ３８＝９）、その後、第２の方程式（ｖ１１＝４６）、そして最後に、第３の方程式（ｖ２＝２２２）を解く。方程式が解かれたときはいつでも、再構築されたデータにより連立方程式が更新され、それにより、各方程式につき未知数が１つとなるようにすることができる。
【０１７２】
同じようにして、第３のストライプの連立方程式を解くために、同じ方程式求解順序が適用される。
【０１７３】
このようにして、連立方程式において１つの未知数を有する方程式を探索するための、復号の複雑度を著しく増大させるステップの必要性を取り除くことができる。
【０１７４】
このようにして、復号時間が最適化される。生成行列又はパリティ検査のサイズが大きいほど、この時間的な利益も大きくなることに留意されたい。
【０１７５】
［４  代替の実施形態］
上記において、ＬＤＧＭタイプの誤り訂正符号を用いて、データの記憶、及び記憶されたデータの復号のための実施態様の一例を説明した。
【０１７６】
もちろん、本発明は、このタイプの誤り訂正符号には限定されず、任意の疎タイプのグラフ符号（すなわち、生成行列及びパリティ検査行列の少なくとも一方が疎である符号）を用いることができる。
【０１７７】
例えば、階段型準巡回ＬＤＰＣ非バイナリタイプの誤り訂正符号を使用することができる。その基礎を構築するものが、C. Yoon他による「A hardware efficient LDPC encoding scheme for exploiting decoder structure and resources」（VTC Spring’07, 2007, pp. 2445-2449）と、「Arbitrary bit generation and correction technique for encoding GC-LDPC codes with dual-diagonal parity structure」（WCNC'07, 2007, pp. 662-666）とにおいて特に記述されている。
【０１７８】
この例によれば、データを１２個のハードディスクドライブに記憶し、３個の消失から保護するための符号を構築することができる。符号を構築するステップは、T.J. Richardson及びR.L. Urbankeによる「Efficient encoding of Low-Density Parity-Check Codes」（IEEE Transactions on Information Theory, Vol. 47, N°2, February 2001）という文献において提案されているパリティ検査行列Ｈの変換アルゴリズムにより低コストで符号化できるようにする階段構造に従うことと、サイズが６のサイクルを用いることなく、相対的に小さなサイズの基本行列を構築することとを提案する。その際、準巡回性が、行列のサイズを拡張することを容易にする。ディスクドライブあたり５１２バイトのセクタサイズ、及び１つのセクタのストライプサイズを考える場合、得られる符号のサイズは、Ｎ＝ディスクドライブ数×１つのストライプのサイズ＝１２×５１２＝６１４４である。それゆえ、解くべき連立方程式における方程式数は、Ｍ＝３×５１２＝１５３６である。シミュレーション結果により、特に復号時間に関する利益が大きいことが示された。データの符号化、記憶のためにストライプあたり平均０．１７０ｍｓ、第１のストライプの復号のために７８０ｍｓ、その後、後続のストライプの場合は平均０．０６０ｍｓであることが示された。さらに、３個のディスクドライブが消失する全ての場合において、誤りを生じることなく訂正された。
【０１７９】
［５  ストレージデバイス及び復号デバイスの簡略化された構造］
最後に、図１１及び図１２のそれぞれに、本発明の一実施形態による、データストレージデバイスの簡略化された構造と、記憶されたデータを復号するためのデバイスの簡略化された構造とを示す。
【０１８０】
図１１に示すように、本発明の少なくとも１つの実施形態によるデータを記憶するためのデバイスは、バッファメモリを含むメモリ１１１と、例えば、マイクロプロセッサμＰを備え、本発明の少なくとも１つの実施形態によるデータ記憶方法を実施するコンピュータプログラム１１３によって駆動される処理ユニット１１２とを有する。
【０１８１】
まず、コンピュータプログラム１１３のコード命令が、例えばＲＡＭにロードされ、処理ユニット１１２のプロセッサによって実行される。処理ユニット１１２は、少なくとも１つのソースデータベクトルを入力する。処理ユニット１１２のマイクロプロセッサは、ソースデータの１以上のベクトルを符号化し、こうして得られた、記憶されることになる１以上のベクトルのシンボルを複数のストレージキャリアに分散させるために、コンピュータプログラム１１３の命令に従って、上記で説明した少なくとも１つの実施形態によるデータ記憶方法のステップを実施する。この目的のために、データストレージデバイスは、バッファメモリ１１１に加えて、符号の少なくとも１つのストッピングセットを構成する変数を見いだすためのモジュール１１４と、上記変数を割り当てるための割当て方式であって、ストッピングセットを構成する各変数に異なるストレージキャリアを割り当てる割当て方式を決定するモジュール１１５と、その割当て方式に従って、変数又は変数に関連付けられるデータを複数のストレージキャリアに分散させるためのモジュール１１６とを有する。
【０１８２】
これらのモジュールは、処理ユニット１１２内のマイクロプロセッサによって制御される。
【０１８３】
図１２に示すように、本発明の少なくとも１つの実施形態によるデータを復号するためのデバイスは、バッファメモリを含むメモリ１２１と、例えば、マイクロプロセッサμＰを備え、本発明の少なくとも１つの実施形態による復号方法を実施するコンピュータプログラム１２３によって駆動される処理ユニット１２２とを有する。
【０１８４】
まず、コンピュータプログラム１２３のコード命令は、例えばＲＡＭにロードされ、その後、処理ユニット１２２のプロセッサによって実行される。処理ユニット１２２は、ストレージキャリアに記憶された利用可能なデータの集合を有するが、ストレージキャリアのうちの少なくとも１つが故障している。処理ユニット１２２のマイクロプロセッサは、記憶されているデータからソースデータをリカバリするために、コンピュータプログラム１２３の命令に従って上記で説明した復号方法のステップを実施する。この目的のために、ストレージデバイスは、バッファメモリ１２１に加えて、復号モジュールを有する。この復号モジュールは、符号を表す連立方程式において、消失変数と呼ばれる、故障した１以上のストレージキャリアに前もって記憶されていたデータに関連する単一の変数を有する少なくとも１つの方程式を探索する探索モジュール１２４と、１以上の方程式を解くことにより、消失した１以上の変数を再構築するためのモジュール１２５であって、少なくとも１つの再構築されたデータを提供するモジュールと、再構築されたデータを考慮して連立方程式を更新するモジュール１２６とを有する。これらのモジュールは、少なくとも１つのストレージキャリアが故障したときに、少なくとも一度、起動される。これらのモジュールは、処理ユニット１２２のマイクロプロセッサによって制御される。
【図１．２．３】
2017505498.tif 000028
【図４Ａ．４Ｂ．７】
2017505498.tif 000029
【図５Ａ．５Ｂ．６】
2017505498.tif 000030
【図８．９】
2017505498.tif 000031
【図１０．１１．１２】
2017505498.tif 000032
【国際調査報告】
2017505498.tif 000033
2017505498.tif 000034
2017505498.tif 000035
2017505498.tif 000036
2017505498.tif 000037
2017505498.tif 000038
2017505498.tif 000039
2017505498.tif 000040