本発明の実施形態は記憶技術の分野に関し、詳細には、データチェック方法および記憶システムに関する。
複数の記憶ノードを含む分散システムにおいて、ホストは、複数の生成されたデータ書込み要求を、複数の記憶ノードに送信する。各記憶ノードは、いくつかのデータ書込み要求を記憶する。データ書込み要求は、データおよびデータが書き込まれるべき記憶ノードの論理アドレス(以下、論理アドレスという)を含む。記憶ノード上で発生した障害により、記憶ノードに記憶されたデータ書込み要求の損失を防ぐために、ホストは、複数の生成されたデータ書込み要求のチェックデータを計算して、記憶のために、チェックデータを1つ以上の記憶ノードに送信する。チェックデータを計算するために、ホストは、所定のサイズに従って、指定されたサイズに達する複数のデータ書込み要求を分割して、複数のデータユニットを取得し、次いで、複数のデータユニットのチェックユニットを計算する。これらのデータユニットおよびチェックユニットは、ストライプを形成する。最後に、ホストは、記憶のために、各データユニットまたは各チェックユニットを記憶ノードに送信する。これらのデータ書込み要求は、複数のデータユニットにランダムに分割されて、記憶のために異なる記憶ノードに送信される。従って、データ読出し中、複数のデータ書込み要求内で搬送されるデータは、通常、異なる記憶ノードから収集される必要がある。異なる記憶ノード上で実行される読出し操作は、データ読出し効率に影響を及ぼす。
本発明の第1の態様は記憶システムを提供する。記憶システムは、ホスト、チェックノードおよび複数のデータノードを含む。各データノードは一意の識別子を有する。ホストは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分割するように構成される。各データ書込み要求セットは、同じデータノード識別子を有する1つ以上のデータ書込み要求を含む。各データ書込み要求は、データ、データが書き込まれるべき論理アドレスおよびデータが書き込まれるべきデータノードの識別子を含む。データが書き込まれるべきデータノードは、データまたは論理アドレスに従ってホストによって選択される。あるいは、ホスト11上の複数のデータ書込み要求をトリガしたとき、ユーザは、命令をホスト11に送信して、これらのデータ書込み要求が同じデータノードに書き込まれるように要求する。ホスト11は、ユーザの要求に従って、これらのデータ書込み要求のためにデータノードを選択して、データノードを各データ書込み要求に追加してよい。指定された数のデータ書込み要求セットの各々における全てのデータ書込み要求のサイズが事前に設定されたデータ量に達するとき、ホストは、指定された数のデータ書込み要求セットのチェックデータを計算する。指定された数のデータ書込み要求セットは、複数のデータ書込み要求セットのサブセットである。ホストは、指定された数のデータ書込み要求セットの各々を、データ書込み要求セットに含まれるデータノード識別子によって示されるデータノードに送信して、チェックデータをチェックノードに送信する。
本発明で提供される記憶システムによると、ホストは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分割する。指定された数のデータ書込み要求セットにおける全てのデータ書込み要求のサイズが事前に設定されたデータ量に達するとき、ホストは、指定された数のデータ書込み要求セットのチェックデータを計算して、記憶のために、チェックデータをチェックノードに送信する。従って、データ信頼性は保証される。各データ書込み要求セットは、同じデータノードに書き込まれるべき複数のデータ書込み要求を含み、各データ書込み要求が書き込まれるべきデータノードは、データ書込み要求内のデータまたはデータ書込み要求内の、データが書き込まれるべき論理アドレスに従って、ホストによって選択される。従って、各データ書込み要求セットは、同じタイプのデータ書込み要求を含む。チェックデータを計算した後、ホストは、各データ書込み要求セットを、データ書込み要求セットに含まれる識別子によって示されるデータノードに送信する。このようにして、同じタイプのデータ書込み要求は、同じデータノードに記憶される。同じタイプのデータ書込み要求においてデータを同時に読み出す可能性は比較的高い。従って、データは、1つのデータノードから読み出されることができ、読出し操作は、異なるノード上で実行される必要はなく、それによって、データ読出し効率を改善する。
第1の態様を参照すると、第1の態様の第1の実施では、ホストは、識別子を指定された数のデータ書込み要求セット内の各データ書込み要求に割り当て、各データ書込み要求セットの識別子を、データ書込み要求セットに含まれるデータノード識別子によって示されるデータノードに送信するようにさらに構成される。データノードは、データ書込み要求セットおよびデータ書込み要求セットの識別子を受信するように構成される。データノードは、メタデータを作成および記憶するようにさらに構成される。メタデータは、データ書込み要求セットの識別子と、各データ書込み要求内のデータが書き込まれるべき論理アドレスとの間の対応関係と、各データ書込み要求内のデータが書き込まれるべき論理アドレスと、内部オフセットとの間の対応関係とを含む。本発明では、同じタイプのデータ書込み要求は、1つのデータノードに1つのデータ書込み要求セットとして記憶される。従って、データ書込み要求セットに関するメタデータはまた、データノードにローカルに記憶される。ガベージコレクション等の操作がデータ書込み要求セット上でその後実行される場合、メタデータは、ローカルに直接変更されることができる。
第1の態様の第1の実施を参照すると、第1の態様の第2の実施では、記憶システムは、メタデータチェック計算ノードおよびメタデータチェックノードをさらに含む。データノードは、蓄積されたメタデータが事前に設定されたデータ量に達したと決定するとき、メタデータセットおよびデータノードの識別子をメタデータチェック計算ノードに送信するようにさらに構成される。メタデータセットは、事前に設定されたデータ量に達した蓄積されたメタデータを含む。メタデータチェック計算ノードは、メタデータセットおよび複数のデータノードの各々の識別子を受信し、各メタデータセットとデータノード識別子との間の対応関係を記憶し、対応関係に従って、複数の受信されたメタデータセットから、指定された数のメタデータセットを選択するように構成され、ここで、メタデータセットおよび識別子は、データノードによって送信される。選択された指定された数のメタデータセットは、異なるデータノード識別子に対応している。メタデータチェック計算ノードは、選択された指定された数のメタデータセットのチェックデータを計算するようにさらに構成される。次いで、メタデータチェック計算ノードは、指定された数のメタデータセットのチェックデータをメタデータチェックノードに送信する。メタデータチェックノードは、指定された数のメタデータセットの各々を記憶するデータノードとは異なる。従って、本発明で提供される記憶システムによると、各データノードに記憶されるメタデータセットの信頼性は保証される。
第1の態様の第1の実施を参照すると、第1の態様の第3の実施では、記憶システムは、ガベージコレクションノードをさらに含む。ガベージコレクションノードは、体系的なガベージコレクション操作を実行するように構成される。具体的には、ガベージコレクションノードは、ストライプの識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係に従って、且つ、データ書込み要求セットのビットマップに従って、最大量の無効データを含むストライプを、複数のストライプから選択し、ここで、対応関係はホストによって送信され、且つ、ビットマップはデータノードによって送信される。本発明では、ストライプは、指定された数のデータ書込み要求セットおよびこれらのデータ書込み要求セットに従って計算されたチェックデータを含む。本発明では、ビットマップは、データ書込み要求セットに含まれる無効データのデータ量を示すために使用される。ガベージコレクションノードは、最大量の無効データを含むストライプを、再利用されるべきストライプとして使用して、ガベージコレクション通知メッセージを、再利用されるべきストライプに含まれる各データ書込み要求セットが配置されるデータノードに送信する。各ガベージコレクション通知メッセージは、データノードに、体系的なガベージコレクションを実行するように命令するために使用される。各ガベージコレクション通知メッセージは、データ書込み要求セットの識別子を含む。ガベージコレクションユニットは、無効データを含むストライプを選択して、体系的なガベージコレクション操作を実行する。従って、体系的なガベージコレクションの効率は改善される。
第1の態様の第3の実施を参照すると、第1の態様の第4の実施では、ガベージコレクション通知メッセージを受信した後、データノードは、データ書込み要求セットの識別子およびデータ書込み要求セットの記憶されたビットマップに従って、データ書込み要求セットに対して体系的なガベージコレクション操作を実行する。具体的には、データノードは、データ書込み要求セットの識別子に従って、再利用されるべきデータ書込み要求セットを決定する。次に、データノードは、データ書込み要求セットのビットマップに従って、データ書込み要求セットに含まれる有効データが書き込まれるべき論理アドレスを決定し、有効データが書き込まれるべき論理アドレスと、データ書込み要求セットの識別子との間の対応関係を削除し、有効データが書き込まれるべき論理アドレスと、再結合されたデータ書込み要求セットの識別子との間の対応関係を記憶する。次いで、データノードは、データ書込み要求セットの論理ハードディスクアドレスを、ソリッドステートディスクに送信し、ソリッドステートディスクは、論理ハードディスクアドレスに対応するブロックを、無効として記録する。内部ガベージコレクションをその後実行するとき、ソリッドステートディスクは、これらのブロックを直接消去することができ、有効データを複製する必要はない。従って、ソリッドステートディスクに対して内部で実行される書込み増幅の回数は低減される。加えて、本発明で提供される体系的なガベージコレクションは、各データノードが、有効データを別のローカルデータ書込み要求セットに結合することを意味する。従って、データノードは、独立して体系的なガベージコレクションを完了し、データを別のデータノードと交換する必要はなく、それによって、データノード間の帯域幅を節約する。
本発明の第2の態様は、第1の態様または第1の態様の任意の実施の記憶システムに適用されるデータチェック方法を提供する。
本発明の第3の態様はホストを提供する。ホストの機能は、第1の態様の第1の実施で提供される記憶システムの機能と一貫している。
本発明の第4の態様は、記憶システムを提供する。記憶システムは、チェックノード、チェック計算ノードおよび複数のデータノードを含む。各データノードは、データ書込み要求セットをチェック計算ノードに送信するように構成される。データ書込み要求セットは、1つ以上のデータ書込み要求を含み、各データ書込み要求は、データおよびデータが書き込まれるべきデータノードの識別子を含む。データ書込み要求セットのサイズは、事前に設定されたデータ量と等しい。チェック計算ノードは、複数のデータ書込み要求セットを受信し、複数のデータ書込み要求セットから、指定された数のデータ書込み要求セットを選択するように構成される。指定された数のデータ書込み要求セットは、複数のデータ書込み要求セットのサブセットであり、指定された数のデータ書込み要求セットは、異なるデータノード識別子を含む。次いで、チェック計算ノードは、指定された数のデータ書込み要求セットのチェックデータを計算し、チェックデータをチェックノードに送信する。チェックノードは、指定された数のデータ書込み要求セットの各々が配置されるデータノードとは異なる。
本発明で提供されるデータチェック方法によると、全てのデータ書込み要求の蓄積されたサイズが事前に設定されたデータ量に達したとき、各データノードは、これらのデータ書込み要求を、チェック計算ノードに、1つのデータ書込み要求セットとして送信する。チェック計算ノードは、複数の受信されたデータ書込み要求セットから、指定された数のデータ書込み要求セットを選択し、指定された数のデータ書込み要求セットのチェックデータを計算し、記憶のために、チェックデータをチェックノードに送信する。従って、データ信頼性は保証される。
第4の態様を参照すると、第4の態様の第1の実施では、各データ書込み要求は、データが書き込まれるべき論理アドレスをさらに含み、データが書き込まれるべきデータノードは、データまたはデータが書き込まれるべき論理アドレスに従って、記憶システム内のホストによって選択され、または、データが書き込まれるべきデータノードは、ホストによって選択されなくてよいが、データ書込み要求がホスト上でトリガされたときにユーザによって直接指定される。各データノードは、ホストによって送信された複数のデータ書込み要求を受信するようにさらに構成される。各データ書込み要求セットは、同じデータノード識別子を有する複数のデータ書込み要求を含み、各データ書込み要求が書き込まれるべきデータノードは、データ書込み要求内のデータまたはデータ書込み要求内の、データが書き込まれるべき論理アドレスに従って、ホストによって選択される。従って、各データ書込み要求セットは、同じタイプのデータ書込み要求を含む。同じタイプのデータ書込み要求においてデータを同時に読み出す可能性は比較的高い。従って、データは、1つのデータノードから読み出されることができ、読出し操作は、異なるノード上で実行される必要はなく、それによって、データ読出し効率を改善する。
第4の態様の第1の実施を参照すると、第4の態様の第2の実施では、データノードは、識別子を、記憶されたデータ書込み要求セットに割り当てて、データ書込み要求セットの識別子をチェック計算ノードに送信するようにさらに構成される。次いで、データノードは、メタデータを作成および記憶する。メタデータは、データ書込み要求セットの識別子と、各データ書込み要求内のデータが書き込まれるべき論理アドレスとの間の対応関係と、各データ書込み要求内のデータが書き込まれるべき論理アドレスと、内部オフセットとの間の対応関係とを含む。本発明では、同じタイプのデータ書込み要求は、1つのデータノードに1つのデータ書込み要求セットとして記憶される。従って、データ書込み要求セットに関するメタデータはまた、データノードにローカルに記憶される。ガベージコレクション等の操作がデータ書込み要求セット上でその後実行される場合、メタデータは、ローカルに直接変更されることができる。
第4の態様の第2の実施を参照すると、第4の態様の第3の実施では、記憶システムは、メタデータチェック計算ノードおよびメタデータチェックノードをさらに含む。データノードは、蓄積されたメタデータが事前に設定されたデータ量に達したと決定するとき、メタデータセットおよびデータノードの識別子をメタデータチェック計算ノードに送信するようにさらに構成される。メタデータセットは、事前に設定されたデータ量に達した蓄積されたメタデータを含む。メタデータチェック計算ノードは、メタデータセットおよびデータノードによって送信された各データノードの識別子を受信し、各メタデータセットとデータノード識別子との間の対応関係を記憶するように構成される。加えて、メタデータチェック計算ノードは、対応関係に従って、複数の受信されたメタデータセットから、指定された数のメタデータセットを選択する。指定された数のメタデータセットは、異なるデータノード識別子に対応している。メタデータチェック計算ノードは、指定された数のメタデータセットのチェックデータを計算して、指定された数のメタデータセットのチェックデータをメタデータチェックノードに送信する。メタデータチェックノードは、指定された数のメタデータセットの各々を記憶するデータノードとは異なる。従って、本発明で提供される記憶システムによると、各データノードに記憶されるメタデータセットの信頼性は保証される。
第4の態様の第2の実施を参照すると、第4の態様の第4の実施では、記憶システムは、ガベージコレクションノードをさらに含む。チェック計算ノードは、識別子をストライプに割り当てるようにさらに構成される。ストライプは、指定された数のデータ書込み要求セットおよび指定された数のデータ書込み要求セットのチェックデータを含む。次いで、チェック計算ノードは、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係を、ガベージコレクションノードに送信する。各データノードは、データ書込み要求セットの記憶されたビットマップを、ガベージコレクションノードに送信するようにさらに構成される。ビットマップは、データ書込み要求セット内の無効データのデータ量を示すために使用される。ガベージコレクションノードは、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係に従って、且つ、各データ書込み要求セットのビットマップに従って、最大量の無効データを含むストライプを、複数のストライプから選択し、ガベージコレクション通知メッセージを、ストライプに含まれる各データ書込み要求セットが配置されるデータノードに送信するように構成される。各ガベージコレクション通知メッセージは、データ書込み要求セットの識別子を含む。ガベージコレクションユニットは、無効データを含むストライプを選択して、体系的なガベージコレクション操作を実行する。従って、体系的なガベージコレクションの効率は改善される。
第4の態様の第4の実施を参照すると、第4の態様の第5の実施では、ガベージコレクション通知メッセージを受信した後、データノードは、データ書込み要求セットの識別子およびデータ書込み要求セットの記憶されたビットマップに従って、データ書込み要求セットに対して体系的なガベージコレクション操作を実行する。具体的には、データノードは、データ書込み要求セットの識別子に従って、再利用されるべきデータ書込み要求セットを決定する。次に、データノードは、データ書込み要求セットのビットマップに従って、データ書込み要求セットに含まれる有効データが書き込まれるべき論理アドレスを決定し、有効データが書き込まれるべき論理アドレスと、データ書込み要求セットの識別子との間の対応関係を削除し、有効データが書き込まれるべき論理アドレスと、再結合されたデータ書込み要求セットの識別子との間の対応関係を記憶する。次いで、データノードは、データ書込み要求セットの論理ハードディスクアドレスを、ソリッドステートディスクに送信し、ソリッドステートディスクは、論理ハードディスクアドレスに対応するブロックを、無効として記録する。内部ガベージコレクションをその後実行するとき、ソリッドステートディスクは、これらのブロックを直接消去することができ、有効データを複製する必要はない。従って、ソリッドステートディスクに対して内部で実行される書込み増幅の回数は低減される。加えて、本発明で提供される体系的なガベージコレクションは、各データノードが、有効データを別のローカルデータ書込み要求セットに結合することを意味する。従って、データノードは、独立して体系的なガベージコレクションを完了し、データを別のデータノードと交換する必要はなく、それによって、データノード間の帯域幅を節約する。
本発明の第5の態様は、第4の態様または第4の態様の任意の実施の記憶システムに適用されるデータチェック方法を提供する。
本発明の第6の態様は、記憶システムを提供する。記憶システムは、ホスト、チェック計算ノードおよび複数のデータノードを含む。各データノードは一意の識別子を有する。ホストは、複数の生成されたデータ書込み要求をチェック計算ノードに送信する。各データ書込み要求セットは、同じデータノード識別子を有する1つ以上のデータ書込み要求を含む。各データ書込み要求は、データ、データが書き込まれるべき論理アドレスおよびデータが書き込まれるべきデータノードの識別子を含む。データが書き込まれるべきデータノードは、データまたは論理アドレスに従って、ホストによって選択され、または、データが書き込まれるべきデータノードは、ホストによって選択されなくてよいが、データ書込み要求がホスト上でトリガされたときにユーザによって直接指定される。チェック計算ノードは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を、複数のデータ書込み要求セットに分割するように構成される。指定された数のデータ書込み要求セットの各々における全てのデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、チェック計算ノードは、指定された数のデータ書込み要求セットのチェックデータを計算する。指定された数のデータ書込み要求セットは、複数のデータ書込み要求セットのサブセットである。チェック計算ノードは、指定された数のデータ書込み要求セットの各々を、データ書込み要求セットに含まれるデータノード識別子によって示されるデータノードに送信する。チェック計算ノードは、チェックデータを記憶する。
本発明で提供される記憶システムによると、チェック計算ノードは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分割する。指定された数のデータ書込み要求セットにおける全てのデータ書込み要求のサイズが事前に設定されたデータ量に達するとき、チェック計算ノードは、指定された数のデータ書込み要求セットのチェックデータを計算して、記憶のために、チェックデータをチェックノードに送信する。従って、データ信頼性は保証される。各データ書込み要求セットは、同じデータノードに書き込まれるべき複数のデータ書込み要求を含み、各データ書込み要求が書き込まれるべきデータノードは、データ書込み要求内のデータまたはデータ書込み要求内の、データが書き込まれるべき論理アドレスに従って、ホストによって選択される。従って、各データ書込み要求セットは、同じタイプのデータ書込み要求を含む。チェックデータを計算した後、ホストは、各データ書込み要求セットを、データ書込み要求セットに含まれる識別子によって示されるデータノードに送信する。このようにして、同じタイプのデータ書込み要求は、同じデータノードに記憶される。同じタイプのデータ書込み要求においてデータを同時に読み出す可能性は比較的高い。従って、データは、1つのデータノードから読み出されることができ、読出し操作は、異なるノード上で実行される必要はなく、それによって、データ読出し効率を改善する。
第6の態様を参照すると、第6の態様の第1の実施では、チェック計算ノードは、識別子を指定された数のデータ書込み要求セット内の各データ書込み要求に割り当て、各データ書込み要求セットの識別子を、データ書込み要求セットに含まれるデータノード識別子によって示されるデータノードに送信するようにさらに構成される。データノードは、データ書込み要求セットおよびデータ書込み要求セットの識別子を受信するように構成される。データノードは、メタデータを作成および記憶するようにさらに構成される。メタデータは、データ書込み要求セットの識別子と、各データ書込み要求内のデータが書き込まれるべき論理アドレスとの間の対応関係と、各データ書込み要求内のデータが書き込まれるべき論理アドレスと、内部オフセットとの間の対応関係とを含む。本発明では、同じタイプのデータ書込み要求は、1つのデータノードに1つのデータ書込み要求セットとして記憶される。従って、データ書込み要求セットに関するメタデータはまた、データノードにローカルに記憶される。ガベージコレクション等の操作がデータ書込み要求セット上でその後実行される場合、メタデータは、ローカルに直接変更されることができる。
第6の態様の第1の実施を参照すると、第6の態様の第2の実施では、記憶システムは、メタデータチェック計算ノードおよびメタデータチェックノードをさらに含む。データノードは、蓄積されたメタデータが事前に設定されたデータ量に達したと決定するとき、メタデータセットおよびデータノードの識別子をメタデータチェック計算ノードに送信するようにさらに構成される。メタデータセットは、事前に設定されたデータ量に達した蓄積されたメタデータを含む。メタデータチェック計算ノードは、メタデータセットおよび複数のデータノードの各々の識別子を受信し、各メタデータセットとデータノード識別子との間の対応関係を記憶し、対応関係に従って、複数の受信されたメタデータセットから、指定された数のメタデータセットを選択するように構成され、ここで、メタデータセットおよび識別子は、データノードによって送信される。選択された指定された数のメタデータセットは、異なるデータノード識別子に対応している。メタデータチェック計算ノードは、選択された指定された数のメタデータセットのチェックデータを計算するようにさらに構成される。次いで、メタデータチェック計算ノードは、指定された数のメタデータセットのチェックデータをメタデータチェックノードに送信する。メタデータチェックノードは、指定された数のメタデータセットの各々を記憶するデータノードとは異なる。従って、本発明で提供される記憶システムによると、各データノードに記憶されるメタデータセットの信頼性は保証される。
第6の態様の第1の実施を参照すると、第6の態様の第3の実施では、記憶システムは、ガベージコレクションノードをさらに含む。ガベージコレクションノードは、体系的なガベージコレクション操作を実行するように構成される。具体的には、ガベージコレクションノードは、ストライプの識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係に従って、且つ、データ書込み要求セットのビットマップに従って、最大量の無効データを含むストライプを、複数のストライプから選択し、ここで、対応関係はチェック計算ノードによって送信され、且つ、ビットマップはデータノードによって送信される。本発明では、ストライプは、指定された数のデータ書込み要求セットおよびこれらのデータ書込み要求セットに従って計算されたチェックデータを含む。本発明では、ビットマップは、データ書込み要求セットに含まれる無効データのデータ量を示すために使用される。ガベージコレクションノードは、最大量の無効データを含むストライプを、再利用されるべきストライプとして使用して、ガベージコレクション通知メッセージを、再利用されるべきストライプに含まれる各データ書込み要求セットが配置されるデータノードに送信する。各ガベージコレクション通知メッセージは、データノードに、体系的なガベージコレクションを実行するように命令するために使用される。各ガベージコレクション通知メッセージは、データ書込み要求セットの識別子を含む。ガベージコレクションユニットは、無効データを含むストライプを選択して、体系的なガベージコレクション操作を実行する。従って、体系的なガベージコレクションの効率は改善される。
第6の態様の第3の実施を参照すると、第6の態様の第4の実施では、ガベージコレクション通知メッセージを受信した後、データノードは、データ書込み要求セットの識別子およびデータ書込み要求セットの記憶されたビットマップに従って、データ書込み要求セットに対して体系的なガベージコレクション操作を実行する。具体的には、データノードは、データ書込み要求セットの識別子に従って、再利用されるべきデータ書込み要求セットを決定する。次に、データノードは、データ書込み要求セットのビットマップに従って、データ書込み要求セットに含まれる有効データが書き込まれるべき論理アドレスを決定し、有効データが書き込まれるべき論理アドレスと、データ書込み要求セットの識別子との間の対応関係を削除し、有効データが書き込まれるべき論理アドレスと、再結合されたデータ書込み要求セットの識別子との間の対応関係を記憶する。次いで、データノードは、データ書込み要求セットの論理ハードディスクアドレスを、ソリッドステートディスクに送信し、ソリッドステートディスクは、論理ハードディスクアドレスに対応するブロックを、無効として記録する。内部ガベージコレクションをその後実行するとき、ソリッドステートディスクは、これらのブロックを直接消去することができ、有効データを複製する必要はない。従って、ソリッドステートディスクに対して内部で実行される書込み増幅の回数は低減される。加えて、本発明で提供される体系的なガベージコレクションは、各データノードが、有効データを別のローカルデータ書込み要求セットに結合することを意味する。従って、データノードは、独立して体系的なガベージコレクションを完了し、データを別のデータノードと交換する必要はなく、それによって、データノード間の帯域幅を節約する。
本発明の第7の態様は、第7の態様または第7の態様の任意の実施の記憶システムに適用されるデータチェック方法を提供する。
本発明の実施形態における技術的解決手段をより明確に説明するために、以下では、実施形態のために必要とされる添付図面を簡潔に説明する。
図1は、本発明の実施形態に係る、記憶システムの構成図である。
図2は、本発明の実施形態に係る、ホストの構造図である。
図3は、本発明の実施形態に係る、フラッシュメモリアレイの構造図である。
図4は、本発明の実施形態に係る、データチェック方法の概略フローチャートである。
図5は、本発明の実施形態に係る、別のデータチェック方法の概略フローチャートである。
図6は、本発明の実施形態に係る、さらに別のデータチェック方法の概略フローチャートである。
図7は、本発明の実施形態に係る、体系的なガベージコレクション方法の概略フローチャートである。
本発明の実施形態は、データチェック方法および記憶システムを提供し、その結果、データ信頼性を保証することに基づいて、同じタイプのデータは同じ記憶ノードに記憶されることができ、データは1つの記憶ノードのみから読み出されることができ、それによって、データ読出し効率を改善する。
図1は、本発明の実施形態に係る、記憶システム10の構成図を示す。図1に示される記憶システム10は、ホスト11および複数の記憶ノード22を含む。図1は、単に、説明のための例として使用されるが、ホスト11が記憶ノード22と通信することができる限り、カスケードツリーネットワーキングまたはリングネットワーキング等の、特定のネットワーキングモードを限定しない。
ホスト11は、サーバまたはデスクトップコンピュータ等の任意のコンピューティングデバイスを含んでよい。ユーザは、ホスト11を使用することによって、読出しまたは書込み命令をトリガして、データ書込み要求またはデータ読出し要求を記憶ノード22に送信してよい。本実施形態では、ホスト11は任意の記憶ノード22と通信してよく、任意の2つの記憶ノード22はまた、互いに通信してよい。
図2に示されるように、ホスト11は、プロセッサ(英語:processor)118、キャッシュ(英語:cache)120、メモリ(英語:memory)122、通信バス(略してバス)126および通信インタフェース(英語:communication interface)128を主に含む。プロセッサ118、キャッシュ120、メモリ122および通信インタフェース128は、通信バス126を使用することによって相互通信を実施する。
通信インタフェース128は、記憶ノード22と通信するように構成される。
メモリ122は、プログラム124を記憶するように構成される。メモリ122は、高速RAMメモリを含んでよいとともに、不揮発性メモリ(英語:non-volatile memory)、例えば、少なくとも1つの磁気ディスクメモリをさらに含んでよい。メモリ122は、ランダムアクセスメモリ(英語:Random-Access Memory, RAM)、磁気ディスク、ハードディスク、ソリッドステートディスク(英語:solid state disk, SSD)または不揮発性メモリ等の、プログラムコードを記憶することができる任意の機械可読媒体であってよいことは理解されることができる。
プログラム124は、プログラムコードを含んでよい。
キャッシュ120(英語:cache)は、アプリケーションサーバ10から受信されるデータまたは記憶ノード22から読み出されるデータをキャッシュするように構成される。キャッシュ120は、RAM、ROM、フラッシュメモリ(英語:flash memory)またはソリッドステートディスク(Solid State Disk, SSD)等の、データを記憶することができる任意の機械可読媒体であってよい。ここでは限定は課されない。
加えて、メモリ122およびキャッシュ120は共に統合されてよく、または、分離して配置されてよく、本発明の本実施形態はそれに関して限定を課さない。
プロセッサ118は、中央処理装置(英語:central processing unit, CPU)であってよいとともに、データ書込み要求等を生成および処理するように構成される。
記憶ノード22は、ディスクアレイ、フラッシュメモリアレイまたは記憶サーバであってよい。ディスクアレイは、少なくとも1つのコントローラおよび複数のディスクを含む記憶デバイスである。フラッシュメモリアレイは、少なくとも1つのコントローラおよび複数のソリッドステートディスク(英語:solid state device, SSD)を含む記憶デバイスである。ソリッドステートディスクは、フラッシュメモリ(英語:flash memory)チップを記憶媒体として使用するメモリであり、ソリッドステートドライブ(英語:solid state drive, SSD)とも呼ばれる。加えて、記憶ノード22はさらに、記憶サーバであってよい。記憶サーバは、少なくとも1つのソリッドステートディスクを含む。
フラッシュメモリアレイが例として使用される。図3に示されるように、記憶ノード22は、コントローラ221および1つ以上のソリッドステートディスク222を含む。コントローラ221は、少なくとも、インタフェース223、インタフェース224、プロセッサ225およびメモリ226を含む。
インタフェース223は、ホスト11と通信するように構成される。インタフェース224は、ソリッドステートディスク222と通信するように構成される。プロセッサ225は、中央処理装置(英語:central processing unit, CPU)であってよい。
プロセッサ225は、ホスト11から、データ書込み要求またはデータ読出し要求を受信して、データ書込み要求またはデータ読出し要求を処理するように構成される。プロセッサ225は、データ書込み要求内のデータをソリッドステートディスク222にさらに送信してよい。
メモリ226はプログラムを記憶するように構成される。加えて、メモリ226は、ホスト11から受信されたデータ書込み要求またはソリッドステートディスク222から読み出されたデータを一時的に記憶するようにさらに構成される。ホストによって送信された複数のデータ書込み要求を受信した後、コントローラ221は、複数のデータ書込み要求をメモリ226に一時的に記憶してよい。複数のデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、メモリ226に記憶される複数のデータ書込み要求は、チェック計算ノードに送信される。メモリ226は、ランダムアクセスメモリ(英語:random-access memory, RAM)を含む。任意で、メモリ226は、不揮発性メモリ(英語:non-volatile memory)、例えば、少なくとも1つの磁気メモリをさらに含む。メモリ226が、ランダムアクセスメモリ(Random-Access Memory, RAM)、磁気ディスク、ハードディスク、ソリッドステートディスク(Solid State Disk, SSD)または不揮発性メモリ等の、プログラムコードを記憶することができる任意の機械可読媒体であってよいことは理解されることができる。
本実施形態における複数の記憶ノードでは、ホスト11によって送信されたデータ書込み要求を記憶するように構成される記憶ノードは、データノードと呼ばれ、複数のデータ書込み要求のチェックデータを計算するように構成される記憶ノードは、チェック計算ノードと呼ばれ、複数のデータ書込み要求のチェックデータを記憶するように構成される記憶ノードは、チェックノードと呼ばれ、メタデータのチェックデータを計算するように構成される記憶ノードは、メタデータチェック計算ノードと呼ばれ、体系的なガベージコレクションを実行するように構成されるノードは、ガベージコレクションノードと呼ばれる。しかしながら、このような分割は絶対的ではない。例えば、チェックデータを記憶するチェックノードはまた、データ書込み要求を記憶するためのデータノードとして使用されてもよい。
本発明は、少なくとも2つの適用シナリオを提供する。適用シナリオでは、ホスト11は、複数のデータ書込み要求のチェックデータを計算する機能を有する。例えば、ホスト11は、データ書込み要求に含まれる、データが書き込まれるべきデータノードの識別子に従って、複数のデータ書込み要求を、複数のデータ書込み要求セットに分割する。各セットは、同じデータノードに書き込まれるべきデータ書込み要求を含む。一部または全てのセットにおける全てのデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、ホスト11は、これらのデータ書込み要求セットのチェックデータを計算する。
別の適用シナリオでは、ホスト11は、複数のデータ書込み要求のチェックデータを計算する機能を有せず、チェックデータを計算する操作は、記憶ノード内のチェック計算ノードによって実施される。ホスト11は、データ書込み要求内で搬送されるデータが書き込まれるべきデータノードの識別子に従って、各データ書込み要求をデータノードに送信する。各データノードは、ホスト11によって送信された複数のデータ書込み要求を受信する。データ書込み要求セット(データ書込み要求セットは、複数のデータ書込み要求を含む)のサイズが事前に設定されたデータ量に達したとき、データノードは、データ書込み要求セットをチェック計算ノードに送信し、チェック計算ノードは、複数のデータ書込み要求セットのチェックデータを計算する。
以下では、前述の2つの適用シナリオに基づいて、データチェック方法を別々に議論する。
図4は、第1のシナリオに適用されるデータチェック方法のフローチャートである。図4に示されるように、方法は以下のステップを含む。例えば、ステップS101からステップS104は、ホスト11内のプロセッサ118によって実行されてよい。
ステップS101:ホスト11は、複数のデータ書込み要求を生成し、ここで、各データ書込み要求は、データ、データが書き込まれるべきデータノードの識別子およびデータが書き込まれるべき論理アドレスを含む。データが書き込まれるべき論理アドレスは、論理ユニット(英語:Logic Unit)の識別子、論理ブロックアドレス(英語:Logical Block Address, LBA)および長さ(英語:length)を含む。論理ユニットの識別子は、データが書き込まれるべき論理ユニットを示すために使用される。論理ブロックアドレスは、データが論理ユニット内で配置される位置を示すために使用される。長さは、データのサイズを示す。データが書き込まれるべきデータノードの識別子は、データが書き込まれるべきデータノードを示すために使用される。データが書き込まれるべきデータノードは、データまたはデータが書き込まれるべき論理アドレスに従って、記憶システム10内の複数のデータノードからホスト11によって選択される。
具体的には、最初に、ホスト11は、記憶システム10内のデータノードに関する情報を事前に収集する。データノードに関する情報は、記憶システム10に含まれるデータノードの数および各データノードの識別子を含む。データノードの識別子は、データノードを一意に識別するために使用される。例えば、記憶システム10は、5つのデータノードを含み、データノードの識別子は、それぞれ、A、B、C、DおよびEである。ホスト11は、データノードの識別子を取得するために、各データノードにクエリ要求を送信してよく、または、各データノードは、データノードの識別子をホスト11に積極的に報告してよい。あるいは、記憶システム10においてプライマリノードが指定されてよく、プライマリノードは、データノードの識別子を収集して、データノードの識別子をホスト11に報告する。
次いで、ホスト11は、データが書き込まれるべきデータノードを決定する。実施では、ホスト11は、データが書き込まれるべき論理アドレスに従って、データが書き込まれるべきデータノードを決定する。例えば、ホスト11は、各データ書込み要求に含まれる、データが書き込まれるべきデータノードのアドレスを入力エントリとして使用し、事前に設定されたハッシュアルゴリズムを使用することによって、ハッシュ値を取得する。ハッシュ値は、データノードの識別子に一意に対応している。加えて、ホスト11は、ハッシュアルゴリズムまたは剰余演算を使用することによって、データノードの識別子をさらに決定してよい。データノードの識別子を決定するためのアルゴリズムは、データノードの識別子が論理アドレスに従って一意に決定されることができる限りは、本実施形態では限定されない。別の実施では、ホスト11は、データに従って、データが書き込まれるべきデータノードを決定する。例えば、ホスト11は、データを入力エントリとして使用し、事前に設定されたハッシュアルゴリズムを使用することによって、ハッシュ値を取得する。ハッシュ値は、データノードの識別子に一意に対応している。同様に、ホスト11は、ハッシュアルゴリズムまたは剰余演算を使用することによって、データノードの識別子をさらに決定してよい。さらに別の実施では、ホスト11は、データ書込み要求をトリガするユーザに従って、複数のデータ書込み要求を分類し、同じユーザによってトリガされたデータ書込み要求について同じデータノードを選択する。あるいは、ホスト11は、データタイプに従って、これらのデータ書込み要求を分類し、同じタイプのデータについて同じデータノードを選択してよい。
データについてデータノードを選択した後、ホスト11は、データノードの識別子を、データを搬送するデータ書込み要求に書き込む。データノードの識別子は、データ書込み要求のヘッダに配置されてよく、または、データ書込み要求のペイロード(英語:payload)であってよい。
ホスト11上で複数のデータ書込み要求をトリガしたとき、ユーザは、命令をホスト11に送信して、これらのデータ書込み要求が同じデータノードに書き込まれるように要求する。ホスト11は、ユーザの要求に従って、これらのデータ書込み要求に対してデータノードを選択し、データノードを各データ書込み要求に追加してよい。
各データ書込み要求内のデータノードの識別子は、データまたはデータが書き込まれるべき論理アドレスに従って、ホスト11によって割り当てられ、ここで、データまたは論理アドレスは、データ書込み要求に含まれる。従って、同じ識別子を有するデータ書込み要求は、同じタイプのデータ書込み要求である。これらのデータ書込み要求で搬送されるデータを同時に読み出す可能性は比較的高い。
ステップS102:ホストは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分割し、ここで、各セットは、同じデータノード識別子を有する複数のデータ書込み要求を含む。
実際の実施では、複数のデータ書込み要求は、異なる位置に記憶される必要はないことは留意されるべきである。ここでの“分割”は、単に論理的なものであり、複数のデータ書込み要求は、異なるデータノード識別子に従って分類される。例えば、データ書込み要求セット内の複数のデータ書込み要求は、データノードの識別子Aを含み、別のデータ書込み要求セット内の複数のデータ書込み要求は、データノードの識別子Bを含み、さらに別のデータ書込み要求セット内の複数のデータ書込み要求は、データノードの識別子Cを含む。
ステップS103:指定された数のデータ書込み要求セットの各々における全てのデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、ホスト11は、指定された数のデータ書込み要求セットのチェックデータを計算する。
一般に、記憶システム10は、いくつかのデータノードを含む。対応して、ホスト11はまた、いくつかのデータ書込み要求セットを有する。生成されたデータ書込み要求が増加するにつれて、各データ書込み要求セットのサイズは蓄積される。ホスト11は、そのサイズが事前に設定されたデータ量に達したデータ書込み要求セットから、指定された数のデータ書込み要求セットを選択し、指定された数のデータ書込み要求セットのチェックデータを計算する必要がある。事前に設定されたデータ量は事前に設定され、例えば、16 KBである。指定された数は、記憶システム10によって事前に設定されたチェックモードに従って決定される。
事前に設定されたチェックモードは、5+1モード、6+2モード等を含む。5+1モードでは、1個のチェックデータは、5個のデータ書込み要求セットに従って生成される。6+2モードでは、2個のチェックデータは、6個のデータ書込み要求セットに従って生成される。5+1モードが例として使用される。ホスト11は、そのサイズが事前に設定されたデータ量に達した複数のデータ書込み要求セットから、5個のデータ書込み要求セットを選択し、次いで、5個のデータ書込み要求セットのチェックデータを計算する。5個のデータ書込み要求セットおよびチェックデータは、ストライプ(英語:stripe)を形成する。そのサイズが事前に設定されたデータ量に達したデータ書込み要求セットは、ストライプのデータユニットである。
ステップS104:ホスト11は、指定された数のデータ書込み要求セットの各々を、データ書込み要求セットに含まれる識別子によって示されるデータノードに送信する。
各データ書込み要求セット内の全てのデータ書込み要求は同じデータノード識別子を含み、従って、ホストは、識別子に従って、各データ書込み要求セットを、識別子によって示されるデータノードに送信することができることは、前述の議論からわかる。
ステップS105:ホスト11は、記憶システム10から記憶ノードを選択して、チェックデータを記憶し、チェックデータを、選択された記憶ノードに送信し、ここで、チェックデータを記憶するように構成される記憶ノードは、ストライプに含まれる各データ書込み要求セットが配置されるデータノードとは異なる。説明を容易にするために、チェックデータを記憶する記憶ノードは、チェックノードと呼ばれる。
ホスト11は、残りの記憶ノード(データ書込み要求セットを記憶するように構成されるデータノードを除く)から、1つ以上の記憶ノードを選択して、チェックデータを記憶してよい。一般に、ストライプ内のデータ書込み要求セットおよびチェックデータは、同じ記憶ノードに記憶されることはできない。これは、データ書込み要求セットとチェックデータの両方が、記憶ノードが故障したときに失われることを防ぐために意図される。しかしながら、実際の適用では、ホスト11は、通常、複数のストライプを構成してよい。ストライプ内のチェックデータを記憶するように構成される選択された記憶ノードは、そのストライプ内のデータ書込み要求セットを記憶する記憶ノードであることはできないが、別のストライプ内のデータ書込み要求セットを記憶する記憶ノードであってよい。本実施形態では、記憶ノードは、データ書込み要求セットまたはチェックデータの専用記憶に限定されない。
加えて、ホスト11は、ストライプ識別子を各ストライプに割り当てる。異なるストライプは異なるストライプ識別子を有する。さらに、ホストは、識別子を、各ストライプに含まれるデータ書込み要求セットおよびチェックデータに割り当て、データ書込み要求セットの識別子を、データ書込み要求セットが配置されるデータノードに送信する。ホスト11は、各ストライプのストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係と、ストライプ識別子と、チェックデータの識別子との間の対応関係とを記録する。
図4に示されるデータチェック方法によると、ホスト11は、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分割する。指定された数のデータ書込み要求セットにおける全てのデータ書込み要求のサイズが事前に設定されたデータ量に達するとき、ホスト11は、指定された数のデータ書込み要求セットのチェックデータを計算して、記憶のために、チェックデータをチェックノードに送信する。従って、データ信頼性は保証される。各データ書込み要求セットは、同じデータノードに書き込まれるべき複数のデータ書込み要求を含み、各データ書込み要求が書き込まれるべきデータノードは、データ書込み要求内のデータまたはデータ書込み要求内の、データが書き込まれるべき論理アドレスに従って、ホストによって選択される。従って、各データ書込み要求セットは、同じタイプのデータ書込み要求を含む。チェックデータを計算した後、ホスト11は、各データ書込み要求セットを、データ書込み要求セットに含まれる識別子によって示されるデータノードに送信する。このようにして、同じタイプのデータ書込み要求は、同じデータノードに記憶される。同じタイプのデータ書込み要求においてデータを同時に読み出す可能性は比較的高い。従って、データは、1つのデータノードから読み出されることができ、読出し操作は、異なるノード上で実行される必要はなく、それによって、データ読出し効率を改善する。
第1のシナリオに適用されるデータチェック方法は、別の実施を有する。本実施と図4に示される実施との間の差は、本実施では、チェック計算ノードが、データ書込み要求に含まれるデータノード識別子に従って、複数の受信されたデータ書込み要求を、複数のデータ書込み要求セットに分割し、指定された数のデータ書込み要求セットのサイズが事前に設定されたデータ量に達したとき、チェックデータを計算することである。これらの操作は、図4に示される実施では、ホスト11によって実行される。具体的には、図5に示されるように、データチェック方法は、以下のステップで実施されてよい。
ステップS401:このステップは、図4に示されるステップS101と同様であり、詳細はここでは再び繰り返されない。
ステップS402:ホスト11は、生成されたデータ書込み要求をチェック計算ノードに送信する。
ステップS403:チェック計算ノードは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分割し、ここで、各セットは、同じデータノード識別子を有する複数のデータ書込み要求を含む。このステップと図4におけるステップS102との間の差は、このステップがチェック計算ノードによって実行されることである。残りの部分は図4に示されるステップS102のものと同様であり、詳細はここでは再び繰り返されない。
ステップS404:指定された数のデータ書込み要求セットの各々における全てのデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、チェック計算ノードは、指定された数のデータ書込み要求セットのチェックデータを計算する。このステップと図4におけるステップS103との間の差は、このステップがチェック計算ノードによって実行されることである。残りの部分は、図4に示されるステップS103のものと同様であり、詳細はここでは再び繰り返されない。
ステップS405:チェック計算ノードは、指定された数のデータ書込み要求セットの各々を、データ書込み要求セットに含まれる識別子によって示されるデータノードに送信する。このステップと図4におけるステップS104との間の差は、このステップがチェック計算ノードによって実行されることである。残りの部分は、図4に示されるステップS104のものと同様であり、詳細はここでは再び繰り返されない。
チェックデータを計算した後、チェック計算ノードは、チェックデータをローカルに直接記憶することができ、記憶のために、チェックデータを別の記憶ノードに転送する必要はない。1個より多いチェックデータが、事前に設定されたチェックモードに従って計算される場合、チェック計算ノードは、別のチェックデータを記憶するために、記憶システム10から記憶ノードを選択してよい。選択方式は、図4に示されるステップS105のものと同様であり、詳細はここでは再び繰り返されない。図6は、第2のシナリオに適用されるデータチェック方法のフローチャートである。図6に示されるように、方法は以下のステップを含む。
ステップS201:ホスト11は、複数のデータ書込み要求を生成し、ここで、各データ書込み要求は、データ、データが書き込まれるべきデータノードの識別子およびデータが書き込まれるべき論理アドレスを含む。ステップS201の内容は、図4に示される方法におけるステップS101のものと同様であり、詳細はここでは再び繰り返されない。
ステップS202:ホスト11は、各データ書込み要求を、データ書込み要求に含まれる、データが書き込まれるべきデータノードの識別子によって示されるデータノードに送信する。
ステップS203:データノードは、ホスト11によって送信された複数のデータ書込み要求を受信して、データ書込み要求をメモリ226に書き込む。具体的には、このステップは、コントローラ221におけるプロセッサ225によって実行されてよい。
ステップS204:データノードのメモリ226に記憶された全てのデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、データノードは、データ書込み要求セットを、チェック計算ノードに送信する。データ書込み要求セットは、複数のデータ書込み要求を含み、複数のデータ書込み要求のサイズは、事前に設定されたデータ量に達する。
具体的には、このステップは、コントローラ221におけるプロセッサ225によって実行されてよい。データノードがホスト11によって送信されたデータ書込み要求を受信するたびに、データノードは、データ書込み要求を、メモリ226に書き込む。従って、メモリ226では、データ書込み要求は蓄積される。データ書込み要求の蓄積サイズが事前に設定されたデータ量に達したとき、データノードは、これらの蓄積されたデータ書込み要求を1つのセットとして、チェック計算ノードに送信する。事前に設定されたデータ量は、記憶システム10によって事前に設定され、例えば、16 KBである。
任意のデータノードのメモリ226内の全てのデータ書込み要求は、メモリ226内の全てのデータ書込み要求のサイズが事前に設定されたデータ量に達する限り、チェック計算ノードに送信される。別のデータノードのメモリ内のデータ書込み要求の蓄積されたサイズが事前に設定されたデータ量に達したかどうかは考慮されない。実際の適用では、データノードは、蓄積されたデータ書込み要求に対して時間制限要件を有してよい。事前に設定された時間制限が切れると、メモリ226内の全てのデータ書込み要求のサイズが事前に設定されたデータ量に達しない場合、0または特別なマークを持つ他のデータが、補完のために使用されてよい。
前述では、1つのデータノードを説明した。記憶システム10内の複数のデータノードについては、各データノード22は、そのサイズが事前に設定されたデータ量に達したデータ書込み要求セットをローカルに収集し、次いで、これらのデータ書込み要求セットを、チェック計算ノードに送信する。チェック計算ノードは、複数の受信されたデータ書込み要求セットに従って、チェックデータを計算して、ストライプを形成する。
ステップS205:チェック計算ノードは、複数のデータ書込み要求セットを受信し、複数のデータ書込み要求セットから、指定された数のデータ書込み要求セットを選択して、指定された数のデータ書込み要求セットのチェックデータを計算し、ここで、指定された数のデータ書込み要求セットは、複数のデータ書込み要求セットのサブセットであり、指定された数のデータ書込み要求セットは、異なるデータノード識別子を含む。
例えば、記憶ノードCは、チェック計算ノードとして使用される。記憶ノードCは、記憶システム10内の任意の記憶ノード22と通信してよい。複数のデータ書込み要求セットを受信した後、記憶ノードCは、事前に設定されたチェックモードに従って、指定された数のデータ書込み要求セットを、複数のデータ書込み要求セットから選択し、指定された数のデータ書込み要求セットのチェックデータを計算する。5+1モードが例として使用される。複数の受信されたデータ書込み要求セットから、異なるデータノード由来の5個のデータ書込み要求セットを選択した後、記憶ノードCは、5個のデータ書込み要求セットのチェックデータを計算する。いくつかのケースでは、記憶ノードCは、ローカルに記憶されているデータ書込み要求セットのチェックデータを計算してよく、残りの4つのデータノードによって送信されるデータ書込み要求セットを受信する必要のみがある。
データ書込み要求セットを受信したとき、チェック計算ノードは、データ書込み要求セットを記憶し、データ書込み要求セットに識別子を割り当て、次いで、データ書込み要求セットの識別子を、リンクされたリストまたは別のデータ構造に書き込む。データ書込み要求セットの識別子は、データ書込み要求セット内のデータ書込み要求に含まれるデータノード識別子と同じであってよく、または、データ書込み要求セット内のデータ書込み要求に含まれるデータノード識別子とは異なってよい。データ書込み要求セットの識別子が、データ書込み要求セット内のデータ書込み要求に含まれるデータノード識別子とは異なる場合、チェック計算ノードは、データ書込み要求セットの識別子と、データノード識別子との間の対応関係を記憶する。実施では、データ書込み要求セットの識別子は、チェック計算ノードによって割り当てられる。識別子を割り当てた後、チェック計算ノードは、データ書込み要求セットの識別子を、データ書込み要求セットが配置されるデータノードに送信する。データノードは、データ書込み要求セットの識別子を記憶する。別の実施では、データ書込み要求セットの識別子は、データ書込み要求セットが配置されるデータノードによって割り当てられる。識別子を割り当てた後、データノードは、データ書込み要求セットの識別子を、チェック計算ノードに送信する。チェック計算ノードは、データ書込み要求セットの識別子を記憶する。
データ信頼性を保証するために、特定の数のデータ書込み要求セットを選択して、ストライプを形成するとき、チェック計算ノードは、同じストライプを形成する複数のデータ書込み要求セットは、異なるデータノード由来であることを保証する必要がある。5+1モードが例として使用される。チェック計算ノードは、リンクされたリストから、5個のデータ書込み要求セットを選択する必要がある。チェック計算ノードは、特定の時間に、複数のデータ書込み要求セットを受信してよい。データ書込み要求セットのいくつかは、同じデータノード由来であり得る。従って、チェック計算ノードは、5個のデータ書込み要求セットが異なるデータノード由来であることをさらに保証する必要がある。具体的には、チェック計算ノードは、データ書込み要求セットの識別子と、データノード識別子との間の記憶された対応関係に従って、または、データ書込み要求セットの識別子に直接従って、リンクされたリストから、5個のデータ書込み要求セットを選択してよい。データ書込み要求セットを選択して、ストライプを形成するとき、チェック計算ノードは、リンクされたリストに書き込まれるデータ書込み要求セットの順序を考慮する必要はないが、ストライプを形成する複数のデータ書込み要求セットが異なるデータノード由来であることを保証する必要のみがあることは留意されるべきである。
ステップS206:チェック計算ノードは、チェックデータをチェックノードに送信し、ここで、チェックノードは、データ書込み要求セットを記憶するデータノードとは異なる。
具体的には、チェック計算ノードは、残りの記憶ノード(データ書込み要求セットを既に記憶するデータノードを除く)から、1つ以上の記憶ノードを選択し、チェックデータを記憶してよい。チェックデータを記憶するように構成される記憶ノードは、本実施形態ではチェックノードと呼ばれる。チェックノードは、指定された数のデータ書込み要求セットが配置されるデータノードのいずれとも同じであることはできない。これは、ストライプに含まれるデータ書込み要求セットとチェックデータの両方が、記憶ノードが故障したときに失われることを防ぐために意図される。チェックデータを記憶するように構成される選択された記憶ノードは、現在のストライプ内のデータ書込み要求セットを記憶するデータノードであることはできないが、別のストライプ内のデータ書込み要求セットを記憶するデータノードであってよい。本実施形態では、記憶ノードは、データ書込み要求セットまたはチェックデータの専用記憶に限定されない。
加えて、チェック計算ノードは、ストライプ識別子を各ストライプに割り当てる。異なるストライプは異なるストライプ識別子を有する。さらに、ホストは、識別子を、各ストライプに含まれるデータ書込み要求セットおよびチェックデータに割り当て、データ書込み要求セットの識別子を、データ書込み要求セットが配置されるデータノードに送信する。あるいは、各データノードは、記憶されたデータ書込みセットに識別子を割り当て、データ書込み要求セットの識別子を、チェック計算ノードに送信する。チェック計算ノードは、各ストライプのストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係と、ストライプ識別子と、チェックデータの識別子との間の対応関係とを記録する。
図6に示されるデータチェック方法によると、全てのデータ書込み要求の蓄積されたサイズが事前に設定されたデータ量に達したとき、各データノードは、これらのデータ書込み要求を、チェック計算ノードに1つのデータ書込み要求セットとして送信する。チェック計算ノードは、複数の受信されたデータ書込み要求セットから、指定された数のデータ書込み要求セットを選択し、指定された数のデータ書込み要求セットのチェックデータを計算し、記憶のために、チェックデータをチェックノードに送信する。従って、データ信頼性は保証される。各データ書込み要求セットは、同じデータノード識別子を有する複数のデータ書込み要求を含み、各データ書込み要求が書き込まれるべきデータノードは、データ書込み要求内のデータまたはデータ書込み要求内の、データが書き込まれるべき論理アドレスに従って、ホストによって選択される。従って、各データ書込み要求セットは、同じタイプのデータ書込み要求を含む。同じタイプのデータ書込み要求においてデータを同時に読み出す可能性は比較的高い。従って、データは、1つのデータノードから読み出されることができ、読出し操作は、異なるノード上で実行される必要はなく、それによって、データ読出し効率を改善する。
図4、図5または図6に示されるデータチェック方法では、同じタイプのデータ書込み要求が同じデータノードに書き込まれる。データ書込み要求をデータノードに書き込んだ後、データノードはさらに、メタデータを作成および記憶する必要がある。
メタデータは、データ書込み要求セットの識別子と、各データ書込み要求内のデータが書き込まれるべき論理アドレスとの間の対応関係を含む。メタデータは、データ書込み要求セット内の各データ書込み要求の位置をさらに含む。本実施形態では、データ書込み要求セット内の各データ書込み要求の位置は、内部オフセットと呼ばれる。例えば、データ書込み要求セットと、データ書込み要求セットに含まれる各データ書込み要求内のデータが書き込まれるべき論理アドレスとの間の対応関係は、表1に示される。
前述の表に示されるように、識別子“1”を持つデータ書込み要求セットは、3つのデータ書込み要求を含む。各データ書込み要求はデータを含むだけでなく、データが書き込まれるべき論理アドレスも含む。加えて、各データ書込み要求は、データ書込み要求セット内部の対応する位置を有する。第1のデータ書込み要求が例として使用される。データ書込み要求の論理アドレスは、ボリュームID、LBAおよび長さを含む。ボリュームIDは0x1であり、LBAは0x100であり、長さは4096である。データ書込み要求は、識別子“1”を持つデータ書込み要求セットに属し、データ書込み要求セット内の位置は0x1000である。
ホストが、複数のデータ書込み要求を複数のデータユニットに分割し、複数のデータユニットのチェックデータを計算し、次いで、データユニットおよびチェックデータを、記憶のために、システム内の複数の記憶ノードに送信する場合、メタデータ(データ書込み要求とデータユニットとの間の対応関係)はホスト内に記憶される。ガベージコレクション等の操作が記憶ノード内のデータユニットに対してその後実行されるとき、メタデータを変更するために、メッセージが、ホストに送信される必要がある。従って、操作は複雑であり、帯域幅が消費される。
しかしながら、本実施形態では、同じタイプのデータ書込み要求は1つのデータノードに1つのデータ書込み要求セットとして記憶される。従って、データ書込み要求セットに関するメタデータはまた、データノード内にローカルに記憶される。ガベージコレクション等の操作がデータ書込み要求セットに対してその後実行される場合、メタデータは、ローカルに直接変更されることができる。
メタデータは、データノードのメモリ226内に記憶されてよい。メタデータの信頼性を保証するために、各データノードにおけるメタデータのチェックデータはまた、計算されて記憶される必要がある。具体的には、データノードによって受信されるデータ書込み要求が増加し、メモリ226内に記憶されるメタデータも増加する。メモリ226内のメタデータの蓄積されたサイズが事前に設定されたデータ量に達したとき、データノードは、メタデータセットをメタデータチェック計算ノードに送信する。メタデータセットは、そのサイズが事前に設定されたデータ量に達したメタデータである。事前に設定されたデータ量は、記憶システム10によって事前に設定されてよく、例えば、16 KBである。メタデータチェック計算ノードは、記憶ノードにおける、メタデータセットのチェックデータを計算するように構成される記憶ノードである。実際の実施では、メタデータチェック計算ノードは、チェック計算ノードと同じであってよい。加えて、本実施形態では、データノード22は、メタデータセットをメタデータチェック計算ノードに送信するだけでなく、データノードの識別子を、メタデータチェック計算ノードに送信する必要もある。メタデータセットおよび識別子は、1つのメッセージにカプセル化されることによって送信されてよく、または、別々に送信されてよい。
メタデータチェック計算ノードは、データノードによって送信される、メタデータセットおよび各データノードの識別子を受信し、各メタデータセットに識別子を割り当て、メタデータセットの識別子とデータノードの識別子との間の対応関係を記憶する。メタデータの信頼性を保証するために、メタデータチェック計算ノードは、メタデータセットのチェックデータを計算する。具体的には、メタデータチェック計算ノードは、メタデータセットの識別子と、データノードの識別子との間の対応関係に従って、複数のメタデータセットから、指定された数のメタデータセットを選択し、選択された指定された数のメタデータセットのチェックデータを計算する。選択されたメタデータセットは、異なるデータノード識別子に対応している必要がある。
前述の説明と同様に、指定された数は、記憶システム10によって事前に設定されたチェックモードに従って決定される。メタデータセットのチェックモードは、データ書込み要求セットのチェックモードと同じであっても異なってもよいことは留意されるべきである。
メタデータチェック計算ノードは、記憶システム10内で、記憶ノードをメタデータチェックノードとして選択し、メタデータセットのチェックデータをメタデータチェックノードに送信してよい。選択されたメタデータチェックノードは、メタデータセットを記憶するように構成されるデータノードとは異なる。しかしながら、選択されたメタデータチェックノードは、別のストライプにおけるメタデータセットを記憶するデータノードであってよい。本実施形態では、データノードは、メタデータセットまたはメタデータセットのチェックデータの専用記憶に限定されない。
各データノードのメモリ226に記憶されたデータの合計量が特定の閾値に達したとき、データノードは、メモリ226内のデータをソリッドステートディスク222に書き込む必要がある。この場合、データノード内のコントローラ221は、各データ書込み要求セットを粒度として使用することによって、各データ書込み要求セットに、データ書込み要求セットをソリッドステートディスクに書き込むための論理アドレスを割り当て(本実施形態では、論理ハードディスクアドレスと呼ばれる)、データ書込み要求セットの識別子と、割り当てられた論理ハードディスクアドレスとの間の対応関係を記憶してよい。ソリッドステートディスク222は、コントローラ221によって送信されたデータ書込み要求セットと、データ書込み要求セットをソリッドステートディスクに書き込むための、且つ、データ書込み要求セットに割り当てられた論理アドレスとを受信し、データ書込み要求セットを、1つ以上のブロック(英語:block)に書き込む。加えて、ソリッドステートディスク222は、データ書込み要求セットをソリッドステートディスクに書き込むための、且つ、データ書込み要求セットに割り当てられた論理アドレスと、実際のアドレスとの間の対応関係を記憶する。実際のアドレスは、ソリッドステートディスク内のデータの物理アドレスであってよく、または、物理アドレスに基づいて仮想化され、且つ、ソリッドステートディスクに対してのみ可視的なアドレスであってよい。
ある期間の後、各データノードによって記憶されたデータ書込み要求セット内のいくつかのデータは、無効データになってよい。データの有効性は、データが変更されているかどうかに従って決定される。データが最初に書き込まれる場合、データは有効として記録されてよい(有効データと呼ばれる)。データが変更される場合、変更前のデータは、無効として記録される(無効データと呼ばれる)。表1が例として使用される。識別子1を持つデータ書込み要求セットが配置されるデータノードが第4のデータ書込み要求を受信し、且つ、第4のデータ書込み要求内のデータが書き込まれるべき論理アドレスは、第1のデータ書込み要求内のデータが書き込まれるべき論理アドレスと同じであるとき、第4のデータ書込み要求は、第1のデータ書込み要求を上書きするために使用されることを示す。ソリッドステートディスクの書込み特性により、第1のデータ書込み要求内のデータ(古いデータ)は、第4のデータ書込み要求内のデータ(新しいデータ)によって直接上書きされないが、新しいデータが書き込まれるブランクブロックが、ソリッドステートディスク上で割り当てられる。従って、第1のデータ書込み要求内のデータは無効データになる。これはまた、識別子1を持つデータ書込み要求セット内のいくつかのデータが無効データになることを意味する。データノードは、各データ書込み要求セットに含まれる無効データに関する情報を記録するためにビットマップを使用してよい。無効データに関する情報は、無効データが書き込まれるべき論理アドレスおよび無効データのデータ量を含む。例えば、ビットマップの各“ビット”は、1KBのサイズを有し、且つ、データが書き込まれるべき論理アドレスに対応している。“ビット”1は、論理アドレスに記憶されるデータが有効であることを示し、“ビット”0は、論理アドレスに記憶されるデータが無効であることを示す。
無効データが増加するにつれて、データノードは、体系的なガベージコレクション操作を実行する必要がある。体系的なガベージコレクションは、ストライプ単位で実行され、ストライプに含まれるデータ書込み要求セットは、データノードに分配される。従って、体系的なガベージコレクションは、データノード内部のデータ書込み要求セット単位で実行される。記憶システム10は、ガベージコレクションノードをさらに含む。ガベージコレクションノードは、記憶ノード22内の、体系的なガベージコレクション操作を実行するように構成されるノードである。図7は、体系的なガベージコレクション方法の概略フローチャートである。図7に示されるように、方法は以下のステップを含んでよい。
S301.ガベージコレクションノードは、各ストライプに含まれるデータ書込み要求セットのビットマップに従って、複数のストライプから、再利用されるべきストライプを選択する。
第1の適用シナリオでは、ホスト11は、ストライプの識別子と、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係とを、ガベージコレクションノードに送信する。第2の適用シナリオでは、チェック計算ノードは、ストライプの識別子と、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係とを、ガベージコレクションノードに送信する。加えて、第1の適用シナリオか第2の適用シナリオかに関わらず、データノードは、データ書込み要求セットのビットマップを、ガベージコレクションノードに送信する必要がある。
ガベージコレクションノードは、複数のストライプから、再利用されるべきストライプを選択する必要がある。体系的なガベージコレクション操作の最高の効率を保証するために、ガベージコレクションノードは、通常、最大量の無効データを含むストライプを、再利用されるべきストライプとして選択する。従って、各ストライプに含まれる無効データのデータ量に対して、統計的な収集が実行される必要がある。具体的には、ガベージコレクションノードは、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係に従って、ストライプに含まれる全てのデータ書込み要求セットを決定し、次いで、ストライプに含まれる無効データの量を決定するために、各データ書込み要求セットのビットマップに従って、各データ書込み要求セットに含まれる無効データのデータ量を決定してよい。従って、ガベージコレクションノードは、最大量の無効データを含むストライプを、再利用されるべきストライプとして使用してよい。加えて、本実施形態では、再利用されるべきストライプは、別の条件に従って選択されてよい。例えば、体系的なガベージコレクション操作が長時間実行されていないストライプが選択され、または、体系的なガベージコレクションは、事前に設定された順序に従って、様々なストライプに対して順次実行される。
S302.ガベージコレクションノードは、各データ書込み要求セットが配置されるデータノードに、ガベージコレクション通知メッセージを送信する。
上述のように、ガベージコレクションノードは、ストライプ識別子と、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係に従って、各ストライプに含まれるデータ書込み要求セットの識別子を決定してよい。次いで、ガベージコレクション通知メッセージを、各データ書込み要求セットが配置されるデータノードに送信するために、データ書込み要求セットの識別子と、データノードの識別子との間の対応関係に従って、各データ書込み要求セットが配置されるデータノードが決定される(データ書込み要求セットの識別子が、データノードの識別子と一貫している場合、各データ書込み要求セットが配置されるデータノードは、データ書込み要求セットの識別子に従って直接決定されてよい)。メッセージは、データノードに、データ書込み要求セットに対して、体系的なガベージコレクション操作を実行するように命令するために使用される。メッセージは、データ書込み要求セットの識別子を含む。
S303.各データノードは、ガベージコレクション通知メッセージを受信し、メッセージ内で搬送される、データ書込み要求セットの識別子に従って、再利用されるべきデータ書込み要求セットを決定する。次いで、各データノードは、再利用されるべきデータ書込み要求セットのビットマップに従って、再利用されるべきデータ書込み要求セットに含まれている有効データおよび無効データを決定する。例えば、表1における第1のデータ書込み要求内のデータは無効データになる。第2のデータ書込み要求内のデータおよび第3のデータ書込み要求内のデータは依然として有効データである。
S304.各データノードは、再利用されるべきデータ書込み要求セット内の有効データを、新しいデータ書込み要求セット内に移動して、データ書込み要求セットを再利用する。
有効データを新しいデータ書込み要求セット内に移動することは、新しいデータ書込み要求セット内に、有効データが配置されるデータ書込み要求を結合することである。例えば、表1における第2のデータ書込み要求および第3のデータ書込み要求は、ソリッドステートディスク222からメモリ226内に読み出される(第2のデータ書込み要求または第3のデータ書込み要求が既にメモリ226内に記憶されている場合、この操作は実行される必要はない)。メモリ226内に記憶された全てのデータ書込み要求のサイズが事前に設定されたデータ量に再び達した後、新しいデータ書込み要求セットが結合によって生成される。具体的には、データノードは、次いで、再利用されるべきデータ書込み要求セットのビットマップに従って、データ書込み要求セットに含まれる有効データが書き込まれるべき論理アドレス(ここでの論理アドレスは、データが書き込まれるべき論理アドレスである)を決定し、有効データが書き込まれるべき論理アドレスと、データ書込み要求セットの識別子との間の対応関係を削除し、有効データが書き込まれるべき論理アドレスと、新しいデータ書込み要求セットの識別子との間の対応関係を記憶する。メタデータは、データノードにローカルに記憶される。従って、体系的なガベージコレクションを実行した後、データノードは、メタデータをローカルに直接変更することができ、操作は、異なるノードに対して実行される必要がない。次いで、データノードは、再利用されるべきデータ書込み要求セットの論理ハードディスクアドレスを、ソリッドステートディスクに送信し、ソリッドステートディスクは、論理ハードディスクアドレスに対応しているブロックを無効として記録する。その後内部ガベージコレクションを実行するとき、ソリッドステートディスクは、これらのブロックを直接消去することができ、有効データを複製する必要はない。従って、ソリッドステートディスクに対して内部で実行される書込み増幅の回数は低減される。加えて、データノードは、再利用されるべきデータ書込み要求セットの識別子と、割り当てられた論理ハードディスクアドレスとの間の対応関係を削除する必要がさらにある。ストライプに含まれる全てのデータ書込み要求セットが再利用されるとき、このストライプに含まれるチェックデータはもはや必要とされず、ガベージコレクションノードは、チェックノードに、チェックデータを削除するように命令してよい。
本実施形態で提供される体系的なガベージコレクションは、各データノードが、有効データを、別のローカルデータ書込み要求セット内に結合することを意味する。従って、データノードは、体系的なガベージコレクションを独立して完了し、データを別のデータノードと交換する必要はなく、それによって、データノード間の帯域幅を節約する。
当業者は、本発明の各態様または各態様の可能な実施は、具体的には、システム、方法またはコンピュータプログラム製品として実施されてよいことを理解することができる。従って、本発明の各態様または各態様の可能な実施は、ハードウェアのみの実施形態、ソフトウェアのみの実施形態(ファームウェア、常駐ソフトウェア等を含む)、またはソフトウェアとハードウェアとの組合せの実施形態の形態を採用してよく、本明細書では、これらは一様に“回路”、“モジュール”または“システム”と呼ばれる。加えて、本発明の各態様または各態様の可能な実施は、コンピュータプログラム製品の形態をとってよく、ここで、コンピュータプログラム製品は、コンピュータ可読記憶媒体に記憶されるコンピュータ可読プログラムコードである。
コンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、読出し専用メモリ(ROM)、消去可能プログラマブル読出し専用メモリ(EPROM)および光ディスク等の、電子的、磁気的、光学的、電磁的、赤外線の、または半導電性のシステム、デバイスまたは装置、またはそれらの任意の適切な組合せを含むが、それらに限定されない。
コンピュータ内のプロセッサは、コンピュータ可読記憶媒体に記憶されるコンピュータ可読プログラムコードを読み出し、その結果、プロセッサは、フローチャート内の各ステップまたは各ステップの組合せで特定される機能的動作を実行することができる。
コンピュータ可読プログラムコードは、ユーザのコンピュータ上で完全に実行されてよく、ユーザのコンピュータ上で部分的に実行されてよく、スタンドアロン型ソフトウェアパッケージとして実施されてよく、ユーザのコンピュータ上で部分的に実施されるとともにリモートコンピュータ上で部分的に実施されてよく、または、リモートコンピュータまたはサーバ上で完全に実行されてよい。いくつかの代替的な実施の解決手段では、フローチャート内のステップまたはブロック図内のブロックによって示される機能は、フローチャートまたはブロック図内で示される順序で実施されなくてよいこともまた留意されるべきである。例えば、関係する機能に依存し、且つ順序で示される2つのステップまたはブロックは、実際には同時に実行されてよく、または、時にはこれらのブロックは逆順で実行されてよい。
当業者は、本明細書で開示される実施形態で説明される例と組み合わせて、ユニットおよびアルゴリズムステップは、電子ハードウェアまたはコンピュータソフトウェアと電子ハードウェアとの組合せによって実施されてよいことを認識することができる。機能がハードウェアによって実行されるかソフトウェアによって実行されるかは、技術的解決手段の特定の適用および設計の制約条件に依存する。当業者は、各特定の適用に対して説明された機能を実施するために、異なる方法を使用してよいが、実施は、本発明の保護を超えると考えられるべきではない。
前述の説明は、単に、本発明の具体的な実施であるが、本発明の保護範囲を限定するように意図されない。本発明で開示された技術的範囲内で、当業者によって容易に理解される任意の変更または置換は、本発明の保護範囲に包含されるべきである。従って、本発明の保護範囲は、請求項の保護範囲に従うべきである。
11 ホスト
22 記憶ノード
118 プロセッサ
120 キャッシュ
122 メモリ
124 プログラム
126 バス
128 通信インタフェース
211 コントローラ
222 ソリッドステートディスク
223 インタフェースカード
224 インタフェースカード
225 プロセッサ
226 メモリ
本発明の実施形態は記憶技術の分野に関し、詳細には、データチェック方法および記憶システムに関する。
複数の記憶ノードを含む分散システムにおいて、ホストは、複数の生成されたデータ書込み要求を、複数の記憶ノードに送信する。各記憶ノードは、いくつかのデータ書込み要求を記憶する。データ書込み要求は、データおよびデータが書き込まれるべき記憶ノードの論理アドレス(以下、論理アドレスという)を含む。記憶ノード上で障害が発生したため引き起こされる、記憶ノードに記憶されたデータ書込み要求の損失を防ぐために、ホストは、複数の生成されたデータ書込み要求のチェックデータを計算して、記憶のために、チェックデータを1つ以上の記憶ノードに送信する。チェックデータを計算するために、ホストは、所定のサイズに従って、指定されたサイズに達する複数のデータ書込み要求を分類して、複数のデータユニットを取得し、次いで、複数のデータユニットのチェックユニットを計算する。これらのデータユニットおよびチェックユニットは、ストライプを形成する。最後に、ホストは、記憶のために、各データユニットまたは各チェックユニットを記憶ノードに送信する。これらのデータ書込み要求は、複数のデータユニットにランダムに分類されて、記憶のために異なる記憶ノードに送信される。従って、データ読出し中、複数のデータ書込み要求内で搬送されるデータは、通常、異なる記憶ノードから収集される必要がある。クロス記憶ノード読出し操作は、データ読出し効率に影響を及ぼす。
本発明の第1の態様は記憶システムを提供する。記憶システムは、ホスト、チェックノードおよび複数のデータノードを含む。各データノードは一意の識別子を有する。ホストは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分類するように構成される。各データ書込み要求セットは、同じデータノード識別子を有する1つ以上のデータ書込み要求を含む。各データ書込み要求は、データ、データが書き込まれるべき論理アドレスおよびデータが書き込まれるべきデータノードの識別子を含む。データが書き込まれるべきデータノードは、データまたは論理アドレスに従ってホストによって選択される。あるいは、ホスト11上の複数のデータ書込み要求をトリガしたとき、ユーザは、命令をホスト11に送信して、これらのデータ書込み要求が同じデータノードに書き込まれるように要求する。ホスト11は、ユーザの要求に従って、これらのデータ書込み要求のためにデータノードを選択して、データノードの識別子を各データ書込み要求に追加してよい。指定された数のデータ書込み要求セットの各々における全てのデータ書込み要求のサイズが事前に設定されたデータ量に達するとき、ホストは、指定された数のデータ書込み要求セットのチェックデータを計算する。指定された数のデータ書込み要求セットは、複数のデータ書込み要求セットのサブセットである。ホストは、指定された数のデータ書込み要求セットの各々を、データ書込み要求セットに含まれるデータノード識別子によって示されるデータノードに送信して、チェックデータをチェックノードに送信する。
本発明で提供される記憶システムによると、ホストは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分類する。指定された数のデータ書込み要求セットにおける全てのデータ書込み要求のサイズが事前に設定されたデータ量に達するとき、ホストは、指定された数のデータ書込み要求セットのチェックデータを計算して、記憶のために、チェックデータをチェックノードに送信する。従って、データ信頼性は保証される。各データ書込み要求セットは、同じデータノードに書き込まれるべき複数のデータ書込み要求を含み、各データ書込み要求が書き込まれるべきデータノードは、データ書込み要求内のデータまたはデータ書込み要求内の、データが書き込まれるべき論理アドレスに従って、ホストによって選択される。従って、各データ書込み要求セットは、同じタイプのデータ書込み要求を含む。チェックデータを計算した後、ホストは、各データ書込み要求セットを、データ書込み要求セットに含まれる識別子によって示されるデータノードに送信する。このようにして、同じタイプのデータ書込み要求は、同じデータノードに記憶される。同じタイプのデータ書込み要求においてデータを同時に読み出す可能性は比較的高い。従って、データは、1つのデータノードから読み出されることができ、クロスノード読出し操作は、実行される必要はなく、それによって、データ読出し効率を改善する。
第1の態様を参照すると、第1の態様の第1の実施では、ホストは、識別子を指定された数のデータ書込み要求セット内の各データ書込み要求に割り当て、各データ書込み要求セットの識別子を、データ書込み要求セットに含まれるデータノード識別子によって示されるデータノードに送信するようにさらに構成される。データノードは、データ書込み要求セットおよびデータ書込み要求セットの識別子を受信するように構成される。データノードは、メタデータを作成および記憶するようにさらに構成される。メタデータは、データ書込み要求セットの識別子と、各データ書込み要求内のデータが書き込まれるべき論理アドレスとの間の対応関係と、各データ書込み要求内のデータが書き込まれるべき論理アドレスと、内部オフセットとの間の対応関係とを含む。本発明では、同じタイプのデータ書込み要求は、1つのデータノードに1つのデータ書込み要求セットとして記憶される。従って、データ書込み要求セットに関するメタデータはまた、データノードにローカルに記憶される。ガベージコレクション等の操作がデータ書込み要求セット上でその後実行される場合、メタデータは、ローカルに直接変更されることができる。
第1の態様の第1の実施を参照すると、第1の態様の第2の実施では、記憶システムは、メタデータチェック計算ノードおよびメタデータチェックノードをさらに含む。データノードは、蓄積されたメタデータが事前に設定されたデータ量に達したと決定するとき、メタデータセットおよびデータノードの識別子をメタデータチェック計算ノードに送信するようにさらに構成される。メタデータセットは、事前に設定されたデータ量に達した蓄積されたメタデータを含む。メタデータチェック計算ノードは、メタデータセットおよび複数のデータノードの各々の識別子を受信し、各メタデータセットとデータノード識別子との間の対応関係を記憶し、対応関係に従って、複数の受信されたメタデータセットから、指定された数のメタデータセットを選択するように構成され、ここで、メタデータセットおよび識別子は、データノードによって送信される。指定された数の選択されたメタデータセットは、異なるデータノード識別子に対応している。メタデータチェック計算ノードは、指定された数の選択されたメタデータセットのチェックデータを計算するようにさらに構成される。次いで、メタデータチェック計算ノードは、指定された数のメタデータセットのチェックデータをメタデータチェックノードに送信する。メタデータチェックノードは、指定された数のメタデータセットの各々を記憶するデータノードとは異なる。従って、本発明で提供される記憶システムによると、各データノードに記憶されるメタデータセットの信頼性は保証される。
第1の態様の第1の実施を参照すると、第1の態様の第3の実施では、記憶システムは、ガベージコレクションノードをさらに含む。ガベージコレクションノードは、体系的なガベージコレクション操作を実行するように構成される。具体的には、ガベージコレクションノードは、ストライプの識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係に従って、且つ、データ書込み要求セットのビットマップに従って、最大量の無効データを含むストライプを、複数のストライプから選択し、ここで、対応関係はホストによって送信され、且つ、ビットマップはデータノードによって送信される。本発明では、ストライプは、指定された数のデータ書込み要求セットおよびこれらのデータ書込み要求セットに従って計算されたチェックデータを含む。本発明では、ビットマップは、データ書込み要求セットに含まれる無効データのデータ量を示すために使用される。ガベージコレクションノードは、最大量の無効データを含むストライプを、再利用されるべきストライプとして使用して、ガベージコレクション通知メッセージを、再利用されるべきストライプに含まれる各データ書込み要求セットが配置されるデータノードに送信する。各ガベージコレクション通知メッセージは、データノードに、体系的なガベージコレクションを実行するように命令するために使用される。各ガベージコレクション通知メッセージは、データ書込み要求セットの識別子を含む。ガベージコレクションノードは、無効データを含むストライプを選択して、体系的なガベージコレクション操作を実行する。従って、体系的なガベージコレクションの効率は改善される。
第1の態様の第3の実施を参照すると、第1の態様の第4の実施では、ガベージコレクション通知メッセージを受信した後、データノードは、データ書込み要求セットの識別子およびデータ書込み要求セットの記憶されたビットマップに従って、データ書込み要求セットに対して体系的なガベージコレクション操作を実行する。具体的には、データノードは、データ書込み要求セットの識別子に従って、再利用されるべきデータ書込み要求セットを決定する。次に、データノードは、データ書込み要求セットのビットマップに従って、データ書込み要求セットに含まれる有効データが書き込まれるべき論理アドレスを決定し、有効データが書き込まれるべき論理アドレスと、データ書込み要求セットの識別子との間の対応関係を削除し、有効データが書き込まれるべき論理アドレスと、再結合されたデータ書込み要求セットの識別子との間の対応関係を記憶する。次いで、データノードは、データ書込み要求セットのハードディスク論理アドレスを、ソリッドステートディスクに送信し、ソリッドステートディスクは、ハードディスク論理アドレスに対応するブロックを、無効として記録する。内部ガベージコレクションをその後実行するとき、ソリッドステートディスクは、これらのブロックを直接消去することができ、有効データを複製する必要はない。従って、ソリッドステートディスクに対して内部で実行される書込み増幅の回数は低減される。加えて、本発明で提供される体系的なガベージコレクションは、各データノードが、有効データを別のローカルデータ書込み要求セットに結合することを意味する。従って、データノードは、独立して体系的なガベージコレクションを完了し、データを別のデータノードと交換する必要はなく、それによって、データノード間の帯域幅を節約する。
本発明の第2の態様は、第1の態様または第1の態様の任意の実施の記憶システムに適用されるデータチェック方法を提供する。
本発明の第3の態様はホストを提供し、ホストの機能は、第1の態様の第1の実施で提供される記憶システムの機能と一貫している。
本発明の第4の態様は、記憶システムを提供する。記憶システムは、チェックノード、チェック計算ノードおよび複数のデータノードを含む。各データノードは、データ書込み要求セットをチェック計算ノードに送信するように構成される。データ書込み要求セットは、1つ以上のデータ書込み要求を含み、各データ書込み要求は、データおよびデータが書き込まれるべきデータノードの識別子を含む。データ書込み要求セットのサイズは、事前に設定されたデータ量と等しい。チェック計算ノードは、複数のデータ書込み要求セットを受信し、複数のデータ書込み要求セットから、指定された数のデータ書込み要求セットを選択するように構成される。指定された数のデータ書込み要求セットは、複数のデータ書込み要求セットのサブセットであり、指定された数のデータ書込み要求セットは、異なるデータノード識別子を含む。次いで、チェック計算ノードは、指定された数のデータ書込み要求セットのチェックデータを計算し、チェックデータをチェックノードに送信する。チェックノードは、指定された数のデータ書込み要求セットの各々が配置されるデータノードとは異なる。
本発明で提供される記憶システムによると、全ての蓄積されたデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、各データノードは、これらのデータ書込み要求を、チェック計算ノードに、1つのデータ書込み要求セットとして送信する。チェック計算ノードは、複数の受信されたデータ書込み要求セットから、指定された数のデータ書込み要求セットを選択し、指定された数のデータ書込み要求セットのチェックデータを計算し、記憶のために、チェックデータをチェックノードに送信する。従って、データ信頼性は保証される。
第4の態様を参照すると、第4の態様の第1の実施では、各データ書込み要求は、データが書き込まれるべき論理アドレスをさらに含み、データが書き込まれるべきデータノードは、データまたはデータが書き込まれるべき論理アドレスに従って、記憶システム内のホストによって選択され、または、データが書き込まれるべきデータノードは、ホストによって選択されなくてよいが、データ書込み要求がホスト上でトリガされたときにユーザによって直接指定される。各データノードは、ホストによって送信された複数のデータ書込み要求を受信するようにさらに構成される。各データ書込み要求セットは、同じデータノード識別子を有する複数のデータ書込み要求を含み、各データ書込み要求が書き込まれるべきデータノードは、データ書込み要求内のデータまたはデータ書込み要求内の、データが書き込まれるべき論理アドレスに従って、ホストによって選択される。従って、各データ書込み要求セットは、同じタイプのデータ書込み要求を含む。同じタイプのデータ書込み要求においてデータを同時に読み出す可能性は比較的高い。従って、データは、1つのデータノードから読み出されることができ、クロスノード読出し操作は、実行される必要はなく、それによって、データ読出し効率を改善する。
第4の態様の第1の実施を参照すると、第4の態様の第2の実施では、データノードは、識別子を、記憶されたデータ書込み要求セットに割り当てて、データ書込み要求セットの識別子をチェック計算ノードに送信するようにさらに構成される。次いで、データノードは、メタデータを作成および記憶する。メタデータは、データ書込み要求セットの識別子と、各データ書込み要求内のデータが書き込まれるべき論理アドレスとの間の対応関係と、各データ書込み要求内のデータが書き込まれるべき論理アドレスと、内部オフセットとの間の対応関係とを含む。本発明では、同じタイプのデータ書込み要求は、1つのデータノードに1つのデータ書込み要求セットとして記憶される。従って、データ書込み要求セットに関するメタデータはまた、データノードにローカルに記憶される。ガベージコレクション等の操作がデータ書込み要求セット上でその後実行される場合、メタデータは、ローカルに直接変更されることができる。
第4の態様の第2の実施を参照すると、第4の態様の第3の実施では、記憶システムは、メタデータチェック計算ノードおよびメタデータチェックノードをさらに含む。データノードは、蓄積されたメタデータが事前に設定されたデータ量に達したと決定するとき、メタデータセットおよびデータノードの識別子をメタデータチェック計算ノードに送信するようにさらに構成される。メタデータセットは、事前に設定されたデータ量に達した蓄積されたメタデータを含む。メタデータチェック計算ノードは、メタデータセットおよびデータノードによって送信された各データノードの識別子を受信し、各メタデータセットとデータノード識別子との間の対応関係を記憶するように構成される。加えて、メタデータチェック計算ノードは、対応関係に従って、複数の受信されたメタデータセットから、指定された数のメタデータセットを選択する。指定された数のメタデータセットは、異なるデータノード識別子に対応している。メタデータチェック計算ノードは、指定された数のメタデータセットのチェックデータを計算して、指定された数のメタデータセットのチェックデータをメタデータチェックノードに送信する。メタデータチェックノードは、指定された数のメタデータセットの各々を記憶するデータノードとは異なる。従って、本発明で提供される記憶システムによると、各データノードに記憶されるメタデータセットの信頼性は保証される。
第4の態様の第2の実施を参照すると、第4の態様の第4の実施では、記憶システムは、ガベージコレクションノードをさらに含む。チェック計算ノードは、識別子をストライプに割り当てるようにさらに構成される。ストライプは、指定された数のデータ書込み要求セットおよび指定された数のデータ書込み要求セットのチェックデータを含む。次いで、チェック計算ノードは、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係を、ガベージコレクションノードに送信する。各データノードは、データ書込み要求セットの記憶されたビットマップを、ガベージコレクションノードに送信するようにさらに構成される。ビットマップは、データ書込み要求セット内の無効データのデータ量を示すために使用される。ガベージコレクションノードは、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係に従って、且つ、各データ書込み要求セットのビットマップに従って、最大量の無効データを含むストライプを、複数のストライプから選択し、ガベージコレクション通知メッセージを、ストライプに含まれる各データ書込み要求セットが配置されるデータノードに送信するように構成される。各ガベージコレクション通知メッセージは、データ書込み要求セットの識別子を含む。ガベージコレクションノードは、無効データを含むストライプを選択して、体系的なガベージコレクション操作を実行する。従って、体系的なガベージコレクションの効率は改善される。
第4の態様の第4の実施を参照すると、第4の態様の第5の実施では、ガベージコレクション通知メッセージを受信した後、データノードは、データ書込み要求セットの識別子およびデータ書込み要求セットの記憶されたビットマップに従って、データ書込み要求セットに対して体系的なガベージコレクション操作を実行する。具体的には、データノードは、データ書込み要求セットの識別子に従って、再利用されるべきデータ書込み要求セットを決定する。次に、データノードは、データ書込み要求セットのビットマップに従って、データ書込み要求セットに含まれる有効データが書き込まれるべき論理アドレスを決定し、有効データが書き込まれるべき論理アドレスと、データ書込み要求セットの識別子との間の対応関係を削除し、有効データが書き込まれるべき論理アドレスと、再結合されたデータ書込み要求セットの識別子との間の対応関係を記憶する。次いで、データノードは、データ書込み要求セットのハードディスク論理アドレスを、ソリッドステートディスクに送信し、ソリッドステートディスクは、ハードディスク論理アドレスに対応するブロックを、無効として記録する。内部ガベージコレクションをその後実行するとき、ソリッドステートディスクは、これらのブロックを直接消去することができ、有効データを複製する必要はない。従って、ソリッドステートディスクに対して内部で実行される書込み増幅の回数は低減される。加えて、本発明で提供される体系的なガベージコレクションは、各データノードが、有効データを別のローカルデータ書込み要求セットに結合することを意味する。従って、データノードは、独立して体系的なガベージコレクションを完了し、データを別のデータノードと交換する必要はなく、それによって、データノード間の帯域幅を節約する。
本発明の第5の態様は、第4の態様または第4の態様の任意の実施の記憶システムに適用されるデータチェック方法を提供する。
本発明の第6の態様は、記憶システムを提供する。記憶システムは、ホスト、チェック計算ノードおよび複数のデータノードを含む。各データノードは一意の識別子を有する。ホストは、複数の生成されたデータ書込み要求をチェック計算ノードに送信する。各データ書込み要求セットは、同じデータノード識別子を有する1つ以上のデータ書込み要求を含む。各データ書込み要求は、データ、データが書き込まれるべき論理アドレスおよびデータが書き込まれるべきデータノードの識別子を含む。データが書き込まれるべきデータノードは、データまたは論理アドレスに従って、ホストによって選択され、または、データが書き込まれるべきデータノードは、ホストによって選択されなくてよいが、データ書込み要求がホスト上でトリガされたときにユーザによって直接指定される。チェック計算ノードは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を、複数のデータ書込み要求セットに分類するように構成される。指定された数のデータ書込み要求セットの各々における全てのデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、チェック計算ノードは、指定された数のデータ書込み要求セットのチェックデータを計算する。指定された数のデータ書込み要求セットは、複数のデータ書込み要求セットのサブセットである。チェック計算ノードは、指定された数のデータ書込み要求セットの各々を、データ書込み要求セットに含まれるデータノード識別子によって示されるデータノードに送信する。チェック計算ノードは、チェックデータを記憶する。
本発明で提供される記憶システムによると、チェック計算ノードは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分類する。指定された数のデータ書込み要求セットにおける全てのデータ書込み要求のサイズが事前に設定されたデータ量に達するとき、チェック計算ノードは、指定された数のデータ書込み要求セットのチェックデータを計算して、記憶のために、チェックデータをチェックノードに送信する。従って、データ信頼性は保証される。各データ書込み要求セットは、同じデータノードに書き込まれるべき複数のデータ書込み要求を含み、各データ書込み要求が書き込まれるべきデータノードは、データ書込み要求内のデータまたはデータ書込み要求内の、データが書き込まれるべき論理アドレスに従って、ホストによって選択される。従って、各データ書込み要求セットは、同じタイプのデータ書込み要求を含む。チェックデータを計算した後、チェック計算ノードは、各データ書込み要求セットを、データ書込み要求セットに含まれる識別子によって示されるデータノードに送信する。このようにして、同じタイプのデータ書込み要求は、同じデータノードに記憶される。同じタイプのデータ書込み要求においてデータを同時に読み出す可能性は比較的高い。従って、データは、1つのデータノードから読み出されることができ、クロスノード読出し操作は、実行される必要はなく、それによって、データ読出し効率を改善する。
第6の態様を参照すると、第6の態様の第1の実施では、チェック計算ノードは、識別子を指定された数のデータ書込み要求セット内の各データ書込み要求に割り当て、各データ書込み要求セットの識別子を、データ書込み要求セットに含まれるデータノード識別子によって示されるデータノードに送信するようにさらに構成される。データノードは、データ書込み要求セットおよびデータ書込み要求セットの識別子を受信するように構成される。データノードは、メタデータを作成および記憶するようにさらに構成される。メタデータは、データ書込み要求セットの識別子と、各データ書込み要求内のデータが書き込まれるべき論理アドレスとの間の対応関係と、各データ書込み要求内のデータが書き込まれるべき論理アドレスと、内部オフセットとの間の対応関係とを含む。本発明では、同じタイプのデータ書込み要求は、1つのデータノードに1つのデータ書込み要求セットとして記憶される。従って、データ書込み要求セットに関するメタデータはまた、データノードにローカルに記憶される。ガベージコレクション等の操作がデータ書込み要求セット上でその後実行される場合、メタデータは、ローカルに直接変更されることができる。
第6の態様の第1の実施を参照すると、第6の態様の第2の実施では、記憶システムは、メタデータチェック計算ノードおよびメタデータチェックノードをさらに含む。データノードは、蓄積されたメタデータが事前に設定されたデータ量に達したと決定するとき、メタデータセットおよびデータノードの識別子をメタデータチェック計算ノードに送信するようにさらに構成される。メタデータセットは、事前に設定されたデータ量に達した蓄積されたメタデータを含む。メタデータチェック計算ノードは、メタデータセットおよび複数のデータノードの各々の識別子を受信し、各メタデータセットとデータノード識別子との間の対応関係を記憶し、対応関係に従って、複数の受信されたメタデータセットから、指定された数のメタデータセットを選択するように構成され、ここで、メタデータセットおよび識別子は、データノードによって送信される。指定された数の選択されたメタデータセットは、異なるデータノード識別子に対応している。メタデータチェック計算ノードは、指定された数の選択されたメタデータセットのチェックデータを計算するようにさらに構成される。次いで、メタデータチェック計算ノードは、指定された数のメタデータセットのチェックデータをメタデータチェックノードに送信する。メタデータチェックノードは、指定された数のメタデータセットの各々を記憶するデータノードとは異なる。従って、本発明で提供される記憶システムによると、各データノードに記憶されるメタデータセットの信頼性は保証される。
第6の態様の第1の実施を参照すると、第6の態様の第3の実施では、記憶システムは、ガベージコレクションノードをさらに含む。ガベージコレクションノードは、体系的なガベージコレクション操作を実行するように構成される。具体的には、ガベージコレクションノードは、ストライプの識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係に従って、且つ、データ書込み要求セットのビットマップに従って、最大量の無効データを含むストライプを、複数のストライプから選択し、ここで、対応関係はチェック計算ノードによって送信され、且つ、ビットマップはデータノードによって送信される。本発明では、ストライプは、指定された数のデータ書込み要求セットおよびこれらのデータ書込み要求セットに従って計算されたチェックデータを含む。本発明では、ビットマップは、データ書込み要求セットに含まれる無効データのデータ量を示すために使用される。ガベージコレクションノードは、最大量の無効データを含むストライプを、再利用されるべきストライプとして使用して、ガベージコレクション通知メッセージを、再利用されるべきストライプに含まれる各データ書込み要求セットが配置されるデータノードに送信する。各ガベージコレクション通知メッセージは、データノードに、体系的なガベージコレクションを実行するように命令するために使用される。各ガベージコレクション通知メッセージは、データ書込み要求セットの識別子を含む。ガベージコレクションノードは、無効データを含むストライプを選択して、体系的なガベージコレクション操作を実行する。従って、体系的なガベージコレクションの効率は改善される。
第6の態様の第3の実施を参照すると、第6の態様の第4の実施では、ガベージコレクション通知メッセージを受信した後、データノードは、データ書込み要求セットの識別子およびデータ書込み要求セットの記憶されたビットマップに従って、データ書込み要求セットに対して体系的なガベージコレクション操作を実行する。具体的には、データノードは、データ書込み要求セットの識別子に従って、再利用されるべきデータ書込み要求セットを決定する。次に、データノードは、データ書込み要求セットのビットマップに従って、データ書込み要求セットに含まれる有効データが書き込まれるべき論理アドレスを決定し、有効データが書き込まれるべき論理アドレスと、データ書込み要求セットの識別子との間の対応関係を削除し、有効データが書き込まれるべき論理アドレスと、再結合されたデータ書込み要求セットの識別子との間の対応関係を記憶する。次いで、データノードは、データ書込み要求セットのハードディスク論理アドレスを、ソリッドステートディスクに送信し、ソリッドステートディスクは、ハードディスク論理アドレスに対応するブロックを、無効として記録する。内部ガベージコレクションをその後実行するとき、ソリッドステートディスクは、これらのブロックを直接消去することができ、有効データを複製する必要はない。従って、ソリッドステートディスクに対して内部で実行される書込み増幅の回数は低減される。加えて、本発明で提供される体系的なガベージコレクションは、各データノードが、有効データを別のローカルデータ書込み要求セットに結合することを意味する。従って、データノードは、独立して体系的なガベージコレクションを完了し、データを別のデータノードと交換する必要はなく、それによって、データノード間の帯域幅を節約する。
本発明の第7の態様は、第6の態様または第76の態様の任意の実施の記憶システムに適用されるデータチェック方法を提供する。
本発明の実施形態における技術的解決手段をより明確に説明するために、以下では、実施形態のために必要とされる添付図面を簡潔に説明する。
図1は、本発明の実施形態に係る、記憶システムの構成図である。
図2は、本発明の実施形態に係る、ホストの構造図である。
図3は、本発明の実施形態に係る、フラッシュメモリアレイの構造図である。
図4は、本発明の実施形態に係る、データチェック方法の概略フローチャートである。
図5は、本発明の実施形態に係る、別のデータチェック方法の概略フローチャートである。
図6は、本発明の実施形態に係る、さらに別のデータチェック方法の概略フローチャートである。
図7は、本発明の実施形態に係る、体系的なガベージコレクション方法の概略フローチャートである。
本発明の実施形態は、データチェック方法および記憶システムを提供し、その結果、データ信頼性を保証することに加えて、同じタイプのデータは同じ記憶ノードに記憶されることができ、データは1つの記憶ノードのみから読み出されることができ、それによって、データ読出し効率を改善する。
図1は、本発明の実施形態に係る、記憶システム10の構成図を示す。図1に示される記憶システム10は、ホスト11および複数の記憶ノード22を含む。図1は、単に、説明のための例として使用されるが、ホスト11が記憶ノード22と通信することができる限り、カスケードツリーネットワーキングまたはリングネットワーキング等の、特定のネットワーキングモードを限定しない。
ホスト11は、サーバまたはデスクトップコンピュータ等の任意のコンピューティングデバイスを含んでよい。ユーザは、ホスト11を使用することによって、読出しまたは書込み命令をトリガして、データ書込み要求またはデータ読出し要求を記憶ノード22に送信してよい。本実施形態では、ホスト11は任意の記憶ノード22と通信してよく、任意の2つの記憶ノード22はまた、互いに通信してよい。
図2に示されるように、ホスト11は、プロセッサ118、キャッシュ120、メモリ122、通信バス(略してバス)126および通信インタフェース128を主に含む。プロセッサ118、キャッシュ120、メモリ122および通信インタフェース128は、通信バス126を使用することによって相互通信を実施する。
通信インタフェース128は、記憶ノード22と通信するように構成される。
メモリ122は、プログラム124を記憶するように構成される。メモリ122は、高速RAMメモリを含んでよいとともに、不揮発性メモリ、例えば、少なくとも1つの磁気ディスクメモリをさらに含んでよい。メモリ122は、ランダムアクセスメモリ、磁気ディスク、ハードディスク、ソリッドステートディスクまたは不揮発性メモリ等の、プログラムコードを記憶することができる任意の機械可読媒体であってよいことは理解されることができる。
プログラム124は、プログラムコードを含んでよい。
キャッシュ120は、アプリケーションサーバ10から受信されるデータまたは記憶ノード22から読み出されるデータをキャッシュするように構成される。キャッシュ120は、RAM、ROM、フラッシュメモリまたはソリッドステートディスク(SSD)等の、データを記憶することができる任意の機械可読媒体であってよい。これはここでは限定されない。
加えて、メモリ122およびキャッシュ120は共に統合されてよく、または、分離して配置されてよく、これは本発明の本実施形態では限定されない。
プロセッサ118は、中央処理装置(CPU)であってよいとともに、データ書込み要求等を生成および処理するように構成される。
記憶ノード22は、ディスクアレイ、フラッシュメモリアレイまたは記憶サーバであってよい。ディスクアレイは、少なくとも1つのコントローラおよび複数のディスクを含む記憶デバイスである。フラッシュメモリアレイは、少なくとも1つのコントローラおよび複数のソリッドステートディスク(SSD)を含む記憶デバイスである。ソリッドステートディスクは、フラッシュメモリチップを記憶媒体として使用するメモリであり、ソリッドステートドライブ(SSD)とも呼ばれる。加えて、記憶ノード22はさらに、記憶サーバであってよく、記憶サーバは、少なくとも1つのソリッドステートディスクを含む。
フラッシュメモリアレイが例として使用される。図3に示されるように、記憶ノード22は、コントローラ221および1つ以上のソリッドステートディスク222を含む。コントローラ221は、少なくとも、インタフェース223、インタフェース224、プロセッサ225およびメモリ226を含む。
インタフェース223は、ホスト11と通信するように構成される。インタフェース224は、ソリッドステートディスク222と通信するように構成される。プロセッサ225は、中央処理装置(CPU)であってよい。
プロセッサ225は、ホスト11から、データ書込み要求またはデータ読出し要求を受信して、データ書込み要求またはデータ読出し要求を処理するように構成される。プロセッサ225は、データ書込み要求内のデータをソリッドステートディスク222にさらに送信してよい。
メモリ226はプログラムを記憶するように構成される。加えて、メモリ226は、ホスト11から受信されたデータ書込み要求またはソリッドステートディスク222から読み出されたデータを一時的に記憶するようにさらに構成される。ホストによって送信された複数のデータ書込み要求を受信した後、コントローラ221は、複数のデータ書込み要求をメモリ226に一時的に記憶してよい。複数のデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、メモリ226に記憶される複数のデータ書込み要求は、チェック計算ノードに送信される。メモリ226は、ランダムアクセスメモリ(英語:random-access memory, RAM)を含む。任意で、メモリ226は、不揮発性メモリ(英語:non-volatile memory)、例えば、少なくとも1つの磁気メモリをさらに含む。メモリ226が、ランダムアクセスメモリ(Random-Access Memory, RAM)、磁気ディスク、ハードディスク、ソリッドステートディスク(Solid State Disk, SSD)または不揮発性メモリ等の、プログラムコードを記憶することができる任意の機械可読媒体であってよいことは理解されることができる。
本実施形態における複数の記憶ノードでは、ホスト11によって送信されたデータ書込み要求を記憶するように構成される記憶ノードは、データノードと呼ばれ、複数のデータ書込み要求のチェックデータを計算するように構成される記憶ノードは、チェック計算ノードと呼ばれ、複数のデータ書込み要求のチェックデータを記憶するように構成される記憶ノードは、チェックノードと呼ばれ、メタデータのチェックデータを計算するように構成される記憶ノードは、メタデータチェック計算ノードと呼ばれ、体系的なガベージコレクションを実行するように構成されるノードは、ガベージコレクションノードと呼ばれる。しかしながら、このような分割は絶対的ではない。例えば、チェックデータを記憶するチェックノードはまた、データ書込み要求を記憶するためのデータノードとして使用されてもよい。
本発明は、少なくとも2つの適用シナリオを提供する。適用シナリオでは、ホスト11は、複数のデータ書込み要求のチェックデータを計算する機能を有する。例えば、ホスト11は、データ書込み要求に含まれる、データが書き込まれるべきデータノードの識別子に従って、複数のデータ書込み要求を、複数のデータ書込み要求セットに分類する。各セットは、同じデータノードに書き込まれるべきデータ書込み要求を含む。一部または全てのセットにおける全てのデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、ホスト11は、これらのデータ書込み要求セットのチェックデータを計算する。
別の適用シナリオでは、ホスト11は、複数のデータ書込み要求のチェックデータを計算する機能を有せず、チェックデータを計算する操作は、記憶ノード内のチェック計算ノードによって実施される。ホスト11は、データ書込み要求内で搬送されるデータが書き込まれるべきデータノードの識別子に従って、各データ書込み要求をデータノードに送信する。各データノードは、ホスト11によって送信された複数のデータ書込み要求を受信する。データ書込み要求セット(データ書込み要求セットは、複数のデータ書込み要求を含む)のサイズが事前に設定されたデータ量に達したとき、データノードは、データ書込み要求セットをチェック計算ノードに送信し、チェック計算ノードは、複数のデータ書込み要求セットのチェックデータを計算する。
以下では、前述の2つの適用シナリオに基づいて、データチェック方法を別々に議論する。
図4は、第1のシナリオに適用されるデータチェック方法のフローチャートである。図4に示されるように、方法は以下のステップを含む。例えば、ステップS101からステップS104は、ホスト11内のプロセッサ118によって実行されてよい。
S101、ホスト11は、複数のデータ書込み要求を生成し、ここで、各データ書込み要求は、データ、データが書き込まれるべきデータノードの識別子およびデータが書き込まれるべき論理アドレスを含む。データが書き込まれるべき論理アドレスは、論理ユニットの識別子、論理ブロックアドレス(LBA)および長さを含む。論理ユニットの識別子は、データが書き込まれるべき論理ユニットを示すために使用される。論理ブロックアドレスは、データが論理ユニット内で配置される位置を示すために使用される。長さは、データのサイズを示す。データが書き込まれるべきデータノードの識別子は、データが書き込まれるべきデータノードを示すために使用される。データが書き込まれるべきデータノードは、データまたはデータが書き込まれるべき論理アドレスに従って、記憶システム10内の複数のデータノードからホスト11によって選択される。
具体的には、最初に、ホスト11は、記憶システム10内のデータノードに関する情報を事前に収集する。データノードに関する情報は、記憶システム10に含まれるデータノードの数および各データノードの識別子を含む。データノードの識別子は、データノードを一意に識別するために使用される。例えば、記憶システム10は、5つのデータノードを含み、データノードの識別子は、それぞれ、A、B、C、DおよびEである。ホスト11は、データノードの識別子を取得するために、各データノードにクエリ要求を送信してよく、または、各データノードは、データノードの識別子をホスト11に積極的に報告してよい。あるいは、記憶システム10においてプライマリノードが指定されてよく、プライマリノードは、データノードの識別子を収集して、データノードの識別子をホスト11に報告する。
次いで、ホスト11は、データが書き込まれるべきデータノードを決定する。実施では、ホスト11は、データが書き込まれるべき論理アドレスに従って、データが書き込まれるべきデータノードを決定する。例えば、ホスト11は、各データ書込み要求に含まれる、データが書き込まれるべき論理アドレスを入力エントリとして使用し、事前に設定されたハッシュアルゴリズムを使用することによって、ハッシュ値を取得する。ハッシュ値は、データノードの識別子に一意に対応している。加えて、ホスト11は、ハッシュアルゴリズムまたは剰余演算を使用することによって、データノードの識別子をさらに決定してよい。データノードの識別子を決定するためのアルゴリズムは、データノードの識別子が論理アドレスに従って一意に決定されることができる限りは、本実施形態では限定されない。別の実施では、ホスト11は、データに従って、データが書き込まれるべきデータノードを決定する。例えば、ホスト11は、データを入力エントリとして使用し、事前に設定されたハッシュアルゴリズムを使用することによって、ハッシュ値を取得する。ハッシュ値は、データノードの識別子に一意に対応している。同様に、ホスト11は、ハッシュアルゴリズムまたは剰余演算を使用することによって、データノードの識別子をさらに決定してよい。さらに別の実施では、ホスト11は、データ書込み要求をトリガするユーザに従って、複数のデータ書込み要求を分類し、同じユーザによってトリガされたデータ書込み要求について同じデータノードを選択する。あるいは、ホスト11は、データタイプに従って、これらのデータ書込み要求を分類し、同じタイプのデータについて同じデータノードを選択してよい。
データについてデータノードを選択した後、ホスト11は、データノードの識別子を、データを搬送するデータ書込み要求に書き込む。データノードの識別子は、データ書込み要求のヘッダに配置されてよく、または、データ書込み要求のペイロード(英語:payload)であってよい。
ホスト11上で複数のデータ書込み要求をトリガしたとき、ユーザは、命令をホスト11に送信して、これらのデータ書込み要求が同じデータノードに書き込まれるように要求する。ホスト11は、ユーザの要求に従って、これらのデータ書込み要求に対してデータノードを選択し、データノードの識別子を各データ書込み要求に追加してよい。
各データ書込み要求内のデータノードの識別子は、データまたはデータが書き込まれるべき論理アドレスに従って、ホスト11によって割り当てられ、ここで、データまたは論理アドレスは、データ書込み要求に含まれる。従って、同じ識別子を有するデータ書込み要求は、同じタイプのデータ書込み要求である。これらのデータ書込み要求で搬送されるデータを同時に読み出す可能性は比較的高い。
S102、ホストは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分類し、ここで、各セットは、同じデータノード識別子を有する複数のデータ書込み要求を含む。
実際の実施では、複数のデータ書込み要求は、異なる位置に記憶される必要はないことは留意されるべきである。ここでの“分類”は、単に論理的なものであり、複数のデータ書込み要求は、異なるデータノード識別子に従って分類される。例えば、データ書込み要求セット内の複数のデータ書込み要求は、データノードの識別子Aを含み、別のデータ書込み要求セット内の複数のデータ書込み要求は、データノードの識別子Bを含み、さらに別のデータ書込み要求セット内の複数のデータ書込み要求は、データノードの識別子Cを含む。
S103、指定された数のデータ書込み要求セットの各々における全てのデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、ホスト11は、指定された数のデータ書込み要求セットのチェックデータを計算する。
一般に、記憶システム10は、いくつかのデータノードを含む。対応して、ホスト11はまた、いくつかのデータ書込み要求セットを有する。生成されたデータ書込み要求が増加するにつれて、各データ書込み要求セットのサイズは蓄積される。ホスト11は、そのサイズが事前に設定されたデータ量に達したデータ書込み要求セットから、指定された数のデータ書込み要求セットを選択し、指定された数のデータ書込み要求セットのチェックデータを計算する必要がある。事前に設定されたデータ量は事前に設定され、例えば、16 KBである。指定された数は、記憶システム10によって事前に設定されたチェックモードに従って決定される。
事前に設定されたチェックモードは、5+1モード、6+2モード等を含む。5+1モードでは、1個のチェックデータは、5個のデータ書込み要求セットに従って生成される。6+2モードでは、2個のチェックデータは、6個のデータ書込み要求セットに従って生成される。5+1モードが例として使用される。ホスト11は、そのサイズが事前に設定されたデータ量に達した複数のデータ書込み要求セットから、5個のデータ書込み要求セットを選択し、次いで、5個のデータ書込み要求セットのチェックデータを計算する。5個のデータ書込み要求セットおよびチェックデータは、ストライプ(英語:stripe)を形成する。そのサイズが事前に設定されたデータ量に達したデータ書込み要求セットは、ストライプのデータユニットである。
S104、ホスト11は、指定された数のデータ書込み要求セットの各々を、データ書込み要求セットに含まれる識別子によって示されるデータノードに送信する。
各データ書込み要求セット内の全てのデータ書込み要求は同じデータノード識別子を含み、従って、ホストは、識別子に従って、各データ書込み要求セットを、識別子によって示されるデータノードに送信することができることは、前述の議論からわかる。
S105、ホスト11は、記憶システム10から記憶ノードを選択して、チェックデータを記憶し、チェックデータを、選択された記憶ノードに送信し、ここで、チェックデータを記憶するように構成される記憶ノードは、ストライプに含まれる各データ書込み要求セットが配置されるデータノードとは異なる。説明を容易にするために、チェックデータを記憶する記憶ノードは、チェックノードと呼ばれる。
ホスト11は、残りの記憶ノード(データ書込み要求セットを記憶するように構成されるデータノードを除く)から、1つ以上の記憶ノードを選択して、チェックデータを記憶してよい。一般に、ストライプ内のデータ書込み要求セットおよびチェックデータは、同じ記憶ノードに記憶されることはできない。これは、データ書込み要求セットとチェックデータの両方が、記憶ノード上で障害が発生したときに失われることを防ぐために意図される。しかしながら、実際の適用では、複数のストライプは通常、ホスト11内で構成されてよい。ストライプ内のチェックデータを記憶するように構成される選択された記憶ノードは、そのストライプ内のデータ書込み要求セットを記憶する記憶ノードであることはできないが、別のストライプ内のデータ書込み要求セットを記憶する記憶ノードであってよい。本実施形態では、記憶ノードは、データ書込み要求セットまたはチェックデータの記憶専用であるようには限定されない。
加えて、ホスト11は、ストライプ識別子を各ストライプに割り当てる。異なるストライプは異なるストライプ識別子を有する。さらに、ホストは、識別子を、各ストライプに含まれるデータ書込み要求セットおよびチェックデータに割り当て、データ書込み要求セットの識別子を、データ書込み要求セットが配置されるデータノードに送信する。ホスト11は、各ストライプのストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係と、ストライプ識別子と、チェックデータの識別子との間の対応関係とを記録する。
図4に示されるデータチェック方法によると、ホスト11は、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分類する。指定された数のデータ書込み要求セットにおける全てのデータ書込み要求のサイズが事前に設定されたデータ量に達するとき、ホスト11は、指定された数のデータ書込み要求セットのチェックデータを計算して、記憶のために、チェックデータをチェックノードに送信する。従って、データ信頼性は保証される。各データ書込み要求セットは、同じデータノードに書き込まれるべき複数のデータ書込み要求を含み、各データ書込み要求が書き込まれるべきデータノードは、データ書込み要求内のデータまたはデータ書込み要求内の、データが書き込まれるべき論理アドレスに従って、ホストによって選択される。従って、各データ書込み要求セットは、同じタイプのデータ書込み要求を含む。チェックデータを計算した後、ホスト11は、各データ書込み要求セットを、データ書込み要求セットに含まれる識別子によって示されるデータノードに送信する。このようにして、同じタイプのデータ書込み要求は、同じデータノードに記憶される。同じタイプのデータ書込み要求においてデータを同時に読み出す可能性は比較的高い。従って、データは、1つのデータノードから読み出されることができ、クロスノード読出し操作は、実行される必要はなく、それによって、データ読出し効率を改善する。
第1のシナリオに適用されるデータチェック方法は、別の実施を有する。本実施と図4に示される実施との間の差は、本実施では、チェック計算ノードが、データ書込み要求に含まれるデータノード識別子に従って、複数の受信されたデータ書込み要求を、複数のデータ書込み要求セットに分類し、指定された数のデータ書込み要求セットのサイズが事前に設定されたデータ量に達したとき、チェックデータを計算することである。これらの操作は、図4に示される実施では、ホスト11によって実行される。具体的には、図5に示されるように、データチェック方法は、以下のステップで実施されてよい。
S401、このステップは、図4に示されるステップS101と同様であり、詳細はここでは繰り返されない。
S402、ホスト11は、生成されたデータ書込み要求をチェック計算ノードに送信する。
S403、チェック計算ノードは、データ書込み要求に含まれるデータノード識別子に従って、複数のデータ書込み要求を複数のデータ書込み要求セットに分類し、ここで、各セットは、同じデータノード識別子を有する複数のデータ書込み要求を含む。このステップと図4におけるステップS102との間の差は、このステップがチェック計算ノードによって実行されることである。残りの部分は図4に示されるステップS102のものと同様であり、詳細はここでは繰り返されない。
S404、指定された数のデータ書込み要求セットの各々における全てのデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、チェック計算ノードは、指定された数のデータ書込み要求セットのチェックデータを計算する。このステップと図4におけるステップS103との間の差は、このステップがチェック計算ノードによって実行されることである。残りの部分は、図4に示されるステップS103のものと同様であり、詳細はここでは繰り返されない。
S405、チェック計算ノードは、指定された数のデータ書込み要求セットの各々を、データ書込み要求セットに含まれる識別子によって示されるデータノードに送信する。このステップと図4におけるステップS104との間の差は、このステップがチェック計算ノードによって実行されることである。残りの部分は、図4に示されるステップS104のものと同様であり、詳細はここでは繰り返されない。
チェックデータを計算した後、チェック計算ノードは、チェックデータをローカルに直接記憶することができ、記憶のために、チェックデータを別の記憶ノードに転送する必要はない。1個より多いチェックデータが、事前に設定されたチェックモードに従って計算される場合、チェック計算ノードは、別のチェックデータを記憶するために、記憶システム10から記憶ノードを選択してよい。選択方式は、図4に示されるステップS105のものと同様であり、詳細はここでは繰り返されない。図6は、第2のシナリオに適用されるデータチェック方法のフローチャートである。図6に示されるように、方法は以下のステップを含む。
S201、ホスト11は、複数のデータ書込み要求を生成し、ここで、各データ書込み要求は、データ、データが書き込まれるべきデータノードの識別子およびデータが書き込まれるべき論理アドレスを含む。ステップS201の内容は、図4に示される方法におけるステップS101のものと同様であり、詳細はここでは繰り返されない。
S202、ホスト11は、各データ書込み要求を、データ書込み要求に含まれる、データが書き込まれるべきデータノードの識別子によって示されるデータノードに送信する。
S203、データノードは、ホスト11によって送信された複数のデータ書込み要求を受信して、データ書込み要求をメモリ226に書き込む。具体的には、このステップは、コントローラ221におけるプロセッサ225によって実行されてよい。
S204、データノードのメモリ226に記憶された全てのデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、データノードは、データ書込み要求セットを、チェック計算ノードに送信する。データ書込み要求セットは、複数のデータ書込み要求を含み、複数のデータ書込み要求のサイズは、事前に設定されたデータ量に達する。
具体的には、このステップは、コントローラ221におけるプロセッサ225によって実行されてよい。データノードがホスト11によって送信されたデータ書込み要求を受信するたびに、データノードは、データ書込み要求を、メモリ226に書き込む。従って、メモリ226では、データ書込み要求は蓄積される。蓄積されたデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、データノードは、これらの蓄積されたデータ書込み要求を1つのセットとして、チェック計算ノードに送信する。事前に設定されたデータ量は、記憶システム10によって事前に設定され、例えば、16 KBである。
任意のデータノードのメモリ226内の全てのデータ書込み要求は、メモリ226内の全てのデータ書込み要求のサイズが事前に設定されたデータ量に達する限り、チェック計算ノードに送信される。別のデータノードのメモリ内の蓄積されたデータ書込み要求のサイズが事前に設定されたデータ量に達したかどうかは考慮されない。実際の適用では、データノードは、蓄積されたデータ書込み要求に対して時間制限要件を有してよい。事前に設定された時間制限が切れると、メモリ226内の全てのデータ書込み要求のサイズが事前に設定されたデータ量に達しない場合、0または特別なマークを持つ他のデータが、補完のために使用されてよい。
前述では、1つのデータノードのシナリオを説明した。記憶システム10内の複数のデータノードについては、各データノード22は、そのサイズが事前に設定されたデータ量に達したデータ書込み要求セットをローカルに収集し、次いで、これらのデータ書込み要求セットを、チェック計算ノードに送信する。チェック計算ノードは、複数の受信されたデータ書込み要求セットに従って、チェックデータを計算して、ストライプを形成する。
S205、チェック計算ノードは、複数のデータ書込み要求セットを受信し、複数のデータ書込み要求セットから、指定された数のデータ書込み要求セットを選択して、指定された数のデータ書込み要求セットのチェックデータを計算し、ここで、指定された数のデータ書込み要求セットは、複数のデータ書込み要求セットのサブセットであり、指定された数のデータ書込み要求セットは、異なるデータノード識別子を含む。
例えば、記憶ノードCは、チェック計算ノードとして使用される。記憶ノードCは、記憶システム10内の任意の記憶ノード22と通信してよい。複数のデータ書込み要求セットを受信した後、記憶ノードCは、事前に設定されたチェックモードに従って、指定された数のデータ書込み要求セットを、複数のデータ書込み要求セットから選択し、指定された数のデータ書込み要求セットのチェックデータを計算する。5+1モードが例として使用される。複数の受信されたデータ書込み要求セットから、異なるデータノード由来の5個のデータ書込み要求セットを選択した後、記憶ノードCは、5個のデータ書込み要求セットのチェックデータを計算する。いくつかのケースでは、記憶ノードCは、ローカルに記憶されているデータ書込み要求セットのチェックデータを計算してよく、残りの4つのデータノードによって送信されるデータ書込み要求セットを受信する必要のみがある。
データ書込み要求セットを受信したとき、チェック計算ノードは、データ書込み要求セットを記憶し、データ書込み要求セットに識別子を割り当て、次いで、データ書込み要求セットの識別子を、リンクされたリストまたは別のデータ構造に書き込む。データ書込み要求セットの識別子は、データ書込み要求セット内のデータ書込み要求に含まれるデータノード識別子と同じであってよく、または、データ書込み要求セット内のデータ書込み要求に含まれるデータノード識別子とは異なってよい。データ書込み要求セットの識別子が、データ書込み要求セット内のデータ書込み要求に含まれるデータノード識別子とは異なる場合、チェック計算ノードは、データ書込み要求セットの識別子と、データノード識別子との間の対応関係を記憶する。実施では、データ書込み要求セットの識別子は、チェック計算ノードによって割り当てられる。識別子を割り当てた後、チェック計算ノードは、データ書込み要求セットの識別子を、データ書込み要求セットが配置されるデータノードに送信する。データノードは、データ書込み要求セットの識別子を記憶する。別の実施では、データ書込み要求セットの識別子は、データ書込み要求セットが配置されるデータノードによって割り当てられる。識別子を割り当てた後、データノードは、データ書込み要求セットの識別子を、チェック計算ノードに送信する。チェック計算ノードは、データ書込み要求セットの識別子を記憶する。
データ信頼性を保証するために、特定の数のデータ書込み要求セットを選択して、ストライプを形成するとき、チェック計算ノードは、同じストライプを形成する複数のデータ書込み要求セットは、異なるデータノード由来であることを保証する必要がある。5+1モードが例として使用される。チェック計算ノードは、リンクされたリストから、5個のデータ書込み要求セットを選択する必要がある。チェック計算ノードは、特定の時間に、複数のデータ書込み要求セットを受信してよく、データ書込み要求セットのいくつかは、同じデータノード由来であり得る。従って、チェック計算ノードは、5個のデータ書込み要求セットが異なるデータノード由来であることをさらに保証する必要がある。具体的には、チェック計算ノードは、データ書込み要求セットの識別子と、データノード識別子との間の記憶された対応関係に従って、または、データ書込み要求セットの識別子に直接従って、リンクされたリストから、5個のデータ書込み要求セットを選択してよい。データ書込み要求セットを選択して、ストライプを形成するとき、チェック計算ノードは、リンクされたリストにデータ書込み要求セットを書き込む順序を考慮する必要はないが、ストライプを形成する複数のデータ書込み要求セットが異なるデータノード由来であることを保証する必要のみがあることは留意されるべきである。
S206、チェック計算ノードは、チェックデータをチェックノードに送信し、ここで、チェックノードは、データ書込み要求セットを記憶するデータノードとは異なる。
具体的には、チェック計算ノードは、残りの記憶ノード(データ書込み要求セットを既に記憶するデータノードを除く)から、1つ以上の記憶ノードを選択し、チェックデータを記憶してよい。チェックデータを記憶するように構成される記憶ノードは、本実施形態ではチェックノードと呼ばれる。チェックノードは、指定された数のデータ書込み要求セットが配置されるデータノードのいずれとも同じであることはできない。これは、ストライプに含まれるデータ書込み要求セットとチェックデータの両方が、記憶ノード上で障害が発生したときに失われることを防ぐために意図される。チェックデータを記憶するように構成される選択された記憶ノードは、現在のストライプ内のデータ書込み要求セットを記憶するデータノードであることはできないが、別のストライプ内のデータ書込み要求セットを記憶するデータノードであってよい。本実施形態では、記憶ノードは、データ書込み要求セットまたはチェックデータの記憶専用記憶であるようには限定されない。
加えて、チェック計算ノードは、ストライプ識別子を各ストライプに割り当てる。異なるストライプは異なるストライプ識別子を有する。さらに、ホストは、識別子を、各ストライプに含まれるデータ書込み要求セットおよびチェックデータに割り当て、データ書込み要求セットの識別子を、データ書込み要求セットが配置されるデータノードに送信する。あるいは、各データノードは、記憶されたデータ書込み要求セットに識別子を割り当て、データ書込み要求セットの識別子を、チェック計算ノードに送信する。チェック計算ノードは、各ストライプのストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係と、ストライプ識別子と、チェックデータの識別子との間の対応関係とを記録する。
図6に示されるデータチェック方法によると、全ての蓄積されたデータ書込み要求のサイズが事前に設定されたデータ量に達したとき、各データノードは、これらのデータ書込み要求を、チェック計算ノードに1つのデータ書込み要求セットとして送信する。チェック計算ノードは、複数の受信されたデータ書込み要求セットから、指定された数のデータ書込み要求セットを選択し、指定された数のデータ書込み要求セットのチェックデータを計算し、記憶のために、チェックデータをチェックノードに送信する。従って、データ信頼性は保証される。各データ書込み要求セットは、同じデータノード識別子を有する複数のデータ書込み要求を含み、各データ書込み要求が書き込まれるべきデータノードは、データ書込み要求内のデータまたはデータ書込み要求内の、データが書き込まれるべき論理アドレスに従って、ホストによって選択される。従って、各データ書込み要求セットは、同じタイプのデータ書込み要求を含む。同じタイプのデータ書込み要求においてデータを同時に読み出す可能性は比較的高い。従って、データは、1つのデータノードから読み出されることができ、クロスノード読出し操作は、実行される必要はなく、それによって、データ読出し効率を改善する。
図4、図5または図6に示されるデータチェック方法では、同じタイプのデータ書込み要求が同じデータノードに書き込まれる。データ書込み要求をデータノードに書き込んだ後、データノードはさらに、メタデータを作成および記憶する必要がある。
メタデータは、データ書込み要求セットの識別子と、各データ書込み要求内のデータが書き込まれるべき論理アドレスとの間の対応関係を含む。メタデータは、データ書込み要求セット内の各データ書込み要求の位置をさらに含む。本実施形態では、データ書込み要求セット内の各データ書込み要求の位置は、内部オフセットと呼ばれる。例えば、データ書込み要求セットと、データ書込み要求セットに含まれる各データ書込み要求内のデータが書き込まれるべき論理アドレスとの間の対応関係は、表1に示される。
前述の表に示されるように、識別子“1”を持つデータ書込み要求セットは、3つのデータ書込み要求を含む。各データ書込み要求はデータを含むだけでなく、データが書き込まれるべき論理アドレスも含む。加えて、各データ書込み要求は、データ書込み要求セット内部の対応する位置を有する。第1のデータ書込み要求が例として使用される。データ書込み要求の論理アドレスは、ボリュームID、LBAおよび長さを含む。ボリュームIDは0x1であり、LBAは0x100であり、長さは4096である。データ書込み要求は、識別子“1”を持つデータ書込み要求セットに属し、データ書込み要求セット内の位置は0x1000である。
ホストが、複数のデータ書込み要求を複数のデータユニットに分類し、複数のデータユニットのチェックデータを計算し、次いで、データユニットおよびチェックデータを、記憶のために、記憶システム内の複数の記憶ノードに送信する場合、メタデータ(データ書込み要求とデータユニットとの間の対応関係)はホスト内に記憶される。ガベージコレクション等の操作が記憶ノード内のデータユニットに対してその後実行されるとき、メタデータを変更するために、メッセージが、ホストに送信される必要がある。従って、操作は複雑であり、帯域幅が消費される。
しかしながら、本実施形態では、同じタイプのデータ書込み要求は1つのデータノードに1つのデータ書込み要求セットとして記憶される。従って、データ書込み要求セットに関するメタデータはまた、データノード内にローカルに記憶される。ガベージコレクション等の操作がデータ書込み要求セットに対してその後実行される場合、メタデータは、ローカルに直接変更されることができる。
メタデータは、データノードのメモリ226内に記憶されてよい。メタデータの信頼性を保証するために、各データノードにおけるメタデータのチェックデータはまた、計算されて記憶される必要がある。具体的には、データノードによって受信されるデータ書込み要求が増加し、メモリ226内に記憶されるメタデータも増加する。メモリ226内の蓄積されたメタデータのサイズが事前に設定されたデータ量に達したとき、データノードは、メタデータセットをメタデータチェック計算ノードに送信する。メタデータセットは、そのサイズが事前に設定されたデータ量に達したメタデータである。事前に設定されたデータ量は、記憶システム10によって事前に設定されてよく、例えば、16 KBである。メタデータチェック計算ノードは、メタデータセットのチェックデータを計算するように構成される記憶ノードである。実際の実施では、メタデータチェック計算ノードは、チェック計算ノードと同じであってよい。加えて、本実施形態では、データノード22は、メタデータセットをメタデータチェック計算ノードに送信するだけでなく、データノードの識別子を、メタデータチェック計算ノードに送信する必要もある。メタデータセットおよび識別子は、送信するために、1つのメッセージにカプセル化されてよく、または、別々に送信されてよい。
メタデータチェック計算ノードは、データノードによって送信される、メタデータセットおよび各データノードの識別子を受信し、各メタデータセットに識別子を割り当て、メタデータセットの識別子とデータノードの識別子との間の対応関係を記憶する。メタデータの信頼性を保証するために、メタデータチェック計算ノードは、メタデータセットのチェックデータを計算する。具体的には、メタデータチェック計算ノードは、メタデータセットの識別子と、データノードの識別子との間の対応関係に従って、複数のメタデータセットから、指定された数のメタデータセットを選択し、指定された数の選択されたメタデータセットのチェックデータを計算する。選択されたメタデータセットは、異なるデータノード識別子に対応している必要がある。
前述の説明と同様に、指定された数は、記憶システム10によって事前に設定されたチェックモードに従って決定される。メタデータセットのチェックモードは、データ書込み要求セットのチェックモードと同じであっても異なってもよいことは留意されるべきである。
メタデータチェック計算ノードは、記憶システム10内で、記憶ノードをメタデータチェックノードとして選択し、メタデータセットのチェックデータをメタデータチェックノードに送信してよい。選択されたメタデータチェックノードは、メタデータセットを記憶するように構成されるデータノードとは異なる。しかしながら、選択されたメタデータチェックノードは、別のストライプにおけるメタデータセットを記憶するデータノードであってよい。本実施形態では、データノードは、メタデータセットまたはメタデータセットのチェックデータの記憶専用であるようには限定されない。
各データノードのメモリ226に記憶されたデータの合計量が特定の閾値に達したとき、データノードは、メモリ226内のデータをソリッドステートディスク222に書き込む必要がある。この場合、データノード内のコントローラ221は、各データ書込み要求セットを粒度として使用することによって、各データ書込み要求セットに、データ書込み要求セットをソリッドステートディスクに書き込むための論理アドレスを割り当て(本実施形態では、ハードディスク論理アドレスと呼ばれる)、データ書込み要求セットの識別子と、割り当てられたハードディスク論理アドレスとの間の対応関係を記憶してよい。ソリッドステートディスク222は、コントローラ221によって送信されたデータ書込み要求セットと、データ書込み要求セットをソリッドステートディスクに書き込むための、且つ、データ書込み要求セットに割り当てられた論理アドレスとを受信し、データ書込み要求セットを、1つ以上のブロック(英語:block)に書き込む。加えて、ソリッドステートディスク222は、データ書込み要求セットをソリッドステートディスクに書き込むための、且つ、データ書込み要求セットに割り当てられた論理アドレスと、実際のアドレスとの間の対応関係を記憶する。実際のアドレスは、ソリッドステートディスク内のデータの物理アドレスであってよく、または、物理アドレスに基づいて仮想化され、且つ、ソリッドステートディスクに対してのみ可視的なアドレスであってよい。
ある期間の後、各データノードによって記憶されたデータ書込み要求セット内のいくつかのデータは、無効データになってよい。データの有効性は、データが変更されているかどうかに従って決定される。データが最初にデータノードに書き込まれる場合、データは有効として記録されてよい(有効データと呼ばれる)。データが変更される場合、データは、無効として記録される(無効データと呼ばれる)。表1が例として使用される。識別子1を持つデータ書込み要求セットが配置されるデータノードが第4のデータ書込み要求を受信し、且つ、第4のデータ書込み要求内のデータが書き込まれるべき論理アドレスは、第1のデータ書込み要求内のデータが書き込まれるべき論理アドレスと同じであるとき、第4のデータ書込み要求は、第1のデータ書込み要求を上書きするために使用されることを示す。ソリッドステートディスクの書込み特性により、第1のデータ書込み要求内のデータ(古いデータ)は、第4のデータ書込み要求内のデータ(新しいデータ)によって直接上書きされないが、ソリッドステートディスク上のブランクブロックが割り当てられ、新しいデータはブランクブロックに書き込まれる。従って、第1のデータ書込み要求内のデータは無効データになる。これはまた、識別子1を持つデータ書込み要求セット内のいくつかのデータが無効データになることを意味する。データノードは、各データ書込み要求セットに含まれる無効データに関する情報を記録するためにビットマップを使用してよい。無効データに関する情報は、無効データが書き込まれるべき論理アドレスおよび無効データのデータ量を含む。例えば、ビットマップの各“ビット”は、1KBのサイズを有し、且つ、データが書き込まれるべき論理アドレスに対応している。“ビット”1は、論理アドレスに記憶されるデータが有効であることを示し、“ビット”0は、論理アドレスに記憶されるデータが無効であることを示す。
無効データが増加するにつれて、データノードは、体系的なガベージコレクション操作を実行する必要がある。体系的なガベージコレクションは、ストライプ単位で実行され、ストライプに含まれるデータ書込み要求セットは、データノードに分配される。従って、体系的なガベージコレクションは、データノード内部のデータ書込み要求セット単位で実行される。記憶システム10は、ガベージコレクションノードをさらに含む。ガベージコレクションノードは、記憶ノード22内の、体系的なガベージコレクション操作を実行するように構成されるノードである。図7は、体系的なガベージコレクション方法の概略フローチャートである。図7に示されるように、方法は以下のステップを含んでよい。
S301.ガベージコレクションノードは、各ストライプに含まれるデータ書込み要求セットのビットマップに従って、複数のストライプから、再利用されるべきストライプを選択する。
第1の適用シナリオでは、ホスト11は、ストライプの識別子と、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係とを、ガベージコレクションノードに送信する。第2の適用シナリオでは、チェック計算ノードは、ストライプの識別子と、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係とを、ガベージコレクションノードに送信する。加えて、第1の適用シナリオか第2の適用シナリオかに関わらず、データノードは、データ書込み要求セットのビットマップを、ガベージコレクションノードに送信する必要がある。
ガベージコレクションノードは、複数のストライプから、再利用されるべきストライプを選択する必要がある。体系的なガベージコレクション操作の最高の効率を保証するために、ガベージコレクションノードは、通常、最大量の無効データを含むストライプを、再利用されるべきストライプとして選択する。従って、各ストライプに含まれる無効データのデータ量に対する統計が収集される必要がある。具体的には、ガベージコレクションノードは、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係に従って、ストライプに含まれる全てのデータ書込み要求セットを決定し、次いで、ストライプに含まれる無効データの量を決定するために、各データ書込み要求セットのビットマップに従って、各データ書込み要求セットに含まれる無効データのデータ量を決定してよい。従って、ガベージコレクションノードは、最大量の無効データを含むストライプを、再利用されるべきストライプとして使用してよい。加えて、本実施形態では、再利用されるべきストライプは、別の条件に従って選択されてよい。例えば、体系的なガベージコレクション操作が長時間実行されていないストライプが選択され、または、体系的なガベージコレクションは、事前に設定された順序に従って、様々なストライプに対して順次実行される。
S302.ガベージコレクションノードは、各データ書込み要求セットが配置されるデータノードに、ガベージコレクション通知メッセージを送信する。
上述のように、ガベージコレクションノードは、ストライプ識別子と、ストライプ識別子と、ストライプに含まれる各データ書込み要求セットの識別子との間の対応関係に従って、各ストライプに含まれるデータ書込み要求セットの識別子を決定してよい。次いで、ガベージコレクション通知メッセージを、各データ書込み要求セットが配置されるデータノードに送信するために、データ書込み要求セットの識別子と、データノードの識別子との間の対応関係に従って、各データ書込み要求セットが配置されるデータノードが決定される(データ書込み要求セットの識別子が、データノードの識別子と一貫している場合、各データ書込み要求セットが配置されるデータノードは、データ書込み要求セットの識別子に従って直接決定されてよい)。メッセージは、データノードに、データ書込み要求セットに対して、体系的なガベージコレクション操作を実行するように命令するために使用される。メッセージは、データ書込み要求セットの識別子を含む。
S303.各データノードは、ガベージコレクション通知メッセージを受信し、メッセージ内で搬送される、データ書込み要求セットの識別子に従って、再利用されるべきデータ書込み要求セットを決定する。次いで、各データノードは、再利用されるべきデータ書込み要求セットのビットマップに従って、再利用されるべきデータ書込み要求セットに含まれている有効データおよび無効データを決定する。例えば、表1における第1のデータ書込み要求内のデータは無効データになる。第2のデータ書込み要求内のデータおよび第3のデータ書込み要求内のデータは依然として有効データである。
S304.各データノードは、再利用されるべきデータ書込み要求セット内の有効データを、新しいデータ書込み要求セット内に移動して、データ書込み要求セットを再利用する。
有効データを新しいデータ書込み要求セット内に移動することは、新しいデータ書込み要求セット内に、有効データが配置されるデータ書込み要求を結合することである。例えば、表1における第2のデータ書込み要求および第3のデータ書込み要求は、ソリッドステートディスク222からメモリ226内に読み出される(第2のデータ書込み要求または第3のデータ書込み要求が既にメモリ226内に記憶されている場合、この操作は実行される必要はない)。メモリ226内に記憶された全てのデータ書込み要求のサイズが事前に設定されたデータ量に再び達した後、新しいデータ書込み要求セットが結合によって生成される。具体的には、データノードは、次いで、再利用されるべきデータ書込み要求セットのビットマップに従って、データ書込み要求セットに含まれる有効データが書き込まれるべき論理アドレス(ここでの論理アドレスは、データが書き込まれるべき論理アドレスである)を決定し、有効データが書き込まれるべき論理アドレスと、データ書込み要求セットの識別子との間の対応関係を削除し、有効データが書き込まれるべき論理アドレスと、新しいデータ書込み要求セットの識別子との間の対応関係を記憶する。メタデータは、データノードにローカルに記憶される。従って、体系的なガベージコレクションを実行した後、データノードは、メタデータをローカルに直接変更することができ、クロスノード操作は、実行される必要がない。次いで、データノードは、再利用されるべきデータ書込み要求セットのハードディスク論理アドレスを、ソリッドステートディスクに送信し、ソリッドステートディスクは、ハードディスク論理アドレスに対応しているブロックを無効として記録する。その後内部ガベージコレクションを実行するとき、ソリッドステートディスクは、これらのブロックを直接消去することができ、有効データを複製する必要はない。従って、ソリッドステートディスクに対して内部で実行される書込み増幅の回数は低減される。加えて、データノードは、再利用されるべきデータ書込み要求セットの識別子と、割り当てられたハードディスク論理アドレスとの間の対応関係を削除する必要がさらにある。ストライプに含まれる全てのデータ書込み要求セットが再利用されるとき、このストライプに含まれるチェックデータはもはや必要とされず、ガベージコレクションノードは、チェックノードに、チェックデータを削除するように命令してよい。
本実施形態で提供される体系的なガベージコレクションは、各データノードが、有効データを、別のローカルデータ書込み要求セット内に結合することを意味する。従って、データノードは、体系的なガベージコレクションを独立して完了し、データを別のデータノードと交換する必要はなく、それによって、データノード間の帯域幅を節約する。
当業者は、本発明の各態様または各態様の可能な実施は、具体的には、システム、方法またはコンピュータプログラム製品として実施されてよいことを理解することができる。従って、本発明の各態様または各態様の可能な実施は、ハードウェアのみの実施形態、ソフトウェアのみの実施形態(ファームウェア、常駐ソフトウェア等を含む)、またはソフトウェアとハードウェアとの組合せの実施形態の形態を採用してよく、本明細書では、これらは一様に“回路”、“モジュール”または“システム”と呼ばれる。加えて、本発明の各態様または各態様の可能な実施は、コンピュータプログラム製品の形態をとってよく、ここで、コンピュータプログラム製品は、コンピュータ可読記憶媒体に記憶されるコンピュータ可読プログラムコードである。
コンピュータ可読記憶媒体は、ランダムアクセスメモリ(RAM)、読出し専用メモリ(ROM)、消去可能プログラマブル読出し専用メモリ(EPROM)および光ディスク等の、電子的、磁気的、光学的、電磁的、赤外線の、または半導電性のシステム、デバイスまたは装置、またはそれらの任意の適切な組合せを含むが、それらに限定されない。
コンピュータ内のプロセッサは、コンピュータ可読記憶媒体に記憶されるコンピュータ可読プログラムコードを読み出し、その結果、プロセッサは、フローチャート内の各ステップまたは各ステップの組合せで特定される機能的動作を実行することができる。
コンピュータ可読プログラムコードは、ユーザのコンピュータ上で完全に実行されてよく、ユーザのコンピュータ上で部分的に実行されてよく、スタンドアロン型ソフトウェアパッケージとして実施されてよく、ユーザのコンピュータ上で部分的に実施されるとともにリモートコンピュータ上で部分的に実施されてよく、または、リモートコンピュータまたはサーバ上で完全に実行されてよい。いくつかの代替的な実施の解決手段では、フローチャート内のステップまたはブロック図内のブロックによって示される機能は、フローチャートまたはブロック図内で示される順序で実施されなくてよいこともまた留意されるべきである。例えば、関係する機能に依存し、且つ順序で示される2つのステップまたはブロックは、実際には同時に実行されてよく、または、時にはこれらのブロックは逆順で実行されてよい。
当業者は、本明細書で開示される実施形態で説明される例と組み合わせて、ユニットおよびアルゴリズムステップは、電子ハードウェアまたはコンピュータソフトウェアと電子ハードウェアとの組合せによって実施されてよいことを認識することができる。機能がハードウェアによって実行されるかソフトウェアによって実行されるかは、技術的解決手段の特定の適用および設計の制約条件に依存する。当業者は、各特定の適用に対して説明された機能を実施するために、異なる方法を使用してよいが、実施は、本発明の保護を超えると考えられるべきではない。
前述の説明は、単に、本発明の具体的な実施であるが、本発明の保護範囲を限定するように意図されない。本発明で開示された技術的範囲内で、当業者によって容易に理解される任意の変更または置換は、本発明の保護範囲に包含されるべきである。従って、本発明の保護範囲は、請求項の保護範囲に従うべきである。
11 ホスト
22 記憶ノード
118 プロセッサ
120 キャッシュ
122 メモリ
124 プログラム
126 バス
128 通信インタフェース
211 コントローラ
222 ソリッドステートディスク
223 インタフェースカード
224 インタフェースカード
225 プロセッサ
226 メモリ