(57)【特許請求の範囲】
【請求項１】
データの分割数及びデータを格納するディスク数に基づいてゼロ行列を作成するゼロ行列作成部と、
前記ゼロ行列における所定行において、各列に配置する「１」の個数が一定値となるように、前記所定行の各列に「１」又は「０」を配置する所定行構成部と、
前記ゼロ行列における前記所定行を除く全ての行において、各列に配置する「１」の個数が予め定められた符号の最小距離から前記一定値を差し引いた値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記所定行を除く全ての行の各列に「１」又は「０」を配置する行列構成部と、
を備える生成行列構成装置。
【請求項２】
前記所定行が２以上の場合、
前記行列構成部が、前記ゼロ行列における前記所定行を除く全ての行における複数の列において、「１」を配置する行の組み合わせが同じになる場合、当該列同士で前記所定行における「１」を配置する行の組み合わせが異なるように、前記所定行を除く全ての行の各列に「１」又は「０」を配置する、
請求項１に記載の生成行列構成装置。
【請求項３】
データの分割数及びデータを格納するディスク数に基づいてゼロ行列を作成するゼロ行列作成部と、
前記ゼロ行列における特定の１行において、行に配置する「１」の個数が一定値以上となるように、前記特定の１行の各列に「１」又は「０」を配置する特定行構成部と、
前記特定の１行に「１」が配置された列については、前記ゼロ行列における前記特定の１行を除く全ての行において、各列に配置する「１」の個数が予め定められた符号の最小距離から１を差し引いた値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記特定の１行を除く全ての行の各列に「１」又は「０」を配置し、
前記特定の１行に「０」が配置された列については、前記ゼロ行列における前記特定の１行を除く全ての行において、各列に配置する「１」の個数が前記符号の最小距離に等しい値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記特定の１行を除く全ての行の各列に「１」又は「０」を配置する行列構成部と、
を備える生成行列構成装置。
【請求項４】
前記ゼロ行列は、データの分割数に等しい列数を有し、かつデータを格納するディスク数から前記データの分割数を差し引いて求められるパリティディスク数に等しい行数を有する、請求項１から３のいずれかに記載の生成行列構成装置。
【請求項５】
生成行列構成装置が実行する生成行列構成方法であって、
データの分割数及びデータを格納するディスク数に基づいてゼロ行列を作成するゼロ行列作成ステップと、
前記ゼロ行列における所定行において、各列に配置する「１」の個数が一定値となるように、前記所定行の各列に「１」又は「０」を配置する所定行構成ステップと、
前記ゼロ行列における前記所定行を除く全ての行において、各列に配置する「１」の個数が予め定められた符号の最小距離から前記一定値を差し引いた値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記所定行を除く全ての行の各列に「１」又は「０」を配置する行列構成ステップと、
を実行する生成行列構成方法。
【請求項６】
生成行列構成装置が実行する生成行列構成方法であって、
データの分割数及びデータを格納するディスク数に基づいてゼロ行列を作成するゼロ行列作成ステップと、
前記ゼロ行列における特定の１行において、行に配置する「１」の個数が一定値以上となるように、前記特定の１行の各列に「１」又は「０」を配置する特定行構成ステップと、
前記特定の１行に「１」が配置された列については、前記ゼロ行列における前記特定の１行を除く全ての行において、各列に配置する「１」の個数が予め定められた符号の最小距離から１を差し引いた値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記特定の１行を除く全ての行の各列に「１」又は「０」を配置し、
前記特定の１行に「０」が配置された列については、前記ゼロ行列における前記特定の１行を除く全ての行において、各列に配置する「１」の個数が前記符号の最小距離に等しい値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記特定の１行を除く全ての行の各列に「１」又は「０」を配置する行列構成ステップと、
を実行する生成行列構成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散ストレージシステムにおいてデータを符号化する非正則の生成行列を構成するための生成行列構成装置及び生成行列構成方法に関する。
【背景技術】
【０００２】
近年の映像の高品質化およびアプリケーションの扱うデータ量の増大により、映像サービスの提供に必要なストレージの規模が拡大し、需要に応じてハードウェアの規模を最適化可能なクラウドストレージの利用が進んでいる。ストレージシステムには高い可用性、長期の耐久性が求められるが、ディスク容量の増加によりＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋ）による冗長化を行うシステムでは複数ディスク故障時の信頼性が低くなることが知られている（例えば、非特許文献１参照）。そのため、複数故障に対する信頼性を高める冗長化技術が検討されている。
【０００３】
現在ＨＡＤＯＯＰ（登録商標）では、冗長性の担保のため３倍の複製を保存する方式が採用されている。しかし、複製により高可用性を実現するにはレプリカ数を増やす必要があり、ストレージの容量効率が下がることから大規模なストレージシステムへの適用は経済的ではない。ディスクの容量増加や計算資源の高性能化を背景に、消失訂正符号を用いたストレージ容量効率の高い冗長化手法が注目されている。消失訂正符号を適用することで複製と同等の耐久性および可用性を格段に低いネットワークコストおよびストレージコストで実現できることが知られており（例えば、非特許文献２参照）、消失訂正符号を利用した分散ストレージサービスが提供されている。
【０００４】
ＣＬＥＶＥＲＳＡＦＥ（登録商標）では、リードソロモン符号（ＲＳ符号）をベースとした符号化技術を用いて分散ストレージの冗長化を行う（例えば、非特許文献３参照）。非組織符号であるＲＳ符号の場合、データをｋ分割し符号化したｎ個の断片を保存し、ｎ個中ｋ個の断片を集めることでデータを復元する。この場合ストレージ容量の利用効率は高くなるが、故障ディスクの復旧時に他のディスクから送るデータの総量が大きくなる、またはガロア体の計算が必要なため復旧に係る計算量が多くなることが課題である。そこで、故障ディスク修復に必要な通信量を最小化可能な再生成符号（ＭＢＲ符号）が提案された（例えば、非特許文献４参照）。
【０００５】
ＭＢＲ符号は再生成符号においてノードを再構成するために送るデータの総量を最小化した符号であり、ストレージ容量の利用効率を最適化したＭＳＲ符号も提案されている。しかし、再生成符号ではノード数が多くなるという課題があり、ディスク修復時にデータを送るヘルパーノードの数を最小化したピラミッド符号が提案された（例えば、非特許文献５参照）。しかし、これらは密行列に基づく符号であるため、符号化に伴う計算量が大きいことが課題となっている。
【０００６】
一方で、ＸＯＲ演算による符号化で計算負荷を抑えたＦｌａｔ  ＸＯＲ符号が提案されている（例えば、非特許文献６参照）。しかし、ＨＤ  Ｃｏｍｂｉｎａｔｉｏｎ  ｃｏｄｅｓなどのＦｌａｔ  ＸＯＲ符号では生成行列の構成が限られており、ディスク復旧時の通信量が最適化されていなかった。そこで、非正則構成の生成行列を用いたＦｌａｔ  ＸＯＲ符号により通信量を削減する手法が提案された（例えば、非特許文献７参照）。しかし現在までのところ、通信量を最小化する非正則構成のＦｌａｔ  ＸＯＲ符号は取り得る符号長が数十までの範囲に限定されており、分散数の大きいストレージシステムには適用できないという課題がある。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Ｊ．Ｒｅｓｃｈ，Ｉ．Ｖｏｌｖｏｓｋｉ，“Ｒｅｌｉａｂｉｌｉｔｙ  ｍｏｄｅｌｓ  ｆｏｒ  ｈｉｇｈｌｙ  ｆａｕｌｔ−ｔｏｌｅｒａｎｔ  ｓｔｏｒａｇｅ  ｓｙｓｔｅｍｓ，”  ａｒＸｉｖ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  Ｄｉｓｔｒｉｂｕｔｅｄ，Ｐａｒａｌｌｅｌ，ａｎｄ  Ｃｌｕｓｔｅｒ  Ｃｏｍｐｕｔｉｎｇ，Ｏｃｔ．２０１３．
【非特許文献２】Ｗ．Ｈａｋｉｍ，Ｊ．Ｄ．Ｋｕｂｉａｔｏｗｉｃｚ，“Ｅｒａｓｕｒｅ  ｃｏｄｉｎｇ  ｖｓ．ｒｅｐｌｉｃａｔｉｏｎ：  ａ  ｑｕａｎｔｉｔａｔｉｖｅ  ｃｏｍｐａｒｉｓｏｎ，”  ＩＰＴＰＳ  Ｐｒｏｃｅｅｄｉｎｇｓ，Ｃａｍｂｒｉｄｇｅ，ＵＳＡ，Ｍａｒ．２００２．
【非特許文献３】Ｈ．Ｌａｈｋａｒ，Ｍ．Ｃ．Ｒ，“Ｔｏｗａｒｄｓ  ｈｉｇｈ  ｓｅｃｕｒｉｔｙ  ａｎｄ  ｆａｕｌｔ  ｔｏｌｅｒａｎｔ  ｄｉｓｐｅｒｓｅｄ  ｓｔｏｒａｇｅ  ｓｙｓｔｅｍ  ｗｉｔｈ  ｏｐｔｉｍｉｚｅｄ  ｉｎｆｏｒｍａｔｉｏｎ  ｄｉｓｐｅｒｓａｌ  ａｌｇｏｒｉｔｈｍ，”  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｊｏｕｒｎａｌ  ｏｆ  Ａｄｖａｎｃｅｄ  Ｒｅｓｅａｒｃｈ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ｖｏｌ．２  Ｉｓｓｕｅ  ３，Ｊｕｌｙ  ２０１４．
【非特許文献４】Ａ．Ｇ．Ｄｉｍａｋｉｓ，Ｐ．Ｂ．Ｇｏｄｆｒｅｙ，Ｙ．Ｗｕ，Ｍ．Ｗａｉｎｗｒｉｇｈｔ，Ｋ．Ｒａｍｃｈａｎｄｒａｎ，“Ｎｅｔｗｏｒｋ  ｃｏｄｉｎｇ  ｆｏｒ  ｄｉｓｔｒｉｂｕｔｅｄ  ｓｔｏｒａｇｅ  ｓｙｓｔｅｍｓ，”  ＩＥＥＥ  Ｔｒａｎｓ．Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｈｅｏｒｙ，Ｓｅｐｔ．２０１０．
【非特許文献５】Ｃ．Ｈｕａｎｇ，Ｍ．Ｃｈｅｎ，Ｊ．Ｌｉ，“Ｐｙｒａｍｉｄ  ｃｏｄｅｓ：  ｆｌｅｘｉｂｌｅ  ｓｃｈｅｍｅｓ  ｔｏ  ｔｒａｄｅ  ｓｐａｃｅ  ｆｏｒ  ａｃｃｅｓｓ  ｅｆｆｉｃｉｅｎｃｙ  ｉｎ  ｒｅｌｉａｂｌｅ  ｄａｔａ  ｓｔｏｒａｇｅ  ｓｙｓｔｅｍｓ，”  Ｓｉｘｔｈ  ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｎｅｔｗｏｒｋ  Ｃｏｍｐｕｔｉｎｇ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ，２００７，Ｃａｍｂｒｉｄｇｅ，ＵＳＡ，Ｊｕｌｙ  ２００７．
【非特許文献６】Ｋ．Ｇｒｅｅｎａｎ，Ｘ．Ｌｉ，Ｗ．Ｊ．Ｊ，“Ｆｌａｔ  ＸＯＲ−ｂａｓｅｄ  ｅｒａｓｕｒｅ  ｃｏｄｅｓ  ｉｎ  ｓｔｏｒａｇｅ  ｓｙｓｔｅｍｓ：Ｃｏｎｓｔｒｕｃｔｉｏｎｓ，ｅｆｆｉｃｅｎｔ  ｒｅｃｏｖｅｒｙ，ａｎｄ  ｔｒａｄｅｏｆｆｓ，”  Ｍａｓｓ  Ｓｔｏｒａｇｅ  Ｓｙｓｔｅｍｓ  ａｎｄ  Ｔｅｃｈｎｏｌｏｇｉｅｓ，２０１０  ＩＥＥＥ  ２６ｔｈ  Ｓｙｍｐｏｓｉｕｍ，Ｉｎｃｌｉｎｅ  Ｖｉｌｌａｇｅ，ＵＳＡ，Ｍａｙ，２０１０．
【非特許文献７】吉田由唯，外村喜秀，白井大介，藤井竜也，“分散ストレージシステムのための通信量を削減するＦｌａｔ  ＸＯＲに基づく消失訂正符号の非正則構成，”２０１４信学ソ大（基礎・境界），Ｔｏｋｕｓｈｉｍａ，Ｊａｐａｎ，Ｓｅｐｔ．２０１４．
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来のストレージシステムに適用されるＦｌａｔ  ＸＯＲ符号は、故障ディスク修復時に必要な通信量が最小化されていなかった。そこで、行重みに偏りを持たせた非正則構成の生成行列を利用しＲｅｃｏｖｅｒｙ  Ｅｑｕａｔｉｏｎ  Ａｌｇｏｒｉｔｈｍを用いた復号を行うことで、通信量を削減することができる。
【０００９】
また、符号長ｎ、分割数ｋ、列重みｗのＦｌａｔ  ＸＯＲ符号を構成するとき、符号長が大きい場合にＦｌａｔ  ＸＯＲ符号の生成行列を探索すると、ｎ−ｋ及びｗの組み合わせからｋ種類を選ぶ組み合わせ爆発が起こり、ｋ＝ｎ−ｋＣｗ以外の分割数について実現可能な計算時間で符号を決定することができない。この場合、Ｆｌａｔ  ＸＯＲ符号の生成行列は行重みおよび列重みを一定とする正則構成となり、演算負荷・通信量の小さい非正則構成の生成行列は構成できなかった。
【００１０】
そこで、本発明は、ｎ＝１００程度の大きな符号長であってもＦｌａｔ  ＸＯＲ符号の非正則構成の生成行列を構成可能にすることを目的とする。
【課題を解決するための手段】
【００１１】
本発明は、生成行列の部分的な領域に規則的に１を配置し、残りの領域を探索するという制限を設けることとした。
【００１２】
具体的には、本発明に係る生成行列構成装置は、
データの分割数及びデータを格納するディスク数に基づいてゼロ行列を作成するゼロ行列作成部と、
前記ゼロ行列における所定行において、各列に配置する「１」の個数が一定値となるように、前記所定行の各列に「１」又は「０」を配置する所定行構成部と、
前記ゼロ行列における前記所定行を除く全ての行において、各列に配置する「１」の個数が予め定められた符号の最小距離から前記一定値を差し引いた値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記所定行を除く全ての行の各列に「１」又は「０」を配置する行列構成部と、
を備える。
【００１３】
本発明に係る生成行列構成装置では、前記所定行が２以上の場合、前記行列構成部が、前記ゼロ行列における前記所定行を除く全ての行における複数の列において、「１」を配置する行の組み合わせが同じになる場合、当該列同士で前記所定行における「１」を配置する行の組み合わせが異なるように、前記所定行を除く全ての行の各列に「１」又は「０」を配置してもよい。
【００１４】
具体的には、本発明に係る生成行列構成装置は、
データの分割数及びデータを格納するディスク数に基づいてゼロ行列を作成するゼロ行列作成部と、
前記ゼロ行列における特定の１行において、行に配置する「１」の個数が一定値以上となるように、前記特定の１行の各列に「１」又は「０」を配置する特定行構成部と、
前記特定の１行に「１」が配置された列については、前記ゼロ行列における前記特定の１行を除く全ての行において、各列に配置する「１」の個数が予め定められた符号の最小距離から１を差し引いた値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記特定の１行を除く全ての行の各列に「１」又は「０」を配置し、
前記特定の１行に「０」が配置された列については、前記ゼロ行列における前記特定の１行を除く全ての行において、各列に配置する「１」の個数が前記符号の最小距離に等しい値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記特定の１行を除く全ての行の各列に「１」又は「０」を配置する行列構成部と、
を備える。
【００１５】
本発明に係る生成行列構成装置では、前記ゼロ行列は、データの分割数に等しい列数を有し、かつデータを格納するディスク数から前記データの分割数を差し引いて求められるパリティディスク数に等しい行数を有してもよい。
【００１６】
具体的には、本発明に係る生成行列構成方法は、
生成行列構成装置が実行する生成行列構成方法であって、
データの分割数及びデータを格納するディスク数に基づいてゼロ行列を作成するゼロ行列作成ステップと、
前記ゼロ行列における所定行において、各列に配置する「１」の個数が一定値となるように、前記所定行の各列に「１」又は「０」を配置する所定行構成ステップと、
前記ゼロ行列における前記所定行を除く全ての行において、各列に配置する「１」の個数が予め定められた符号の最小距離から前記一定値を差し引いた値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記所定行を除く全ての行の各列に「１」又は「０」を配置する行列構成ステップと、
を実行する。
【００１７】
具体的には、本発明に係る生成行列構成方法は、
生成行列構成装置が実行する生成行列構成方法であって、
データの分割数及びデータを格納するディスク数に基づいてゼロ行列を作成するゼロ行列作成ステップと、
前記ゼロ行列における特定の１行において、行に配置する「１」の個数が一定値以上となるように、前記特定の１行の各列に「１」又は「０」を配置する特定行構成ステップと、
前記特定の１行に「１」が配置された列については、前記ゼロ行列における前記特定の１行を除く全ての行において、各列に配置する「１」の個数が予め定められた符号の最小距離から１を差し引いた値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記特定の１行を除く全ての行の各列に「１」又は「０」を配置し、
前記特定の１行に「０」が配置された列については、前記ゼロ行列における前記特定の１行を除く全ての行において、各列に配置する「１」の個数が前記符号の最小距離に等しい値となり、かつ「１」を配置する行の組み合わせが列ごとに異なるように、前記特定の１行を除く全ての行の各列に「１」又は「０」を配置する行列構成ステップと、
を実行する。
【発明の効果】
【００１８】
本発明は、ｎ＝１００程度の大きな符号長であってもＦｌａｔ  ＸＯＲ符号の非正則構成の生成行列の構成が可能であるため、多地点に分散したストレージシステムにおいて疎行列を用いた符号により小さい演算負荷で冗長化を行い、正則Ｆｌａｔ  ＸＯＲ符号およびＲＳ符号と比べてディスク復旧時の通信量および演算量を削減することができる。
【図面の簡単な説明】
【００１９】
【図１】実施形態に係る符号構成装置の概略を示す。
【図２】第１の構成法によって構成した生成行列Ｇの一例を示す。
【図３】第２の構成法によって構成した生成行列Ｇの一例を示す。
【図４】第３の構成法によって構成した生成行列Ｇの一例を示す。
【図５】Ｉ＝１のときの修復式の集合ＲＥの一例を示す。
【図６】Ｉ＝２のときの行の選択例を示す。
【図７】Ｉ＝２のときの修復式の集合ＲＥの一例を示す。
【図８】Ｉ＝３のときの行の選択例を示す。
【図９】Ｉ＝３のときの修復式の集合ＲＥの一例を示す。
【図１０】実施例１に係る非正則構成のＦｌａｔ  ＸＯＲ符号と比較例に係る正則構成のＦｌａｔ  ＸＯＲ符号との平均通信量の比較結果を示す。
【図１１】実施例１に係る非正則構成のＦｌａｔ  ＸＯＲ符号と比較例に係るＲＳ符号との通信量の比較結果を示す。
【図１２】実施例２に係る非正則構成のＦｌａｔ  ＸＯＲ符号と比較例に係るＲＳ符号とのＸＯＲ計算回数の比較結果を示す。
【図１３】実施例２に係る非正則構成のＦｌａｔ  ＸＯＲ符号と比較例に係るＲＳ符号との平均通信量の比較結果を示す。
【図１４】実施例３に係る非正則構成のＦｌａｔ  ＸＯＲ符号と比較例に係る正則構成のＦｌａｔ  ＸＯＲ符号とのＸＯＲ計算回数の比較結果を示す。
【図１５】実施例３に係る非正則構成のＦｌａｔ  ＸＯＲ符号と比較例に係る正則構成のＦｌａｔ  ＸＯＲ符号との平均通信量の比較結果を示す。
【発明を実施するための形態】
【００２０】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。なお、本発明は、以下に示す実施形態に限定されるものではない。これらの実施の例は例示に過ぎず、本発明は当業者の知識に基づいて種々の変更、改良を施した形態で実施することができる。なお、本明細書及び図面において符号が同じ構成要素は、相互に同一のものを示すものとする。
【００２１】
従来のＦｌａｔ  ＸＯＲ符号は、（ｎ−ｋ）及びｗの組み合わせからｋ種類を選ぶ数の行列から生成行列を選択する必要があり、符号長が大きいときに組合せ爆発となるため、とりうる符号長が限定されていた。本実施形態に係る発明は、符号長が大きい場合に広範囲の分割数でＦｌａｔ  ＸＯＲ符号の非正則構成の生成行列Ｇを構成可能とする。これにより本実施形態に係る発明は、生成行列の部分的な領域に規則的に各列ｐ個の１を配置し、残りの領域にｗ−ｐ個の１を配置する問題に制限することで探索を可能とする。
【００２２】
本実施形態に係るストレージシステムは、符号化装置と、複数のディスクと、復号装置と、を備える。図１に、本実施形態に係る符号化装置の概略を示す。符号化装置１０は、冗長化の対象となるデータを符号化する。複数のディスク２０は、冗長化の対象となるデータを格納する。復号装置（不図示）は、非正則生成行列Ｇを用いて、複数のディスクに格納されているデータの修復を行う。
【００２３】
符号化装置１０は、データ分割部１１と、符号化部１２と、データ分配部１３と、を備える。データ分割部１１は、冗長化するデータをｋ個に分割する。符号化部１２は、非正則構成の生成行列Ｇを用いて、ｋ個に分割したデータを符号化し、（ｎ−ｋ）個の冗長データおよびｋ個に分割したデータを含むｎ個の符号化データを生成する。データ分配部１３は、符号化部１２の符号化したｎ個のデータを、各ディスク２０に送信する。
【００２４】
符号化装置は、コンピュータを、各機能部として機能させることで実現してもよい。この場合、符号化装置内のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が、記憶部（不図示）に記憶されたコンピュータプログラムを実行することで、各構成を実現する。図１では、ディスク２０の数と生成する符号化データの数が等しい場合を示すが、ディスク２０の数と生成する符号化データの数は同一でなくともよい。例えば、分散した各ディスクに複数の符号化データを保存するなどの使い方をすることも考えられる。また、ディスク２０は地理的に分散して配置され、ネットワークにより接続されていてもよい。
【００２５】
（生成行列構成装置）
本実施形態に係る符号化部１２は、生成行列構成装置として機能し、非正則構成の生成行列Ｇを構成する。本実施形態では、ストレージシステムを構成する全ディスク数を符号長に等しいｎ、データの分割数をｋ、パリティディスク数をｎ−ｋ、符号の最小距離をｗとする。ｎ−ｋ行ｋ列のゼロ行列をＺとする。
【００２６】
（ａ）全探索可能な範囲の非正則の生成行列Ｇの第１の構成方法
符号長ｎがある程度小さく、ｎ−ｋ及びｗの組み合わせからｋ種類を選ぶ全組み合わせについて全探索可能である場合、ｋ−ｎ行ｎ列のゼロ行列Ｚを作成し、Ｚの各列について探索した組み合わせに相当する行の値を１とする。構成した行列の中で、任意のｆ列｛ｆ＝１，２，…，ｗ｝を修復可能な行列を生成行列Ｇとし、最も平均通信量の小さい生成行列を選択する。
【００２７】
図２に、第１の構成法によって構成した生成行列Ｇの一例を示す。ｎ＝１６、ｋ＝１０、ｗ＝３の場合を示す。生成行列の各列について、ｎ−ｋ行からｗ行を選ぶ組合せは列内で１を配置する行の組合せとなる。ｎ−ｋ＝６、ｗ＝３の場合、各列内の１の配置パターン数は図に示すようにｎ−ｋＣｗとなり、２０通り存在する。２０通りの配置パターンからｋ列分を選択することで生成行列を構成するため、とりうる生成行列候補数は２０Ｃｋとなる。ｋ＝１０であるため、とりうる生成行列候補数は１８４７５６通りとなる。ｆ＝２とすると、その中の２つの生成行列候補である行列（１）および行列（１８４７５６）が、生成行列Ｇとなる。
【００２８】
（ｂ）全探索不可能な範囲の非正則の生成行列Ｇの第２の構成方法
符号長ｎが大きい場合、ｎ−ｋ及びｗの組み合わせからｋ種類を選ぶ数が非常に大きくなるため、生成行列Ｇの第１の構成法を用いて行列を構成することができない。そこで、生成行列を２つの領域に分割し、列重みを割り振ることで探索範囲に制約をつけ、非正則の生成行列を構成する。具体的には、以下の手順で非正則の生成行列Ｇを構成する。
【００２９】
具体的には、符号化部１２は、ゼロ行列作成ステップを実行するゼロ行列作成部と、所定行構成ステップを実行する所定行構成部と、行列構成ステップを実行する行列構成部と、を備える。ゼロ行列作成ステップにおいてステップＳ１０１を実行し、所定行構成ステップにおいてステップＳ１０２及びＳ１０３を実行し、行列構成ステップにおいてステップＳ１０４及びＳ１０５を実行する。
【００３０】
ステップＳ１０１：ｎ−ｋ行ｋ列のゼロ行列Ｚを作成する。
【００３１】
例えば、ｎ＝１６、ｋ＝１０、ｗ＝３の場合、図３に示すように、ゼロ行列Ｚは６行１０列となる。
【００３２】
ステップＳ１０２：行重みに偏りを持たせるため、１行目からｘ行目までの行重みをｐとおき、式１を満たす［ｘ，ｐ］をすべて求める。
（数１）
ｘＣｐ×ｎ−ｋ−ｘＣｗ−ｐ≧ｋ    （式１）
ただし、ｘ＞ｐである。
【００３３】
例えば、ｎ＝１６、ｋ＝１０、ｗ＝３の場合、［ｘ，ｐ］の組み合わせは［１，１］、［２，１］、［４，２］、［５，２］、［６，３］となる。［１，１］の場合は１行目、［２，１］の場合は２行目が所定行となる。
【００３４】
ステップＳ１０３：Ｚの１行目からｘ行目までの範囲に列重みｐとなるように１を配置した行列をＺ３とする。ｘＣｐの組み合わせにより各列において１となる行を決定する。
【００３５】
例えば、列重みがｐ＝１であるとする。
ｘ＝１のとき、Ｚ３１に示すように、１行目に「１１１１１１１１１１」が配置されている。
ｘ＝２のとき、Ｚ３２に示すように、１行目に「１０１０１０１０１０」が配置され、２行目に「０１０１０１０１０１」が配置されている。
【００３６】
ステップＳ１０４：Ｚ３のｘ＋１行目からｎ−ｋ行目までの範囲に列重みｗ−ｐとなるように以下の方法で１を配置する。ｎ−ｋ−ｘＣｗ−ｐ≦ｋの場合、１列目からｎ−ｋ−ｘＣｗ−ｐ行目までの範囲に、ｎ−ｋ−ｘＣｗ−ｐの組み合わせにより各列において１となる行を決定した行列Ｂを置き、ｒ（ｎ−ｋ−ｘＣｗ−ｐ）＋１列目から２ｒ（ｎ−ｋ−ｘＣｗ−ｐ）列目にＢをｒ列｛ｒ＝１，２，…，ｘ−１｝循環させた行列Ｂｒを置く。Ｂｒの列数合計がｋを超える場合はランダムにｋ列を選択しＺ３の１列目からｋ列目に配置する。
【００３７】
例えば、列重みｐ＝１であるとすると、ｗ＝３であるため、列重みｗ−ｐは２となる。
ｘ＝１のとき、Ｚ４１に示すように、２行目から６行目までの各列に「１」を２つずつ配置する。
ｘ＝２のとき、Ｚ４２に示すように、１列目から順に、３行目から６行目までの各列に「１」を２つずつ配置する。このとき、各列に「１」を２つずつ配置する組み合わせは６列目で終了する。この場合、７列目以降は、１行目及び２行目の「１」の配置との組み合わせが１列目から６列目までと異なるように、２行目から６行目までの各列に「１」を２つずつ配置する。
【００３８】
ステップＳ１０５：構成した行列の中で任意のｆ｛ｆ＝１，２，…，ｗ｝列を修復可能な行列を生成行列Ｇとする。例えば、Ｚ４１及びＺ４２の両方が生成行列Ｇとなる。
【００３９】
以上説明したように、生成行列Ｇの第２の構成方法を用いることで、非正則の生成行列Ｇを構成することができる。なお、本実施形態では「所定行」が１行目及び２行目である例を示したが、「所定行」は２行目以降の任意の行であってもよい。
【００４０】
（ｃ）全探索不可能な範囲の非正則の生成行列Ｇの第３の構成方法
符号長ｎが大きく、ステップＳ１０２において式１を満たす［ｘ，ｐ］の組合せが［ｘ，ｐ］＝［ｎ−ｋ，ｗ］のみである場合等において、ｘＣｐの組合せ数が大きくなり、生成行列Ｇの第２の構成法で行列を構成することができない。そこで、生成行列の１行目の行重みが平均行重み以上となるように構成することで、残りｎ−ｋ−１行の探索範囲を制限し、非正則の生成行列Ｇを構成する。具体的には、以下の手順で非正則の生成行列Ｇを構成する。
【００４１】
具体的には、符号化部１２は、ゼロ行列作成ステップを実行するゼロ行列作成部と、特定行構成ステップを実行する特定行構成部と、行列構成ステップを実行する行列構成部と、を備える。ゼロ行列作成ステップにおいてステップＳ２０１を実行し、特定行構成ステップにおいてステップＳ２０２及びＳ２０３を実行し、行列構成ステップにおいてステップＳ２０４及びＳ２０５を実行する。
【００４２】
ステップＳ２０１：ｎ−ｋ行ｋ列のゼロ行列Ｚを作成する。
【００４３】
例えば、ｎ＝１６、ｋ＝１０、ｗ＝３の場合、図４に示すように、ゼロ行列Ｚは６行１０列となる。
【００４４】
ステップＳ２０２：生成行列の平均行重みＥを式２により求める。
（数２）
Ｅ＝ｗ×ｋ／（ｎ−ｋ）    （式２）
【００４５】
例えば、ｎ＝１６、ｋ＝１０、ｗ＝３の場合、Ｅ＝５となる。
【００４６】
ステップＳ２０３：Ｚの１行目の行重みがＷ｛Ｗ＝Ｅ＋１，Ｅ＋２，…，ｋ｝となるように、ｋＣＷの組合せにより１行目の１となる列を配置した行列をＺ’とする。１行目に１を配置した列の集合をＡとする。
【００４７】
例えば、Ｅ＝５である場合、１行目の行重みＷはＷ｛６，７，８，９，１０｝となる。
１行目の行重みがＷ＝６のとき、１行目に１を配置する列の組合せをｋＣｗにより決定する。例えば、Ａ＝｛１，２，３，４，５，６｝のとき、Ｚ３６に示すように、１行目の１列目から６列目までに「１」を配置する。また、１行目の行重みがＷ＝７のとき、１行目に１を配置する列の組合せをｋＣｗにより決定する。例えば、Ａ＝｛１，２，３，７，８，９，１０｝のとき、Ｚ３７に示すように、１行目の１列目から３列目までに「１」を配置し、１行目の７列目から１０列目までに「１」を配置する。
【００４８】
ステップＳ２０４：Ｚ’の２行目からｎ−ｋ行目までの範囲に１を配置する。Ａに含まれる列は、ｎ−ｋ−１Ｃｗ−１の組合せにより１となる行を決定する。ｎ−ｋ−１Ｃｗ−１＞Ｗの場合は、ｎ−ｋ−１及びｗ−１の組み合わせからＷ種類を選び、各列を構成する。Ａに含まれない列は、ｎ−ｋ−１Ｃｗの組合せにより１となる行を決定する（図３）。ｎ−ｋ−１Ｃｗ＞ｋ−Ｗの場合は、ｎ−ｋ−１及びｗの組み合わせからｋ−Ｗ種類を選び各列を構成する。
【００４９】
例えば、Ｗ＝６のとき、Ｚ４６に示すように、Ａに含まれる１列目から６列目までは５Ｃ２の組合せにより決定される行に「１」を配置し、Ａに含まれない７列目から１０列目までは５Ｃ３の組合せにより決定される行に「１」を配置する。
例えば、Ｗ＝７のとき、Ｚ４７に示すように、Ａに含まれる１列目から３列目まで及び７列目から１０列目までは５Ｃ２の組合せにより決定される行に「１」を配置し、Ａに含まれない４列目から６列目までは５Ｃ３の組合せにより決定される行に「１」を配置する。
【００５０】
ステップＳ２０５：構成した行列の中で任意のｆ｛ｆ＝１，２，…，ｗ｝列を修復可能な行列を生成行列Ｇとする。例えば、Ｚ４６及びＺ４７の両方が生成行列Ｇとなる。構成した生成行列の中で最も平均通信量の小さい行列を選択する。
【００５１】
以上説明したように、生成行列Ｇの第３の構成方法を用いることで、非正則の生成行列Ｇを構成することができる。なお、本実施形態では「特定の１行」が１行目である例を示したが、「特定の１行」は２行目以降の任意の行であってもよい。
【００５２】
（復号装置）
復号装置は、生成行列Ｇにｎ−ｋ行ｎ−ｋ列の単位行列を水平に接続しパリティ検査行列Ｈとする。
（数３）
Ｈ＝［Ｇ  Ｉ］
【００５３】
Ｒｅｃｏｖｅｒｙ  Ｅｑｕａｔｉｏｎ  Ａｌｇｏｒｉｔｈｍにより、パリティ検査行列Ｈのｎ−ｋ行からＩ｛Ｉ＝１，２，…，ｎ−ｋ｝行を選び選択した行のＸＯＲにより得られる修復式の集合をＲＥとする。本実施形態では、全ディスク数をｎ、データの分割数をｋ、パリティディスク数をｎ−ｋ、符号の最小距離をｗ、同時故障ディスク数をｆ｛ｆ＝１，２，３｝、故障ディスクの集合をＦ｛Ｆ＝Ｆ１，…，Ｆｆ｝とする。
【００５４】
図５に、Ｉ＝１のときの修復式の集合ＲＥの一例を示す。本実施形態では、ｎ＝１６、ｋ＝１０、ｗ＝３であり、生成行列Ｇは６行１０列である。この場合、生成行列Ｇに６行６列の単位行列を水平に接続する。
【００５５】
図６に、Ｉ＝２のときの行の選択例を示す。図７に、Ｉ＝２のときの修復式の集合ＲＥの一例を示す。パリティ検査行列Ｈの１行目及び２行目を選択した場合、図７の１行目に示すように、Ｉ＝２のときのパリティ検査行列Ｈは、図５に示すパリティ検査行列Ｈの１行目と２行目のＸＯＲとなる。Ｉ＝２のときの行の選択のバリエーションは１５通りあるため、Ｉ＝２のパリティ検査行列Ｈは１５行となる。
【００５６】
図８に、Ｉ＝３のときの行の選択例を示す。図９に、Ｉ＝３のときの修復式の集合ＲＥの一例を示す。パリティ検査行列Ｈの１、２及び３行目を選択した場合、図９の１行目に示すように、Ｉ＝３のときのパリティ検査行列Ｈは、図５に示すパリティ検査行列Ｈの１、２及び３行目のＸＯＲとなる。Ｉ＝３のときの行の選択のバリエーションは２０とおりあるため、Ｉ＝３のパリティ検査行列Ｈは２０行となる。
【００５７】
ｆ＝１の場合、修復式の集合ＲＥの中でＦ１列目の値が１となる行の集合ＲＥＦを求め、ＲＥＦの中で最も行重みの小さい行をＦ１の修復式とする。例えば、図５、図７、図９のように修復式の集合ＲＥを求めたとき、列１に対応するディスクが故障した場合の修復式を求めるためには、まずＲＥの１列目の値が１となるＩ＝１の１，２，３行目およびＩ＝２の３，４，５，７，８，９，１０，１１，１２行目およびＩ＝３の１，８，９，１３，１４，１５，１６，１７，１８行目の集合を抜き出しＲＥＦとする。ＲＥＦの行重みは順に１１，５，５，８，８，８，８，８，８，８，９，８，７，７，７，９，９，９，９，９，９であることから、最も行重みの小さいＩ＝１の２，３行目のいずれかを修復式とする。Ｉ＝１の２行目を修復式とすると、値が１となる列は１，２，３，４，１２であることから、２，３，４，１２列目に相当するディスクのデータのＸＯＲにより、１列目に相当する故障ディスクのデータを修復する。
【００５８】
修復式において、故障列Ｆ１を除く値が１の列に対応するディスクに保存したデータのＸＯＲにより、故障ディスクＦ１のデータを修復する。
このとき、修復式の行重みから故障列に相当する１を引いた値を修復時の参照ディスク数、参照ディスク数から１を引いた値を修復時のＸＯＲ回数、参照ディスク数とディスク容量の積を修復に必要な通信量とする。修復式において値が１の行に該当するディスクのデータのＸＯＲ計算により、故障ディスクに保存されていたデータを修復する。
【００５９】
ｆ＝２の場合、ＲＥの中でＦ｛Ｆ＝Ｆ１，Ｆ２｝のＦ１列目の値が１、Ｆ２列目の値が０となる行の集合ＲＥＦを求め、最も行重みの小さい式をＦ１の修復式とする。ただし、Ｆ１およびＦ２は入れ替えてもよい。ディスクＦ１を修復後、ｆ＝１の場合と同様にディスクＦ２の修復式を求め、ディスクＦ２を修復する。
【００６０】
ｆ＝３の場合、ＲＥの中でＦ｛Ｆ＝Ｆ１，Ｆ２，Ｆ３｝のＦ１列目の値が１、Ｆ２、Ｆ３列目の値が０となる行の集合ＲＥＦを求め、最も行重みの小さい式をＦ１の修復式とする。ただし、Ｆ１、Ｆ２およびＦ３は入れ替えてもよい。ディスクＦ１を修復後、ｆ＝２の場合と同様にＦ２，Ｆ３の修復式を求め、ディスクＦ２，Ｆ３を修復する。
【００６１】
ストレージシステムを構成するｎディスクの中でｆ｛ｆ＝１，２，…，ｗ｝ディスクが故障する全組み合わせについて、Ｒｅｃｏｖｅｒｙ  Ｅｑｕａｔｉｏｎ  Ａｌｇｏｒｉｔｈｍにより修復式を求め、Ｂｅｌｉｅｆ  Ｐｒｏｐａｇａｔｉｏｎによる復号を行い、ｆディスク修復に必要な通信量の平均値を計算する。
【００６２】
なお、通信量を最小とする生成行列Ｇが１通りに決定した場合にはそれを記録するとともに、故障ディスクの組合せごとに予め修復式の探索を行い、通信量が最小となる修復式を記録しておくことで、復号毎に修復式の探索を行うことを省略することができる。
【００６３】
［第１実施例］
一例として、ストレージシステムを構成するディスク数ｎおよび分割数ｋが小さく、（ｎ−ｋ）及びｗの組み合わせからｋ種類を選ぶ組み合わせを全通り探索可能な場合について、通信量を削減する符号化手法を示す。
【００６４】
ディスク容量１（ＴＢ）、ストレージを構成する全ディスク数１２≦ｎ≦２４、データ分割数６≦ｋ≦１８、最大同時故障数ｗ＝３として冗長化を行う場合、符号長ｎ、分割数ｋ、列重みｗのＦｌａｔ  ＸＯＲ符号を用いてデータの分散保存を行う（図１）。
【００６５】
前述の非正則の生成行列Ｇの第１の構成方法の手順に従い構成した生成行列Ｇを用いて符号化した非正則構成のＦｌａｔ  ＸＯＲ符号の中で通信量が最小の行列を探索し（図２）、正則構成のＦｌａｔ  ＸＯＲ符号の中で通信量が最小の行列を用いた場合とディスクの故障確率により重み付けした平均通信量を比較した。
【００６６】
図１０に、本実施例における正則構成のＦｌａｔ  ＸＯＲ符号との平均通信量の比較結果を示す。縦軸は、正則構成のＦｌａｔ  ＸＯＲ符号を用いて測定した平均通信量に対する、本実施形態に係る非正則構成のＦｌａｔ  ＸＯＲ符号を用いて測定した平均通信量の比を示す。本実施形態に係る非正則構成のＦｌａｔ  ＸＯＲ符号を用いた場合、いずれの符号長ｎにおいても、より小さい通信量でデータを保護することができる。
【００６７】
また、図１１に、ＲＳ符号を用いた場合の通信量の比較結果を示す。縦軸は、Ｒｅｅｄ−Ｓｏｌｏｍｏｎ符号を用いて測定した平均通信量に対する、本実施形態に係る非正則構成のＦｌａｔ  ＸＯＲ符号を用いて測定した平均通信量の比を示す。本実施形態に係る非正則構成のＦｌａｔ  ＸＯＲ符号を用いた場合、いずれの符号長ｎにおいても、より小さい通信量でデータを保護することができる。
【００６８】
［第２実施例］
多地点にデータを分散保存するストレージシステムにおいて、ディスク数ｎおよび分割数ｋが大きく、（ｎ−ｋ）及びｗの組み合わせからｋ種類を選ぶ全組み合わせを探索不可能な場合について、ＲＳ符号と比較して通信量を削減する符号化手法を示す。
【００６９】
ディスク容量１（ＴＢ）、ストレージを構成する全ディスク数３６≦ｎ≦１１６、データ分割数２０≦ｋ≦１００、最大同時故障数ｗ＝３として冗長化を行う場合、符号長ｎ、分割数ｋ、列重みｗのＦｌａｔ  ＸＯＲ符号を用いてデータの分散保存を行う（図１）。
【００７０】
前述の非正則生成行列Ｇの第２の構成方法の手順に従い構成した生成行列Ｇを用いて符号化した非正則構成のＦｌａｔ  ＸＯＲ符号と、ＲＳ符号を用いた場合のそれぞれについて、故障ディスク数ｆごとに、修復に必要なＸＯＲ計算回数およびディスクの故障確率により重み付けした平均通信量を算出して比較した。
【００７１】
図１２に、ＲＳ符号とのＸＯＲ計算回数の比較結果を示す。縦軸は、ＲＳ符号を用いた場合の平均ＸＯＲ計算回数に対する、本実施形態に係る非正則構成のＦｌａｔ  ＸＯＲ符号を用いた場合の平均ＸＯＲ計算回数の比を示す。
【００７２】
図１３に、ＲＳ符号との平均通信量の比較結果を示す。縦軸は、ＲＳ符号を用いて測定した平均通信量に対する、本実施形態に係る非正則構成のＦｌａｔ  ＸＯＲ符号を用いて測定した平均通信量の比を示す。
【００７３】
図１２及び図１３に示すように、非正則構成の符号を用いた場合、より少ないＸＯＲ計算回数および通信量でデータを保護することができることが分かる。
【００７４】
［第３実施例］
多地点にデータを分散保存するストレージシステムにおいて、ディスク数ｎおよび分割数ｋが大きく、（ｎ−ｋ）及びｗの組み合わせからｋ種類を選ぶ全組み合わせを探索不可能な場合について、正則構成のＦｌａｔ  ＸＯＲ符号と比較して通信量を削減する符号化手法を示す。
【００７５】
ディスク容量１（ＴＢ）、全ディスク数２６≦ｎ≦１３０、データ分割数１８≦ｋ≦１１３、最大同時故障数ｗ＝３として冗長化を行う場合、符号長ｎ、分割数ｋ、列重みｗの非正則構成Ｆｌａｔ  ＸＯＲ符号を非正則構成の生成行列Ｇの第２の構成方法の手順に従って構成する。また、このとき分割数ｋ＝ｎ−ｋＣｗにおいて正則構成のＦｌａｔ  ＸＯＲ符号の生成行列が１通りに決定される。
【００７６】
非正則構成の生成行列Ｇおよびｋ＝ｎ−ｋＣｗの正則構成の生成行列Ｇを用いた場合について、ｆディスクの修復に必要なＸＯＲ計算回数およびディスクの故障確率により重み付けした平均通信量を比較した。
【００７７】
図１４に、正則構成のＦｌａｔ  ＸＯＲ符号とのＸＯＲ計算回数の比較結果を示す。縦軸は、正則構成のＦｌａｔ  ＸＯＲ符号を用いた場合の平均ＸＯＲ計算回数に対する、本実施形態に係る非正則構成のＦｌａｔ  ＸＯＲ符号を用いた場合の平均ＸＯＲ計算回数の比を示す。
【００７８】
図１５に、正則構成のＦｌａｔ  ＸＯＲ符号との平均通信量の比較結果を示す。縦軸は、正則構成のＦｌａｔ  ＸＯＲ符号を用いて測定した平均通信量に対する、本実施形態に係る非正則構成のＦｌａｔ  ＸＯＲ符号を用いて測定した平均通信量の比を示す。
【００７９】
図１４及び図１５に示すように、非正則構成の符号を用いることで、同じ符号長の場合に正則構成の符号より少ないＸＯＲ計算回数および通信量でデータを保護することができる。
【００８０】
以上説明したように、本実施形態に係る非正則構成の生成行列Ｇを用いて符号化したＦｌａｔ  ＸＯＲ符号を用いることで、ＲＳ符号および正則Ｆｌａｔ  ＸＯＲ符号と比べ、故障ディスク修復時の通信量および計算負荷を低減する符号を構成することができる。また、従来は非正則のＦｌａｔ  ＸＯＲ符号を適用できなかった符号長１００程度までの場合に広範囲の分割数で非正則符号を構成することができるため、分散数が大きなストレージシステムにおいて計算負荷を抑えた消失訂正符号の適用が可能となる。
【００８１】
また、本実施形態では、符号化においてＦｌａｔ  ＸＯＲ符号を用いる例を示したが、本発明は非正則構成の生成行列Ｇを用いた任意の符号化に適用できる。例えば、疎グラフに基づき、ＸＯＲによる符号化を行い、Ｒｅｃｏｖｅｒｙ  Ｅｑｕａｔｉｏｎ  Ａｌｇｏｒｉｔｈｍによる復号が可能な他の組織符号にも適用可能である。そのような組織符号としては、例えば、ＬＤＰＣ（Ｌｏｗ  Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ）符号が例示できる。
【産業上の利用可能性】
【００８２】
本発明は情報通信産業に適用することができる。
【符号の説明】
【００８３】
１０：符号化装置
１１：データ分割部
１２：符号化部
１３：データ分配部
２０：ディスク
【図１】
0006396849.tif 000002
【図２】
0006396849.tif 000003
【図３】
0006396849.tif 000004
【図４】
0006396849.tif 000005
【図５】
0006396849.tif 000006
【図６】
0006396849.tif 000007
【図７】
0006396849.tif 000008
【図８】
0006396849.tif 000009
【図９】
0006396849.tif 000010
【図１０】
0006396849.tif 000011
【図１１】
0006396849.tif 000012
【図１２】
0006396849.tif 000013
【図１３】
0006396849.tif 000014
【図１４】
0006396849.tif 000015
【図１５】
0006396849.tif 000016