(57)【要約】【課題】本発明の実施例は、分散型記憶システムの記憶の一貫性を改善するために使用されるデータ記憶方法を開示する。【解決手段】本発明の実施例における方法は、プライマリ記憶ノードにより、ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行するステップと、記憶ノードグループ内で、ターゲットECストライプのm+k個のターゲットEC  blockを記憶するために使用されるm+k個のターゲット記憶ノードを決定するステップと、準備メッセージをターゲット記憶ノードに送信するステップと、ターゲット記憶ノードにより送信された応答メッセージを受信するステップと、全てのターゲット記憶ノードの応答メッセージを受信した後に、ターゲット記憶ノードに対して、準備ログにあるターゲットEC  blockを書き込むように命令するために、実行メッセージをターゲット記憶ノードに送信するステップとを含む。【選択図】図２
2018022530.tif 000002
【特許請求の範囲】
【請求項１】
分散型記憶システムに適用されるデータ記憶方法であって、前記分散型記憶システムは、イレージャーコーディング（EC）ストライプを使用することによりデータを記憶し、各ECストライプは、データ部及びパリティ部を有し、各ECストライプの前記データ部は、m個のデータブロックを有し、各ECストライプの前記パリティ部は、前記m個のデータブロックにおいて実行されるパリティコーディングの後に取得されたk個のパリティブロックを有し、前記m個のデータブロック及び前記k個のパリティブロックは、各ECストライプのEC  blockを構成し、前記分散型記憶システムは、複数の記憶ノードグループを有し、各記憶ノードグループは、m+k個未満ではない記憶ノードを有し、１つのプライマリ記憶ノードが各記憶ノードグループ内で指定され、前記プライマリ記憶ノードを除く各記憶ノードグループ内のノードはセカンダリ記憶ノードであり、m及びkは共に正の整数であり、前記方法は、前記記憶ノードグループのいずれか１つの中のプライマリ記憶ノードにより実行されるデータ記憶方法であって、
記憶されるべきデータセグメントを受信し、ターゲットECストライプを取得するために、前記記憶されるべきデータセグメントにおいてECコーディングを実行するステップであり、前記記憶されるべきデータセグメントのサイズはZより大きくなく、Zはm個のデータブロックのサイズであり、前記ターゲットECストライプは、m+k個のターゲットEC  blockを有し、前記m+k個のターゲットEC  blockは、m個のターゲットデータブロック及びk個のターゲットパリティブロックを有するステップと、
m+k個のターゲット記憶ノードを決定するステップであり、前記m+k個のターゲット記憶ノードは、前記m+k個のターゲットEC  blockを記憶するように構成され、各ターゲット記憶ノードは、前記ターゲットEC  blockの１つを記憶するステップと、
準備メッセージを前記m+k個のターゲット記憶ノードに別々に送信するステップであり、各準備メッセージは、各ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを有するステップと、
前記m+k個のターゲット記憶ノードのいずれかのターゲット記憶ノードにより送信された応答メッセージを受信するステップであり、前記応答メッセージは、前記応答メッセージを現在送信している前記ターゲット記憶ノードが前記準備メッセージに従って準備ログを生成したことを示すために使用され、前記準備ログは、前記応答メッセージを現在送信している前記ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを有するステップと、
前記m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードの応答メッセージを受信した後に、実行メッセージを前記m+k個のターゲット記憶ノードに送信するステップであり、前記実行メッセージは、前記m+k個のターゲット記憶ノードに対して、前記準備ログに含まれる前記ターゲットEC  blockを書き込むように命令するために使用されるステップと
を有するデータ記憶方法。
【請求項２】
前記準備メッセージは、前記ターゲットECストライプのバージョン番号を更に有し、
前記準備ログは、前記ターゲットECストライプの前記バージョン番号を更に有し、
前記実行メッセージは、前記m+k個のターゲット記憶ノードに対して、前記準備ログにある前記ターゲットEC  block及び前記ターゲットECストライプの前記バージョン番号を書き込むように命令するために使用される、請求項１に記載のデータ記憶方法。
【請求項３】
準備メッセージを前記ターゲット記憶ノードに送信した後に、
故障した記憶ノードが前記m+k個のターゲット記憶ノードに存在することが検出された場合、前記故障した記憶ノードの故障回復の後に、前記m+k個のターゲット記憶ノードにおける前記ターゲットECストライプのバージョン番号が同じであるか否かを決定するステップであり、前記m+k個のターゲット記憶ノードにおける前記ターゲットECストライプの前記バージョン番号は、準備ログを生成したターゲット記憶ノードにおける準備ログ内の前記ターゲットECストライプの前記バージョン番号及び／又は準備ログを有さないターゲット記憶ノードにより記憶された前記ターゲットECストライプのバージョン番号を有するステップと、
前記m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにおける前記ターゲットECストライプの前記バージョン番号が同じである場合、実行メッセージを、準備ログを生成した前記ターゲット記憶ノードに送信するステップであり、前記実行メッセージは、前記ターゲット記憶ノードに対して、前記準備ログに含まれる前記ターゲットEC  blockを書き込むように命令するために使用されるステップと
を更に有する、請求項２に記載のデータ記憶方法。
【請求項４】
前記m+k個のターゲット記憶ノード内の前記ターゲット記憶ノードにおける前記ターゲットECストライプの前記バージョン番号が異なる場合、削除メッセージを、準備ログを生成した前記ターゲット記憶ノードに送信するステップであり、前記削除メッセージは、前記ターゲット記憶ノードに対して、前記準備ログを削除するように命令するために使用されるステップを更に有する、請求項３に記載のデータ記憶方法。
【請求項５】
分散型記憶システムに適用されるデータ回復方法であり、前記分散型記憶システムは、イレージャーコーディング（EC）ストライプを使用することによりデータを記憶し、各ECストライプは、データ部及びパリティ部を有し、各ECストライプの前記データ部は、m個のデータブロックを有し、各ECストライプの前記パリティ部は、前記m個のデータブロックにおいて実行されるパリティコーディングの後に取得されたk個のパリティブロックを有し、前記m個のデータブロック及び前記k個のパリティブロックは、各ECストライプのEC  blockを構成し、各ECストライプはkey値に対応し、データ部の同じアドレス範囲を有するECストライプのkey値は同じであり、データ部の異なるアドレス範囲を有するECストライプのkey値は異なり、前記分散型記憶システムは、複数の記憶ノードグループを有し、各記憶ノードグループは、m+k個未満ではない記憶ノードを有し、１つのプライマリ記憶ノードが各記憶ノードグループ内で指定され、前記プライマリ記憶ノードを除く各記憶ノードグループ内のノードはセカンダリ記憶ノードであり、m及びkは共に正の整数であり、故障した記憶ノードが前記記憶ノードグループのいずれか１つの中のセカンダリ記憶ノードに存在する場合、前記方法は、前記記憶ノードグループの前記いずれか１つの中のプライマリ記憶ノードにより実行されるデータ回復方法であって、
前記故障した記憶ノードの故障回復の後に、前記故障した記憶ノードにより送信された回復メッセージを受信するステップと、
前記記憶ノードグループ内の故障していない記憶ノードにより記憶されたEC  blockに従った計算を通じて、前記故障した記憶ノードのN個の喪失したEC  blockを取得するステップであり、前記Nは正の整数であるステップと、
記憶のために、前記N個の喪失したEC  blockを前記故障した記憶ノードに順次に送信するステップと、
前記N個の喪失したEC  blockを前記故障した記憶ノードに順次に送信する過程において、前記プライマリ記憶ノードが第１のEC  blockを生成し、前記第１のEC  blockが前記故障した記憶ノードにより記憶されるべきであると決定した場合、前記第１のEC  blockと同じkey値を有する第２のEC  blockが、前記故障した記憶ノードにより現在成功して記憶されていない前記喪失したEC  blockに存在するか否かを決定するステップと、
前記第２のEC  blockが存在すると決定された場合、前記故障した記憶ノードが前記第２のEC  blockを成功して記憶した後に、記憶を実行するために、前記第１のEC  blockを前記故障した記憶ノードに送信するステップと
を有するデータ回復方法。
【請求項６】
記憶のために、前記N個の喪失したEC  blockを前記故障した記憶ノードに順次に送信するステップは、
第nの喪失したEC  blockを前記故障した記憶ノードに送信するステップであり、1≦n≦Nであるステップと、
前記第nの喪失したEC  blockに対応する応答メッセージを受信するステップであり、前記応答メッセージは、前記故障した記憶ノードにより送信され、前記応答メッセージは、前記故障した記憶ノードが前記第nの喪失したEC  blockを成功して記憶したことを示すために使用されるステップと、
前記第nの喪失したEC  blockに関して前記故障した記憶ノードの前記応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、第nの喪失したEC  blockを前記故障した記憶ノードに送信するステップを再実行するステップと
を有する、請求項５に記載のデータ回復方法。
【請求項７】
現在成功して記憶されていない前記喪失したEC  blockは、前記故障した記憶ノードに現在送信されていない前記喪失したEC  blockと、前記故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない前記喪失したEC  blockとを有する、請求項６に記載のデータ回復方法。
【請求項８】
前記分散型記憶システムの論理ボリュームは、複数の論理パーティションを有し、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複せず、各論理パーティションは、１つのkey値に一意に対応し、各EC  blockが入る論理パーティションのkey値は、前記EC  blockのkey値である、請求項５ないし７のうちいずれか１項に記載のデータ回復方法。
【請求項９】
分散型記憶システムに適用されるデータ記憶装置であり、前記分散型記憶システムは、イレージャーコーディング（EC）ストライプを使用することによりデータを記憶し、各ECストライプは、データ部及びパリティ部を有し、各ECストライプの前記データ部は、m個のデータブロックを有し、各ECストライプの前記パリティ部は、パリティコーディングが前記m個のデータブロックにおいて実行された後に取得されたk個のパリティブロックを有し、前記m個のデータブロック及び前記k個のパリティブロックは、各ECストライプのEC  blockを構成し、前記分散型記憶システムは、複数の記憶ノードグループを有し、各記憶ノードグループは、m+k個未満ではない記憶ノードを有し、１つのプライマリ記憶ノードが各記憶ノードグループ内で指定され、前記プライマリ記憶ノードを除く各記憶ノードグループ内のノードはセカンダリ記憶ノードであり、m及びkは共に正の整数であり、前記データ記憶装置は、前記記憶ノードグループのいずれか１つの中のプライマリ記憶ノードに配置されるデータ記憶装置であって、
記憶されるべきデータセグメントを受信し、ターゲットECストライプを取得するために、前記記憶されるべきデータセグメントにおいてECコーディングを実行するように構成されたデータコーディングモジュールであり、前記記憶されるべきデータセグメントのサイズはZより大きくなく、Zはm個のデータブロックのサイズであり、前記ターゲットECストライプは、m+k個のターゲットEC  blockを有し、前記m+k個のターゲットEC  blockは、m個のターゲットデータブロック及びk個のターゲットパリティブロックを有するデータコーディングモジュールと、
m+k個のターゲット記憶ノードを決定するように構成されたノード決定モジュールであり、前記m+k個のターゲット記憶ノードは、前記m+k個のターゲットEC  blockを記憶するように構成され、各ターゲット記憶ノードは、前記ターゲットEC  blockの１つを記憶するノード決定モジュールと、
準備メッセージを前記m+k個のターゲット記憶ノードに別々に送信するように構成されたメッセージ送信モジュールであり、各準備メッセージは、各ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを有するメッセージ送信モジュールと、
前記m+k個のターゲット記憶ノードのいずれかのターゲット記憶ノードにより送信された応答メッセージを受信するように構成されたメッセージ受信モジュールであり、前記応答メッセージは、前記応答メッセージを現在送信している前記ターゲット記憶ノードが前記準備メッセージに従って準備ログを生成したことを示すために使用され、前記準備ログは、前記応答メッセージを現在送信している前記ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを有するメッセージ受信モジュールと
を有し、
前記メッセージ送信モジュールは、前記メッセージ受信モジュールが前記m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードの応答メッセージを受信した後に、実行メッセージを前記m+k個のターゲット記憶ノードに送信するように更に構成され、前記実行メッセージは、前記m+k個のターゲット記憶ノードに対して、前記準備ログに含まれる前記ターゲットEC  blockを書き込むように命令するために使用されるデータ記憶装置。
【請求項１０】
前記準備メッセージは、前記ターゲットECストライプのバージョン番号を更に有し、
前記準備ログは、前記ターゲットECストライプの前記バージョン番号を更に有し、
前記実行メッセージは、前記m+k個のターゲット記憶ノードに対して、前記準備ログにある前記ターゲットEC  block及び前記ターゲットECストライプの前記バージョン番号を書き込むように命令するために使用される、請求項９に記載のデータ記憶装置。
【請求項１１】
故障した記憶ノードが前記m+k個のターゲット記憶ノードに存在することが検出された場合、前記故障した記憶ノードの故障回復の後に、前記m+k個のターゲット記憶ノードにおける前記ターゲットECストライプのバージョン番号が同じであるか否かを決定するように構成されたバージョン決定モジュールであり、前記m+k個のターゲット記憶ノードにおける前記ターゲットECストライプの前記バージョン番号は、準備ログを生成したターゲット記憶ノードにおける準備ログ内の前記ターゲットECストライプの前記バージョン番号及び／又は準備ログを有さないターゲット記憶ノードにより記憶されたターゲットECストライプのバージョン番号を有するバージョン決定モジュールを更に有し、
前記メッセージ送信モジュールは、前記m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにおける前記ターゲットECストライプの前記バージョン番号が同じである場合、実行メッセージを、準備ログを生成した前記ターゲット記憶ノードに送信するように構成され、前記実行メッセージは、前記ターゲット記憶ノードに対して、前記準備ログに含まれる前記ターゲットEC  blockを書き込むように命令するために使用される、請求項１０に記載のデータ記憶装置。
【請求項１２】
前記メッセージ送信モジュールは、前記m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにおける前記ターゲットECストライプの前記バージョン番号が異なる場合、削除メッセージを、準備ログを生成した前記ターゲット記憶ノードに送信するように更に構成され、前記削除メッセージは、前記ターゲット記憶ノードに対して、前記準備ログを削除するように命令するために使用される、請求項１１に記載のデータ記憶装置。
【請求項１３】
分散型記憶システムに適用されるデータ回復装置であり、前記分散型記憶システムは、イレージャーコーディング（EC）ストライプを使用することによりデータを記憶し、各ECストライプは、データ部及びパリティ部を有し、各ECストライプの前記データ部は、m個のデータブロックを有し、各ECストライプの前記パリティ部は、前記m個のデータブロックにおいて実行されるパリティコーディングの後に取得されたk個のパリティブロックを有し、前記m個のデータブロック及び前記k個のパリティブロックは、各ECストライプのEC  blockを構成し、各ECストライプはkey値に対応し、データ部の同じアドレス範囲を有するECストライプのkey値は同じであり、データ部の異なるアドレス範囲を有するECストライプのkey値は異なり、前記分散型記憶システムは、複数の記憶ノードグループを有し、各記憶ノードグループは、m+k個未満ではない記憶ノードを有し、１つのプライマリ記憶ノードが各記憶ノードグループ内で指定され、前記プライマリ記憶ノードを除く各記憶ノードグループ内のノードはセカンダリ記憶ノードであり、m及びkは共に正の整数であり、故障した記憶ノードが前記分散型記憶システム内のいずれかの記憶ノードグループ内のセカンダリ記憶ノードに存在する場合、前記データ回復装置は、前記故障した記憶ノードが属する前記記憶ノードグループ内のプライマリ記憶ノードに配置されるデータ回復装置であって、
前記故障した記憶ノードの故障回復の後に、前記故障した記憶ノードにより送信された回復メッセージを受信するように構成された回復メッセージモジュールと、
前記記憶ノードグループ内の故障していない記憶ノードにより記憶されたEC  blockに従った計算を通じて、前記故障した記憶ノードのN個の喪失したEC  blockを取得するように構成されたデータ計算モジュールであり、前記Nは正の整数であるデータ計算モジュールと、
記憶を実行するために、前記N個の喪失したEC  blockを前記故障した記憶ノードに順次に送信するように構成されたデータ送信モジュールと、
前記N個の喪失したEC  blockを前記故障した記憶ノードに順次に送信する過程において、前記プライマリ記憶ノードが第１のEC  blockを生成し、前記第１のEC  blockが前記故障した記憶ノードにより記憶されるべきであると決定した場合、前記第１のEC  blockと同じkey値を有する第２のEC  blockが、前記故障した記憶ノードにより現在成功して記憶されていない前記喪失したEC  blockに存在するか否かを決定するように構成されたkey値決定モジュールと
を有し、
前記データ送信モジュールは、前記第２のEC  blockが存在すると前記key値決定モジュールが決定した場合、前記故障した記憶ノードが前記第２のEC  blockを成功して記憶した後に、記憶を実行するために、前記第１のEC  blockを前記故障した記憶ノードに送信するように更に構成されるデータ回復装置。
【請求項１４】
前記データ送信モジュールは、第nの喪失したEC  blockを前記故障した記憶ノードに送信するように構成され、1≦n≦Nであり、
前記第nの喪失したEC  blockに関して前記故障した記憶ノードの応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、第nの喪失したEC  blockを前記故障した記憶ノードに送信するステップを再実行するように構成され、前記応答メッセージは、前記故障した記憶ノードが前記第nの喪失したEC  blockを成功して記憶したことを示すために使用される、請求項１３に記載のデータ回復装置。
【請求項１５】
現在成功して記憶されていない前記喪失したEC  blockは、前記故障した記憶ノードに現在送信されていない前記喪失したEC  blockと、前記故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない前記喪失したEC  blockとを有する、請求項１４に記載のデータ回復装置。
【請求項１６】
前記分散型記憶システムの論理ボリュームは、複数の論理パーティションを有し、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複せず、各論理パーティションは、１つのkey値に一意に対応し、各EC  blockが入る論理パーティションのkey値は、前記EC  blockのkey値である、請求項１３ないし１５のうちいずれか１項に記載のデータ回復装置。
【請求項１７】
コンピュータ実行可能命令を有するコンピュータ読み取り可能記憶媒体であって、
コンピュータのプロセッサが前記コンピュータ実行可能命令を実行した場合、前記コンピュータは、請求項１ないし４のうちいずれか１項に記載の方法を実行するコンピュータ読み取り可能記憶媒体。
【請求項１８】
コンピュータ実行可能命令を有するコンピュータ読み取り可能記憶媒体であって、
コンピュータのプロセッサが前記コンピュータ実行可能命令を実行した場合、前記コンピュータは、請求項５ないし８のうちいずれか１項に記載の方法を実行するコンピュータ読み取り可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ記憶の分野に関し、特にデータ記憶方法、データ回復方法、関係する装置及びシステムに関する。
【背景技術】
【０００２】
現在、分散型記憶システムは、データを記憶するためにイレージャーコーディング（EC、Erasure  coding）技術をますます使用している。イレージャーコーディング技術の原理は、データをm個のデータブロックに分割し、k個のパリティブロックを生成するために、冗長アルゴリズムを使用することによりm個のデータブロックにおいてパリティコーディングを実行することである。m個のデータブロック及びk個のパリティブロックは、１つのECストライプと呼ばれる。データブロック又はパリティブロックは、EC  blockとも呼ばれ、各ECストライプは、k個のEC  blockの喪失を許容する。
【０００３】
記憶の信頼性を確保するため、分散型記憶システムは、記憶のために、m+k個の記憶ノードに各ECストライプのm+k個のEC  blockを分配する。このように、ノードが故障した場合であっても、故障したノードに記憶されたEC  blockは、他のノードに記憶されたデータに従って回復することができる。EC技術を使用する分散型記憶システムは、k個の記憶ノードの同時故障を許容することが認識され得る。
【０００４】
しかし、EC  blockを記憶ノードに書き込むことは、或る期間を必要とする。ECストライプを記憶するために使用されるm+k個の記憶ノード内の記憶ノードがEC  blockを書き込むときに故障している場合、記憶ノードの一部がECストライプのEC  blockを有するが、記憶ノードの他の部分がECストライプのEC  blockを有さない場合が生じ、ECストライプの記憶の不一致を引き起こす。従って、分散型記憶システムの記憶の一貫性が悪い。
【発明の概要】
【０００５】
本発明の実施例は、分散型記憶システムの記憶の一貫性を改善するために使用されるデータ回復方法を提供する。
【０００６】
本発明の実施例の第１の態様は、分散型記憶システムに適用されるデータ記憶方法を提供し、分散型記憶システムは、イレージャーコーディング（EC）ストライプを使用することによりデータを記憶し、各ECストライプは、データ部及びパリティ部を含み、各ECストライプのデータ部は、m個のデータブロックを含み、各ECストライプのパリティ部は、パリティコーディングがm個のデータブロックにおいて実行された後に取得されたk個のパリティブロックを含み、m個のデータブロック及びk個のパリティブロックは、各ECストライプのEC  blockを構成し、分散型記憶システムは、複数の記憶ノードグループを含み、各記憶ノードグループは、m+k個未満ではない記憶ノードを含み、１つのプライマリ記憶ノードが各記憶ノードグループ内で指定され、プライマリ記憶ノードを除く各記憶ノードグループ内のノードはセカンダリ記憶ノードであり、m及びkは共に正の整数であり、この方法は、記憶ノードグループのいずれか１つの中のプライマリ記憶ノードにより実行され、記憶されるべきデータセグメントを受信し、ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行するステップであり、記憶されるべきデータセグメントのサイズはZより大きくなく、Zはm個のデータブロックのサイズであり、ターゲットECストライプは、m+k個のターゲットEC  blockを含み、m+k個のターゲットEC  blockは、m個のターゲットデータブロック及びk個のターゲットパリティブロックを含むステップと、m+k個のターゲット記憶ノードを決定するステップであり、m+k個のターゲット記憶ノードは、m+k個のターゲットEC  blockを記憶するように構成され、各ターゲット記憶ノードは、ターゲットEC  blockの１つを記憶するステップと、準備メッセージをm+k個のターゲット記憶ノードに別々に送信するステップであり、各準備メッセージは、各ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含むステップと、m+k個のターゲット記憶ノードのいずれかのターゲット記憶ノードにより送信された応答メッセージを受信するステップであり、応答メッセージは、応答メッセージを現在送信しているターゲット記憶ノードが準備メッセージに従って準備ログを生成したことを示すために使用され、準備ログは、応答メッセージを現在送信しているターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含むステップと、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードの応答メッセージを受信した後に、実行メッセージをm+k個のターゲット記憶ノードに送信するステップであり、実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用されるステップとを含む。
【０００７】
本発明の実施例の第１の態様を参照して、本発明の実施例の第１の態様の第１の実現方式では、準備メッセージは、ターゲットECストライプのバージョン番号を更に含み、準備ログは、ターゲットECストライプのバージョン番号を更に含み、実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログにあるターゲットEC  block及びターゲットECストライプのバージョン番号を書き込むように命令するために具体的に使用される。
【０００８】
本発明の実施例の第１の態様の第１の実現方式を参照して、本発明の実施例の第１の態様の第２の実現方式は、故障した記憶ノードがm+k個のターゲット記憶ノードに存在することが検出された場合、故障した記憶ノードの故障回復の後に、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じであるか否かを決定するステップであり、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号は、準備ログを生成したターゲット記憶ノードにおける準備ログ内のターゲットECストライプのバージョン番号及び／又は準備ログを有さないターゲット記憶ノードにより記憶されたターゲットECストライプのバージョン番号を含むステップと、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じである場合、実行メッセージを、準備ログを生成したターゲット記憶ノードに送信するステップであり、実行メッセージは、ターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用されるステップとを更に含む。
【０００９】
本発明の実施例の第１の態様の第２の実現方式を参照して、本発明の実施例の第１の態様の第３の実現方式は、m+k個のターゲット記憶ノード内のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が異なる場合、削除メッセージを、準備ログを生成したターゲット記憶ノードに送信するステップであり、削除メッセージは、ターゲット記憶ノードに対して、準備ログを削除するように命令するために使用されるステップを更に含む。
【００１０】
本発明の実施例の第２の態様は、分散型記憶システムに適用されるデータ回復方法を提供し、分散型記憶システムは、イレージャーコーディング（EC）ストライプを使用することによりデータを記憶し、各ECストライプは、データ部及びパリティ部を含み、各ECストライプのデータ部は、m個のデータブロックを含み、各ECストライプのパリティ部は、パリティコーディングがm個のデータブロックにおいて実行された後に取得されたk個のパリティブロックを含み、m個のデータブロック及びk個のパリティブロックは、各ECストライプのEC  blockを構成し、各ECストライプはkey値に対応し、データ部の同じアドレス範囲を有するECストライプのkey値は同じであり、データ部の異なるアドレス範囲を有するECストライプのkey値は異なり、分散型記憶システムは、複数の記憶ノードグループを含み、各記憶ノードグループは、m+k個未満ではない記憶ノードを含み、１つのプライマリ記憶ノードが各記憶ノードグループ内で指定され、プライマリ記憶ノードを除く各記憶ノードグループ内のノードはセカンダリ記憶ノードであり、m及びkは共に正の整数であり、故障した記憶ノードが記憶ノードグループのいずれか１つの中のセカンダリ記憶ノードに存在する場合、この方法は、記憶ノードグループのいずれか１つの中のプライマリ記憶ノードにより実行され、故障した記憶ノードの故障回復の後に、故障した記憶ノードにより送信された回復メッセージを受信するステップと、記憶ノードグループ内の故障していない記憶ノードにより記憶されたEC  blockに従った計算を通じて、故障した記憶ノードのN個の喪失したEC  blockを取得するステップであり、Nは正の整数であるステップと、記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信するステップと、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する過程において、プライマリ記憶ノードが第１のEC  blockを生成し、第１のEC  blockが故障した記憶ノードにより記憶されるべきであると決定した場合、第１のEC  blockと同じkey値を有する第２のEC  blockが、故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定するステップと、第２のEC  blockが存在すると決定された場合、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信するステップとを含む。
【００１１】
本発明の実施例の第２の態様を参照して、本発明の実施例の第２の態様の第１の実現方式では、記憶のために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信するステップは、第nの喪失したEC  blockを故障した記憶ノードに送信するステップであり、1≦n≦Nであるステップと、第nの喪失したEC  blockに対応する応答メッセージを受信するステップであり、応答メッセージは、故障した記憶ノードにより送信され、応答メッセージは、故障した記憶ノードが第nの喪失したEC  blockを成功して記憶したことを示すために使用されるステップと、第nの喪失したEC  blockに関して故障した記憶ノードの応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、第nの喪失したEC  blockを故障した記憶ノードに送信するステップを再実行するステップとを含む。
【００１２】
本発明の実施例の第２の態様の第１の実現方式を参照して、本発明の実施例の第２の態様の第２の実現方式では、現在成功して記憶されていない喪失したEC  blockは、故障した記憶ノードに現在送信されていない喪失したEC  blockと、故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない喪失したEC  blockとを含む。
【００１３】
本発明の実施例の第２の態様又は第２の態様の第１若しくは第２の実現方式を参照して、本発明の実施例の第２の態様の第３の実現方式では、分散型記憶システムの論理ボリュームは、複数の論理パーティションを含み、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複せず、各論理パーティションは、１つのkey値に一意に対応し、各EC  blockが入る論理パーティションのkey値は、EC  blockのkey値である。
【００１４】
本発明の実施例の第３の態様は、データ記憶装置を提供し、分散型記憶システムは、イレージャーコーディング（EC）ストライプを使用することによりデータを記憶し、各ECストライプは、データ部及びパリティ部を含み、各ECストライプのデータ部は、m個のデータブロックを含み、各ECストライプのパリティ部は、パリティコーディングがm個のデータブロックにおいて実行された後に取得されたk個のパリティブロックを含み、m個のデータブロック及びk個のパリティブロックは、各ECストライプのEC  blockを構成し、分散型記憶システムは、複数の記憶ノードグループを含み、各記憶ノードグループは、m+k個未満ではない記憶ノードを含み、１つのプライマリ記憶ノードが各記憶ノードグループ内で指定され、プライマリ記憶ノードを除く各記憶ノードグループ内のノードはセカンダリ記憶ノードであり、m及びkは共に正の整数であり、データ記憶装置は、記憶ノードグループのいずれか１つの中のプライマリ記憶ノードに配置され、データ記憶装置は、記憶されるべきデータセグメントを受信し、ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行するように構成されたデータコーディングモジュールであり、記憶されるべきデータセグメントのサイズはZより大きくなく、Zはm個のデータブロックのサイズであり、ターゲットECストライプは、m+k個のターゲットEC  blockを含み、m+k個のターゲットEC  blockは、m個のターゲットデータブロック及びk個のターゲットパリティブロックを含むデータコーディングモジュールと、m+k個のターゲット記憶ノードを決定するように構成されたノード決定モジュールであり、m+k個のターゲット記憶ノードは、m+k個のターゲットEC  blockを記憶するように構成され、各ターゲット記憶ノードは、ターゲットEC  blockの１つを記憶するノード決定モジュールと、準備メッセージをm+k個のターゲット記憶ノードに別々に送信するように構成されたメッセージ送信モジュールであり、各準備メッセージは、各ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含むメッセージ送信モジュールと、m+k個のターゲット記憶ノードのいずれかのターゲット記憶ノードにより送信された応答メッセージを受信するように構成されたメッセージ受信モジュールであり、応答メッセージは、応答メッセージを現在送信しているターゲット記憶ノードが準備メッセージに従って準備ログを生成したことを示すために使用され、準備ログは、応答メッセージを現在送信しているターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含むメッセージ受信モジュールとを含み、メッセージ送信モジュールは、メッセージ受信モジュールがm+k個のターゲット記憶ノード内の全てのターゲット記憶ノードの応答メッセージを受信した後に、実行メッセージをm+k個のターゲット記憶ノードに送信するように更に構成され、実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用される。
【００１５】
本発明の実施例の第３の態様を参照して、本発明の実施例の第３の態様の第１の実現方式では、準備メッセージは、ターゲットECストライプのバージョン番号を更に含み、準備ログは、ターゲットECストライプのバージョン番号を更に含み、実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログにあるターゲットEC  block及びターゲットECストライプのバージョン番号を書き込むように命令するために具体的に使用される。
【００１６】
本発明の実施例の第３の態様の第１の実現方式を参照して、本発明の実施例の第３の態様の第２の実現方式では、この装置は、故障した記憶ノードがm+k個のターゲット記憶ノードに存在することが検出された場合、故障した記憶ノードの故障回復の後に、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じであるか否かを決定するように構成されたバージョン決定モジュールであり、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号は、準備ログを生成したターゲット記憶ノードにおける準備ログ内のターゲットECストライプのバージョン番号及び／又は準備ログを有さないターゲット記憶ノードにより記憶されたターゲットECストライプのバージョン番号を含むバージョン決定モジュールを更に含み、メッセージ送信モジュールは、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じである場合、実行メッセージを、準備ログを生成したターゲット記憶ノードに送信するように具体的に構成され、実行メッセージは、ターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用される。
【００１７】
本発明の実施例の第３の態様の第２の実現方式を参照して、本発明の実施例の第３の態様の第３の実現方式では、メッセージ送信モジュールは、m+k個のターゲット記憶ノード内のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が異なる場合、削除メッセージを、準備ログを生成したターゲット記憶ノードに送信するように更に構成され、削除メッセージは、ターゲット記憶ノードに対して、準備ログを削除するように命令するために使用される。
【００１８】
本発明の実施例の第４の態様は、分散型記憶システムに適用されるデータ回復装置を提供し、分散型記憶システムは、イレージャーコーディング（EC）ストライプを使用することによりデータを記憶し、各ECストライプは、データ部及びパリティ部を含み、各ECストライプのデータ部は、m個のデータブロックを含み、各ECストライプのパリティ部は、パリティコーディングがm個のデータブロックにおいて実行された後に取得されたk個のパリティブロックを含み、m個のデータブロック及びk個のパリティブロックは、各ECストライプのEC  blockを構成し、各ECストライプはkey値に対応し、データ部の同じアドレス範囲を有するECストライプのkey値は同じであり、データ部の異なるアドレス範囲を有するECストライプのkey値は異なり、分散型記憶システムは、複数の記憶ノードグループを含み、各記憶ノードグループは、m+k個未満ではない記憶ノードを含み、１つのプライマリ記憶ノードが各記憶ノードグループ内で指定され、プライマリ記憶ノードを除く各記憶ノードグループ内のノードはセカンダリ記憶ノードであり、m及びkは共に正の整数であり、故障した記憶ノードが分散型記憶システム内のいずれかの記憶ノードグループ内のセカンダリ記憶ノードに存在する場合、データ回復装置は、故障した記憶ノードが属する記憶ノードグループ内のプライマリ記憶ノードに配置され、データ回復装置は、故障した記憶ノードの故障回復の後に、故障した記憶ノードにより送信された回復メッセージを受信するように構成された回復メッセージモジュールと、記憶ノードグループ内の故障していない記憶ノードにより記憶されたEC  blockに従った計算を通じて、故障した記憶ノードのN個の喪失したEC  blockを取得するように構成されたデータ計算モジュールであり、Nは正の整数であるデータ計算モジュールと、記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信するように構成されたデータ送信モジュールと、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する過程において、プライマリ記憶ノードが第１のEC  blockを生成し、第１のEC  blockが故障した記憶ノードにより記憶されるべきであると決定した場合、第１のEC  blockと同じkey値を有する第２のEC  blockが、故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定するように構成されたkey値決定モジュールとを含み、データ送信モジュールは、第２のEC  blockが存在するとkey値決定モジュールが決定した場合、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信するように更に構成される。
【００１９】
本発明の実施例の第４の態様を参照して、本発明の実施例の第４の態様の第１の実現方式では、データ送信モジュールは、第nの喪失したEC  blockを故障した記憶ノードに送信するように具体的に構成され、1≦n≦Nであり、第nの喪失したEC  blockに対応する応答メッセージを受信するように具体的に構成され、応答メッセージは、故障した記憶ノードにより送信され、応答メッセージは、故障した記憶ノードが第nの喪失したEC  blockを成功して記憶したことを示すために使用され、第nの喪失したEC  blockに関して故障した記憶ノードの応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、第nの喪失したEC  blockを故障した記憶ノードに送信するステップを再実行するように具体的に構成される。
【００２０】
本発明の実施例の第４の態様の第１の実現方式を参照して、本発明の実施例の第４の態様の第２の実現方式では、現在成功して記憶されていない喪失したEC  blockは、故障した記憶ノードに現在送信されていない喪失したEC  blockと、故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない喪失したEC  blockとを含む。
【００２１】
本発明の実施例の第４の態様又は第４の態様の第１若しくは第２の実現方式を参照して、本発明の実施例の第４の態様の第３の実現方式では、分散型記憶システムの論理ボリュームは、複数の論理パーティションを含み、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複せず、各論理パーティションは、１つのkey値に一意に対応し、各EC  blockが入る論理パーティションのkey値は、EC  blockのkey値である。
【００２２】
本発明の実施例の第５の態様は、データ記憶装置を提供し、データ記憶装置は、入力装置と、出力装置と、プロセッサと、メモリとを含み、メモリに記憶された動作命令を呼び出すことにより、プロセッサは、記憶されるべきデータセグメントを受信し、ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行するように構成され、記憶されるべきデータセグメントのサイズはZより大きくなく、Zはm個のデータブロックのサイズであり、ターゲットECストライプは、m+k個のターゲットEC  blockを含み、m+k個のターゲットEC  blockは、m個のターゲットデータブロック及びk個のターゲットパリティブロックを含み、m+k個のターゲット記憶ノードを決定するように構成され、m+k個のターゲット記憶ノードは、m+k個のターゲットEC  blockを記憶するように構成され、各ターゲット記憶ノードは、ターゲットEC  blockの１つを記憶し、準備メッセージをm+k個のターゲット記憶ノードに別々に送信するように構成され、各準備メッセージは、各ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含み、m+k個のターゲット記憶ノードのいずれかのターゲット記憶ノードにより送信された応答メッセージを受信するように構成され、応答メッセージは、応答メッセージを現在送信しているターゲット記憶ノードが準備メッセージに従って準備ログを生成したことを示すために使用され、準備ログは、応答メッセージを現在送信しているターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含み、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードの応答メッセージを受信した後に、実行メッセージをm+k個のターゲット記憶ノードに送信するように構成され、実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用される。
【００２３】
本発明の実施例の第５の態様を参照して、本発明の実施例の第５の態様の第１の実現方式では、準備メッセージは、ターゲットECストライプのバージョン番号を更に含み、準備ログは、ターゲットECストライプのバージョン番号を更に含み、実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログにあるターゲットEC  block及びターゲットECストライプのバージョン番号を書き込むように命令するために具体的に使用される。
【００２４】
本発明の実施例の第５の態様の第１の実現方式を参照して、本発明の実施例の第５の態様の第２の実現方式では、プロセッサは、故障した記憶ノードがm+k個のターゲット記憶ノードに存在することが検出された場合、故障した記憶ノードの故障回復の後に、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じであるか否かを決定するように更に構成され、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号は、準備ログを生成したターゲット記憶ノードにおける準備ログ内のターゲットECストライプのバージョン番号及び／又は準備ログを有さないターゲット記憶ノードにより記憶されたターゲットECストライプのバージョン番号を含み、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じである場合、実行メッセージを、準備ログを生成したターゲット記憶ノードに送信するように更に構成され、実行メッセージは、ターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用される。
【００２５】
本発明の実施例の第５の態様の第２の実現方式を参照して、本発明の実施例の第５の態様の第３の実現方式では、プロセッサは、m+k個のターゲット記憶ノード内のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が異なる場合、削除メッセージを、準備ログを生成したターゲット記憶ノードに送信するように更に構成され、削除メッセージは、ターゲット記憶ノードに対して、準備ログを削除するように命令するために使用される。
【００２６】
本発明の実施例の第６の態様は、データ回復装置を提供し、データ回復装置は、入力装置と、出力装置と、プロセッサと、メモリとを含み、メモリに記憶された動作命令を呼び出すことにより、プロセッサは、故障した記憶ノードの故障回復の後に、故障した記憶ノードにより送信された回復メッセージを受信し、故障した記憶ノードが属する記憶ノードグループ内の故障していない記憶ノードにより記憶されたEC  blockに従った計算を通じて、故障した記憶ノードのN個の喪失したEC  blockを取得するように構成され、Nは正の整数であり、記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信し、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する過程において、プライマリ記憶ノードが第１のEC  blockを生成し、第１のEC  blockが故障した記憶ノードにより記憶されるべきであると決定した場合、第１のEC  blockと同じkey値を有する第２のEC  blockが、故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定し、第２のEC  blockが存在すると決定された場合、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信するように構成される。
【００２７】
本発明の実施例の第６の態様を参照して、本発明の実施例の第６の態様の第１の実現方式では、プロセッサは、第nの喪失したEC  blockを故障した記憶ノードに送信するように更に構成され、1≦n≦Nであり、第nの喪失したEC  blockに対応する応答メッセージを受信するように更に構成され、応答メッセージは、故障した記憶ノードにより送信され、応答メッセージは、故障した記憶ノードが第nの喪失したEC  blockを成功して記憶したことを示すために使用され、第nの喪失したEC  blockに関して故障した記憶ノードの応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、第nの喪失したEC  blockを故障した記憶ノードに送信するステップを再実行するように更に構成される。
【００２８】
本発明の実施例の第６の態様の第１の実現方式を参照して、本発明の実施例の第６の態様の第２の実現方式では、現在成功して記憶されていない喪失したEC  blockは、故障した記憶ノードに現在送信されていない喪失したEC  blockと、故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない喪失したEC  blockとを含む。
【００２９】
本発明の実施例の第６の態様又は第６の態様の第１若しくは第２の実現方式を参照して、本発明の実施例の第６の態様の第３の実現方式では、分散型記憶システムの論理ボリュームは、複数の論理パーティションを含み、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複せず、各論理パーティションは、１つのkey値に一意に対応し、各EC  blockが入る論理パーティションのkey値は、EC  blockのkey値である。
【００３０】
本発明の実施例の第７の態様は、コンピュータ実行可能命令を含むコンピュータ読み取り可能媒体を提供し、コンピュータのプロセッサがコンピュータ実行可能命令を実行した場合、コンピュータは、以下の方法、すなわち、記憶されるべきデータセグメントを受信し、ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行するステップであり、記憶されるべきデータセグメントのサイズはZより大きくなく、Zはm個のデータブロックのサイズであり、ターゲットECストライプは、m+k個のターゲットEC  blockを含み、m+k個のターゲットEC  blockは、m個のターゲットデータブロック及びk個のターゲットパリティブロックを含むステップと、m+k個のターゲット記憶ノードを決定するステップであり、m+k個のターゲット記憶ノードは、m+k個のターゲットEC  blockを記憶するように構成され、各ターゲット記憶ノードは、ターゲットEC  blockの１つを記憶するステップと、準備メッセージをm+k個のターゲット記憶ノードに別々に送信するステップであり、各準備メッセージは、各ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含むステップと、m+k個のターゲット記憶ノードのいずれかのターゲット記憶ノードにより送信された応答メッセージを受信するステップであり、応答メッセージは、応答メッセージを現在送信しているターゲット記憶ノードが準備メッセージに従って準備ログを生成したことを示すために使用され、準備ログは、応答メッセージを現在送信しているターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含むステップと、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードの応答メッセージを受信した後に、実行メッセージをm+k個のターゲット記憶ノードに送信するステップであり、実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用されるステップとを実行する。
【００３１】
本発明の実施例の第７の態様を参照して、本発明の実施例の第７の態様の第１の実現方式では、準備メッセージは、ターゲットECストライプのバージョン番号を更に含み、準備ログは、ターゲットECストライプのバージョン番号を更に含み、実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログにあるターゲットEC  block及びターゲットECストライプのバージョン番号を書き込むように命令するために具体的に使用される。
【００３２】
本発明の実施例の第７の態様の第１の実現方式を参照して、本発明の実施例の第７の態様の第２の実現方式では、コンピュータは、以下の方法、すなわち、故障した記憶ノードがm+k個のターゲット記憶ノードに存在することが検出された場合、故障した記憶ノードの故障回復の後に、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じであるか否かを決定するステップであり、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号は、準備ログを生成したターゲット記憶ノードにおける準備ログ内のターゲットECストライプのバージョン番号及び／又は準備ログを有さないターゲット記憶ノードにより記憶されたターゲットECストライプのバージョン番号を含むステップと、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じである場合、実行メッセージを、準備ログを生成したターゲット記憶ノードに送信するステップであり、実行メッセージは、ターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用されるステップとを更に実行する。
【００３３】
本発明の実施例の第７の態様の第２の実現方式を参照して、本発明の実施例の第７の態様の第３の実現方式では、コンピュータは、以下の方法、すなわち、m+k個のターゲット記憶ノード内のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が異なる場合、削除メッセージを、準備ログを生成したターゲット記憶ノードに送信するステップであり、削除メッセージは、ターゲット記憶ノードに対して、準備ログを削除するように命令するために使用されるステップを更に実行する。
【００３４】
本発明の実施例の第８の態様は、コンピュータ実行可能命令を含むコンピュータ読み取り可能媒体を提供し、コンピュータのプロセッサがコンピュータ実行可能命令を実行した場合、コンピュータは、以下の方法、すなわち、故障した記憶ノードの故障回復の後に、故障した記憶ノードにより送信された回復メッセージを受信するステップと、記憶ノードグループ内の故障していない記憶ノードにより記憶されたEC  blockに従った計算を通じて、故障した記憶ノードのN個の喪失したEC  blockを取得するステップであり、Nは正の整数であるステップと、記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信するステップと、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する過程において、プライマリ記憶ノードが第１のEC  blockを生成し、第１のEC  blockが故障した記憶ノードにより記憶されるべきであると決定した場合、第１のEC  blockと同じkey値を有する第２のEC  blockが、故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定するステップと、第２のEC  blockが存在すると決定された場合、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信するステップとを実行する。
【００３５】
本発明の実施例の第８の態様を参照して、本発明の実施例の第８の態様の第１の実現方式では、コンピュータは、以下の方法、すなわち、第nの喪失したEC  blockを故障した記憶ノードに送信するステップであり、1≦n≦Nであるステップと、第nの喪失したEC  blockに対応する応答メッセージを受信するステップであり、応答メッセージは、故障した記憶ノードにより送信され、応答メッセージは、故障した記憶ノードが第nの喪失したEC  blockを成功して記憶したことを示すために使用されるステップと、第nの喪失したEC  blockに関して故障した記憶ノードの応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、第nの喪失したEC  blockを故障した記憶ノードに送信するステップを再実行するステップとを更に実行する。
【００３６】
本発明の実施例の第８の態様の第１の実現方式を参照して、本発明の実施例の第８の態様の第２の実現方式では、現在成功して記憶されていない喪失したEC  blockは、故障した記憶ノードに現在送信されていない喪失したEC  blockと、故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない喪失したEC  blockとを含む。
【００３７】
本発明の実施例の第８の態様又は第８の態様の第１若しくは第２の実現方式を参照して、本発明の実施例の第８の態様の第３の実現方式では、分散型記憶システムの論理ボリュームは、複数の論理パーティションを含み、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複せず、各論理パーティションは、１つのkey値に一意に対応し、各EC  blockが入る論理パーティションのkey値は、EC  blockのkey値である。
【００３８】
本発明の実施例の第９の態様は、記憶ノードを提供し、本発明の実施例の第３の態様若しくは第３の態様の第１〜第３の実現方式のいずれか１つによるデータ記憶装置及び／又は本発明の実施例の第４の態様若しくは第４の態様の第１〜第３の実現方式のいずれか１つによるデータ回復装置を含み、及び／又は、本発明の実施例の第５の態様若しくは第５の態様の第１〜第３の実現方式のいずれか１つによるデータ記憶装置及び／又は本発明の実施例の第６の態様若しくは第６の態様の第１〜第３の実現方式のいずれか１つによるデータ回復装置を含み、及び／又は、本発明の実施例の第７の態様若しくは第７の態様の第１〜第３の実現方式のいずれか１つによるコンピュータ読み取り可能媒体及び／又は本発明の実施例の第８の態様若しくは第８の態様の第１〜第３の実現方式のいずれか１つによるコンピュータ読み取り可能媒体を含む。
【００３９】
本発明の実施例により提供されるデータ記憶方法は、プライマリノードにより、ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行するステップであり、ターゲットECストライプは、m+k個のターゲットEC  blockを含むステップと、記憶ノードグループ内のセカンダリ記憶ノードの中で、m+k個のターゲットEC  blockを記憶するために使用されるm+k個のターゲット記憶ノードを決定するステップと、準備メッセージをターゲット記憶ノードに送信するステップであり、各準備メッセージは、ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを搬送するステップと、ターゲット記憶ノードにより送信された応答メッセージを受信するステップと、全てのターゲット記憶ノードの応答メッセージを受信した後に、ターゲット記憶ノードに対して、準備ログにあるターゲットEC  blockを書き込むように命令するために、実行メッセージを全てのターゲット記憶ノードに送信するステップとを含む。この実施例により提供される方法では、ターゲットECストライプを記憶するために使用されるm+k個のターゲット記憶ノードは、記憶されるべきターゲットEC  blockを直接書き込まないが、まず、記憶されるべきターゲットEC  blockをローカルに生成された準備ログに書き込み、全てのターゲット記憶ノードが準備ログを生成した後に、ターゲットEC  blockを書き込む。全てのターゲット記憶ノードが準備ログを生成した場合にのみ、ターゲット記憶ノードは、ターゲットEC  blockを正確な位置に書き込む動作を実行する。ターゲット記憶ノードによりターゲットEC  blockを書き込む過程において故障が発生した場合であっても、ターゲットEC  blockは、ターゲット記憶ノードの準備ログに記憶されている。このように、ターゲットEC  blockを書き込む動作が成功したか否かに拘わらず、ターゲットEC  blockが喪失されないことが確保され得る。従って、ターゲット記憶ノードの一部がターゲットECストライプのターゲットEC  blockを有するが、ターゲット記憶ノードの他の部分がターゲットECストライプのターゲットEC  blockを有さない場合が回避され、ターゲットECストライプが一貫して記憶されることができ、分散型記憶システムの記憶の一貫性が改善される。
【図面の簡単な説明】
【００４０】
【図１（ａ）】ECストライプの構成図
【図１（ｂ）】本発明の実施例による分散型記憶システムの概略構成図
【図２】本発明の実施例によるデータ記憶方法の実施例のフローチャート
【図３】本発明の実施例によるデータ記憶方法の他の実施例のフローチャート
【図４】本発明の実施例によるデータ記憶方法の他の実施例のフローチャート
【図５】本発明の実施例によるデータ回復方法の実施例のフローチャート
【図６】本発明の実施例によるデータ記憶装置の実施例の構成図
【図７】本発明の実施例によるデータ記憶装置の他の実施例の構成図
【図８】本発明の実施例によるデータ回復装置の他の実施例の構成図
【図９】本発明の実施例によるデータ記憶装置の他の実施例の構成図
【図１０】本発明の実施例によるデータ記憶装置の他の実施例の構成図
【図１１】本発明の実施例によるデータ回復装置の他の実施例の構成図
【発明を実施するための形態】
【００４１】
本発明の実施例は、分散型記憶システムの記憶の一貫性を改善するために使用されるデータ記憶方法を提供する。本発明の実施例は、以下に別々に説明するデータ回復方法、関係する装置及びシステムを更に提供する。
【００４２】
分散型記憶システムは、複数の記憶ノードを含む。上位レイヤデータ配送装置は、記憶されるべきデータを複数のデータブロックに分割し、次に、記憶のために、分散型記憶システムの複数の記憶ノードにデータブロックを配送する。データの分散型記憶は、データ喪失リスクを低減し、分散型記憶システムの信頼性を改善することができる。データ配送装置は、クライアント、サーバ、又は他のデバイスでもよい。
【００４３】
EC技術の原理は、記憶されるべきデータをm個のデータブロックに分割し、k個のパリティブロックを生成するために、冗長アルゴリズムを使用することによりm個のデータブロックにおいてパリティコーディングを実行することである。m個のデータブロック及びk個のパリティブロックは、１つのECストライプを構成する。ECストライプの基本的な構成について、図１（ａ）を参照する。各データブロック又はパリティブロックは、EC  blockと呼ばれてもよく、m個のデータブロック及びk個のパリティブロックは、各ECストライプの全てのEC  blockを構成する。各ECストライプは、k個のEC  blockの喪失を許容可能である。分散型記憶システムがデータ記憶を実行するためにEC技術を使用する場合、データ配送装置は、記憶されるべきデータに従って複数のECストライプを生成し、記憶のために、分散型記憶システムのm+k個の記憶ノードに各ECストライプのm+k個のEC  blockを配送する。このように、分散型記憶システム内のノードが故障した場合、故障したノードに記憶されたEC  blockは、故障していないノードにおけるEC  blockに従って回復することができる。ECストライプを記憶するm+k個の記憶ノード内のk個より多くの記憶ノードが故障しない限り、ECストライプのデータは、データ配送装置により完全に読み取り又は書き込み可能である。従って、データを記憶するためにEC技術を使用する分散型記憶システムは、非常に高い信頼性を有する。
【００４４】
分散型記憶システムに記憶されたECストライプは、データ配送装置により読み取り又は上書き可能である。ECストライプを読み取る場合、データ配送装置は、ECストライプからデータを記憶するために使用されるデータブロックを読み取る必要があるだけである点に留意すべきである。しかし、ECストライプが上書きされる場合、例えば、ECストライプのm個のデータブロック内の第iのデータブロックが上書きされる場合、ECストライプの他のデータブロックが変更される必要はないが、ECストライプのパリティブロックを再生成することが必要である。
【００４５】
特に、本発明の実施例では、分散型記憶システム内の記憶ノードがグループ化される。具体的に、記憶ノードは、複数の記憶ノードグループにグループ化され、各記憶ノードグループに含まれる記憶ノードの量は、m+k未満ではなく、１つのプライマリ記憶ノード（以下では略してプライマリノード）が各記憶ノードグループ内で指定される。他の記憶ノードは、セカンダリ記憶ノード（以下では略してセカンダリノード）である。m及びkは共に正の整数である。異なる記憶ノードグループの記憶ノードは、繰り返し可能でもよい。例えば、記憶ノードグループ1内のプライマリノードは、記憶ノードグループ2内のセカンダリノードでもよい。図１（ｂ）は、本発明の実施例による分散型記憶システムの概略構成図である。図１（ｂ）は、分散型記憶システムの構成のみを示すために使用され、分散型記憶システム内の記憶ノードはまた、他の接続構成でもよい。
【００４６】
前述の分散型記憶システムに基づいて、本発明の実施例は、分散型記憶システムのいずれかの記憶ノードグループ内のプライマリノードに適用されるデータ記憶方法を提供する。図２を参照すると、この方法の基本的な手順は以下を含む。
【００４７】
201.ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行する。
【００４８】
プライマリノードは、データ配送装置により配送された記憶されるべきデータセグメントを受信し、記憶されるべきデータセグメントのサイズはZより大きくなく、Zはm個のデータブロックのサイズである。コーディング後のターゲットECストライプは、m+k個のターゲットEC  blockを含み、これらは、m個のターゲットデータブロック及びk個のターゲットパリティブロックを具体的に含む。
【００４９】
202.m+k個のターゲット記憶ノードを決定する。
【００５０】
m+k個のターゲットEC  blockを生成した後に、プライマリノードは、プライマリノードが属する記憶ノードグループにおいて、m+k個のターゲットEC  blockを記憶するために使用されるm+k個のターゲット記憶ノードを決定する。m+k個のターゲット記憶ノードは、プライマリノード及びm+k-1個のセカンダリノードを含んでもよく、m+k個のセカンダリノードを含んでもよい。各ターゲット記憶ノードは、最大で１つのEC  blockのみを記憶する。
【００５１】
特に、記憶ノードグループがm+k個の記憶ノード（プライマリノード及びm+k-1個のセカンダリノード）のみを含む場合、プライマリノードは、m+k個の記憶ノードがターゲット記憶ノードであると直接決定する。
【００５２】
203.準備メッセージをターゲット記憶ノードに送信する。
【００５３】
ターゲット記憶ノードを決定した後に、プライマリノードは、準備メッセージをm+k個のターゲット記憶ノードに別々に送信し、各準備メッセージは、各ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを搬送する。
【００５４】
セカンダリノードであるターゲット記憶ノードでは、プライマリノードによりターゲット記憶ノードに送信された準備メッセージは、ネットワークを通じて送信されるノード間メッセージである。しかし、プライマリノードもまたターゲット記憶ノードの１つでもよいことが、ステップ202において言及された。プライマリノードがターゲット記憶ノードである場合、このステップにおいて、プライマリノードもまた、準備メッセージをプライマリノード自体に送信するが、プライマリノード自体に送信される準備メッセージは、ネットワークを通過しないノード内メッセージである。
【００５５】
204.ターゲット記憶ノードにより送信された応答メッセージを受信する。
【００５６】
プライマリノードにより送信された準備メッセージを受信した後に、ターゲット記憶ノードは、準備メッセージに従って準備ログを生成し、準備ログは、ターゲット記憶ノードにローカルに記憶される。準備ログの目的は、主に、ターゲット記憶ノードにより記憶されるべきEC  blockを一時的に記憶するためのものである。従って、準備ログの記憶位置は、ターゲットEC  blockの最終的な記憶位置ではない。実際の適用では、準備ログは、ログ又はデータブロックでもよく、他の形式でもよい。これは、この実施例では限定されないが、準備ログは、ターゲット記憶ノードにより受信された準備メッセージ内のターゲットEC  blockを含む必要がある。
【００５７】
準備ログを生成した後に、ターゲット記憶ノードは、応答メッセージを現在送信しているターゲットセカンダリ記憶ノードが準備メッセージに従って準備ログを生成したことをプライマリノードに通知するために使用される応答メッセージをプライマリノードに送信する。
【００５８】
セカンダリノードとしてのターゲット記憶ノードにより送信された応答メッセージは、ネットワークを通じて送信されるノード間メッセージである。しかし、プライマリノードもまたターゲット記憶ノードの１つである場合、このステップにおいて、プライマリノードもまた、応答メッセージをプライマリノード自体に送信するが、プライマリノード自体に送信される応答メッセージは、ネットワークを通過しないノード内メッセージである。
【００５９】
プライマリノードは、m+k個のターゲット記憶ノード内のいずれか１つ以上のターゲット記憶ノードにより送信された応答メッセージを受信し、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにより送信された応答メッセージを受信した後に、ステップ205を実行する。
【００６０】
205.実行メッセージをターゲット記憶ノードに送信する。
【００６１】
全てのターゲット記憶ノードにより送信された応答メッセージを受信した後に、プライマリノードは、m+k個のターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために、実行メッセージをm+k個のターゲット記憶ノードに送信する。実行メッセージを受信した後に、m+k個のターゲット記憶ノードは、準備ログの記憶位置から準備ログを読み取り、準備ログに含まれるターゲットEC  blockを、ターゲットEC  blockを記憶するために使用されるターゲット記憶ノードの位置に書き込む。
【００６２】
セカンダリノードであるターゲット記憶ノードでは、プライマリノードによりターゲット記憶ノードに送信された実行メッセージは、ネットワークを通じて送信されるノード間メッセージである。しかし、プライマリノードもまたターゲット記憶ノードの１つでもよいことが、ステップ202において言及された。プライマリノードがターゲット記憶ノードである場合、このステップにおいて、プライマリノードもまた、実行メッセージをプライマリノード自体に送信するが、プライマリノード自体に送信される実行メッセージは、ネットワークを通過しないノード内メッセージである。
【００６３】
この実施例は、データ記憶方法を提供し、ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行するステップであり、ターゲットECストライプは、m+k個のターゲットEC  blockを含むステップと、記憶ノードグループ内のセカンダリ記憶ノードの中で、m+k個のターゲットEC  blockを記憶するために使用されるm+k個のターゲット記憶ノードを決定するステップと、準備メッセージをターゲット記憶ノードに送信するステップであり、準備メッセージは、ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを搬送するステップと、ターゲット記憶ノードにより送信された応答メッセージを受信するステップと、全てのターゲット記憶ノードの応答メッセージを受信した後に、ターゲット記憶ノードに対して、準備ログにあるターゲットEC  blockを書き込むように命令するために、実行メッセージを全てのターゲット記憶ノードに送信するステップとを含む。この実施例により提供される方法では、ターゲットECストライプを記憶するために使用されるm+k個のターゲット記憶ノードは、記憶されるべきターゲットEC  blockを直接書き込まないが、まず、記憶されるべきターゲットEC  blockをローカルに生成された準備ログに書き込み、全てのターゲット記憶ノードが準備ログを生成した後に、ターゲットEC  blockを書き込む。全てのターゲット記憶ノードが準備ログを生成した場合にのみ、ターゲット記憶ノードは、ターゲットEC  blockを正確な位置に書き込む動作を実行する。ターゲット記憶ノードによりターゲットEC  blockを書き込む過程において故障が発生した場合であっても、ターゲットEC  blockは、ターゲット記憶ノードの準備ログに記憶されている。このように、ターゲットEC  blockを書き込む動作が成功したか否かに拘わらず、ターゲットEC  blockが喪失されないことが確保され得る。従って、ターゲット記憶ノードの一部がターゲットECストライプのターゲットEC  blockを有するが、ターゲット記憶ノードの他の部分がターゲットECストライプのターゲットEC  blockを有さない場合が回避され、ターゲットECストライプが一貫して記憶されることができ、分散型記憶システムの記憶の一貫性が改善される。
【００６４】
好ましくは、本発明の更に他の実施例では、ターゲット記憶ノードが故障したときに、ターゲット記憶ノードにより生成された準備ログが喪失されないことを確保するために、ターゲット記憶ノードは、準備ログを停電保護媒体に書き込んでもよい。
【００６５】
ECストライプのkey値の概念が、本発明のこの実施例に導入される。具体的に、ECストライプのkey値は、ECストライプのデータ部のアドレス範囲に対応し、データ部の同じアドレス範囲を有するECストライプのkey値は同じであるが、データ部の異なるアドレス範囲を有するECストライプのkey値は異なる。key値は、ECストライプの各EC  blockで搬送されてもよい。
【００６６】
ECストライプのkey値は、データ配送装置によりプライマリノードに配送されたデータセグメントから生じてもよい。例えば、分散型記憶システムの論理ボリュームは、複数の論理パーティションに分割されてもよく、各論理パーティションは、k個のデータブロックのサイズである。データ配送装置は、記憶されるべきデータを複数のデータセグメントに分割し、具体的に、１つの論理パーティションに入るデータを１つのデータセグメントとして使用する。分散型記憶システムの各論理パーティションに一意のkey値が設定され、各データセグメントが入る論理パーティションに対応するkey値は、データセグメントに対応するkey値である。データ配送装置は、key値をデータセグメントに追加し、プライマリノードにデータセグメントを配送し、データセグメントに従ってプライマリノードにより生成されたECストライプは、データセグメントと同じkey値を有する。
【００６７】
key値はデータのアドレス範囲を識別するために使用されてもよいことが、前述の説明から分かる。更に、ターゲット記憶ノードが実行メッセージを受信した後に、ターゲット記憶ノードは、準備ログの記憶位置から準備ログを読み取り、準備ログに含まれるターゲットEC  blockを、ターゲットEC  blockを記憶するために使用されるターゲット記憶ノードの位置に書き込むことが、ステップ205において言及された。具体的に、ターゲット記憶ノードが準備ログにターゲットEC  blockで搬送されたkey値と同じkey値を有するEC  blockを記憶していない場合、ターゲット記憶ノードは、新たな記憶位置をターゲットEC  blockに割り当てる。ターゲット記憶ノードが準備ログにターゲットEC  blockで搬送されたkey値と同じkey値を有するEC  blockを記憶している場合、これは、古いデータがターゲットEC  blockのアドレス範囲に書き込まれていることを示し、ターゲット記憶ノードは、古いデータを新たなデータで上書きするために、ターゲットEC  blockを、ターゲットEC  blockのkey値と同じkey値を有するEC  blockを記憶するために元々使用された位置に書き込む。新たなデータが古いデータを上書きするため、各記憶ノードにおいて記憶された複数のEC  blockのkey値が互いに異なることが認識され得る。
【００６８】
ECストライプのバージョン番号の概念が、本発明のこの実施例に更に導入される。具体的に、バージョン番号は、同じkey値を有する２つのECストライプの新しい程度又は古い程度を識別するために使用される。書き込まれた新たなECストライプは古いECストライプを上書きする。例えば、ある時点において、プライマリノードは、ECストライプを生成し、データ部のアドレス範囲は4M〜8Mであり、key値は2であり、ECストライプのバージョン番号は1であり、プライマリノードは、記憶のためにバージョン番号1を有するECストライプを6個の記憶ノードに割り当てる。１時間後に、プライマリノードは、他のECストライプを再び生成し、データ部のアドレス範囲は4M〜8Mであり、key値は2であり、ECストライプのバージョン番号は2である。プライマリノードは、バージョン番号2を有するECストライプがバージョン番号1を有するECストライプを上書きするように、バージョン番号2を有するECストライプを、バージョン番号1を有するECストライプを記憶するために元々使用された位置に書き込む。ターゲットECストライプのバージョン番号は、ターゲットECストライプの各ターゲットEC  blockで搬送されてもよい。
【００６９】
本発明のこの実施例では、プライマリノードによりターゲット記憶ノードに送信された準備メッセージは、ターゲットECストライプのバージョン番号を更に含み、更に、準備メッセージに従ってターゲット記憶ノードにより生成された準備ログもまた、ターゲットECストライプのバージョン番号を含む。実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログにあるターゲットEC  block及びターゲットECストライプのバージョン番号を書き込むように具体的に命令する。バージョン番号の概念が導入された後に、ECストライプの記憶が一貫しているか否かは、バージョン番号に従って決定されてもよい。ターゲットECストライプを記憶するターゲット記憶ノードに書き込まれたターゲットECストライプのバージョン番号が同じである場合、これは、ターゲットECストライプの記憶が一貫していることを示す。ターゲットECストライプを記憶するターゲット記憶ノードに書き込まれたターゲットECストライプのバージョン番号が異なる場合、これは、ターゲットECストライプの記憶が一貫していないことを示す。
【００７０】
分散型記憶システムの記憶ノードグループ内の記憶ノードはいずれかの時点で故障する可能性があるため、記憶ノードグループは維持管理される必要がある。記憶ノードグループは、複数の方式で維持管理されてもよく、例えば、更なるノードグループ管理モジュールが配置されてもよい。ノードグループ管理モジュールは、データ配送装置に配置されてもよく、記憶ノードに配置されてもよい。これは、本発明の実施例では限定されない。ノードグループ管理モジュールは、各記憶ノードグループを維持管理することを担う。具体的に、ノードグループ管理モジュールは、各記憶ノードグループに含まれる記憶ノードについての情報を収集し、プライマリノードを決定し、ハートビート接続を使用することにより各記憶ノードの状態をリアルタイムで監視することを担ってもよい。記憶ノードの状態が変化した場合、又はノードグループ内のプライマリノードが変化した場合、ノードグループ管理モジュールは、収集された情報を更新する必要がある。ノードグループ管理モジュールは、各データ配送装置及び記憶ノードが各ノードグループについての情報を習得することができるように、記録するために、収集された情報を各記憶ノードに通知する。ノードグループ管理モジュールにより収集された情報は、簡単に表１の形式で表されてもよい。
【表１】
2018022530.tif 000003
【００７１】
表１は、ノードグループ管理モジュールにより収集された情報の単なる表現形式である。ノードグループ管理モジュールは、他の形式で収集された情報を表してもよい。これは、本発明の実施例では限定されない。
【００７２】
ステップ202においてターゲット記憶ノードを決定した後に、故障した記憶ノードがm+k個のターゲット記憶ノードに存在することを、プライマリノードがノードグループ管理モジュールを使用することにより検出した場合、プライマリノードは、データ記憶手順を中断し、故障した記憶ノードを回復させる必要がある。故障した記憶ノードが回復した後に、プライマリノードは、データ記憶手順を続ける必要がある。詳細については、ステップ1〜3を参照する。
【００７３】
ステップ1：m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じであるか否かを決定する。ターゲット記憶ノードが準備ログを生成している場合、ターゲット記憶ノードにおけるターゲットECストライプのバージョン番号は、準備ログ内のターゲットECストライプのバージョン番号でもよい。ターゲット記憶ノードが準備ログを有さない場合、ターゲット記憶ノードにおけるターゲットECストライプのバージョン番号は、ターゲット記憶ノードにより記憶されているターゲットECストライプのバージョン番号でもよい。
【００７４】
m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じである場合、これは、準備ログを有さないターゲット記憶ノードが記憶されるべきターゲットEC  blockを書き込む動作を完了したことを示し、ステップ2が実行される。
【００７５】
m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が異なる場合、これは、準備ログを有さないターゲット記憶ノードが準備ログを生成しておらず、更に、記憶されるべきターゲットEC  blockを書き込んでないことを示し、ステップ3が実行される。
【００７６】
ステップ2：実行メッセージを、準備ログを生成したターゲット記憶ノードに送信し、実行メッセージは、ターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用される。実行メッセージを受信した後に、準備ログを生成したターゲット記憶ノードは、ターゲットECストライプがターゲット記憶ノードに一貫して記憶されるように、準備ログに含まれるターゲットEC  blockを書き込む。
【００７７】
ステップ3：削除メッセージを、準備ログを生成したターゲット記憶ノードに送信し、削除メッセージは、ターゲット記憶ノードに対して、準備ログを削除するように命令するために使用される。削除メッセージを受信した後に、準備ログを生成したターゲット記憶ノードは、ターゲットECストライプのターゲットEC  blockがいずれのターゲット記憶ノードにも書き込まれないように、ローカルに記憶された準備ログを削除する。
【００７８】
特に、故障した記憶ノードがプライマリノードである場合、ノードグループ管理モジュールは、セカンダリノードを新たなプライマリノードとして指定し、次に、ステップ1〜3を再実行してもよい。
【００７９】
前述の実施例では、本発明のこの実施例により提供されるデータ記憶方法は、プライマリノードの観点から記載された。以下の実施例では、本発明のこの実施例により提供されるデータ記憶方法は、セカンダリノードの観点から説明される。図３を参照すると、この方法の基本的な手順は以下を含む。
【００８０】
301.プライマリノードにより送信された準備メッセージを受信する。
【００８１】
プライマリノードは、ターゲットECストライプを生成し、ターゲットECストライプを記憶するために使用されるm+k個のターゲット記憶ノードを決定する。本発明のこの実施例におけるセカンダリノードは、ターゲット記憶ノード内のノードである。
【００８２】
セカンダリノードは、プライマリノードにより送信された準備メッセージを受信し、準備メッセージは、セカンダリノードがターゲットEC  blockを記憶するために使用されるターゲット記憶ノードであるとプライマリノードが決定したときに送信され、準備メッセージは、セカンダリノードにより記憶されるべきターゲットEC  blockを含む。
【００８３】
302.準備メッセージに従って準備ログを生成する。
【００８４】
プライマリノードにより送信された準備メッセージを受信した後に、セカンダリノードは、準備メッセージに従って準備ログを生成し、準備ログは、セカンダリノードにローカルに記憶される。準備ログの目的は、主に、セカンダリノードにより記憶されるべきEC  blockを一時的に記憶するためのものである。従って、準備ログの記憶位置は、ターゲットEC  blockの最終的な記憶位置ではない。実際の適用では、準備ログは、ログ又はデータブロックでもよく、他の形式でもよい。これは、この実施例では限定されないが、準備ログは、準備メッセージで搬送されたターゲットEC  blockを含む必要がある。準備ログは、セカンダリ記憶ノードにより記憶されるべきターゲットEC  blockを含む。
【００８５】
303.応答メッセージをプライマリノードに送信する。
【００８６】
準備ログを生成した後に、セカンダリノードは、応答メッセージをプライマリノードに送信し、応答メッセージは、セカンダリノードが準備メッセージに従って準備ログを生成したことを示すために使用される。
【００８７】
記憶ノードグループ内の他のターゲット記憶ノードもまた、応答メッセージをプライマリノードに送信することが認識され得る。
【００８８】
304.プライマリノードにより送信された実行メッセージを受信する。
【００８９】
セカンダリノードは、プライマリノードにより送信された実行メッセージを受信し、実行メッセージは、プライマリノードが全てのターゲット記憶ノードの応答メッセージを受信した後に送信され、実行メッセージは、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用される。
【００９０】
305.準備ログに含まれるターゲットEC  blockを書き込む。
【００９１】
実行メッセージを受信した後に、セカンダリノードは、準備ログで搬送されたターゲットEC  blockを書き込む。
【００９２】
この実施例では、本発明のこの実施例により提供されるデータ記憶方法は、セカンダリノードの観点から記載された。セカンダリノードは、プライマリノードにより送信された準備メッセージを受信し、準備メッセージに従って準備ログを生成し、応答メッセージをプライマリノードに送信し、プライマリノードにより送信された実行メッセージを受信し、実行メッセージに従って準備ログに含まれるターゲットEC  blockを書き込む。この実施例により提供される方法では、セカンダリノードは、記憶されるべきターゲットEC  blockを直接書き込まないが、まず、記憶されるべきターゲットEC  blockをローカルに生成された準備ログに書き込み、プライマリノードにより送信された実行メッセージを受信した後に、ターゲットEC  blockを書き込む。従って、セカンダリノードがターゲットEC  blockを書き込む過程において故障した場合であっても、ターゲットEC  blockは、セカンダリノードの準備ログに記憶されている。このように、ターゲットEC  blockを書き込む動作が成功したか否かに拘わらず、ターゲットEC  blockが喪失されないことが確保され得る。プライマリノードにより決定された全てのターゲット記憶ノードにおけるターゲットEC  blockが全く喪失されない場合、ターゲット記憶ノードの一部がターゲットECストライプのターゲットEC  blockを有するが、ターゲット記憶ノードの他の部分がターゲットECストライプのターゲットEC  blockを有さない場合が回避され、ターゲットECストライプが一貫して記憶されることができ、分散型記憶システムの記憶の一貫性が改善される。
【００９３】
好ましくは、本発明の更に他の実施例では、プライマリノードにより送信されてセカンダリノードにより受信された準備メッセージは、プライマリノードにより生成されたターゲットECストライプのバージョン番号を更に含み、更に、準備メッセージに従ってセカンダリノードにより生成された準備ログもまた、ターゲットECストライプのバージョン番号を含む。セカンダリノードはまた、実行メッセージに従ってターゲットEC  blockを書き込むときにターゲットECストライプのバージョン番号を書き込む。
【００９４】
好ましくは、本発明の更に他の実施例では、セカンダリノードが故障したときに、生成された準備ログが喪失されないことを確保するために、セカンダリノードは、準備ログを停電保護媒体に書き込んでもよい。
【００９５】
図１に示す実施例では、ターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が異なるとプライマリノードが決定した場合、プライマリノードは、削除メッセージを、準備ログを生成したターゲット記憶ノードに送信することが、ステップ3において言及された。従って、好ましくは、本発明の更に他の実施例では、ステップ304の前に、セカンダリノードは、プライマリノードにより送信された削除メッセージを更に受信してもよい。削除メッセージを受信した後に、セカンダリノードは、ローカルに記憶された準備ログを削除する。
【００９６】
前述の実施例を理解するのを容易にするために、以下では、説明のための例として前述の実施例の具体的な適用シナリオを使用する。具体的な手順について、図４を参照する。
【００９７】
分散型記憶システムは、ECストライプの形式でデータを記憶し、各ECストライプは、４つのデータブロック及び２つのパリティブロックを含む。分散型記憶システムは、100個の記憶ノードグループを含む。記憶ノードグループ1は6個の記憶ノードを含み、プライマリノードはノードAであり、セカンダリノードはノードB、ノードC、ノードD、ノードE及びノードFである。
【００９８】
401.ターゲットECストライプを生成する。ノードAは、データ配送装置により配送されたデータセグメントを受信し、ターゲットECストライプを取得するために、データセグメントにおいてECコーディングを実行する。ターゲットECストライプのバージョン番号は3であり、ターゲットECストライプのデータ部のアドレス範囲は4M〜8Mである。
【００９９】
402.ターゲット記憶ノードを決定する。ノードAは、ターゲットECストライプの6個のEC  blockを記憶するために使用されるターゲット記憶ノードがノードA〜Fであると決定する。
【０１００】
403.準備メッセージを送信する。ノードAは、準備メッセージをノードA〜Fに送信し、各ノードに送信される準備メッセージは、ターゲットEC  blockと、ターゲットECストライプのバージョン番号とを搬送し、ノードA〜Fは、準備メッセージを受信する。
【０１０１】
404.準備ログを生成する。ノードA〜Fは、準備ログを生成し、準備ログは、記憶されるべきターゲットEC  blockと、ターゲットECストライプのバージョン番号とを含む。
【０１０２】
405.応答メッセージを送信する。ノードA〜Fは、準備ログを生成した後に、応答メッセージをノードAに送信する。ノードAは、ノードA〜Fにより送信された応答メッセージを受信する。
【０１０３】
406.実行メッセージを送信する。ノードA〜Fにより送信された応答メッセージを受信した後に、ノードAは、実行メッセージをノードA〜Fに送信し、ノードA〜Fは、実行メッセージを受信する。
【０１０４】
407.ノードA〜Eは、準備ログにあるターゲットEC  block及びバージョン番号を書き込み、ノードFは故障している。ノードAが実行メッセージを送信した後に、ノードA〜Eは、準備ログにあるターゲットEC  block及びバージョン番号を書き込み、ノードFは、実行メッセージを受信する過程において故障している。
【０１０５】
408.ターゲットECストライプのバージョン番号が同じであると決定する。ノードAは、ノードFが故障していると決定し、従って、ノードFが故障から回復した後に、ノードA〜FにおけるターゲットECストライプのバージョン番号が同じであるか否かを決定する。ノードA〜Eは準備ログを有さず、記憶されたターゲットEC  blockで搬送されたターゲットECストライプのバージョン番号は3である。ノードFは準備ログを有し、準備ログ内のターゲットEC  blockで搬送されたターゲットECストライプのバージョン番号は3である。
【０１０６】
409.ノードAは、実行メッセージをノードFに送信する。ノードFは、実行メッセージを受信する。
【０１０７】
410.ノードFは、準備ログにあるターゲットEC  block及びバージョン番号を書き込む。
【０１０８】
ターゲット記憶ノードが故障している場合、データ記憶手順は、故障した記憶ノードの故障回復の後に実行される必要があることが、前述の実施例において言及された。しかし、故障は、故障した記憶ノードにおいてデータの喪失を引き起こす可能性がある。この場合、プライマリノードは、記憶ノードグループ内の他の記憶ノードにより記憶されたEC  blockに従ったEC技術を使用することによる計算を通じて、故障した記憶ノードの喪失したEC  blockを取得し、次に、計算を通じて取得されたEC  blockを回復した故障した記憶ノードに対して同期させる必要がある。従って、本発明の実施例は、以下を具体的に含むデータ回復方法を提供する。
【０１０９】
501.故障した記憶ノードにより送信された回復メッセージを受信する。
【０１１０】
故障した記憶ノードは、分散型記憶システム内のいずれかの記憶ノードグループに存在する。故障した記憶ノードが回復した後に、故障した記憶ノードは、回復メッセージをプライマリノードに送信し、回復メッセージは、故障した記憶ノードが回復したことを示すために使用される。プライマリノードは、回復メッセージを受信する。
【０１１１】
502.計算を通じて、故障した記憶ノードのN個の喪失したEC  blockを取得する。
【０１１２】
前述のように、分散型記憶システムは、EC技術を使用することにより、ECストライプの形式でデータを記憶し、１つのECストライプは、記憶ノードグループ内のm+k個の記憶ノードにそれぞれ記憶されたm+k個のEC  blockを含み、１つのECストライプは、k個のEC  blockの喪失を許容可能である。ECストライプAを一例として使用すると、ECストライプAのEC  blockが故障した記憶ノードにおいて喪失した場合、プライマリノードは、故障していないノードにより記憶されたECストライプAの他のEC  blockに従ったEC技術を使用することによる計算を通じて、故障した記憶ノードの喪失したEC  blockを取得してもよい。
【０１１３】
従って、この実施例では、回復メッセージを受信した後に、プライマリノードは、プライマリノードが属する記憶ノードグループ内の故障していない記憶ノード（すなわち、故障した記憶ノードを除く記憶ノード）により記憶されたEC  blockに従った計算を通じて、故障した記憶ノードのN個の喪失したEC  blockを取得する。
【０１１４】
前述のように、各記憶ノードに記憶された複数のEC  blockのkey値は互いに異なり、従って、故障した記憶ノードのN個の喪失したEC  blockは、異なるkey値を搬送するべきである。
【０１１５】
503.記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する。N個の喪失したEC  blockを故障した記憶ノードに順次に送信する過程において、プライマリノードが第１のEC  blockを生成し、第１のEC  blockが故障した記憶ノードにより記憶されるべきであると決定した場合、第１のEC  blockと同じkey値を有する第２のEC  blockが、故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定する。決定結果が肯定的である場合、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信する。
【０１１６】
計算を通じて故障した記憶ノードのN個の喪失したEC  blockを取得した後に、プライマリノードは、N個の喪失したEC  blockを送信キューに配置し、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する。
【０１１７】
N個の喪失したEC  blockを故障した記憶ノードに順次に送信する過程において、プライマリノードが新たなECストライプを再び生成し、新たなECストライプ内の第１のEC  blockが故障した記憶ノードにより記憶されるべきであると決定した場合、プライマリノードは、第２のEC  blockが故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定し、第２のEC  blockは第１のEC  blockと同じkey値を有する。
【０１１８】
プライマリノードが第１のEC  blockを生成した後に、記憶を実行するために、第１のEC  blockを故障した記憶ノードに直接送信したが、第２のEC  blockが故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在する場合、プライマリノードがN個の喪失したEC  blockを故障した記憶ノードに順次に送信する動作を実行し続けるときに、第２のEC  blockが第１のEC  blockのデータを上書きする場合が引き起こされる可能性があることが認識され得る。新たな第１のEC  blockを古い第２のEC  blockで置換することを回避するために、この実施例では、第２のEC  blockが故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するとプライマリノードが決定した場合、プライマリノードは、送信キューにおいて第２のEC  blockの後に第１のEC  blockを挿入する、すなわち、プライマリノードは、第１のEC  blockを故障した記憶ノードに最初に送信しないが、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信する。
【０１１９】
この実施例は、データ回復方法を提供し、故障した記憶ノードが回復した後に、プライマリノードは、計算を通じて故障した記憶ノードのN個の喪失したEC  blockを取得し、記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する。N個の喪失したEC  blockを故障した記憶ノードに順次に送信する過程において、プライマリノードが新たなECストライプを再び生成し、新たなECストライプ内の第１のEC  blockが故障した記憶ノードにより記憶されるべきであると決定した場合、プライマリノードは、第２のEC  blockが故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定し、第２のEC  blockは第１のEC  blockと同じkey値を有する。第２のEC  blockが存在すると決定された場合、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、プライマリノードは、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信する。この方法は、新たなデータを古いデータで置換することを回避し、回復の後に故障した記憶ノードに記憶されたEC  blockが最新のバージョンであることを確保することができる。
【０１２０】
ステップ503において、プライマリノードは、記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する。具体的に、プライマリノードは、まず、N個の喪失したEC  block内の第１の喪失したEC  blockを故障した記憶ノードに送信し、第nの喪失したEC  blockを故障した記憶ノードに送信した後に、プライマリノードは、第nの喪失したEC  blockに対応する応答メッセージを受信し、応答メッセージは、故障した記憶ノードにより送信され、故障した記憶ノードが第nの喪失したEC  blockを成功して記憶したことを示すために使用される。第nの喪失したEC  blockに対応する応答メッセージを受信した後に、プライマリノードは、次の喪失したEC  blockを故障した記憶ノードに再び送信し、1≦n≦Nである。プライマリノードがN個の喪失したEC  blockを故障した記憶ノードに順次に送信することは、以下のステップにまとめられてもよい。
【０１２１】
ステップ1：プライマリノードは、第nの喪失したEC  blockを故障した記憶ノードに送信する。この手順が開始するときのnの初期値は1であり、nはNより大きくない。
【０１２２】
ステップ2：第nの喪失したEC  blockを故障した記憶ノードに送信した後に、プライマリノードは、第nの喪失したEC  blockに対応する応答メッセージを受信する。
【０１２３】
ステップ3：第nの喪失したEC  blockに対応する応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、ステップ1を再実行する。
【０１２４】
プライマリノードは、ステップ1〜ステップ3を循環的に実行することにより、記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに送信してもよい。
【０１２５】
故障した記憶ノードが喪失したEC  blockを成功して記憶したことを示すために応答メッセージが使用される場合、ステップ503において、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、プライマリノードが、記憶のために、第１のEC  blockを故障した記憶ノードに送信することは、具体的に、第２のEC  blockを故障した記憶ノードに送信し、第２のEC  blockに関して故障した記憶ノードにより送信された応答メッセージを受信した後に、プライマリノードが、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信することであるべきである。
【０１２６】
ステップ503において、プライマリノードは、第２のEC  blockがN個の喪失したEC  blockの中の故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定する必要がある。故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockは、プライマリノードにより故障した記憶ノードに現在送信されていない喪失したEC  blockと、故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない喪失したEC  blockとを含むべきであることが認識され得る。
【０１２７】
前述のように、分散型記憶システムの論理ボリュームは、複数の論理パーティションに分割されてもよく、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複しない。分散型記憶システムの各論理パーティションに一意のkey値が設定され、各データセグメントが入る論理パーティションに対応するkey値は、データセグメントに対応するkey値である。データ配送装置は、key値をデータセグメントに追加し、プライマリノードにデータセグメントを配送し、ECストライプのkey値は、ECストライプのEC  blockで搬送されるが、データセグメントに従ってプライマリノードにより生成されたECストライプは、データセグメントと同じkey値を有する。従って、各EC  blockが入る論理パーティションのkey値は、EC  blockのkey値であることが認識され得る。
【０１２８】
前述の実施例を理解するのを容易にするために、以下では、説明のために前述の実施例の具体的な適用シナリオを使用する。
【０１２９】
分散型記憶システムは、ECストライプの形式でデータを記憶し、各ECストライプは、４つのデータブロック及び２つのパリティブロックを含む。分散型記憶システムは、100個の記憶ノードグループを含む。記憶ノードグループ1は6個の記憶ノードを含み、プライマリノードはノードAであり、セカンダリノードはノードB、ノードC、ノードD、ノードE及びノードFである。ある時点において、ノードFが故障する。３時間後に、ノードFは回復するが、データが喪失する。
【０１３０】
ノードFは、ノードFが故障から回復したことをノードAに通知するために、回復メッセージをノードAに送信する。ノードAは、回復メッセージを受信する。
【０１３１】
回復メッセージを受信した後に、ノードAは、ノードA、ノードB、ノードC、ノードD及びノードEにより記憶された全てのEC  blockに従った計算を通じて、ノードFの200個の喪失したEC  blockを取得する。
【０１３２】
プライマリノードは、喪失したEC  blockをノードFに毎回送信し、喪失したEC  blockに関してノードFから応答メッセージを受信した後に、次の喪失したEC  blockを送信する。このように、200個の喪失したEC  blockは、ノードFに順次に送信される。
【０１３３】
第151の喪失したEC  blockがノードFに送信された後に、ノードAは、データ配送装置により配送されたデータセグメントに従って新たなECストライプを生成し、新たなECストライプ内の第１のEC  blockがノードFにより記憶されるべきであると決定し、第１のEC  blockのkey値は25である。
【０１３４】
ノードAは、第151の喪失したEC  blockに関してノードFにより送信された応答メッセージを受信していないため、ノードAは、key値25を有する第２のEC  blockが第151〜第200の喪失したEC  blockに存在するか否かを決定する。ノードAは、第190の喪失したEC  blockのkey値が25であると決定する。
【０１３５】
ノードAは、第１のEC  blockをノードFに一時的に送信せず、第190の喪失したEC  blockをノードFに送信して、第190の喪失したEC  blockに関してノードFにより送信された応答メッセージを受信した後に、第１のEC  blockをノードFに送信する。
【０１３６】
ノードAは、全ての200個の喪失したEC  blockをノードFに送信し、ノードFは、データ回復を完了する。
【０１３７】
前述の実施例は、本発明の実施例により提供されるデータ記憶又はデータ回復方法を提供する。前述の方法を実現するための対応する装置は、以下に提供される。
【０１３８】
本発明の実施例は、データ記憶装置を提供し、データ記憶装置は、いずれかの記憶ノードグループ内のプライマリ記憶ノードに配置され、記憶されるべきデータセグメントを受信し、ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行するように構成されたデータコーディングモジュール601であり、記憶されるべきデータセグメントのサイズはZより大きくなく、Zはm個のデータブロックのサイズであり、ターゲットECストライプは、m個のターゲットデータブロック及びk個のターゲットパリティブロックを具体的に含むm+k個のターゲットEC  blockを含むデータコーディングモジュール601と、記憶ノードグループ内で、m+k個のターゲットEC  blockを記憶するために使用されるm+k個のターゲット記憶ノードを決定するように構成されたノード決定モジュール602であり、各ターゲット記憶ノードは、１つのターゲットEC  blockを記憶するように構成されるノード決定モジュール602と、準備メッセージをm+k個のターゲット記憶ノードに別々に送信するように構成されたメッセージ送信モジュール603であり、各準備メッセージは、各ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含むメッセージ送信モジュール603と、m+k個のターゲット記憶ノードのいずれかのターゲット記憶ノードにより送信された応答メッセージを受信するように構成されたメッセージ受信モジュール604であり、応答メッセージは、応答メッセージを現在送信しているターゲットセカンダリ記憶ノードが準備メッセージに従って準備ログを生成したことを示すために使用され、準備ログは、応答メッセージを現在送信しているターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含むメッセージ受信モジュール604とを具体的に含み、メッセージ送信モジュール603は、メッセージ受信モジュール604がm+k個のターゲット記憶ノード内の全てのターゲット記憶ノードの応答メッセージを受信した後に、実行メッセージをm+k個のターゲット記憶ノードに送信するように更に構成され、実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用される。
【０１３９】
この実施例により提供されるデータ記憶装置では、データコーディングモジュール601は、ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行し、ノード決定モジュール602は、記憶ノードグループ内のセカンダリ記憶ノードの中で、m+k個のターゲットEC  blockを記憶するために使用されるm+k個のターゲット記憶ノードを決定し、メッセージ送信モジュール603は、準備メッセージをターゲット記憶ノードに送信し、メッセージ受信モジュール604は、ターゲット記憶ノードにより送信された応答メッセージを受信し、メッセージ送信モジュール603は、全てのターゲット記憶ノードの応答メッセージを受信した後に、ターゲット記憶ノードに対して、準備ログにあるターゲットEC  blockを書き込むように命令するために、実行メッセージを全てのターゲット記憶ノードに送信する。この実施例により提供されるデータ記憶装置を使用することにより、ターゲットECストライプを記憶するために使用されるm+k個のターゲット記憶ノードは、記憶されるべきターゲットEC  blockを直接書き込まないが、まず、記憶されるべきターゲットEC  blockをローカルに生成された準備ログに書き込み、全てのターゲット記憶ノードが準備ログを生成した後に、ターゲットEC  blockを書き込む。全てのターゲット記憶ノードが準備ログを生成した場合にのみ、ターゲット記憶ノードは、ターゲットEC  blockを正確な位置に書き込む動作を実行する。ターゲット記憶ノードによりターゲットEC  blockを書き込む過程において故障が発生した場合であっても、ターゲットEC  blockは、ターゲット記憶ノードの準備ログに記憶されている。このように、ターゲットEC  blockを書き込む動作が成功したか否かに拘わらず、ターゲットEC  blockが喪失されないことが確保され得る。従って、ターゲット記憶ノードの一部がターゲットECストライプのターゲットEC  blockを有するが、ターゲット記憶ノードの他の部分がターゲットECストライプのターゲットEC  blockを有さない場合が回避され、ターゲットECストライプが一貫して記憶されることができ、分散型記憶システムの記憶の一貫性が改善される。
【０１４０】
好ましくは、本発明の更に他の実施例では、ターゲット記憶ノードが故障したときに、ターゲット記憶ノードにより生成された準備ログが喪失されないことを確保するために、ターゲット記憶ノードは、準備ログを停電保護媒体に書き込んでもよい。
【０１４１】
好ましくは、本発明の更に他の実施例では、プライマリノードによりターゲット記憶ノードに送信された準備メッセージは、ターゲットECストライプのバージョン番号を更に含み、更に、準備メッセージに従ってターゲット記憶ノードにより生成された準備ログもまた、ターゲットECストライプのバージョン番号を含む。実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログにあるターゲットEC  block及びターゲットECストライプのバージョン番号を書き込むように具体的に命令する。
【０１４２】
好ましくは、本発明の更に他の実施例では、データ記憶装置は、故障した記憶ノードがm+k個のターゲット記憶ノードに存在することが検出された場合、故障した記憶ノードの故障回復の後に、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じであるか否かを決定するように構成されたバージョン決定モジュール605であり、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号は、準備ログを生成したターゲット記憶ノードにおける準備ログ内のターゲットECストライプのバージョン番号及び／又は準備ログを有さないターゲット記憶ノードにより記憶されたターゲットECストライプのバージョン番号を含むバージョン決定モジュール605を更に含んでもよい。メッセージ送信モジュール603は、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じである場合、実行メッセージを、準備ログを生成したターゲット記憶ノードに送信し、m+k個のターゲット記憶ノード内のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が異なる場合、削除メッセージを、準備ログを生成したターゲット記憶ノードに送信するように具体的に構成され、削除メッセージは、ターゲット記憶ノードに対して、準備ログを削除するように命令するために使用される。
【０１４３】
本発明の実施例は、セカンダリノードに配置されるデータ記憶装置を更に提供する。図７を参照すると、データ記憶装置の構成は、プライマリノードにより送信された準備メッセージを受信するように構成されたメッセージ受信モジュール701であり、準備メッセージは、データ記憶装置が位置するセカンダリ記憶ノードにより記憶されるべきターゲットEC  blockを含むメッセージ受信モジュール701と、準備メッセージに従って準備ログを生成するように構成されたログ生成モジュール702であり、準備ログは、セカンダリ記憶ノードにより記憶されるべきターゲットEC  blockを含むログ生成モジュール702と、応答メッセージをプライマリ記憶ノードに送信するように構成されたメッセージ送信モジュール703であり、応答メッセージは、セカンダリ記憶ノードが準備メッセージに従って準備ログを生成したことを示すために使用されるメッセージ送信モジュール703とを含み、メッセージ受信モジュール701は、プライマリ記憶ノードにより送信された実行メッセージを受信するように更に構成され、実行メッセージに従って準備ログに含まれるターゲットEC  blockを書き込むように構成されたデータ書き込みモジュール704を含む。
【０１４４】
この実施例により提供されるデータ記憶装置では、メッセージ受信モジュール701は、プライマリノードにより送信された準備メッセージを受信し、ログ生成モジュール702は、準備メッセージに従って準備ログを生成し、メッセージ送信モジュール703は、応答メッセージをプライマリノードに送信し、メッセージ受信モジュール701は、プライマリノードにより送信された実行メッセージを受信し、データ書き込みモジュール704は、実行メッセージに従って準備ログに含まれるターゲットEC  blockを書き込む。この実施例により提供されるデータ記憶装置は、記憶されるべきターゲットEC  blockを直接書き込まないが、まず、記憶されるべきターゲットEC  blockをローカルに生成された準備ログに書き込み、プライマリノードにより送信された実行メッセージを受信した後に、ターゲットEC  blockを書き込む。従って、セカンダリノードがターゲットEC  blockを書き込む過程において故障した場合であっても、ターゲットEC  blockは、セカンダリノードの準備ログに記憶されている。このように、ターゲットEC  blockを書き込む動作が成功したか否かに拘わらず、ターゲットEC  blockが喪失されないことが確保され得る。プライマリノードにより決定された全てのターゲット記憶ノードにおけるターゲットEC  blockが全く喪失されない場合、ターゲット記憶ノードの一部がターゲットECストライプのターゲットEC  blockを有するが、ターゲット記憶ノードの他の部分がターゲットECストライプのターゲットEC  blockを有さない場合が回避され、ターゲットECストライプが一貫して記憶されることができ、分散型記憶システムの記憶の一貫性が改善される。
【０１４５】
好ましくは、本発明の更に他の実施例では、セカンダリ記憶ノードにより記憶されるべきターゲットEC  blockは、プライマリ記憶ノードにより生成されたターゲットECストライプ内のデータブロック又はパリティブロックであり、準備メッセージは、プライマリノードにより生成されたターゲットECストライプのバージョン番号を更に含み、更に、準備メッセージに従ってセカンダリノードにより生成された準備ログもまた、ターゲットECストライプのバージョン番号を含む。セカンダリノードはまた、実行メッセージに従ってターゲットEC  blockを書き込むときにターゲットECストライプのバージョン番号を書き込む。
【０１４６】
好ましくは、本発明の更に他の実施例では、メッセージ受信モジュール701は、プライマリ記憶ノードにより送信された削除メッセージを受信するように更に構成され、データ記憶装置は、削除メッセージに従って準備ログを削除するように構成されたデータ削除モジュール705を更に含んでもよい。
【０１４７】
記憶ノードのアイデンティティがプライマリノードであるかセカンダリノードであるかは、自由に設定されてもよく、１つの記憶ノードは、記憶ノードグループ内でプライマリノードあり、また、他の記憶ノードグループ内でセカンダリノードでもよい。従って、図６及び図７に示すデータ記憶装置は、同じ記憶ノードに位置してもよい。
【０１４８】
前述の実施例を理解するのを容易にするために、以下では、説明のための例として前述の実施例の具体的な適用シナリオを使用する。具体的な手順について、図４を参照する。
【０１４９】
分散型記憶システムは、ECストライプの形式でデータを記憶し、各ECストライプは、４つのデータブロック及び２つのパリティブロックを含む。分散型記憶システムは、100個の記憶ノードグループを含む。記憶ノードグループ1は6個の記憶ノードを含み、プライマリノードはノードAであり、セカンダリノードはノードB、ノードC、ノードD、ノードE及びノードFである。
【０１５０】
401.ターゲットECストライプを生成する。ノードAは、データ配送装置により配送されたデータセグメントを受信し、ノードAのデータコーディングモジュールは、ターゲットECストライプを取得するために、データセグメントにおいてECコーディングを実行する。ターゲットECストライプのバージョン番号は3であり、ターゲットECストライプのデータ部のアドレス範囲は4M〜8Mである。
【０１５１】
402.ターゲット記憶ノードを決定する。ノードAのノード決定モジュールは、ターゲットECストライプの6個のEC  blockを記憶するために使用されるターゲット記憶ノードがノードA〜Fであると決定する。
【０１５２】
403.準備メッセージを送信する。ノードAのメッセージ送信モジュールは、準備メッセージをノードA〜Fに送信し、各ノードに送信される準備メッセージは、ターゲットEC  blockと、ターゲットECストライプのバージョン番号とを搬送し、ノードA〜Fのメッセージ受信モジュールは、準備メッセージを受信する。
【０１５３】
404.準備ログを生成する。ノードA〜Fのログ生成モジュールは、準備ログを生成し、準備ログは、記憶されるべきターゲットEC  blockと、ターゲットECストライプのバージョン番号とを含む。
【０１５４】
405.応答メッセージを送信する。ノードA〜Fのメッセージ送信モジュールは、準備ログを生成した後に、応答メッセージをノードAに送信する。ノードAのメッセージ受信モジュールは、ノードA〜Fにより送信された応答メッセージを受信する。
【０１５５】
406.実行メッセージをノードA〜Fに送信する。ノードA〜Fにより送信された応答メッセージを受信した後に、ノードAのメッセージ送信モジュールは、実行メッセージをノードA〜Fに送信し、ノードA〜Fのメッセージ受信モジュールは、実行メッセージを受信する。
【０１５６】
407.ノードA〜Eは、準備ログにあるターゲットEC  block及びバージョン番号を書き込み、ノードFは故障している。ノードAが実行メッセージを送信した後に、ノードA〜Eのデータ書き込みモジュールは、準備ログにあるターゲットEC  block及びバージョン番号を書き込み、ノードFは、実行メッセージを受信する過程において故障している。
【０１５７】
408.ターゲットECストライプのバージョン番号が同じであると決定する。ノードAは、ノードFが故障していると決定し、従って、ノードFが故障から回復した後に、ノードAのバージョン決定モジュールは、ノードA〜FにおけるターゲットECストライプのバージョン番号が同じであるか否かを決定する。ノードA〜Eは準備ログを有さず、記憶されたターゲットEC  blockで搬送されたターゲットECストライプのバージョン番号は3である。ノードFは準備ログを有し、準備ログ内のターゲットEC  blockで搬送されたターゲットECストライプのバージョン番号は3である。
【０１５８】
409.ノードAのメッセージ送信モジュールは、実行メッセージをノードFに送信する。ノードFのメッセージ受信モジュールは、実行メッセージを受信する。
【０１５９】
410.ノードFのデータ書き込みモジュールは、準備ログにあるターゲットEC  block及びバージョン番号を書き込む。
【０１６０】
本発明の実施例は、故障した記憶ノードの喪失したデータを回復するように構成されたデータ回復装置を更に提供し、データ回復装置は、故障した記憶ノードが属する記憶ノードグループのプライマリ記憶ノードに配置される。図８を参照すると、データ回復装置の具体的な構成は、故障した記憶ノードの故障回復の後に、故障した記憶ノードにより送信された回復メッセージを受信するように構成された回復メッセージモジュール801であり、回復メッセージは、故障した記憶ノードが故障から回復したことを示すために使用される回復メッセージモジュール801と、故障した記憶ノードが属する記憶ノードグループ内の故障していない記憶ノードにより記憶されたEC  blockに従った計算を通じて、故障した記憶ノードのN個の喪失したEC  blockを取得するように構成されたデータ計算モジュール802であり、Nは正の整数であるデータ計算モジュール802と、記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信するように構成されたデータ送信モジュール803と、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する過程において、プライマリ記憶ノードが第１のEC  blockを生成し、第１のEC  blockが故障した記憶ノードにより記憶されるべきであると決定した場合、第１のEC  blockと同じkey値を有する第２のEC  blockが、故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定するように構成されたkey値決定モジュール804とを含み、データ送信モジュール803は、第２のEC  blockが、故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在する場合、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信するように更に構成される。
【０１６１】
この実施例は、データ回復装置を提供し、データ計算モジュール802は、故障した記憶ノードが回復した後に、計算を通じて故障した記憶ノードのN個の喪失したEC  blockを取得し、データ送信モジュール803は、記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する。N個の喪失したEC  blockを故障した記憶ノードに順次に送信する過程において、プライマリノードが新たなECストライプを生成し、新たなECストライプ内の第１のEC  blockが故障した記憶ノードにより記憶されるべきであると決定した場合、key値決定モジュール804は、第２のEC  blockが故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定し、第２のEC  blockは第１のEC  blockと同じkey値を有する。第２のEC  blockが存在すると決定された場合、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、データ送信モジュール803は、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信する。この方法は、新たなデータを古いデータで置換することを回避し、回復の後に故障した記憶ノードに記憶されたEC  blockが最新のバージョンであることを確保することができる。
【０１６２】
好ましくは、本発明の更に他の実施例では、データ送信モジュール803は、第nの喪失したEC  blockを故障した記憶ノードに送信するように具体的に構成され、1≦n≦Nであり、第nの喪失したEC  blockに対応する応答メッセージを受信するように具体的に構成され、応答メッセージは、故障した記憶ノードにより送信され、応答メッセージは、故障した記憶ノードが第nの喪失したEC  blockを成功して記憶したことを示すために使用され、第nの喪失したEC  blockに関して故障した記憶ノードの応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、第nの喪失したEC  blockを故障した記憶ノードに送信するステップを再実行するように具体的に構成される。
【０１６３】
好ましくは、本発明の更に他の実施例では、現在成功して記憶されていない喪失したEC  blockは、故障した記憶ノードに現在送信されていない喪失したEC  blockと、故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない喪失したEC  blockとを含む。
【０１６４】
好ましくは、本発明の更に他の実施例では、分散型記憶システムの論理ボリュームは、複数の論理パーティションを含み、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複せず、各論理パーティションは、１つのkey値に一意に対応し、各EC  blockが入る論理パーティションのkey値は、EC  blockのkey値である。
【０１６５】
前述の実施例を理解するのを容易にするために、以下では、説明のために前述の実施例の具体的な適用シナリオを使用する。
【０１６６】
分散型記憶システムは、ECストライプの形式でデータを記憶し、各ECストライプは、４つのデータブロック及び２つのパリティブロックを含む。分散型記憶システムは、100個の記憶ノードグループを含む。記憶ノードグループ1は6個の記憶ノードを含み、プライマリノードはノードAであり、セカンダリノードはノードB、ノードC、ノードD、ノードE及びノードFである。ある時点において、ノードFが故障する。３時間後に、ノードFは回復するが、データが喪失する。
【０１６７】
ノードFは、ノードFが故障から回復したことをノードAに通知するために、回復メッセージをノードAに送信する。ノードAの回復メッセージモジュール801は、回復メッセージを受信する。
【０１６８】
ノードAが回復メッセージを受信した後に、データ計算モジュール802は、ノードA、ノードB、ノードC、ノードD及びノードEにより記憶された全てのEC  blockに従った計算を通じて、ノードFの200個の喪失したEC  blockを取得する。
【０１６９】
ノードAのデータ送信モジュール803は、喪失したEC  blockをノードFに毎回送信し、喪失したEC  blockに関してノードFから応答メッセージを受信した後に、次の喪失したEC  blockを送信する。このように、200個の喪失したEC  blockは、ノードFに順次に送信される。
【０１７０】
データ送信モジュール803が第151の喪失したEC  blockをノードFに送信した後に、ノードAは、データ配送装置により配送されたデータセグメントに従って新たなECストライプを生成し、新たなECストライプ内の第１のEC  blockがノードFにより記憶されるべきであると決定し、第１のEC  blockのkey値は25である。
【０１７１】
ノードAは、第151の喪失したEC  blockに関してノードFにより送信された応答メッセージを受信していないため、ノードAのkey値決定モジュール804は、key値25を有する第２のEC  blockが第151〜第200の喪失したEC  blockに存在するか否かを決定する。ノードAは、第190の喪失したEC  blockのkey値が25であると決定する。
【０１７２】
ノードAのデータ送信モジュール803は、第１のEC  blockをノードFに一時的に送信せず、第190の喪失したEC  blockをノードFに送信して、第190の喪失したEC  blockに関してノードFにより送信された応答メッセージを受信した後に、第１のEC  blockをノードFに送信する。
【０１７３】
ノードAのデータ送信モジュール803は、全ての200個の喪失したEC  blockをノードFに送信し、ノードFは、データ回復を完了する。
【０１７４】
本発明の実施例における各装置は、モジュール機能エンティティの観点から前述された。以下では、ハードウェア処理の観点から本発明の実施例における装置を説明する。
【０１７５】
図９を参照すると、本発明の実施例により提供されるデータ記憶装置の他の実施例は、入力装置901と、出力装置902と、プロセッサ903と、メモリ904とを含む（データ記憶装置900は、１つ以上のプロセッサ903を含んでもよく、図９では、１つのプロセッサ903が一例として使用される）。本発明の或る実施例では、入力装置901、出力装置902、プロセッサ903及びメモリ904は、バスにより或いは他の方式で接続されてもよく、バスによる接続が図９において一例として使用される。
【０１７６】
メモリ904に記憶された動作命令を呼び出すことにより、プロセッサ903は、以下のステップ、すなわち、記憶されるべきデータセグメントを受信し、ターゲットECストライプを取得するために、記憶されるべきデータセグメントにおいてECコーディングを実行するステップであり、記憶されるべきデータセグメントのサイズはZより大きくなく、Zはm個のデータブロックのサイズであり、ターゲットECストライプは、m+k個のターゲットEC  blockを含み、m+k個のターゲットEC  blockは、m個のターゲットデータブロック及びk個のターゲットパリティブロックを含むステップと、m+k個のターゲット記憶ノードを決定するステップであり、m+k個のターゲット記憶ノードは、m+k個のターゲットEC  blockを記憶するように構成され、各ターゲット記憶ノードは、ターゲットEC  blockの１つを記憶するステップと、準備メッセージをm+k個のターゲット記憶ノードに別々に送信するステップであり、各準備メッセージは、各ターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含むステップと、m+k個のターゲット記憶ノードのいずれかのターゲット記憶ノードにより送信された応答メッセージを受信するステップであり、応答メッセージは、応答メッセージを現在送信しているターゲット記憶ノードが準備メッセージに従って準備ログを生成したことを示すために使用され、準備ログは、応答メッセージを現在送信しているターゲット記憶ノードにより記憶されるべきターゲットEC  blockを含むステップと、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードの応答メッセージを受信した後に、実行メッセージをm+k個のターゲット記憶ノードに送信するステップであり、実行メッセージは、m+k個のターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用されるステップとを実行するように構成される。
【０１７７】
本発明の或る実施例では、準備メッセージは、ターゲットECストライプのバージョン番号を更に含み、準備メッセージに従ってターゲットセカンダリ記憶ノードにより生成された準備ログは、ターゲットECストライプのバージョン番号を更に含み、実行メッセージは、ターゲット記憶ノードに対して、準備メッセージにあるターゲットEC  block及びターゲットECストライプのバージョン番号を書き込むように命令するために具体的に使用される。
【０１７８】
本発明の或る実施例では、プロセッサ903は、以下のステップ、すなわち、故障した記憶ノードがm+k個のターゲット記憶ノードに存在することが検出された場合、故障した記憶ノードの故障回復の後に、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じであるか否かを決定するステップであり、m+k個のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号は、準備ログを生成したターゲット記憶ノードにおける準備ログ内のターゲットECストライプのバージョン番号及び／又は準備ログを有さないターゲット記憶ノードにより記憶されたターゲットECストライプのバージョン番号を含むステップと、m+k個のターゲット記憶ノード内の全てのターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が同じである場合、実行メッセージを、準備ログを生成したターゲット記憶ノードに送信するステップであり、実行メッセージは、ターゲット記憶ノードに対して、準備ログに含まれるターゲットEC  blockを書き込むように命令するために使用されるステップとを更に実行する。
【０１７９】
本発明の或る実施例では、プロセッサ903は、以下のステップ、すなわち、m+k個のターゲット記憶ノード内のターゲット記憶ノードにおけるターゲットECストライプのバージョン番号が異なる場合、削除メッセージを、準備ログを生成したターゲット記憶ノードに送信するステップであり、削除メッセージは、ターゲット記憶ノードに対して、準備ログを削除するように命令するために使用されるステップを更に実行する。
【０１８０】
図１０を参照すると、本発明の実施例により提供されるデータ記憶装置の他の実施例は、入力装置1001と、出力装置1002と、プロセッサ1003と、メモリ1004とを含む（データ記憶装置1000は、１つ以上のプロセッサ1003を含んでもよく、図１０では、１つのプロセッサ1003が一例として使用される）。本発明の或る実施例では、入力装置1001、出力装置1002、プロセッサ1003及びメモリ1004は、バスにより或いは他の方式で接続されてもよく、バスによる接続が図１０において一例として使用される。
【０１８１】
メモリ1004に記憶された動作命令を呼び出すことにより、プロセッサ1003は、以下のステップ、すなわち、プライマリ記憶ノードにより送信された準備メッセージを受信するステップであり、準備メッセージは、セカンダリ記憶ノードにより記憶されるべきターゲットEC  blockを含むステップと、準備メッセージに従って準備ログを生成するステップであり、準備ログは、セカンダリ記憶ノードにより記憶されるべきターゲットEC  blockを含むステップと、応答メッセージをプライマリ記憶ノードに送信するステップであり、応答メッセージは、セカンダリ記憶ノードが準備メッセージに従って準備ログを生成したことを示すために使用されるステップと、プライマリ記憶ノードにより送信された実行メッセージを受信するステップと、実行メッセージに従って準備ログに含まれるターゲットEC  blockを書き込むステップとを実行するように構成される。
【０１８２】
本発明の或る実施例では、セカンダリ記憶ノードにより記憶されるべきターゲットEC  blockは、プライマリ記憶ノードにより生成されたターゲットECストライプ内のデータブロック又はパリティブロックであり、準備メッセージは、ターゲットECストライプのバージョン番号を更に含み、準備メッセージに従ってセカンダリ記憶ノードにより生成された準備ログは、ターゲットECストライプのバージョン番号を更に含み、実行メッセージは、ターゲット記憶ノードに対して、準備ログにあるターゲットEC  block及びターゲットECストライプのバージョン番号を書き込むように命令するために具体的に使用される。
【０１８３】
本発明の或る実施例では、プロセッサ1003は、以下のステップ、すなわち、プライマリ記憶ノードにより送信された削除メッセージを受信するステップと、削除メッセージに従って準備ログを削除するステップとを更に実行する。
【０１８４】
図１１を参照すると、本発明の実施例により提供されるデータ回復装置の他の実施例は、入力装置1101と、出力装置1102と、プロセッサ1103と、メモリ1104とを含む（データ回復装置1100は、１つ以上のプロセッサ1103を含んでもよく、図１１では、１つのプロセッサ1103が一例として使用される）。本発明の或る実施例では、入力装置1101、出力装置1102、プロセッサ1103及びメモリ1104は、バスにより或いは他の方式で接続されてもよく、バスによる接続が図１１において一例として使用される。
【０１８５】
メモリ1104に記憶された動作命令を呼び出すことにより、プロセッサ1103は、以下のステップ、すなわち、故障した記憶ノードの故障回復の後に、故障した記憶ノードにより送信された回復メッセージを受信するステップと、故障した記憶ノードが属する記憶ノードグループ内の故障していない記憶ノードにより記憶されたEC  blockに従った計算を通じて、故障した記憶ノードのN個の喪失したEC  blockを取得するステップであり、Nは正の整数であるステップと、記憶を実行するために、N個の喪失したEC  blockを故障した記憶ノードに順次に送信するステップと、N個の喪失したEC  blockを故障した記憶ノードに順次に送信する過程において、プライマリ記憶ノードが第１のEC  blockを生成し、第１のEC  blockが故障した記憶ノードにより記憶されるべきであると決定した場合、第１のEC  blockと同じkey値を有する第２のEC  blockが、故障した記憶ノードにより現在成功して記憶されていない喪失したEC  blockに存在するか否かを決定するステップと、第２のEC  blockが存在すると決定された場合、故障した記憶ノードが第２のEC  blockを成功して記憶した後に、記憶を実行するために、第１のEC  blockを故障した記憶ノードに送信するステップとを実行するように構成される。
【０１８６】
本発明の或る実施例では、プロセッサ1103は、以下のステップ、すなわち、第nの喪失したEC  blockを故障した記憶ノードに送信するステップであり、1≦n≦Nであるステップと、第nの喪失したEC  blockに対応する応答メッセージを受信するステップであり、応答メッセージは、故障した記憶ノードにより送信され、応答メッセージは、故障した記憶ノードが第nの喪失したEC  blockを成功して記憶したことを示すために使用されるステップと、第nの喪失したEC  blockに関して故障した記憶ノードの応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、第nの喪失したEC  blockを故障した記憶ノードに送信するステップを再実行するステップとを更に実行する。
【０１８７】
本発明の或る実施例では、現在成功して記憶されていない喪失したEC  blockは、故障した記憶ノードに現在送信されていない喪失したEC  blockと、故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない喪失したEC  blockとを含む。
【０１８８】
本発明の或る実施例では、分散型記憶システムの論理ボリュームは、複数の論理パーティションを含み、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複せず、各論理パーティションは、１つのkey値に一意に対応し、各EC  blockが入る論理パーティションのkey値は、EC  blockのkey値である。
【０１８９】
本発明の実施例は、図６〜図１１のいずれか１つ以上に示す装置を含む記憶ノードを更に提供する。
【０１９０】
便利且つ簡潔な説明の目的で、前述のシステム、装置及びユニットの詳細な動作処理について、前述の方法の実施例における対応する処理に参照が行われてもよく、詳細はここでは再び説明しないことが当業者により明確に認識され得る。
【０１９１】
本出願で提供される複数の実施例では、開示のシステム、装置及び方法は、他の方式で実現されてもよいことが認識されるべきである。例えば、記載の装置の実施例は単なる例である。例えば、ユニットの分割は、単に論理的な機能分割であり、実際の実現では他の分割でもよい。例えば、複数のユニット又はコンポーネントは結合されてもよく、他のシステムに統合されてもよく、いくつかの機能が無視されてもよく実行されなくてもよい。更に、表示又は説明した相互結合若しくは直接結合又は通信接続は、いくつかのインタフェースを通じて実現されてもよい。装置又はユニットの間の間接結合又は通信接続は、電気的、機械的又は他の形式で実現されてもよい。
【０１９２】
別々の部分として記載したユニットは、物理的に別々でもよく別々でなくてもよく、ユニットとして表示された部分は、物理的なユニットでもよく物理的なユニットでなくてもよく、１つの位置に存在してもよく、複数のネットワークユニットに分散されてもよい。ユニットの一部又は全部は、実施例の対策の目的を達成するために、実際のニーズに従って選択されてもよい。
【０１９３】
更に、本発明の実施例における機能ユニットは、１つの処理ユニットに統合されてもよく、ユニットのそれぞれが物理的に単独で存在してもよく、２つ以上のユニットが１つのユニットに統合されてもよい。統合されたユニットは、ハードウェアの形式で実現されてもよく、ソフトウェアの機能ユニットの形式で実現されてもよい。
【０１９４】
統合されたユニットがソフトウェア機能ユニットの形式で実現され、独立したプロダクトとして販売又は使用される場合、統合されたユニットは、コンピュータ読み取り可能記憶媒体に記憶されてもよい。このような理解に基づいて、基本的に本発明の技術的対策若しくは従来技術に寄与する部分、又は技術的対策の一部若しくは全部は、ソフトウェアプロダクトの形式で実現されてもよい。コンピュータソフトウェアプロダクトは、記憶媒体に記憶され、コンピュータデバイス（パーソナルコンピュータ、サーバ又はネットワークデバイス等でもよい）に対して本発明の実施例に記載の方法のステップの全部又は一部を実行するように命令する複数の命令を含む。前述の記憶媒体は、USBフラッシュドライブ、取り外し可能ハードディスク、読み取り専用メモリ（ROM、Read-Only  Memory）、ランダムアクセスメモリ（RAM、Random  Access  Memory）、磁気ディスク又は光ディスクのようなプログラムコードを記憶することができるいずれかの媒体を含む。
【０１９５】
前述の実施例は、単に本発明の技術的対策を説明することを意図するものであり、本発明を限定することを意図するものではない。前述の実施例を参照して本発明について詳細に説明したが、当業者は、本発明の実施例の技術的対策の範囲を逸脱することなく、依然として前述の実施例に記載の技術的対策に変更を行ってもよく、そのいくつかの技術的特徴に等価置換を行ってもよいことを認識するべきである。
【図１（ａ）】
2018022530.tif 000004
【図１（ｂ）】
2018022530.tif 000005
【図２】
2018022530.tif 000006
【図３】
2018022530.tif 000007
【図４】
2018022530.tif 000008
【図５】
2018022530.tif 000009
【図６】
2018022530.tif 000010
【図７】
2018022530.tif 000011
【図８】
2018022530.tif 000012
【図９】
2018022530.tif 000013
【図１０】
2018022530.tif 000014
【図１１】
2018022530.tif 000015
【手続補正書】
【提出日】平成29年11月1日(2017.11.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
分散型記憶システムに適用されるデータ回復方法であり、前記分散型記憶システムは、イレージャーコーディング（EC）ストライプを使用することによりデータを記憶し、各ECストライプは、データ部及びパリティ部を有し、各ECストライプの前記データ部は、m個のデータブロックを有し、各ECストライプの前記パリティ部は、前記m個のデータブロックにおいて実行されるパリティコーディングの後に取得されたk個のパリティブロックを有し、前記m個のデータブロック及び前記k個のパリティブロックは、各ECストライプのEC  blockを構成し、各ECストライプはkey値に対応し、データ部の同じアドレス範囲を有するECストライプのkey値は同じであり、データ部の異なるアドレス範囲を有するECストライプのkey値は異なり、前記分散型記憶システムは、複数の記憶ノードグループを有し、各記憶ノードグループは、m+k個未満ではない記憶ノードを有し、１つのプライマリ記憶ノードが各記憶ノードグループ内で指定され、前記プライマリ記憶ノードを除く各記憶ノードグループ内のノードはセカンダリ記憶ノードであり、m及びkは共に正の整数であり、故障した記憶ノードが前記記憶ノードグループのいずれか１つの中のセカンダリ記憶ノードに存在する場合、前記方法は、前記記憶ノードグループの前記いずれか１つの中のプライマリ記憶ノードにより実行されるデータ回復方法であって、
前記故障した記憶ノードの故障回復の後に、前記故障した記憶ノードにより送信された回復メッセージを受信するステップと、
前記記憶ノードグループ内の故障していない記憶ノードにより記憶されたEC  blockに従った計算を通じて、前記故障した記憶ノードのN個の喪失したEC  blockを取得するステップであり、前記Nは正の整数であるステップと、
記憶のために、前記N個の喪失したEC  blockを前記故障した記憶ノードに順次に送信するステップと、
前記N個の喪失したEC  blockを前記故障した記憶ノードに順次に送信する過程において、前記プライマリ記憶ノードが第１のEC  blockを生成し、前記第１のEC  blockが前記故障した記憶ノードにより記憶されるべきであると決定した場合、前記第１のEC  blockと同じkey値を有する第２のEC  blockが、前記故障した記憶ノードにより現在成功して記憶されていない前記喪失したEC  blockに存在するか否かを決定するステップと、
前記第２のEC  blockが存在すると決定された場合、前記故障した記憶ノードが前記第２のEC  blockを成功して記憶した後に、記憶を実行するために、前記第１のEC  blockを前記故障した記憶ノードに送信するステップと
を有するデータ回復方法。
【請求項２】
記憶のために、前記N個の喪失したEC  blockを前記故障した記憶ノードに順次に送信するステップは、
第nの喪失したEC  blockを前記故障した記憶ノードに送信するステップであり、1≦n≦Nであるステップと、
前記第nの喪失したEC  blockに対応する応答メッセージを受信するステップであり、前記応答メッセージは、前記故障した記憶ノードにより送信され、前記応答メッセージは、前記故障した記憶ノードが前記第nの喪失したEC  blockを成功して記憶したことを示すために使用されるステップと、
前記第nの喪失したEC  blockに関して前記故障した記憶ノードの前記応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、第nの喪失したEC  blockを前記故障した記憶ノードに送信するステップを再実行するステップと
を有する、請求項１に記載のデータ回復方法。
【請求項３】
現在成功して記憶されていない前記喪失したEC  blockは、前記故障した記憶ノードに現在送信されていない前記喪失したEC  blockと、前記故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない前記喪失したEC  blockとを有する、請求項２に記載のデータ回復方法。
【請求項４】
前記分散型記憶システムの論理ボリュームは、複数の論理パーティションを有し、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複せず、各論理パーティションは、１つのkey値に一意に対応し、各EC  blockが入る論理パーティションのkey値は、前記EC  blockのkey値である、請求項１ないし３のうちいずれか１項に記載のデータ回復方法。
【請求項５】
分散型記憶システムに適用されるデータ回復装置であり、前記分散型記憶システムは、イレージャーコーディング（EC）ストライプを使用することによりデータを記憶し、各ECストライプは、データ部及びパリティ部を有し、各ECストライプの前記データ部は、m個のデータブロックを有し、各ECストライプの前記パリティ部は、前記m個のデータブロックにおいて実行されるパリティコーディングの後に取得されたk個のパリティブロックを有し、前記m個のデータブロック及び前記k個のパリティブロックは、各ECストライプのEC  blockを構成し、各ECストライプはkey値に対応し、データ部の同じアドレス範囲を有するECストライプのkey値は同じであり、データ部の異なるアドレス範囲を有するECストライプのkey値は異なり、前記分散型記憶システムは、複数の記憶ノードグループを有し、各記憶ノードグループは、m+k個未満ではない記憶ノードを有し、１つのプライマリ記憶ノードが各記憶ノードグループ内で指定され、前記プライマリ記憶ノードを除く各記憶ノードグループ内のノードはセカンダリ記憶ノードであり、m及びkは共に正の整数であり、故障した記憶ノードが前記分散型記憶システム内のいずれかの記憶ノードグループ内のセカンダリ記憶ノードに存在する場合、前記データ回復装置は、前記故障した記憶ノードが属する前記記憶ノードグループ内のプライマリ記憶ノードに配置されるデータ回復装置であって、
前記故障した記憶ノードの故障回復の後に、前記故障した記憶ノードにより送信された回復メッセージを受信するように構成された回復メッセージモジュールと、
前記記憶ノードグループ内の故障していない記憶ノードにより記憶されたEC  blockに従った計算を通じて、前記故障した記憶ノードのN個の喪失したEC  blockを取得するように構成されたデータ計算モジュールであり、前記Nは正の整数であるデータ計算モジュールと、
記憶を実行するために、前記N個の喪失したEC  blockを前記故障した記憶ノードに順次に送信するように構成されたデータ送信モジュールと、
前記N個の喪失したEC  blockを前記故障した記憶ノードに順次に送信する過程において、前記プライマリ記憶ノードが第１のEC  blockを生成し、前記第１のEC  blockが前記故障した記憶ノードにより記憶されるべきであると決定した場合、前記第１のEC  blockと同じkey値を有する第２のEC  blockが、前記故障した記憶ノードにより現在成功して記憶されていない前記喪失したEC  blockに存在するか否かを決定するように構成されたkey値決定モジュールと
を有し、
前記データ送信モジュールは、前記第２のEC  blockが存在すると前記key値決定モジュールが決定した場合、前記故障した記憶ノードが前記第２のEC  blockを成功して記憶した後に、記憶を実行するために、前記第１のEC  blockを前記故障した記憶ノードに送信するように更に構成されるデータ回復装置。
【請求項６】
前記データ送信モジュールは、第nの喪失したEC  blockを前記故障した記憶ノードに送信するように構成され、1≦n≦Nであり、
前記第nの喪失したEC  blockに関して前記故障した記憶ノードの応答メッセージを受信した後に、n＜Nである場合、nの値に1を加算し、第nの喪失したEC  blockを前記故障した記憶ノードに送信するステップを再実行するように構成され、前記応答メッセージは、前記故障した記憶ノードが前記第nの喪失したEC  blockを成功して記憶したことを示すために使用される、請求項５に記載のデータ回復装置。
【請求項７】
現在成功して記憶されていない前記喪失したEC  blockは、前記故障した記憶ノードに現在送信されていない前記喪失したEC  blockと、前記故障した記憶ノードに現在送信されているが、それに対応する応答メッセージが受信されていない前記喪失したEC  blockとを有する、請求項６に記載のデータ回復装置。
【請求項８】
前記分散型記憶システムの論理ボリュームは、複数の論理パーティションを有し、各論理パーティションは、k個のデータブロックのサイズであり、互いに重複せず、各論理パーティションは、１つのkey値に一意に対応し、各EC  blockが入る論理パーティションのkey値は、前記EC  blockのkey値である、請求項５ないし７のうちいずれか１項に記載のデータ回復装置。
【請求項９】
コンピュータ実行可能命令を有するコンピュータ読み取り可能記憶媒体であって、
コンピュータのプロセッサが前記コンピュータ実行可能命令を実行した場合、前記コンピュータは、請求項１ないし４のうちいずれか１項に記載の方法を実行するコンピュータ読み取り可能記憶媒体。
【外国語明細書】
2018022530000001.pdf